diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md deleted file mode 100644 index 40a0a94..0000000 --- a/.claude/CLAUDE.md +++ /dev/null @@ -1,74 +0,0 @@ -# Technical Documentation Guidelines - -You are an expert technical writer with deep expertise in creating clear, concise, and well-structured documentation. Your goal is to produce documentation that flows naturally while maintaining technical accuracy. - -## Core Principles - -### 1. Conciseness and Clarity -- Use clear, direct language -- Eliminate unnecessary words and redundancy -- Make every sentence count -- Prefer active voice over passive voice -- Use short paragraphs (3-5 sentences maximum) - -### 2. Structure and Organization -- Start with the most important information -- Use logical hierarchies with consistent heading levels -- Group related concepts together -- Provide clear navigation through table of contents when appropriate -- Use lists for sequential steps or related items - -### 3. Flow and Readability -- Ensure smooth transitions between sections -- Connect ideas logically -- Build complexity gradually -- Use examples to illustrate concepts -- Maintain consistent terminology throughout - -### 4. Technical Accuracy -- Be precise with technical terms -- Include relevant code examples that are tested and functional -- Document edge cases and limitations -- Provide accurate command syntax and parameters -- Link to related documentation when appropriate - -## Documentation Structure - -### Standard Document Layout -1. **Title** - Clear, descriptive heading -2. **Overview** - Brief introduction (2-3 sentences) -3. **Prerequisites** - What the reader needs to know or have -4. **Main Content** - Organized in logical sections -5. **Examples** - Practical, real-world use cases -6. **Troubleshooting** - Common issues and solutions (when applicable) -7. **Related Resources** - Links to additional documentation - -### Code Examples -- Provide complete, runnable examples -- Include comments for complex logic -- Show expected output -- Use consistent formatting and syntax highlighting - -### Commands and APIs -- Show full syntax with all parameters -- Indicate required vs optional parameters -- Provide parameter descriptions -- Include return values or output format - -## Writing Style - -- **Be direct**: "Configure the database" not "You should configure the database" -- **Be specific**: "Set timeout to 30 seconds" not "Set an appropriate timeout" -- **Be consistent**: Use the same terms for the same concepts -- **Be complete**: Don't assume implicit knowledge; explain as needed - -## When Uncertain - -**If you don't know something or need clarification:** -- Ask specific questions -- Request examples or use cases -- Clarify technical details or edge cases -- Verify terminology and naming conventions -- Confirm target audience and their expected knowledge level - -Your expertise is in writing excellent documentation. Use your judgment to create documentation that serves the reader's needs effectively. When in doubt, ask rather than guess. diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index ba5225d..0000000 --- a/.dockerignore +++ /dev/null @@ -1,22 +0,0 @@ -.github -.gitignore -.vscode -.devbox -.devcontainer -node_modules -public -resources -tmp -*.md -!content/**/*.md -TESTING.md -Taskfile.yml -devbox.json -devbox.lock -.hugo_build.lock -.htmltest.yml -.htmlvalidate.json -.markdownlint.json - -# Ensure package-lock.json is included for npm ci -!package-lock.json diff --git a/.env.versions b/.env.versions deleted file mode 100644 index 25ceae4..0000000 --- a/.env.versions +++ /dev/null @@ -1,9 +0,0 @@ -# Tool versions for development and CI/CD -# These versions are used in: -# - devbox.json (pinned versions) -# - Dockerfile (build arguments) -# - .github/workflows/ci.yaml (CI/CD pipeline) - -NODE_VERSION=24.10.0 -GO_VERSION=1.25.1 -HUGO_VERSION=0.151.0 diff --git a/.envrc.example b/.envrc.example deleted file mode 100644 index 3550a30..0000000 --- a/.envrc.example +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 042cdda..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,79 +0,0 @@ -name: ci - -on: - push: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - - name: Load versions from .env.versions - id: versions - run: | - # Source the versions file - set -a - source .env.versions - set +a - - echo "node_version=${NODE_VERSION}" >> "$GITHUB_OUTPUT" - echo "go_version=${GO_VERSION}" >> "$GITHUB_OUTPUT" - echo "hugo_version=${HUGO_VERSION}" >> "$GITHUB_OUTPUT" - - echo "Node: ${NODE_VERSION}" - echo "Go: ${GO_VERSION}" - echo "Hugo: ${HUGO_VERSION}" - - - name: Repository meta - id: repository - run: | - registry=${{ github.server_url }} - registry=${registry##http*://} - echo "registry=${registry}" >> "$GITHUB_OUTPUT" - echo "registry=${registry}" - repository="$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')" - echo "repository=${repository}" >> "$GITHUB_OUTPUT" - echo "repository=${repository}" - - - name: Docker meta - uses: docker/metadata-action@v5 - id: docker - with: - images: ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }} - tags: | - type=sha,prefix= - type=ref,event=tag - - - name: Login to registry - uses: docker/login-action@v3 - with: - registry: ${{ steps.repository.outputs.registry }} - username: "${{ secrets.PACKAGES_USER }}" - password: "${{ secrets.PACKAGES_TOKEN }}" - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - buildkitd-flags: '--allow-insecure-entitlement network.host' - driver-opts: network=host - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - push: true - allow: network.host - network: host - tags: ${{ steps.docker.outputs.tags }} - labels: ${{ steps.docker.outputs.labels }} - build-args: | - NODE_VERSION=${{ steps.versions.outputs.node_version }} - GO_VERSION=${{ steps.versions.outputs.go_version }} - HUGO_VERSION=${{ steps.versions.outputs.hugo_version }} diff --git a/.github/workflows/delete-edge.yaml b/.github/workflows/delete-edge.yaml deleted file mode 100644 index d7f6c5d..0000000 --- a/.github/workflows/delete-edge.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: delete-edge - -on: - workflow_run: - workflows: [build] - types: - - completed - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Replace Image Version - run: | - sha="${{ github.sha }}" - shortSha="${sha:0:7}" - echo "Setting image version to: edp.buildth.ing/devfw-cicd/website-and-documentation:${shortSha}" - sed -i "s@###IMAGETAG###@edp.buildth.ing/devfw-cicd/website-and-documentation:${shortSha}@g" ./k8s-deployment.yaml - - - name: Delete action - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-delete-action@main - id: delete - with: - configFile: ./edgeconnectdeployment.yaml - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} diff --git a/.github/workflows/deploy-edge.yaml b/.github/workflows/deploy-edge.yaml deleted file mode 100644 index bafe431..0000000 --- a/.github/workflows/deploy-edge.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: deploy-edge - -on: - workflow_run: - workflows: [build] - types: - - completed - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Replace Image Version - run: | - sha="${{ github.sha }}" - shortSha="${sha:0:7}" - echo "Setting image version to: edp.buildth.ing/devfw-cicd/website-and-documentation:${shortSha}" - sed -i "s@###IMAGETAG###@edp.buildth.ing/devfw-cicd/website-and-documentation:${shortSha}@g" ./k8s-deployment.yaml - - - name: Deploy action - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action@main - id: deploy - with: - configFile: ./edgeconnectdeployment.yaml - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 50db5ca..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,149 +0,0 @@ -name: release - -on: - push: - tags: - - 'v*.*.*' # Triggert auf Semantic Versioning Tags (v1.0.0, v2.1.3, etc.) - -permissions: - contents: write - packages: write - -jobs: - release: - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - - name: Load versions from .env.versions - id: versions - run: | - set -a - source .env.versions - set +a - - echo "node_version=${NODE_VERSION}" >> "$GITHUB_OUTPUT" - echo "go_version=${GO_VERSION}" >> "$GITHUB_OUTPUT" - echo "hugo_version=${HUGO_VERSION}" >> "$GITHUB_OUTPUT" - - echo "Node: ${NODE_VERSION}" - echo "Go: ${GO_VERSION}" - echo "Hugo: ${HUGO_VERSION}" - - - name: Extract version from tag - id: version - run: | - VERSION=${GITHUB_REF#refs/tags/v} - echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - echo "Version: ${VERSION}" - - - name: Repository meta - id: repository - run: | - registry=${{ github.server_url }} - registry=${registry##http*://} - echo "registry=${registry}" >> "$GITHUB_OUTPUT" - echo "registry=${registry}" - repository="$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')" - echo "repository=${repository}" >> "$GITHUB_OUTPUT" - echo "repository=${repository}" - - - name: Docker meta - uses: docker/metadata-action@v5 - id: docker - with: - images: ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }} - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=raw,value=latest - - - name: Login to registry - uses: docker/login-action@v3 - with: - registry: ${{ steps.repository.outputs.registry }} - username: "${{ secrets.PACKAGES_USER }}" - password: "${{ secrets.PACKAGES_TOKEN }}" - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - buildkitd-flags: '--allow-insecure-entitlement network.host' - driver-opts: network=host - - - name: Build and push release images - uses: docker/build-push-action@v6 - with: - context: . - push: true - allow: network.host - network: host - platforms: linux/amd64,linux/arm64 - tags: ${{ steps.docker.outputs.tags }} - labels: ${{ steps.docker.outputs.labels }} - build-args: | - NODE_VERSION=${{ steps.versions.outputs.node_version }} - GO_VERSION=${{ steps.versions.outputs.go_version }} - HUGO_VERSION=${{ steps.versions.outputs.hugo_version }} - - - name: Generate changelog - id: changelog - run: | - # Finde vorheriges Tag - PREVIOUS_TAG=$(git describe --abbrev=0 --tags ${GITHUB_REF}^ 2>/dev/null || echo "") - - if [ -z "$PREVIOUS_TAG" ]; then - echo "Erster Release - Changelog von Anfang an" - CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges) - else - echo "Changelog seit ${PREVIOUS_TAG}" - CHANGELOG=$(git log ${PREVIOUS_TAG}..${GITHUB_REF} --pretty=format:"- %s (%h)" --no-merges) - fi - - # Schreibe in Output-Datei (multiline) - { - echo 'changelog<> "$GITHUB_OUTPUT" - - - name: Create Forgejo/Gitea Release - uses: actions/forgejo-release@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - direction: upload - release-dir: . - title: "Release ${{ steps.version.outputs.version }}" - tag: ${{ github.ref_name }} - token: ${{ secrets.GITHUB_TOKEN }} - release-notes: | - # Release ${{ steps.version.outputs.version }} - - ## Docker Images - - Multi-platform images (linux/amd64, linux/arm64) sind verfügbar: - - ```bash - docker pull ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}:${{ steps.version.outputs.version }} - docker pull ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}:latest - ``` - - ## Build Versions - - - Node.js: ${{ steps.versions.outputs.node_version }} - - Go: ${{ steps.versions.outputs.go_version }} - - Hugo: ${{ steps.versions.outputs.hugo_version }} - - ## Changes - - ${{ steps.changelog.outputs.changelog }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 618b688..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Hugo Site Tests - -on: -# push: -# branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - - name: Setup Hugo - uses: peaceiris/actions-hugo@v3 - with: - hugo-version: 'latest' - extended: true - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: '24' - cache: 'npm' - - - name: Install dependencies - run: | - npm ci - go install github.com/wjdp/htmltest@latest - - - name: Run tests - run: | - npm run test:build - npm run test:markdown - npm run test:html - - - name: Run link checker - run: htmltest - continue-on-error: true - - - name: Upload htmltest results - uses: actions/upload-artifact@v4 - if: always() - with: - name: htmltest-report - path: tmp/.htmltest/ diff --git a/.gitignore b/.gitignore index 6dd8916..3b13a74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,41 +1,7 @@ -# Hugo .hugo_build.lock -public/ -resources/_gen/ +public -# Node.js / NPM -node_modules/ +# for npm devcontainer cli +package-lock.json +package.json -# Test outputs -tmp/ -.htmltest/ - -# devbox -.devbox/ - -# Task cache -.task/ - -# Generated build data -data/ - -# IDE -.vscode/ -.idea/ -*.swp -*.swo -*~ - -# OS -.DS_Store -Thumbs.db - -# Logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -### direnv ### -.direnv -.envrc diff --git a/.htmltest.yml b/.htmltest.yml deleted file mode 100644 index 14d9f70..0000000 --- a/.htmltest.yml +++ /dev/null @@ -1,24 +0,0 @@ -DirectoryPath: "public" -CheckExternal: true -CheckInternalHash: true -IgnoreURLs: - - "^https://example\\.docsy\\.dev" - - "^https://example\\.com" - - "^http://localhost" - - "^/livereload\\.js" - - "^https://cnoe\\.localtest\\.me" - - "^https://technologyconversations\\.com" - - "^https://developers\\.redhat\\.com" - - "^https://platformengineering\\.org" - - "^https://cnoe\\.io" - - "^https://console\\.otc\\.t-systems\\.com" -IgnoreInternalURLs: - - "/docs-old/" - - "/blog/" - - "/docs/v1/" - - "/docs/architecture/" - - "/docs/documentation/" -IgnoreInternalEmptyHashes: true -IgnoreDirectoryMissingTrailingSlash: true -IgnoreAltMissing: true -CheckDoctype: true diff --git a/.htmlvalidate.json b/.htmlvalidate.json deleted file mode 100644 index be028ca..0000000 --- a/.htmlvalidate.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "extends": ["html-validate:recommended"], - "rules": { - "no-inline-style": "off", - "require-sri": "off", - "no-trailing-whitespace": "off", - "void-style": "off", - "wcag/h30": "off", - "wcag/h32": "off", - "wcag/h37": "off", - "no-redundant-role": "off", - "unique-landmark": "off", - "no-multiple-main": "off", - "no-dup-id": "off", - "element-permitted-content": "off", - "attr-quotes": "off", - "empty-heading": "off", - "element-required-content": "off", - "long-title": "off", - "no-raw-characters": "off", - "valid-id": "off", - "doctype-style": "off" - }, - "elements": [ - "html5" - ] -} diff --git a/.markdownlint.json b/.markdownlint.json deleted file mode 100644 index 8c37aec..0000000 --- a/.markdownlint.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "default": true, - "MD013": false, - "MD033": false, - "MD041": false, - "MD024": { "siblings_only": true }, - "MD025": { "front_matter_title": "" } -} diff --git a/.markdownlintignore b/.markdownlintignore deleted file mode 100644 index cf2c9fb..0000000 --- a/.markdownlintignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore v1 documentation (legacy content with pre-existing lint issues) -content/en/docs/v1/** -content/en/blog/** -content/en/docs-old/** diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 6212e98..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "peacock.remoteColor": "#61dafb", - "workbench.colorCustomizations": { - "activityBar.activeBackground": "#93e6fc", - "activityBar.background": "#93e6fc", - "activityBar.foreground": "#15202b", - "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#fa45d4", - "activityBarBadge.foreground": "#15202b", - "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#93e6fc", - "statusBar.background": "#61dafb", - "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#2fcefa", - "statusBarItem.remoteBackground": "#61dafb", - "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#61dafb", - "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#61dafb99", - "titleBar.inactiveForeground": "#15202b99" - } -} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index dd480d0..0000000 --- a/Dockerfile +++ /dev/null @@ -1,69 +0,0 @@ -# Build arguments for version pinning (matching devbox.json) -ARG NODE_VERSION=24.10.0 -ARG GO_VERSION=1.25.1 -ARG HUGO_VERSION=0.151.0 - -# Build stage - use same versions as local devbox environment -FROM node:${NODE_VERSION}-bookworm AS builder - -# Get target architecture for multi-platform builds -ARG TARGETARCH - -# Install Git (needed for Hugo's enableGitInfo) -RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* - -# Install Go (map TARGETARCH: amd64->amd64, arm64->arm64) -ARG GO_VERSION -RUN wget -q https://go.dev/dl/go${GO_VERSION}.linux-${TARGETARCH}.tar.gz && \ - tar -C /usr/local -xzf go${GO_VERSION}.linux-${TARGETARCH}.tar.gz && \ - rm go${GO_VERSION}.linux-${TARGETARCH}.tar.gz - -ENV PATH="/usr/local/go/bin:${PATH}" -ENV GOPATH="/go" -ENV PATH="${GOPATH}/bin:${PATH}" - -# Install Hugo extended (map TARGETARCH: amd64->amd64, arm64->arm64) -ARG HUGO_VERSION -RUN wget -q https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \ - tar -xzf hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \ - mv hugo /usr/local/bin/ && \ - rm hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \ - hugo version - -WORKDIR /src - -# Copy package files and install npm dependencies -COPY package*.json ./ -RUN npm ci - -# Copy all source files -COPY . . - -# Build Hugo site (Git info wird aus dem aktuellen Kontext genommen, nicht aus .git) -# Hugo sucht nach .git, findet es nicht, und überspringt Git-Info automatisch -RUN hugo --gc --minify - -# Runtime stage - nginx to serve static content -FROM nginx:1.27-alpine - -# Copy built site from builder -COPY --from=builder /src/public /usr/share/nginx/html - -# Copy custom nginx config -RUN echo 'server {' > /etc/nginx/conf.d/default.conf && \ - echo ' listen 80;' >> /etc/nginx/conf.d/default.conf && \ - echo ' server_name _;' >> /etc/nginx/conf.d/default.conf && \ - echo ' root /usr/share/nginx/html;' >> /etc/nginx/conf.d/default.conf && \ - echo ' index index.html;' >> /etc/nginx/conf.d/default.conf && \ - echo '' >> /etc/nginx/conf.d/default.conf && \ - echo ' location / {' >> /etc/nginx/conf.d/default.conf && \ - echo ' try_files $uri $uri/ /index.html;' >> /etc/nginx/conf.d/default.conf && \ - echo ' }' >> /etc/nginx/conf.d/default.conf && \ - echo '' >> /etc/nginx/conf.d/default.conf && \ - echo ' gzip on;' >> /etc/nginx/conf.d/default.conf && \ - echo ' gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;' >> /etc/nginx/conf.d/default.conf && \ - echo '}' >> /etc/nginx/conf.d/default.conf - -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index 100ef85..7e55b7a 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,63 @@ -# EDP - Edge Developer Platform +# IPCEICIS-DeveloperFramework Documentation -Documentation for the edgeDeveloperFramework (eDF) project and the resulting Edge Developer Platform (EDP) product suite. +This repo contains business and architectural design and documentation of the DeveloperFramework subproject of IPCEI-CIS. -## Quick Start +## How to read and contribute to this documentation locally -```bash -# Install dependencies -task deps +The documentation is done in [Hugo-format](https://gohugo.io). -# Start local development server -task serve +The repo contains a [Hugo `.devcontainer`-defintion](https://containers.dev/) so that you just have to run locally an IDE which is devcontainer aware, e.g. Visual Studio code. -# Run tests -task test +### Installation -# Build production site -task build -``` +To get a locally running documentation editing and presentation environment, follow these steps: -## Documentation +1. open a terminal on your local box +2. clone this repo: `git clone https://bitbucket.telekom-mms.com/scm/ipceicis/ipceicis-developerframework.git ` +3. change to the repo working dir: `cd ipceicis-developerframework` +4. open the repo in an [Devcontainer-aware tool/IDE](https://containers.dev/supporting) (e.g. `code .`) +5. start the `devcontainer` (in VSC it's `F1 + Reopen in Devcontainer`) +6. when the container is up & running just open your browser with `http://localhost:1313/` -* [Developer Guide](doc/README-developer.md) -* [Technical Writer Guide](doc/README-technical-writer.md) -* [Release Notes](doc/RELEASE.md) +If you want to run the devcontainer without VS Code, you can use npn to run it inside a docker container: -## Project +1. install Node.js (>= Version 14), npm and the docker engine +2. install the devcontainer cli: `npm install -g @devcontainers/cli` +3. change into the folder of this repo +4. start the devcontainer by running: `devcontainer up --workspace-folder .` +5. find out the IP address of the devconatiner by using `docker ps` and `docker inspect ` +6. when the container is up & running just open your browser with `http://:1313/` -This is a Hugo-based documentation site for the Edge Developer Platform, built as part of the IPCEI-CIS project. +### Editing -**Website:** Access the documentation at the deployed URL or run locally with `task serve` +#### Documentation language -For detailed information, see the documentation in the `doc/` folder. +The documentation is done in [Docsy-Theme](https://www.docsy.dev/). + +So for editing content just goto the `content`-folder and edit content arrording to the [Docsy documentation](https://www.docsy.dev/docs/adding-content/) + +### Commiting + +After having finished a unit of work commit and push. + +## Annex + +### Installation steps illustrated + +When you run the above installation, the outputs could typically look like this: + +#### Steps 4/5 in Visual Studio Code + +##### Reopen in Container + +![vsc-f1](./assets/images/vsc-f1.png) + +##### Hugo server is running and (typically) listens to localhost:1313 + +After some installation time you have: + +![vsc-hugo](./assets/images/vsc-hugo.png) + +#### Steps 6 in a web browser + +![browser](./assets/images/browser.png) diff --git a/Taskfile.yml b/Taskfile.yml deleted file mode 100644 index c83f40d..0000000 --- a/Taskfile.yml +++ /dev/null @@ -1,225 +0,0 @@ -version: '3' - -vars: - HUGO_CMD: hugo - NPM_CMD: npm - -tasks: - default: - desc: Show available tasks - cmds: - - task --list - - # Build tasks - build: - desc: Build Hugo site - deps: - - deps:ensure-npm - - build:generate-info - cmds: - - "{{.HUGO_CMD}} --gc --minify" - - build:dev: - desc: Build Hugo site for development - deps: - - deps:ensure-npm - - build:generate-info - cmds: - - "{{.HUGO_CMD}}" - - build:generate-info: - desc: Generate build information (git commit, version, etc.) - sources: - - .git/HEAD - - .git/refs/**/* - generates: - - data/build_info.json - cmds: - - ./scripts/generate-build-info.sh - - serve: - desc: Start Hugo dev server - deps: - - deps:ensure-npm - - build:generate-info - cmds: - - "{{.HUGO_CMD}} server --noHTTPCache" - - clean: - desc: Clean build artifacts - cmds: - - rm -rf public resources/_gen .hugo_build.lock - - # Test tasks - test: - desc: Run all tests - deps: - - test:build - - test:markdown - - test:html - - likec4:validate - - test:hugo: - desc: Run Hugo-only tests (markdown, HTML, build) - deps: - - test:build - - test:markdown - - test:html - - test:full: - desc: Run all tests including link check (may have errors in legacy content) - deps: - - test:build - - test:markdown - - test:html - - test:links - - likec4:validate - - test:quick: - desc: Run quick tests (without link check) - deps: - - test:build - - test:markdown - - likec4:validate - - test:build: - desc: Test Hugo build - deps: - - deps:ensure-npm - - build:generate-info - cmds: - - "{{.HUGO_CMD}} --gc --minify --logLevel info" - - test:markdown: - desc: Lint markdown files - deps: - - deps:ensure-npm - cmds: - - "{{.NPM_CMD}} run test:markdown" - - test:html: - desc: Validate HTML - deps: - - deps:ensure-npm - cmds: - - "{{.NPM_CMD}} run test:html" - - test:links: - desc: Check links (skips legacy content) - cmds: - - | - # Move legacy dirs outside public temporarily - mkdir -p /tmp/htmltest-backup-$$ - if [ -d "public/docs-old" ]; then mv public/docs-old /tmp/htmltest-backup-$$/; fi - if [ -d "public/blog" ]; then mv public/blog /tmp/htmltest-backup-$$/; fi - if [ -d "public/_print/docs-old" ]; then mv public/_print/docs-old /tmp/htmltest-backup-$$/docs-old-print; fi - - # Run htmltest - htmltest || EXIT_CODE=$? - - # Restore directories - if [ -d "/tmp/htmltest-backup-$$/docs-old" ]; then mv /tmp/htmltest-backup-$$/docs-old public/; fi - if [ -d "/tmp/htmltest-backup-$$/blog" ]; then mv /tmp/htmltest-backup-$$/blog public/; fi - if [ -d "/tmp/htmltest-backup-$$/docs-old-print" ]; then mv /tmp/htmltest-backup-$$/docs-old-print public/_print/docs-old; fi - rm -rf /tmp/htmltest-backup-$$ - - # Exit with the original exit code - exit ${EXIT_CODE:-0} - - # LikeC4 tasks - likec4:generate: - desc: Generate LikeC4 webcomponent (includes all architecture projects) - cmds: - - npx likec4 codegen webcomponent --webcomponent-prefix likec4 --outfile static/js/likec4-webcomponent.js resources/edp-likec4 resources/doc-likec4 - - likec4:validate: - desc: Validate LikeC4 models - cmds: - - echo "Validating EDP architecture models..." - - npx likec4 validate --ignore-layout resources/edp-likec4 - - echo "Validating Documentation platform models..." - - npx likec4 validate --ignore-layout resources/doc-likec4 - - echo "✓ All LikeC4 models validated successfully" - - likec4:validate:layout: - desc: Validate LikeC4 models including layout - cmds: - - echo "Validating EDP architecture models (including layout)..." - - npx likec4 validate resources/edp-likec4 - - echo "Validating Documentation platform models (including layout)..." - - npx likec4 validate resources/doc-likec4 - - echo "✓ All LikeC4 models and layouts validated successfully" - - likec4:update: - desc: Update LikeC4 to latest version - cmds: - - npm update likec4 --prefix resources/edp-likec4 - - npm update likec4 --prefix resources/doc-likec4 - - echo "✓ LikeC4 updated in both projects" - - # Development tasks - deps:ensure-npm: - desc: Ensure npm dependencies are installed - sources: - - package.json - - package-lock.json - generates: - - node_modules/.package-lock.json - cmds: - - "{{.NPM_CMD}} ci" - status: - - test -d node_modules - - deps:install: - desc: Install all dependencies - cmds: - - "{{.NPM_CMD}} ci" - - "{{.HUGO_CMD}} mod get -u" - - "{{.HUGO_CMD}} mod tidy" - - deps:update: - desc: Update dependencies - cmds: - - devbox update - - "{{.NPM_CMD}} update" - - "{{.HUGO_CMD}} mod get -u" - - # CI/CD - ci: - desc: Run CI pipeline locally - deps: - - test - - build:oci-image: - desc: Build OCI/Docker image with versions from .env.versions - cmds: - - | - set -a - source .env.versions - set +a - echo "Building OCI image with versions:" - echo " NODE_VERSION=${NODE_VERSION}" - echo " GO_VERSION=${GO_VERSION}" - echo " HUGO_VERSION=${HUGO_VERSION}" - docker build --network=host \ - --build-arg NODE_VERSION=${NODE_VERSION} \ - --build-arg GO_VERSION=${GO_VERSION} \ - --build-arg HUGO_VERSION=${HUGO_VERSION} \ - -t ipceicis-developerframework:latest \ - -t ipceicis-developerframework:$(git rev-parse --short HEAD) \ - . - - test:oci-image: - desc: Test the built OCI image - deps: - - build:oci-image - cmds: - - | - echo "Starting container on port 8080..." - docker run -d -p 8080:80 --name hugo-test ipceicis-developerframework:latest - sleep 2 - echo "Testing endpoint..." - curl -f http://localhost:8080 > /dev/null && echo "✓ Container is running and responding" || echo "✗ Container test failed" - echo "Cleaning up..." - docker stop hugo-test - docker rm hugo-test diff --git a/argocd-stack/docs.yaml b/argocd-stack/docs.yaml deleted file mode 100644 index f298c98..0000000 --- a/argocd-stack/docs.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: docs - namespace: argocd - labels: - env: prod -spec: - project: default - syncPolicy: - automated: - selfHeal: true - syncOptions: - - CreateNamespace=true - - ServerSideApply=true - destination: - name: in-cluster - namespace: docs - syncOptions: - - CreateNamespace=true - sources: - - repoURL: https://edp.buildth.ing/DevFW-CICD/website-and-documentation - targetRevision: HEAD - path: argocd-stack/helm - helm: - parameters: - - name: image.tag - value: $ARGOCD_APP_REVISION_SHORT \ No newline at end of file diff --git a/argocd-stack/helm/.helmignore b/argocd-stack/helm/.helmignore deleted file mode 100644 index 0e8a0eb..0000000 --- a/argocd-stack/helm/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/argocd-stack/helm/Chart.yaml b/argocd-stack/helm/Chart.yaml deleted file mode 100644 index 1bf09dc..0000000 --- a/argocd-stack/helm/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: helm -description: Deploy documentation to edp.buildth.ing - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/argocd-stack/helm/templates/deploy.yaml b/argocd-stack/helm/templates/deploy.yaml deleted file mode 100644 index 0a7aded..0000000 --- a/argocd-stack/helm/templates/deploy.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app: docs - name: docs -spec: - replicas: 1 - selector: - matchLabels: - app: docs - strategy: {} - template: - metadata: - labels: - app: docs - spec: - containers: - - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - name: docs - ports: - - name: http - containerPort: 80 - protocol: TCP - resources: {} ---- -apiVersion: v1 -kind: Service -metadata: - name: docs -spec: - selector: - app: docs - ports: - - protocol: TCP - port: 80 - targetPort: 80 ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: docs - annotations: - cert-manager.io/cluster-issuer: main - nginx.ingress.kubernetes.io/force-ssl-redirect: "true" -spec: - ingressClassName: nginx - rules: - - host: docs.edp.buildth.ing - http: - paths: - - backend: - service: - name: docs - port: - number: 80 - path: / - pathType: Prefix - tls: - - hosts: - - docs.edp.buildth.ing - secretName: docs-edp-buildth-ing-tls diff --git a/argocd-stack/helm/values.yaml b/argocd-stack/helm/values.yaml deleted file mode 100644 index 78c3c27..0000000 --- a/argocd-stack/helm/values.yaml +++ /dev/null @@ -1,4 +0,0 @@ - -image: - repository: edp.buildth.ing/devfw-cicd/website-and-documentation - tag: "UNKNOWN_TAG" diff --git a/assets/fonts/TeleNeoOffice-Bold.a7bb592b.ttf b/assets/fonts/TeleNeoOffice-Bold.a7bb592b.ttf deleted file mode 100644 index 88d13e1..0000000 Binary files a/assets/fonts/TeleNeoOffice-Bold.a7bb592b.ttf and /dev/null differ diff --git a/assets/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf b/assets/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf deleted file mode 100644 index 158ffc8..0000000 Binary files a/assets/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf and /dev/null differ diff --git a/assets/fonts/TeleNeoOffice-Medium.79fb426d.ttf b/assets/fonts/TeleNeoOffice-Medium.79fb426d.ttf deleted file mode 100644 index 6ceef93..0000000 Binary files a/assets/fonts/TeleNeoOffice-Medium.79fb426d.ttf and /dev/null differ diff --git a/assets/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf b/assets/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf deleted file mode 100644 index 672a9b8..0000000 Binary files a/assets/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf and /dev/null differ diff --git a/assets/fonts/TeleNeoOffice-Thin.53627df9.ttf b/assets/fonts/TeleNeoOffice-Thin.53627df9.ttf deleted file mode 100644 index edeb0d9..0000000 Binary files a/assets/fonts/TeleNeoOffice-Thin.53627df9.ttf and /dev/null differ diff --git a/assets/scss/_variables_project.scss b/assets/scss/_variables_project.scss index 2a9a816..2569027 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/_variables_project.scss @@ -1,524 +1,6 @@ /* - * Telekom-inspired Theme Variables - * Based on https://edp.buildth.ing Telekom Design System - */ -// Bootstrap/Docsy Variable Overrides (must be before imports) -$primary: #E20074 !default; -$secondary: #B6B6B6 !default; -$success: #00b367 !default; -$info: #0070ad !default; -$warning: #ffcc00 !default; -$danger: #d52b1e !default; -$dark: #000000 !default; -$light: #f9fafb !default; +Add styles or override variables from the theme here. -// Link colors -$link-color: #E20074 !default; -$link-hover-color: #C2005E !default; - -// Body -$body-bg: #ffffff !default; -$body-color: #000000 !default; - -// Navbar -$navbar-light-color: #000000 !default; -$navbar-light-hover-color: #E20074 !default; -$navbar-light-active-color: #E20074 !default; - -// Fonts -$font-family-sans-serif: 'TeleNeo', -apple-system, "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial, sans-serif !default; -$font-family-base: $font-family-sans-serif !default; - -// Telekom TeleNeo Fonts -@font-face { - font-family: 'TeleNeo'; - src: url('../fonts/TeleNeoOffice-Thin.53627df9.ttf') format('truetype'); - font-weight: 300; - font-style: normal; -} - -@font-face { - font-family: 'TeleNeo'; - src: url('../fonts/TeleNeoOffice-Regular.b0a2cff1.ttf') format('truetype'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'TeleNeo'; - src: url('../fonts/TeleNeoOffice-Medium.79fb426d.ttf') format('truetype'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'TeleNeo'; - src: url('../fonts/TeleNeoOffice-Bold.a7bb592b.ttf') format('truetype'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'TeleNeo'; - src: url('../fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} - -// Primary Colors - Telekom Magenta -:root { - // Telekom Primary Color (Magenta) - --color-primary: #E20074; - --color-primary-contrast: #ffffff; - --color-primary-dark-1: #C2005E; - --color-primary-dark-2: #A5004D; - --color-primary-dark-3: #87003D; - --color-primary-light-1: #E7338A; - --color-primary-light-2: #EC66A1; - --color-primary-light-3: #F299B8; - --color-primary-light-4: #F7CCCF; - --color-primary-light-5: #FCEFF6; - --color-primary-light-6: #FFF5FA; - - // Secondary Colors - --color-secondary: #B6B6B6; - --color-secondary-dark: #6a7178; - --color-secondary-light: #f9fafb; - - // Semantic Colors - --color-success: #00b367; - --color-warning: #ffcc00; - --color-error: #d52b1e; - --color-info: #0070ad; - - // Text Colors - --color-text: #000000; - --color-text-light: #666666; - --color-text-dark: #000000; - - // Background Colors - --color-body: #ffffff; - --color-card: #F1F1F1; - --color-hover: #F1F1F1; - --color-active: #F1F1F1; - - // Navigation - --color-nav-bg: #ffffff; - --color-nav-text: #000000; - --nav-border-color: #B6B6B6; - - // UI Elements - --color-input-background: #ffffff; - --color-input-border: #cccccc; - --color-input-text: #000000; - --color-box-body: #f2f2f2; - --color-box-header: #e6e6e6; - - // Shadows & Overlays - --color-shadow: rgba(0, 0, 0, 0.15); - --color-overlay-backdrop: rgba(0, 0, 0, 0.5); - - // Font Settings - --font-family-base: 'TeleNeo', -apple-system, "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial, sans-serif; - --nav-text-font-weight: 600; -} - -// Apply TeleNeo font globally -body { - font-family: var(--font-family-base); -} - -// Dark Mode Support -@media (prefers-color-scheme: dark) { - :root { - // Primary Colors remain same - --color-primary: #E20074; - --color-primary-contrast: #000000; - - // Dark Mode Adjustments - --color-primary-dark-1: #E7338A; - --color-primary-dark-2: #EC66A1; - --color-primary-light-1: #C2005E; - --color-primary-light-2: #A5004D; - - // Secondary Colors for Dark Mode - --color-secondary: #1c1c1e; - --color-secondary-dark: #4D4D4D; - --color-secondary-light: #0D0D0D; - - // Text Colors - --color-text: #FFFFFF; - --color-text-light: #CCCCCC; - --color-text-dark: #FFFFFF; - - // Background Colors - --color-body: #000000; - --color-card: #1c1c1e; - --color-hover: #1c1c1e; - --color-active: #0D0D0D; - - // Navigation - --color-nav-bg: #000000; - --color-nav-text: #FFFFFF; - - // UI Elements - --color-input-background: #1c1c1e; - --color-input-border: #4D4D4D; - --color-input-text: #FFFFFF; - --color-box-body: #000000; - --color-box-header: #1A1A1A; - - // Semantic Colors for Dark Mode - --color-success: #00A94F; - --color-warning: #FFCC00; - --color-error: #D52B1E; - --color-info: #0070AD; - - // Shadows - --color-shadow: rgba(0, 0, 0, 0.35); - } -} - -// Telekom-inspired Component Styling -.td-navbar { - background-color: var(--color-nav-bg) !important; - border-bottom: 1px solid var(--nav-border-color); - - .navbar-brand, - .nav-link { - color: var(--color-nav-text) !important; - font-weight: var(--nav-text-font-weight); - } - - .nav-link:hover, - .nav-link.active { - color: var(--color-primary) !important; - background: transparent !important; - } -} - -// Primary Buttons - Telekom Magenta -.btn-primary { - background-color: var(--color-primary) !important; - border-color: var(--color-primary) !important; - color: var(--color-primary-contrast) !important; - - &:hover { - background-color: var(--color-primary-dark-1) !important; - border-color: var(--color-primary-dark-1) !important; - } - - &:active, - &:focus { - background-color: var(--color-primary-dark-2) !important; - border-color: var(--color-primary-dark-2) !important; - } -} - -// Links -a { - color: var(--color-primary); - - &:hover { - color: var(--color-primary-dark-1); - } -} - -// Cards with Telekom Style -.card { - background-color: var(--color-card); - border: 1px solid var(--nav-border-color); - - &:hover { - background-color: var(--color-hover); - } -} - -// Active/Selected States - REMOVED harsh black backgrounds -// Now using soft Telekom colors instead - -// Sidebar Navigation -.td-sidebar-nav { - .td-sidebar-link { - &:hover { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } - - &.active { - background-color: var(--color-primary-light-6); - color: var(--color-primary); - font-weight: 500; - border-left: 3px solid var(--color-primary); - } - } - - // All list items in sidebar - li a { - &:hover { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } - } -} - -// Main navigation tabs -.td-sidebar { - .td-sidebar-nav__section { - .ul-1 > li > a { - &.active, - &.td-sidebar-link--active { - background-color: var(--color-primary-light-6) !important; - color: var(--color-primary) !important; - font-weight: 500; - border-left: 3px solid var(--color-primary); - } - - &:hover { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } - } - - // All nested levels - li a:hover { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } - } -} - -// Top navigation breadcrumb area -.td-sidebar__inner { - .td-sidebar-nav__section-title { - &.active { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } - } -} - -// Breadcrumb navigation in header -.breadcrumb { - .active { - color: var(--color-primary) !important; - } - - a:hover { - color: var(--color-primary-dark-1) !important; - } -} - -// Remove harsh black backgrounds globally -.active, -.selected { - background-color: var(--color-primary-light-6) !important; - color: var(--color-primary) !important; -} - -// Softer hover states -*:hover { - transition: all 0.2s ease-in-out; -} - -// Override any dark/black hover backgrounds in navigation -nav, .td-sidebar, .td-sidebar-nav { - a:hover, - li:hover > a, - .nav-link:hover { - background-color: var(--color-primary-light-5) !important; - color: var(--color-primary) !important; - } -} - -// Code Blocks -pre, -code { - background-color: var(--color-box-body); - border: 1px solid var(--color-input-border); -} - -// Inline code (backticks in text) -code { - background-color: var(--color-primary-light-6); - color: var(--color-primary-dark-2); - padding: 2px 6px; - border-radius: 3px; - border: 1px solid var(--color-primary-light-3); - font-size: 0.9em; -} - -// Code blocks (fenced code) -pre { - background-color: var(--color-box-body); - border: 1px solid var(--color-input-border); - padding: 1rem; - border-radius: 4px; - - code { - background-color: transparent; - border: none; - padding: 0; - color: inherit; - } -} - -// Tables -table { - thead { - background-color: var(--color-box-header); - } - - tbody tr:hover { - background-color: var(--color-hover); - } -} - -// Alerts/Notifications -.alert-success { - background-color: var(--color-success); - border-color: var(--color-success); -} - -.alert-warning { - background-color: var(--color-warning); - border-color: var(--color-warning); - color: #000000; -} - -.alert-danger { - background-color: var(--color-error); - border-color: var(--color-error); -} - -.alert-info { - background-color: var(--color-info); - border-color: var(--color-info); -} - -// Docsy Homepage Components -.td-cover-block { - background-color: var(--color-primary) !important; - - h1, h2, h3, h4, h5, h6, p { - color: var(--color-primary-contrast) !important; - } -} - -// Lead blocks with primary color background -.td-block--primary, -section[class*="bg-primary"], -section[class*="color-primary"] { - background-color: var(--color-primary) !important; - - * { - color: #FFFFFF !important; - } - - h1, h2, h3, h4, h5, h6, p, a, .lead { - color: #FFFFFF !important; - text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); - } - - // Prevent white background on hover - &:hover, - *:hover { - background-color: transparent !important; - color: #FFFFFF !important; - } - - a:hover { - color: #FFFFFF !important; - text-decoration: underline; - } -} - -.td-box { - background-color: var(--color-card); - border: 1px solid var(--nav-border-color); - - &:hover { - background-color: var(--color-hover); - border-color: var(--color-primary); - } - - &--primary { - background-color: var(--color-primary); - border-color: var(--color-primary); - color: var(--color-primary-contrast); - } - - &--secondary { - background-color: var(--color-secondary); - border-color: var(--color-secondary); - } -} - -// Hero/Cover sections -.td-cover { - background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark-2) 100%); - - .display-1, .display-2, .display-3, .display-4 { - color: var(--color-primary-contrast) !important; - } -} - -// Section backgrounds -.td-section { - &--primary { - background-color: var(--color-primary-light-6); - } - - &--secondary { - background-color: var(--color-secondary-light); - } -} - -// Feature boxes -.td-feature { - border: 1px solid var(--nav-border-color); - background-color: var(--color-card); - - &:hover { - border-color: var(--color-primary); - box-shadow: 0 4px 12px var(--color-shadow); - } -} - -// Feature blocks on homepage (blocks/feature) -.td-box--dark, -.td-box--colored, -section[class*="bg-dark"] .td-box, -section[class*="color-dark"] .td-box { - .h2, .h3, .h4, .h5, h2, h3, h4, h5, p, a { - color: #FFFFFF !important; - } - - &:hover { - background-color: rgba(0, 0, 0, 0.8) !important; - - .h2, .h3, .h4, .h5, h2, h3, h4, h5, p, a { - color: #FFFFFF !important; - } - } -} - -// Ensure text stays visible in dark sections -section[class*="bg-dark"], -section[class*="color-dark"] { - * { - color: #FFFFFF !important; - } - - .td-box, .card { - &:hover { - background-color: rgba(0, 0, 0, 0.8) !important; - - * { - color: #FFFFFF !important; - } - } - } -} +*/ diff --git a/content/en/_index.md b/content/en/_index.md index cfe30c8..3112c37 100644 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -3,84 +3,5 @@ title: IPCEI-CIS Developer Framework --- {{< blocks/cover title="IPCEI-CIS Developer Framework" image_anchor="top" height="full" >}} -

-A comprehensive enterprise development platform enabling teams to build, deploy, and operate cloud-native applications with ease. -

-{{< blocks/link-down color="info" >}} + {{< /blocks/cover >}} - -{{% blocks/lead color="primary" %}} -The IPCEI-CIS Developer Framework provides everything you need to deliver modern applications at scale. -Built on open standards and battle-tested technologies. -{{% /blocks/lead %}} - -{{% blocks/section color="dark" type="row" %}} - -{{% blocks/feature icon="fa-solid fa-diagram-project" title="Edge Developer Platform (EDP)" url="/docs/edp/" %}} -Understand EDP as the developer platform hub (Forgejo, CI/CD, deployment, operations) and how it connects inner loop and outer loop workflows. - -**Dive into EDP docs →** -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa-solid fa-cloud" title="EdgeConnect Cloud" url="/docs/edgeconnect/" %}} -Learn what EdgeConnect is, how it is consumed via stable entry points (CLI, SDK, Terraform), and how EDP integrates with it as a deployment target. - -**Explore EdgeConnect →** -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa-solid fa-scale-balanced" title="Governance" url="/docs/governance/" %}} -Read the project history, decision context, and audit-oriented traceability to primary sources and repository artifacts. - -**Go to Governance →** -{{% /blocks/feature %}} - -{{% /blocks/section %}} - -{{% blocks/section color="white" %}} - -## What's in the Platform? - -
-
- -### 🚀 Developer Experience - -* **Backstage Portal** - Self-service platform -* **GitOps Workflows** - Automated deployments -* **Golden Paths** - Best practices built-in - -
-
- -### 🛠️ Infrastructure as Code - -* **Crossplane** - Cloud resource provisioning -* **ArgoCD** - Declarative GitOps -* **Terraform** - Infrastructure automation - -
-
- -### 📊 Observability - -* **Prometheus & Grafana** - Metrics & dashboards -* **Loki** - Log aggregation -* **OpenTelemetry** - Distributed tracing - -
-
- -{{% /blocks/section %}} - -{{% blocks/section color="light" %}} - -## Get Started - -Whether you're a **platform engineer**, **application developer**, or **auditor**, we have resources for you: - -* 📖 Start at [Documentation](/docs/) -* 🧭 Read [Edge Developer Platform (EDP)](/docs/edp/) -* ☁️ Read [EdgeConnect Cloud](/docs/edgeconnect/) -* 🧾 Read [Governance](/docs/governance/) - -{{% /blocks/section %}} diff --git a/content/en/blog/240823-archsession.md b/content/en/blog/240823-archsession.md new file mode 100644 index 0000000..17ac41c --- /dev/null +++ b/content/en/blog/240823-archsession.md @@ -0,0 +1,40 @@ +--- +title: Architecture session +weight: 20 +--- + + +## Platform Generics + +* https://tag-app-delivery.cncf.io/whitepapers/platforms/#capabilities-of-platforms + +* https://tag-app-delivery.cncf.io/whitepapers/platform-eng-maturity-model/ + +* https://humanitec.com/blog/wtf-internal-developer-platform-vs-internal-developer-portal-vs-paas + +## reference architecture + Portfolio + +* https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures + +* https://humanitec.com/reference-architectures + +* https://www.youtube.com/watch?v=AimSwK8Mw-U + + +## Platform Portfolio + +### Viktor Farcic + +* https://technologyconversations.com/ + +* https://technologyconversations.com/2024/01/08/the-best-devops-tools-platforms-and-services-in-2024/ + + +### Internal devloper platform + +* https://internaldeveloperplatform.org/core-components/ + +### Workflow / CI/CD + +* https://cnoe.io/blog/optimizing-data-quality-in-dev-portals + diff --git a/content/en/blog/_index.md b/content/en/blog/_index.md index cc548da..573f01f 100644 --- a/content/en/blog/_index.md +++ b/content/en/blog/_index.md @@ -1,6 +1,5 @@ --- title: Blog menu: {main: {weight: 30}} -description: Blog section, in Work (should be more automated content) --- diff --git a/content/en/docs-old/_index.md b/content/en/docs-old/_index.md deleted file mode 100755 index 6c53701..0000000 --- a/content/en/docs-old/_index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Legacy Documentation -linkTitle: Docs (Old) -menu: - main: - weight: 50 -weight: 50 -cascade: - - type: docs ---- - -# Legacy Documentation - -This section contains the previous version of the documentation for reference purposes. - -**Note**: This documentation is archived and may be outdated. Please refer to the main [Documentation](../docs/) section for current information. - -## Available Sections - -* [Architecture](architecture/) - System architecture and diagrams -* [Documentation](documentation/) - Meta documentation about the documentation system -* [Platform Overview](platform-overview/) - Overview document -* [v1 (Legacy)](v1/) - Original v1 documentation diff --git a/content/en/docs-old/architecture/_index.md b/content/en/docs-old/architecture/_index.md deleted file mode 100644 index 9efb5db..0000000 --- a/content/en/docs-old/architecture/_index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Architecture" -linkTitle: "Architecture" -weight: 3 -description: > - System architecture documentation and interactive diagrams ---- - -This section contains architecture documentation for the IPCEI-CIS Developer Framework, including interactive C4 architecture diagrams. diff --git a/content/en/docs-old/architecture/highlevelarch.md b/content/en/docs-old/architecture/highlevelarch.md deleted file mode 100644 index 6f07333..0000000 --- a/content/en/docs-old/architecture/highlevelarch.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "High Level Architecture" -linkTitle: "High Level Architecture" -weight: 1 -description: > - Interactive high-level architecture overview of the Enterprise Development Platform ---- - -This document describes the high-level architecture of our Enterprise Development Platform (EDP) system. - -## Interactive Architecture Diagram - -{{< likec4-view view="otc-faas" project="architecture" title="Enterprise Development Platform - OTC FaaS Deployment Architecture" >}} - -{{< alert title="Interactive Diagram" >}} -The diagram above is interactive when viewed in a compatible browser. -You can click on components to explore the architecture details. - -**Note:** The interactive diagram requires the LikeC4 webcomponent to be generated. -See the [setup instructions]({{< ref "/docs-old/architecture/setup" >}}) for details. -{{< /alert >}} - -## Architecture Overview - -The Enterprise Development Platform consists of several key components working together to provide a comprehensive development and deployment environment. - -### Key Components - -1. **OTC Foundry** - Central management and orchestration layer -2. **Per-Tenant EDP** - Isolated development environments for each tenant -3. **FaaS Environment** - Function-as-a-Service deployment targets on Open Telekom Cloud -4. **Cloud Services** - Managed services including databases, storage, and monitoring - -### Deployment Environments - -- **Development Environment** (`*.t09.de`) - For platform team development and testing -- **Production Environment** (`*.buildth.ing`) - For production workloads and tenant services - -## Component Details - -The interactive diagram above shows the relationships between different components and how they interact within the system architecture. You can explore the diagram by clicking on different elements to see more details. - -### Infrastructure Components - -- **Kubernetes Clusters** - Container orchestration using OTC CCE (Cloud Container Engine) -- **ArgoCD** - GitOps continuous deployment and application lifecycle management -- **Forgejo** - Git repository management and CI/CD pipelines -- **Observability Stack** - Monitoring (Prometheus, Grafana), logging (Loki), and alerting - -### Security and Management - -- **Keycloak** - Identity and access management (IAM) -- **OpenBao** - Secrets management (Hashicorp Vault fork) -- **External Secrets Operator** - Kubernetes secrets integration -- **Crossplane** - Infrastructure as Code and cloud resource provisioning - -### Developer Experience - -- **Backstage** - Internal developer portal and service catalog -- **Forgejo Actions** - CI/CD pipeline execution -- **Development Workflows** - GitOps-based inner and outer loop workflows - -## Setup and Maintenance - -To update or modify the architecture diagrams: - -1. Edit the `.c4` files in `resources/edp-likec4/` -2. Regenerate the webcomponent: - - ```bash - cd resources/edp-likec4 - npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js - ``` - -3. Commit both the model changes and the regenerated JavaScript file - -For more information, see the [LikeC4 Integration Guide]({{< ref "/docs-old/architecture/setup" >}}). diff --git a/content/en/docs-old/architecture/setup.md b/content/en/docs-old/architecture/setup.md deleted file mode 100644 index ef6a948..0000000 --- a/content/en/docs-old/architecture/setup.md +++ /dev/null @@ -1,297 +0,0 @@ ---- -title: "LikeC4 Setup Guide" -linkTitle: "Setup" -weight: 10 -description: > - How to set up and use LikeC4 interactive architecture diagrams ---- - -This guide explains how to set up and use LikeC4 interactive architecture diagrams in this documentation. - -## Overview - -LikeC4 enables you to create interactive C4 architecture diagrams as code. The diagrams are defined in `.c4` files and compiled into a web component that can be embedded in any HTML page. - -## Prerequisites - -- Node.js (v18 or later) -- npm or yarn - -## Initial Setup - -### 1. Install Dependencies - -Navigate to the LikeC4 directory and install dependencies: - -```bash -cd resources/edp-likec4 -npm install -``` - -### 2. Generate the Web Component - -Create the web component that Hugo will load: - -```bash -npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js -``` - -This command: - -- Reads all `.c4` files from `models/` and `views/` -- Generates a single JavaScript file with all architecture views -- Outputs to `static/js/likec4-webcomponent.js` - -### 3. Verify Integration - -The integration should already be configured in: - -- `hugo.toml` - Contains `params.likec4.enable = true` -- `layouts/partials/hooks/head-end.html` - Loads CSS and loader script -- `static/css/likec4-styles.css` - Diagram styling -- `static/js/likec4-loader.js` - Dynamic module loader - -## Directory Structure - -```plaintext -resources/edp-likec4/ -├── models/ # C4 model definitions -│ ├── components/ # Component models -│ ├── containers/ # Container models -│ ├── context/ # System context -│ └── code/ # Code-level workflows -├── views/ # View definitions -│ ├── deployment/ # Deployment views -│ ├── edp/ # EDP views -│ ├── high-level-concept/ # Conceptual views -│ └── dynamic/ # Process flows -├── package.json # Dependencies -└── INTEGRATION.md # Integration docs -``` - -## Using in Documentation - -### Basic Usage - -Add this to any Markdown file: - -```html -
-
- Your Diagram Title -
- -
- Loading architecture diagram... -
-
-``` - -### Available View IDs - -To find available view IDs, search the `.c4` files: - -```bash -cd resources/edp-likec4 -grep -r "view\s\+\w" views/ models/ --include="*.c4" -``` - -Common views: - -- `otc-faas` - OTC FaaS deployment -- `edp` - EDP overview -- `landscape` - Developer landscape -- `edpbuilderworkflow` - Builder workflow -- `keycloak` - Keycloak component - -### With Hugo Alert - -Combine with Docsy alerts for better UX: - -```markdown -
-
- System Architecture -
- -
- Loading... -
-
- -{{}} -Click on components in the diagram to explore the architecture. -{{}} -``` - -## Workflow for Changes - -### 1. Modify Architecture Models - -Edit the `.c4` files in `resources/edp-likec4/`: - -```bash -# Edit a model -vi resources/edp-likec4/models/containers/argocd.c4 - -# Or edit a view -vi resources/edp-likec4/views/deployment/otc/otc-faas.c4 -``` - -### 2. Preview Changes Locally - -Use the LikeC4 CLI to preview: - -```bash -cd resources/edp-likec4 - -# Start preview server -npx likec4 start - -# Opens browser at http://localhost:5173 -``` - -### 3. Regenerate Web Component - -After making changes: - -```bash -cd resources/edp-likec4 -npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js -``` - -### 4. Test in Hugo - -Start the Hugo development server: - -```bash -# From repository root -hugo server -D - -# Open http://localhost:1313 -``` - -### 5. Commit Changes - -Commit both the model files and the regenerated web component: - -```bash -git add resources/edp-likec4/ -git add static/js/likec4-webcomponent.js -git commit -m "feat: update architecture diagrams" -``` - -## Advanced Configuration - -### Custom Styling - -Modify `static/css/likec4-styles.css` to customize appearance: - -```css -.likec4-container { - height: 800px; /* Adjust height */ - border-radius: 8px; /* Rounder corners */ -} -``` - -### Multiple Diagrams Per Page - -You can include multiple diagrams on a single page: - -```html - -
-
Deployment View
- -
Loading...
-
- - -
-
Component View
- -
Loading...
-
-``` - -### Disable for Specific Pages - -Add to page front matter: - -```yaml ---- -title: "My Page" -params: - disable_likec4: true ---- -``` - -Then update `layouts/partials/hooks/head-end.html`: - -```html -{{ if and .Site.Params.likec4.enable (not .Params.disable_likec4) }} - -{{ end }} -``` - -## Troubleshooting - -### Diagram Not Loading - -1. **Check browser console** (F12 → Console) -2. **Verify webcomponent exists:** - - ```bash - ls -lh static/js/likec4-webcomponent.js - ``` - -3. **Regenerate if missing:** - - ```bash - cd resources/edp-likec4 - npm install - npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js - ``` - -### View Not Found - -- Check view ID matches exactly (case-sensitive) -- Search for the view in `.c4` files: - - ```bash - grep -r "view otc-faas" resources/edp-likec4/ - ``` - -### Styling Issues - -- Clear browser cache (Ctrl+Shift+R) -- Check `static/css/likec4-styles.css` is loaded in browser DevTools → Network - -### Build Errors - -If LikeC4 codegen fails: - -```bash -cd resources/edp-likec4 -rm -rf node_modules package-lock.json -npm install -``` - -## Resources - -- [LikeC4 Documentation](https://likec4.dev/) -- [C4 Model](https://c4model.com/) -- [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) -- [Hugo Documentation](https://gohugo.io/documentation/) - -## Migration Notes - -This LikeC4 integration was migrated from the edp-doc repository. This repository (`ipceicis-developerframework`) is now the primary source for architecture models. - -The edp-doc repository can reference these models via git submodule if needed. diff --git a/content/en/docs-old/decisions/0001-pipeline-tools.md b/content/en/docs-old/decisions/0001-pipeline-tools.md deleted file mode 100644 index 6b039e9..0000000 --- a/content/en/docs-old/decisions/0001-pipeline-tools.md +++ /dev/null @@ -1,126 +0,0 @@ -# CI/CD pipeline tools for composable pipeline - -## Context and Problem Statement - -In order to build a composable pipeline that provides a golden path and reusable components, we need to define the tools that will be used to execute the pipeline. - -ArgoCD is considered set in stone as the tool to manage the deployment of applications. However, the tools to compose and execute the pipeline are still up for debate. - -> Note: The pipeline will use many other tools to perform certain actions such as testing, building, and deploying. This ADR is focused on the tools that will be used to compose and execute the pipeline itself. - -In general, there are 2 decisions to make: - -* What tools should we use to execute the pipeline? -* What tools should we use to compose the pipeline? - -The following use-cases should be considered for this decision: - -* **User who wants to manage their own runners (???)** -* User who only wants to use our golden path -* User who wants to use our golden path and add custom actions -* User who wants to use their own templates and import some of our actions -* User who wants to import an existing GitHub repository with a pipeline - -## Considered Options - -* Argo Workflows + Events -* Argo Workflows + Events + Additional Composition tool -* Forgejo Actions -* Forgejo Actions + Additional Composition tool -* Dagger (as Engine) -* Shuttle (as Engine) - -## Decision Outcome - -TBD - -## Pros and Cons of the Options - -### Argo Workflows + Events - -#### Pro - -* integration with ArgoCD -* ability to trigger additional workflows based on events. -* level of maturity and community support. - -#### Con - -* Ability to self-host runners? -* way how composition for pipelines works (based on Kubernetes CRDs) - * Templates must be available in the cluster where the pipelines are executed, so any imported templates must be applied into the cluster before the pipeline can be executed and cannot simply reference a repository - * This makes it difficult to import existing templates from other repositories when using self-hosted runners - * This also makes it difficult to use our golden path, or at least we will need to provide a way to import our golden path into the cluster - * This also makes the split of every component has its own repo very difficult -* additional UI to manage the pipeline -* Additional complexity - -### Argo Workflows + Events + Additional Composition tool - -#### Pro - -* Composability can be offloaded to another tool - -#### Con - -* All cons of the previous option (except composability) -* Additional complexity by adding another tool - -### Forgejo Actions - -#### Pro - -* tight integration with GitHub Actions providing a familiar interface for developers and a vast catalog of actions to choose from -* ability to compose pipelines without relying on another tool -* Self-hosting of runners possible -* every component can have its own repository and use different tools (e.g. written in go, bash, python etc.) - -#### Con - -* level of maturity - will require additional investments to provide a production-grade system - -### Forgejo Actions + Additional Tool - -#### Pro - -* may be possible to use GitHub actions alongside another tool - -#### Con - -* additional complexity by adding another tool - -### Shuttle - -#### Pro - -* Possibility to clearly define interfaces for pipeline steps -* Relatively simple - -#### Con - -* basically backed by only one company -* **centralized templates**, so no mechanism for composing pipelines from multiple repositories - -### Dagger - -#### Pro - -* Pipeline as code - * if it runs it should run anywhere and produce the "same" / somewhat stable results - * build environments are defined within containers / the dagger config. Dagger is the only dependency one has to install on a machine -* DX is extremely nice, especially if you have to debug (image) builds, also type safety due to the ability to code your build in a strong language -* additional tooling, like trivy, is added to a build pipeline with low effort due to containers and existing plugin/wrappers -* you can create complex test environments similar to test containers and docker compose - -#### Con - -* relies heavily containers, which might not be available some environments (due to policy etc), it also has an effect on reproducibility and verifiability -* as a dev you need to properly understand containers -* dagger engine has to run privileged locally and/or in the cloud which might be a blocker or at least a big pain in the ... - -#### Suggestion Patrick - -* dagger is a heavy weight and might not be as productive in a dev workflow as it seems (setup lsp etc) -* it might be too opinionated to force on teams, especially since it is not near mainstream enough, community might be too small -* it feels like dagger gets you 95% of the way, but the remaining 5% are a real struggle -* if we like it, we should check the popularity in the dev community before further considering as it has a direct impact on teams and their preferences diff --git a/content/en/docs-old/decisions/README.md b/content/en/docs-old/decisions/README.md deleted file mode 100644 index ae4dc5a..0000000 --- a/content/en/docs-old/decisions/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# ADRs - -Architecture Decision Records (ADRs) are a way to capture the important architectural decisions made during the development of a project. They are a way to document the context, the decision, and the consequences of the decision. They are a way to keep track of the architectural decisions made in a project and to communicate them to the team. - -The [Markdown Architectural Decision Records](https://adr.github.io/madr/) (MADR) format is a simple and easy-to-use format for writing ADRs in Markdown. diff --git a/content/en/docs-old/decisions/_adr-template.md b/content/en/docs-old/decisions/_adr-template.md deleted file mode 100644 index fa87ccc..0000000 --- a/content/en/docs-old/decisions/_adr-template.md +++ /dev/null @@ -1,67 +0,0 @@ - - -# {short title, representative of solved problem and found solution} - -## Context and Problem Statement - -{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story. You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.} - - -## Decision Drivers - -* {decision driver 1, e.g., a force, facing concern, …} -* {decision driver 2, e.g., a force, facing concern, …} -* … - -## Considered Options - -* {title of option 1} -* {title of option 2} -* {title of option 3} -* … - -## Decision Outcome - -Chosen option: "{title of option 1}", because {justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}. - - -### Consequences - -* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …} -* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …} -* … - - -### Confirmation - -{Describe how the implementation of/compliance with the ADR can/will be confirmed. Are the design that was decided for and its implementation in line with the decision made? E.g., a design/code review or a test with a library such as ArchUnit can help validate this. Not that although we classify this element as optional, it is included in many ADRs.} - - -## Pros and Cons of the Options - -### {title of option 1} - - -{example | description | pointer to more information | …} - -* Good, because {argument a} -* Good, because {argument b} - -* Neutral, because {argument c} -* Bad, because {argument d} -* … - -### {title of other option} - -{example | description | pointer to more information | …} - -* Good, because {argument a} -* Good, because {argument b} -* Neutral, because {argument c} -* Bad, because {argument d} -* … - - -## More Information - -{You might want to provide additional evidence/confidence for the decision outcome here and/or document the team agreement on the decision and/or define when/how this decision the decision should be realized and if/when it should be re-visited. Links to other decisions and resources might appear here as well.} diff --git a/content/en/docs-old/documentation/_index.md b/content/en/docs-old/documentation/_index.md deleted file mode 100644 index d250f29..0000000 --- a/content/en/docs-old/documentation/_index.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "Documentation About Documentation" -linkTitle: "Documentation" -weight: 10 -description: > - Learn how to create, maintain, and publish documentation for the developer platform. ---- - -Welcome to the meta-documentation! This section explains how our documentation platform works and guides you through the technicalWriter role. - -## What is a Technical Writer? - -A **Technical Writer** is responsible for creating, maintaining, and publishing the developer platform documentation. This includes: - -- Writing and updating content in Markdown -- Creating architecture diagrams with LikeC4 -- Testing locally before committing -- Following the CI/CD pipeline to production - -## Documentation Platform Architecture - -Our documentation is built on a modern stack: - -- **Hugo** with the **Docsy** theme for static site generation -- **LikeC4** for architecture visualization -- **Taskfile** for local development automation -- **GitHub Actions** for continuous testing -- **Edge deployment** for hosting - -### System Overview - -{{< likec4-view view="overview" project="documentation-platform" >}} - -This high-level view shows all major components of the documentation platform. - -## Getting Started - -Continue to the next sections to learn about: - -1. [Local Development](local-development/) - How to work on documentation locally -2. [Testing](testing/) - Quality assurance processes -3. [CI/CD Pipeline](cicd/) - Automated testing and deployment -4. [Publishing](publishing/) - How documentation reaches production diff --git a/content/en/docs-old/documentation/cicd.md b/content/en/docs-old/documentation/cicd.md deleted file mode 100644 index f79f4fe..0000000 --- a/content/en/docs-old/documentation/cicd.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: "CI/CD Pipeline" -linkTitle: "CI/CD" -weight: 40 -description: > - Automated testing and container build process. ---- - -## Overview - -Our documentation uses a continuous integration and deployment pipeline to ensure quality and automate deployment. - -{{< likec4-view view="cicdPipeline" project="documentation-platform" >}} - -## GitHub Actions Workflow - -The CI/CD pipeline is defined in `.github/workflows/test.yml` and runs on: - -- **Pushes to `main` branch** -- **Pull requests to `main` branch** - -### Workflow Steps - -#### 1. Checkout Code - -```yaml -- uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 -``` - -- Clones repository with full history -- Includes Git submodules (Hugo modules) - -#### 2. Setup Hugo - -```yaml -- name: Setup Hugo - uses: peaceiris/actions-hugo@v3 - with: - hugo-version: 'latest' - extended: true -``` - -- Installs Hugo Extended -- Uses latest stable version - -#### 3. Setup Node.js - -```yaml -- name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: '24' - cache: 'npm' -``` - -- Installs Node.js v24 -- Caches npm dependencies for faster builds - -#### 4. Install Dependencies - -```bash -npm ci -go install github.com/wjdp/htmltest@latest -``` - -- Installs npm packages (markdownlint, htmlvalidate) -- Installs htmltest for link checking - -#### 5. Run Tests - -```bash -npm run test:build -npm run test:markdown -npm run test:html -``` - -- Validates Hugo build -- Lints Markdown files -- Validates HTML output - -#### 6. Link Checking - -```yaml -- name: Run link checker - run: htmltest - continue-on-error: true -``` - -- Checks all links -- Continues even if links fail (soft requirement) - -#### 7. Upload Results - -```yaml -- name: Upload htmltest results - uses: actions/upload-artifact@v4 - if: always() - with: - name: htmltest-report - path: tmp/.htmltest/ -``` - -- Uploads link check report -- Available for download from GitHub Actions - -## Container Build Process - -After tests pass, a container image is built: - -```bash -task build:oci-image -``` - -### Build Process - -1. **Reads version information** from `.env.versions`: - - `NODE_VERSION` - - `GO_VERSION` - - `HUGO_VERSION` - -2. **Builds Docker image** using `Dockerfile`: - - Multi-stage build - - Hugo generates static site - - Nginx serves the content - -3. **Tags image** with: - - `latest` - - Git commit SHA (short) - -### Dockerfile Structure - -```dockerfile -# Build stage -FROM node:${NODE_VERSION} as builder -# Install Hugo, build dependencies -# Run: hugo --gc --minify -# Output: public/ directory - -# Runtime stage -FROM nginx:alpine -# Copy public/ to /usr/share/nginx/html/ -# Configure Nginx -``` - -### Testing the Container - -```bash -task test:oci-image -``` - -This: - -1. Builds the image -2. Starts container on port 8080 -3. Tests HTTP endpoint -4. Cleans up container - -## Package.json Scripts - -The `package.json` defines test scripts: - -```json -{ - "scripts": { - "test:build": "hugo --gc --minify --logLevel info", - "test:markdown": "markdownlint 'content/**/*.md'", - "test:html": "htmlvalidate 'public/**/*.html'" - } -} -``` - -## Running CI Locally - -Simulate the CI environment locally: - -```bash -task ci -``` - -This runs the same tests as GitHub Actions. - -## Monitoring CI Results - -### Successful Build - -✅ All tests pass → Ready to deploy - -### Failed Build - -❌ Tests fail: - -1. Click on the failed workflow in GitHub Actions -2. Expand the failed step -3. Read the error message -4. Fix locally: `task test:` -5. Commit and push fix - -### Viewing Artifacts - -1. Go to GitHub Actions -2. Click on workflow run -3. Scroll to "Artifacts" section -4. Download `htmltest-report` - -## Best Practices - -1. **Don't push to main directly** - Use feature branches and PRs -2. **Wait for CI before merging** - Green checkmark required -3. **Fix broken builds immediately** - Don't let main stay red -4. **Review CI logs** - Understand why tests fail -5. **Update dependencies** - Keep versions current in `.env.versions` - -## Continuous Deployment - -After successful CI: - -1. Container image is built -2. Image is pushed to registry -3. Deployment process begins (see [Publishing](../publishing/)) - -## Troubleshooting - -### Tests pass locally but fail in CI - -**Possible causes:** - -- Different Hugo version -- Different Node.js version -- Missing dependencies -- Environment-specific issues - -**Solution:** Check versions in `.env.versions` and ensure local matches CI - -### Build timeouts - -**Possible causes:** - -- Link checker taking too long -- Large number of external links - -**Solution:** - -- Use `continue-on-error: true` for link checks -- Configure `.htmltest.yml` to skip slow checks - -### Cache issues - -**Solution:** Clear GitHub Actions cache: - -```yaml -- uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} -``` - -Update the cache key to force refresh. - -## Next Steps - -Learn about [deployment to Edge environment](../publishing/). diff --git a/content/en/docs-old/documentation/local-development.md b/content/en/docs-old/documentation/local-development.md deleted file mode 100644 index c3e7cb6..0000000 --- a/content/en/docs-old/documentation/local-development.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: "Local Development" -linkTitle: "Local Development" -weight: 20 -description: > - Set up your local environment and learn the technicalWriter workflow. ---- - -## Prerequisites - -Before you start, ensure you have: - -- **Devbox** or the following tools installed: - - Hugo Extended (latest version) - - Node.js (v24+) - - Go (for htmltest) - - Git - -## Installation - -1. Clone the repository: - - ```bash - git clone - cd ipceicis-developerframework - ``` - -2. Install dependencies: - - ```bash - task deps:install - ``` - -3. **If using Devbox**, enter the Devbox shell: - - ```bash - devbox shell - ``` - - This ensures all tools (Hugo, Node.js, Go) are available in the correct versions. - -## Local Development Workflow - -{{< likec4-view view="localDevelopment" project="documentation-platform" >}} - -### Starting the Development Server - -The easiest way to work locally is to start the Hugo development server: - -```bash -task serve -``` - -This will: - -- Generate build information (git commit, version) -- Start Hugo server on `http://localhost:1313` -- Enable hot reload - changes appear instantly in the browser - -### Content Structure - -```text -content/ -└── en/ # English content - ├── _index.md # Homepage - ├── blog/ # Blog posts - └── docs/ # Documentation - ├── architecture/ # Architecture docs - ├── decisions/ # ADRs - └── v1/ # Version-specific docs -``` - -### Creating Content - -1. **Add a new documentation page:** - - ```bash - # Create a new markdown file - vim content/en/docs/your-topic/_index.md - ``` - -2. **Add frontmatter:** - - ```yaml - --- - title: "Your Topic" - linkTitle: "Your Topic" - weight: 10 - description: > - Brief description of your topic. - --- - ``` - -3. **Write your content** in Markdown - -4. **Preview changes** - they appear immediately if `task serve` is running - -### Creating Architecture Diagrams - -Architecture diagrams are created with LikeC4: - -1. **Navigate to the appropriate LikeC4 project:** - - `resources/edp-likec4/` - Platform architecture - - `resources/doc-likec4/` - Documentation platform architecture - -2. **Edit or create `.c4` files** with your model - - Example: Create a simple view in `resources/edp-likec4/views/my-view.c4`: - - ```likec4 - specification { - element myperson - element mysystem - } - - model { - customer = myperson 'Customer' { - description 'End user of the platform' - } - - mySystem = mysystem 'My System' { - description 'Example system component' - } - - customer -> mySystem 'uses' - } - - views { - view myCustomView { - title "My Custom Architecture View" - - include customer - include mySystem - - autoLayout TopBottom - } - } - ``` - -3. **Regenerate webcomponents:** - - ```bash - task likec4:generate - ``` - -4. **Embed diagrams in Markdown:** - - ```markdown - {{}} - ``` - - **Finding available view IDs:** - - Open the `.c4` files in your project directory - - Look for `view {` declarations - - The `` is what you use in the `view` parameter - - Or use: `grep -r "^view " resources/edp-likec4/ --include="*.c4"` - -## Available Tasks - -View all available tasks: - -```bash -task --list -``` - -### Common Development Tasks - -| Task | Description | -|------|-------------| -| `task serve` | Start development server with hot reload | -| `task build` | Build production-ready site | -| `task build:dev` | Build development version | -| `task clean` | Remove build artifacts | -| `task test` | Run all tests | -| `task test:quick` | Run tests without link checking | - -## Quick Testing - -Before committing, run quick tests: - -```bash -task test:quick -``` - -This validates: - -- Hugo build succeeds -- Markdown syntax is correct - -For comprehensive testing, including link checking: - -```bash -task test -``` - -## Tips for Technical Writers - -1. **Write in present tense** - "The system processes..." not "The system will process..." -2. **Use code blocks** with syntax highlighting -3. **Include diagrams** for complex concepts -4. **Test locally** before pushing -5. **Keep it concise** - readers appreciate brevity -6. **Update regularly** - stale docs are worse than no docs - -## Troubleshooting - -### Port 1313 already in use - -```bash -# Find and kill the process -lsof -ti:1313 | xargs kill -9 -``` - -### Build errors - -```bash -# Clean and rebuild -task clean -task build:dev -``` - -### Missing dependencies - -```bash -# Reinstall all dependencies -task deps:install -``` - -## Next Steps - -Now that you can develop locally, learn about: - -- [Testing processes](../testing/) -- [CI/CD pipeline](../cicd/) diff --git a/content/en/docs-old/documentation/publishing.md b/content/en/docs-old/documentation/publishing.md deleted file mode 100644 index 1ee53ce..0000000 --- a/content/en/docs-old/documentation/publishing.md +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: "Publishing to Edge" -linkTitle: "Publishing" -weight: 50 -description: > - How documentation is deployed to the edge environment. ---- - -## Deployment Overview - -After successful CI/CD, the documentation is deployed to an edge computing environment. - -{{< likec4-view view="deploymentFlow" project="documentation-platform" >}} - -## Deployment Architecture - -### Edge Connect Platform - -Our documentation is deployed using **Edge Connect**, which orchestrates deployments to edge cloudlets. - -Configuration: `edgeconnectdeployment.yaml` - -```yaml -kind: edgeconnect-deployment -metadata: - name: "edpdoc" - appVersion: "1.0.0" - organization: "edp2" -spec: - k8sApp: - manifestFile: "./k8s-deployment.yaml" - infraTemplate: - - region: "EU" - cloudletOrg: "TelekomOP" - cloudletName: "Munich" - flavorName: "EU.small" -``` - -**Key settings:** - -- **Deployment name:** `edpdoc` -- **Region:** EU (Munich) -- **Cloudlet:** TelekomOP Munich -- **Flavor:** EU.small (resource allocation) - -### Kubernetes Deployment - -The application runs on Kubernetes: `k8s-deployment.yaml` - -#### Service Definition - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: edpdoc - labels: - run: edpdoc -spec: - type: LoadBalancer - ports: - - name: tcp80 - protocol: TCP - port: 80 - targetPort: 80 - selector: - run: edpdoc -``` - -- **Type:** LoadBalancer (external access) -- **Port:** 80 (HTTP) -- **Selector:** Routes traffic to pods with label `run: edpdoc` - -#### Deployment Configuration - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: edpdoc -spec: - replicas: 1 - selector: - matchLabels: - run: edpdoc - template: - metadata: - labels: - run: edpdoc - mexDeployGen: kubernetes-basic - spec: - containers: - - name: edpdoc - image: ###IMAGETAG### - imagePullPolicy: Always - ports: - - containerPort: 80 - protocol: TCP -``` - -- **Replicas:** 1 (single instance) -- **Image:** Injected by deployment pipeline (`###IMAGETAG###` placeholder) -- **Pull policy:** Always (ensures latest version) - -### Network Configuration - -Outbound connections are configured in `edgeconnectdeployment.yaml`: - -```yaml -network: - outboundConnections: - - protocol: "tcp" - portRangeMin: 80 - portRangeMax: 80 - remoteCIDR: "0.0.0.0/0" - - protocol: "tcp" - portRangeMin: 443 - portRangeMax: 443 - remoteCIDR: "0.0.0.0/0" -``` - -- **Port 80:** HTTP outbound -- **Port 443:** HTTPS outbound -- **CIDR:** `0.0.0.0/0` (all destinations) - -## Deployment Process - -### 1. Container Image Ready - -After CI passes: - -- Docker image built with `task build:oci-image` -- Tagged with git commit SHA -- Pushed to container registry - -### 2. Edge Connect Orchestration - -Edge Connect: - -1. Pulls container image -2. Reads `edgeconnectdeployment.yaml` -3. Provisions resources on Munich cloudlet -4. Applies Kubernetes manifests - -### 3. Kubernetes Deployment - -Kubernetes: - -1. Creates deployment with 1 replica -2. Pulls container image (`imagePullPolicy: Always`) -3. Starts pod running Nginx + static Hugo site -4. Creates LoadBalancer service -5. Assigns external IP - -### 4. Service Available - -Documentation is now accessible: - -- **Protocol:** HTTP -- **Port:** 80 -- **IP:** Assigned by LoadBalancer - -## Complete Workflow - -{{< likec4-view view="fullWorkflow" project="documentation-platform" >}} - -### End-to-End Process - -1. **Technical Writer writes content** (Markdown, LikeC4 models) -2. **Local testing** with `task serve` and `task test` -3. **Commit and push** to Git repository -4. **GitHub Actions triggered** on push to main -5. **CI tests run** (build, markdown, HTML, links) -6. **Container image built** if tests pass -7. **Image pushed** to registry -8. **Edge deployment triggered** -9. **Kubernetes applies** manifests -10. **Service available** on edge cloudlet - -## Monitoring Deployment - -### Check Deployment Status - -```bash -kubectl get deployments -n -kubectl get pods -n -kubectl get services -n -``` - -### View Logs - -```bash -kubectl logs deployment/edpdoc -n -``` - -### Access Documentation - -Find the LoadBalancer external IP: - -```bash -kubectl get service edpdoc -n -``` - -Access via: `http://` - -## Rollback - -If issues occur after deployment: - -### Option 1: Revert Commit - -```bash -git revert -git push origin main -``` - -CI will rebuild and redeploy. - -### Option 2: Manual Rollback - -```bash -kubectl rollout undo deployment/edpdoc -n -``` - -Returns to previous deployment version. - -### Option 3: Deploy Specific Version - -Update image tag in deployment: - -```bash -kubectl set image deployment/edpdoc edpdoc=/: -n -``` - -## Scaling - -Currently: **1 replica** - -To scale for higher traffic: - -```yaml -spec: - replicas: 3 -``` - -Then apply: - -```bash -kubectl apply -f k8s-deployment.yaml -``` - -Or scale dynamically: - -```bash -kubectl scale deployment/edpdoc --replicas=3 -n -``` - -## Security Considerations - -1. **Image scanning** - Scan container images for vulnerabilities -2. **Resource limits** - Set CPU/memory limits in deployment -3. **Network policies** - Restrict pod-to-pod communication -4. **HTTPS** - Consider adding TLS termination (Ingress) - -## Performance Optimization - -1. **CDN** - Add CDN in front of LoadBalancer -2. **Caching** - Configure Nginx caching headers -3. **Compression** - Enable gzip in Nginx -4. **Image optimization** - Compress images in documentation - -## Troubleshooting - -### Pod not starting - -```bash -kubectl describe pod -n -``` - -Check: - -- Image pull errors -- Resource constraints -- Configuration errors - -### Service unreachable - -```bash -kubectl describe service edpdoc -n -``` - -Check: - -- LoadBalancer IP assigned -- Port configuration -- Network policies - -### Old content served - -Check: - -- `imagePullPolicy: Always` in deployment -- Image tag is updated -- Pod has restarted - -Force pod restart: - -```bash -kubectl rollout restart deployment/edpdoc -n -``` - -## Best Practices - -1. **Test before deploying** - Always run `task test` locally -2. **Use feature branches** - Don't deploy directly from local -3. **Monitor after deployment** - Check logs and access -4. **Document changes** - Update RELEASE.md -5. **Version control** - Tag releases in Git - -## Future Enhancements - -Potential improvements: - -- **Blue-green deployment** - Zero-downtime updates -- **Canary releases** - Gradual rollout to subset of users -- **Auto-scaling** - HorizontalPodAutoscaler based on traffic -- **Multi-region** - Deploy to multiple cloudlets -- **HTTPS** - TLS certificates and Ingress controller - -## Summary - -The deployment process is automated and reliable: - -✅ **CI ensures quality** - Tests prevent broken deployments -✅ **Edge infrastructure** - Low-latency access from EU -✅ **Kubernetes orchestration** - Reliable, scalable platform -✅ **Simple rollback** - Easy to recover from issues - -As a technicalWriter, focus on content quality. The platform handles deployment automatically! 🚀 diff --git a/content/en/docs-old/documentation/quick-reference.md b/content/en/docs-old/documentation/quick-reference.md deleted file mode 100644 index cf53c57..0000000 --- a/content/en/docs-old/documentation/quick-reference.md +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: "Quick Reference" -linkTitle: "Quick Reference" -weight: 60 -description: > - Cheat sheet for common technicalWriter tasks. ---- - -## Common Commands - -### Local Development - -```bash -# Start development server (with hot reload) -task serve - -# Build for production -task build - -# Build for development (faster, no minification) -task build:dev - -# Clean build artifacts -task clean -``` - -### Testing - -```bash -# Quick tests (build + markdown) -task test:quick - -# Full test suite -task test - -# Individual tests -task test:build # Hugo build validation -task test:markdown # Markdown linting -task test:html # HTML validation -task test:links # Link checking -``` - -### Dependencies - -```bash -# Install dependencies -task deps:install - -# Update dependencies -task deps:update - -# Ensure npm dependencies (auto-installs if missing) -task deps:ensure-npm -``` - -### Container Operations - -```bash -# Build OCI/Docker image -task build:oci-image - -# Build and test container -task test:oci-image -``` - -## File Locations - -### Content - -| Path | Description | -|------|-------------| -| `content/en/docs/` | Main documentation | -| `content/en/blog/` | Blog posts | -| `content/en/_index.md` | Homepage | - -### Architecture Models - -| Path | Description | -|------|-------------| -| `resources/edp-likec4/` | Platform architecture models | -| `resources/doc-likec4/` | Documentation platform models | - -### Configuration - -| File | Purpose | -|------|---------| -| `hugo.toml` | Hugo configuration | -| `config.yaml` | Docsy theme config | -| `Taskfile.yml` | Task definitions | -| `package.json` | npm dependencies and scripts | -| `.markdownlint.json` | Markdown linting rules | -| `.htmlvalidate.json` | HTML validation rules | -| `.htmltest.yml` | Link checker config | - -### Build Output - -| Path | Description | -|------|-------------| -| `public/` | Generated static site | -| `resources/_gen/` | Generated resources (Hugo) | -| `data/build_info.json` | Build metadata (git commit, version) | - -## Markdown Frontmatter - -### Standard Page - -```yaml ---- -title: "Page Title" -linkTitle: "Short Title" -weight: 10 -description: > - Brief description for SEO and navigation. ---- -``` - -### Blog Post - -```yaml ---- -title: "Post Title" -date: 2025-01-15 -author: "Your Name" -description: > - Post summary. ---- -``` - -## Embedding Architecture Diagrams - -### Basic Embed - -```markdown -{{< likec4-view view="view-name" project="project-name" >}} -``` - -### Parameters - -- `view` (required) - The view ID from your LikeC4 model -- `project` (optional, default: "architecture") - The LikeC4 project name -- `title` (optional, default: "Architecture View: {view}") - Custom header text above the diagram - -### Examples - -```markdown -{{< likec4-view view="overview" project="documentation-platform" >}} -{{< likec4-view view="localDevelopment" project="documentation-platform" >}} -{{< likec4-view view="cicdPipeline" project="documentation-platform" >}} -{{< likec4-view view="otc-faas" project="architecture" title="OTC FaaS Deployment" >}} -``` - -## LikeC4 Commands - -### Regenerate Webcomponents - -After modifying `.c4` files: - -```bash -task likec4:generate -``` - -This regenerates both: - -- `static/js/likec4-webcomponent.js` (EDP architecture) -- `static/js/likec4-doc-webcomponent.js` (Documentation platform) - -### Start Development Server - -```bash -cd resources/doc-likec4 # or resources/edp-likec4 -npm install -npm start -``` - -Opens LikeC4 IDE at `http://localhost:5173` - -### Export Diagrams - -```bash -cd resources/doc-likec4 -npx likec4 export png -o ./images . -``` - -## Git Workflow - -### Feature Branch - -```bash -# Create feature branch -git checkout -b feature/your-feature - -# Make changes and test -task serve -task test:quick - -# Commit -git add . -git commit -m "Description of changes" - -# Push -git push origin feature/your-feature - -# Create pull request on GitHub -``` - -### Update from Main - -```bash -git checkout main -git pull origin main -git checkout feature/your-feature -git rebase main -``` - -## Troubleshooting - -### Port 1313 in use - -```bash -lsof -ti:1313 | xargs kill -9 -``` - -### Build errors - -```bash -task clean -task build:dev -``` - -### Missing dependencies - -```bash -task deps:install -``` - -### Hugo module issues - -```bash -hugo mod clean -hugo mod get -u -hugo mod tidy -``` - -### LikeC4 language server - -In VS Code: `Ctrl+Shift+P` → "LikeC4: restart language server" - -## URLs - -### Local Development - -- **Documentation:** -- **LikeC4 IDE:** (when running `npm start` in likec4 folder) - -### Production - -Check `edgeconnectdeployment.yaml` for deployment URL or run: - -```bash -kubectl get service edpdoc -n -``` - -## Quick Checks Before Committing - -1. ✅ `task test:quick` passes -2. ✅ Preview looks correct in browser -3. ✅ No broken links (visual check) -4. ✅ Architecture diagrams render -5. ✅ Frontmatter is correct - -## Getting Help - -- **Hugo docs:** -- **Docsy theme:** -- **LikeC4:** -- **Task:** - -## View Documentation Architecture - -To understand how this documentation platform works: - -→ Start here: [Documentation About Documentation](../) diff --git a/content/en/docs-old/documentation/testing.md b/content/en/docs-old/documentation/testing.md deleted file mode 100644 index bb2be84..0000000 --- a/content/en/docs-old/documentation/testing.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: "Testing" -linkTitle: "Testing" -weight: 30 -description: > - Quality assurance processes for documentation. ---- - -## Testing Philosophy - -Quality documentation requires testing. Our testing process validates: - -- **Build integrity** - Hugo can generate the site -- **Content quality** - Markdown follows best practices -- **HTML validity** - Generated HTML is well-formed -- **Link integrity** - No broken internal or external links - -## Testing Capabilities - -{{< likec4-view view="testingCapabilities" project="documentation-platform" >}} - -## Local Testing - -Before committing changes, run tests locally: - -### Quick Tests - -For rapid feedback during development: - -```bash -task test:quick -``` - -This runs: - -- `task test:build` - Hugo build validation -- `task test:markdown` - Markdown linting - -### Full Test Suite - -Before creating a pull request: - -```bash -task test -``` - -This runs all tests including: - -- `task test:build` - Build validation -- `task test:markdown` - Markdown linting -- `task test:html` - HTML validation -- `task test:links` - Link checking - -## Individual Tests - -You can run individual tests: - -### Build Test - -Validates that Hugo can build the site: - -```bash -task test:build -``` - -This runs: `hugo --gc --minify --logLevel info` - -**What it checks:** - -- Hugo configuration is valid -- Content files have correct frontmatter -- Templates render without errors -- No circular dependencies in content structure - -### Markdown Lint - -Checks Markdown syntax and style: - -```bash -task test:markdown -``` - -This uses `markdownlint` with custom rules in `.markdownlint.json`. - -**What it checks:** - -- Consistent heading hierarchy -- Proper list formatting -- Code blocks have language tags -- No trailing whitespace -- Consistent line length (where applicable) - -**Common issues:** - -- Missing blank lines around code blocks -- Inconsistent list markers -- Heading levels skipped - -### HTML Validation - -Validates generated HTML: - -```bash -task test:html -``` - -This uses `htmlvalidate` with rules in `.htmlvalidate.json`. - -**What it checks:** - -- Well-formed HTML5 -- Proper nesting of elements -- Valid attributes -- Accessible markup - -### Link Checking - -Verifies all links are valid: - -```bash -task test:links -``` - -This uses `htmltest` configured in `.htmltest.yml`. - -**What it checks:** - -- Internal links point to existing pages -- External links are reachable -- Anchor links target existing elements -- No redirects (301/302) - -**Note:** This test can be slow for large sites with many external links. - -## CI Testing - -All tests run automatically on: - -- **Push to `main`** - Full test suite -- **Pull requests** - Full test suite - -View the GitHub Actions workflow: `.github/workflows/test.yml` - -### CI Test Results - -If tests fail in CI: - -1. Check the GitHub Actions logs -2. Look for specific test failures -3. Run the same test locally: `task test:` -4. Fix the issue -5. Commit and push - -### Artifacts - -CI uploads test artifacts: - -- `htmltest-report/` - Link checking results - -Download these from the GitHub Actions run to investigate failures. - -## Test Configuration Files - -| File | Purpose | -|------|---------| -| `.markdownlint.json` | Markdown linting rules | -| `.htmlvalidate.json` | HTML validation rules | -| `.htmltest.yml` | Link checker configuration | - -## Best Practices - -1. **Test early, test often** - Run `task test:quick` frequently -2. **Fix issues immediately** - Don't accumulate technical debt -3. **Understand failures** - Read error messages carefully -4. **Update tests** - If rules change, update config files -5. **Document exceptions** - If you need to ignore a rule, document why - -## Common Issues and Solutions - -### Markdown: MD031 - Blank lines around fences - -**Problem:** Missing blank line before/after code block - -**Solution:** Add blank lines: - -```markdown -Some text - -​```bash -command here -​``` - -More text -``` - -### Markdown: MD032 - Blank lines around lists - -**Problem:** Missing blank line before/after list - -**Solution:** Add blank lines: - -```markdown -Text before - -- List item 1 -- List item 2 - -Text after -``` - -### HTML: Invalid nesting - -**Problem:** Elements improperly nested - -**Solution:** Check template files and shortcodes - -### Link Check: 404 Not Found - -**Problem:** Link points to non-existent page - -**Solution:** - -- Fix the link -- Create the missing page -- Remove the link if no longer relevant - -## Next Steps - -Learn about the automated [CI/CD pipeline](../cicd/). diff --git a/content/en/docs-old/platform-overview.md b/content/en/docs-old/platform-overview.md deleted file mode 100644 index 3c20c3e..0000000 --- a/content/en/docs-old/platform-overview.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "eDF Documentation Overview" -description: "Comprehensive guide for users and auditors to understand and use the eDF." ---- - -# Meta - -## Guidelines - -1. for users/developers/engineers we describe our output / outcome as product - * it is usable - * there are links / lists to repos -2. we have and describe a 'product-structure-tree' -3. for auditors / governance we have a list / cross reference to Jira tickets - * R&D ?, - * mappen auf die projektphasen, wie erstellt ein team eine plattform? - * stw. mobbing, mob programming - * mapping auf deliverables von IPCEI-CIS ???, bzw. mapping auf epics? - * projekthistorie, projektdynamic, teilprojekt von eDF , teilprojekt-abhängigkiet zB 'Platform' - * friendly user phase - * forgejo community, OSS, PR handling - * externe stakeholder, user experience, think ahead integration - * technolgien, technologie-schwerpunkte, cutting-edge research - * design/specification und bewertung von lösungsentürfen (zB VictoriaMetrics, GARM, terraform, argoCD, ...) - * CI/CD, golden paths (anm.: ist in grobkonzept, deployment von apps von developern fehlt) - -# Introduction -- Purpose of the eDF -- Target audience (developers, engineers, auditors) -- High-level product structure overview -- High-level architecture overview - -# eDF Components Overview -- List of all major components -- Vertical and horizontal layers explained -- Component maturity/status (fully integrated, partial, experimental) - -# Getting Started -- Quickstart guide for developers -- Onboarding steps for eDF engineers -- Prerequisites and environment setup - -# Component Details -For each component: -- Description and purpose -- Repository link -- README summary -- Architecture diagrams (link to Miro/Lucid) -- Usage instructions -- Integration points - -# Development Experience -- How to contribute -- Local development workflow -- CI/CD pipelines -- Testing and validation - -# Operational Experience -- Deployment guides -- Monitoring and observability -- Troubleshooting - -# Audit & Compliance -- Overview of implemented controls -- Ticket references (Jira, changelogs) -- Documentation of decisions and reviews -- Evidence of value and coverage - -# FAQ & Support -- Common issues and solutions -- Contact points for help - -# Appendix -- Glossary -- References to external resources diff --git a/content/en/docs-old/v1/_index.md b/content/en/docs-old/v1/_index.md deleted file mode 100644 index f694474..0000000 --- a/content/en/docs-old/v1/_index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Documentation (v1 - Legacy)" -linkTitle: "v1 (Legacy)" -weight: 100 -description: > - Legacy documentation - archived version of the original content. ---- - -{{% alert title="Note" color="warning" %}} -This is the legacy documentation (v1). For the latest version, please visit the [current documentation](/docs/). -{{% /alert %}} - -This section contains the original documentation that is being migrated to a new structure. diff --git a/content/en/docs-old/v1/concepts/3_use-cases/fibonacci-app_cpu-spike.png b/content/en/docs-old/v1/concepts/3_use-cases/fibonacci-app_cpu-spike.png deleted file mode 100644 index e02a51e..0000000 Binary files a/content/en/docs-old/v1/concepts/3_use-cases/fibonacci-app_cpu-spike.png and /dev/null differ diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/7b748ff4-image2-1024x580.png b/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/7b748ff4-image2-1024x580.png deleted file mode 100644 index 79d6754..0000000 Binary files a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/7b748ff4-image2-1024x580.png and /dev/null differ diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/_index.md b/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/_index.md deleted file mode 100644 index 16aea34..0000000 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/_index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Platform Components" -weight: 3 -description: What in terms of components or building blocks is needed in a platform? ---- - -> This page is in work. Right now we have in the index a collection of links describing and listing typical components and building blocks of platforms. Also we have a growing number of subsections regarding special types of components. - -See also: - -* https://thenewstack.io/build-an-open-source-kubernetes-gitops-platform-part-1/ -* https://thenewstack.io/build-an-open-source-kubernetes-gitops-platform-part-2/ - -![alt text](7b748ff4-image2-1024x580.png) - diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/review-stl.md b/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/review-stl.md deleted file mode 100644 index 429eab2..0000000 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/review-stl.md +++ /dev/null @@ -1,11 +0,0 @@ - - -# Gitops changes the definition of 'Delivery' or 'Deployment' - -We have Gitops these days .... so there is a desired state of an environment in a repo and a reconciling mechanism done by Gitops to enforce this state on the environemnt. - -There is no continuous whatever step inbetween ... Gitops is just 'overwriting' (to avoid saying 'delivering' or 'deploying') the environment with the new state. - -This means whatever quality ensuring steps have to take part before 'overwriting' have to be defined as state changer in the repos, not in the environments. - -Conclusio: I think we only have three contexts, or let's say we don't have the contect 'continuous delivery' diff --git a/content/en/docs-old/v1/concepts/5_platforms/Humanitec/_index.md b/content/en/docs-old/v1/concepts/5_platforms/Humanitec/_index.md deleted file mode 100644 index e0ccb2f..0000000 --- a/content/en/docs-old/v1/concepts/5_platforms/Humanitec/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Humanitec -weight: 4 ---- - - -tbd diff --git a/content/en/docs-old/v1/concepts/_index.md b/content/en/docs-old/v1/concepts/_index.md deleted file mode 100644 index 9d830d0..0000000 --- a/content/en/docs-old/v1/concepts/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Concepts -weight: 1 -description: The underlying platforming concepts of the Edge Developer Framework (EDF) solution, i.e. the problem domain ---- - - diff --git a/content/en/docs-old/v1/project/MVP-12-OTC.md b/content/en/docs-old/v1/project/MVP-12-OTC.md deleted file mode 100644 index 252ed04..0000000 --- a/content/en/docs-old/v1/project/MVP-12-OTC.md +++ /dev/null @@ -1,269 +0,0 @@ - - -# Ideen - -* Kanban -* product review sessions - -# ChatGPT - -## Fehlendes Backlog - -> welche agilen vorgehensmodelle bzw. best practices gibt es in der software-entwicklung, wenn das product backlog noch nicht da ist. es gibt zwar eine produktvision und auch schon einen PoC, aber das Produkt ist sowohl technisch als auch nutzenseitig immer nocht nicht planbar in user stories. daher ist SCRUM nicht machbar. das team ist ca. 8 personen groß, und wir überlgen, einen meilenstein in den nächsten 8 wochen einfach durch tägliches 'PDCA' zu erstellen: ein morgendliches planning, dann in subgruppen ein erforschen, dann im Plenum wieder C (Check) zusammenführen/integrieren, und ein abschliessendes 'A' als Ergebnissicherung, Versionierierung, Dokumentation. Was hälst du von diesem Vorgehen, bzw. welches Risiken und Verbesserungsvorschläge hast du? Oder gibt es ein Standard-Vorgehen hierfür? - -Dein beschriebenes Szenario – Vision und PoC vorhanden, aber kein ausformuliertes Product Backlog – ist typisch für eine frühe **Explorations- oder Inceptionsphase** in der Produktentwicklung. In dieser Phase ist klassisches **Scrum** tatsächlich oft zu starr, weil es eine gewisse Klarheit über Features und Stories voraussetzt. Das von euch überlegte Vorgehen klingt nach einer sehr pragmatischen und iterativen Methode, die im Kern gut zu den **Lean-Startup-Prinzipien** oder **Design Thinking + Agile Engineering** passt. - -## Bewertung eures PDCA-basierten Vorgehens - -**Positiv:** -* **Täglicher PDCA-Zyklus** (Plan-Do-Check-Act) sorgt für schnelle Feedbackschleifen. -* **Morgendliches Planning** und **Check-Meeting im Plenum** fördern Transparenz und Selbstorganisation. -* **Subgruppen-Erkundung** erlaubt parallele Experimente. -* **Abschließendes "A"** zur Ergebnissicherung ist essenziell, sonst bleibt es bei "busy work". - -**Risiken:** - -1. **Fehlende Langfriststruktur:** Ohne grobe übergreifende Richtung (z. B. Meilensteinplan, Zielbild) kann es leicht in ziellosem Explorieren enden. -2. **Uneinheitlicher Erkenntnisgewinn:** Subgruppen könnten redundant oder inkompatibel arbeiten, wenn kein gemeinsames Verständnis besteht. -3. **Dokumentation als „Nachsorge“:** Wenn die Doku erst am Ende passiert, droht Wissensverlust – lieber „Living Docs“ in Echtzeit pflegen. -4. **Stakeholder-Abkopplung:** Ohne explizite Reviews oder Demo-Rituale kann Feedback von außen fehlen. - -## Verbesserungsvorschläge - -1. **Exploration Backlog oder Hypothesenboard:** Auch ohne klassisches Product Backlog könnt ihr mit einem **Experiment-/Hypothesenboard** (à la Lean Startup) arbeiten. Zum Beispiel: - * Hypothese: „Feature X wird den Use Case Y verbessern.“ - * Experiment: „Prototyp bauen und testen mit Nutzergruppe Z.“ - * Ergebnis & Learnings dokumentieren. - -2. **Wöchentliche Zielsetzungen:** Jeden Montag ein Weekly Planning mit klaren Zielen für die Woche (Outcome-fokussiert, nicht Task-fokussiert). - -3. **Integration mit Dual Track Agile:** Das Vorgehen ähnelt dem **Dual-Track-Modell**: ein **Discovery-Track** (Erkunden, Validieren, Prototypisieren) läuft parallel zum späteren **Delivery-Track** (Releases, Sprints). Ihr seid noch voll im Discovery-Track. - -4. **Design Studio oder Spike-Zeitfenster:** Strukturiert Zeit für z. B. 2-Tages-Design-Studios oder 1-Tages-Spikes – das erhöht die Qualität der Exploration. - -5. **Review/Share-Session freitags:** Eine fixe wöchentliche Review-/Demo-Session (auch intern) erhöht die Disziplin und hilft beim „Check“-Teil im PDCA. - -## Gängige Standard-Methoden in dieser Phase - -* **Design Thinking** (für Nutzerzentrierte Exploration) -* **Lean UX / Lean Startup** (Hypothesengetrieben) -* **Dual Track Agile** -* **Google Design Sprint (5 Tage)** – extrem hilfreich, wenn es um das Testen von Nutzerideen geht -* **Shape Up (Basecamp)** – für nicht-sprintbasiertes Arbeiten mit "Bet" auf 6-Wochen-Projekte - ---- - -**Fazit:** -Euer PDCA-Zyklus ist ein solider, pragmatischer Einstieg in eine unsichere, vorstrukturierte Produktphase. Mit ein paar Ergänzungen (Exploration Backlog, feste Review-Elemente, Hypothesenstruktur) könnt ihr daraus ein effektives Discovery-Vorgehen machen, das den Übergang zu einem klassischen agilen Framework (z. B. Scrum) vorbereitet. - -Möchtest du eine konkrete Vorlage für ein Exploration Backlog oder Hypothesenboard für euer Team? - -## Architektur vorhanden - -> ok, du findest vor allem Tages-Zyklen zu kurz. Ich möchte noch ergänzen, dass wir eine Architektur haben. Das klingt vielleicht paradox, aber es ist tatsächlich so, dass wir das Software-syewtm bereits designed haben, und die Komponenten auch bereits kennen, aber jetzt vor allem die Wege des automatischen Deployments in eine Cloud und die Konfigurations- und Verwaltungsstrukturen unsrerer Software herausfinden müssen. Das ist da, was sich gerade nicht weiter planen lässt. Kannst du mit diesen Ergänzungen dein Feedbach nochmal schärfen? - -Danke für die Ergänzung – das ändert die Ausgangslage entscheidend und erlaubt eine deutlich präzisere Einordnung. - -### Neue Ausgangslage - -* Ihr **habt eine Architektur**: Die Komponenten und Schnittstellen sind klar. -* Es gibt **bereits einen PoC** und eine Produktvision. -* Das **Backlog fehlt**, weil ihr gerade die **"nicht-funktionalen" Themen wie Deployment, Cloud-Umgebung, Konfiguration und Betrieb** klärt. -* Das System ist **technisch grob fertig designt**, aber die **Operations- und Deployment-Prozesse** sind unklar und werden explorativ entwickelt. - -### Schärferes Feedback - -#### 1. **Tages-PDCA-Zyklen wirken in diesem Kontext zu granular** - -Bei Infrastruktur-, Deployment- oder Konfigurationsfragen entstehen oft tiefe „Spikes“ (z. B. CI/CD-Pipeline aufsetzen, Helm-Chart modellieren, Secrets Handling evaluieren). Diese brauchen oft mehr als einen Tag bis zum „Check“, weil Abhängigkeiten (z. B. Rechte, Cloud-Zugänge, Testumgebungen) entstehen. Ein **2- bis 3-Tages-Rhythmus** mit klaren Zwischenzielen wäre realistischer, ergänzt um: - -* **Daily Standup als Taktgeber**, aber nicht zwangsläufig als vollständiger PDCA-Zyklus. -* **Weekly Planning mit Zielvorgaben und Review-Ritualen**, um Fortschritt messbar zu machen. - -#### 2. **Was ihr macht, ist kein Produkt-Delivery, sondern "System Enablement"** - -Ihr steckt im Übergang von Architektur zu einem **Infrastructure as Code + Plattform Enablement Track**. Das bedeutet: -* Die „User Stories“ sind keine klassischen Features, sondern z. B.: - * „Als Team möchte ich unsere Software mit einem Befehl deployen können.“ - * „Als Betreiber will ich wissen, wie ich Services konfiguriere.“ - -Das spricht für ein **Infrastructure Kanban Board**, keine Sprints. - -#### 3. **Mögliche Vorgehensmodelle / Best Practices** - -| Modell / Methode | Warum es jetzt passt | -|------------------------------------------|------------------------------------------------------------------| -| **Kanban für technische Tasks** | Flexible Work-in-Progress-Kontrolle, ideal für Exploration. | -| **Spikes** (aus XP) | Timeboxed Exploration zu offenen Fragen (z. B. Helm, Secrets). | -| **Enabler Epics (SAFe)** | Deployment- und Ops-Fragen formal als "Enabler" fassen. | -| **Team Topologies – Platform Team Light**| Ihr agiert gerade wie ein internes Plattform-Team. | -| **Weekly DevOps Review** | Alle 5–7 Tage Stand der Automatisierung/Doku/Strukturen. | -| **ADRs & Living Docs** | Architectural Decision Records für Deployment-/Ops-Entscheidungen.| - -#### 4. **Konkrete Empfehlungen zur Strukturierung** - -* **Ziele für die 8 Wochen formulieren** als **"Capabilities"**, z. B.: - * „Greenfield-Clouddeployment in AWS/GCP über GitHub Actions.“ - * „Parameterisierbares Helm-Chart mit Doku.“ - * „Konfigurierbarkeit über ENV vs. Secrets evaluieren.“ -* Dazu **1–2 Woche cadence**, jede Woche ein Review/Checkpoint. -* **Boards mit Task-Kategorien**: - * 🧪 Spike - * 🛠️ Tooling/Automation - * 📦 Infrastruktur/Dienst - * 📓 Dokumentation -* **Ergebnisse sofort versionieren und dokumentieren**, z. B.: - * GitOps Repo-Struktur - * ADRs - * Beispiel-Deployments - ---- - -### Fazit - -Ihr seid im **"technisch operativen Enablement"** eures Systems, nicht im Produkt-Delivery. Das rechtfertigt: -* ein **kanban-artiges, flexibles Modell mit timeboxed Reviews**, -* tägliche Abstimmungen, aber nicht zwingend tägliche Zyklen, -* Fokus auf **Enabler-Ziele statt funktionale Stories**. - -SCRUM ist hier fehl am Platz, aber euer Ansatz ist sehr nahe an einer **modernen DevOps-orientierten Arbeitsweise**, die z. B. von **Platform Engineering Teams** eingesetzt wird. - -Möchtest du ein Beispiel für ein solches Kanban-Board mit passenden Task-Typen und Zielstruktur? - -## Kanban - -> ja, gerne! - -Hier ist ein konkretes Beispiel für ein **Kanban-Board**, das speziell auf eure Situation als „Platform/Enablement“-Team mit einem vorhandenen Architekturbild, aber offenem Deployment- und Betriebsdesign zugeschnitten ist. - ---- - -## 🎯 **Zielstruktur (übergeordnet für 8 Wochen)** - -Diese formuliert ihr am besten als **Capabilities** – Fähigkeiten, die das System nachher haben soll: - -| Capability ID | Zielbeschreibung | -|---------------|---------------------------------------------------------------------------------------------| -| C1 | Anwendung kann automatisiert in Cloudumgebung X deployed werden (inkl. Secrets Mgmt) | -| C2 | Konfiguration des Systems ist externisiert und dokumentiert (ENV, YAML, o. ä.) | -| C3 | Monitoring- und Logging-Infrastruktur ist einsatzbereit und dokumentiert | -| C4 | Dev- und Test-Umgebungen sind klar getrennt und automatisch provisionierbar | -| C5 | Alle Plattformentscheidungen (z. B. Helm vs. Kustomize) sind versioniert und begründet | - -Diese Capabilities bilden **Spalten** oder **Swimlanes** im Board (wenn euer Tool das unterstützt, z. B. GitHub Projects, Jira oder Trello mit Labels). - ---- - -## 🗂️ **Kanban-Board-Spalten (klassisch)** - -| Spalte | Zweck | -|------------------|-----------------------------------------------------------| -| 🔍 Backlog | Ideen, Hypothesen, Tasks – priorisiert nach Capabilities | -| 🧪 In Exploration | Aktive Spikes, Proofs, technische Evaluierungen | -| 🛠️ In Progress | Umsetzung mit konkretem Ziel | -| ✅ Review / Check | Funktionsprüfung, internes Review | -| 📦 Done | Abgeschlossen, dokumentiert, ggf. in Repo | - ---- - -## 🏷️ **Task-Typen (Labels oder Emojis zur Kennzeichnung)** - -| Symbol / Label | Typ | Beispiel | -|------------------|-----------------------------|--------------------------------------------------------------------------| -| 🧪 Spike | Technische Untersuchung | „Untersuche ArgoCD vs. Flux für GitOps Deployment“ | -| 📦 Infra | Infrastruktur | „Provisioniere dev/test/stage in GCP mit Terraform“ | -| 🔐 Secrets | Sicherheitsrelevante Aufgabe| „Design für Secret-Handling mit Sealed Secrets“ | -| 📓 Docs | Dokumentation | „README für Developer Setup schreiben“ | -| 🧰 Tooling | CI/CD, Pipelines, Linter | „GitHub Action für Build & Deploy schreiben“ | -| 🔁 Entscheidung | Architekturentscheidung | „ADR: Helm vs. Kustomize für Service Deployment“ | - ---- - -## 🧩 Beispielhafte Tasks für Capability „C1 – Deployment automatisieren“ - -| Task | Typ | Status | -|----------------------------------------------|----------|----------------| -| Write GitHub Action for Docker image push | 🧰 Tooling | 🛠️ In Progress | -| Evaluate ArgoCD vs. Flux | 🧪 Spike | ✅ Review | -| Create Helm Chart for Service A | 📦 Infra | 🔍 Backlog | -| Create ADR: Deployment-Toolentscheidung | 🔁 Entscheidung | 🔍 Backlog | -| Add deployment doc in Wiki | 📓 Docs | 🔍 Backlog | - ---- - -## 📅 Cadence-Empfehlung - -* **Daily Standup (15 min)**: Was läuft, was blockiert? Pull statt Push! -* **Weekly Planning (Montag)**: Priorisieren und Backlog-Grooming (welche Capabilities sind diese Woche dran?) -* **Weekly Review (Freitag)**: Erkenntnisse, Entscheidungen und Dokumentation präsentieren -* Optional: **Retrospektive alle 2 Wochen**, falls das Team Energie hat - ---- - -Wenn du magst, kann ich dir ein Beispiel-Board als Markdown-Vorlage oder als CSV-Datei zum Import in Trello, GitHub Projects, Jira etc. machen. Wäre das hilfreich? - -## Living Docs - -> kannst du noch etwas mehr zu 'LivingDocs' sagen? - -Ja, gerne! **"Living Docs"** (bzw. **Living Documentation**) ist ein Konzept aus der agilen Softwareentwicklung und DevOps, das sich auf **aktuelle, direkt aus dem System oder aus dem Arbeitsprozess generierte Dokumentation** bezieht. Ziel ist es, dass die Dokumentation *nicht veraltet*, sondern so eng mit Code und Systemzustand gekoppelt ist, dass sie sich (teilweise) selbst aktualisiert oder sich mit dem Entwicklungsprozess mitbewegt. - ---- - -## 🔍 **Was macht "Living Documentation" aus?** - -| Merkmal | Beschreibung | -|----------------------------------|------------------------------------------------------------------------------| -| 🔄 Automatisch erzeugt oder aktualisiert | Generiert aus Code, Tests, Pipelines, ADRs oder Deployments | -| 📌 Versionskontrolliert | Im Git abgelegt, gemeinsam mit dem Code gepflegt | -| 🧑‍💻 Entwicklernah | Entwickelt sich mit dem Code weiter – keine Trennung zwischen "Docs" und Dev | -| 📈 Änderbar & nachvollziehbar | Jede Änderung an Code/Doku hat einen Commit & Kontext | -| 📚 Mehrwert für alle Beteiligten| Richtet sich an Devs, Ops, PMs oder andere Teams – nicht nur "für später" | - ---- - -## 🧰 Typische Formen von Living Docs - -| Typ | Beschreibung & Tools | -|----------------------|----------------------------------------------------------------------------------------| -| **Architecture Decision Records (ADRs)** | Markdown-Dateien im Repo (z. B. `docs/adr/001-helm-vs-kustomize.md`) | -| **Code-Doku aus Source** | Mit Tools wie JSDoc, TypeDoc, Sphinx, Doxygen, etc. | -| **API-Doku** | Automatisch aus Code oder OpenAPI (Swagger) generiert | -| **Test-Doku (z. B. BDD)** | z. B. Gherkin-Style: `Given/When/Then`-Spezifikationen als Dokumentation | -| **Monitoring & Deployment-Status** | z. B. Dashboards mit Infrastructure-Doku (Grafana, Backstage, Argo UI) | -| **DevDocs im Repo** | z. B. `README.md`, `CONTRIBUTING.md`, `how-to/`, `docs/`, `adr/` | -| **Playbooks / Runbooks** | Schritt-für-Schritt-Anleitungen für Betrieb oder Störungen | - ---- - -## ✅ **Best Practices** - -1. **Nutze Markdown + Git:** Einfach, versionierbar, lesbar → ADRs, Runbooks, HowTos. -2. **Dokumentiere Entscheidungen bewusst:** Lieber knappe, saubere ADRs als keine Doku. -3. **Verknüpfe Doku mit Code / CI/CD:** Beispiel: Build-Tool erzeugt automatisch API-Doku oder ADR-Lint-Checks. -4. **Verlinke Logs, Dashboards, Monitoring:** z. B. in einem `system-overview.md`. -5. **Behandle Doku wie Code:** Reviewpflichtig, Pull Request basiert, CI-checkbar. - ---- - -## 🛠️ Tools & Frameworks - -| Zweck | Tools (Beispiele) | -|------------------------|-------------------------------------------------------------------------| -| ADRs | [`adr-tools`](https://github.com/npryce/adr-tools), einfaches Markdown | -| Markdown-Doku | MkDocs, Docusaurus, GitBook | -| API-Doku | Swagger/OpenAPI, Redocly | -| Infrastruktur-Doku | Backstage (Spotify), Terraform-docs | -| Doku-Automatisierung | GitHub Actions, pre-commit Hooks, CI-Checks | - ---- - -## 🧠 Denkweise: Doku = Gespräch in Zeit - -> "Dokumentation ist kein Nachtrag, sondern ein asynchrones Gespräch mit deinem zukünftigen Ich – oder dem nächsten Teammitglied." - -Gerade in eurem Kontext (technisches Enablement, Deployment, Betrieb) ist das **entscheidungsorientierte, leichtgewichtige Festhalten von Kontext** Gold wert. ADRs und `docs/runbooks/`-Verzeichnisse sind ein idealer Startpunkt. - ---- - -Möchtest du eine Vorlage für ein ADR oder ein Beispielverzeichnis für eine sinnvolle Living-Docs-Struktur im Repo? diff --git a/content/en/docs-old/v1/project/bootstrapping/_index.md b/content/en/docs-old/v1/project/bootstrapping/_index.md deleted file mode 100644 index 9e07af4..0000000 --- a/content/en/docs-old/v1/project/bootstrapping/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Bootstrapping Infrastructure -weight: 30 -description: The cluster and the installed applications in the bootstrapping cluster ---- - -In order to be able to do useful work, we do need a number of applications right away. We're deploying these manually so we have the necessary basis for our work. Once the framework has been developed far enough, we will deploy this infrastructure with the framework itself. diff --git a/content/en/docs-old/v1/project/bootstrapping/backup/_index.md b/content/en/docs-old/v1/project/bootstrapping/backup/_index.md deleted file mode 100644 index b4b31f1..0000000 --- a/content/en/docs-old/v1/project/bootstrapping/backup/_index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Backup of the Bootstrapping Cluster -weight: 30 -description: Backup and Restore of the Contents of the Bootstrapping Cluster ---- - -## Velero - -We are using [Velero](https://velero.io/) for backup and restore of the deployed applications. - -## Installing Velero Tools - -To manage a Velero install in a cluster, you need to have Velero command line tools installed locally. Please follow the instructions for [Basic Install](https://velero.io/docs/v1.9/basic-install). - -## Setting Up Velero For a Cluster - -Installing and configuring Velero for a cluster can be accomplished with the CLI. - -1. Create a file with the credentials for the S3 compatible bucket that is storing the backups, for example `credentials.ini`. - -```ini -[default] -aws_access_key_id = "Access Key Value" -aws_secret_access_key = "Secret Key Value" -``` - -2. Install Velero in the cluster - -``` -velero install \ - --provider aws \ - --plugins velero/velero-plugin-for-aws:v1.2.1 \ - --bucket osc-backup \ - --secret-file ./credentials.ini \ - --use-volume-snapshots=false \ - --use-node-agent=true \ - --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=https://obs.eu-de.otc.t-systems.com -``` - -3. Delete `credentials.ini`, it is not needed anymore (a secret has been created in the cluster). -4. Create a schedule to back up the relevant resources in the cluster: - -``` -velero schedule create devfw-bootstrap --schedule="23 */2 * * *" "--include-namespaces=forgejo" -``` - -## Working with Velero - -You can now use Velero to create backups, restore them, or perform other operations. Please refer to the [Velero Documentation](https://velero.io/docs/main/backup-reference/). - -To list all currently available backups: - -``` -velero backup get -``` - -## Setting up a Service Account for Access to the OTC Object Storage Bucket - -We are using the S3-compatible Open Telekom Cloud Object Storage service to make available some storage for the backups. We picked OTC specifically because we're not using it for anything else, so no matter what catastrophy we create in Open Sovereign Cloud, the backups should be safe. - -### Create an Object Storage Service Bucket - -1. Log in to the [OTC Console with the correct tenant](https://auth.otc.t-systems.com/authui/federation/websso?domain_id=81e7dbd7ec9f4b03a58120dfaa61d3db&idp=ADFS_MMS_OTC00000000001000113497&protocol=saml). -1. Navigate to [Object Storage Service](https://console.otc.t-systems.com/obs/?agencyId=WEXsFwkkVdGYULIrZT1icF4nmHY1dgX2®ion=eu-de&locale=en-us#/obs/manager/buckets). -1. Click Create Bucket in the upper right hand corner. Give your bucket a name. No further configuration should be necessary. - -### Create a Service User to Access the Bucket - -1. Log in to the [OTC Console with the correct tenant](https://auth.otc.t-systems.com/authui/federation/websso?domain_id=81e7dbd7ec9f4b03a58120dfaa61d3db&idp=ADFS_MMS_OTC00000000001000113497&protocol=saml). -1. Navigate to [Identity and Access Management](https://console.otc.t-systems.com/iam/?agencyId=WEXsFwkkVdGYULIrZT1icF4nmHY1dgX2®ion=eu-de&locale=en-us#/iam/users). -1. Navigate to User Groups, and click Create User Group in the upper right hand corner. -1. Enter a suitable name ("OSC Cloud Backup") and click OK. -1. In the group list, locate the group just created and click its name. -1. Click Authorize to add the necessary roles. Enter "OBS" in the search box to filter for Object Storage roles. -1. Select "OBS OperateAccess", if there are two roles, select them both. -1. **2024-10-15** Also select the "OBS Administrator" role. It is unclear why the "OBS OperateAccess" role is not sufficient, but without the admin role, the service user will not have write access to the bucket. -1. Click Next to save the roles, then click OK to confirm, then click Finish. -1. Navigate to Users, and click Create User in the upper right hand corner. -1. Give the user a sensible name ("ipcei-cis-devfw-osc-backups"). -1. Disable Management console access -1. Enable Access key, disable Password, disable Login protection. -1. Click Next -1. Pick the group created earlier. -1. Download the access key when prompted. - -The access key is a CSV file with the Access Key and the Secret Key listed in the second line. diff --git a/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle-1.jpg b/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle-1.jpg deleted file mode 100644 index c40430a..0000000 Binary files a/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle-1.jpg and /dev/null differ diff --git a/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle.jpg b/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle.jpg deleted file mode 100644 index c40430a..0000000 Binary files a/content/en/docs-old/v1/project/intro-stakeholder-workshop/DevOps-Lifecycle.jpg and /dev/null differ diff --git a/content/en/docs-old/v1/project/intro-stakeholder-workshop/_index.md b/content/en/docs-old/v1/project/intro-stakeholder-workshop/_index.md deleted file mode 100644 index a3cf645..0000000 --- a/content/en/docs-old/v1/project/intro-stakeholder-workshop/_index.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Stakeholder Workshop Intro -weight: 50 -description: An overall eDF introduction for stakeholders -linktitle: Stakeholder Workshops ---- - - -## Edge Developer Framework Solution Overview - -> This section is derived from [conceptual-onboarding-intro](../conceptual-onboarding/1_intro/) - -1. As presented in the introduction: We have the ['Edge Developer Framework'](./edgel-developer-framework/). \ - In short the mission is: - * Build a european edge cloud IPCEI-CIS - * which contains typical layers infrastructure, platform, application - * and on top has a new layer 'developer platform' - * which delivers a **cutting edge developer experience** and enables **easy deploying** of applications onto the IPCEI-CIS -2. We think the solution for EDF is in relation to ['Platforming' (Digital Platforms)](../conceptual-onboarding/3_platforming/) - 1. The next evolution after DevOps - 2. Gartner predicts 80% of SWE companies to have platforms in 2026 - 3. Platforms have a history since roundabout 2019 - 4. CNCF has a working group which created capabilities and a maturity model -3. Platforms evolve - nowadys there are [Platform Orchestrators](../conceptual-onboarding/4_orchestrators/) - 1. Humanitec set up a Reference Architecture - 2. There is this 'Orchestrator' thing - declaratively describe, customize and change platforms! -4. Mapping our assumptions to the [CNOE solution](../conceptual-onboarding/5_cnoe/) - 1. CNOE is a hot candidate to help and fulfill our platform building - 2. CNOE aims to embrace change and customization! - - -## 2. Platforming as the result of DevOps - -### DevOps since 2010 - -![alt text](DevOps-Lifecycle.jpg) - -* from 'left' to 'right' - plan to monitor -* 'leftshift' -* --> turns out to be a right shift for developers with cognitive overload -* 'DevOps isd dead' -> we need Platforms - -### Platforming to provide 'golden paths' - -> don't mix up 'golden paths' with pipelines or CI/CD - -![alt text](../conceptual-onboarding/3_platforming/humanitec-history.png) - -#### Short list of platform using companies - -As [Gartner states](https://www.gartner.com/en/newsroom/press-releases/2023-11-28-gartner-hype-cycle-shows-ai-practices-and-platform-engineering-will-reach-mainstream-adoption-in-software-engineering-in-two-to-five-years): "By 2026, 80% of software engineering organizations will establish platform teams as internal providers of reusable services, components and tools for application delivery." - -Here is a small list of companies alrteady using IDPs: - -* Spotify -* Airbnb -* Zalando -* Uber -* Netflix -* Salesforce -* Google -* Booking.com -* Amazon -* Autodesk -* Adobe -* Cisco -* ... - -## 3 Platform building by 'Orchestrating' - -So the goal of platforming is to build a 'digital platform' which fits [this architecture](https://www.gartner.com/en/infrastructure-and-it-operations-leaders/topics/platform-engineering) ([Ref. in German)](https://www.gartner.de/de/artikel/was-ist-platform-engineering): - -![alt text](image.png) - -### Digital Platform blue print: Reference Architecture - -The blue print for such a platform is given by the reference architecture from Humanitec: - -[Platform Orchestrators](../conceptual-onboarding/4_orchestrators/) - -### Digital Platform builder: CNOE - -Since 2023 this is done by 'orchestrating' such platforms. One orchestrator is the [CNOE solution](../conceptual-onboarding/5_cnoe/), which highly inspired our approach. - -In our orchestartion engine we think in 'stacks' of 'packages' containing platform components. - - -## 4 Sticking all together: Our current platform orchestrating generated platform - -Sticking together the platforming orchestration concept, the reference architecture and the CNOE stack solution, [this is our current running platform minimum viable product](../plan-in-2024/image-2024-8-14_10-50-27.png). - -This will now be presented! Enjoy! - diff --git a/content/en/docs-old/v1/project/intro-stakeholder-workshop/devops.png b/content/en/docs-old/v1/project/intro-stakeholder-workshop/devops.png deleted file mode 100644 index efa787a..0000000 Binary files a/content/en/docs-old/v1/project/intro-stakeholder-workshop/devops.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/intro-stakeholder-workshop/image.png b/content/en/docs-old/v1/project/intro-stakeholder-workshop/image.png deleted file mode 100644 index ed09018..0000000 Binary files a/content/en/docs-old/v1/project/intro-stakeholder-workshop/image.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image-1.png b/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image-1.png deleted file mode 100644 index cd3bfdf..0000000 Binary files a/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image-1.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image.png b/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image.png deleted file mode 100644 index f5c6665..0000000 Binary files a/content/en/docs-old/v1/project/plan-in-2024/poc/_assets/image.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/plan-in-2024/poc/_index.md b/content/en/docs-old/v1/project/plan-in-2024/poc/_index.md deleted file mode 100644 index ef03359..0000000 --- a/content/en/docs-old/v1/project/plan-in-2024/poc/_index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: PoC Structure -weight: 5 -description: Building plan of the PoC milestone (end 2024) output ---- - -Presented and approved on tuesday, 26.11.2024 within the team: - -![alt text](./_assets/image.png) - - -The use cases/application lifecycle and deployment flow is drawn here: https://confluence.telekom-mms.com/display/IPCEICIS/Proof+of+Concept+2024 - - -![alt text](./_assets/image-1.png) diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/_index.md b/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/_index.md deleted file mode 100644 index cae759b..0000000 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/_index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Deployment -weight: 3 ---- - -> **Mantra**: -> -> 1. Everything as Code. -> 1. Cloud natively deployable everywhere. -> 1. Ramping up and tearing down oftenly is a no-brainer. -> 1. Especially locally (whereby 'locally' means 'under my own control') - -## Entwurf (28.8.24) - -![Deployment 2024](./deployment.drawio.png) diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/_index.md b/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/_index.md deleted file mode 100644 index c83523b..0000000 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/_index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: POCs -weight: 2 ---- - -## Further ideas for POSs - -* see sample apps 'metaphor' in https://docs.kubefirst.io/ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P1.png b/content/en/docs-old/v1/project/team-process/_assets/P1.png deleted file mode 100644 index 43d35b7..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P1.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P2.png b/content/en/docs-old/v1/project/team-process/_assets/P2.png deleted file mode 100644 index a7b9deb..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P2.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P3.png b/content/en/docs-old/v1/project/team-process/_assets/P3.png deleted file mode 100644 index 6e295a7..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P3.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P4.png b/content/en/docs-old/v1/project/team-process/_assets/P4.png deleted file mode 100644 index f72f222..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P4.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P5.png b/content/en/docs-old/v1/project/team-process/_assets/P5.png deleted file mode 100644 index eb3314a..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P5.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P6.png b/content/en/docs-old/v1/project/team-process/_assets/P6.png deleted file mode 100644 index f66aa56..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P6.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P7.png b/content/en/docs-old/v1/project/team-process/_assets/P7.png deleted file mode 100644 index b25b487..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P7.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/P8.png b/content/en/docs-old/v1/project/team-process/_assets/P8.png deleted file mode 100644 index bcd074f..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/P8.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_assets/image.png b/content/en/docs-old/v1/project/team-process/_assets/image.png deleted file mode 100644 index ee73f3d..0000000 Binary files a/content/en/docs-old/v1/project/team-process/_assets/image.png and /dev/null differ diff --git a/content/en/docs-old/v1/project/team-process/_index.md b/content/en/docs-old/v1/project/team-process/_index.md deleted file mode 100644 index 93c2b62..0000000 --- a/content/en/docs-old/v1/project/team-process/_index.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Team and Work Structure -weight: 50 -description: The way we work and produce runnable, presentable software -linkTitle: Team-Process ---- - -This document describes a proposal to set up a team work structure to primarily get the POC successfully delivered. Later on we will adjust and refine the process to fit for the MVP. - -## Introduction - -### Rationale - -We currently face the following [challenges in our process](https://confluence.telekom-mms.com/display/IPCEICIS/Proof+of+Concept+2024): - -1. missing team alignment on PoC-Output over all components - 1. Action: team is committed to **clearly defined PoC capabilities** - 1. Action: every each team-member is aware of **individual and common work** to be done (backlog) to achieve PoC -1. missing concept for repository (process, structure, - 1. Action: the **PoC has a robust repository concept** up & running - 1. Action: repo concept is applicable for other repositorys as well (esp. documentation repo) - -### General working context - -A **project goal** drives us as a **team** to create valuable **product output**. - -The **backlog** contains the product specification which instructs us by working in **tasks** with the help and usage of **ressources** (like git, 3rd party code and knowledge and so on). - -![alt text](./_assets/P1.png) - -Goal, Backlog, Tasks and Output must be in a well-defined context, such that the team can be productive. - -### POC and MVP working context - -This document has two targets: POC and MVP. - -Today is mid november 2024 and we need to package our project results created since july 2024 to deliver the POC product. - -![alt text](./_assets/P2.png) - -> Think of the agenda's goal like this: Imagine Ralf the big sponsor passes by and sees 'edge Developer Framework' somewhere on your screen. Then he asks: 'Hey cool, you are one of these famous platform guys?! I always wanted to get a demo how this framework looks like!' \ -> **What are you going to show him?** - -## Team and Work Structure (POC first, MVP later) - -In the following we will look at the work structure proposal, primarily for the POC, but reusable for any other release or the MVP - -### Consolidated POC (or any release later) - -![alt text](./_assets/P3.png) - -#### Responsibilities to reliably specify the deliverables - -![alt text](./_assets/P4.png) - -#### Todos - -1. SHOULD: Clarify context (arch, team, leads) -1. MUST: Define Deliverables (arch, team) (Hint: Deleiverables could be seen 1:1 as use cases - not sure about that right now) -1. MUST: Define Output structure (arch, leads) - -### Process (General): from deliverables to output (POC first, MVP later) - -Most important in the process are: - -* **traces** from tickets to outputs (as the clue to understand and control what is where) -* **README.md** (as the clue how to use the output) - -![alt text](./_assets/P5.png) - -### Output Structure POC - -Most important in the POC structure are: - -* one repo which is the product -* a README which maps project goals to the repo content -* the content consists of capabilities -* capabilities are shown ('prooven') by use cases -* the use cases are described in the deliverables - -![alt text](./_assets/P6.png) - -#### Glossary - -* README: user manual and storybook -* Outcome: like resolution, but more verbose and detailled (especially when resolution was 'Done'), so that state changes are easily recognisable - -### Work Structure Guidelines (POC first, MVP later) - -#### Structure - -1. each task and/or user story has at least a branch in an existing repo or a new, dedicated task repo - > recommended: multi-repo over monorepo -1. each repo has a main and development branch. development is the intgration line -1. pull requests are used to merge work outputs to the integration line -1. optional (my be too cumbersome): each PR should be reflected as comment in jira - -#### Workflow (in any task / user story) - -1. when output comes in own repo: `git init` --> always create as fast as possible a new repo -1. commit early and oftenly -1. comments on output and outcome when where is new work done. this could typically correlate to a pull request, see above - -#### Definition of Done - -1. Jira: there is a final comment summarizimg the outcome (in a bit more verbose from than just the 'resolution' of the ticket) and the main outputs. This may typically be a link to the commit and/or pull request of the final repo state -2. Git/Repo: there is a README.md in the root of the repo. It summarizes in a typical Gihub-manner how to use the repo, so that it does what it is intended to do and reveals all the bells and whistles of the repo to the consumer. If the README doesn't lead to the usable and recognizable added value the work is not done! - -#### Review - -1. Before a ticket gets finished (not defined yet which jira-state this is) there must be a review by a second team member -1. the reviewing person may review whatever they want, but must at least check the README - -#### Out of scope (for now) - -The following topics are optional and do not need an agreement at the moment: - -1. Commit message syntax - > Recommendation: at least 'WiP' would be good if the state is experimental -1. branch permissions -1. branch clean up policies -1. squashing when merging into the integration line -1. CI -1. Tech blogs / gists -1. Changelogs - -#### Integration of Jira with Forgejo (compare to https://github.com/atlassian/github-for-jira) - -1. Jira -> Forgejo: Create Branch -1. Forgejo -> Jira: - 1. commit - 2. PR - -## Status of POC Capabilities - -The following table lists an analysis of the status of the ['Funcionality validation' of the POC](https://confluence.telekom-mms.com/display/IPCEICIS/Proof+of+Concept+2024). -Assumption: These functionalities should be the aforementioned capabilities. - -![alt text](./_assets/P8.png) diff --git a/content/en/docs-old/v1/solution/_index.md b/content/en/docs-old/v1/solution/_index.md deleted file mode 100644 index aaac88e..0000000 --- a/content/en/docs-old/v1/solution/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Solution -weight: 2 -description: "The implemented platforming solutions of EDF, i.e. the solution domain. The documentation of all project output: Design, Building blocks, results, show cases, artifacts and so on" ---- - diff --git a/content/en/docs-old/v1/solution/design/_index.md b/content/en/docs-old/v1/solution/design/_index.md deleted file mode 100644 index f5f925c..0000000 --- a/content/en/docs-old/v1/solution/design/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Design -weight: 1 -description: Edge Developver Framework Design Documents ---- - -This design documentation structure is inspired by the [design of crossplane](https://github.com/crossplane/crossplane/tree/main/design#readme). diff --git a/content/en/docs-old/v1/solution/design/architectural-documentation.md b/content/en/docs-old/v1/solution/design/architectural-documentation.md deleted file mode 100644 index 0988144..0000000 --- a/content/en/docs-old/v1/solution/design/architectural-documentation.md +++ /dev/null @@ -1,39 +0,0 @@ -# why we have architectural documentation - -TN: Robert, Patrick, Stefan, Stephan -25.2.25, 13-14h - -## referring Tickets / Links - -* https://jira.telekom-mms.com/browse/IPCEICIS-2424 -* https://jira.telekom-mms.com/browse/IPCEICIS-478 -* Confluence: https://confluence.telekom-mms.com/display/IPCEICIS/Architecture - -## charts - -we need charts, because: - -* external stakeholders (especially architects) want to understand our product and component structure(*) -* our team needs visualization in technical discussions(**) -* we need to have discussions during creating the documentation - -(*): marker: "jetzt hab' ich das erste mal so halbwegs verstanden was ihr da überhaupt macht" -(**) marker: ???? - - -## typed of charts - -* schichtenmodell (frontend, middleware, backend) -* bebauungsplan mit abhängigkeiten, domänen -* kontext von außen -* komponentendiagramm, - -## decisions - -* openbao is backend-system, wird über apis erreicht - -## further topics / new requirements - -* runbook (compare to openbao discussions) -* persistenz der EDP konfiguartion (zb postgres) -* OIDC vs. SSI diff --git a/content/en/docs-old/v1/solution/design/architectural-work-structure.md b/content/en/docs-old/v1/solution/design/architectural-work-structure.md deleted file mode 100644 index 676ec2e..0000000 --- a/content/en/docs-old/v1/solution/design/architectural-work-structure.md +++ /dev/null @@ -1,85 +0,0 @@ - - -# arbeitsteilung arcihtekur, nach innen und nach aussen - -Sebastiano, Stefan, Robert, Patrick, Stephan -25.2.25, 14-15h - -## links - -* https://confluence.telekom-mms.com/display/IPCEICIS/Team+Members - -# montags-call - -* Sebasriano im montags-call, inklusive florian, mindestens interim, solange wir keinen architektur-aussenminister haben - -# workshops - -* nach abstimmung mit hasan zu platform workshops -* weitere beteiligung in weiteren workshop-serien to be defined - -# programm-alignment - -* sponsoren finden -* erledigt sich durch die workshop-serien - -# interne architekten - -* robert und patrick steigen ein -* themen-teilung - -# produkt struktur - -edp standalone -ipcei edp - -# architektur themen - -## stl - -produktstruktur -application model (cnoe, oam, score, xrd, ...) -api -backstage (usage scenarios) -pipelining -'everything as code', deklaratives deployment, crossplane (bzw. orchestrator) - -ggf: -identity mgmt - -nicht: -security -monitoring -kubernetes internals - -## robert - -pipelining -kubernetes-inetrnals -api -crossplane -platforming - erzeugen von ressourcen in 'clouds' (e.g. gcp, und hetzner :-) ) - -## patrick - -security -identity-mgmt (SSI) -EaC -und alles andere macht mir auch total spass! - -# einschätzungen - -* ipceicis-pltaform ist wichtigstes teilprojekt (hasan + patrick) -* offener punkt: workload-steuerung, application model (kompatibility mit EDP) -* thema security, siehe ssi vs. oidc -* wir brauchen eigene workshops zum definieren der zusammenarbiets-modi - -# committements - -* patrick und robert nehmen teil an architektur - -# offen - -* sebastian schwaar onboarding? (>=50%) --- robert fragt - * alternative: consulting/support anfallsweise - * hält eine kubernetes einführungs-schulung --> termine sind zu vereinbaren (liegt bei sophie) diff --git a/content/en/docs-old/v1/solution/design/crossplane-vs-terraform.md b/content/en/docs-old/v1/solution/design/crossplane-vs-terraform.md deleted file mode 100644 index 6d27389..0000000 --- a/content/en/docs-old/v1/solution/design/crossplane-vs-terraform.md +++ /dev/null @@ -1,23 +0,0 @@ -# crossplane dawn? - -* Monday, March 31, 2025 - -## Issue - -Robert worked on the kindserver reconciling. - -He got aware that crossplane is able to delete clusters when drift is detected. This mustnt happen for sure in productive clusters. - -Even worse, if crossplane did delete the cluster and then set it up again correctly, argocd would be out of sync and had no idea by default how to relate the old and new cluster. - -## Decisions - -1. quick solution: crosspllane doesn't delete clusters. - * If it detects drift with a kind cluster, it shall create an alert (like email) but not act in any way -2. analyze how crossplane orchestration logic calls 'business logic' to decide what to do. - * In this logic we could decide whether to delete resources like clusters and if so then how. Secondly an 'orchestration' or let's workflow how to correctly set the old state with respect to argocd could be implemented there. -3. keep terraform in mind - * we probably will need it in adapters anyway - * if the crossplane design does not fir, or the benefit is too small, or we definetly ahve more ressources in developing terraform, the we could completley switch -4. focus on EDP domain and application logic - * for the momen (in MVP1) we need to focus on EDP higher level functionality diff --git a/content/en/docs-old/v1/solution/design/decision-iam-and-edf-self-containment.md b/content/en/docs-old/v1/solution/design/decision-iam-and-edf-self-containment.md deleted file mode 100644 index 8e31282..0000000 --- a/content/en/docs-old/v1/solution/design/decision-iam-and-edf-self-containment.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: eDF is self-contained and has an own IAM (WiP) -weight: 2 -description: tbd ---- - -* Type: Proposal -* Owner: Stephan Lo (stephan.lo@telekom.de) -* Reviewers: EDF Architects -* Status: Speculative, revision 0.1 - -## Background - -tbd - -## Proposal - -==== 1 ===== - -There is a core eDF which is self-contained and does not have any impelmented dependency to external platforms. -eDF depends on abstractions. -Each embdding into customer infrastructure works with adapters which implement the abstraction. - -==== 2 ===== - -eDF has an own IAM. This may either hold the principals and permissions itself when there is no other IAM or proxy and map them when integrated into external enterprise IAMs. - - -## Reference - -Arch call from 4.12.24, Florian, Stefan, Stephan-Pierre diff --git a/content/en/docs-old/v1/solution/design/platform-component.md b/content/en/docs-old/v1/solution/design/platform-component.md deleted file mode 100644 index 76046c4..0000000 --- a/content/en/docs-old/v1/solution/design/platform-component.md +++ /dev/null @@ -1,42 +0,0 @@ - - -# platform-team austausch - -## stefan - -* initiale fragen: -* vor 2 wochen workshop tapeten-termin -* wer nimmt an den workshops teil? -* was bietet platform an? -* EDP: könnte 5mio/a kosten - * -> produkt pitch mit marko - * -> edp ist unabhängig von ipceicis cloud continuum* - * generalisierte quality of services ( <-> platform schnittstelle) - - -## Hasan - -* martin macht: agent based iac generation -* platform-workshops mitgestalten -* mms-fokus -* connectivity enabled cloud offering, e2e von infrastruktur bis endgerät -* sdk für latenzarme systeme, beraten und integrieren - * monitoring in EDP? -* beispiel 'unity' -* vorstellung im arch call -* wie können unterschieldiche applikationsebenen auf unterschiedliche infrastruktur(compute ebenen) verteit werden -* zero touch application deployment model -* ich werde gerade 'abgebremst' -* workshop beteiligung, TPM application model - -## martin - - * edgeXR erlaubt keine persistenz - * openai, llm als abstarktion nicht vorhanden - * momentan nur compute vorhanden - * roaming von applikationen --> EDP muss das unterstützen - * anwendungsfall: sprachmodell übersetzt design-artifakte in architektur, dann wird provisionierung ermöglicht - -? Applikations-modelle -? zusammenhang mit golden paths - * zB für reines compute faas diff --git a/content/en/docs-old/v1/solution/design/proposal-local-deployment.md b/content/en/docs-old/v1/solution/design/proposal-local-deployment.md deleted file mode 100644 index 71cad6c..0000000 --- a/content/en/docs-old/v1/solution/design/proposal-local-deployment.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Agnostic EDF Deployment -weight: 2 -description: The implementation of EDF must be kubernetes provider agnostic ---- - -* Type: Proposal -* Owner: Stephan Lo (stephan.lo@telekom.de) -* Reviewers: EDF Architects -* Status: Speculative, revision 0.1 - -## Background - -EDF is running as a controlplane - or let's say an orchestration plane, correct wording is still to be defined - in a kubernetes cluster. -Right now we have at least ArgoCD as controller of manifests which we provide as CNOE stacks of packages and standalone packages. - -## Proposal - -The implementation of EDF must be kubernetes provider agnostic. Thus each provider specific deployment dependency must be factored out into provider specific definitions or deployment procedures. - -## Local deployment - -This implies that EDF must always be deployable into a local cluster, whereby by 'local' we mean a cluster which is under the full control of the platform engineer, e.g. a kind cluster on their laptop. diff --git a/content/en/docs-old/v1/solution/design/proposal-stack-hydration.md b/content/en/docs-old/v1/solution/design/proposal-stack-hydration.md deleted file mode 100644 index 4037da2..0000000 --- a/content/en/docs-old/v1/solution/design/proposal-stack-hydration.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Agnostic Stack Definition -weight: 2 -description: The implementation of EDF stacks must be kubernetes provider agnostic by a templating/hydration mechanism ---- - -* Type: Proposal -* Owner: Stephan Lo (stephan.lo@telekom.de) -* Reviewers: EDF Architects -* Status: Speculative, revision 0.1 - -## Background - -When booting and reconciling the 'final' stack exectuting orchestrator (here: ArgoCD) needs to get rendered (or hydrated) presentations of the manifests. - -It is not possible or unwanted that the orchestrator itself resolves dependencies or configuration values. - -## Proposal - -The hydration takes place for all target clouds/kubernetes providers. There is no 'default' or 'special' setup, like the Kind version. - -## Local development - -This implies that in a development process there needs to be a build step hydrating the ArgoCD manifests for the targeted cloud. - -## Reference - -Discussion from Robert and Stephan-Pierre in the context of stack development - there should be an easy way to have locally changed stacks propagated into the local running platform. diff --git a/content/en/docs-old/v1/solution/tools/Backstage/Exsisting Plugins/_index.md b/content/en/docs-old/v1/solution/tools/Backstage/Exsisting Plugins/_index.md deleted file mode 100644 index 866f60f..0000000 --- a/content/en/docs-old/v1/solution/tools/Backstage/Exsisting Plugins/_index.md +++ /dev/null @@ -1,55 +0,0 @@ -+++ -title = "Existing Backstage Plugins" -weight = 4 -+++ - -1. **Catalog**: - * Used for managing services and microservices, including registration, visualization, and the ability to track dependencies and relationships between services. It serves as a central directory for all services in an organization. - -2. **Docs**: - * Designed for creating and managing documentation, supporting formats such as Markdown. It helps teams organize and access technical and non-technical documentation in a unified interface. - -3. **API Docs**: - * Automatically generates API documentation based on OpenAPI specifications or other API definitions, ensuring that your API information is always up to date and accessible for developers. - -4. **TechDocs**: - * A tool for creating and publishing technical documentation. It is integrated directly into Backstage, allowing developers to host and maintain documentation alongside their projects. - -5. **Scaffolder**: - * Allows the rapid creation of new projects based on predefined templates, making it easier to deploy services or infrastructure with consistent best practices. - -6. **CI/CD**: - * Provides integration with CI/CD systems such as GitHub Actions and Jenkins, allowing developers to view build status, logs, and pipelines directly in Backstage. - -7. **Metrics**: - * Offers the ability to monitor and visualize performance metrics for applications, helping teams to keep track of key indicators like response times and error rates. - -8. **Snyk**: - * Used for dependency security analysis, scanning your codebase for vulnerabilities and helping to manage any potential security risks in third-party libraries. - -9. **SonarQube**: - * Integrates with SonarQube to analyze code quality, providing insights into code health, including issues like technical debt, bugs, and security vulnerabilities. - -10. **GitHub**: - -* Enables integration with GitHub repositories, displaying information such as commits, pull requests, and other repository activity, making collaboration more transparent and efficient. - -11. **CircleCI**: - -* Allows seamless integration with CircleCI for managing CI/CD workflows, giving developers insight into build pipelines, test results, and deployment statuses. - -12. **Kubernetes**: - -* Provides tools to manage Kubernetes clusters, including visualizing pod status, logs, and cluster health, helping teams maintain and troubleshoot their cloud-native applications. - -13. **Cloud**: - -* Includes plugins for integration with cloud providers like AWS and Azure, allowing teams to manage cloud infrastructure, services, and billing directly from Backstage. - -14. **OpenTelemetry**: - -* Helps with monitoring distributed applications by integrating OpenTelemetry, offering powerful tools to trace requests, detect performance bottlenecks, and ensure application health. - -15. **Lighthouse**: - -* Integrates Google Lighthouse to analyze web application performance, helping teams identify areas for improvement in metrics like load times, accessibility, and SEO. diff --git a/content/en/docs-old/v1/solution/tools/Backstage/_index.md b/content/en/docs-old/v1/solution/tools/Backstage/_index.md deleted file mode 100644 index ef168be..0000000 --- a/content/en/docs-old/v1/solution/tools/Backstage/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Backstage -weight: 2 -description: Here you will find information about Backstage, it's plugins and usage tutorials ---- diff --git a/content/en/docs-old/v1/solution/tools/CNOE/_index.md b/content/en/docs-old/v1/solution/tools/CNOE/_index.md deleted file mode 100644 index 3d41c12..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/_index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: CNOE -description: CNOE is a platform building orchestrator, which we choosed at least to start in 2024 with to build the EDF ---- diff --git a/content/en/docs-old/v1/solution/tools/CNOE/argocd/_index.md b/content/en/docs-old/v1/solution/tools/CNOE/argocd/_index.md deleted file mode 100644 index 6c0da5a..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/argocd/_index.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: ArgoCD -weight: 30 -description: A description of ArgoCD and its role in CNOE ---- - -## What is ArgoCD? - -ArgoCD is a Continuous Delivery tool for kubernetes based on GitOps principles. - -> ELI5: ArgoCD is an application running in kubernetes which monitors Git -> repositories containing some sort of kubernetes manifests and automatically -> deploys them to some configured kubernetes clusters. - -From ArgoCD's perspective, applications are defined as custom resource -definitions within the kubernetes clusters that ArgoCD monitors. Such a -definition describes a source git repository that contains kubernetes -manifests, in the form of a helm chart, kustomize, jsonnet definitions or plain -yaml files, as well as a target kubernetes cluster and namespace the manifests -should be applied to. Thus, ArgoCD is capable of deploying applications to -various (remote) clusters and namespaces. - -ArgoCD monitors both the source and the destination. It applies changes from -the git repository that acts as the source of truth for the destination as soon -as they occur, i.e. if a change was pushed to the git repository, the change is -applied to the kubernetes destination by ArgoCD. Subsequently, it checks -whether the desired state was established. For example, it verifies that all -resources were created, enough replicas started, and that all pods are in the -`running` state and healthy. - -## Architecture - -### Core Components - -An ArgoCD deployment mainly consists of 3 main components: - -#### Application Controller - -The application controller is a kubernetes operator that synchronizes the live -state within a kubernetes cluster with the desired state derived from the git -sources. It monitors the live state, can detect derivations, and perform -corrective actions. Additionally, it can execute hooks on life cycle stages -such as pre- and post-sync. - -#### Repository Server - -The repository server interacts with git repositories and caches their state, -to reduce the amount of polling necessary. Furthermore, it is responsible for -generating the kubernetes manifests from the resources within the git -repositories, i.e. executing helm or jsonnet templates. - -#### API Server - -The API Server is a REST/gRPC Service that allows the Web UI and CLI, as well -as other API clients, to interact with the system. It also acts as the callback -for webhooks particularly from Git repository platforms such as GitHub or -Gitlab to reduce repository polling. - -### Others - -The system primarily stores its configuration as kubernetes resources. Thus, -other external storage is not vital. - -Redis -: A Redis store is optional but recommended to be used as a cache to reduce -load on ArgoCD components and connected systems, e.g. git repositories. - -ApplicationSetController -: The ApplicationSet Controller is similar to the Application Controller a -kubernetes operator that can deploy applications based on parameterized -application templates. This allows the deployment of different versions of an -application into various environments from a single template. - -### Overview - -![Conceptual Architecture](./argocd_architecture.webp) - -![Core components](./argocd-core-components.webp) - -## Role in CNOE - -ArgoCD is one of the core components besides gitea/forgejo that is being -bootstrapped by the idpbuilder. Future project creation, e.g. through -backstage, relies on the availability of ArgoCD. - -After the initial bootstrapping phase, effectively all components in the stack -that are deployed in kubernetes are managed by ArgoCD. This includes the -bootstrapped components of gitea and ArgoCD which are onboarded afterward. -Thus, the idpbuilder is only necessary in the bootstrapping phase of the -platform and the technical coordination of all components shifts to ArgoCD -eventually. - -In general, the creation of new projects and applications should take place in -backstop. It is a catalog of software components and best practices that allows -developers to grasp and to manage their software portfolio. Underneath, -however, the deployment of applications and platform components is managed by -ArgoCD. Among others, backstage creates Application CRDs to instruct ArgoCD to -manage deployments and subsequently report on their current state. - -## Glossary - -_Initially shamelessly copied from [the docs](https://argo-cd.readthedocs.io/en/stable/core_concepts/)_ - -Application -: A group of Kubernetes resources as defined by a manifest. This is a Custom Resource Definition (CRD). - -ApplicationSet -: A CRD that is a template that can create multiple parameterized Applications. - -Application source type -: Which Tool is used to build the application. - -Configuration management tool -: See Tool. - -Configuration management plugin -: A custom tool. - -Health -: The health of the application, is it running correctly? Can it serve requests? - -Live state -: The live state of that application. What pods etc are deployed. - -Refresh -: Compare the latest code in Git with the live state. Figure out what is different. - -Sync -: The process of making an application move to its target state. E.g. by applying changes to a Kubernetes cluster. - -Sync status -: Whether or not the live state matches the target state. Is the deployed application the same as Git says it should be? - -Sync operation status -: Whether or not a sync succeeded. - -Target state -: The desired state of an application, as represented by files in a Git repository. - -Tool -: A tool to create manifests from a directory of files. E.g. Kustomize. See Application Source Type. diff --git a/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd-core-components.webp b/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd-core-components.webp deleted file mode 100644 index 6140f51..0000000 Binary files a/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd-core-components.webp and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd_architecture.webp b/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd_architecture.webp deleted file mode 100644 index adee037..0000000 Binary files a/content/en/docs-old/v1/solution/tools/CNOE/argocd/argocd_architecture.webp and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/_index.md b/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/_index.md deleted file mode 100644 index 72291e2..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: idpbuilder -weight: 3 -description: Here you will find information about idpbuilder installation and usage ---- - diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing-proxy.png b/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing-proxy.png deleted file mode 100644 index d100481..0000000 Binary files a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing-proxy.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing.png b/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing.png deleted file mode 100644 index a6b9742..0000000 Binary files a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/hostname-routing.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/http-routing.md b/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/http-routing.md deleted file mode 100644 index f2da697..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/http-routing.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: Http Routing -weight: 100 ---- - -### Routing switch - -The idpbuilder supports creating platforms using either path based or subdomain -based routing: - -```shell -idpbuilder create --log-level debug --package https://github.com/cnoe-io/stacks//ref-implementation -``` - -```shell -idpbuilder create --use-path-routing --log-level debug --package https://github.com/cnoe-io/stacks//ref-implementation -``` - -However, even though argo does report all deployments as green eventually, not -the entire demo is actually functional (verification?). This is due to -hardcoded values that for example point to the path-routed location of gitea to -access git repos. Thus, backstage might not be able to access them. - -Within the demo / ref-implementation, a simple search & replace is suggested to -change urls to fit the given environment. But proper scripting/templating could -take care of that as the hostnames and necessary properties should be -available. This is, however, a tedious and repetitive task one has to keep in -mind throughout the entire system, which might lead to an explosion of config -options in the future. Code that addresses correct routing is located in both -the stack templates and the idpbuilder code. - -### Cluster internal routing - -For the most part, components communicate with either the cluster API using the -default DNS or with each other via http(s) using the public DNS/hostname (+ -path-routing scheme). The latter is necessary due to configs that are visible -and modifiable by users. This includes for example argocd config for components -that has to sync to a gitea git repo. Using the same URL for internal and -external resolution is imperative. - -The idpbuilder achieves transparent internal DNS resolution by overriding the -public DNS name in the cluster's internal DNS server (coreDNS). Subsequently, -within the cluster requests to the public hostnames resolve to the IP of the -internal ingress controller service. Thus, internal and external requests take -a similar path and run through proper routing (rewrites, ssl/tls, etc). - -### Conclusion - -One has to keep in mind that some specific app features might not -work properly or without haxx when using path based routing (e.g. docker -registry in gitea). Futhermore, supporting multiple setup strategies will -become cumbersome as the platforms grows. We should probably only support one -type of setup to keep the system as simple as possible, but allow modification -if necessary. - -DNS solutions like `nip.io` or the already used `localtest.me` mitigate the -need for path based routing - -## Excerpt - -HTTP is a cornerstone of the internet due to its high flexibility. Starting -from HTTP/1.1 each request in the protocol contains among others a path and a -`Host`name in its header. While an HTTP request is sent to a single IP address -/ server, these two pieces of data allow (distributed) systems to handle -requests in various ways. - -```shell -$ curl -v http://google.com/something > /dev/null - -* Connected to google.com (2a00:1450:4001:82f::200e) port 80 -* using HTTP/1.x -> GET /something HTTP/1.1 -> Host: google.com -> User-Agent: curl/8.10.1 -> Accept: */* -... -``` - -### Path-Routing - -Imagine requesting `http://myhost.foo/some/file.html`, in a simple setup, the -web server `myhost.foo` resolves to would serve static files from some -directory, `//some/file.html`. - -In more complex systems, one might have multiple services that fulfill various -roles, for example a service that generates HTML sites of articles from a CMS -and a service that can convert images into various formats. Using path-routing -both services are available on the same host from a user's POV. - -An article served from `http://myhost.foo/articles/news1.html` would be -generated from the article service and points to an image -`http://myhost.foo/images/pic.jpg` which in turn is generated by the image -converter service. When a user sends an HTTP request to `myhost.foo`, they hit -a reverse proxy which forwards the request based on the requested path to some -other system, waits for a response, and subsequently returns that response to -the user. - -![Path-Routing Example](../path-routing.png) - -Such a setup hides the complexity from the user and allows the creation of -large distributed, scalable systems acting as a unified entity from the -outside. Since everything is served on the same host, the browser is inclined -to trust all downstream services. This allows for easier 'communication' -between services through the browser. For example, cookies could be valid for -the entire host and thus authentication data could be forwarded to requested -downstream services without the user having to explicitly re-authenticate. - -Furthermore, services 'know' their user-facing location by knowing their path -and the paths to other services as paths are usually set as a convention and / -or hard-coded. In practice, this makes configuration of the entire system -somewhat easier, especially if you have various environments for testing, -development, and production. The hostname of the system does not matter as one -can use hostname-relative URLs, e.g. `/some/service`. - -Load balancing is also easily achievable by multiplying the number of service -instances. Most reverse proxy systems are able to apply various load balancing -strategies to forward traffic to downstream systems. - -Problems might arise if downstream systems are not built with path-routing in -mind. Some systems require to be served from the root of a domain, see for -example the container registry spec. - - -### Hostname-Routing - -Each downstream service in a distributed system is served from a different -host, typically a subdomain, e.g. `serviceA.myhost.foo` and -`serviceB.myhost.foo`. This gives services full control over their respective -host, and even allows them to do path-routing within each system. Moreover, -hostname-routing allows the entire system to create more flexible and powerful -routing schemes in terms of scalability. Intra-system communication becomes -somewhat harder as the browser treats each subdomain as a separate host, -shielding cookies for example form one another. - -Each host that serves some services requires a DNS entry that has to be -published to the clients (from some DNS server). Depending on the environment -this can become quite tedious as DNS resolution on the internet and intranets -might have to deviate. This applies to intra-cluster communication as well, as -seen with the idpbuilder's platform. In this case, external DNS resolution has -to be replicated within the cluster to be able to use the same URLs to address -for example gitea. - -The following example depicts DNS-only routing. By defining separate DNS -entries for each service / subdomain requests are resolved to the respective -servers. In theory, no additional infrastructure is necessary to route user -traffic to each service. However, as services are completely separated other -infrastructure like authentication possibly has to be duplicated. - -![DNS-only routing](../hostname-routing.png) - -When using hostname based routing, one does not have to set different IPs for -each hostname. Instead, having multiple DNS entries pointing to the same set of -IPs allows re-using existing infrastructure. As shown below, a reverse proxy is -able to forward requests to downstream services based on the `Host` request -parameter. This way specific hostname can be forwarded to a defined service. - -![Hostname Proxy](../hostname-routing-proxy.png) - -At the same time, one could imagine a multi-tenant system that differentiates -customer systems by name, e.g. `tenant-1.cool.system` and -`tenant-2.cool.system`. Configured as a wildcard-sytle domain, `*.cool.system` -could point to a reverse proxy that forwards requests to a tenants instance of -a system, allowing re-use of central infrastructure while still hosting -separate systems per tenant. - - -The implicit dependency on DNS resolution generally makes this kind of routing -more complex and error-prone as changes to DNS server entries are not always -possible or modifiable by everyone. Also, local changes to your `/etc/hosts` -file are a constant pain and should be seen as a dirty hack. As mentioned -above, dynamic DNS solutions like `nip.io` are often helpful in this case. - -### Conclusion - -Path and hostname based routing are the two most common methods of HTTP traffic -routing. They can be used separately but more often they are used in -conjunction. Due to HTTP's versatility other forms of HTTP routing, for example -based on the `Content-Type` Header are also very common. diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/path-routing.png b/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/path-routing.png deleted file mode 100644 index 0e5a576..0000000 Binary files a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/path-routing.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/_index.md b/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/_index.md deleted file mode 100644 index 8cc2ff2..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Included Backstage Templates -weight: 2 -description: Here you will find information about backstage templates that are included into idpbuilder's ref-implementation ---- \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-argo-workflow/_index.md b/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-argo-workflow/_index.md deleted file mode 100644 index 110bb03..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-argo-workflow/_index.md +++ /dev/null @@ -1,19 +0,0 @@ -+++ -title = "Template for basic Argo Workflow" -weight = 4 -+++ - -# Backstage Template for Basic Argo Workflow with Spark Job - -This Backstage template YAML automates the creation of an Argo Workflow for Kubernetes that includes a basic Spark job, providing a convenient way to configure and deploy workflows involving data processing or machine learning jobs. Users can define key parameters, such as the application name and the path to the main Spark application file. The template creates necessary Kubernetes resources, publishes the application code to a Gitea Git repository, registers the application in the Backstage catalog, and deploys it via ArgoCD for easy CI/CD management. - -## Use Case - -This template is designed for teams that need a streamlined approach to deploy and manage data processing or machine learning jobs using Spark within an Argo Workflow environment. It simplifies the deployment process and integrates the application with a CI/CD pipeline. The template performs the following: - -* **Workflow and Spark Job Setup**: Defines a basic Argo Workflow and configures a Spark job using the provided application file path, ideal for data processing tasks. -* **Repository Setup**: Publishes the workflow configuration to a Gitea repository, enabling version control and easy updates to the job configuration. -* **ArgoCD Integration**: Creates an ArgoCD application to manage the Spark job deployment, ensuring continuous delivery and synchronization with Kubernetes. -* **Backstage Registration**: Registers the application in Backstage, making it easily discoverable and manageable through the Backstage catalog. - -This template boosts productivity by automating steps required for setting up Argo Workflows and Spark jobs, integrating version control, and enabling centralized management and visibility, making it ideal for projects requiring efficient deployment and scalable data processing solutions. diff --git a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-kubernetes-deployment/_idex.md b/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-kubernetes-deployment/_idex.md deleted file mode 100644 index 80e668c..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/included-backstage-templates/basic-kubernetes-deployment/_idex.md +++ /dev/null @@ -1,19 +0,0 @@ -+++ -title = "Template for basic kubernetes deployment" -weight = 4 -+++ - -# Backstage Template for Kubernetes Deployment - -This Backstage template YAML automates the creation of a basic Kubernetes Deployment, aimed at simplifying the deployment and management of applications in Kubernetes for the user. The template allows users to define essential parameters, such as the application’s name, and then creates and configures the Kubernetes resources, publishes the application code to a Gitea Git repository, and registers the application in the Backstage catalog for tracking and management. - -## Use Case - -The template is designed for teams needing a streamlined approach to deploy applications in Kubernetes while automatically configuring their CI/CD pipelines. It performs the following: - -* **Deployment Creation**: A Kubernetes Deployment YAML is generated based on the provided application name, specifying a basic setup with an Nginx container. -* **Repository Setup**: Publishes the deployment code in a Gitea repository, allowing for version control and future updates. -* **ArgoCD Integration**: Automatically creates an ArgoCD application for the deployment, facilitating continuous delivery and synchronization with Kubernetes. -* **Backstage Registration**: Registers the application in Backstage to make it discoverable and manageable via the Backstage catalog. - -This template enhances productivity by automating several steps required for deployment, version control, and registration, making it ideal for projects where fast, consistent deployment and centralized management are required. diff --git a/content/en/docs-old/v1/solution/tools/CNOE/verification.md b/content/en/docs-old/v1/solution/tools/CNOE/verification.md deleted file mode 100644 index 4f60e77..0000000 --- a/content/en/docs-old/v1/solution/tools/CNOE/verification.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Validation and Verification -weigth: 100 -description: How does CNOE ensure equality between actual and desired state ---- - -## Definition - -The CNOE docs do somewhat interchange validation and verification but for the -most part they adhere to the general definition: - -> Validation is used when you check your approach before actually executing an -> action. - -Examples: - -* Form validation before processing the data -* Compiler checking syntax -* Rust's borrow checker - -> Verification describes testing if your 'thing' complies with your spec - -Examples: - -* Unit tests -* Testing availability (ping, curl health check) -* Checking a ZKP of some computation - ---- - -## In CNOE - -It seems that both validation and verification within the CNOE framework are -not actually handled by some explicit component but should be addressed -throughout the system and workflows. - -As stated in the [docs](https://cnoe.io/docs/intro/capabilities/validation), -validation takes place in all parts of the stack by enforcing strict API usage -and policies (signing, mitigations, security scans etc, see usage of kyverno -for example), and using code generation (proven code), linting, formatting, -LSP. Consequently, validation of source code, templates, etc is more a best -practice rather than a hard fact or feature and it is up to the user -to incorporate them into their workflows and pipelines. This is probably -due to the complexity of the entire stack and the individual properties of -each component and applications. - -Verification of artifacts and deployments actually exists in a somewhat similar -state. The current CNOE reference-implementation does not provide sufficient -verification tooling. - -However, as stated in the [docs](https://cnoe.io/docs/reference-implementation/integrations/verification) -within the framework `cnoe-cli` is capable of extremely limited verification of -artifacts within kubernetes. The same verification is also available as a step -within a backstage -[plugin](https://github.com/cnoe-io/plugin-scaffolder-actions). This is pretty -much just a wrapper of the cli tool. The tool consumes CRD-like structures -defining the state of pods and CRDs and checks for their existence within a -live cluster ([example](https://github.com/cnoe-io/cnoe-cli/blob/main/pkg/cmd/prereq/ack-s3-prerequisites.yaml)). - -Depending on the aspiration of 'verification' this check is rather superficial -and might only suffice as an initial smoke test. Furthermore, it seems like the -feature is not actually used within the CNOE stacks repo. - -For a live product more in depth verification tools and schemes are necessary -to verify the correct configuration and authenticity of workloads, which is, in -the context of traditional cloud systems, only achievable to a limited degree. - -Existing tools within the stack, e.g. Argo, provide some verification -capabilities. But further investigation into the general topic is necessary. diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/_index.md b/content/en/docs-old/v1/solution/tools/Crossplane/_index.md deleted file mode 100644 index a6f2168..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/_index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: Crossplane -description: Crossplane is a tool to provision cloud resources. it can act as a backend for platform orchestrators as well ---- diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/_index.md b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/_index.md deleted file mode 100644 index cf3a0a2..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/_index.md +++ /dev/null @@ -1,764 +0,0 @@ ---- -title: Howto develop a crossplane kind provider -weight: 1 -description: A provider-kind allows using crossplane locally ---- - -To support local development and usage of crossplane compositions, a crossplane provider is needed. -Every big hyperscaler already has support in crossplane (e.g. provider-gcp and provider-aws). - -Each provider has two main parts, the provider config and implementations of the cloud resources. - -The provider config takes the credentials to log into the cloud provider and provides a token -(e.g. a kube config or even a service account) that the implementations can use to provision cloud resources. - -The implementations of the cloud resources reflect each type of cloud resource, typical resources are: - -* S3 Bucket -* Nodepool -* VPC -* GkeCluster - -## Architecture of provider-kind - -To have the crossplane concepts applied, the provider-kind consists of two components: kindserver and provider-kind. - -The kindserver is used to manage local kind clusters. It provides an HTTP REST interface to create, delete and get informations of a running cluster, using an Authorization HTTP header field used as a password: - -![kindserver_interface](./kindserver_interface.png) - -The two properties to connect the provider-kind to kindserver are the IP address and password of kindserver. The IP address is required because the kindserver needs to be executed outside the kind cluster, directly on the local machine, as it need to control -kind itself: - -![kindserver_provider-kind](./kindserver_provider-kind.png) - -The provider-kind provides two crossplane elements, the `ProviderConfig` and `KindCluster` as the (only) cloud resource. The -`ProviderConfig` is configured with the IP address and password of the running kindserver. The `KindCluster` type is configured -to use the provided `ProviderConfig`. Kind clusters can be managed by adding and removing kubernetes manifests of type -`KindCluster`. The crossplane reconcilation loop makes use of the kindserver HTTP GET method to see if a new cluster needs to be -created by HTTP POST or being removed by HTTP DELETE. - -The password used by `ProviderConfig` is configured as an kubernetes secret, while the kindserver IP address is configured -inside the `ProviderConfig` as the field endpoint. - -When provider-kind created a new cluster by processing a `KindCluster` manifest, the two providers which are used to deploy applications, provider-helm and provider-kubernetes, can be configured to use the `KindCluster`. - -![provider-kind_providerconfig](./provider-kind_providerconfig.png) - -A Crossplane composition can be created by concaternating different providers and their objects. A composition is managed as a -custom resource definition and defined in a single file. - -![composition](./composition.png) - -## Configuration - -Two kubernetes manifests are defines by provider-kind: `ProviderConfig` and `KindCluster`. The third needed kubernetes -object is a secret. - -The need for the following inputs arise when developing a provider-kind: - -* kindserver password as a kubernetes secret -* endpoint, the IP address of the kindserver as a detail of `ProviderConfig` -* kindConfig, the kind configuration file as a detail of `KindCluster` - -The following outputs arise: - -* kubernetesVersion, kubernetes version of a created kind cluster as a detail of `KindCluster` -* internalIP, IP address of a created kind cluster as a detail of `KindCluster` -* readiness as a detail of `KindCluster` -* kube config of a created kind cluster as a kubernetes secret reference of `KindCluster` - -### Inputs - -#### kindserver password - -The kindserver password needs to be defined first. It is realized as a kubernetes secret and contains the password -which the kindserver has been configured with: - -``` -apiVersion: v1 -data: - credentials: MTIzNDU= -kind: Secret -metadata: - name: kind-provider-secret - namespace: crossplane-system -type: Opaque -``` - -#### endpoint - -The IP address of the kindserver `endpoint` is configured in the provider-kind `ProviderConfig`. This config also references the kindserver password (`kind-provider-secret`): - -``` -apiVersion: kind.crossplane.io/v1alpha1 -kind: ProviderConfig -metadata: - name: kind-provider-config -spec: - credentials: - source: Secret - secretRef: - namespace: crossplane-system - name: kind-provider-secret - key: credentials - endpoint: - url: https://172.18.0.1:7443/api/v1/kindserver -``` - -It is suggested that the kindserver runs on the IP of the docker host, so that all kind clusters can access it without extra routing. - -#### kindConfig - -The kind config is provided as the field `kindConfig` in each `KindCluster` manifest. The manifest also references the provider-kind `ProviderConfig` (`kind-provider-config` in the `providerConfigRef` field): - -``` -apiVersion: container.kind.crossplane.io/v1alpha1 -kind: KindCluster -metadata: - name: example-kind-cluster -spec: - forProvider: - kindConfig: | - kind: Cluster - apiVersion: kind.x-k8s.io/v1alpha4 - nodes: - - role: control-plane - kubeadmConfigPatches: - - | - kind: InitConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" - extraPortMappings: - - containerPort: 80 - hostPort: 80 - protocol: TCP - - containerPort: 443 - hostPort: 443 - protocol: TCP - containerdConfigPatches: - - |- - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.cnoe.localtest.me:443"] - endpoint = ["https://gitea.cnoe.localtest.me"] - [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.cnoe.localtest.me".tls] - insecure_skip_verify = true - providerConfigRef: - name: kind-provider-config - writeConnectionSecretToRef: - namespace: default - name: kind-connection-secret -``` - -After the kind cluster has been created, it's kube config is stored in a kubernetes secret `kind-connection-secret` which `writeConnectionSecretToRef` references. - -### Outputs - -The three outputs can be recieved by getting the `KindCluster` manifest after the cluster has been created. The `KindCluster` is -available for reading even before the cluster has been created, but the three outputfields are empty until then. The ready state -will also switch from `false` to `true` after the cluster has finally been created. - -#### kubernetesVersion, internalIP and readiness - -This fields can be recieved with a standard kubectl get command: - -``` -$ kubectl get kindclusters kindcluster-fw252 -o yaml -... -status: - atProvider: - internalIP: 192.168.199.19 - kubernetesVersion: v1.31.0 - conditions: - - lastTransitionTime: "2024-11-12T18:22:39Z" - reason: Available - status: "True" - type: Ready - - lastTransitionTime: "2024-11-12T18:21:38Z" - reason: ReconcileSuccess - status: "True" - type: Synced -``` - -#### kube config - -The kube config is stored in a kubernetes secret (`kind-connection-secret`) which can be accessed after the cluster has been -created: - -``` -$ kubectl get kindclusters kindcluster-fw252 -o yaml -... - writeConnectionSecretToRef: - name: kind-connection-secret - namespace: default -... - -$ kubectl get secret kind-connection-secret -NAME TYPE DATA AGE -kind-connection-secret connection.crossplane.io/v1alpha1 2 107m -``` - -The API endpoint of the new cluster `endpoint` and it's kube config `kubeconfig` is stored in that secret. This values are set in -the Obbserve function of the kind controller of provider-kind. They are set with the special crossplane function managed -ExternalObservation. - -## The reconciler loop of a crossplane provider - -The reconciler loop is the heart of every crossplane provider. As it is coupled async, it's best to describe it working in words: - -Internally, the Connect function get's triggered in the kindcluster controller `internal/controller/kindcluster/kindcluster.go` -first, to setup the provider and configure it with the kindserver password and IP address of the kindserver. - -After that the provider-kind has been configured with the kindserver secret and it's `ProviderConfig`, the provider is ready to -be activated by applying a `KindCluster` manifest to kubernetes. - -When the user applies a new `KindCluster` manifest, a observe loop is started. The provider regulary triggers the `Observe` -function of the controller. As there has yet been created nothing yet, the controller will return -`managed.ExternalObservation{ResourceExists: false}` to signal that the kind cluster resource has not been created yet. -As the is a kindserver SDK available, the controller is using the `Get` function of the SDK to query the kindserver. - -The `KindCluster` is already applied and can be retrieved with `kubectl get kindclusters`. As the cluster has not been -created yet, it readiness state is `false`. - -In parallel, the `Create` function is triggered in the controller. This function has acces to the desired kind config -`cr.Spec.ForProvider.KindConfig` and the name of the kind cluster `cr.ObjectMeta.Name`. It can now call the kindserver SDK to -create a new cluster with the given config and name. The create function is supposed not to run too long, therefore -it directly returns in the case of provider-kind. The kindserver already knows the name of the new cluster and even it is -not yet ready, it will respond with a partial success. - -The observe loops is triggered regulary in parallel. It will be triggered after the create call but before the kind cluster has been -created. Now it will get a step further. It gets the information of kindserver, that the cluster is already knows, but not -finished creating yet. - -After the cluster has been finished creating, the kindserver has all important informations for the provider-kind. That is -The API server endpoint of the new cluster and it's kube config. After another round of the observer loop, the controller -gets now the full set of information of kindcluster (cluster ready, it's API server endpoint and it's kube config). -When this informations has been recieved by the kindserver SDk in form of a JSON file, it is able to signal successfull -creating of the cluster. That is done by returning the following structure from inside the observe function: - -``` - return managed.ExternalObservation{ - ResourceExists: true, - ResourceUpToDate: true, - ConnectionDetails: managed.ConnectionDetails{ - xpv1.ResourceCredentialsSecretEndpointKey: []byte(clusterInfo.Endpoint), - xpv1.ResourceCredentialsSecretKubeconfigKey: []byte(clusterInfo.KubeConfig), - }, - }, nil -``` - -Note that the managed.ConnectionDetails will automatically write the API server endpoint and it's kube config to the kubernetes -secret which `writeConnectionSecretToRef`of `KindCluster` points to. - -It also set the availability flag before returning, that will mark the `KindCluster` as ready: - -``` - cr.Status.SetConditions(xpv1.Available()) -``` - -Before returning, it will also set the informations which are transfered into fields of `kindCluster` which can be retrieved by a -`kubectl get`, the `kubernetesVersion` and the `internalIP` fields: - -``` - cr.Status.AtProvider.KubernetesVersion = clusterInfo.K8sVersion - cr.Status.AtProvider.InternalIP = clusterInfo.NodeIp -``` - -Now the `KindCluster` is setup completly and when it's data is retrieved by `kubectl get`, all data is available and it's readiness -is set to `true`. - -The observer loops continies to be called to enable drift detection. That detection is currently not implemented, but is -prepared for future implementations. When the observer function would detect that the kind cluster with a given name is set -up with a kind config other then the desired, the controller would call the controller `Update` function, which would -delete the currently runnign kind cluster and recreates it with the desired kind config. - -When the user is deleting the `KindCluster` manifest at a later stage, the `Delete` function of the controller is triggered -to call the kindserver SDK to delete the cluster with the given name. The observer loop will acknowledge that the cluster -is deleted successfully by retrieving `kind cluster not found` when the deletion had been successfull. If not, the controller -will trigger the delete function in a loop as well, until the kind cluster has been deleted. - -That assembles the reconciler loop. - -## kind API server IP address - -Each newly created kind cluster has a practially random kubernetes API server endpoint. As the IP address of a new kind cluster -can't determined before creation, the kindserver manages the API server field of the kind config. It will map all -kind server kubernets API endpoints on it's own IP address, but on different ports. That garantees that alls kind -clusters can access the kubernetes API endpoints of all other kind clusters by using the docker host IP of the kindserver -itself. This is needed as the kube config hardcodes the kubernets API server endpoint. By using the docker host IP -but with different ports, every usage of a kube config from one kind cluster to another is working successfully. - -The management of the kind config in the kindserver is implemented in the `Post` function of the kindserver `main.go` file. - -## Create a the crossplane provider-kind - -The official way for creating crossplane providers is to use the provider-template. Process the following steps to create -a new provider. - -First, clone the provider-template. The commit ID when this howto has been written is 2e0b022c22eb50a8f32de2e09e832f17161d7596. -Rename the new folder after cloning. - -``` -git clone https://github.com/crossplane/provider-template.git -mv provider-template provider-kind -cd provider-kind/ -``` - -The informations in the provided README.md are incomplete. Folow this steps to get it running: - -> Please use bash for the next commands (`${type,,}` e.g. is not a mistake) - -``` -make submodules -export provider_name=Kind # Camel case, e.g. GitHub -make provider.prepare provider=${provider_name} -export group=container # lower case e.g. core, cache, database, storage, etc. -export type=KindCluster # Camel casee.g. Bucket, Database, CacheCluster, etc. -make provider.addtype provider=${provider_name} group=${group} kind=${type} -sed -i "s/sample/${group}/g" apis/${provider_name,,}.go -sed -i "s/mytype/${type,,}/g" internal/controller/${provider_name,,}.go -``` - -Patch the Makefile: - -``` -dev: $(KIND) $(KUBECTL) - @$(INFO) Creating kind cluster -+ @$(KIND) delete cluster --name=$(PROJECT_NAME)-dev - @$(KIND) create cluster --name=$(PROJECT_NAME)-dev - @$(KUBECTL) cluster-info --context kind-$(PROJECT_NAME)-dev -- @$(INFO) Installing Crossplane CRDs -- @$(KUBECTL) apply --server-side -k https://github.com/crossplane/crossplane//cluster?ref=master -+ @$(INFO) Installing Crossplane -+ @helm install crossplane --namespace crossplane-system --create-namespace crossplane-stable/crossplane --wait - @$(INFO) Installing Provider Template CRDs - @$(KUBECTL) apply -R -f package/crds - @$(INFO) Starting Provider Template controllers -``` - -Generate, build and execute the new provider-kind: - -``` -make generate -make build -make dev -``` - -Now it's time to add the required fields (internalIP, endpoint, etc.) to the spec fields in go api sources found in: - -* apis/container/v1alpha1/kindcluster_types.go -* apis/v1alpha1/providerconfig_types.go - -The file `apis/kind.go` may also be modified. The word `sample` can be replaces with `container` in our case. - -When that's done, the yaml specifications needs to be modified to also include the required fields (internalIP, endpoint, etc.) - -Next, a kindserver SDK can be implemented. That is a helper class which encapsulates the get, create and delete HTTP calls to the kindserver. Connection infos (kindserver IP address and password) will be stored by the constructor. - -After that we can add the usage of the kindclient sdk in kindcluster controller `internal/controller/kindcluster/kindcluster.go`. - -Finally we can update the `Makefile` to better handle the primary kind cluster creation and adding of a cluster role binding -so that crossplane can access the `KindCluster` objects. Examples and updating the README.md will finish the development. - -All this steps are documented in: https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW/provider-kind/pulls/1 - -## Publish the provider-kind to a user defined docker registry - -Every provider-kind release needs to be tagged first in the git repository: - -``` -git tag v0.1.0 -git push origin v0.1.0 -``` - -Next, make sure you have docker logged in into the target registry: - -``` -docker login forgejo.edf-bootstrap.cx.fg1.ffm.osc.live -``` - -Now it's time to specify the target registry, build the provider-kind for ARM64 and AMD64 CPU architectures and publish it to the target registry: - -``` -XPKG_REG_ORGS_NO_PROMOTE="" XPKG_REG_ORGS="forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz" make build.all publish BRANCH_NAME=main -``` - -The parameter `BRANCH_NAME=main` is needed when the tagging and publishing happens from another branch. The version of the provider-kind that of the tag name. The output of the make call ends then like this: - -``` -$ XPKG_REG_ORGS_NO_PROMOTE="" XPKG_REG_ORGS="forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz" make build.all publish BRANCH_NAME=main -... -14:09:19 [ .. ] Skipping image publish for docker.io/provider-kind:v0.1.0 -Publish is deferred to xpkg machinery -14:09:19 [ OK ] Image publish skipped for docker.io/provider-kind:v0.1.0 -14:09:19 [ .. ] Pushing package forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz/provider-kind:v0.1.0 -xpkg pushed to forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz/provider-kind:v0.1.0 -14:10:19 [ OK ] Pushed package forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz/provider-kind:v0.1.0 -``` - -After publishing, the provider-kind can be installed in-cluster similar to other providers like -provider-helm and provider-kubernetes. To install it apply the following manifest: - -``` -apiVersion: pkg.crossplane.io/v1 -kind: Provider -metadata: - name: provider-kind -spec: - package: forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz/provider-kind:v0.1.0 -``` - -The output of `kubectl get providers`: - -``` -$ kubectl get providers -NAME INSTALLED HEALTHY PACKAGE AGE -provider-helm True True xpkg.upbound.io/crossplane-contrib/provider-helm:v0.19.0 38m -provider-kind True True forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/richardrobertreitz/provider-kind:v0.1.0 39m -provider-kubernetes True True xpkg.upbound.io/crossplane-contrib/provider-kubernetes:v0.15.0 38m -``` - -The provider-kind can now be used. - -## Crossplane Composition `edfbuilder` - -Together with the implemented provider-kind and it's config to create a composition which can create kind clusters and -the ability to deploy helm and kubernetes objects in the newly created cluster. - -A composition is realized as a custom resource definition (CRD) considting of three parts: - -* A definition -* A composition -* One or more deplyoments of the composition - -### definition.yaml - -The definition of the CRD will most probably contain one additional fiel, the ArgoCD repository URL to easily select -the stacks which should be deployed: - -``` -apiVersion: apiextensions.crossplane.io/v1 -kind: CompositeResourceDefinition -metadata: - name: edfbuilders.edfbuilder.crossplane.io -spec: - connectionSecretKeys: - - kubeconfig - group: edfbuilder.crossplane.io - names: - kind: EDFBuilder - listKind: EDFBuilderList - plural: edfbuilders - singular: edfbuilders - versions: - - name: v1alpha1 - served: true - referenceable: true - schema: - openAPIV3Schema: - description: A EDFBuilder is a composite resource that represents a K8S Cluster with edfbuilder Installed - type: object - properties: - spec: - type: object - properties: - repoURL: - type: string - description: URL to ArgoCD stack of stacks repo - required: - - repoURL -``` - -### composition.yaml - -This is a shortened version of the file `examples/composition_deprecated/composition.yaml`. It combines a `KindCluster` with -deployments of of provider-helm and provider-kubernetes. Note that the `ProviderConfig` and the kindserver secret has already been -applied to kubernetes (by the Makefile) before applying this composition. - -``` -apiVersion: apiextensions.crossplane.io/v1 -kind: Composition -metadata: - name: edfbuilders.edfbuilder.crossplane.io -spec: - writeConnectionSecretsToNamespace: crossplane-system - compositeTypeRef: - apiVersion: edfbuilder.crossplane.io/v1alpha1 - kind: EDFBuilder - resources: - - ### kindcluster - - base: - apiVersion: container.kind.crossplane.io/v1alpha1 - kind: KindCluster - metadata: - name: example - spec: - forProvider: - kindConfig: | - kind: Cluster - apiVersion: kind.x-k8s.io/v1alpha4 - nodes: - - role: control-plane - kubeadmConfigPatches: - - | - kind: InitConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" - extraPortMappings: - - containerPort: 80 - hostPort: 80 - protocol: TCP - - containerPort: 443 - hostPort: 443 - protocol: TCP - containerdConfigPatches: - - |- - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.cnoe.localtest.me:443"] - endpoint = ["https://gitea.cnoe.localtest.me"] - [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.cnoe.localtest.me".tls] - insecure_skip_verify = true - providerConfigRef: - name: example-provider-config - writeConnectionSecretToRef: - namespace: default - name: my-connection-secret - - ### helm provider config - - base: - apiVersion: helm.crossplane.io/v1beta1 - kind: ProviderConfig - spec: - credentials: - source: Secret - secretRef: - namespace: default - name: my-connection-secret - key: kubeconfig - patches: - - fromFieldPath: metadata.name - toFieldPath: metadata.name - readinessChecks: - - type: None - - ### ingress-nginx - - base: - apiVersion: helm.crossplane.io/v1beta1 - kind: Release - metadata: - annotations: - crossplane.io/external-name: ingress-nginx - spec: - rollbackLimit: 99999 - forProvider: - chart: - name: ingress-nginx - repository: https://kubernetes.github.io/ingress-nginx - version: 4.11.3 - namespace: ingress-nginx - values: - controller: - updateStrategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 1 - hostPort: - enabled: true - terminationGracePeriodSeconds: 0 - service: - type: NodePort - watchIngressWithoutClass: true - - nodeSelector: - ingress-ready: "true" - tolerations: - - key: "node-role.kubernetes.io/master" - operator: "Equal" - effect: "NoSchedule" - - key: "node-role.kubernetes.io/control-plane" - operator: "Equal" - effect: "NoSchedule" - - publishService: - enabled: false - extraArgs: - publish-status-address: localhost - # added for idpbuilder - enable-ssl-passthrough: "" - - # added for idpbuilder - allowSnippetAnnotations: true - - # added for idpbuilder - config: - proxy-buffer-size: 32k - use-forwarded-headers: "true" - patches: - - fromFieldPath: metadata.name - toFieldPath: spec.providerConfigRef.name - - ### kubernetes provider config - - base: - apiVersion: kubernetes.crossplane.io/v1alpha1 - kind: ProviderConfig - spec: - credentials: - source: Secret - secretRef: - namespace: default - name: my-connection-secret - key: kubeconfig - patches: - - fromFieldPath: metadata.name - toFieldPath: metadata.name - readinessChecks: - - type: None - - ### kubernetes argocd stack of stacks application - - base: - apiVersion: kubernetes.crossplane.io/v1alpha2 - kind: Object - spec: - forProvider: - manifest: - apiVersion: argoproj.io/v1alpha1 - kind: Application - metadata: - name: edfbuilder - namespace: argocd - labels: - env: dev - spec: - destination: - name: in-cluster - namespace: argocd - source: - path: registry - repoURL: 'https://gitea.cnoe.localtest.me/giteaAdmin/edfbuilder-shoot' - targetRevision: HEAD - project: default - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true - patches: - - fromFieldPath: metadata.name - toFieldPath: spec.providerConfigRef.name -``` - -## Usage - -Set this values to allow many kind clusters running in parallel, if needed: - -``` -sudo sysctl fs.inotify.max_user_watches=524288 -sudo sysctl fs.inotify.max_user_instances=512 - -To make the changes persistent, edit the file /etc/sysctl.conf and add these lines: -fs.inotify.max_user_watches = 524288 -fs.inotify.max_user_instances = 512 -``` - -Start provider-kind: - -``` -make build -kind delete clusters $(kind get clusters) -kind create cluster --name=provider-kind-dev -DOCKER_HOST_IP="$(docker inspect $(docker ps | grep kindest | awk '{ print $1 }' | head -n1) | jq -r .[0].NetworkSettings.Networks.kind.Gateway)" make dev -``` - -Wait until debug output of the provider-kind is shown: - -``` -... -namespace/crossplane-system configured -secret/example-provider-secret created -providerconfig.kind.crossplane.io/example-provider-config created -14:49:50 [ .. ] Starting Provider Kind controllers -2024-11-12T14:49:54+01:00 INFO controller-runtime.metrics Starting metrics server -2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "source": "kind source: *v1alpha1.ProviderConfig"} -2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "source": "kind source: *v1alpha1.ProviderConfigUsage"} -2024-11-12T14:49:54+01:00 INFO Starting Controller {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig"} -2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster", "source": "kind source: *v1alpha1.KindCluster"} -2024-11-12T14:49:54+01:00 INFO Starting Controller {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster"} -2024-11-12T14:49:54+01:00 INFO controller-runtime.metrics Serving metrics server {"bindAddress": ":8080", "secure": false} -2024-11-12T14:49:54+01:00 INFO Starting workers {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "worker count": 10} -2024-11-12T14:49:54+01:00 DEBUG provider-kind Reconciling {"controller": "providerconfig/providerconfig.kind.crossplane.io", "request": {"name":"example-provider-config"}} -2024-11-12T14:49:54+01:00 INFO Starting workers {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster", "worker count": 10} -2024-11-12T14:49:54+01:00 INFO KubeAPIWarningLogger metadata.finalizers: "in-use.crossplane.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers -2024-11-12T14:49:54+01:00 DEBUG provider-kind Reconciling {"controller": "providerconfig/providerconfig.kind.crossplane.io", "request": {"name":"example-provider-config"}} - -``` - -Start kindserver: - -see kindserver/README.md - -When kindserver is started: - -```bash -cd examples/composition_deprecated -kubectl apply -f definition.yaml -kubectl apply -f composition.yaml -kubectl apply -f cluster.yaml -``` - -List the created elements, wait until the new cluster is created, then switch back to the primary cluster: - -```bash -kubectl config use-context kind-provider-kind-dev -``` - -Show edfbuilder compositions: - -```bash -kubectl get edfbuilders -NAME SYNCED READY COMPOSITION AGE -kindcluster True True edfbuilders.edfbuilder.crossplane.io 4m45s -``` - -Show kind clusters: - -```bash -kubectl get kindclusters -NAME READY SYNCED EXTERNAL-NAME INTERNALIP VERSION AGE -kindcluster-wlxrt True True kindcluster-wlxrt 192.168.199.19 v1.31.0 5m12s -``` - -Show helm deployments: - -```bash -kubectl get releases -NAME CHART VERSION SYNCED READY STATE REVISION DESCRIPTION AGE -kindcluster-29dgf ingress-nginx 4.11.3 True True deployed 1 Install complete 5m32s -kindcluster-w2dxl forgejo 10.0.2 True True deployed 1 Install complete 5m32s -kindcluster-x8x9k argo-cd 7.6.12 True True deployed 1 Install complete 5m32s -``` - -Show kubernetes objects: - -```bash -kubectl get objects -NAME KIND PROVIDERCONFIG SYNCED READY AGE -kindcluster-8tbv8 ConfigMap kindcluster True True 5m50s -kindcluster-9lwc9 ConfigMap kindcluster True True 5m50s -kindcluster-9sgmd Deployment kindcluster True True 5m50s -kindcluster-ct2h7 Application kindcluster True True 5m50s -kindcluster-s5knq ConfigMap kindcluster True True 5m50s -``` - -Open the composition in VS Code: examples/composition_deprecated/composition.yaml - -## What is missing - -Currently missing is the third and final part, the imperative steps which need to be processed: - -* creation of TLS certificates and giteaAdmin password -* creation of a Forgejo repository for the stacks -* uploading the stacks in the Forgejo repository - -Connecting the definition field (ArgoCD repo URL) and composition interconnects (function-patch-and-transform) are also missing. diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.drawio b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.drawio deleted file mode 100644 index 48abda4..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.drawio +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.png b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.png deleted file mode 100644 index ce63ab8..0000000 Binary files a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/composition.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio deleted file mode 100644 index 4d11b51..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.png b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.png deleted file mode 100644 index 5d09530..0000000 Binary files a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_interface.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.drawio b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.drawio deleted file mode 100644 index 7da7ae6..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.drawio +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png deleted file mode 100644 index c55fc61..0000000 Binary files a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio deleted file mode 100644 index 44dd400..0000000 --- a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png b/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png deleted file mode 100644 index e588964..0000000 Binary files a/content/en/docs-old/v1/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png and /dev/null differ diff --git a/content/en/docs-old/v1/solution/tools/Kube-prometheus-stack/_index.md b/content/en/docs-old/v1/solution/tools/Kube-prometheus-stack/_index.md deleted file mode 100644 index 9b5512a..0000000 --- a/content/en/docs-old/v1/solution/tools/Kube-prometheus-stack/_index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Kube-prometheus-stack -description: Kube-prometheus-stack contains Kubernetes manifests, Prometheus and Grafana, including preconfigured dashboards ---- - -## Kube-prometheus-stack Overview - -Grafana is an open-source monitoring solution that enables viusalization of metrics and logs. -Prometheus is an open-source monitoring and alerting system which collects metrics from services and allows the metrics to be shown in Grafana. - -### Implementation Details - -The application ist started in edfbuilder/kind/stacks/core/kube-prometheus.yaml. -The application has the sync option spec.syncPolicy.syncOptions ServerSideApply=true. This is necessary, since kube-prometheus-stack exceeds the size limit for secrets and without this option a sync attempt will fail and throw an exception. -The Helm values file edfbuilder/kind/stacks/core/kube-prometheus/values.yaml contains configuration values: -grafana.additionalDataSources contains Loki as a Grafana Data Source. -grafana.ingress contains the Grafana ingress configuratione, like the host url (cnoe.localtest.me). -grafana.sidecar.dashboards contains necessary configurations so additional user defined dashboards are loaded when Grafana is started. -grafana.grafana.ini.server contains configuration details that are necessary, so the ingress points to the correct url. - -### Start - -Once Grafana is running it is accessible under https://cnoe.localtest.me/grafana. -Many preconfigured dashboards can be used by klicking the menu option Dashboards. - -### Adding your own dashboards - -The application edfbuilder/kind/stacks/core/kube-prometheus.yaml is used to import new Loki dashboards. Examples for imported dashboards can be found in the folder edfbuilder/kind/stacks/core/kube-prometheus/dashboards. - -It is possible to add your own dashboards: Dashboards must be in JSON format. To add your own dashboard create a new ConfigMap in YAML format using onw of the examples as a blueprint. The new dashboard in JSON format has to be added as the value for data.k8s-dashboard-[...].json like in the examples. (It is important to use a unique name for data.k8s-dashboard-[...].json for each dashboard.) - -Currently preconfigured dashboards include several dahboards for Loki and a dashboard to showcase Nginx-Ingress metrics. diff --git a/content/en/docs-old/v1/solution/tools/Loki/_index.md b/content/en/docs-old/v1/solution/tools/Loki/_index.md deleted file mode 100644 index 4c51070..0000000 --- a/content/en/docs-old/v1/solution/tools/Loki/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Loki -description: Grafana Loki is a scalable open-source log aggregation system ---- - -## Loki Overview - -The application Grafana Loki is started in edfbuilder/kind/stacks/core/loki.yaml. -Loki is started in microservices mode and contains the components ingester, distributor, querier, and query-frontend. -The Helm values file edfbuilder/kind/stacks/core/loki/values.yaml contains configuration values. diff --git a/content/en/docs-old/v1/solution/tools/Promtail/_index.md b/content/en/docs-old/v1/solution/tools/Promtail/_index.md deleted file mode 100644 index b675162..0000000 --- a/content/en/docs-old/v1/solution/tools/Promtail/_index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Promtail -description: Grafana Promtail is an agent that ships logs to a Grafan Loki instance (log-shipper) ---- - -## Promtail Overview - -The application Grafana Promtail is started in edfbuilder/kind/stacks/core/promtail.yaml. -The Helm values file edfbuilder/kind/stacks/core/promtail/values.yaml contains configuration values. diff --git a/content/en/docs-old/v1/solution/tools/kyverno integration/_index.md b/content/en/docs-old/v1/solution/tools/kyverno integration/_index.md deleted file mode 100644 index 072d54c..0000000 --- a/content/en/docs-old/v1/solution/tools/kyverno integration/_index.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Kyverno -description: Kyverno is a policy engine for Kubernetes designed to enforce, validate, and mutate configurations of Kubernetes resources ---- - -## Kyverno Overview - -Kyverno is a policy engine for Kubernetes designed to enforce, validate, and mutate configurations of Kubernetes resources. It allows administrators to define policies as Kubernetes custom resources (CRDs) without requiring users to learn a new language or system. - -### Key Uses - -1. **Policy Enforcement**: Kyverno ensures resources comply with security, operational, or organizational policies, such as requiring specific labels, annotations, or resource limits. -2. **Validation**: It checks resources against predefined rules, ensuring configurations are correct before they are applied to the cluster. -3. **Mutation**: Kyverno can automatically modify resources on-the-fly, adding missing fields or values to Kubernetes objects. -4. **Generation**: It can generate resources like ConfigMaps or Secrets automatically when needed, helping to maintain consistency. - -Kyverno simplifies governance and compliance in Kubernetes environments by automating policy management and ensuring best practices are followed. - -## Prerequisites - -Same as for idpbuilder installation - -* Docker Engine -* Go -* kubectl -* kind - -## Installation - -### Build process - -For building idpbuilder the source code needs to be downloaded and compiled: - -```bash -git clone https://github.com/cnoe-io/idpbuilder.git -cd idpbuilder -go build -``` - -### Start idpbuilder - -To start the idpbuilder with kyverno integration execute the following command: - -```bash -idpbuilder create --use-path-routing -p https://github.com/cnoe-io/stacks//ref-implementation -p https://github.com/cnoe-io/stacks//kyverno-integration -``` - -After this step, you can see in ArgoCD that kyverno was installed diff --git a/content/en/docs-old/v1/solution/tools/kyverno integration/kyverno.png b/content/en/docs-old/v1/solution/tools/kyverno integration/kyverno.png deleted file mode 100644 index c6f42fc..0000000 Binary files a/content/en/docs-old/v1/solution/tools/kyverno integration/kyverno.png and /dev/null differ diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md old mode 100644 new mode 100755 index 72f5932..688aef1 --- a/content/en/docs/_index.md +++ b/content/en/docs/_index.md @@ -1,27 +1,9 @@ --- -title: "Documentation" -linkTitle: "Documentation" -menu: - main: - weight: 20 +title: Developer Framework Documentation +linkTitle: Docs +menu: {main: {weight: 20}} +weight: 20 --- -# Edge Developer Platform (EDP) Documentation +This section is the project documentation for IPCEI-CIS Developer Framework. -Welcome to the EDP documentation. This documentation serves developers, engineers, and auditors who want to understand, use, and audit the Edge Developer Platform. - -It describes the outcomes and products of the edgeDeveloperFramework (eDF) sub-project within IPCEI-CIS. - -## Target Audience - -* **Developers & Engineers**: Learn how to use the platform, deploy applications, and integrate services -* **Platform Engineers**: Understand the architecture, components, and operational aspects -* **Auditors & Governance**: Access project history, decisions, and compliance information - -## Documentation Structure - -The documentation is organized into three core areas: - -* **[Edge Developer Platform (EDP)](/docs/edp/)**: The central platform to support developers working at the edge, based around Forgejo -* **[EdgeConnect Cloud](/docs/edgeconnect/)**: The sovereign edge cloud context and key deployment target for EDP integrations -* **[Governance](/docs/governance/)**: Project history, decision context, and audit-oriented traceability diff --git a/content/en/docs-old/v1/concepts/1_software-and-workloads/_index.md b/content/en/docs/concepts/1_software-and-workloads/_index.md similarity index 100% rename from content/en/docs-old/v1/concepts/1_software-and-workloads/_index.md rename to content/en/docs/concepts/1_software-and-workloads/_index.md diff --git a/content/en/docs-old/v1/concepts/2_engineering-people/_index.md b/content/en/docs/concepts/2_engineering-people/_index.md similarity index 71% rename from content/en/docs-old/v1/concepts/2_engineering-people/_index.md rename to content/en/docs/concepts/2_engineering-people/_index.md index b333839..999dd9a 100644 --- a/content/en/docs-old/v1/concepts/2_engineering-people/_index.md +++ b/content/en/docs/concepts/2_engineering-people/_index.md @@ -1,7 +1,7 @@ --- title: Engineers weight: 2 -description: 'Our clients: People creating code and bringing it to life - and their habits and contexts' +description: 'Our clients: People creating code and bringing it to live - and their habits and contexts' --- diff --git a/content/en/docs-old/v1/concepts/3_use-cases/_index.md b/content/en/docs/concepts/3_use-cases/_index.md similarity index 70% rename from content/en/docs-old/v1/concepts/3_use-cases/_index.md rename to content/en/docs/concepts/3_use-cases/_index.md index 6a5b20f..c27f9d9 100644 --- a/content/en/docs-old/v1/concepts/3_use-cases/_index.md +++ b/content/en/docs/concepts/3_use-cases/_index.md @@ -4,7 +4,7 @@ weight: 2 description: The golden paths in the engineers and product development domain --- -## Rationale +## Rationale The challenge of IPCEI-CIS Developer Framework is to provide value for DTAG customers, and more specifically: for Developers of DTAG customers. @@ -30,8 +30,6 @@ Deploy and develop the famous socks shops: * https://medium.com/@wadecharley703/socks-shop-microservices-application-deployment-on-the-cloud-cd1017cce1c0 -* See also mkdev fork: https://github.com/mkdev-me/microservices-demo - ### Humanitec Demos * https://github.com/poc-template-org/node-js-sample @@ -40,22 +38,10 @@ Deploy and develop the famous socks shops: * https://github.com/kezoo/nestjs-reactjs-graphql-typescript-boilerplate-example -### Telemetry Use Case with respect to the Fibonacci workload - -The Fibonacci App on the cluster can be accessed on the path https://cnoe.localtest.me/fibonacci. -It can be called for example by using the URL https://cnoe.localtest.me/fibonacci?number=5000000. - -The resulting ressource spike can be observed one the Grafana dashboard "Kubernetes / Compute Resources / Cluster". -The resulting visualization should look similar like this: - - -![alt text](fibonacci-app_cpu-spike.png) - - ## When and how to use the developer framework? ### e.g. an example .... taken from https://cloud.google.com/blog/products/application-development/common-myths-about-platform-engineering?hl=en -![alt text](image.png) +![alt text](image.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/3_use-cases/image.png b/content/en/docs/concepts/3_use-cases/image.png similarity index 100% rename from content/en/docs-old/v1/concepts/3_use-cases/image.png rename to content/en/docs/concepts/3_use-cases/image.png diff --git a/content/en/docs-old/v1/concepts/3_use-cases/platforms-def.drawio.png b/content/en/docs/concepts/3_use-cases/platforms-def.drawio.png similarity index 100% rename from content/en/docs-old/v1/concepts/3_use-cases/platforms-def.drawio.png rename to content/en/docs/concepts/3_use-cases/platforms-def.drawio.png diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/_index.md b/content/en/docs/concepts/4_digital-platforms/_index.md similarity index 99% rename from content/en/docs-old/v1/concepts/4_digital-platforms/_index.md rename to content/en/docs/concepts/4_digital-platforms/_index.md index b5d5678..d0145e7 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/_index.md @@ -8,3 +8,6 @@ description: Platforming is the discipline to provide full sophisticated golden ## Surveys * [10-best-internal-developer-platforms-to-consider-in-2023/](https://www.qovery.com/blog/10-best-internal-developer-platforms-to-consider-in-2023/) + + + diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/references/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-components/_index.md similarity index 78% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/references/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-components/_index.md index 5d1b186..ed13961 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/references/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-components/_index.md @@ -1,9 +1,11 @@ ---- -title: List of references -weight: 10 -linktitle: References -description: An currently uncurated list of references with respect to typical platform building components ---- ++++ +title = "Platform Components" +weight = 3 +[params] + author = 'stephan.lo@telekom.de' + date = '2024-07-30' ++++ + ## CNCF @@ -29,8 +31,8 @@ description: An currently uncurated list of references with respect to typical p | Core Component | Short Description | | ---- | --- | -| Application Configuration Management | Manage application configuration in a dynamic, scalable and reliable way. | -| Infrastructure Orchestration | Orchestrate your infrastructure in a dynamic and intelligent way depending on the context. | -| Environment Management | Enable developers to create new and fully provisioned environments whenever needed. | -| Deployment Management | Implement a delivery pipeline for Continuous Delivery or even Continuous Deployment (CD). | -| Role-Based Access Control | Manage who can do what in a scalable way. | +| Application Configuration Management | Manage application configuration in a dynamic, scalable and reliable way. | +| Infrastructure Orchestration | Orchestrate your infrastructure in a dynamic and intelligent way depending on the context. | +| Environment Management | Enable developers to create new and fully provisioned environments whenever needed. | +| Deployment Management | Implement a delivery pipeline for Continuous Delivery or even Continuous Deployment (CD). | +| Role-Based Access Control | Manage who can do what in a scalable way. | \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md similarity index 98% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md index 128118e..a9c0ac5 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-components/cicd-pipeline/_index.md @@ -47,11 +47,11 @@ Components are the composable and self-contained building blocks for the context Components must be as small as possible and follow the same concepts of software development and deployment as any other software product. In particular, they must have the following characteristics: -* designed for a single task -* provide a clear and intuitive output -* easy to compose -* easily customizable or interchangeable -* automatically testable +- designed for a single task +- provide a clear and intuitive output +- easy to compose +- easily customizable or interchangeable +- automatically testable In the EDF components are divided into different categories. Each category contains components that perform similar actions. For example, the `build` category contains components that compile code, while the `deploy` category contains components that automate the management of the artefacts created in a production-like system. diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/cicd.drawio.png b/content/en/docs/concepts/4_digital-platforms/platform-components/cicd-pipeline/cicd.drawio.png similarity index 100% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/cicd-pipeline/cicd.drawio.png rename to content/en/docs/concepts/4_digital-platforms/platform-components/cicd-pipeline/cicd.drawio.png diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/developer-portals/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-components/developer-portals/_index.md similarity index 76% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/developer-portals/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-components/developer-portals/_index.md index 53dec62..5ac588f 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/developer-portals/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-components/developer-portals/_index.md @@ -1,11 +1,11 @@ ---- -title: "Developer Portals" -weight: 2 -description: Developer portals are one part of the UI for developers to access platforms. The general idea is that the UI parts should be enough for a developer to th their work. ---- - -> This page is in work. Right now we have in the index a collection of links describing developer portals. - ++++ +archetype = "sub-chapter" +title = "Developer Portals" +weight = 1 +[params] + author = 'stephan.lo@telekom.de' + date = '2024-07-30' ++++ * Backstage (siehe auch https://nl.devoteam.com/expert-view/project-unox/) * [Port](https://www.getport.io/) @@ -33,4 +33,4 @@ https://www.getport.io/compare/backstage-vs-port * [port-vs-backstage-choosing-your-internal-developer-portal](https://medium.com/@vaibhavgupta0702/port-vs-backstage-choosing-your-internal-developer-portal-71c6a6acd979) * [idp-vs-self-service-portal-a-platform-engineering-showdown](https://thenewstack.io/idp-vs-self-service-portal-a-platform-engineering-showdown) * [portals-vs-platform-orchestrator](https://humanitec.com/portals-vs-platform-orchestrator) -* [internal-developer-portal-vs-internal-developer-platform](https://www.cortex.io/post/internal-developer-portal-vs-internal-developer-platform) +* [internal-developer-portal-vs-internal-developer-platform](https://www.cortex.io/post/internal-developer-portal-vs-internal-developer-platform) \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/orchestrator/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-components/orchestrator/_index.md similarity index 67% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/orchestrator/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-components/orchestrator/_index.md index 745cbca..83fbdef 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-components/orchestrator/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-components/orchestrator/_index.md @@ -1,8 +1,11 @@ ---- -title: Platform Orchestrator -weight: 3 -description: "The new kid on the block since 2023 ist 'Platform Orchestrating': Do the the magic declaratively cloud natively automated." ---- ++++ +archetype = "sub-chapter" +title = "Platform Orchestrator" +weight = 1 +[params] + author = 'stephan.lo@telekom.de' + date = '2024-07-30' ++++ 'Platform Orchestration' is first mentionned by [Thoughtworks in Sept 2023](https://www.thoughtworks.com/en-de/radar/techniques/platform-orchestration) @@ -17,7 +20,7 @@ description: "The new kid on the block since 2023 ist 'Platform Orchestrating': * cnoe.io -#### Resources +#### Resources * [CNOE IDPBuilder](https://cnoe.io/docs/reference-implementation/installations/idpbuilder) -* https://github.com/csantanapr/cnoe-examples/tree/main +* https://github.com/csantanapr/cnoe-examples/tree/main \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/Viktor-restaurant.png b/content/en/docs/concepts/4_digital-platforms/platform-engineering/Viktor-restaurant.png similarity index 100% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/Viktor-restaurant.png rename to content/en/docs/concepts/4_digital-platforms/platform-engineering/Viktor-restaurant.png diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-engineering/_index.md similarity index 95% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-engineering/_index.md index 88092d7..ec8ba79 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-engineering/_index.md @@ -1,11 +1,12 @@ ---- -title: Platform Engineering -weight: 1 -description: Theory and general blue prints of the platform engineering discipline ---- ++++ +title = "Platform Engineering" +weight = 1 +[params] + author = 'stephan.lo@telekom.de' + date = '2024-07-30' ++++ - -## Rationale +## Rationale IPCEI-CIS Developer Framework is part of a cloud native technology stack. To design the capabilities and architecture of the Developer Framework we need to define the surounding context and internal building blocks, both aligned with cutting edge cloud native methodologies and research results. @@ -16,7 +17,6 @@ In CNCF the discipline of building stacks to enhance the developer experience is [CNCF first asks](https://tag-app-delivery.cncf.io/whitepapers/platforms/) why we need platform engineering: > The desire to refocus delivery teams on their core focus and reduce duplication of effort across the organisation has motivated enterprises to implement platforms for cloud-native computing. By investing in platforms, enterprises can: -> > * Reduce the cognitive load on product teams and thereby accelerate product development and delivery > * Improve reliability and resiliency of products relying on platform capabilities by dedicating experts to configure and manage them > * Accelerate product development and delivery by reusing and sharing platform tools and knowledge across many teams in an enterprise @@ -41,7 +41,7 @@ https://humanitec.com/blog/wtf-internal-developer-platform-vs-internal-developer ## Internal Developer Platform -> In IPCEI-CIS right now (July 2024) we are primarily interested in understanding how IDPs are built as one option to implement an IDP is to build it ourselves. +> In IPCEI-CIS right now (July 2024) we are primarily interested in understanding how IDPs are built as one option to implement an IDP is to build it ourselves. The outcome of the Platform Engineering discipline is - created by the platform engineering team - a so called 'Internal Developer Platform'. @@ -70,4 +70,4 @@ The amount of available IDPs as product is rapidly growing. ## Platform 'Initiatives' aka Use Cases Cortex is [talking about Use Cases (aka Initiatives):](https://www.youtube.com/watch?v=LrEC-fkBbQo) (or https://www.brighttalk.com/webcast/20257/601901) -![alt text](cortex-use-cases.png) +![alt text](cortex-use-cases.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/cortex-use-cases.png b/content/en/docs/concepts/4_digital-platforms/platform-engineering/cortex-use-cases.png similarity index 100% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/cortex-use-cases.png rename to content/en/docs/concepts/4_digital-platforms/platform-engineering/cortex-use-cases.png diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/idp.webp b/content/en/docs/concepts/4_digital-platforms/platform-engineering/idp.webp similarity index 100% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/idp.webp rename to content/en/docs/concepts/4_digital-platforms/platform-engineering/idp.webp diff --git a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md b/content/en/docs/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md similarity index 88% rename from content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md rename to content/en/docs/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md index d3d6af0..f6420d7 100644 --- a/content/en/docs-old/v1/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md +++ b/content/en/docs/concepts/4_digital-platforms/platform-engineering/reference-architecture/_index.md @@ -7,14 +7,14 @@ weight = 1 date = '2024-07-30' +++ -## [The Structure of a Successful Internal Developer Platform](https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures) +## [The Structure of a Successful Internal Developer Platform](https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures) In a platform reference architecture there are five main planes that make up an IDP: 1. Developer Control Plane – this is the primary configuration layer and interaction point for the platform users. Components include Workload specifications such as Score and a portal for developers to interact with. 2. Integration and Delivery Plane – this plane is about building and storing the image, creating app and infra configs, and deploying the final state. It usually contains a CI pipeline, an image registry, a Platform Orchestrator, and the CD system. 3. Resource Plane – this is where the actual infrastructure exists including clusters, databases, storage or DNS services. -4, Monitoring and Logging Plane – provides real-time metrics and logs for apps and infrastructure. +4, Monitoring and Logging Plane – provides real-time metrics and logs for apps and infrastructure. 5. Security Plane – manages secrets and identity to protect sensitive information, e.g., storing, managing, and security retrieving API keys and credentials/secrets. ![idp](../idp.webp) @@ -29,9 +29,12 @@ https://github.com/humanitec-architecture https://humanitec.com/reference-architectures + ## Create a reference architecture [Create your own platform reference architecture](https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures) [Reference arch slide deck](https://docs.google.com/presentation/d/1yAf_FSjiA0bAFukgu5p1DRMvvGGE1fF4KhvZbb7gn2I/edit?pli=1#slide=id.g1ef66f3349b_3_3) + + diff --git a/content/en/docs-old/v1/concepts/5_platforms/CNOE/_index.md b/content/en/docs/concepts/5_platforms/CNOE/_index.md similarity index 98% rename from content/en/docs-old/v1/concepts/5_platforms/CNOE/_index.md rename to content/en/docs/concepts/5_platforms/CNOE/_index.md index e701220..903f56f 100644 --- a/content/en/docs-old/v1/concepts/5_platforms/CNOE/_index.md +++ b/content/en/docs/concepts/5_platforms/CNOE/_index.md @@ -1,16 +1,16 @@ ---- -title: CNOE -weight: 4 ---- ++++ +title = "CNOE" +weight = 4 ++++ * https://cnoe.io/docs/intro - + > The goal for the CNOE framework is to bring together a cohort of enterprises operating at the same scale so that they can navigate their operational technology decisions together, de-risk their tooling bets, coordinate contribution, and offer guidance to large enterprises on which CNCF technologies to use together to achieve the best cloud efficiencies. ### Aussprache -* Englisch Kuh.noo, +* Englisch Kuh.noo, * also 'Kanu' im Deutschen @@ -26,7 +26,6 @@ See https://cnoe.io/docs/reference-implementation/integrations/reference-impl: # in a local terminal with docker and kind idpbuilder create --use-path-routing --log-level debug --package-dir https://github.com/cnoe-io/stacks//ref-implementation ``` - ### Output ```bash @@ -117,7 +116,7 @@ NAMESPACE NAME SYNC STATUS HEALTH STATUS argocd argo-workflows Synced Healthy argocd argocd Synced Healthy argocd backstage Synced Healthy -argocd included-backstage-templates Synced Healthy +argocd backstage-templates Synced Healthy argocd coredns Synced Healthy argocd external-secrets Synced Healthy argocd gitea Synced Healthy @@ -151,7 +150,7 @@ Data: USER_PASSWORD : RwCHPvPVMu+fQM4L6W/q-Wq79MMP+3CN-Jeo ``` -### login to backstage +### login to backstage login geht mit den Creds, siehe oben: diff --git a/content/en/docs-old/v1/concepts/5_platforms/CNOE/cnoe.png b/content/en/docs/concepts/5_platforms/CNOE/cnoe.png similarity index 100% rename from content/en/docs-old/v1/concepts/5_platforms/CNOE/cnoe.png rename to content/en/docs/concepts/5_platforms/CNOE/cnoe.png diff --git a/content/en/docs-old/v1/concepts/5_platforms/CNOE/local-argocd.png b/content/en/docs/concepts/5_platforms/CNOE/local-argocd.png similarity index 100% rename from content/en/docs-old/v1/concepts/5_platforms/CNOE/local-argocd.png rename to content/en/docs/concepts/5_platforms/CNOE/local-argocd.png diff --git a/content/en/docs-old/v1/concepts/5_platforms/CNOE/local-backstage.png b/content/en/docs/concepts/5_platforms/CNOE/local-backstage.png similarity index 100% rename from content/en/docs-old/v1/concepts/5_platforms/CNOE/local-backstage.png rename to content/en/docs/concepts/5_platforms/CNOE/local-backstage.png diff --git a/content/en/docs/concepts/5_platforms/Humanitec/_index.md b/content/en/docs/concepts/5_platforms/Humanitec/_index.md new file mode 100644 index 0000000..21c9e69 --- /dev/null +++ b/content/en/docs/concepts/5_platforms/Humanitec/_index.md @@ -0,0 +1,7 @@ ++++ +title = "Humanitec" +weight = 4 ++++ + + +tbd \ No newline at end of file diff --git a/content/en/docs-old/v1/concepts/5_platforms/_index.md b/content/en/docs/concepts/5_platforms/_index.md similarity index 100% rename from content/en/docs-old/v1/concepts/5_platforms/_index.md rename to content/en/docs/concepts/5_platforms/_index.md diff --git a/content/en/docs/concepts/_index.md b/content/en/docs/concepts/_index.md new file mode 100644 index 0000000..9d9620d --- /dev/null +++ b/content/en/docs/concepts/_index.md @@ -0,0 +1,7 @@ +--- +title: Concepts +weight: 1 +description: The underlying platfroming concepts of the EDF solution, i.e. the problem domain +--- + + diff --git a/content/en/docs/edgeconnect/_index.md b/content/en/docs/edgeconnect/_index.md deleted file mode 100644 index 4c419d3..0000000 --- a/content/en/docs/edgeconnect/_index.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: EdgeConnect -linkTitle: EdgeConnect Cloud -weight: 20 -description: > - Sovereign edge cloud for running applications ---- - -## Overview - -EdgeConnect is a custom cloud provided by the project as a whole. It has several goals, including retaining sovereign control over cloud compute resources, and supporting sustainability-aware infrastructure choices. - -While EdgeConnect is managed outwith our Edge Developer Platform, we have produced a number of tools to facilitate its use and broaden its applicability. These are an [SDK](/docs/edgeconnect/edgeconnect-sdk/), command-line [client](/docs/edgeconnect/edgeconnect-client/), bespoke [provider](/docs/edgeconnect/terraform-provider/) for [Terraform](https://developer.hashicorp.com/terraform), and tailor-made [Forgejo Actions](/docs/edgeconnect/edgeconnect-actions/). - -{{< likec4-view view="edgeconnect-context" project="architecture" title="EdgeConnect Context View: Users, Tooling and Control Plane" >}} - -The diagram summarizes how EdgeConnect is typically consumed and operated. Developers and automation do not interact with edge clusters directly; instead they use stable entry points (CLI, SDK, Terraform) that talk to the EdgeConnect API. - -EdgeConnect itself is shown as a single cloud boundary that contains the control plane (API + controllers) and the managed resource model (e.g., App, AppInstance). Controllers continuously reconcile the desired state expressed via the API and drive deployments into the runtime. - -EDP appears here as an external consumer: it can automate provisioning and deployment workflows (for example via Terraform) while EdgeConnect remains a separately managed cloud. This separation clarifies responsibilities: EDP orchestrates delivery processes, EdgeConnect provides the target runtime and lifecycle management. - -## Key Features - -* Managed by the broader project, not specifically by EDP -* Focus on sovereignty and sustainability -* Utilities such as [CLI](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/) encourage widespread platform use -* [EDP](/docs/edp/) products such as [Forgejo](/docs/edp/forgejo/) are hosted on [OTC](/docs/edp/deployment/otc/) rather than EdgeConnect - -## Purpose in EDP - -EdgeConnect is documented here because it is a key deployment target and integration point for the broader platform. Even though EdgeConnect is operated separately from EDP (and core EDP services are hosted on OTC), EDP tooling and automation frequently needs to provision or deploy workloads into EdgeConnect in a consistent, repeatable way. - -Working with EdgeConnect also helps ensure that our developer workflows and platform components remain portable and “cloud-ready” beyond a single environment. By integrating with a sovereign system and making sustainability-aware choices visible in practice, we align platform engineering with the project’s wider goals and enable closer collaboration with the teams operating the EdgeConnect cloud. - -### Access - -* [Gardener console access](https://gardener.apps.mg3.mdb.osc.live/namespace/garden-platform/shoots) - - Choose `Log in with mg3` then `platform` before entering credentials set up by the Platform Team. -* [Edge cluster](https://hub.apps.edge.platform.mg3.mdb.osc.live/) -* [Orca cluster](https://hub.apps.orca.platform.mg3.mdb.osc.live/) - - -### Notes - -Documentation for EdgeConnect is provided using other systems, including Confluence. \ No newline at end of file diff --git a/content/en/docs/edgeconnect/edgeconnect-actions.md b/content/en/docs/edgeconnect/edgeconnect-actions.md deleted file mode 100644 index 31712f5..0000000 --- a/content/en/docs/edgeconnect/edgeconnect-actions.md +++ /dev/null @@ -1,286 +0,0 @@ ---- -title: Forgejo Actions -linkTitle: Forgejo Actions -weight: 40 -description: > - CI/CD actions for automated EdgeConnect deployment and deletion ---- - -## Overview - -The EdgeConnect Actions are custom composite actions for use in [Forgejo](/docs/edp/forgejo/actions/)/[GitHub Actions](https://forgejo.org/docs/latest/user/actions/github-actions/) that automate EdgeConnect application deployments in CI/CD pipelines. They wrap the [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) to provide a simple, declarative way to deploy and delete applications without manual CLI installation or configuration. - -Two actions are available: -- **edge-connect-deploy-action**: Deploys applications using declarative YAML configuration -- **edge-connect-delete-action**: Deletes applications and their instances from EdgeConnect - -## Key Features - -* **Zero installation**: Actions automatically download and use the EdgeConnect Client -* **Declarative workflow**: Deploy applications using YAML configuration files -* **CI/CD optimized**: Designed for automated pipelines with auto-approve and dry-run support -* **Version pinning**: Specify exact EdgeConnect Client version for reproducible builds -* **Secrets management**: Credentials passed securely through workflow secrets -* **Compatible with GitHub and Forgejo Actions**: Works in both ecosystems - -## Purpose in EDP - -CI/CD automation is essential for modern development workflows. While the [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) provides powerful deployment capabilities, integrating it into CI/CD pipelines requires downloading binaries, managing credentials, and configuring authentication for each workflow run. - -These actions eliminate that boilerplate by: -- Automatically fetching the correct Client version -- Handling authentication setup -- Providing a clean, reusable action interface -- Reducing pipeline configuration to a few lines - -This enables teams to focus on application configuration rather than pipeline plumbing, while maintaining the full power of declarative EdgeConnect deployments. - -The actions complement the [Terraform provider](/docs/edgeconnect/terraform-provider/) by offering a simpler option for teams already using Forgejo/GitHub Actions who want deployment automation without adopting Terraform. - -## Repository - -**Deploy Action**: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action - -**Delete Action**: https://edp.buildth.ing/DevFW-CICD/edge-connect-delete-action - -**Demo Repository**: https://edp.buildth.ing/DevFW-CICD/edgeconnect-action-demo - -## Getting Started - -### Prerequisites - -* Forgejo or GitHub repository with Actions enabled -* EdgeConnect access credentials (username and password) -* `EdgeConnectConfig.yaml` file defining your application (see [YAML Configuration Format](/docs/edgeconnect/edgeconnect-client/#yaml-configuration-format)) -* For Kubernetes apps: K8s manifest file referenced in the config -* Repository secrets configured with EdgeConnect credentials - -### Quick Start - -1. Create an `EdgeConnectConfig.yaml` file in your repository defining your application (see [Client documentation](/docs/edgeconnect/edgeconnect-client/#yaml-configuration-format)) -2. Add EdgeConnect credentials as repository secrets: - - `EDGEXR_PLATFORM_USERNAME` - - `EDGEXR_PLATFORM_PASSWORD` -3. Create a workflow file (e.g., `.forgejo/workflows/deploy.yaml`) using the action -4. Commit and push to trigger the workflow - -### Verification - -After the workflow runs successfully: -- Check the workflow logs for deployment status -- Verify resources appear in the [EdgeConnect console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) -- Test application endpoints are accessible - -## Usage Examples - -### Minimal Deploy Action - -```yaml -- name: Deploy to EdgeConnect - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action@main - with: - configFile: ./EdgeConnectConfig.yaml - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} -``` - -### Minimal Delete Action - -```yaml -- name: Delete from EdgeConnect - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-delete-action@main - with: - configFile: ./EdgeConnectConfig.yaml - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} -``` - -### Complete Workflow Example - -A typical deployment workflow that builds, tags, and deploys: - -```yaml -name: deploy - -on: - workflow_run: - workflows: [build] - types: - - completed - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Update manifest with image tag - run: | - sha="${{ github.sha }}" - shortSha="${sha:0:7}" - echo "Setting image version to: registry.example.com/myapp:${shortSha}" - sed -i "s@###IMAGETAG###@registry.example.com/myapp:${shortSha}@g" ./k8s-deployment.yaml - - - name: Deploy to EdgeConnect - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action@main - with: - configFile: ./EdgeConnectConfig.yaml - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} -``` - -### Dry-Run Mode - -Preview changes without applying them: - -```yaml -- name: Preview deployment - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action@main - with: - configFile: ./EdgeConnectConfig.yaml - dryRun: 'true' - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} -``` - -### Version Pinning - -Use a specific EdgeConnect Client version: - -```yaml -- name: Deploy with specific version - uses: https://edp.buildth.ing/DevFW-CICD/edge-connect-deploy-action@main - with: - configFile: ./EdgeConnectConfig.yaml - version: 'v2.0.1' - baseUrl: https://hub.apps.edge.platform.mg3.mdb.osc.live - username: ${{ secrets.EDGEXR_PLATFORM_USERNAME }} - password: ${{ secrets.EDGEXR_PLATFORM_PASSWORD }} -``` - -## Integration Points - -* **EdgeConnect Client**: Actions download and execute the Client CLI tool -* **EdgeConnect SDK**: Client uses the SDK for all API interactions -* **Forgejo/GitHub Actions**: Native integration with both action ecosystems -* **EdgeConnect API**: All operations communicate with EdgeConnect platform APIs -* **Container Registries**: Works with any registry for application images - -## Configuration - -### Action Inputs - -Both deploy and delete actions accept the same inputs: - -| Input | Required | Default | Description | -|-------|----------|---------|-------------| -| `configFile` | Yes | - | Path to EdgeConnectConfig.yaml file | -| `baseUrl` | Yes | - | EdgeConnect API base URL (e.g., https://hub.apps.edge.platform.mg3.mdb.osc.live) | -| `username` | Yes | - | EdgeConnect username for authentication | -| `password` | Yes | - | EdgeConnect password for authentication | -| `dryRun` | No | `false` | Preview changes without applying (set to `'true'` to enable) | -| `version` | No | `v2.0.1` | EdgeConnect Client version to download and use | - -### YAML Configuration File - -The `configFile` parameter points to an `EdgeConnectConfig.yaml` that defines your application and deployment targets. See the [EdgeConnect Client YAML Configuration Format](/docs/edgeconnect/edgeconnect-client/#yaml-configuration-format) for the complete specification. - -Example structure: - -```yaml -kind: edgeconnect-deployment -metadata: - name: "my-app" - appVersion: "1.0.0" - organization: "myorg" -spec: - k8sApp: - manifestFile: "./k8s-deployment.yaml" - infraTemplate: - - region: "EU" - cloudletOrg: "TelekomOp" - cloudletName: "Munich" - flavorName: "EU.small" -``` - -### Secrets Management - -Configure repository secrets in Forgejo/GitHub: - -1. Navigate to repository Settings → Secrets -2. Add secrets: - - Name: `EDGEXR_PLATFORM_USERNAME`, Value: your EdgeConnect username - - Name: `EDGEXR_PLATFORM_PASSWORD`, Value: your EdgeConnect password -3. Reference in workflows using `${{ secrets.SECRET_NAME }}` - -## Troubleshooting - -### Action Fails with "Failed to download edge-connect-client" - -**Problem**: Action cannot download the Client binary - -**Solution**: -- Verify the `version` parameter matches an actual release version - - Ensure the release exists at https://edp.buildth.ing/DevFW-CICD/edge-connect-client/releases -- Check network connectivity from the runner -- Try using default version by omitting the `version` parameter - -### Authentication Errors - -**Problem**: "authentication failed" or "unauthorized" errors - -**Solution**: -- Verify secrets are correctly configured in repository settings -- Check secret names match exactly (case-sensitive) -- Ensure `baseUrl` is correct for your target environment (Edge vs Orca) -- Confirm credentials work by testing with the [client](../edgeconnect-client/) - -### "Configuration validation failed" - -**Problem**: YAML configuration file validation errors - -**Solution**: -- Verify `configFile` path is correct relative to repository root -- Check YAML syntax is valid (use a YAML validator) -- Ensure all required fields are present (see [Client docs](/docs/edgeconnect/edgeconnect-client/#yaml-configuration-format)) -- Verify manifest file paths in the config exist and are correct - -### Resources Not Appearing in Console - -**Problem**: Action succeeds but resources don't appear in EdgeConnect console - -**Solution**: -- Verify you're checking the correct environment (Edge vs Orca) -- Ensure `baseUrl` parameter matches the console you're viewing -- Check organization name in config matches your console access -- Review action logs for any warnings or skipped operations - -### Deployment Succeeds but App Doesn't Work - -**Problem**: Deployment completes but application is not functioning - -**Solution**: -- Check application logs in the EdgeConnect console -- Verify image tags are correct (common issue with placeholder replacement) -- Ensure manifest files reference correct image registry and paths -- Check network configuration allows required outbound connections -- Verify cloudlet has sufficient resources for the specified flavor - -## Status - -**Maturity**: Production - -## Additional Resources - -* [EdgeConnect Client Documentation](/docs/edgeconnect/edgeconnect-client/) -* [EdgeConnect SDK Documentation](/docs/edgeconnect/edgeconnect-sdk/) -* [Terraform Provider Documentation](/docs/edgeconnect/terraform-provider/) -* [EdgeConnect Console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) -* [Demo Repository](https://edp.buildth.ing/DevFW-CICD/edgeconnect-action-demo) -* [Forgejo Actions Documentation](https://forgejo.org/docs/latest/user/actions/) diff --git a/content/en/docs/edgeconnect/edgeconnect-client.md b/content/en/docs/edgeconnect/edgeconnect-client.md deleted file mode 100644 index 5e1aeb1..0000000 --- a/content/en/docs/edgeconnect/edgeconnect-client.md +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: EdgeConnect Client -linkTitle: Client -weight: 20 -description: > - Client software for establishing EdgeConnect connections ---- - -## Overview - -The EdgeConnect Client is a command-line tool for managing EdgeConnect applications and instances. It is built using our Golang [SDK](/docs/edgeconnect/edgeconnect-sdk/), and supports functionality to create, destroy, describe and list various resources. - -The tool provides both imperative commands (for direct resource management) and declarative workflows (using YAML configuration files) to deploy applications across multiple edge cloudlets. It supports different EdgeConnect deployment environments through an API version selector. - -## Key Features - -* **Dual workflow support**: Imperative commands for direct operations, declarative YAML for infrastructure-as-code -* **Multi-cloudlet deployment**: Deploy applications to multiple edge locations from a single configuration -* **Deployment planning**: Preview and approve changes before applying them (dry-run mode) -* **Environment compatibility**: Works with different EdgeConnect deployment environments (configured via `api-version`) -* **CI/CD ready**: Designed for automated deployments with auto-approve and exit codes - -## Purpose in EDP - -No system can be considered useful unless it is actually, in practice, used. While the Edge Connect [console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) and [API](https://swagger.edge.platform.mg3.mdb.osc.live/) are essential tools to allow the platform to be used by developers, there are numerous use cases for interaction that is automated but simpler to use than an API. - -The EdgeConnect Client bridges the gap between manual console operations and direct API integration, enabling automated deployments in CI/CD pipelines, infrastructure-as-code workflows, and scripted operations while maintaining simplicity and usability. - -## Repository - -**Code**: https://edp.buildth.ing/DevFW-CICD/edge-connect-client - -**Releases**: https://edp.buildth.ing/DevFW-CICD/edge-connect-client/releases - -## Getting Started - -### Prerequisites - -* Access credentials for the EdgeConnect platform (username and password) -* Knowledge of your target deployment environment (determines `api-version` setting) -* For Kubernetes deployments: K8s manifest files -* For Docker deployments: Docker image reference - -### Quick Start - -1. Download the Edge Connect Client binary from the Forgejo [releases page](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/releases) for your platform (Linux, macOS, or Windows) -2. Extract and move to your PATH: `tar -xzf edge-connect-client_*.tar.gz && sudo mv edge-connect /usr/local/bin/` -3. Configure authentication using environment variables or a config file (see Configuration section) -4. Verify installation: `edge-connect --help` - -### Verification - -Run `edge-connect app list --org --region ` to verify you can authenticate and communicate with the EdgeConnect API. - -## Usage Examples - -### Declarative Deployment (Recommended) - -Create an `EdgeConnectConfig.yaml` file defining your application and deployment targets, then apply it: - -```bash -edge-connect apply -f EdgeConnectConfig.yaml -``` - -Use `--dry-run` to preview changes without applying them, and `--auto-approve` for automated CI/CD workflows. - -### Imperative Commands - -Direct resource management using CLI commands: - -```bash -# Create an application -edge-connect app create --org myorg --name myapp --version 1.0.0 --region EU - -# Create an instance on a specific cloudlet -edge-connect instance create --org myorg --name myinstance \ - --app myapp --version 1.0.0 --region EU \ - --cloudlet Munich --cloudlet-org TelekomOp --flavor EU.small - -# List resources -edge-connect app list --org myorg --region EU -edge-connect instance list --org myorg --region EU - -# Delete resources -edge-connect instance delete --org myorg --name myinstance --region EU \ - --cloudlet Munich --cloudlet-org TelekomOp -edge-connect app delete --org myorg --name myapp --version 1.0.0 --region EU -``` - -## Integration Points - -* **EdgeConnect API**: Communicates with EdgeConnect platform APIs for all resource operations -* **EdgeConnect SDK**: Built on top of the Golang SDK, sharing authentication and client implementation -* **CI/CD Pipelines**: Designed for integration with GitLab CI, GitHub Actions, and other automation tools -* **Infrastructure-as-Code**: YAML configuration files enable GitOps workflows - -## Configuration - -### Global Settings - -The client can be configured via config file, environment variables, or command-line flags (in order of precedence: flags > env vars > config file). - -**Config File** (`~/.edge-connect.yaml` or use `--config` flag): - -```yaml -base_url: "https://hub.apps.edge.platform.mg3.mdb.osc.live" -username: "your-username@example.com" -password: "your-password" -api_version: "v2" # v1 or v2 - identifies deployment environment -``` - -**Environment Variables**: - -- `EDGE_CONNECT_BASE_URL`: API base URL -- `EDGE_CONNECT_USERNAME`: Authentication username -- `EDGE_CONNECT_PASSWORD`: Authentication password -- `EDGE_CONNECT_API_VERSION`: API version selector (v1 or v2, default: v2) - -**Global Flags** (available on all commands): - -- `--base-url`: API base URL -- `--username`: Authentication username -- `--password`: Authentication password -- `--api-version`: API version selector (v1 or v2) - specifies which deployment environment to target -- `--config`: Path to config file -- `--debug`: Enable debug logging - -**Note on API Versions**: The `api-version` setting (v1 or v2) is an internal label used to distinguish between different EdgeConnect deployment environments, not an official API version designation from the platform. - -### Commands - -**App Management** (`edge-connect app `): - -CLI command `app` corresponds to **App** in the platform console. - -- `create`: Create app (flags: `--org`, `--name`, `--version`, `--region`) -- `show`: Show app details (flags: same as create) -- `list`: List apps (flags: `--org`, `--region`, optional: `--name`, `--version`) -- `delete`: Delete app (flags: `--org`, `--name`, `--version`, `--region`) - -**App Instance Management** (`edge-connect instance `): - -CLI command `instance` corresponds to **App Instance** in the platform console. - -- `create`: Create app instance (flags: `--org`, `--name`, `--app`, `--version`, `--region`, `--cloudlet`, `--cloudlet-org`, `--flavor`) -- `show`: Show app instance details (flags: `--org`, `--name`, `--cloudlet`, `--cloudlet-org`, `--region`, `--app-id`) -- `list`: List app instances (flags: same as show, all optional) -- `delete`: Delete app instance (flags: `--org`, `--name`, `--cloudlet`, `--cloudlet-org`, `--region`) - -**Declarative Operations**: - -- `apply`: Deploy from YAML (flags: `-f `, `--dry-run`, `--auto-approve`) -- `delete`: Delete from YAML (flags: `-f `, `--dry-run`, `--auto-approve`) - -### YAML Configuration Format - -The `EdgeConnectConfig.yaml` file defines apps and their deployment targets: - -```yaml -kind: edgeconnect-deployment -metadata: - name: "my-app" # App name (required) - appVersion: "1.0.0" # App version (required) - organization: "myorg" # Organization (required) - -spec: - # Choose ONE: k8sApp OR dockerApp - k8sApp: - manifestFile: "./k8s-deployment.yaml" # Path to K8s manifest - - # OR dockerApp: - # image: "registry.example.com/myimage:tag" - # manifestFile: "./docker-compose.yaml" # Optional - - # Deployment targets (at least one required) - infraTemplate: - - region: "EU" # Region (required) - cloudletOrg: "TelekomOp" # Cloudlet provider (required) - cloudletName: "Munich" # Cloudlet name (required) - flavorName: "EU.small" # Instance size (required) - - region: "US" - cloudletOrg: "TelekomOp" - cloudletName: "gardener-shepherd-test" - flavorName: "default" - - # Optional network configuration - network: - outboundConnections: - - protocol: "tcp" # tcp, udp, or icmp - portRangeMin: 80 - portRangeMax: 80 - remoteCIDR: "0.0.0.0/0" - - protocol: "tcp" - portRangeMin: 443 - portRangeMax: 443 - remoteCIDR: "0.0.0.0/0" - - # Optional deployment strategy (default: recreate) - deploymentStrategy: "recreate" # recreate, blue-green, or rolling -``` - -**Key Points**: -- Manifest file paths are relative to the config file location -- Multiple `infraTemplate` entries deploy to multiple cloudlets simultaneously -- Network configuration is optional; outbound connections default to platform settings -- Deployment strategy currently only supports "recreate" (others planned) - -## Troubleshooting - -### Authentication Failures - -**Problem**: Errors like "authentication failed" or "unauthorized" - -**Solution**: -- Verify credentials are correct in config file or environment variables -- Ensure `base_url` includes the scheme (https://) and has no trailing path -- Check that you're connecting to the correct cloud instance (Edge or Orca) -- Ensure the correct `api-version` is set for your deployment environment - -### "Configuration validation failed" Errors - -**Problem**: YAML configuration file validation errors - -**Solution**: -- Check that all required fields are present (name, appVersion, organization) -- Ensure you have exactly one of `k8sApp` or `dockerApp` (not both, not neither) -- Verify manifest file paths exist relative to the config file location -- Check for leading/trailing whitespace in string values -- Ensure at least one `infraTemplate` entry is defined - -### Wrong API Version or Cloud Instance - -**Problem**: Commands work but resources don't appear in the console, or vice versa - -**Solution**: Verify both the `base_url` and `api-version` match your target environment. There are two cloud instances (Edge and Orca) with different URLs and API versions. Check with your platform administrator for the correct configuration. - -## Status - -**Maturity**: Production - -## Additional Resources - -* [EdgeConnect SDK Documentation](/docs/edgeconnect/edgeconnect-sdk/) -* **Edge Cloud**: [Console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) | [API Docs](https://swagger.edge.platform.mg3.mdb.osc.live/) -* **Orca Cloud**: [Console](https://hub.apps.orca.platform.mg3.mdb.osc.live/) | [API Docs](https://swagger.orca.platform.mg3.mdb.osc.live/) -* [Source Code Repository](https://edp.buildth.ing/DevFW-CICD/edge-connect-client) diff --git a/content/en/docs/edgeconnect/edgeconnect-sdk.md b/content/en/docs/edgeconnect/edgeconnect-sdk.md deleted file mode 100644 index 7b8046b..0000000 --- a/content/en/docs/edgeconnect/edgeconnect-sdk.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: EdgeConnect SDK -linkTitle: SDK -weight: 10 -description: > - Software Development Kit for interacting with EdgeConnect ---- - -## Overview - -The EdgeConnect SDK is a Go library which provides a simple method for interacting with Edge Connect within programs. It is designed to be used by other tools, such as the [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) or [Terraform provider](/docs/edgeconnect/terraform-provider/), - -## Key Features - -* Allows querying endpoints without the need to manage API calls and responses directly -* Wraps the existing [Edge Connect API](https://swagger.edge.platform.mg3.mdb.osc.live/) -* Supports multiple unnumbered versions of the API - -## Purpose in EDP - -No system can be considered useful unless it is actually, in practice, used. While the Edge Connect [console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) and [API](https://swagger.edge.platform.mg3.mdb.osc.live/) are essential tools to allow the platform to be used by developers, there are numerous use cases for interaction that is automated but simpler to use than an API. These include a [command-line tool](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/). - -While each such tool could simply independently wrap existing endpoints, this is generally too low-level for sustainable development. It would involve extensive boilerplate code in each such package, plus small changes to API endpoints or error handling may require constant rework. - -To avoid this, the Edge Connect SDK aims to provide a common library for interacting with EdgeConnect, allowing the abstraction of HTTP requests and authentication procedures while nonetheless allowing access directly to the endpoints available. - -## Repository - -**Code**: https://edp.buildth.ing/DevFW-CICD/edge-connect-client - -**Documentation**: https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk - -## Getting Started - -### Prerequisites - -* Golang -* Edge Connect credentials - -### Quick Start - -[Step-by-step guide to get started with this component] - -1. Simply [import](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#installation) the SDK to your project -2. [Initialise and configure](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#configuration-options) a client with your credentials -3. [Build](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#examples) your code around the existing endpoints - -### Verification - -[How to verify the component is working correctly] - -## Usage Examples - -See [README](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#examples) for simple code examples, or repositories for [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/) for full projects relying on it. - -## Troubleshooting - -### Varying code versions - -**Problem**: While the Edge Connect API does not (at time of writing) have different semantic versions, it does have different iterations which function differently. The SDK provides two different libraries, labelled [v1](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk/edgeconnect) and [v2](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk/edgeconnect/v2) and referring to API definitions similarly stored as [v1](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/api/swagger_v1.json) and [v2](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/api/swagger_v2.json). - -**Solution**: If you receive errors when using the SDK, consider changing the version you import: -```go -import v1 "edp.buildth.ing/DevFW-CICD/edge-connect-client/sdk/edgeconnect" -import v2 "edp.buildth.ing/DevFW-CICD/edge-connect-client/v2/sdk/edgeconnect/v2" -``` - -## Status - -**Maturity**: Beta diff --git a/content/en/docs/edgeconnect/terraform-provider.md b/content/en/docs/edgeconnect/terraform-provider.md deleted file mode 100644 index 5dbbd4c..0000000 --- a/content/en/docs/edgeconnect/terraform-provider.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Terraform provider for Edge cloud -linkTitle: Terraform provider -weight: 30 -description: Custom Terraform provider for orchestrating Edge deployments ---- - -## Overview - -This work-in-progress Terraform provider for Edge cloud allows orchestration of selected resources using flexible, concise [HCL](https://developer.hashicorp.com/terraform/language). This allows deployment to Edge Cloud through a familiar format, abstracting away specific endpoints and authentication elements, and allowing seamless combination of Edge resources with others: on OTC, other clouds, or local utilities. - -## Key Features - -* Interact with Apps and AppInstances using widely-used Terraform framework -* Using Terraform's systems, provide minimal configuration: just an endpoint and credentials, then no need to deal with headers or other API boilerplate -* Also works with community-driven OpenTofu -* Provider currently under development: more features can be added when requested. - -## Purpose in EDP - -Interacting with infrastructure is a complex process, with many parameters and components working together. Doing so by clicking buttons in a web UI ("ClickOps") is extremely difficult to scale, rapidly becoming highly confusing. - -Instead, automations are possible through APIs and SDKs. Working directly with an API (e.g. via `curl`) inevitably tends to involve large amounts of boilerplate code to manage authentication, rarely-changing configuration such as region/tenant selection, and more. When one resource (say, a web server) must interact with another (say, a DNS record), the cross-references further increase this complexity. - -An SDK mitigates this complexity when coding software, by providing library functions which interact with the API in abstracted ways which require a minimum of necessary information. Our SDK for Edge Connect is described in a [separate section](/docs/edgeconnect/edgeconnect-sdk/). - -However, when simply wanting to deploy infrastructure in isolation - say, updating the status of a Kubernetes or App resource after a change in configuration - an SDK is still an overly complicated tool. - -This is where [Terraform](https://developer.hashicorp.com/terraform) or its community-led alternative [OpenTofu](https://opentofu.org/), come in. They provide a simple language for defining resources, with a level of abstraction that retains the power and flexibility of the API while greatly simplifying definitions and execution. - -Terraform is widely used for major infrastructure systems such as [AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs), [Azure](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) or general [Kubernetes](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs). However, it is highly flexible, supporting a range of resource types which are not inherently tied to infrastructure: [file](https://registry.terraform.io/search/providers?q=file) manipulation; package setup through [Ansible](https://registry.terraform.io/providers/ansible/aap/1.4.0); secret generation in [Vault](https://registry.terraform.io/providers/hashicorp/vault/latest/docs). - -As a result of this breadth of functionality and cross-compatibility, Terraform support is considered by some as necessary for a platform to be used 'seriously' - that is, at scale, or in major workloads. Our provider thus unlocks broad market relevance for the platform in a way few other tools or features could. - -## Repository - -**Code**: https://edp.buildth.ing/DevFW-CICD/terraform-provider-edge-connect - -**Documentation**: Provider is intended to ultimately wrap each resource-based endpoint of the [Edge API](https://swagger.edge.platform.mg3.mdb.osc.live/), but currently supports a limited [subset of resources](https://edp.buildth.ing/DevFW-CICD/terraform-provider-edge-connect#resources). - -## Getting Started - -### Prerequisites - -* [Terraform](https://developer.hashicorp.com/terraform) or [OpenTofu](https://opentofu.org/) -* Edge access and credentials - -### Quick Start - -1. Configure Terraform to use the provider by [including it](https://edp.buildth.ing/DevFW-CICD/terraform-provider-edge-connect#using-terraform-registry-recommended) in `provider.tf` -1. In the same directory, create terraform resources in `.tf` files according to the [spec](https://edp.buildth.ing/DevFW-CICD/terraform-provider-edge-connect#resources) -1. [Set up credentials](https://edp.buildth.ing/DevFW-CICD/terraform-provider-edge-connect/src/branch/main/README.md#provider-configuration) using environment variables or a `provider` block -1. Run `terraform init` in the directory -1. Execute `terraform plan` and/or `terraform apply` to deploy your application -1. `terraform destroy` can be used to remove all deployed resources - -### Verification - -If `terraform apply` completes successfully (without errors), the provider is working correctly. You can also manually validate in the Edge UI that your resources have been deployed/reconfigured as Terraform indicated. - - -## Status - -**Maturity**: Experimental - -## Additional Resources - -* [Terralist](https://www.terralist.io/) -* [Terraform](https://developer.hashicorp.com/terraform) -* [OpenTofu](https://opentofu.org/) -* [Edge Connect API](https://swagger.edge.platform.mg3.mdb.osc.live) - -## Integration Points - -* **Edge Connect SDK**: The provider uses the [Edge Connect SDK](http://localhost:1313/docs/components/deployments/edgeconnect/edgeconnect-sdk/) under the hood. -* **Terralist**: The provider is published using a [custom instance](https://terralist.garm-provider-test.t09.de/) of [Terralist](https://www.terralist.io/). This [can only](https://edp.buildth.ing/DevFW-CICD/stacks/src/commit/5b438097bbd027f0025d6198c34c22f856392a03/template/stacks/terralist/terralist/values.yaml#L9-L38) be written to with a login via [Forgejo](https://edp.buildth.ing/), but can be read publicly. - -### Component Architecture (C4) - - diff --git a/content/en/docs/edp/_index.md b/content/en/docs/edp/_index.md deleted file mode 100644 index d0d5108..0000000 --- a/content/en/docs/edp/_index.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Edge Developer Platform -linkTitle: Edge Developer Platform -weight: 10 -description: > - A platform to support developers working in the Edge, based around Forgejo ---- - -## Purpose - -The Edge Developer Platform (EDP) is a comprehensive DevOps platform designed to enable developers to build, deploy, and operate cloud-native applications at the edge. It provides an integrated suite of tools and services covering the entire software development lifecycle. - -{{< likec4-view view="application-transition" project="architecture" title="EDP Context View: Edge Developer Platform Components and User Interaction" >}} - -The magenta **EDP** represents the developer platform: a shared, productized layer that enables modern DevOps by standardizing how applications are described, built, deployed, and observed. In the **inner loop**, developers iterate locally (fast feedback: code → run → test). EDP then connects that work to an **outer loop** where additional roles (review, test, operations, audit/compliance) contribute feedback and controls for production readiness. - -In this modern DevOps setup, EDP acts as the hub: it synchronizes with local development and **deploys applications to target clouds** (for example, an EdgeConnect cloud), while providing the operational capabilities needed to run them safely. Agentic AI can support both loops—for example by assisting developers with implementation and testing in the inner loop, and by automating reviews, policy checks, release notes, and deployment verification (including drift detection and remediation) in the outer loop. - - -## Product Structure - -EDP consists of multiple integrated components organized in layers: - -### Core Platform Services - -The foundation layer provides essential platform capabilities including source code management, CI/CD, and container orchestration. - -For documentation, see: [Basic Platform Concepts](./deployment/basics/) and [Forgejo](./forgejo/) - -### Developer Experience - -Tools and services that developers interact with directly to build, test, and deploy applications. - -For documentation, see: [Forgejo](./forgejo/) and [Deployment](./deployment/) - -### Infrastructure & Operations - -Infrastructure automation, observability, and operational tooling for platform management. - -For documentation, see: [Operations](./operations/) and [Infrastructure as Code](./deployment/infrastructure/) - -## Getting Started - -EDP is available at https://edp.buildth.ing. - -EDP includes a Forgejo instance that hosts both public and private repositories containing all EDP components. - -To request access and get onboarded, start with the welcome repository: - -- https://edp.buildth.ing/edp-team/welcome - -Once you have access to the repositories, you can explore the EDP documentation according to the product structure above. diff --git a/content/en/docs/edp/deployment/_index.md b/content/en/docs/edp/deployment/_index.md deleted file mode 100644 index 0fee1b0..0000000 --- a/content/en/docs/edp/deployment/_index.md +++ /dev/null @@ -1,509 +0,0 @@ ---- -title: Deployment -linkTitle: Deployment -weight: 10 -description: > - Platform-level component provisioning via Stacks - Orchestrating the platform infrastructure itself ---- - -## Overview - -Platform Orchestration refers to the automation and management of the platform infrastructure itself. This includes the provisioning, configuration, and lifecycle management of all components that make up the Internal Developer Platform (IDP). - -In the context of IPCEI-CIS, Platform Orchestration means: - -- **Platform Bootstrap**: Initial setup of Kubernetes clusters and core services -- **Platform Services Management**: Deployment and management of ArgoCD, Forgejo, Keycloak, etc. -- **Infrastructure-as-Code**: Declarative management using Terraform and GitOps -- **Multi-Cluster Orchestration**: Coordination across different Kubernetes clusters -- **Platform Stacks**: Reusable bundles of platform components (CNOE concept) - -### Target Audience - -Platform Orchestration is primarily aimed at: - -- **Platform Engineering Teams**: Teams that build and operate the IDP -- **Infrastructure Architects**: Those responsible for the platform architecture -- **SRE Teams**: Teams responsible for reliability and operations - -## Key Features - -### Declarative Platform Definition - -The entire platform is defined declaratively as code: - -- **GitOps-First**: Everything is versioned in Git and traceable -- **Reproducibility**: The platform can be rebuilt at any time -- **Environment Parity**: Consistency between Dev, Test, and Production -- **Auditability**: Complete history of all changes - -### Self-Bootstrapping - -The platform can bootstrap itself: - -1. **Initial Bootstrap**: Minimal tool (like `idpbuilder`) starts the platform -2. **Self-Management**: After bootstrap, ArgoCD takes over management -3. **Continuous Reconciliation**: Platform is continuously reconciled with Git state -4. **Self-Healing**: Automatic recovery on deviations - -### Stack-based Composition - -Platform components are organized as reusable stacks (CNOE concept): - -- **Modularity**: Components can be updated individually -- **Reusability**: Stacks can be used across different environments -- **Composability**: Compose complex platforms from simple building blocks -- **Versioning**: Stacks can be versioned and tested - -**In IPCEI-CIS**: The stacks concept from CNOE is the core organizational principle for platform components. - -### Multi-Cluster Support - -Platform Orchestration supports different cluster topologies: - -- **Control Plane + Worker Clusters**: Centralized control, distributed workloads -- **Hub-and-Spoke**: One management cluster manages multiple target clusters -- **Federation**: Coordination across multiple independent clusters - -## Purpose in EDP - -Platform Orchestration is the foundation of the IPCEI-CIS Edge Developer Platform. It enables: - -### Foundation for Developer Self-Service - -Platform Orchestration ensures all services are available that developers need for self-service: - -- **GitOps Engine** (ArgoCD) for continuous deployment -- **Source Control** (Forgejo) for code and configuration management -- **Identity Management** (Keycloak) for authentication and authorization -- **Observability** (Grafana, Prometheus) for monitoring and logging -- **CI/CD** (Forgejo Actions/Pipelines) for automated build and test - -### Consistency Across Environments - -Through declarative definition, consistency is guaranteed: - -- Development, test, and production environments are identically configured -- No "configuration drift" between environments -- Predictable behavior across all stages - -### Platform as Code - -The platform itself is treated like software: - -- **Version Control**: All changes are versioned in Git -- **Code Review**: Platform changes go through review processes -- **Testing**: Platform configurations can be tested -- **Rollback**: Easy rollback on problems - -### Reduced Operational Overhead - -Automation reduces manual effort: - -- No manual installation steps -- Automatic updates and patching -- Self-healing on failures -- Standardized deployment processes - -## Repository - -**CNOE Reference Implementation**: [cnoe-io/stacks](https://github.com/cnoe-io/stacks) - -**CNOE idpbuilder**: [cnoe-io/idpbuilder](https://github.com/cnoe-io/idpbuilder) - -**Documentation**: [CNOE.io Documentation](https://cnoe.io/docs/) - -## Getting Started - -### Prerequisites - -- **Docker**: For local Kubernetes clusters (Kind) -- **kubectl**: Kubernetes CLI tool -- **Git**: For repository management -- **idpbuilder**: CNOE bootstrap tool - -### Quick Start - -Platform Orchestration with CNOE Reference Implementation: - -```bash -# 1. Install idpbuilder -curl -fsSL https://cnoe.io/install.sh | bash - -# 2. Bootstrap platform -idpbuilder create \ - --use-path-routing \ - --package-dir https://github.com/cnoe-io/stacks//ref-implementation - -# 3. Wait for platform ready (ca. 10 minutes) -kubectl get applications -A -``` - -### Verification - -Verify the platform is running correctly: - -```bash -# Get platform secrets (credentials) -idpbuilder get secrets - -# Check all ArgoCD applications -kubectl get applications -n argocd - -# Expected: All applications "Synced" and "Healthy" -``` - -Access URLs (with path-routing): - -- **ArgoCD**: `https://cnoe.localtest.me:8443/argocd` -- **Forgejo**: `https://cnoe.localtest.me:8443/gitea` -- **Keycloak**: `https://cnoe.localtest.me:8443/keycloak` - -## Usage Examples - -### Use Case 1: Platform Bootstrap - -Initial bootstrapping of a new platform instance: - -```bash -idpbuilder create \ - --use-path-routing \ - --package-dir https://github.com/cnoe-io/stacks//ref-implementation \ - --log-level debug - -# Workflow: -# 1. Creates Kind cluster -# 2. Installs ingress-nginx -# 3. Clones and installs ArgoCD -# 4. Installs Forgejo -# 5. Waits for core services -# 6. Creates technical users -# 7. Configures Git repositories -# 8. Installs remaining stacks via ArgoCD -``` - -After approximately 10 minutes, the platform is fully deployed. - -### Use Case 2: Adding New Platform Components - -Add new platform components via ArgoCD: - -```bash -# Create ArgoCD Application for new component -cat < - -# 2. View sync status -argocd app sync --dry-run - -# 3. Force sync -argocd app sync --force - -# 4. Check for errors in ArgoCD logs -kubectl logs -n argocd deployment/argocd-application-controller -``` - -### Git Repository Connection Issues - -**Problem**: ArgoCD cannot access Git repository - -**Solution**: - -```bash -# 1. Verify repository configuration -argocd repo list - -# 2. Test connection -argocd repo get https://your-git-repo - -# 3. Check credentials -kubectl get secret -n argocd - -# 4. Re-add repository with correct credentials -argocd repo add https://your-git-repo \ - --username \ - --password -``` - -## Platform Orchestration Best Practices - -Based on experience and [CNCF Guidelines](https://tag-app-delivery.cncf.io/whitepapers/platforms/): - -1. **Start Simple**: Begin with the CNOE reference stack, extend gradually -2. **Automate Everything**: Manual platform changes are anti-pattern -3. **Monitor Continuously**: Use observability tools for platform health -4. **Document Well**: Platform documentation is essential for adoption -5. **Version Everything**: All platform components should be versioned -6. **Test Changes**: Platform updates should be tested in non-prod -7. **Plan for Disaster**: Backup and disaster recovery strategies are important -8. **Use Stacks**: Organize platform components as reusable stacks - -## Status - -**Maturity**: Production (for CNOE Reference Implementation) - -**Stability**: Stable - -**Support**: Community Support via CNOE Community - -## Additional Resources - -### CNOE Resources - -- [CNOE Official Website](https://cnoe.io/) -- [CNOE GitHub Organization](https://github.com/cnoe-io) -- [CNOE Reference Implementation](https://github.com/cnoe-io/stacks) -- [CNOE Community Slack](https://cloud-native.slack.com/archives/C05TN9WFN5S) - -### Platform Engineering - -- [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) -- [Platform Engineering Maturity Model](https://tag-app-delivery.cncf.io/whitepapers/platform-eng-maturity-model/) -- [Team Topologies](https://teamtopologies.com/) - Organizational patterns - -### GitOps - -- [GitOps Working Group](https://opengitops.dev/) -- [ArgoCD Best Practices](https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/) -- [GitOps Principles](https://opengitops.dev/) - -### CNOE Stacks - -- [Understanding CNOE Stacks](https://cnoe.io/docs/reference-implementation/stacks/) -- [Creating Custom Stacks](https://cnoe.io/docs/reference-implementation/customization/) diff --git a/content/en/docs/edp/deployment/basics/_index.md b/content/en/docs/edp/deployment/basics/_index.md deleted file mode 100644 index 075022d..0000000 --- a/content/en/docs/edp/deployment/basics/_index.md +++ /dev/null @@ -1,479 +0,0 @@ ---- -title: Basic Concepts -linkTitle: Basic Concepts -weight: 1 -description: > - Platform-level component provisioning via Stacks - Orchestrating the platform infrastructure itself ---- - -## Overview - -Platform Orchestration refers to the automation and management of the platform infrastructure itself. This includes the provisioning, configuration, and lifecycle management of all components that make up the Internal Developer Platform (IDP). - -In the context of IPCEI-CIS, Platform Orchestration means: - -- **Platform Bootstrap**: Initial setup of Kubernetes clusters and core services -- **Platform Services Management**: Deployment and management of ArgoCD, Forgejo, Keycloak, etc. -- **Infrastructure-as-Code**: Declarative management using Terraform and GitOps -- **Multi-Cluster Orchestration**: Coordination across different Kubernetes clusters -- **Platform Stacks**: Reusable bundles of platform components (CNOE concept) - -### Target Audience - -Platform Orchestration is primarily aimed at: - -- **Platform Engineering Teams**: Teams that build and operate the IDP -- **Infrastructure Architects**: Those responsible for the platform architecture -- **SRE Teams**: Teams responsible for reliability and operations - -## Key Features - -### Declarative Platform Definition - -The entire platform is defined declaratively as code: - -- **GitOps-First**: Everything is versioned in Git and traceable -- **Reproducibility**: The platform can be rebuilt at any time -- **Environment Parity**: Consistency between Dev, Test, and Production -- **Auditability**: Complete history of all changes - -### Self-Bootstrapping - -The platform can bootstrap itself: - -1. **Initial Bootstrap**: Minimal tool (like `idpbuilder`) starts the platform -2. **Self-Management**: After bootstrap, ArgoCD takes over management -3. **Continuous Reconciliation**: Platform is continuously reconciled with Git state -4. **Self-Healing**: Automatic recovery on deviations - -### Stack-based Composition - -Platform components are organized as reusable stacks (CNOE concept): - -- **Modularity**: Components can be updated individually -- **Reusability**: Stacks can be used across different environments -- **Composability**: Compose complex platforms from simple building blocks -- **Versioning**: Stacks can be versioned and tested - -**In IPCEI-CIS**: The stacks concept from CNOE is the core organizational principle for platform components. - -### Multi-Cluster Support - -Platform Orchestration supports different cluster topologies: - -- **Control Plane + Worker Clusters**: Centralized control, distributed workloads -- **Hub-and-Spoke**: One management cluster manages multiple target clusters -- **Federation**: Coordination across multiple independent clusters - -## Purpose in EDP - -Platform Orchestration is the foundation of the IPCEI-CIS Edge Developer Platform. It enables: - -### Foundation for Developer Self-Service - -Platform Orchestration ensures all services are available that developers need for self-service: - -- **GitOps Engine** (ArgoCD) for continuous deployment -- **Source Control** (Forgejo) for code and configuration management -- **Identity Management** (Keycloak) for authentication and authorization -- **Observability** (Grafana, Prometheus) for monitoring and logging -- **CI/CD** (Forgejo Actions/Pipelines) for automated build and test - -### Consistency Across Environments - -Through declarative definition, consistency is guaranteed: - -- Development, test, and production environments are identically configured -- No "configuration drift" between environments -- Predictable behavior across all stages - -### Platform as Code - -The platform itself is treated like software: - -- **Version Control**: All changes are versioned in Git -- **Code Review**: Platform changes go through review processes -- **Testing**: Platform configurations can be tested -- **Rollback**: Easy rollback on problems - -### Reduced Operational Overhead - -Automation reduces manual effort: - -- No manual installation steps -- Automatic updates and patching -- Self-healing on failures -- Standardized deployment processes - -## Repository - -**CNOE Reference Implementation**: [cnoe-io/stacks](https://github.com/cnoe-io/stacks) - -**CNOE idpbuilder**: [cnoe-io/idpbuilder](https://github.com/cnoe-io/idpbuilder) - -**Documentation**: [CNOE.io Documentation](https://cnoe.io/docs/) - -## Getting Started - -### Prerequisites - -- **Docker**: For local Kubernetes clusters (Kind) -- **kubectl**: Kubernetes CLI tool -- **Git**: For repository management -- **idpbuilder**: CNOE bootstrap tool - -### Quick Start - -Platform Orchestration with CNOE Reference Implementation: - -```bash -# 1. Install idpbuilder -curl -fsSL https://cnoe.io/install.sh | bash - -# 2. Bootstrap platform -idpbuilder create \ - --use-path-routing \ - --package-dir https://github.com/cnoe-io/stacks//ref-implementation - -# 3. Wait for platform ready (ca. 10 minutes) -kubectl get applications -A -``` - -### Verification - -Verify the platform is running correctly: - -```bash -# Get platform secrets (credentials) -idpbuilder get secrets - -# Check all ArgoCD applications -kubectl get applications -n argocd - -# Expected: All applications "Synced" and "Healthy" -``` - -Access URLs (with path-routing): - -- **ArgoCD**: `https://cnoe.localtest.me:8443/argocd` -- **Forgejo**: `https://cnoe.localtest.me:8443/gitea` -- **Keycloak**: `https://cnoe.localtest.me:8443/keycloak` - -## Usage Examples - -### Use Case 1: Platform Bootstrap - -Initial bootstrapping of a new platform instance: - -```bash -idpbuilder create \ - --use-path-routing \ - --package-dir https://github.com/cnoe-io/stacks//ref-implementation \ - --log-level debug - -# Workflow: -# 1. Creates Kind cluster -# 2. Installs ingress-nginx -# 3. Clones and installs ArgoCD -# 4. Installs Forgejo -# 5. Waits for core services -# 6. Creates technical users -# 7. Configures Git repositories -# 8. Installs remaining stacks via ArgoCD -``` - -After approximately 10 minutes, the platform is fully deployed. - -### Use Case 2: Adding New Platform Components - -Add new platform components via ArgoCD: - -```bash -# Create ArgoCD Application for new component -cat <}} - -### Platform Bootstrap Sequence - -The idpbuilder executes the following workflow: - -1. Create Kind Kubernetes cluster -2. Install ingress-nginx controller -3. Install ArgoCD -4. Install Forgejo Git server -5. Wait for services to be ready -6. Create technical users in Forgejo -7. Create repository for platform state in Forgejo -8. Push platform stacks to Forgejo -9. Create ArgoCD Applications for all stacks -10. ArgoCD takes over continuous synchronization - -### Deployment Architecture - -The platform is deployed in different namespaces: - -- `argocd`: ArgoCD and its components -- `gitea`: Forgejo Git server -- `keycloak`: Identity and access management -- `observability`: Prometheus, Grafana, etc. -- `ingress-nginx`: Ingress controller - -## Configuration - -### idpbuilder Configuration - -Key configuration options for idpbuilder: - -```bash -# Path-based routing (recommended for local development) -idpbuilder create --use-path-routing - -# Custom package directory -idpbuilder create --package-dir /path/to/custom/packages - -# Custom Kind cluster config -idpbuilder create --kind-config custom-kind.yaml - -# Enable debug logging -idpbuilder create --log-level debug -``` - -### ArgoCD Configuration - -Important ArgoCD configurations for platform orchestration: - -```yaml -# argocd-cm ConfigMap -data: - # Enable automatic sync - application.instanceLabelKey: argocd.argoproj.io/instance - - # Repository credentials - repositories: | - - url: https://github.com/cnoe-io/stacks - name: cnoe-stacks - type: git - - # Resource exclusions - resource.exclusions: | - - apiGroups: - - cilium.io - kinds: - - CiliumIdentity -``` - -### Platform Stack Configuration - -Configuration of platform stacks via Kustomize: - -```yaml -# kustomization.yaml -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -namespace: platform-system - -resources: - - argocd-app.yaml - - forgejo-app.yaml - - keycloak-app.yaml - -patches: - - target: - kind: Application - patch: |- - - op: add - path: /spec/syncPolicy - value: - automated: - prune: true - selfHeal: true -``` - -## Troubleshooting - -### Platform not reachable - -**Problem**: After `idpbuilder create`, platform services are not reachable - -**Solution**: - -```bash -# 1. Check if all pods are running -kubectl get pods -A - -# 2. Check ArgoCD application status -kubectl get applications -n argocd - -# 3. Check ingress -kubectl get ingress -A - -# 4. Verify DNS resolution -nslookup cnoe.localtest.me - -# 5. Check idpbuilder logs -idpbuilder get logs -``` - -### ArgoCD Applications not synchronized - -**Problem**: ArgoCD Applications show status "OutOfSync" - -**Solution**: - -```bash -# 1. Check application details -argocd app get - -# 2. View sync status -argocd app sync --dry-run - -# 3. Force sync -argocd app sync --force - -# 4. Check for errors in ArgoCD logs -kubectl logs -n argocd deployment/argocd-application-controller -``` - -### Git Repository Connection Issues - -**Problem**: ArgoCD cannot access Git repository - -**Solution**: - -```bash -# 1. Verify repository configuration -argocd repo list - -# 2. Test connection -argocd repo get https://your-git-repo - -# 3. Check credentials -kubectl get secret -n argocd - -# 4. Re-add repository with correct credentials -argocd repo add https://your-git-repo \ - --username \ - --password -``` - -## Platform Orchestration Best Practices - -Based on experience and [CNCF Guidelines](https://tag-app-delivery.cncf.io/whitepapers/platforms/): - -1. **Start Simple**: Begin with the CNOE reference stack, extend gradually -2. **Automate Everything**: Manual platform changes are anti-pattern -3. **Monitor Continuously**: Use observability tools for platform health -4. **Document Well**: Platform documentation is essential for adoption -5. **Version Everything**: All platform components should be versioned -6. **Test Changes**: Platform updates should be tested in non-prod -7. **Plan for Disaster**: Backup and disaster recovery strategies are important -8. **Use Stacks**: Organize platform components as reusable stacks - -## Status - -**Maturity**: Production (for CNOE Reference Implementation) - -**Stability**: Stable - -**Support**: Community Support via CNOE Community - -## Additional Resources - -### CNOE Resources - -- [CNOE Official Website](https://cnoe.io/) -- [CNOE GitHub Organization](https://github.com/cnoe-io) -- [CNOE Reference Implementation](https://github.com/cnoe-io/stacks) -- [CNOE Community Slack](https://cloud-native.slack.com/archives/C05TN9WFN5S) - -### Platform Engineering - -- [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) -- [Platform Engineering Maturity Model](https://tag-app-delivery.cncf.io/whitepapers/platform-eng-maturity-model/) -- [Team Topologies](https://teamtopologies.com/) - Organizational patterns - -### GitOps - -- [GitOps Working Group](https://opengitops.dev/) -- [ArgoCD Best Practices](https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/) -- [GitOps Principles](https://opengitops.dev/) - -### CNOE Stacks - -- [Understanding CNOE Stacks](https://cnoe.io/docs/reference-implementation/stacks/) -- [Creating Custom Stacks](https://cnoe.io/docs/reference-implementation/customization/) diff --git a/content/en/docs/edp/deployment/basics/application.md b/content/en/docs/edp/deployment/basics/application.md deleted file mode 100644 index 8151aa1..0000000 --- a/content/en/docs/edp/deployment/basics/application.md +++ /dev/null @@ -1,776 +0,0 @@ ---- -title: "Application Orchestration" -linkTitle: "Application Orchestration" -weight: 30 -description: > - Application deployment via CI/CD pipelines and GitOps - Orchestrating application deployments ---- - -## Overview - -Application Orchestration deals with the automation of application deployment and lifecycle management. It encompasses the entire workflow from source code to running application in production. - -In the context of IPCEI-CIS, Application Orchestration includes: - -- **CI/CD Pipelines**: Automated build, test, and deployment pipelines -- **GitOps Deployment**: Declarative application deployment via ArgoCD -- **Progressive Delivery**: Canary deployments, blue-green deployments -- **Application Configuration**: Environment-specific configuration management -- **Golden Paths**: Standardized deployment templates and workflows - -### Target Audience - -Application Orchestration is primarily for: - -- **Application Developers**: Teams developing and deploying applications -- **DevOps Teams**: Teams responsible for deployment automation -- **Product Teams**: Teams responsible for application lifecycle - -## Key Features - -### Automated CI/CD Pipelines - -Forgejo Actions provides GitHub Actions-compatible CI/CD: - -- **Build Automation**: Automatic building of container images -- **Test Automation**: Automated unit, integration, and E2E tests -- **Security Scanning**: Vulnerability scanning of dependencies and images -- **Artifact Publishing**: Publishing to container registries -- **Deployment Triggering**: Automatic deployment after successful build - -### GitOps-based Deployment - -ArgoCD enables declarative application deployment: - -- **Declarative Configuration**: Applications defined as Kubernetes manifests -- **Automated Sync**: Automatic synchronization between Git and cluster -- **Rollback Capability**: Easy rollback to previous versions -- **Multi-Environment**: Consistent deployment across Dev/Test/Prod -- **Health Monitoring**: Continuous monitoring of application health - -### Progressive Delivery - -Support for advanced deployment strategies: - -- **Canary Deployments**: Gradual rollout to subset of users -- **Blue-Green Deployments**: Zero-downtime deployments with instant rollback -- **A/B Testing**: Traffic splitting for feature testing -- **Feature Flags**: Dynamic feature enablement without deployment - -### Configuration Management - -Flexible configuration for different environments: - -- **Environment Variables**: Configuration via environment variables -- **ConfigMaps**: Kubernetes-native configuration -- **Secrets Management**: Secure handling of sensitive data -- **External Secrets**: Integration with external secret stores (Vault, etc.) - -## Purpose in EDP - -Application Orchestration is the core of developer experience in IPCEI-CIS Edge Developer Platform. - -### Developer Self-Service - -Developers can deploy applications independently: - -- **Self-Service Deployment**: No dependency on operations team -- **Standardized Workflows**: Clear, documented deployment processes -- **Fast Feedback**: Quick feedback through automated pipelines -- **Environment Parity**: Consistent behavior across all environments - -### Quality and Security - -Automated checks ensure quality and security: - -- **Automated Testing**: All changes are automatically tested -- **Security Scans**: Vulnerability scanning of dependencies and images -- **Policy Enforcement**: Automated policy checks (OPA, Kyverno) -- **Compliance**: Auditability of all deployments - -### Efficiency and Productivity - -Automation increases team efficiency: - -- **Faster Time-to-Market**: Faster deployment of new features -- **Reduced Manual Work**: Automation of repetitive tasks -- **Fewer Errors**: Fewer manual mistakes through automation -- **Better Collaboration**: Clear interfaces between Dev and Ops - -## Repository - -**Forgejo**: [forgejo.org](https://forgejo.org/) - -**Forgejo Actions**: [Forgejo Actions Documentation](https://forgejo.org/docs/latest/user/actions/) - -**ArgoCD**: [argoproj.github.io/cd](https://argoproj.github.io/cd/) - -## Getting Started - -### Prerequisites - -- **Forgejo Account**: Access to Forgejo instance -- **Kubernetes Cluster**: Target cluster for deployments -- **ArgoCD Access**: Access to ArgoCD instance -- **Git**: For repository management - -### Quick Start: Application Deployment - -1. **Create Application Repository** - -```bash -# Create new repository in Forgejo -git init my-application -cd my-application - -# Add application code and Dockerfile -cat > Dockerfile <}} - -### CI/CD Pipeline Architecture - -Typical Forgejo Actions pipeline stages: - -1. **Checkout**: Clone source code -2. **Build**: Compile application and dependencies -3. **Test**: Run unit and integration tests -4. **Security Scan**: Scan dependencies and code for vulnerabilities -5. **Build Image**: Create container image -6. **Push Image**: Push to container registry -7. **Update Manifests**: Update Kubernetes manifests with new image tag -8. **Notify**: Send notifications on success/failure - -## Configuration - -### Forgejo Actions Configuration - -Example for Node.js application: - -```yaml -name: CI/CD Pipeline - -on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main ] - -env: - REGISTRY: registry.example.com - IMAGE_NAME: ${{ github.repository }} - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - cache: 'npm' - - - name: Install dependencies - run: npm ci - - - name: Run tests - run: npm test - - - name: Run linter - run: npm run lint - - security: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@master - with: - scan-type: 'fs' - scan-ref: '.' - format: 'sarif' - output: 'trivy-results.sarif' - - build-and-push: - needs: [test, security] - runs-on: ubuntu-latest - if: github.event_name == 'push' - steps: - - uses: actions/checkout@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Registry - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY }} - username: ${{ secrets.REGISTRY_USER }} - password: ${{ secrets.REGISTRY_PASSWORD }} - - - name: Extract metadata - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=ref,event=branch - type=sha,prefix={{branch}}- - - - name: Build and push - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - cache-from: type=gha - cache-to: type=gha,mode=max -``` - -### ArgoCD Application Configuration - -Complete configuration example: - -```yaml -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: my-application - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - project: default - - source: - repoURL: https://forgejo.example.com/myteam/my-application - targetRevision: main - path: k8s/overlays/production - - # Kustomize options - kustomize: - version: v5.0.0 - images: - - my-app=registry.example.com/my-app:v1.2.3 - - destination: - server: https://kubernetes.default.svc - namespace: production - - # Sync policy - syncPolicy: - automated: - prune: true # Delete resources not in Git - selfHeal: true # Override manual changes - allowEmpty: false # Don't delete everything on empty repo - - syncOptions: - - CreateNamespace=true - - PruneLast=true - - RespectIgnoreDifferences=true - - retry: - limit: 5 - backoff: - duration: 5s - factor: 2 - maxDuration: 3m - - # Ignore differences (avoid sync loops) - ignoreDifferences: - - group: apps - kind: Deployment - jsonPointers: - - /spec/replicas # Ignore if HPA manages replicas -``` - -## Troubleshooting - -### Pipeline Fails - -**Problem**: Forgejo Actions pipeline fails - -**Solution**: - -```bash -# 1. Check pipeline logs in Forgejo UI -# Navigate to: Repository → Actions → Select failed run - -# 2. Check runner status -# In Forgejo: Site Admin → Actions → Runners - -# 3. Check runner logs -kubectl logs -n forgejo-runner deployment/act-runner - -# 4. Test pipeline locally with act -act -l # List available jobs -act -j build # Run specific job -``` - -### ArgoCD Application OutOfSync - -**Problem**: Application shows "OutOfSync" status - -**Solution**: - -```bash -# 1. Check differences -argocd app diff my-application - -# 2. View sync status details -argocd app get my-application - -# 3. Manual sync -argocd app sync my-application - -# 4. Hard refresh (ignore cache) -argocd app sync my-application --force - -# 5. Check for ignored differences -argocd app get my-application --show-operation -``` - -### Application Deployment Fails - -**Problem**: Application pod crashes after deployment - -**Solution**: - -```bash -# 1. Check pod status -kubectl get pods -n production - -# 2. View pod logs -kubectl logs -n production deployment/my-application - -# 3. Describe pod for events -kubectl describe pod -n production - -# 4. Check resource limits -kubectl top pod -n production - -# 5. Rollback via ArgoCD -argocd app rollback my-application -``` - -### Image Pull Errors - -**Problem**: Kubernetes cannot pull container image - -**Solution**: - -```bash -# 1. Verify image exists -docker pull registry.example.com/my-app:v1.2.3 - -# 2. Check image pull secret -kubectl get secret -n production regcred - -# 3. Create image pull secret if missing -kubectl create secret docker-registry regcred \ - --docker-server=registry.example.com \ - --docker-username=user \ - --docker-password=password \ - -n production - -# 4. Reference secret in deployment -kubectl patch deployment my-application -n production \ - -p '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"regcred"}]}}}}' -``` - -## Best Practices - -### Golden Path Templates - -Provide standardized templates for common use cases: - -1. **Web Application Template**: Node.js, Python, Go web services -2. **API Service Template**: RESTful API with OpenAPI -3. **Batch Job Template**: Kubernetes CronJob configurations -4. **Microservice Template**: Service mesh integration - -Example repository template structure: - -```text -application-template/ -├── .forgejo/ -│ └── workflows/ -│ ├── build.yaml -│ ├── test.yaml -│ └── deploy.yaml -├── k8s/ -│ ├── base/ -│ └── overlays/ -├── src/ -│ └── ... -├── Dockerfile -├── README.md -└── .gitignore -``` - -### Deployment Checklist - -Before deploying to production: - -- ✅ All tests passing -- ✅ Security scans completed -- ✅ Resource limits defined -- ✅ Health checks configured -- ✅ Monitoring and alerts set up -- ✅ Backup strategy defined -- ✅ Rollback plan documented -- ✅ Team notified about deployment - -### Configuration Management - -- Use ConfigMaps for non-sensitive configuration -- Use Secrets for sensitive data -- Use External Secrets Operator for vault integration -- Never commit secrets to Git -- Use environment-specific overlays (Kustomize) -- Document all configuration options - -## Status - -**Maturity**: Production - -**Stability**: Stable - -**Support**: Internal Platform Team - -## Additional Resources - -### Forgejo - -- [Forgejo Documentation](https://forgejo.org/docs/latest/) -- [Forgejo Actions Guide](https://forgejo.org/docs/latest/user/actions/) -- [Forgejo API Reference](https://forgejo.org/docs/latest/api/) - -### ArgoCD - -- [ArgoCD Documentation](https://argo-cd.readthedocs.io/) -- [ArgoCD Best Practices](https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/) -- [ArgoCD Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) - -### GitOps - -- [GitOps Principles](https://opengitops.dev/) -- [GitOps Patterns](https://www.gitops.tech/) -- [Kubernetes Deployment Strategies](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) - -### CI/CD - -- [GitHub Actions Documentation](https://docs.github.com/en/actions) (Forgejo Actions compatible) -- [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/) -- [Container Security Best Practices](https://kubernetes.io/docs/concepts/security/pod-security-standards/) diff --git a/content/en/docs/edp/deployment/basics/orchestration.md b/content/en/docs/edp/deployment/basics/orchestration.md deleted file mode 100644 index b8df19e..0000000 --- a/content/en/docs/edp/deployment/basics/orchestration.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Platform Orchestration -linkTitle: Platform Orchestration -weight: 1 -description: > - Orchestration in the context of Platform Engineering - coordinating infrastructure, platform, and application delivery. ---- - -## Overview - -Orchestration in the context of Platform Engineering refers to the coordinated automation and management of infrastructure, platform, and application components throughout their entire lifecycle. It is a fundamental concept that bridges the gap between declarative specifications (what should be deployed) and actual execution (how it is deployed). - -## The Role of Orchestration in Platform Engineering - -Platform Engineering has emerged as a discipline to improve developer experience and reduce cognitive load on development teams ([CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/)). Orchestration is the central mechanism that enables this vision: - -1. **Automation of Complex Workflows**: Orchestration coordinates multiple steps and dependencies automatically -2. **Consistency and Reproducibility**: Guaranteed, repeatable deployments across different environments -3. **Self-Service Capabilities**: Developers can independently orchestrate resources and deployments -4. **Governance and Compliance**: Centralized control over policies and best practices - -### What Does Orchestration Do? - -Orchestration systems perform the following tasks: - -- **Workflow Coordination**: Coordination of complex, multi-step deployment processes -- **Dependency Management**: Resolution and management of dependencies between components -- **State Management**: Continuous monitoring and reconciliation between desired and actual state -- **Resource Provisioning**: Automatic provisioning of infrastructure and services -- **Configuration Management**: Management of configurations across different environments -- **Health Monitoring**: Monitoring the health of deployed resources - -## Three Layers of Orchestration - -In modern Platform Engineering, we distinguish three fundamental layers of orchestration: - -### [Infrastructure Orchestration](../infrastructure/) - -Infrastructure Orchestration deals with the lowest level - the physical and virtual infrastructure layer. This includes: - -- Provisioning of compute, network, and storage resources -- Cloud resource management (VMs, networking, storage) -- Infrastructure-as-Code deployment (Terraform, etc.) -- Bare metal and hypervisor management - -**Target Audience**: Infrastructure Engineers, Cloud Architects - -**Note**: Detailed documentation for Infrastructure Orchestration is maintained separately. - -More details: [Infrastructure Orchestration →](../infrastructure/) - -### [Platform Orchestration](../otc/) - -Platform Orchestration focuses on deploying and managing the platform itself - the services and tools that development teams use. This includes: - -- Installation and configuration of Kubernetes clusters -- Deployment of platform services (GitOps tools, Observability, Security) -- Management of platform components via Stacks -- Multi-cluster orchestration - -**Target Audience**: Platform Engineering Teams, SRE Teams - -**In IPCEI-CIS**: Platform orchestration is realized using the CNOE stack concept with ArgoCD and Forgejo. - -More details: [Platform Orchestration →](../otc/) - -### [Application Orchestration](application/) - -Application Orchestration concentrates on the deployment and lifecycle management of applications running on the platform. This includes: - -- Deployment of microservices and containerized applications -- CI/CD pipeline orchestration -- Configuration management and secrets handling -- Application health monitoring and auto-scaling - -**Target Audience**: Application Developers, DevOps Engineers - -**In IPCEI-CIS**: Application orchestration uses Forgejo pipelines for CI/CD and ArgoCD for GitOps-based deployment. - -More details: [Application Orchestration →](application/) - -## GitOps as Orchestration Paradigm - -A central approach in modern platform orchestration solutions is **GitOps**. GitOps uses Git repositories as the single source of truth for declarative infrastructure and applications: - -- **Declarative Approach**: The desired state is defined in Git -- **Automatic Synchronization**: Controllers monitor Git and reconcile the live state -- **Audit Trail**: All changes are traceable in Git history -- **Rollback Capability**: Easy rollback through Git revert - -### Continuous Reconciliation - -An important concept is **continuous reconciliation**: - -1. The orchestrator monitors both the source (Git) and the target (e.g., Kubernetes cluster) -2. Deviations trigger automatic corrective actions -3. Health checks validate that the desired state has been achieved -4. Drift detection warns of unexpected changes - -## Orchestration Tools in IPCEI-CIS - -Within the IPCEI-CIS platform, we utilize the [CNOE (Cloud Native Operational Excellence)](https://cnoe.io/) stack concept with the following orchestration components: - -### ArgoCD - -- **Continuous Delivery** for Kubernetes based on GitOps -- Synchronizes Kubernetes manifests from Git repositories -- Supports Helm Charts, Kustomize, Jsonnet, and plain YAML -- Multi-cluster deployment capabilities -- Application Sets for parameterized deployments - -**Role in IPCEI-CIS**: ArgoCD is the central component for GitOps-based deployment management. After the initial bootstrapping phase, ArgoCD takes over the technical coordination of all components. - -### Forgejo - -- **Git Repository Management** and source control -- **CI/CD Pipelines** via Forgejo Actions (GitHub Actions compatible) -- **Developer Portal Capabilities** (initially planned, project discontinued) -- Package registry and artifact management -- Integration with ArgoCD for GitOps workflows - -**Role in IPCEI-CIS**: Forgejo serves as the Git repository host and CI/CD engine. It was initially planned as a developer portal (similar to Backstage's role in other stacks) but this aspect was not fully realized before project completion. - -**Note on Backstage**: In typical CNOE implementations, Backstage serves as the developer portal providing golden paths through software templates. IPCEI-CIS initially planned to use Forgejo for this purpose but the project concluded before full implementation. - -### Terraform - -- **Infrastructure-as-Code** provisioning -- Multi-cloud resource management -- State management for infrastructure -- Integration with Forgejo pipelines for automated deployment - -**Role in IPCEI-CIS**: Terraform handles infrastructure provisioning at the infrastructure orchestration layer, integrated into automated workflows via Forgejo pipelines. - -### CNOE Stacks Concept - -- **Modular Platform Components** bundled as stacks -- Reusable, composable platform building blocks -- Version-controlled stack definitions -- GitOps-based stack deployment via ArgoCD - -**Role in IPCEI-CIS**: The stacks concept from CNOE provides the structural foundation for platform orchestration, enabling modular deployment and management of platform components. - -## The Orchestration Workflow - -A typical orchestration workflow in the IPCEI-CIS platform: - -{{< likec4-view view="orchestration_workflow" title="Orchestration Workflow" >}} - -**Workflow Steps**: - -1. **Definition**: Developer defines application/infrastructure as code -2. **Commit**: Changes are committed to Forgejo Git repository -3. **CI Pipeline**: Forgejo Actions build, test, and package the application -4. **Sync**: ArgoCD detects changes and triggers deployment -5. **Provision**: Terraform orchestrates required cloud resources (if needed) -6. **Deploy**: Application is deployed to Kubernetes -7. **Monitor**: Continuous monitoring and health checks -8. **Reconcile**: Automatic correction on drift detection - -## Benefits of Coordinated Orchestration - -The integration of infrastructure, platform, and application orchestration provides crucial advantages: - -- **Reduced Complexity**: Developers don't need to know all infrastructure details -- **Faster Time-to-Market**: Automated workflows accelerate deployments -- **Consistency**: Standardized patterns across all teams -- **Governance**: Central policies are automatically enforced -- **Scalability**: Platform teams can support many application teams -- **Self-Service**: Developers can provision services independently -- **Audit and Compliance**: Complete traceability through Git history - -## Best Practices - -Successful orchestration follows proven principles ([Platform Engineering Principles](https://platformengineering.org/blog/what-is-platform-engineering)): - -1. **Platform as a Product**: Treat the platform as a product with focus on user experience -2. **Self-Service First**: Enable developers to use services autonomously -3. **Documentation**: Comprehensive documentation of golden paths -4. **Feedback Loops**: Continuous improvement through user feedback -5. **Thin Platform Layer**: Use managed services where possible instead of building everything -6. **Progressive Disclosure**: Offer different abstraction levels -7. **Focus on Common Problems**: Solve recurring problems centrally -8. **Treat Glue as Valuable**: Integration of different tools is valuable -9. **Clear Mission**: Define clear goals and responsibilities - -## Avoiding Anti-Patterns - -Common mistakes in platform orchestration ([How to fail at Platform Engineering](https://www.cncf.io/blog/2024/03/08/how-to-fail-at-platform-engineering/)): - -- **Product Misfit**: Building platform without involving developers -- **Overly Complex Design**: Too many features and unnecessary complexity -- **Swiss Knife Syndrome**: Trying to solve all problems with one tool -- **Insufficient Documentation**: Missing or outdated documentation -- **Siloed Development**: Platform and development teams working in isolation -- **Stagnant Platform**: Platform not continuously evolved - -## Sub-Components - -The orchestration component includes the following sub-areas: - -- **[Infrastructure Orchestration](infrastructure/)**: Low-level infrastructure deployment and provisioning -- **[Platform Orchestration](platform/)**: Platform-level component deployment via Stacks -- **[Application Orchestration](application/)**: Application-level deployment and CI/CD -- **[Stacks](stacks/)**: Reusable component bundles and compositions - -## Further Resources - -### Fundamentals - -- [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) - Comprehensive paper on Platform Engineering -- [Platform Engineering Definition](https://platformengineering.org/blog/what-is-platform-engineering) - What is Platform Engineering? -- [Team Topologies](https://teamtopologies.com/) - Organizational structures for modern teams - -### GitOps - -- [GitOps Principles](https://opengitops.dev/) - Official GitOps principles -- [ArgoCD Documentation](https://argo-cd.readthedocs.io/) - ArgoCD documentation - -### Tools - -- [CNOE.io](https://cnoe.io/) - Cloud Native Operational Excellence Framework -- [Forgejo](https://forgejo.org/) - Self-hosted Git service with CI/CD -- [Terraform](https://www.terraform.io/) - Infrastructure as Code tool diff --git a/content/en/docs/edp/deployment/infrastructure/_index.md b/content/en/docs/edp/deployment/infrastructure/_index.md deleted file mode 100644 index fb5ea99..0000000 --- a/content/en/docs/edp/deployment/infrastructure/_index.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Infrastructure as Code -linkTitle: Infrastructure as Code -weight: 10 -description: > - Managing infrastructure through machine-readable definition files rather than manual configuration ---- - -## Overview - -Infrastructure as Code (IaC) is the practice of managing and provisioning infrastructure through code rather than manual processes. Instead of clicking through web consoles or running one-off commands, infrastructure is defined in version-controlled files that can be executed repeatedly to produce identical environments. - -This approach treats infrastructure with the same rigor as application code: it's versioned, reviewed, tested, and deployed through automated pipelines. - -## Why Infrastructure as Code? - -### The problem with manual infrastructure - -Traditional infrastructure management faces several challenges: - -- **Inconsistency**: Manual steps vary between operators and environments -- **Undocumented**: Critical knowledge exists only in operators' heads -- **Error-Prone**: Human mistakes during repetitive tasks -- **Slow**: Manual provisioning takes hours or days -- **Untrackable**: No audit trail of what changed, when, or why -- **Irreproducible**: Difficulty recreating environments exactly - -### The IaC solution - -Infrastructure as Code addresses these challenges by making infrastructure: - -**Declarative** - Describe the desired state, not the steps to achieve it. The IaC tool handles the implementation details. - -**Versioned** - Every infrastructure change is committed to Git, providing complete history and the ability to rollback. - -**Automated** - Infrastructure deploys through pipelines without human intervention, eliminating manual errors. - -**Testable** - Infrastructure changes can be validated before production deployment. - -**Documented** - The code itself is the documentation, always current and accurate. - -**Reproducible** - The same code produces identical infrastructure every time, across all environments. - -## Core Concepts - -### Declarative vs imperative - -**Imperative** approaches specify the exact steps: "Create a server, then install software, then configure networking." - -**Declarative** approaches specify the desired outcome: "I need a server with this software and network configuration." The IaC tool determines the necessary steps. - -Most modern IaC tools use the declarative approach, making them more maintainable and resilient. - -### State Management - -IaC tools maintain a "state" - a record of what infrastructure currently exists. When you change your code and re-run the tool, it compares the desired state (your code) with the actual state (what exists) and makes only the necessary changes. - -This enables: -- **Drift detection** - Identify manual changes made outside IaC -- **Safe updates** - Modify only what changed -- **Dependency management** - Update resources in the correct order - -### Idempotency - -Running the same IaC code multiple times produces the same result. If infrastructure already matches the code, the tool makes no changes. This property is called idempotency and is essential for reliable automation. - -## Infrastructure as Code in EDP - -The Edge Developer Platform uses IaC extensively: - -### Terraform and Terragrunt - -[Terraform](terraform/) is our primary IaC tool for provisioning cloud resources. We use [Terragrunt](https://terragrunt.gruntwork.io/) as an orchestration layer to manage multiple Terraform modules and reduce code duplication. - -Our implementation includes: -- **[infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue)** - Reusable infrastructure components (modules, units, and stacks) -- **[infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy)** - Full environment definitions using catalogue components - -### Platform stacks - -We organize infrastructure into [stacks](stacks/) - coherent bundles of related components: - -- **[Core Stack](stacks/core/)** - Essential platform services -- **[Forgejo Stack](stacks/forgejo/)** - Source control and CI/CD -- **[Observability Stack](stacks/observability/)** - Monitoring and logging -- **[OTC Stack](stacks/otc/)** - Cloud provider resources -- **[Coder Stack](stacks/coder/)** - Development environments -- **[Terralist Stack](stacks/terralist/)** - Terraform registry - -Each stack is defined as code, versioned independently, and can be deployed across different environments. - -### GitOps integration - -Our IaC integrates with GitOps principles: - -1. All infrastructure definitions live in Git repositories -2. Changes go through code review processes -3. Automated pipelines deploy infrastructure -4. ArgoCD continuously reconciles Kubernetes resources with Git state - -This creates an auditable, automated, and reliable deployment process. - -## Benefits realized - -### Consistency across environments - -Development, testing, and production environments are deployed from the same code. This eliminates the "works on my machine" problem at the infrastructure level. - -### Rapid environment provisioning - -A complete EDP environment can be provisioned in minutes rather than days. This enables: -- Quick disaster recovery -- Easy creation of test environments -- Fast onboarding for new team members - -### Reduced operational risk - -Code review catches infrastructure errors before deployment. Automated testing validates changes. Version control enables instant rollback if problems occur. - -### Knowledge sharing - -Infrastructure configuration is explicit and discoverable in code. New team members can understand the platform by reading the repository rather than shadowing experienced operators. - -### Compliance and auditability - -Every infrastructure change is tracked in Git history with author, timestamp, and reason. This provides audit trails required for compliance and simplifies troubleshooting. - -## Getting started - -To work with EDP's Infrastructure as Code: - -1. **Understand Terraform basics** - Review [Terraform documentation](https://developer.hashicorp.com/terraform) -2. **Explore infra-catalogue** - Browse [infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue) to understand available components -3. **Review existing deployments** - Examine [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy) to see how components are composed -4. **Follow the Terraform guide** - See [Terraform-based deployment](terraform/) for detailed instructions - -## Best Practices - -Based on our experience building and operating IaC: - -**Version everything** - All infrastructure code belongs in version control. No exceptions. - -**Keep it simple** - Start with basic modules. Add abstraction only when duplication becomes painful. - -**Test before production** - Deploy infrastructure changes to test environments first. - -**Use meaningful commit messages** - Explain why changes were made, not just what changed. - -**Review all changes** - Infrastructure changes should go through the same review process as application code. - -**Document assumptions** - Use code comments to explain non-obvious decisions. - -**Manage secrets securely** - Never commit credentials to version control. Use secret management tools. - -**Plan for drift** - Regularly compare actual infrastructure with code state to detect manual changes. - -## Challenges and limitations - -Infrastructure as Code is powerful but has challenges: - -**Learning curve** - Teams need to learn IaC tools and practices. Initial productivity may decrease. - -**State management complexity** - State files must be stored securely and accessed by multiple team members. State corruption can cause serious issues. - -**Provider limitations** - Not all infrastructure can be managed as code. Some resources require manual configuration. - -**Breaking changes** - Poorly written code can destroy infrastructure. Safeguards and testing are essential. - -**Tool lock-in** - Switching IaC tools (e.g., Terraform to Pulumi) requires rewriting infrastructure code. - -Despite these challenges, the benefits far outweigh the costs for any infrastructure of meaningful complexity. - -## Why we invest in IaC - -The IPCEI-CIS Edge Developer Platform requires reliable, reproducible infrastructure. Manual provisioning cannot meet these requirements at scale. - -By investing in Infrastructure as Code: -- We can deploy complete environments consistently -- Platform engineers can focus on improvement rather than repetitive tasks -- Infrastructure changes are transparent and auditable -- New team members can contribute confidently -- Disaster recovery becomes routine rather than heroic - -Our IaC tools ([infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue) and [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy)) embody these principles and enable the platform's reliability. - -## Additional Resources - -### Terraform Ecosystem -- [Terraform Documentation](https://developer.hashicorp.com/terraform) -- [OpenTofu](https://opentofu.org/) - Community-driven Terraform fork -- [Terragrunt](https://terragrunt.gruntwork.io/) - Terraform orchestration - -### Infrastructure as Code Concepts -- [Infrastructure as Code book](https://www.oreilly.com/library/view/infrastructure-as-code/9781098114664/) by Kief Morris -- [Terraform Best Practices](https://www.terraform-best-practices.com/) -- [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) - -### EDP-Specific Resources -- [Terraform-based deployment](terraform/) - Detailed deployment guide -- [Infrastructure Stacks](stacks/) - Reusable component bundles -- [Platform Orchestration](../) - How IaC fits into overall deployment diff --git a/content/en/docs/edp/deployment/infrastructure/deploy-pipeline-success.png b/content/en/docs/edp/deployment/infrastructure/deploy-pipeline-success.png deleted file mode 100644 index 82d1e64..0000000 Binary files a/content/en/docs/edp/deployment/infrastructure/deploy-pipeline-success.png and /dev/null differ diff --git a/content/en/docs/edp/deployment/infrastructure/deploy-pipeline.png b/content/en/docs/edp/deployment/infrastructure/deploy-pipeline.png deleted file mode 100644 index 07e6956..0000000 Binary files a/content/en/docs/edp/deployment/infrastructure/deploy-pipeline.png and /dev/null differ diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/_index.md b/content/en/docs/edp/deployment/infrastructure/stacks/_index.md deleted file mode 100644 index d4b44fb..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/_index.md +++ /dev/null @@ -1,519 +0,0 @@ ---- -title: "Stacks" -linkTitle: "Stacks" -weight: 40 -description: > - Platform-level component provisioning via Stacks ---- - -## Overview - -The `stacks` and `stacks-instances` repositories form the core of a GitOps-based system for provisioning Edge Developer Platforms (EDP). They implement a template-instance pattern that enables the deployment of reusable platform components across different environments. The concept of "stacks" originates from the CNOE.io project (Cloud Native Operational Excellence), which can be traced through the evolutionary development from `edpbuilder` (derived from CNOE.io's `EDPbuilder`) to `infra-deploy`. - -## Key Features of the Everything-as-Code Stacks Approach - -This declarative Stacks provisioning architecture is characterized by the following central properties: - -### Complete Code Declaration - -**Platform as Code**: All Kubernetes resources, Helm charts, and application manifests are declaratively versioned as YAML files. The entire platform topology is traceable in Git. - -**Configuration as Code**: Environment-specific configurations are generated through template hydration, not manually edited. Gomplate transforms generic templates into concrete configurations. - -### GitOps-Native Architecture - -**Single Source of Truth**: Git is the sole source of truth for the desired state of all infrastructure and platform components. - -**Declarative State Management**: ArgoCD continuously synchronizes the actual state with the desired state defined in Git. Deviations are automatically corrected. - -**Audit Trail**: Every change to infrastructure or platform is documented through Git commits, with author, timestamp, and change description. - -**Pull-based Deployment**: ArgoCD pulls changes from Git, rather than external systems requiring push access to the cluster. This significantly increases security. - -### Template-Instance Separation - -**DRY Principle (Don't Repeat Yourself)**: Common platform components are defined once as templates and reused for all environments. - -**Environment Promotion**: New environments can be quickly created through template hydration. Consistency across environments is guaranteed. - -**Centralized Maintainability**: Updates to stack definitions can be made centrally in the `stacks` repository and then selectively rolled out to instances. - -**Customization Points**: Despite reuse, environment-specific customizations remain possible through values files and manifest overlays. - -### Modular Composition - -**Stack-based Architecture**: Platform capabilities are organized into independent, reusable stacks (core, otc, forgejo, observability). - -**Selective Deployment**: Through the `STACKS` environment variable, only required components can be deployed selectively. - -**Mix-and-Match**: Different stack combinations yield different platform profiles (Development, Production, Observability clusters). - -**Pluggable Components**: New stacks can be added without modifying existing ones. - -### Environment Agnosticism - -**Cloud Provider Abstraction**: Templates are formulated generically. Provider-specific details are introduced through hydration. - -**Multi-Cloud Ready**: The architecture supports various cloud providers (currently OTC, historically KIND, extensible to AWS/Azure/GCP). - -**Environment Variables as Interface**: All environment-specific aspects are controlled through clearly defined environment variables. - -**Portable Definitions**: Stack definitions can be ported between environments and even cloud providers. - -### Self-Healing and Drift Detection - -**Automated Reconciliation**: ArgoCD detects deviations from the desired state and corrects them automatically. - -**Continuous Monitoring**: Permanent monitoring of cluster state compared to Git definition. - -**Declarative State Recovery**: After failures or manual changes, the declared state is automatically restored. - -**Sync Policies**: Configurable sync strategies (automated, manual, with pruning) per application. - -### Secrets Management - -**Secrets Outside Git**: Sensitive data is not stored in Git but generated at runtime or injected from secret stores. - -**Generated Credentials**: Passwords, tokens, and secrets are generated during deployment and directly created as Kubernetes Secrets. - -**Sealed Secrets Ready**: The architecture is compatible with Sealed Secrets or External Secrets Operators for encrypted secret storage in Git. - -**Credential Rotation**: Secrets can be regenerated through re-deployment. - -### Observability and Auditability - -**Declarative Monitoring**: Observability stacks are part of the Platform-as-Code definition. - -**Deployment History**: Complete history of all deployments and changes through Git log. - -**ArgoCD UI**: Graphical representation of sync status and application topology. - -**Infrastructure Events**: Terraform state changes and Terragrunt outputs document infrastructure changes. - -### Idempotence and Reproducibility - -**Idempotent Operations**: Repeated execution of the same declaration leads to the same result without side effects. - -**Deterministic Builds**: Same input parameters (Git commit + environment variables) produce identical environments. - -**Disaster Recovery**: Complete environments can be rebuilt from code without restoring backups. - -**Testing in Production-Like Environments**: Development and staging environments are code-identical to production, only with different parameter values. - -## Purpose in EDP - -A 'stack' is the declarative description for the platform provisionning in an EDP installation. - -## Repository - -**Code**: -* [Stacks Templates Repo](https://edp.buildth.ing/DevFW-CICD/stacks) -* [Stacks Instances Repo, used for ArgoCD Gitops](https://edp.buildth.ing/DevFW-CICD/stacks-instances) -* [EDP Stacks Deployment mechanism](https://edp.buildth.ing/DevFW/infra-deploy) - -**Documentation**: [Link to component-specific documentation] -* [Outdated: The former 'edpbuilder' as script, derived from CNOE's 'idpbuilder](https://edp.buildth.ing/DevFW/edpbuilder) - - -## The stacks Repository - -### Purpose and Structure - -The `stacks` repository contains reusable template definitions for platform components. It serves as a central library of building blocks from which Edge Developer Platforms can be composed. - -``` -stacks/ -└── template/ - ├── edfbuilder.yaml - ├── registry/ - │ ├── core.yaml - │ ├── otc.yaml - │ ├── forgejo.yaml - │ ├── observability.yaml - │ └── observability-client.yaml - └── stacks/ - ├── core/ - ├── otc/ - ├── forgejo/ - ├── observability/ - └── observability-client/ -``` - -### Components - -**edfbuilder.yaml**: The central bootstrap definition. This is an ArgoCD Application that references the `registry` directory and serves as the entry point for the entire platform provisioning. - -**registry/**: Contains ArgoCD ApplicationSets that function as a meta-layer. Each file defines a category of stacks (e.g., core, forgejo, observability) and references the corresponding subdirectory in `stacks/`. - -**stacks/**: The actual platform components, organized into thematic categories: - -- **core**: Fundamental components such as ArgoCD, CloudNative PostgreSQL, Dex (SSO) -- **otc**: Cloud-provider-specific components for Open Telekom Cloud (cert-manager, ingress-nginx, StorageClasses) -- **forgejo**: Git server and CI runners -- **observability**: Central observability components (Grafana, Victoria Metrics Stack) -- **observability-client**: Client-side metrics collection for non-observability clusters - -Each stack consists of: -- YAML definitions (primarily ArgoCD Applications) -- `values.yaml` files for Helm charts -- `manifests/` directories for additional Kubernetes resources - -### Templating Mechanism - -The templates use Gomplate with delimiter syntax `{{{ }}}` for environment variables: - -```yaml -repoURL: "https://{{{ .Env.CLIENT_REPO_DOMAIN }}}/{{{ .Env.CLIENT_REPO_ORG_NAME }}}" -path: "{{{ .Env.CLIENT_REPO_ID }}}/{{{ .Env.DOMAIN }}}/stacks/core" -``` - -These placeholders are replaced with environment-specific values during the deployment phase. - -## The stacks-instances Repository - -### Purpose and Structure - -The `stacks-instances` repository contains the materialized, environment-specific configurations. While `stacks` provides the blueprints, `stacks-instances` contains the actual deployment definitions for concrete environments. - -``` -stacks-instances/ -└── otc/ - ├── osctest.t09.de/ - │ ├── edfbuilder.yaml - │ ├── registry/ - │ └── stacks/ - ├── backup-test-manu.t09.de/ - │ ├── edfbuilder.yaml - │ ├── registry/ - │ └── stacks/ - └── ... -``` - -### Organizational Principle - -The structure follows the schema `{cloud-provider}/{domain}/`: - -- **cloud-provider**: Identifies the cloud environment (e.g., `otc` for Open Telekom Cloud) -- **domain**: The fully qualified domain name of the environment (e.g., `osctest.t09.de`) - -Each environment replicates the structure of `stacks/template`, but with resolved template variables and environment-specific customizations. - -### Usage by ArgoCD - -ArgoCD synchronizes directly from this repository. Applications reference paths such as: - -```yaml -source: - path: "otc/osctest.t09.de/stacks/core" - repoURL: "https://edp.buildth.ing/DevFW-CICD/stacks-instances" - targetRevision: HEAD -``` - -This enables true GitOps: every change to the configurations is traceable through Git commits and automatically synchronized by ArgoCD in the target environment. - -## The infra-deploy Repository - -### Role in the Overall Architecture - -The `infra-deploy` repository is the orchestration layer that coordinates both infrastructure and platform provisioning. It represents the evolution of `edpbuilder`, which was originally derived from the CNOE.io project's `EDPbuilder`. - -### Two-Phase Provisioning - -**Phase 1: Infrastructure Provisioning** - -Uses Terragrunt Stacks (experimental feature) to provision cloud resources: - -``` -infra-deploy/ -├── root.hcl -├── non-prod/ -│ ├── tenant.hcl -│ ├── dns_zone/ -│ │ ├── terragrunt.hcl -│ │ ├── terragrunt.stack.hcl -│ │ └── terragrunt.values.hcl -│ └── testing/ -├── prod/ -└── templates/ - └── forgejo/ - ├── terragrunt.hcl - └── terragrunt.stack.hcl -``` - -Terragrunt Stacks provision: -- VPC and network segments -- Kubernetes clusters (CCE on OTC) -- Managed databases (RDS PostgreSQL) -- Load balancers and DNS entries -- Security groups and other cloud resources - -**Phase 2: Platform Provisioning** - -The script `scripts/edp-install.sh` executes the following steps: - -1. **Template Hydration**: - - Checkout of the `stacks` repository - - Execution of Gomplate to resolve template variables - - Generation of environment-specific manifests - -2. **Instance Management**: - - Checkout/update of the `stacks-instances` repository - - During CI execution: commit and push of the new instance - -3. **Secrets Management**: - - Generation of credentials (database passwords, SSO secrets, API tokens) - - Creation of Kubernetes Secrets - -4. **Bootstrap**: - - Helm-based installation of ArgoCD - - Application of `edfbuilder.yaml` or selective registry entries - -5. **GitOps Handover**: - - ArgoCD takes over further synchronization from `stacks-instances` - - Continuous monitoring and self-healing - -### GitHub Actions Workflows - -The `.github/workflows/` directory contains three central workflows: - -**deploy.yaml**: Complete deployment pipeline with the following inputs: -- Cluster environment and tenant (prod/non-prod) -- Node flavor and availability zone -- Stack selection (core, otc, forgejo, observability, etc.) -- Infra-catalogue version - -**plan.yaml**: Terraform/Terragrunt plan preview without execution - -**destroy.yaml**: Controlled teardown of environments - -## Deployment Workflow - -The complete provisioning process proceeds as follows: - -1. **Initiation**: GitHub Actions workflow is triggered (manually or automatically) - -2. **Environment Preparation**: - ```bash - export CLUSTER_ENVIRONMENT=qa-stage - cd scripts - ./new-otc-env.sh # Creates Terragrunt configuration if new - ``` - -3. **Infrastructure Provisioning**: - ```bash - ./ensure-cluster.sh otc - # Internally executes: - # - ./ensure-otc-cluster.sh - # - terragrunt stack run apply - ``` - -4. **Platform Provisioning**: - ```bash - ./edp-install.sh - # Executes: - # - Checkout of stacks - # - Gomplate hydration - # - Checkout/update of stacks-instances - # - Secrets generation - # - ArgoCD installation - # - Bootstrap of stacks - ``` - -5. **ArgoCD Synchronization**: ArgoCD continuously reads from `stacks-instances` and synchronizes the desired state - -## The CNOE.io Stacks Concept - -The term "stacks" originates from the Cloud Native Operational Excellence (CNOE.io) project. The core idea is the composition of platform capabilities from modular, reusable building blocks. - -### Principles - -**Modularity**: Each stack is a self-contained unit with clear dependencies - -**Composability**: Stacks can be freely combined to create different platform profiles - -**Declarativeness**: All configurations are declarative and GitOps-capable - -**Environment-agnostic**: Templates are generic; environment specifics are introduced through hydration - -### Stack Selection and Combinations - -The environment variable `STACKS` controls which components are deployed: - -```bash -# Complete EDP with central observability -STACKS="core,otc,forgejo,observability" - -# Application cluster with client-side observability -STACKS="core,otc,forgejo,observability-client" - -# Minimal development environment -STACKS="core,forgejo" -``` - -## Data Flow and Dependencies - -``` -┌─────────────────┐ -│ GitHub Actions │ -│ (deploy.yaml) │ -└────────┬────────┘ - │ - ├─> Phase 1: Infrastructure - │ ┌──────────────────┐ - │ │ infra-deploy │ - │ │ (Terragrunt) │ - │ └────────┬─────────┘ - │ │ - │ v - │ ┌──────────────────┐ - │ │ Cloud Provider │ - │ │ (OTC) │ - │ │ - VPC │ - │ │ - K8s Cluster │ - │ │ - RDS │ - │ └──────────────────┘ - │ - └─> Phase 2: Platform - ┌──────────────────┐ - │ edp-install.sh │ - └────────┬─────────┘ - │ - ├─> Checkout: stacks (Templates) - │ └─> Gomplate Hydration - │ - ├─> Checkout/Update: stacks-instances - │ - ├─> Secrets Generation - │ - ├─> ArgoCD Installation (Helm) - │ - └─> Bootstrap (edfbuilder.yaml) - │ - v - ┌────────────────┐ - │ ArgoCD │ - └────────┬───────┘ - │ - └─> Continuous Synchronization - from stacks-instances - │ - v - ┌──────────────┐ - │ Kubernetes │ - │ Cluster │ - └──────────────┘ -``` - -## Historical Context: edpbuilder to infra-deploy - -The evolution from `edpbuilder` to `infra-deploy` demonstrates the maturation of the architecture: - -**edpbuilder** (Origin): -- Directly derived from CNOE.io's `EDPbuilder` -- Focus on local KIND clusters -- Manual configuration -- Monolithic structure - -**infra-deploy** (Current): -- Production-ready for cloud deployments (OTC) -- Terragrunt-based infrastructure orchestration -- CI/CD integration via GitHub Actions -- Clear separation between infrastructure and platform -- Template-instance separation through stacks/stacks-instances - -## Technical Particularities - -### Gomplate Templating - -Gomplate is used with custom delimiters `{{{ }}}` to avoid conflicts with Helm templating (`{{ }}`): - -```bash -gomplate --input-dir="stacks/template" \ - --output-dir="work" \ - --left-delim "{{{" \ - --right-delim "}}}" -``` - -### Terragrunt Experimental Stacks - -The use of Terragrunt Stacks requires the experimental flag: - -```bash -export TG_EXPERIMENT_MODE=true -terragrunt stack run apply -``` - -This enables hierarchical organization of Terraform modules with dependency management. - -### ArgoCD ApplicationSets - -The registry pattern uses ArgoCD Applications that reference directories: - -```yaml -source: - path: "otc/osctest.t09.de/stacks/core" -``` - -ArgoCD automatically detects all YAML files in the path and synchronizes them as Applications. - -## Best Practices and Patterns - -**Immutable Infrastructure**: Every environment is fully defined in Git - -**Secrets Outside Git**: Sensitive data is generated at runtime or injected from secret stores - -**Progressive Rollouts**: New environments start as template instances, then are individually customized - -**Version Pinning**: Critical components (Helm charts, Terragrunt modules) are pinned to specific versions - -**Namespace Isolation**: Each stack deploys into dedicated namespaces - -**Self-Healing**: ArgoCD's automated sync policy enables automatic drift correction - -## Usage Examples - -### Deployment by Pipeline - -The platform deployment is the second part of the EDP installtaion. First there is the infrastructure setup, which ends with a created kubernetes cluster. Then the platform provisioning by the defined stacks is done. Both is runnable by the `deploy`pipelien in `infra-deploy`: - - -![alt text](./deploy-action.png) - -The green pipeline looks liek this: - -![alt text](./green-deploy-pipeline.png) - -### Local setup with 'kind' - -It's also possible to just run the second part, the stcks provisionning. Then you need to have a kubernetes cluster already running, which is e.g. feasable by a local kind-cluster. - -So imagine, you want to to the stacks 'core,observability' on your local machine. Then you can run the local entzr - -```bash -# have kind insatlled -# in /infra-deploy - -# provide a kind cluster -kind delete clusters --all -./scripts/ensure-kind-cluster.sh -r - -# provide some emnv vars -export TERRAFORM=/bin/bash -export LOADBALANCER_ID=ABC -export DOMAIN=ABC -export DOMAIN_GITEA=ABC -export OS_ACCESS_KEY=ABC -export OS_SECRET_KEY=ABC -export STACKS=core,observability - -# deploy -./scripts/edp-install.sh -``` - -## Status - -**Maturity**: [Production] - -## Additional Resources - -* [CNOE](https://cnoe.io/docs/overview/cnoe) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/coder.md b/content/en/docs/edp/deployment/infrastructure/stacks/coder.md deleted file mode 100644 index 31c8794..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/coder.md +++ /dev/null @@ -1,368 +0,0 @@ ---- -title: "Coder" -linkTitle: "Coder" -weight: 20 -description: > - Cloud Development Environments for secure, scalable remote development ---- - -## Overview - -Coder is an enterprise cloud development environment (CDE) platform that provisions secure, consistent remote development workspaces. As part of the Edge Developer Platform, Coder enables developers to work in standardized, on-demand environments defined as code, moving development workloads from local machines to centrally managed infrastructure. - -The Coder stack deploys a self-hosted Coder instance with PostgreSQL database backend, integrated authentication, and edge connectivity capabilities. - -## Key Features - -* **Infrastructure as Code Workspaces**: Development environments defined using Terraform templates -* **IDE Agnostic**: Supports browser-based IDEs, VS Code, JetBrains IDEs, and other development tools -* **Secure Remote Access**: Workspaces run in controlled cloud or on-premises infrastructure -* **On-Demand Provisioning**: Developers create ephemeral or persistent workspaces as needed -* **AI Agent Support**: Secure execution environment for AI coding assistants -* **Template-Based Deployment**: Reusable workspace templates ensure consistency across teams - -## Repository - -**Code**: [Coder Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/coder) - -**Documentation**: -* [Coder Official Documentation](https://coder.com/docs) -* [Coder GitHub Repository](https://github.com/coder/coder) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster with ArgoCD installed (provided by `core` stack) -* CloudNativePG operator (provided by `core` stack) -* Ingress controller configured (provided by `otc` stack) -* cert-manager for TLS certificate management (provided by `otc` stack) -* Domain name configured via `DOMAIN_GITEA` environment variable - -### Quick Start - -The Coder stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. (if you enter `test-me` then the domain will be `coder.test-me.t09.de`) - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - PostgreSQL database cluster (CloudNativePG) - - Coder application (Helm chart v2.28.3) - - Ingress configuration with TLS - - Database credentials and edge connectivity secrets - -### Verification - -Verify the Coder deployment: - -```bash -# Check ArgoCD application status -kubectl get application coder -n argocd - -# Verify Coder pods are running -kubectl get pods -n coder - -# Check PostgreSQL cluster status -kubectl get cluster coder-db -n coder - -# Verify ingress configuration -kubectl get ingress -n coder -``` - -Access the Coder web interface at `https://coder.{DOMAIN_GITEA}`. - -## Architecture - -### Component Architecture - -The Coder stack consists of: - -**Coder Control Plane**: -- Web application for workspace management -- API server for workspace provisioning -- Terraform executor for infrastructure operations - -**PostgreSQL Database**: -- Single-instance CloudNativePG cluster -- Stores workspace metadata, templates, and user data -- Managed database user with `coder-db-user` secret -- 10Gi persistent storage on `csi-disk` storage class - -**Networking**: -- ClusterIP service for internal communication -- Nginx ingress with TLS termination -- cert-manager integration for automatic certificate management - -## Configuration - -### Environment Variables - -The Coder application is configured through environment variables in `values.yaml`: - -**Access Configuration**: -- `CODER_ACCESS_URL`: Public URL where Coder is accessible (`https://coder.{DOMAIN_GITEA}`) - -**Database Configuration**: -- `CODER_PG_CONNECTION_URL`: PostgreSQL connection string (from `coder-db-user` secret) - -**Authentication**: -- `CODER_OAUTH2_GITHUB_DEFAULT_PROVIDER_ENABLE`: GitHub OAuth integration (disabled by default) - -**Edge Connectivity**: -- `EDGE_CONNECT_ENDPOINT`: Edge connection endpoint (from `edge-credential` secret) -- `EDGE_CONNECT_USERNAME`: Edge authentication username -- `EDGE_CONNECT_PASSWORD`: Edge authentication password - -### Helm Chart Configuration - -Key Helm values configured in `stacks/coder/coder/values.yaml`: - -```yaml -coder: - env: - - name: CODER_ACCESS_URL - value: "https://coder.{DOMAIN_GITEA}" - - name: CODER_PG_CONNECTION_URL - valueFrom: - secretKeyRef: - name: coder-db-user - key: uri - - service: - type: ClusterIP - - ingress: - enable: true - className: nginx - host: "coder.{DOMAIN_GITEA}" - annotations: - cert-manager.io/cluster-issuer: main - tls: - enable: true - secretName: coder-tls-secret -``` - -**Important**: Do not override `CODER_HTTP_ADDRESS`, `CODER_TLS_ENABLE`, `CODER_TLS_CERT_FILE`, or `CODER_TLS_KEY_FILE` as these are managed by the Helm chart. - -### PostgreSQL Database Configuration - -Defined in `stacks/coder/coder/manifests/postgres.yaml`: - -**Cluster Specification**: -- 1 instance (single-node cluster) -- Primary update strategy: unsupervised -- Resource requests/limits: 1 CPU, 1Gi memory -- Storage: 10Gi using `csi-disk` storage class - -**Managed Roles**: -- User: `coder` -- Permissions: createdb, login -- Password stored in `coder-db-user` secret - -### ArgoCD Application Configuration - -**Registry Application** (`template/registry/coder.yaml`): -- Name: `coder-reg` -- Manages the Coder stack directory -- Automated sync with prune and self-heal enabled - -**Stack Application** (`template/stacks/coder/coder.yaml`): -- Name: `coder` -- Deploys Coder Helm chart v2.28.3 from `https://helm.coder.com/v2` -- Automated self-healing enabled -- Creates namespace automatically -- References values from `stacks-instances` repository - -## Usage Examples - -### Creating a Workspace Template - -After deployment, create workspace templates using Terraform: - -1. **Access Coder Dashboard** - ```bash - open https://coder.${DOMAIN_GITEA} - ``` - -2. **Create Template Repository** - Create a Git repository with a Terraform template: - ```hcl - # main.tf - terraform { - required_providers { - coder = { - source = "coder/coder" - version = "~> 0.12" - } - kubernetes = { - source = "hashicorp/kubernetes" - version = "~> 2.23" - } - } - } - - resource "coder_agent" "main" { - os = "linux" - arch = "amd64" - } - - resource "kubernetes_pod" "main" { - metadata { - name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}" - namespace = "coder-workspaces" - } - spec { - container { - name = "dev" - image = "codercom/enterprise-base:ubuntu" - command = ["sh", "-c", coder_agent.main.init_script] - } - } - } - ``` - -3. **Push Template to Coder** - ```bash - coder templates push kubernetes-dev - ``` - -### Provisioning a Development Workspace - -```bash -# Create a new workspace from template -coder create my-workspace --template kubernetes-dev - -# Connect via SSH -coder ssh my-workspace - -# Open in VS Code -coder open my-workspace --ide vscode - -# Stop workspace when not in use -coder stop my-workspace - -# Delete workspace -coder delete my-workspace -``` - -### Integrating with Platform Services - -Access EDP platform services from Coder workspaces: - -```bash -# Connect to platform PostgreSQL -psql "postgresql://myuser@postgres.core.svc.cluster.local:5432/mydb" - -# Access Forgejo -git clone https://forgejo.${DOMAIN_GITEA}/myorg/myrepo.git - -# Query platform metrics -curl https://grafana.${DOMAIN}/api/datasources -``` - -## Integration Points - -* **Core Stack**: Depends on ArgoCD for deployment orchestration and CloudNativePG operator for database management -* **OTC Stack**: Requires ingress-nginx controller and cert-manager for external access and TLS -* **Forgejo Stack**: Workspace templates can integrate with platform Git repositories -* **Observability Stack**: Workspace metrics can be collected by platform observability tools -* **Dex (SSO)**: Can be configured for centralized authentication (requires additional configuration) - -## Troubleshooting - -### Coder Pods Not Starting - -**Problem**: Coder pods remain in `Pending` or `CrashLoopBackOff` state - -**Solution**: -1. Check PostgreSQL cluster status: - ```bash - kubectl get cluster coder-db -n coder - kubectl describe cluster coder-db -n coder - ``` - -2. Verify database credentials secret: - ```bash - kubectl get secret coder-db-user -n coder - kubectl get secret coder-db-user -n coder -o jsonpath='{.data.uri}' | base64 -d - ``` - -3. Check Coder logs: - ```bash - kubectl logs -n coder -l app=coder - ``` - -### Cannot Access Coder UI - -**Problem**: Coder web interface is not accessible at configured URL - -**Solution**: -1. Verify ingress configuration: - ```bash - kubectl get ingress -n coder - kubectl describe ingress -n coder - ``` - -2. Check TLS certificate status: - ```bash - kubectl get certificate -n coder - kubectl describe certificate coder-tls-secret -n coder - ``` - -3. Verify DNS resolution: - ```bash - nslookup coder.${DOMAIN_GITEA} - ``` - -### Database Connection Errors - -**Problem**: Coder cannot connect to PostgreSQL database - -**Solution**: -1. Verify PostgreSQL cluster health: - ```bash - kubectl get pods -n coder -l cnpg.io/cluster=coder-db - kubectl logs -n coder -l cnpg.io/cluster=coder-db - ``` - -2. Check database and user creation: - ```bash - kubectl get database coder -n coder - kubectl exec -it coder-db-1 -n coder -- psql -U postgres -c "\l" - kubectl exec -it coder-db-1 -n coder -- psql -U postgres -c "\du" - ``` - -3. Test connection string: - ```bash - kubectl exec -it coder-db-1 -n coder -- psql "$(kubectl get secret coder-db-user -n coder -o jsonpath='{.data.uri}' | base64 -d)" - ``` - -### Workspace Provisioning Fails - -**Problem**: Workspaces fail to provision from templates - -**Solution**: -1. Check Coder provisioner logs: - ```bash - kubectl logs -n coder -l app=coder --tail=100 - ``` - -2. Verify Kubernetes permissions for workspace creation: - ```bash - kubectl auth can-i create pods --as=system:serviceaccount:coder:coder -n coder-workspaces - ``` - -3. Review template Terraform configuration for errors - -## Additional Resources - -* [Coder Documentation](https://coder.com/docs) -* [Coder Templates Repository](https://github.com/coder/coder) -* [CloudNativePG Documentation](https://cloudnative-pg.io/) -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) -* [Coder Blog: 2025 Launch Week](https://coder.com/blog/launch-week-2025-instant-infrastructure) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/core.md b/content/en/docs/edp/deployment/infrastructure/stacks/core.md deleted file mode 100644 index a6d9fd7..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/core.md +++ /dev/null @@ -1,480 +0,0 @@ ---- -title: "Core" -linkTitle: "Core" -weight: 10 -description: > - Essential infrastructure components for GitOps, database management, and single sign-on ---- - -## Overview - -The Core stack provides foundational infrastructure components required by all other Edge Developer Platform stacks. It establishes the base layer for continuous deployment, database services, and centralized authentication, enabling a secure, scalable platform architecture. - -The Core stack deploys ArgoCD for GitOps orchestration, CloudNativePG for PostgreSQL database management, and Dex for OpenID Connect single sign-on capabilities. - -## Key Features - -* **GitOps Continuous Deployment**: ArgoCD manages declarative infrastructure and application deployments -* **Database Operator**: CloudNativePG provides enterprise-grade PostgreSQL clusters for platform services -* **Single Sign-On**: Dex offers centralized OIDC authentication across platform components -* **Automated Synchronization**: Self-healing deployments with automatic drift correction -* **Role-Based Access Control**: Integrated RBAC for secure platform administration -* **TLS Certificate Management**: Automated certificate provisioning and renewal - -## Repository - -**Code**: [Core Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/core) - -**Documentation**: -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) -* [CloudNativePG Documentation](https://cloudnative-pg.io/) -* [Dex Documentation](https://dexidp.io/docs/) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster (1.24+) -* kubectl configured with cluster access -* Ingress controller (nginx recommended) -* cert-manager for TLS certificate management -* Domain names configured for platform services - -### Quick Start - -The Core stack is deployed as the foundation of the EDP installation: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. (if you enter `test-me` then domains will be `argocd.test-me.t09.de`, `dex.test-me.t09.de`) - - Execute workflow - -2. **ArgoCD Bootstrap** - The deployment automatically provisions: - - ArgoCD control plane in `argocd` namespace - - CloudNativePG operator in `cloudnative-pg` namespace - - Dex identity provider in `dex` namespace - - Ingress configurations with TLS certificates - - OIDC authentication integration - -### Verification - -Verify the Core stack deployment: - -```bash -# Check ArgoCD installation -kubectl get application -n argocd -kubectl get pods -n argocd - -# Verify CloudNativePG operator -kubectl get pods -n cloudnative-pg -kubectl get crd | grep cnpg.io - -# Check Dex deployment -kubectl get pods -n dex -kubectl get ingress -n dex - -# Verify ingress configurations -kubectl get ingress -n argocd -``` - -Access ArgoCD at `https://argocd.{DOMAIN}` and authenticate via Dex SSO. Or use username `admin` and the secret inside of kubernetes `argocd/argocd-initial-admin-secret` as password `kubectl get secret -n argocd argocd-initial-admin-secret -ojson | jq -r .data.password | base64 -d`. - -## Architecture - -### Component Architecture - -The Core stack establishes a three-tier foundation: - -**ArgoCD Control Plane**: -- Application management and GitOps reconciliation -- Multi-repository tracking with automated sync -- Resource health monitoring and drift detection -- Integrated RBAC with SSO authentication - -**CloudNativePG Operator**: -- PostgreSQL cluster lifecycle management -- Automated backup and recovery -- High availability and failover -- Storage provisioning via CSI drivers - -**Dex Identity Provider**: -- OpenID Connect authentication service -- Multiple connector support (Forgejo/Gitea, LDAP, SAML) -- Static client registration for platform services -- Token issuance and validation - -### Networking - -**Ingress Architecture**: -- nginx ingress controller for external access -- TLS termination with cert-manager integration -- Domain-based routing for platform services - -**Kubernetes Services**: -- Internal service communication via ClusterIP -- DNS-based service discovery -- Network policies for security segmentation - -## Configuration - -### ArgoCD Configuration - -Deployed via Helm chart v9.1.5 with custom values in `stacks/core/argocd/values.yaml`: - -**OIDC Authentication**: -```yaml -configs: - cm: - url: "https://{DOMAIN_ARGOCD}" - oidc.config: | - name: Forgejo - issuer: https://{DOMAIN_DEX} - clientID: controller-argocd-dex - clientSecret: $dex-controller-argocd-dex:dex-controller-argocd-dex - requestedScopes: ["openid", "profile", "email", "groups"] -``` - -**RBAC Policy**: -```yaml -policy.csv: | - g, DevFW, role:admin -``` - -**Server Settings**: -- Insecure mode enabled (TLS handled by ingress) -- Annotation-based resource tracking -- 60-second reconciliation timeout -- Resource exclusions for ProviderConfigUsage and CiliumIdentity - -### CloudNativePG Configuration - -Deployed via Helm chart v0.26.1 with values in `stacks/core/cloudnative-pg/values.yaml`: - -**Operator Settings**: -- Namespace: `cloudnative-pg` -- Automated database cluster provisioning -- Custom resource definitions for Cluster, Database, and Pooler resources - -**Storage Configuration**: -- Uses `csi-disk` storage class by default -- PVC provisioning for PostgreSQL data -- Backup storage integration (S3-compatible) - -### Dex Configuration - -Deployed via Helm chart v0.23.0 with values in `stacks/core/dex/values.yaml`: - -**Issuer Configuration**: -```yaml -config: - issuer: https://{DOMAIN_DEX} - storage: - type: memory # Use persistent storage for production - oauth2: - skipApprovalScreen: true - alwaysShowLoginScreen: false -``` - -**Forgejo Connector**: -```yaml -connectors: - - type: gitea - id: forgejo - name: Forgejo - config: - clientID: $FORGEJO_CLIENT_ID - clientSecret: $FORGEJO_CLIENT_SECRET - redirectURI: https://{DOMAIN_DEX}/callback - baseURL: https://edp.buildth.ing - orgs: - - name: DevFW -``` - -**Static OAuth2 Clients**: -- ArgoCD: `controller-argocd-dex` -- Grafana: `controller-grafana-dex` - -### Environment Variables - -Core stack services use the following environment variables: - -**Domain Configuration**: -- `DOMAIN_ARGOCD`: ArgoCD web interface URL -- `DOMAIN_DEX`: Dex authentication service URL -- `DOMAIN_GITEA`: Forgejo/Gitea repository URL -- `DOMAIN_GRAFANA`: Grafana observability dashboard URL - -**Repository Configuration**: -- `CLIENT_REPO_ID`: Repository identifier for stack configurations -- `CLIENT_REPO_DOMAIN`: Git repository domain -- `CLIENT_REPO_ORG_NAME`: Organization name for stack instances - -## Usage Examples - -### Managing Applications with ArgoCD - -Access and manage applications through ArgoCD: - -```bash -# Login to ArgoCD CLI -argocd login argocd.${DOMAIN} --sso - -# List all applications -argocd app list - -# Get application status -argocd app get coder - -# Sync application manually -argocd app sync coder - -# View application logs -argocd app logs coder - -# Diff application state -argocd app diff coder -``` - -### Creating a PostgreSQL Database - -Deploy a PostgreSQL cluster using CloudNativePG: - -```yaml -# database-cluster.yaml -apiVersion: postgresql.cnpg.io/v1 -kind: Cluster -metadata: - name: app-db - namespace: my-app -spec: - instances: 3 - storage: - size: 20Gi - storageClass: csi-disk - postgresql: - parameters: - max_connections: "100" - shared_buffers: "256MB" - bootstrap: - initdb: - database: appdb - owner: appuser -``` - -Apply the configuration: - -```bash -kubectl apply -f database-cluster.yaml - -# Check cluster status -kubectl get cluster app-db -n my-app -kubectl get pods -n my-app -l cnpg.io/cluster=app-db - -# Get connection credentials -kubectl get secret app-db-app -n my-app -o jsonpath='{.data.password}' | base64 -d -``` - -### Configuring SSO for Applications - -Add OAuth2 applications to Dex for SSO integration: - -```yaml -# Add to dex values.yaml -staticClients: - - id: my-app-client - redirectURIs: - - 'https://myapp.{DOMAIN}/callback' - name: 'My Application' - secretEnv: MY_APP_CLIENT_SECRET -``` - -Configure the application to use Dex: - -```bash -# Application OIDC configuration -OIDC_ISSUER=https://dex.${DOMAIN} -OIDC_CLIENT_ID=my-app-client -OIDC_CLIENT_SECRET=${MY_APP_CLIENT_SECRET} -OIDC_REDIRECT_URI=https://myapp.${DOMAIN}/callback -``` - -### Deploying Applications via ArgoCD - -Create an ArgoCD Application manifest: - -```yaml -# my-app.yaml -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: my-app - namespace: argocd -spec: - project: default - source: - repoURL: 'https://github.com/myorg/my-app' - targetRevision: main - path: k8s - destination: - server: 'https://kubernetes.default.svc' - namespace: my-app - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true -``` - -Push it to [stacks instances](https://edp.buildth.ing/DevFW-CICD/stacks-instances) to be picked up by argo - -## Integration Points - -* **All Stacks**: Core stack is a prerequisite for all other EDP stacks -* **OTC Stack**: Provides ingress-nginx and cert-manager dependencies -* **Coder Stack**: Uses CloudNativePG for workspace database management -* **Forgejo Stack**: Integrates with Dex for SSO and ArgoCD for deployment -* **Observability Stack**: Uses Dex for Grafana authentication and ArgoCD for deployment -* **Provider Stack**: Deploys Terraform providers via ArgoCD - -## Troubleshooting - -### ArgoCD Not Accessible - -**Problem**: Cannot access ArgoCD web interface - -**Solution**: -1. Verify ingress configuration: - ```bash - kubectl get ingress -n argocd - kubectl describe ingress -n argocd - ``` - -2. Check ArgoCD server status: - ```bash - kubectl get pods -n argocd - kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server - ``` - -3. Verify TLS certificate: - ```bash - kubectl get certificate -n argocd - kubectl describe certificate -n argocd - ``` - -4. Test DNS resolution: - ```bash - nslookup argocd.${DOMAIN} - ``` - -### Dex Authentication Failing - -**Problem**: SSO login fails or redirects incorrectly - -**Solution**: -1. Check Dex logs: - ```bash - kubectl logs -n dex -l app.kubernetes.io/name=dex - ``` - -2. Verify Forgejo connector configuration: - ```bash - kubectl get secret -n dex - kubectl get configmap -n dex dex -o yaml - ``` - -3. Test Dex issuer endpoint: - ```bash - curl https://dex.${DOMAIN}/.well-known/openid-configuration - ``` - -4. Verify OAuth2 client credentials match in both Dex and consuming application - -### CloudNativePG Operator Not Running - -**Problem**: PostgreSQL clusters fail to provision - -**Solution**: -1. Check operator status: - ```bash - kubectl get pods -n cloudnative-pg - kubectl logs -n cloudnative-pg -l app.kubernetes.io/name=cloudnative-pg - ``` - -2. Verify CRDs are installed: - ```bash - kubectl get crd | grep cnpg.io - kubectl describe crd clusters.postgresql.cnpg.io - ``` - -3. Check operator logs for errors: - ```bash - kubectl logs -n cloudnative-pg -l app.kubernetes.io/name=cloudnative-pg --tail=100 - ``` - -### Application Sync Failures - -**Problem**: ArgoCD applications remain out of sync or fail to deploy - -**Solution**: -1. Check application status: - ```bash - argocd app get - kubectl describe application -n argocd - ``` - -2. Review sync operation logs: - ```bash - argocd app logs - ``` - -3. Verify repository access: - ```bash - argocd repo list - argocd repo get - ``` - -4. Check for resource conflicts or missing dependencies: - ```bash - kubectl get events -n --sort-by='.lastTimestamp' - ``` - -### Database Connection Issues - -**Problem**: Applications cannot connect to CloudNativePG databases - -**Solution**: -1. Verify cluster is ready: - ```bash - kubectl get cluster -n - kubectl describe cluster -n - ``` - -2. Check database credentials secret: - ```bash - kubectl get secret -app -n - kubectl get secret -app -n -o yaml - ``` - -3. Test connection from a pod: - ```bash - kubectl run -it --rm psql-test --image=postgres:16 --restart=Never -- \ - psql "$(kubectl get secret -app -n -o jsonpath='{.data.uri}' | base64 -d)" - ``` - -4. Review PostgreSQL logs: - ```bash - kubectl logs -n -1 - ``` - -## Additional Resources - -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) -* [ArgoCD Best Practices](https://argo-cd.readthedocs.io/en/stable/user-guide/best_practices/) -* [CloudNativePG Documentation](https://cloudnative-pg.io/) -* [CloudNativePG Architecture](https://cloudnative-pg.io/documentation/current/architecture/) -* [Dex Documentation](https://dexidp.io/docs/) -* [Dex Connectors](https://dexidp.io/docs/connectors/) -* [OpenID Connect Specification](https://openid.net/connect/) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/deploy-action.png b/content/en/docs/edp/deployment/infrastructure/stacks/deploy-action.png deleted file mode 100644 index 836bd24..0000000 Binary files a/content/en/docs/edp/deployment/infrastructure/stacks/deploy-action.png and /dev/null differ diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/forgejo.md b/content/en/docs/edp/deployment/infrastructure/stacks/forgejo.md deleted file mode 100644 index b4b2ee1..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/forgejo.md +++ /dev/null @@ -1,532 +0,0 @@ ---- -title: "Forgejo" -linkTitle: "Forgejo" -weight: 30 -description: > - Self-hosted Git service with built-in CI/CD capabilities ---- - -## Overview - -Forgejo is a self-hosted Git service that provides repository hosting, code collaboration, and integrated CI/CD workflows. As part of the Edge Developer Platform, Forgejo serves as the central code repository and continuous integration system, offering a complete DevOps platform with Git hosting, issue tracking, and automated build pipelines. - -The Forgejo stack deploys a Forgejo server instance with PostgreSQL database backend, MinIO object storage, and Forgejo Runners for executing CI/CD workflows. - -## Key Features - -* **Git Repository Hosting**: Full-featured Git server with web interface for code management -* **Built-in CI/CD**: Forgejo Actions provide GitHub Actions-compatible workflow automation -* **Issue Tracking**: Integrated project management with issues, milestones, and pull requests -* **Container Registry**: Built-in Docker registry for container image storage -* **Code Review**: Pull request workflows with inline comments and approval processes -* **Scalable Runners**: Distributed runner architecture with Docker-in-Docker execution -* **S3 Object Storage**: MinIO integration for artifacts, LFS objects, and backups - -## Repository - -**Code**: [Forgejo Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo) - -**Documentation**: -* [Forgejo Official Documentation](https://forgejo.org/docs/latest/) -* [Forgejo Actions Documentation](https://forgejo.org/docs/latest/user/actions/) -* [Forgejo Helm Chart Repository](https://code.forgejo.org/forgejo-helm/forgejo-helm) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster with ArgoCD installed (provided by `core` stack) -* CloudNativePG operator (provided by `core` stack) -* Ingress controller configured (provided by `otc` stack) -* cert-manager for TLS certificate management (provided by `otc` stack) -* Infrastructure deployed through [Infra Deploy](https://edp.buildth.ing/DevFW/infra-deploy) - -### Quick Start - -The Forgejo stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. (if you enter `test-me` then the domain will be `forgejo.test-me.t09.de`) - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - Forgejo server (Helm chart v12.0.0) - - PostgreSQL database cluster (CloudNativePG) - - Forgejo Runners with Docker-in-Docker execution - - Ingress configuration with TLS - - Database credentials and storage secrets - -### Verification - -Verify the Forgejo deployment: - -```bash -# Check ArgoCD applications status -kubectl get application forgejo-server -n argocd -kubectl get application forgejo-runner -n argocd - -# Verify Forgejo server pods are running -kubectl get pods -n gitea - -# Check PostgreSQL cluster status -kubectl get cluster -n gitea - -# Verify Forgejo runners are active -kubectl get pods -n gitea -l app=forgejo-runner - -# Verify ingress configuration -kubectl get ingress -n gitea -``` - -Access the Forgejo web interface at `https://{DOMAIN_GITEA}`. - -## Architecture - -### Component Architecture - -The Forgejo stack consists of: - -**Forgejo Server**: -- Web application for Git repository management -- API server for Git operations and CI/CD orchestration -- Issue tracker and project management interface -- Container registry for Docker images -- Artifact storage via MinIO object storage - -**Forgejo Runners**: -- 3-replica runner deployment for parallel job execution -- Docker-in-Docker (DinD) architecture for containerized builds -- Runner image: `code.forgejo.org/forgejo/runner:6.4.0` -- Build container: `docker:28.0.4-dind` -- Supports GitHub Actions-compatible workflows - -**Storage Architecture**: -- 200Gi persistent volume for Git repositories (GPSSD storage) -- OTC S3 object storage for LFS objects and artifacts -- Encrypted volumes using KMS key integration -- S3-compatible backup storage (100GB) - -**Networking**: -- SSH LoadBalancer service on port 32222 for Git operations -- HTTPS ingress with TLS termination for web interface -- Internal service communication via ClusterIP - -## Configuration - -### Forgejo Server Configuration - -The Forgejo server is configured through Helm values in `stacks/forgejo/forgejo-server/values.yaml`: - -**Application Settings**: -- `FORGEJO_IMAGE_TAG`: Forgejo container image version -- Application name: "EDP" -- Slogan: "Build your thing in minutes" -- User registration: Disabled by default -- Email notifications: Enabled - -**Storage Configuration**: -```yaml -persistence: - size: 200Gi - storageClass: csi-disk - annotations: - everest.io/crypt-key-id: "{KMS_KEY_ID}" - everest.io/disk-volume-type: GPSSD -``` - -**Database Configuration**: -Database credentials are sourced from Kubernetes secrets: -- `POSTGRES_HOST`: PostgreSQL hostname -- `POSTGRES_DB`: Database name -- `POSTGRES_USER`: Database username -- `POSTGRES_PASSWORD`: Database password -- SSL verification enabled - -**Object Storage**: -- Endpoint: `obs.eu-de.otc.t-systems.com` -- Credentials from `gitea/forgejo-cloud-credentials` secret -- Used for artifacts, LFS objects, and backups - -**External Services**: -- Redis for caching and session management -- Elasticsearch for issue indexing -- SMTP for email notifications - -**SSH Configuration**: -```yaml -service: - ssh: - type: LoadBalancer - port: 32222 -``` - -### Forgejo Runner Configuration - -Defined in `stacks/forgejo/forgejo-runner/dind-docker.yaml`: - -**Deployment Specification**: -- 3 replicas for parallel execution -- Runner version: 6.4.0 -- Docker DinD version: 28.0.4 - -**Runner Registration**: -- Offline registration using secret token -- Instance URL from configuration -- Predefined labels for Ubuntu 22.04 and latest - -**Container Configuration**: -```yaml -runner: - image: code.forgejo.org/forgejo/runner:6.4.0 - privileged: true - securityContext: - runAsUser: 0 - allowPrivilegeEscalation: true - -dind: - image: docker:28.0.4-dind - privileged: true - tlsCertDir: /certs -``` - -**Volume Management**: -- Docker certificates volume for TLS communication -- Runner data volume for registration and configuration -- Shared socket for container communication - -### ArgoCD Application Configuration - -**Server Application** (`template/stacks/forgejo/forgejo-server.yaml`): -- Name: `forgejo-server` -- Namespace: `gitea` -- Helm chart v12.0.0 from `https://code.forgejo.org/forgejo-helm/forgejo-helm.git` -- Automated self-healing enabled -- Values from `stacks-instances` repository - -**Runner Application** (`template/stacks/forgejo/forgejo-runner.yaml`): -- Name: `forgejo-runner` -- Namespace: `argocd` -- Deployment manifests from `stacks-instances` repository -- Automated sync with unlimited retries - -## Usage Examples - -### Creating Your First Repository - -After deployment, create and use Git repositories: - -1. **Access Forgejo Interface** - ```bash - open https://${DOMAIN_GITEA} - ``` - -2. **Create a New Repository** - - Click "+" icon in top right - - Select "New Repository" - - Enter repository name and description - - Choose visibility (public/private) - - Initialize with README if desired - -3. **Clone and Push Code** - ```bash - # Clone the repository - git clone https://${DOMAIN_GITEA}/myorg/myrepo.git - cd myrepo - - # Add your code - echo "# My Project" > README.md - git add README.md - git commit -m "Initial commit" - - # Push to Forgejo - git push origin main - ``` - -### Setting Up CI/CD with Forgejo Actions - -Create automated workflows using Forgejo Actions: - -1. **Create Workflow File** - ```bash - mkdir -p .forgejo/workflows - cat > .forgejo/workflows/build.yaml << 'EOF' - name: Build and Test - - on: - push: - branches: [main] - pull_request: - branches: [main] - - jobs: - build: - runs-on: ubuntu-22.04 - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.21' - - - name: Build - run: go build -v ./... - - - name: Test - run: go test -v ./... - EOF - ``` - -2. **Commit and Push Workflow** - ```bash - git add .forgejo/workflows/build.yaml - git commit -m "Add CI/CD workflow" - git push origin main - ``` - -3. **Monitor Workflow Execution** - - Navigate to repository in Forgejo web interface - - Click "Actions" tab - - View workflow runs and logs - -### Building and Publishing Container Images - -Use Forgejo to build and store Docker images: - -```yaml -# .forgejo/workflows/docker.yaml -name: Build Container Image - -on: - push: - tags: ['v*'] - -jobs: - build: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Build image - run: | - docker build -t forgejo.${DOMAIN_GITEA}/myorg/myapp:${GITHUB_REF_NAME} . - - - name: Login to registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | \ - docker login forgejo.${DOMAIN_GITEA} -u "${{ secrets.REGISTRY_USER }}" --password-stdin - - - name: Push image - run: | - docker push forgejo.${DOMAIN_GITEA}/myorg/myapp:${GITHUB_REF_NAME} -``` - -### Using SSH for Git Operations - -Configure SSH access for Git operations: - -```bash -# Generate SSH key if needed -ssh-keygen -t ed25519 -C "your_email@example.com" - -# Add public key to Forgejo -# Navigate to: Settings -> SSH / GPG Keys -> Add Key - -# Configure SSH host -cat >> ~/.ssh/config << EOF -Host forgejo.${DOMAIN_GITEA} - Port 32222 - User git -EOF - -# Clone repository via SSH -git clone ssh://git@forgejo.${DOMAIN_GITEA}:32222/myorg/myrepo.git -``` - -## Integration Points - -* **Core Stack**: Depends on ArgoCD for deployment orchestration and CloudNativePG operator for database management -* **OTC Stack**: Requires ingress-nginx controller and cert-manager for external access and TLS -* **Coder Stack**: Development workspaces can clone repositories and trigger CI/CD workflows -* **Observability Stack**: Prometheus metrics collection enabled via ServiceMonitor -* **Dex (SSO)**: Can be configured for centralized authentication integration - -## Troubleshooting - -### Forgejo Server Not Starting - -**Problem**: Forgejo server pods remain in `Pending` or `CrashLoopBackOff` state - -**Solution**: -1. Check PostgreSQL cluster status: - ```bash - kubectl get cluster -n gitea - kubectl describe cluster -n gitea - ``` - -2. Verify database credentials: - ```bash - kubectl get secret -n gitea | grep postgres - ``` - -3. Check Forgejo server logs: - ```bash - kubectl logs -n gitea -l app=forgejo - ``` - -4. Verify MinIO connectivity: - ```bash - kubectl get secret minio-credential -n gitea - kubectl logs -n gitea -l app=forgejo | grep -i minio - ``` - -### Cannot Access Forgejo Web Interface - -**Problem**: Forgejo web interface is not accessible at configured URL - -**Solution**: -1. Verify ingress configuration: - ```bash - kubectl get ingress -n gitea - kubectl describe ingress -n gitea - ``` - -2. Check TLS certificate status: - ```bash - kubectl get certificate -n gitea - kubectl describe certificate -n gitea - ``` - -3. Verify DNS resolution: - ```bash - nslookup forgejo.${DOMAIN_GITEA} - ``` - -4. Test service connectivity: - ```bash - kubectl port-forward -n gitea svc/forgejo-http 3000:3000 - curl http://localhost:3000 - ``` - -### Git Operations Fail Over SSH - -**Problem**: Cannot clone or push repositories via SSH - -**Solution**: -1. Verify SSH service is exposed: - ```bash - kubectl get svc -n gitea -l app=forgejo - ``` - -2. Check LoadBalancer external IP: - ```bash - kubectl get svc -n gitea forgejo-ssh -o wide - ``` - -3. Test SSH connectivity: - ```bash - ssh -T -p 32222 git@${DOMAIN_GITEA} - ``` - -4. Verify SSH public key is added to Forgejo account - -### Forgejo Runners Not Executing Jobs - -**Problem**: CI/CD workflows remain queued or fail to execute - -**Solution**: -1. Check runner pod status: - ```bash - kubectl get pods -n gitea -l app=forgejo-runner - kubectl logs -n gitea -l app=forgejo-runner - ``` - -2. Verify runner registration: - ```bash - kubectl exec -n gitea -it deployment/forgejo-runner -- \ - forgejo-runner status - ``` - -3. Check Docker-in-Docker daemon: - ```bash - kubectl logs -n gitea -l app=forgejo-runner -c dind - ``` - -4. Verify runner token secret exists: - ```bash - kubectl get secret -n gitea | grep runner - ``` - -5. Check Forgejo server can communicate with runners: - ```bash - kubectl logs -n gitea -l app=forgejo | grep -i runner - ``` - -### Database Connection Errors - -**Problem**: Forgejo cannot connect to PostgreSQL database - -**Solution**: -1. Verify PostgreSQL cluster health: - ```bash - kubectl get pods -n gitea -l cnpg.io/cluster - kubectl logs -n gitea -l cnpg.io/cluster - ``` - -2. Test database connection: - ```bash - kubectl exec -n gitea -it -- \ - psql -U postgres -c "\l" - ``` - -3. Verify database credentials secret: - ```bash - kubectl get secret -n gitea -o yaml | grep POSTGRES - ``` - -4. Check database connection from Forgejo pod: - ```bash - kubectl exec -n gitea -it -- \ - nc -zv 5432 - ``` - -### Storage Issues - -**Problem**: Repository pushes fail or object storage errors occur - -**Solution**: -1. Check PVC status and capacity: - ```bash - kubectl get pvc -n gitea - kubectl describe pvc -n gitea - ``` - -2. Verify MinIO credentials and connectivity: - ```bash - kubectl get secret minio-credential -n gitea - kubectl logs -n gitea -l app=forgejo | grep -i "s3\|minio" - ``` - -3. Check available storage space: - ```bash - kubectl exec -n gitea -it -- df -h - ``` - -4. Review storage class configuration: - ```bash - kubectl get storageclass csi-disk -o yaml - ``` - -## Additional Resources - -* [Forgejo Documentation](https://forgejo.org/docs/latest/) -* [Forgejo Actions User Guide](https://forgejo.org/docs/latest/user/actions/) -* [Forgejo Helm Chart Documentation](https://code.forgejo.org/forgejo-helm/forgejo-helm) -* [Forgejo Runner Documentation](https://code.forgejo.org/forgejo/runner) -* [CloudNativePG Documentation](https://cloudnative-pg.io/) -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/green-deploy-pipeline.png b/content/en/docs/edp/deployment/infrastructure/stacks/green-deploy-pipeline.png deleted file mode 100644 index f3acf77..0000000 Binary files a/content/en/docs/edp/deployment/infrastructure/stacks/green-deploy-pipeline.png and /dev/null differ diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/observability-client.md b/content/en/docs/edp/deployment/infrastructure/stacks/observability-client.md deleted file mode 100644 index 89382c2..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/observability-client.md +++ /dev/null @@ -1,500 +0,0 @@ ---- -title: "Observability Client" -linkTitle: "Observability Client" -weight: 60 -description: > - Core observability components for metrics collection, log aggregation, and monitoring ---- - -## Overview - -The Observability Client stack provides essential monitoring and observability infrastructure for Kubernetes environments. As part of the Edge Developer Platform, it deploys client-side components that collect, process, and forward metrics and logs to centralized observability systems. - -The stack integrates three core components: Kubernetes Metrics Server for resource metrics, Vector for log collection and forwarding, and Victoria Metrics for comprehensive metrics monitoring and alerting. - -## Key Features - -* **Resource Metrics**: Real-time CPU and memory metrics via Kubernetes Metrics Server -* **Log Aggregation**: Unified log collection and forwarding with Vector -* **Metrics Monitoring**: Comprehensive metrics collection, storage, and alerting with Victoria Metrics -* **Prometheus Compatibility**: Full Prometheus protocol support for metrics scraping -* **Multi-Tenant Support**: Configurable tenant isolation for metrics and logs -* **Automated Alerting**: Pre-configured alert rules with Alertmanager integration -* **Grafana Integration**: Built-in dashboard provisioning and datasource configuration - -## Repository - -**Code**: [Observability Client Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/observability-client) - -**Documentation**: -* [Kubernetes Metrics Server](https://github.com/kubernetes-sigs/metrics-server) -* [Vector Documentation](https://vector.dev/docs/) -* [Victoria Metrics Documentation](https://docs.victoriametrics.com/) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster with ArgoCD installed (provided by `core` stack) -* cert-manager for certificate management (provided by `otc` stack) -* Observability backend services for receiving metrics and logs - -### Quick Start - -The Observability Client stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - Metrics Server (Helm chart v3.12.2) - - Vector agent (Helm chart v0.43.0) - - Victoria Metrics k8s-stack (Helm chart v0.48.1) - - ServiceMonitor resources for Prometheus scraping - - Authentication secrets for remote write endpoints - -### Verification - -Verify the Observability Client deployment: - -```bash -# Check ArgoCD application status -kubectl get application -n argocd | grep -E "metrics-server|vector|vm-client" - -# Verify Metrics Server is running -kubectl get pods -n observability -l app.kubernetes.io/name=metrics-server - -# Test metrics API -kubectl top nodes -kubectl top pods -A - -# Verify Vector pods are running -kubectl get pods -n observability -l app.kubernetes.io/name=vector - -# Check Victoria Metrics components -kubectl get pods -n observability -l app.kubernetes.io/name=victoria-metrics-k8s-stack - -# Verify ServiceMonitor resources -kubectl get servicemonitor -n observability -``` - -## Architecture - -### Component Architecture - -The Observability Client stack consists of three integrated components: - -**Metrics Server**: -- Collects resource metrics (CPU, memory) from kubelet -- Provides Metrics API for kubectl top and HPA -- Lightweight aggregator for cluster-wide resource usage -- Exposes ServiceMonitor for Prometheus scraping - -**Vector Agent**: -- DaemonSet deployment for log collection across all nodes -- Processes and transforms Kubernetes logs -- Forwards logs to centralized Elasticsearch backend -- Injects cluster metadata and environment information -- Supports compression and bulk operations - -**Victoria Metrics Stack**: -- VMAgent: Scrapes metrics from Kubernetes components and applications -- VMAlertmanager: Manages alert routing and notifications -- VMOperator: Manages VictoriaMetrics CRDs and lifecycle -- Integration with remote Victoria Metrics storage -- Supports multi-tenant metrics isolation - -### Data Flow - -``` -Kubernetes Resources → Metrics Server → Metrics API - ↓ - ServiceMonitor → VMAgent → Remote VictoriaMetrics - -Application Logs → Vector Agent → Transform → Remote Elasticsearch - -Prometheus Exporters → VMAgent → Remote VictoriaMetrics → VMAlertmanager -``` - -## Configuration - -### Metrics Server Configuration - -Configured in `stacks/observability-client/metrics-server/values.yaml`: - -```yaml -metrics: - enabled: true -serviceMonitor: - enabled: true -``` - -**Key Settings**: -- Enables metrics collection endpoint -- Exposes ServiceMonitor for Prometheus-compatible scraping -- Deployed via Helm chart from `https://kubernetes-sigs.github.io/metrics-server/` - -### Vector Configuration - -Configured in `stacks/observability-client/vector/values.yaml`: - -**Role**: Agent (DaemonSet deployment across nodes) - -**Authentication**: -Credentials sourced from `simple-user-secret`: -- `VECTOR_USER`: Username for remote write authentication -- `VECTOR_PASSWORD`: Password for remote write authentication - -**Data Sources**: -- `k8s`: Collects Kubernetes container logs -- `internal_metrics`: Gathers Vector internal metrics - -**Log Processing**: -```yaml -transforms: - parser: - - Parse JSON from log messages - - Inject cluster environment metadata - - Remove original message field -``` - -**Output Sink**: -- Elasticsearch bulk API (v8) -- Basic authentication with environment variables -- Gzip compression enabled -- Custom headers: AccountID and ProjectID - -### Victoria Metrics Stack Configuration - -Configured in `stacks/observability-client/vm-client-stack/values.yaml`: - -**Operator Settings**: -- Enabled with admission webhooks -- Managed by cert-manager for ArgoCD compatibility - -**VMAgent Configuration**: -- Basic authentication for remote write -- Credentials from `vm-remote-write-secret` -- Stream parsing enabled -- Drop original labels to reduce memory footprint - -**Monitoring Targets**: -- Node exporter for hardware metrics -- kube-state-metrics for Kubernetes object states -- Kubelet metrics (cadvisor) -- Kubernetes control plane components (API server, etcd, scheduler, controller manager) -- CoreDNS metrics - -**Alertmanager Integration**: -- Slack notification templates -- Configurable routing rules -- TLS support for secure communication - -**Storage Options**: -- VMSingle: Single-node deployment -- VMCluster: Distributed deployment with replication -- Configurable retention period - -## ArgoCD Application Configuration - -**Metrics Server Application** (`template/stacks/observability-client/metrics-server.yaml`): -- Name: `metrics-server` -- Chart version: 3.12.2 -- Automated sync with self-heal enabled -- Namespace: `observability` - -**Vector Application** (`template/stacks/observability-client/vector.yaml`): -- Name: `vector` -- Chart version: 0.43.0 -- Automated sync with self-heal enabled -- Namespace: `observability` - -**Victoria Metrics Application** (`template/stacks/observability-client/vm-client-stack.yaml`): -- Name: `vm-client` -- Chart version: 0.48.1 -- Automated sync with self-heal enabled -- Namespace: `observability` -- References manifests from instance repository - -## Usage Examples - -### Querying Resource Metrics - -Access resource metrics collected by Metrics Server: - -```bash -# View node resource usage -kubectl top nodes - -# View pod resource usage across all namespaces -kubectl top pods -A - -# View pod resource usage in specific namespace -kubectl top pods -n observability - -# Sort pods by CPU usage -kubectl top pods -A --sort-by=cpu - -# Sort pods by memory usage -kubectl top pods -A --sort-by=memory -``` - -### Using Metrics for Autoscaling - -Create Horizontal Pod Autoscaler based on metrics: - -```yaml -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: myapp-hpa -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: myapp - minReplicas: 2 - maxReplicas: 10 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 70 -``` - -### Accessing Application Logs - -Vector automatically collects logs from all containers. View logs in your centralized Elasticsearch/Kibana: - -```bash -# Logs are automatically forwarded to Elasticsearch -# Access via Kibana dashboard or Elasticsearch API - -# Example: Query logs via Elasticsearch API -curl -u $VECTOR_USER:$VECTOR_PASSWORD \ - -X GET "https://elasticsearch.example.com/_search" \ - -H 'Content-Type: application/json' \ - -d '{ - "query": { - "match": { - "kubernetes.namespace": "my-namespace" - } - } - }' -``` - -### Querying Victoria Metrics - -Query metrics collected by Victoria Metrics: - -```bash -# Access Victoria Metrics query API -# Metrics are forwarded to remote Victoria Metrics instance - -# Example PromQL queries: -# - Container CPU usage: container_cpu_usage_seconds_total -# - Pod memory usage: container_memory_usage_bytes -# - Node disk I/O: node_disk_io_time_seconds_total - -# Query via Victoria Metrics API -curl -X POST https://victoriametrics.example.com/api/v1/query \ - -d 'query=up' \ - -d 'time=2025-12-16T00:00:00Z' -``` - -### Creating Custom ServiceMonitors - -Expose application metrics for collection: - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: myapp-metrics - labels: - app: myapp -spec: - ports: - - name: metrics - port: 8080 - targetPort: 8080 - selector: - app: myapp ---- -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: myapp-monitor - namespace: observability -spec: - selector: - matchLabels: - app: myapp - endpoints: - - port: metrics - path: /metrics - interval: 30s -``` - -## Integration Points - -* **Core Stack**: Depends on ArgoCD for deployment orchestration -* **OTC Stack**: Requires cert-manager for certificate management -* **Observability Stack**: Forwards metrics and logs to centralized observability backend -* **All Application Stacks**: Collects metrics and logs from all platform applications - -## Troubleshooting - -### Metrics Server Not Responding - -**Problem**: `kubectl top` commands fail or return no data - -**Solution**: -1. Check Metrics Server pod status: - ```bash - kubectl get pods -n observability -l app.kubernetes.io/name=metrics-server - kubectl logs -n observability -l app.kubernetes.io/name=metrics-server - ``` - -2. Verify kubelet metrics endpoint: - ```bash - kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes - ``` - -3. Check ServiceMonitor configuration: - ```bash - kubectl get servicemonitor -n observability -o yaml - ``` - -### Vector Not Forwarding Logs - -**Problem**: Logs are not appearing in Elasticsearch - -**Solution**: -1. Check Vector agent status: - ```bash - kubectl get pods -n observability -l app.kubernetes.io/name=vector - kubectl logs -n observability -l app.kubernetes.io/name=vector --tail=50 - ``` - -2. Verify authentication secret: - ```bash - kubectl get secret simple-user-secret -n observability - kubectl get secret simple-user-secret -n observability -o jsonpath='{.data.username}' | base64 -d - ``` - -3. Test Elasticsearch connectivity: - ```bash - kubectl exec -it -n observability $(kubectl get pod -n observability -l app.kubernetes.io/name=vector -o jsonpath='{.items[0].metadata.name}') -- \ - curl -u $VECTOR_USER:$VECTOR_PASSWORD https://elasticsearch.example.com/_cluster/health - ``` - -4. Check Vector internal metrics: - ```bash - kubectl port-forward -n observability svc/vector 9090:9090 - curl http://localhost:9090/metrics - ``` - -### Victoria Metrics Not Scraping - -**Problem**: Metrics are not being collected or forwarded - -**Solution**: -1. Check VMAgent status: - ```bash - kubectl get pods -n observability -l app.kubernetes.io/name=vmagent - kubectl logs -n observability -l app.kubernetes.io/name=vmagent - ``` - -2. Verify remote write secret: - ```bash - kubectl get secret vm-remote-write-secret -n observability - kubectl get secret vm-remote-write-secret -n observability -o jsonpath='{.data.username}' | base64 -d - ``` - -3. Check ServiceMonitor targets: - ```bash - kubectl get servicemonitor -n observability - kubectl describe servicemonitor metrics-server -n observability - ``` - -4. Verify operator is running: - ```bash - kubectl get pods -n observability -l app.kubernetes.io/name=victoria-metrics-operator - kubectl logs -n observability -l app.kubernetes.io/name=victoria-metrics-operator - ``` - -### High Memory Usage - -**Problem**: Victoria Metrics or Vector consuming excessive memory - -**Solution**: -1. For Victoria Metrics, verify `dropOriginalLabels` is enabled: - ```bash - kubectl get vmagent -n observability -o yaml | grep dropOriginalLabels - ``` - -2. Reduce scrape intervals for high-cardinality metrics: - ```yaml - # Edit ServiceMonitor - spec: - endpoints: - - interval: 60s # Increase from 30s - ``` - -3. Filter unnecessary logs in Vector: - ```yaml - # Add filter transform to Vector configuration - transforms: - filter: - type: filter - condition: '.kubernetes.namespace != "kube-system"' - ``` - -4. Check resource limits: - ```bash - kubectl describe pod -n observability -l app.kubernetes.io/name=vmagent - kubectl describe pod -n observability -l app.kubernetes.io/name=vector - ``` - -### Certificate Issues - -**Problem**: TLS certificate errors in logs - -**Solution**: -1. Verify cert-manager is running: - ```bash - kubectl get pods -n cert-manager - ``` - -2. Check certificate status: - ```bash - kubectl get certificate -n observability - kubectl describe certificate -n observability - ``` - -3. Review webhook configuration: - ```bash - kubectl get validatingwebhookconfigurations | grep victoria-metrics - kubectl get mutatingwebhookconfigurations | grep victoria-metrics - ``` - -4. Restart operator if needed: - ```bash - kubectl rollout restart deployment victoria-metrics-operator -n observability - ``` - -## Additional Resources - -* [Kubernetes Metrics Server Documentation](https://github.com/kubernetes-sigs/metrics-server) -* [Vector Documentation](https://vector.dev/docs/) -* [Victoria Metrics Documentation](https://docs.victoriametrics.com/) -* [Victoria Metrics Operator](https://docs.victoriametrics.com/operator/) -* [Prometheus Operator API](https://prometheus-operator.dev/docs/operator/api/) -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/observability.md b/content/en/docs/edp/deployment/infrastructure/stacks/observability.md deleted file mode 100644 index 2a7b3a4..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/observability.md +++ /dev/null @@ -1,581 +0,0 @@ ---- -title: "Observability" -linkTitle: "Observability" -weight: 50 -description: > - Comprehensive monitoring, metrics, and logging for Kubernetes infrastructure ---- - -## Overview - -The Observability stack provides enterprise-grade monitoring, metrics collection, and logging capabilities for the Edge Developer Platform. Built on VictoriaMetrics and Grafana, it offers a complete observability solution with pre-configured dashboards, alerting, and SSO integration. - -The stack deploys VictoriaMetrics for metrics storage and querying, Grafana for visualization, VictoriaLogs for log aggregation, and VMAuth for authenticated access to monitoring endpoints. - -## Key Features - -* **Metrics Collection**: VictoriaMetrics-based Kubernetes monitoring with long-term storage -* **Visualization**: Grafana with pre-built dashboards for ArgoCD, Ingress-Nginx, and infrastructure components -* **Log Aggregation**: VictoriaLogs for centralized logging with Grafana integration -* **SSO Integration**: OAuth authentication through Dex with role-based access control -* **Alerting**: Alertmanager with email notifications for critical events -* **Secure Access**: TLS-enabled ingress with authentication proxy (VMAuth) -* **Persistent Storage**: Encrypted volumes with configurable retention policies - -## Repository - -**Code**: [Observability Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/observability) - -**Documentation**: -* [VictoriaMetrics Documentation](https://docs.victoriametrics.com/) -* [Grafana Documentation](https://grafana.com/docs/) -* [Grafana Operator Documentation](https://grafana.github.io/grafana-operator/) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster with ArgoCD installed (provided by `core` stack) -* Ingress controller configured (provided by `otc` stack) -* cert-manager for TLS certificate management (provided by `otc` stack) -* Dex SSO provider (provided by `core` stack) -* Infrastructure deployed through [Infra Deploy](https://edp.buildth.ing/DevFW/infra-deploy) - -### Quick Start - -The Observability stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. (if you enter `test-me` then domains will be `vmauth.test-me.t09.de` and `grafana.test-me.t09.de`) - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - VictoriaMetrics Operator and components - - VictoriaMetrics Single (metrics storage) - - VMAuth (authentication proxy) - - Alertmanager (alerting) - - Grafana Operator - - Grafana instance with OAuth - - VictoriaLogs datasource - - Pre-configured dashboards - - Ingress configurations with TLS - -### Verification - -Verify the Observability deployment: - -```bash -# Check ArgoCD applications status -kubectl get application grafana-operator -n argocd -kubectl get application victoria-k8s-stack -n argocd - -# Verify VictoriaMetrics components are running -kubectl get pods -n observability - -# Check Grafana instance status -kubectl get grafana grafana -n observability - -# Verify ingress configurations -kubectl get ingress -n observability -``` - -Access the monitoring interfaces: -* Grafana: `https://grafana.{DOMAIN_O12Y}` - -## Architecture - -### Component Architecture - -The Observability stack consists of multiple integrated components: - -**VictoriaMetrics Components**: -- **VictoriaMetrics Operator**: Manages VictoriaMetrics custom resources -- **VictoriaMetrics Single**: Standalone metrics storage with 20Gi storage and 1-month retention -- **VMAgent**: Scrapes metrics from Kubernetes components (kubelet, CoreDNS, kube-apiserver, etcd) -- **VMAuth**: Authentication proxy on port 8427 for secure metrics access -- **VMAlertmanager**: Handles alert routing and notifications - -**Grafana Components**: -- **Grafana Operator**: Manages Grafana instances and dashboards as Kubernetes resources -- **Grafana Instance**: Web application for metrics visualization with OAuth authentication -- **Pre-configured Dashboards**: ArgoCD, Ingress-Nginx, VictoriaLogs monitoring - -**Logging**: -- **VictoriaLogs**: Log aggregation service integrated as Grafana datasource - -**Storage**: -- VictoriaMetrics Single: 20Gi persistent storage on `csi-disk` storage class -- Grafana: 10Gi persistent storage on `csi-disk` storage class with KMS encryption -- Configurable retention: 1 month for metrics, minimum 24 hours enforced - -**Networking**: -- Nginx ingress with TLS termination for Grafana and VMAuth -- cert-manager integration for automatic certificate management -- Internal ClusterIP services for component communication - -## Configuration - -### VictoriaMetrics Configuration - -Key configuration in `stacks/observability/victoria-k8s-stack/values.yaml`: - -**Operator Settings**: -```yaml -victoria-metrics-operator: - enabled: true - operator: - enable_converter_ownership: true - admissionWebhooks: - certManager: - enabled: true - issuer: - name: main -``` - -**Storage Configuration**: -```yaml -vmsingle: - enabled: true - spec: - retentionPeriod: "1" - storage: - storageClassName: csi-disk - resources: - requests: - storage: 20Gi -``` - -**VMAuth Configuration**: -```yaml -vmauth: - enabled: true - spec: - port: "8427" - ingress: - enabled: true - ingressClassName: nginx - hosts: - - name: "{{{ .Env.DOMAIN_O12Y }}}" - tls: - - secretName: vmauth-tls-secret - hosts: - - "{{{ .Env.DOMAIN_O12Y }}}" - annotations: - cert-manager.io/cluster-issuer: main -``` - -**Monitoring Targets**: -- Kubelet (cadvisor, probes, resources metrics) -- CoreDNS -- etcd -- kube-apiserver - -**Disabled Collectors** (to avoid alerts on managed clusters): -- kube-controller-manager -- kube-scheduler -- kube-proxy - -### Alertmanager Configuration - -Email alerting configured in `values.yaml`: - -```yaml -alertmanager: - spec: - externalURL: "https://{{{ .Env.DOMAIN_O12Y }}}" - configSecret: vmalertmanager-config - config: - route: - routes: - - matchers: - - severity =~ "critical|major" - receiver: mail - receivers: - - name: 'mail' - email_configs: - - to: 'alerts@example.com' - from: 'monitoring@example.com' - smarthost: 'mail.mms-support.de:465' - auth_username: - name: email-user-credentials - key: username - auth_password: - name: email-user-credentials - key: password -``` - -### Grafana Configuration - -Grafana instance configuration in `stacks/observability/grafana-operator/manifests/grafana.yaml`: - -**OAuth/SSO Integration**: -```yaml -config: - auth.generic_oauth: - enabled: "true" - disable_login_form: "true" - client_id: "$__env{GF_AUTH_GENERIC_OAUTH_CLIENT_ID}" - client_secret: "$__env{GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET}" - scopes: "openid email profile offline_access groups" - auth_url: "https://dex.{DOMAIN}/auth" - token_url: "https://dex.{DOMAIN}/token" - api_url: "https://dex.{DOMAIN}/userinfo" - role_attribute_path: "contains(groups[*], 'DevFW') && 'Admin' || 'Viewer'" -``` - -**Storage**: -```yaml -deployment: - spec: - template: - spec: - volumes: - - name: grafana-data - persistentVolumeClaim: - claimName: grafana-pvc - -persistentVolumeClaim: - spec: - storageClassName: csi-disk - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 10Gi -``` - -**Ingress**: -```yaml -ingress: - spec: - ingressClassName: nginx - rules: - - host: "{{{ .Env.DOMAIN_GRAFANA }}}" - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: grafana-service - port: - number: 3000 - tls: - - hosts: - - "{{{ .Env.DOMAIN_GRAFANA }}}" - secretName: grafana-tls-secret -``` - -### ArgoCD Application Configuration - -**Grafana Operator Application** (`template/stacks/observability/grafana-operator.yaml`): -- Name: `grafana-operator` -- Chart: `grafana-operator` v5.18.0 from `ghcr.io/grafana/helm-charts` -- Automated sync with self-healing enabled -- Namespace: `observability` - -**VictoriaMetrics Stack Application** (`template/stacks/observability/victoria-k8s-stack.yaml`): -- Name: `victoria-k8s-stack` -- Chart: `victoria-metrics-k8s-stack` v0.48.1 from `https://victoriametrics.github.io/helm-charts/` -- Automated self-healing enabled -- Creates namespace automatically - -## Usage Examples - -### Accessing Grafana - -Access Grafana through SSO: - -1. **Navigate to Grafana** - ```bash - open https://grafana.${DOMAIN_GRAFANA} - ``` - -2. **Authenticate via Dex** - - Click "Sign in with OAuth" - - Authenticate through configured identity provider - - Users in `DevFW` group receive Admin role, others receive Viewer role - -### Querying Metrics - -Query VictoriaMetrics directly: - -```bash -# Access VMAuth endpoint -curl -u username:password https://vmauth.${DOMAIN_O12Y}/api/v1/query \ - -d 'query=up' | jq - -# Query pod CPU usage -curl -u username:password https://vmauth.${DOMAIN_O12Y}/api/v1/query \ - -d 'query=container_cpu_usage_seconds_total' | jq - -# Query with time range -curl -u username:password https://vmauth.${DOMAIN_O12Y}/api/v1/query_range \ - -d 'query=container_memory_usage_bytes' \ - -d 'start=2024-01-01T00:00:00Z' \ - -d 'end=2024-01-01T23:59:59Z' \ - -d 'step=5m' | jq -``` - -### Creating Custom Dashboards - -Create custom Grafana dashboards as Kubernetes resources: - -```yaml -apiVersion: grafana.integreatly.org/v1beta1 -kind: GrafanaDashboard -metadata: - name: custom-app-dashboard - namespace: observability -spec: - instanceSelector: - matchLabels: - dashboards: "grafana" - json: | - { - "dashboard": { - "title": "Custom Application Metrics", - "panels": [ - { - "title": "Request Rate", - "targets": [ - { - "expr": "rate(http_requests_total[5m])", - "datasource": "VictoriaMetrics" - } - ] - } - ] - } - } -``` - -Apply the dashboard: - -```bash -kubectl apply -f custom-dashboard.yaml -``` - -### Viewing Logs in Grafana - -Access VictoriaLogs through Grafana: - -1. Navigate to Grafana `https://grafana.${DOMAIN_GRAFANA}` -2. Go to Explore -3. Select "VictoriaLogs" datasource -4. Use LogQL queries: - ``` - {namespace="default"} - {app="nginx"} |= "error" - {namespace="observability"} | json | level="error" - ``` - -### Setting Up Custom Alerts - -Create custom alert rules using VMRule: - -```yaml -apiVersion: operator.victoriametrics.com/v1beta1 -kind: VMRule -metadata: - name: custom-app-alerts - namespace: observability -spec: - groups: - - name: custom-app - interval: 30s - rules: - - alert: HighErrorRate - expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05 - for: 5m - labels: - severity: critical - annotations: - summary: "High error rate detected" - description: "Error rate is {{ $value }} requests/sec" -``` - -Push the alert rule to [stacks instances](https://edp.buildth.ing/DevFW-CICD/stacks-instances/src/branch/main/otc/observability.t09.de/stacks/observability/victoria-k8s-stack/manifests) - -## Integration Points - -* **Core Stack**: Depends on ArgoCD for deployment orchestration -* **OTC Stack**: Requires ingress-nginx controller and cert-manager for external access and TLS -* **Dex (SSO)**: Integrated for Grafana authentication with role-based access control -* **All Platform Services**: Automatically collects metrics from Kubernetes components and platform services -* **Application Stacks**: Provides monitoring for Coder, Forgejo, and other deployed services - -## Troubleshooting - -### VictoriaMetrics Pods Not Starting - -**Problem**: VictoriaMetrics components remain in `Pending` or `CrashLoopBackOff` state - -**Solution**: -1. Check VictoriaMetrics resources: - ```bash - kubectl get vmsingle,vmagent,vmalertmanager -n observability - kubectl describe vmsingle vmsingle -n observability - ``` - -2. Verify persistent volume claims: - ```bash - kubectl get pvc -n observability - kubectl describe pvc vmstorage-vmsingle-0 -n observability - ``` - -3. Check operator logs: - ```bash - kubectl logs -n observability -l app.kubernetes.io/name=victoria-metrics-operator - ``` - -### Grafana Not Accessible - -**Problem**: Grafana web interface is not accessible at configured URL - -**Solution**: -1. Verify Grafana instance status: - ```bash - kubectl get grafana grafana -n observability - kubectl describe grafana grafana -n observability - ``` - -2. Check Grafana pod logs: - ```bash - kubectl logs -n observability -l app=grafana - ``` - -3. Verify ingress configuration: - ```bash - kubectl get ingress -n observability - kubectl describe ingress grafana-ingress -n observability - ``` - -4. Check TLS certificate status: - ```bash - kubectl get certificate -n observability - kubectl describe certificate grafana-tls-secret -n observability - ``` - -### OAuth Authentication Failing - -**Problem**: Cannot authenticate to Grafana via SSO - -**Solution**: -1. Verify Dex is running: - ```bash - kubectl get pods -n core -l app=dex - kubectl logs -n core -l app=dex - ``` - -2. Check OAuth client secret: - ```bash - kubectl get secret dex-grafana-client -n observability - kubectl describe secret dex-grafana-client -n observability - ``` - -3. Review Grafana OAuth configuration: - ```bash - kubectl get grafana grafana -n observability -o yaml | grep -A 20 auth.generic_oauth - ``` - -4. Check Grafana logs for OAuth errors: - ```bash - kubectl logs -n observability -l app=grafana | grep -i oauth - ``` - -### Metrics Not Appearing - -**Problem**: Metrics not showing up in Grafana or VictoriaMetrics - -**Solution**: -1. Check VMAgent scraping status: - ```bash - kubectl get vmagent -n observability - kubectl logs -n observability -l app.kubernetes.io/name=vmagent - ``` - -2. Verify service monitors are created: - ```bash - kubectl get vmservicescrape -n observability - kubectl get vmpodscrape -n observability - ``` - -3. Check target endpoints: - ```bash - # Access VMAgent UI (port-forward if needed) - kubectl port-forward -n observability svc/vmagent 8429:8429 - open http://localhost:8429/targets - ``` - -4. Verify VictoriaMetrics Single is accepting data: - ```bash - kubectl logs -n observability -l app.kubernetes.io/name=vmsingle - ``` - -### Alerts Not Sending - -**Problem**: Alertmanager not sending email notifications - -**Solution**: -1. Verify Alertmanager configuration: - ```bash - kubectl get vmalertmanager -n observability - kubectl describe vmalertmanager vmalertmanager -n observability - ``` - -2. Check email credentials secret: - ```bash - kubectl get secret email-user-credentials -n observability - kubectl describe secret email-user-credentials -n observability - ``` - -3. Review Alertmanager logs: - ```bash - kubectl logs -n observability -l app.kubernetes.io/name=vmalertmanager - ``` - -4. Test alert firing manually: - ```bash - # Access Alertmanager UI - kubectl port-forward -n observability svc/vmalertmanager 9093:9093 - open http://localhost:9093 - ``` - -### High Storage Usage - -**Problem**: VictoriaMetrics storage running out of space - -**Solution**: -1. Check current storage usage: - ```bash - kubectl exec -it -n observability vmsingle-0 -- df -h /storage - ``` - -2. Reduce retention period in `values.yaml`: - ```yaml - vmsingle: - spec: - retentionPeriod: "15d" # Reduce from 1 month - ``` - -3. Increase PVC size: - ```bash - kubectl patch pvc vmstorage-vmsingle-0 -n observability \ - -p '{"spec":{"resources":{"requests":{"storage":"50Gi"}}}}' - ``` - -4. Monitor storage metrics in Grafana for capacity planning - -## Additional Resources - -* [VictoriaMetrics Documentation](https://docs.victoriametrics.com/) -* [VictoriaMetrics Operator Documentation](https://docs.victoriametrics.com/operator/) -* [Grafana Documentation](https://grafana.com/docs/grafana/latest/) -* [Grafana Operator Documentation](https://grafana.github.io/grafana-operator/docs/) -* [VictoriaLogs Documentation](https://docs.victoriametrics.com/victorialogs/) -* [Prometheus Querying Basics](https://prometheus.io/docs/prometheus/latest/querying/basics/) -* [PromQL for VictoriaMetrics](https://docs.victoriametrics.com/metricsql/) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/otc.md b/content/en/docs/edp/deployment/infrastructure/stacks/otc.md deleted file mode 100644 index 45f506c..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/otc.md +++ /dev/null @@ -1,526 +0,0 @@ ---- -title: "OTC" -linkTitle: "OTC" -weight: 10 -description: > - Open Telekom Cloud infrastructure components for ingress, TLS, and storage ---- - -## Overview - -The OTC (Open Telekom Cloud) stack provides essential infrastructure components for deploying applications on Open Telekom Cloud environments. It configures ingress routing, automated TLS certificate management, and cloud-native storage provisioning tailored specifically for OTC's Kubernetes infrastructure. - -This stack serves as a foundational layer that other platform stacks depend on for external access, secure communication, and persistent storage. - -## Key Features - -* **Automated TLS Certificate Management**: Let's Encrypt integration via cert-manager for automatic certificate provisioning and renewal -* **Cloud Load Balancer Integration**: Nginx ingress controller configured with OTC-specific Elastic Load Balancer (ELB) annotations -* **Native Storage Provisioning**: Default StorageClass using Huawei FlexVolume provisioner for block storage -* **Prometheus Metrics**: Built-in monitoring capabilities for ingress traffic and performance -* **High Availability**: Rolling update strategy with minimal downtime -* **HTTP-01 Challenge Support**: ACME validation through ingress for certificate issuance - -## Repository - -**Code**: [OTC Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/otc) - -**Documentation**: -* [cert-manager Documentation](https://cert-manager.io/docs/) -* [ingress-nginx Documentation](https://kubernetes.github.io/ingress-nginx/) -* [Open Telekom Cloud Documentation](https://docs.otc.t-systems.com/) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster running on Open Telekom Cloud -* ArgoCD installed (provided by `core` stack) -* Environment variables configured: - - `LOADBALANCER_ID`: OTC Elastic Load Balancer ID - - `LOADBALANCER_IP`: OTC Elastic Load Balancer IP address - - `CLIENT_REPO_DOMAIN`: Git repository domain - - `CLIENT_REPO_ORG_NAME`: Git repository organization - - `CLIENT_REPO_ID`: Client repository identifier - - `DOMAIN`: Domain name for the environment - -### Quick Start - -The OTC stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - cert-manager with ClusterIssuer for Let's Encrypt - - ingress-nginx controller with OTC load balancer integration - - Default StorageClass for OTC block storage - -### Verification - -Verify the OTC stack deployment: - -```bash -# Check ArgoCD applications status -kubectl get application otc -n argocd -kubectl get application cert-manager -n argocd -kubectl get application ingress-nginx -n argocd -kubectl get application storageclass -n argocd - -# Verify cert-manager pods -kubectl get pods -n cert-manager - -# Check ingress-nginx controller -kubectl get pods -n ingress-nginx - -# Verify ClusterIssuer status -kubectl get clusterissuer main - -# Check StorageClass -kubectl get storageclass default -``` - -## Architecture - -### Component Architecture - -The OTC stack consists of three primary components: - -**cert-manager**: -- Automates TLS certificate lifecycle management -- Integrates with Let's Encrypt ACME server (production endpoint) -- Uses HTTP-01 challenge validation via ingress -- Creates and manages certificates as Kubernetes resources -- Single replica deployment - -**ingress-nginx**: -- Kubernetes ingress controller based on Nginx -- Routes external traffic to internal services -- Integrated with OTC Elastic Load Balancer (ELB) -- Supports TLS termination with cert-manager issued certificates -- Rolling update strategy with max 1 unavailable pod -- Prometheus metrics exporter with ServiceMonitor - -**StorageClass**: -- Default storage provisioner for persistent volumes -- Uses Huawei FlexVolume driver (`flexvolume-huawei.com/fuxivol`) -- SATA block storage type -- Immediate volume binding mode -- Supports dynamic volume expansion - -### Integration Flow - -``` -External Traffic → OTC ELB → ingress-nginx → Kubernetes Services - ↓ - cert-manager (TLS certificates) - ↓ - Let's Encrypt ACME -``` - -## Configuration - -### cert-manager Configuration - -**Helm Values** (`stacks/otc/cert-manager/values.yaml`): - -```yaml -crds: - enabled: true -replicaCount: 1 -``` - -**ClusterIssuer** (`stacks/otc/cert-manager/manifests/clusterissuer.yaml`): - -```yaml -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - name: main -spec: - acme: - email: admin@think-ahead.tech - server: https://acme-v02.api.letsencrypt.org/directory - privateKeySecretRef: - name: cluster-issuer-account-key - solvers: - - http01: - ingress: - ingressClassName: nginx -``` - -**Key Settings**: -- CRDs installed automatically -- Production Let's Encrypt ACME endpoint -- HTTP-01 validation through nginx ingress -- ClusterIssuer named `main` for cluster-wide certificate issuance - -### ingress-nginx Configuration - -**Helm Values** (`stacks/otc/ingress-nginx/values.yaml`): - -```yaml -controller: - updateStrategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 1 - service: - annotations: - kubernetes.io/elb.class: union - kubernetes.io/elb.port: '80' - kubernetes.io/elb.id: {{{ .Env.LOADBALANCER_ID }}} - kubernetes.io/elb.ip: {{{ .Env.LOADBALANCER_IP }}} - ingressClassResource: - name: nginx - allowSnippetAnnotations: true - config: - proxy-buffer-size: 32k - use-forwarded-headers: "true" - metrics: - enabled: true - serviceMonitor: - additionalLabels: - release: "ingress-nginx" - enabled: true -``` - -**Key Settings**: -- **OTC Load Balancer Integration**: Annotations configure connection to OTC ELB -- **Rolling Updates**: Minimizes downtime with 1 pod unavailable during updates -- **Snippet Annotations**: Enabled for advanced ingress configuration (idpbuilder compatibility) -- **Proxy Buffer**: 32k buffer size for handling large headers -- **Forwarded Headers**: Preserves original client information through proxies -- **Metrics**: Prometheus ServiceMonitor for observability - -### StorageClass Configuration - -**StorageClass** (`stacks/otc/storageclass/storageclass.yaml`): - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - annotations: - storageclass.beta.kubernetes.io/is-default-class: "true" - name: default -parameters: - kubernetes.io/hw:passthrough: "true" - kubernetes.io/storagetype: BS - kubernetes.io/volumetype: SATA - kubernetes.io/zone: eu-de-02 -provisioner: flexvolume-huawei.com/fuxivol -reclaimPolicy: Delete -volumeBindingMode: Immediate -allowVolumeExpansion: true -``` - -**Key Settings**: -- **Default StorageClass**: Automatically used when no StorageClass specified -- **OTC Zone**: Provisioned in `eu-de-02` availability zone -- **SATA Volumes**: Block storage (BS) with SATA performance tier -- **Volume Expansion**: Supports resizing persistent volumes dynamically -- **Reclaim Policy**: Volumes deleted when PersistentVolumeClaim is removed - -### ArgoCD Application Configuration - -**Registry Application** (`template/registry/otc.yaml`): -- Name: `otc` -- Manages the OTC stack directory -- Automated sync with prune and self-heal enabled -- Creates namespaces automatically - -**Component Applications**: - -**cert-manager** (referenced in stack): -- Deploys cert-manager Helm chart -- Automated self-healing enabled -- Includes ClusterIssuer manifest for Let's Encrypt - -**ingress-nginx** (`template/stacks/otc/ingress-nginx.yaml`): -- Deploys from official Kubernetes ingress-nginx repository -- Chart version: helm-chart-4.12.1 -- References environment-specific values from stacks-instances repository - -**storageclass** (`template/stacks/otc/storageclass.yaml`): -- Deploys StorageClass manifest -- Managed as ArgoCD Application -- Automated sync with unlimited retries - -## Usage Examples - -### Creating an Ingress with Automatic TLS - -Create an ingress resource that automatically provisions a TLS certificate: - -```yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: my-app - namespace: my-namespace - annotations: - cert-manager.io/cluster-issuer: main - nginx.ingress.kubernetes.io/ssl-redirect: "true" -spec: - ingressClassName: nginx - tls: - - hosts: - - myapp.example.com - secretName: myapp-tls - rules: - - host: myapp.example.com - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: my-app-service - port: - number: 80 -``` - -cert-manager will automatically: -1. Detect the ingress with `cert-manager.io/cluster-issuer` annotation -2. Create a Certificate resource -3. Request certificate from Let's Encrypt using HTTP-01 challenge -4. Store certificate in `myapp-tls` secret -5. Renew certificate before expiration - -### Creating a PersistentVolumeClaim - -Use the default OTC StorageClass for persistent storage: - -```yaml -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: my-data - namespace: my-namespace -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 10Gi - storageClassName: csi-disk -``` - -### Expanding an Existing Volume - -Resize a persistent volume by editing the PVC: - -```bash -# Edit the PVC storage request -kubectl patch pvc my-data -n my-namespace -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}' - -# Verify expansion -kubectl get pvc my-data -n my-namespace -``` - -The volume will expand automatically due to `allowVolumeExpansion: true` in the StorageClass. - -### Custom Ingress Configuration - -Use nginx ingress snippets for advanced routing: - -```yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: advanced-app - annotations: - cert-manager.io/cluster-issuer: main - nginx.ingress.kubernetes.io/configuration-snippet: | - more_set_headers "X-Custom-Header: value"; - if ($http_user_agent ~* "bot") { - return 403; - } -spec: - ingressClassName: nginx - rules: - - host: app.example.com - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: app-service - port: - number: 8080 -``` - -## Integration Points - -* **Core Stack**: Requires ArgoCD for deployment orchestration -* **All Application Stacks**: Depends on OTC stack for: - - External access via ingress-nginx - - TLS certificates via cert-manager - - Persistent storage via default StorageClass -* **Observability Stack**: ingress-nginx metrics exported to Prometheus -* **Coder Stack**: Uses ingress and cert-manager for workspace access -* **Forgejo Stack**: Requires ingress and TLS for Git repository access - -## Troubleshooting - -### Certificate Issuance Fails - -**Problem**: Certificate remains in `Pending` state and is not issued - -**Solution**: -1. Check Certificate status: - ```bash - kubectl get certificate -A - kubectl describe certificate -n - ``` - -2. Verify ClusterIssuer is ready: - ```bash - kubectl get clusterissuer main - kubectl describe clusterissuer main - ``` - -3. Check cert-manager logs: - ```bash - kubectl logs -n cert-manager -l app=cert-manager - ``` - -4. Verify HTTP-01 challenge can reach ingress: - ```bash - kubectl get challenges -A - kubectl describe challenge -n - ``` - -5. Common issues: - - DNS not pointing to load balancer IP - - Firewall blocking HTTP (port 80) traffic - - Ingress class not set to `nginx` - - Let's Encrypt rate limits exceeded - -### Ingress Controller Not Ready - -**Problem**: ingress-nginx pods are not running or LoadBalancer service has no external IP - -**Solution**: -1. Check ingress controller status: - ```bash - kubectl get pods -n ingress-nginx - kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller - ``` - -2. Verify LoadBalancer service: - ```bash - kubectl get svc -n ingress-nginx - kubectl describe svc ingress-nginx-controller -n ingress-nginx - ``` - -3. Check OTC load balancer annotations: - ```bash - kubectl get svc ingress-nginx-controller -n ingress-nginx -o yaml - ``` - -4. Verify environment variables are set correctly: - - `LOADBALANCER_ID` matches OTC ELB ID - - `LOADBALANCER_IP` matches ELB public IP - -5. Check OTC console for ELB configuration and health checks - -### Storage Provisioning Fails - -**Problem**: PersistentVolumeClaim remains in `Pending` state - -**Solution**: -1. Check PVC status: - ```bash - kubectl get pvc -A - kubectl describe pvc -n - ``` - -2. Verify StorageClass exists and is default: - ```bash - kubectl get storageclass - kubectl describe storageclass default - ``` - -3. Check volume provisioner logs: - ```bash - kubectl logs -n kube-system -l app=csi-disk-plugin - ``` - -4. Common issues: - - Insufficient quota in OTC project - - Invalid zone configuration (must be `eu-de-02`) - - Requested storage size exceeds limits - - Missing IAM permissions for volume creation - -### Ingress Returns 503 Service Unavailable - -**Problem**: Ingress configured but returns 503 error - -**Solution**: -1. Verify backend service exists: - ```bash - kubectl get svc -n - kubectl get endpoints -n - ``` - -2. Check if pods are ready: - ```bash - kubectl get pods -n -l - ``` - -3. Verify ingress configuration: - ```bash - kubectl describe ingress -n - ``` - -4. Check nginx ingress logs: - ```bash - kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller --tail=100 - ``` - -5. Test service connectivity from ingress controller: - ```bash - kubectl exec -n ingress-nginx -- curl http://..svc.cluster.local: - ``` - -### TLS Certificate Shows as Invalid - -**Problem**: Browser shows certificate warning or certificate details are incorrect - -**Solution**: -1. Verify certificate is ready: - ```bash - kubectl get certificate -n - ``` - -2. Check certificate contents: - ```bash - kubectl get secret -n -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout - ``` - -3. Ensure certificate covers the correct domain: - ```bash - kubectl describe certificate -n - ``` - -4. Force certificate renewal if expired or incorrect: - ```bash - kubectl delete certificate -n - # cert-manager will automatically recreate it - ``` - -## Additional Resources - -* [cert-manager Documentation](https://cert-manager.io/docs/) -* [ingress-nginx User Guide](https://kubernetes.github.io/ingress-nginx/user-guide/) -* [Open Telekom Cloud Documentation](https://docs.otc.t-systems.com/) -* [Let's Encrypt Documentation](https://letsencrypt.org/docs/) -* [Kubernetes Ingress Concepts](https://kubernetes.io/docs/concepts/services-networking/ingress/) -* [Kubernetes Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/terralist.md b/content/en/docs/edp/deployment/infrastructure/stacks/terralist.md deleted file mode 100644 index 1c62d62..0000000 --- a/content/en/docs/edp/deployment/infrastructure/stacks/terralist.md +++ /dev/null @@ -1,418 +0,0 @@ ---- -title: "Terralist" -linkTitle: "Terralist" -weight: 21 -description: > - Private Terraform Module and Provider Registry with OAuth authentication ---- - -## Overview - -Terralist is an open-source private Terraform registry for modules and providers that implements the HashiCorp registry protocol. As part of the Edge Developer Platform, Terralist enables teams to securely store, version, and distribute internal Terraform modules and providers with built-in authentication and documentation capabilities. - -The Terralist stack deploys a self-hosted instance with OAuth2 authentication, persistent storage, and integrated ingress for secure access. - -## Key Features - -* **Private Module Registry**: Securely host and distribute confidential Terraform modules and providers -* **HashiCorp Protocol Compatible**: Works seamlessly with `terraform` CLI and standard registry workflows -* **OAuth2 Authentication**: Integrated OIDC authentication supporting `terraform login` command -* **Documentation Interface**: Web UI to visualize artifacts with automatic module documentation -* **Flexible Storage**: Supports local storage or remote cloud buckets with presigned URLs -* **Git Integration**: Works with mono-repositories while leveraging Terraform version attributes -* **API Management**: RESTful API for programmatic module and provider management - -## Repository - -**Code**: [Terralist Stack Templates](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/terralist) - -**Documentation**: -* [Terralist Official Documentation](https://www.terralist.io/) -* [Terralist GitHub Repository](https://github.com/terralist/terralist) -* [Getting Started Guide](https://www.terralist.io/getting-started/) - -## Getting Started - -### Prerequisites - -* Kubernetes cluster with ArgoCD installed (provided by `core` stack) -* Ingress controller configured (provided by `otc` stack) -* cert-manager for TLS certificate management (provided by `otc` stack) -* Domain name configured via `DOMAIN_GITEA` environment variable -* OAuth2 provider configured (Dex or external provider) - -### Quick Start - -The Terralist stack is deployed as part of the EDP installation process: - -1. **Trigger Deploy Pipeline** - - Go to [Infra Deploy Pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml) - - Click on Run workflow - - Enter a name in "Select environment directory to deploy". This must be DNS Compatible. (if you enter `test-me` then the domain will be `terralist.test-me.t09.de`) - - Execute workflow - -2. **ArgoCD Synchronization** - ArgoCD automatically deploys: - - Terralist application (Helm chart v0.8.1) - - Persistent volume for module storage - - Ingress configuration with TLS - - OAuth2 credentials and configuration - -### Verification - -Verify the Terralist deployment: - -```bash -# Check ArgoCD application status -kubectl get application terralist -n argocd - -# Verify Terralist pods are running -kubectl get pods -n terralist - -# Check persistent volume claim -kubectl get pvc -n terralist - -# Verify ingress configuration -kubectl get ingress -n terralist -``` - -Access the Terralist web interface at `https://terralist.{DOMAIN_GITEA}`. - -## Architecture - -### Component Architecture - -The Terralist stack consists of: - -**Terralist Application**: -- Web interface for module and provider management -- REST API for programmatic access -- OAuth2 authentication handler -- Module documentation renderer - -**Storage Layer**: -- SQLite database for metadata and configuration -- Local filesystem storage for modules and providers -- Persistent volume with 10Gi capacity on `csi-disk` storage class -- Optional cloud bucket integration for remote storage - -**Networking**: -- Nginx ingress with TLS termination -- cert-manager integration for automatic certificate management -- OAuth2 callback endpoint configuration - -## Configuration - -### Environment Variables - -The Terralist application is configured through environment variables in `values.yaml`: - -**OAuth2 Configuration**: -- `TERRALIST_AUTHORITY_URL`: OIDC provider authority URL (from `terralist-oidc-secrets` secret) -- `TERRALIST_CLIENT_ID`: OAuth2 client identifier -- `TERRALIST_CLIENT_SECRET`: OAuth2 client secret -- `TERRALIST_TOKEN_SIGNING_SECRET`: Secret for token signing and validation - -**Storage Configuration**: -- SQLite database at `/data/database.db` -- Module storage at `/data/modules` - -### Helm Chart Configuration - -Key Helm values configured in `stacks/terralist/terralist/values.yaml`: - -```yaml -controllers: - main: - strategy: Recreate - containers: - main: - env: - - name: TERRALIST_AUTHORITY_URL - valueFrom: - secretKeyRef: - name: terralist-oidc-secrets - key: authority_url - - name: TERRALIST_CLIENT_ID - valueFrom: - secretKeyRef: - name: terralist-oidc-secrets - key: client_id - -ingress: - main: - enabled: true - className: nginx - hosts: - - host: "terralist.{DOMAIN_GITEA}" - paths: - - path: / - service: - identifier: main - annotations: - cert-manager.io/cluster-issuer: main - tls: - - secretName: terralist-tls-secret - hosts: - - "terralist.{DOMAIN_GITEA}" - -persistence: - data: - enabled: true - size: 10Gi - storageClass: csi-disk - accessMode: ReadWriteOnce -``` - -### ArgoCD Application Configuration - -**Registry Application** (`template/registry/terralist.yaml`): -- Name: `terralist-reg` -- Manages the Terralist stack directory -- Automated sync with prune and self-heal enabled - -**Stack Application** (`template/stacks/terralist/terralist.yaml`): -- Name: `terralist` -- Deploys Terralist Helm chart v0.8.1 from `https://github.com/terralist/helm-charts` -- Automated self-healing enabled -- Creates namespace automatically -- References values from `stacks-instances` repository - -## Usage Examples - -### Authenticating with Terralist - -Configure Terraform CLI to use your private registry: - -```bash -# Authenticate using OAuth2 -terraform login terralist.${DOMAIN_GITEA} - -# This opens a browser window for OAuth2 authentication -# After successful login, credentials are stored in ~/.terraform.d/credentials.tfrc.json -``` - -### Publishing a Module - -Publish a module to your private registry: - -1. **Create Module Structure** - ```bash - my-module/ - ├── main.tf - ├── variables.tf - ├── outputs.tf - └── README.md - ``` - -2. **Tag and Push via API** - ```bash - # Package module - tar -czf my-module-1.0.0.tar.gz my-module/ - - # Upload to Terralist (requires authentication token) - curl -X POST https://terralist.${DOMAIN_GITEA}/v1/modules/my-org/my-module/my-provider/1.0.0 \ - -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - -F "file=@my-module-1.0.0.tar.gz" - ``` - -### Consuming Private Modules - -Use modules from your private registry in Terraform configurations: - -```hcl -# Configure Terraform to use private registry -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 5.0" - } - } -} - -# Reference module from private registry -module "vpc" { - source = "terralist.${DOMAIN_GITEA}/my-org/vpc/aws" - version = "1.0.0" - - cidr_block = "10.0.0.0/16" - environment = "production" -} -``` - -### Browsing Module Documentation - -Access the Terralist web interface to view module documentation: - -```bash -# Open Terralist UI -open https://terralist.${DOMAIN_GITEA} - -# Browse available modules -# - View module versions -# - Read generated documentation -# - Access module sources -# - Copy usage examples -``` - -### Managing Modules via API - -```bash -# List all modules -curl -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - https://terralist.${DOMAIN_GITEA}/v1/modules - -# Get specific module versions -curl -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - https://terralist.${DOMAIN_GITEA}/v1/modules/my-org/my-module/my-provider - -# Delete a module version -curl -X DELETE -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - https://terralist.${DOMAIN_GITEA}/v1/modules/my-org/my-module/my-provider/1.0.0 -``` - -## Integration Points - -* **Core Stack**: Depends on ArgoCD for deployment orchestration -* **OTC Stack**: Requires ingress-nginx controller and cert-manager for external access and TLS -* **Dex (SSO)**: Integrates with platform OAuth2 provider for authentication -* **Forgejo Stack**: Modules can be sourced from platform Git repositories -* **Observability Stack**: Application metrics can be collected by platform monitoring tools - -## Troubleshooting - -### Terralist Pod Not Starting - -**Problem**: Terralist pod remains in `Pending` or `CrashLoopBackOff` state - -**Solution**: -1. Check persistent volume claim status: - ```bash - kubectl get pvc -n terralist - kubectl describe pvc data-terralist-0 -n terralist - ``` - -2. Verify OAuth2 credentials secret: - ```bash - kubectl get secret terralist-oidc-secrets -n terralist - kubectl describe secret terralist-oidc-secrets -n terralist - ``` - -3. Check Terralist logs: - ```bash - kubectl logs -n terralist -l app.kubernetes.io/name=terralist - ``` - -### Cannot Access Terralist UI - -**Problem**: Terralist web interface is not accessible at configured URL - -**Solution**: -1. Verify ingress configuration: - ```bash - kubectl get ingress -n terralist - kubectl describe ingress -n terralist - ``` - -2. Check TLS certificate status: - ```bash - kubectl get certificate -n terralist - kubectl describe certificate terralist-tls-secret -n terralist - ``` - -3. Verify DNS resolution: - ```bash - nslookup terralist.${DOMAIN_GITEA} - ``` - -### OAuth2 Authentication Fails - -**Problem**: `terraform login` or web authentication fails - -**Solution**: -1. Verify OAuth2 configuration in secret: - ```bash - kubectl get secret terralist-oidc-secrets -n terralist -o yaml - ``` - -2. Check OAuth2 provider (Dex) is accessible: - ```bash - curl https://dex.${DOMAIN_GITEA}/.well-known/openid-configuration - ``` - -3. Verify callback URL is correctly configured in OAuth2 provider: - ``` - Expected callback: https://terralist.${DOMAIN_GITEA}/auth/cli/callback - ``` - -4. Check Terralist logs for authentication errors: - ```bash - kubectl logs -n terralist -l app.kubernetes.io/name=terralist | grep -i auth - ``` - -### Module Upload Fails - -**Problem**: Cannot upload modules via API or UI - -**Solution**: -1. Verify authentication token is valid: - ```bash - # Test token with API call - curl -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - https://terralist.${DOMAIN_GITEA}/v1/modules - ``` - -2. Check persistent volume has available space: - ```bash - kubectl exec -n terralist -it terralist-0 -- df -h /data - ``` - -3. Verify module package format is correct: - ```bash - # Module should be a gzipped tar archive - tar -tzf my-module-1.0.0.tar.gz - ``` - -4. Review upload logs: - ```bash - kubectl logs -n terralist -l app.kubernetes.io/name=terralist --tail=50 - ``` - -### Terraform Cannot Download Modules - -**Problem**: `terraform init` fails to download modules from private registry - -**Solution**: -1. Verify authentication credentials exist: - ```bash - cat ~/.terraform.d/credentials.tfrc.json - ``` - -2. Re-authenticate if needed: - ```bash - terraform logout terralist.${DOMAIN_GITEA} - terraform login terralist.${DOMAIN_GITEA} - ``` - -3. Test module availability via API: - ```bash - curl -H "Authorization: Bearer ${TERRALIST_TOKEN}" \ - https://terralist.${DOMAIN_GITEA}/v1/modules/my-org/my-module/my-provider - ``` - -4. Check module source URL format in Terraform configuration: - ```hcl - # Correct format - source = "terralist.${DOMAIN_GITEA}/org/module/provider" - - # Not: https://terralist.${DOMAIN_GITEA}/... - ``` - -## Additional Resources - -* [Terralist Documentation](https://www.terralist.io/) -* [Terralist GitHub Repository](https://github.com/terralist/terralist) -* [Terraform Registry Protocol](https://developer.hashicorp.com/terraform/internals/module-registry-protocol) -* [Private Module Registries Guide](https://developer.hashicorp.com/terraform/registry/private) -* [ArgoCD Documentation](https://argo-cd.readthedocs.io/) diff --git a/content/en/docs/edp/deployment/infrastructure/terraform.md b/content/en/docs/edp/deployment/infrastructure/terraform.md deleted file mode 100644 index 3c0bf6c..0000000 --- a/content/en/docs/edp/deployment/infrastructure/terraform.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Terraform-based deployment of EDP -linkTitle: Terraform -weight: 10 -description: > - As-code definitions of EDP clusters, so they can be deployed reliably and consistently on OTC whenever needed. ---- - -## Overview - -The [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy) and [infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue) repositories work together to provide a framework for deploying Edge Developer Platform instances. - -`infra-catalogue` contains individual, atomic infrastructure components: `terraform` modules and `terragrunt` [units](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/units) and [stacks](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/stacks), such as [Kubernetes clusters](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/modules/kubernetes) and [Postgres databases](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/units/postgres/terragrunt.hcl). - -`infra-deploy` then contains full [definitions](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod) of stacks built using these components - such as the production site at [edp.buildth.ing](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp). It also includes [scripts](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/scripts) with which to deploy these stacks. - -Note that both repositories rely on the wide range of features available on [OTC](https://console.otc.t-systems.com). Several of these features, such as S3-compatible storage and on-demand managed Postgres instances, are not yet available on more sovereign clouds such as [Edge](https://hub.apps.edge.platform.mg3.mdb.osc.live/), so these are not currently supported. - -## Key Features - -* 'Catalogue' of infrastructure stacks to be used in deployments -* Definition of deployment stacks for each environment in prod or dev -* Scripts to govern deployment, installation and drift-correction of EDP - -## Purpose in EDP - -For our Edge Developer Platform to be reliable it must be deployable in a consistent manner. When errors occur, or after any manual alterations, the system can then be safely reset to a working state. This state should be provided in code to allow for automated validation and deployment, and to allow it to be deployed from an always-identical CI/CD pipeline rather than a variable local deployment environment. - -## Repositories - -**Infra-deploy**: [https://edp.buildth.ing/DevFW/infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy) - -**Infra-catalogue**: [https://edp.buildth.ing/DevFW/infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue) - -## Getting Started - -### Prerequisites - -* [Docker](https://docs.docker.com/) -* [Kubernetes management](https://kubernetes.io/docs/reference/kubectl/) -* Access to [OTC](https://console.otc.t-systems.com/console/) -* HashiCorp [Terraform](https://developer.hashicorp.com/terraform) or its open-source equivalent, [OpenTofu](https://opentofu.org/) -* [Terragrunt](https://terragrunt.gruntwork.io/), an orchestrator for Terraform stacks - -### Quick Start - -1. Set up OTC credentials per [README section](https://edp.buildth.ing/DevFW/infra-deploy#installation-on-otc) -2. Set cluster environment and run install script per [README section](https://edp.buildth.ing/DevFW/infra-deploy#using-the-edpbuilder) - -Alternatively, manually trigger automated [deployment pipeline](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml). -- You will be asked for essential information like the deployment name and tenant. -- Any fields marked `INITIAL` only need to be set when first creating an environment -- Thereafter, the cached values are used and the `INITIAL` values provided to the pipeline are ignored. - - Specifically, they are cached in a `terragrunt.values.hcl` file within `infra-deploy//`, where both variables are set in the pipeline - - e.g. [prod/edp](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp/terragrunt.values.hcl) or [nonprod/garm-provider-test](https://edp.buildth.ing/DevFW/infra-deploy/src/commit/189632811944d3d3bc41e26c09262de8f215f82b/non-prod/garm-provider-test/terragrunt.values.hcl) - -### Verification - -After the deploymenet completes, and a short startup time, you should be able to access your Forgejo instance at `.buildth.ing` (production tenant) or `.t09.de` (non-prod tenant). `` is the name you provided in the deployment pipeline, or the $CLUSTER_ENVIRONMENT variable when running manually. - -For example, the primary production cluster is called [edp](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp) and can be accessed at [edp.buildth.ing](https://edp.buildth.ing). - -#### Screens - -Deployment using production pipeline: - -![Running the deployment pipeline](../deploy-pipeline.png) -... -![Successful deploy pipeline logs](../deploy-pipeline-success.png) - -## Configuration - -Configuration of clusters is done in two ways. The first, mentioned above, is to provide `INITIAL` configuration when creating a new cluster. Thereafter, configuration is done within the relevant `infra-deploy/` directory (e.g. [prod/edp](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp)). Variables may be changed within the [terragrunt.values.hcl](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp/terragrunt.values.hcl) file, but equally the [terragrunt.stack.hcl](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp/terragrunt.stack.hcl) file contains references to the lower-level code set up in `infra-catalogue`. - -These are organised in layers, according to Terragrunt's natural structure. First is a [stack](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/stacks), a high-level abstraction for a whole cluster. This in turn [references](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/stacks/forgejo/terragrunt.stack.hcl) terragrunt [units](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/units), which in turn are wrappers around standard _Terraform_ [modules](https://edp.buildth.ing/DevFW/infra-catalogue/src/branch/main/modules). -When deployed, the Terraform modules require a `provider.tf` file which is automatically generated by Terragrunt using [tenant-level](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/tenant.hcl) and [global](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/root.hcl) configuration stored in `infra-deploy`. - -When deploying manually (e.g. with [install.sh](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/install.sh)), you can observe these layers as Terragrunt will cache them on your machine, within the `.terragrunt-stack/` directory generated within [/\/\/](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp). - -## Troubleshooting - -### Version updates - -**Problem**: Updates to `infra-catalogue` are not immediately reflected in deployed clusters, even after running [deploy](https://edp.buildth.ing/DevFW/infra-deploy/actions?workflow=deploy.yaml). - -**Solution**: Versions must be updated. -Each cluster deployment specifies a [catalogue version](https://edp.buildth.ing/DevFW/infra-deploy/src/commit/189632811944d3d3bc41e26c09262de8f215f82b/prod/edp/terragrunt.values.hcl#L7) in its `terragrunt.values.hcl`; this refers to a tag in [infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue/releases/tag/v2.0.6). Within `infra-catalogue`, stacks reference units and modules from the same tag. - -Thus, to test a new change to `infra-catalogue`, first make a new [tag](https://edp.buildth.ing/DevFW/infra-catalogue/tags), then update the relevant [values file](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/edp/terragrunt.values.hcl) to point to it. - - -## Status - -**Maturity**: TRL-9 - -## Additional Resources - -- [Terraform](https://developer.hashicorp.com/terraform) -- [OpenTofu](https://opentofu.org/), the community-driven replacement for Terraform -- [Terragrunt](https://terragrunt.gruntwork.io/) diff --git a/content/en/docs/edp/deployment/otc/_index.md b/content/en/docs/edp/deployment/otc/_index.md deleted file mode 100644 index d19d1b8..0000000 --- a/content/en/docs/edp/deployment/otc/_index.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Deploying to OTC -linkTitle: Deploying to OTC -weight: 100 -description: > - Open Telekom Cloud as deployment and infrastructure target ---- - -## Overview - -OTC, Open Telekom Cloud, is one of the cloud platform offerings by Deutsche -Telekom and offers GDPR compliant cloud services. The system is based on -OpenStack. - -## Key Features - -- Managed Kubernetes -- Managed services including - - Databases - - RDS PostgreSQL - - ElasticSearch - - S3 compatible storage - - DNS Management - - Backup & Restore of Kubernetes volumes and managed services - -## Purpose in EDP - -OTC is used to host core infrastructure to provide the primary, public EDP -instance and as a test bed for Kubernetes based workloads that would eventually -be deployed to EdgeConnect. - -Service components such as Forgejo, Grafana, Garm, and Coder are deployed in OTC -Kubernetes utilizing managed services for databases and storage to reduce the -maintenance and setup burden on the team. - -Services and workloads are primarily provisioned using Terraform. - -## Repository - -**Code**: - -- - Terraform modules of various - system components -- - Runs deployment worklows, - contains base configuration of deployed system instances and various - deployment scripts -- - Template of a system - configuration divided into multiple, deployable application stacks -- - System configurations - of deployed instances hydrated from the `stacks` template - -**Terraform Provider**: - -- - -**Documentation**: - -- -- - -**OTC Console** - -- - -## Managed Services - -EDP instances heavily utilize Open Telekom Cloud's (OTC) managed services to -simplify operations, enhance reliability, and allow the team to focus on -application development rather than infrastructure management. The core -components of each deployed instance run within the managed Kubernetes service. - -The following managed services are integral to EDP deployments: - -- **Cloud Container Engine (CCE)**: The managed Kubernetes service that forms - the foundation of each EDP instance, hosting all containerized core components - and workloads. -- **Relational Database Service (RDS) for PostgreSQL**: Provides scalable and - reliable PostgreSQL database instances, primarily used by applications such as - Forgejo. -- **Object Storage Service (OBS)**: Offers S3-compatible object storage for - storing backups, application data (e.g., for Forgejo), and other static - assets. -- **Cloud Search Service (CSS)**: An optional service providing robust search - capabilities, specifically used for Forgejo's indexing and search - functionalities. -- **Networking**: Essential networking components, including Virtual Private - Clouds (VPCs), Load Balancers, and DNS management, which facilitate secure and - efficient communication within the EDP ecosystem. -- **Cloud Backup and Recovery (CBR)**: Vaults are configured to automatically - back up persistent volumes created by CCE instances, ensuring data resilience - and disaster recovery readiness. diff --git a/content/en/docs/edp/deployment/otc/environments.md b/content/en/docs/edp/deployment/otc/environments.md deleted file mode 100644 index ae517d0..0000000 --- a/content/en/docs/edp/deployment/otc/environments.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: EDP Environments in OTC -linkTitle: Environments -weight: 10 -description: > - Instances of EDP are deployed into distinct OTC environments ---- - -## Architecture - -Two distinct tenants are utilized within OTC to enforce a strict separation -between production (`prod`) and non-production (`non-prod`) environments. This -segregation ensures isolated resource management, security policies, and -operational workflows, preventing any potential cross-contamination or impact -between critical production systems and development/testing activities. - -- **Production Tenant:** This tenant is exclusively dedicated to production - workloads and is bound to the primary domain `buildth.ing`. All - production-facing EDP instances and associated infrastructure reside within - this tenant, leveraging `buildth.ing` for public access and service discovery. - Within this tenant, each EDP instance is typically dedicated to a specific - customer. This design decision provides robust data separation, addressing - critical privacy and compliance requirements by isolating customer data. It - also allows for independent upgrade paths and maintenance windows for - individual customer instances, minimizing impact on other customers while - still benefiting from centralized management and deployment strategies. The - primary `edp.buildth.ing` instance and the `observability.buildth.ing` - instance are exceptions to this customer-dedicated model, serving foundational - platform roles. -- **Non-Production Tenant:** This tenant hosts all development, testing, and - staging environments, bound to the primary domain `t09.de`. This setup allows - for flexible experimentation and robust testing without impacting production - stability. - -Each tenant is designed to accommodate multiple instances of the product, EDP. -These instances are dynamically provisioned and typically bound to specific -subdomains, which inherit from their respective primary tenant domain (e.g., -`my-test.t09.de` for a non-production instance or `customer-a.buildth.ing` for a -production instance). This subdomain structure facilitates logical separation -and routing for individual EDP deployments. - - diff --git a/content/en/docs/edp/deployment/otc/instances.md b/content/en/docs/edp/deployment/otc/instances.md deleted file mode 100644 index 6b6d51d..0000000 --- a/content/en/docs/edp/deployment/otc/instances.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Managing Instances -linkTitle: Managing Instances -weight: 50 -description: > - Managing instances of EDP deployed in OTC ---- - -## Deployment Strategy - -The core of the deployment strategy revolves around the primary production EDP -instance, `edp.buildth.ing`. This instance acts as a centralized control plane -and code repository, storing all application code, configuration, and deployment -pipelines. It is generally responsible for orchestrating the deployment and -updates of most other EDP instances across both production and non-production -tenants, ensuring consistency and automation. - - - -### Circular Dependency Issue - -However, a unique circular dependency exists with `observability.buildth.ing`. -While `edp.buildth.ing` manages most deployments, it cannot manage its _own_ -lifecycle. Attempting to upgrade `edp.buildth.ing` itself through its own -mechanisms could lead to critical components becoming unavailable during the -process (e.g., internal container registries going offline), preventing the -system from restarting successfully. To mitigate this, `edp.buildth.ing` is -instead deployed and managed by `observability.buildth.ing`, with all its -essential deployment dependencies located within the observability environment. -Crucially, git repositories and other resources like container images are -synchronized from `edp.buildth.ing` to the observability instance, as -`observability.buildth.ing` itself does not produce artifacts. In turn, -`edp.buildth.ing` is responsible for deploying and managing -`observability.buildth.ing` itself. This creates a carefully managed circular -relationship that ensures both critical components can be deployed and -maintained effectively without single points of failure related to -self-management. - -## Configuration - -This section outlines the processes for deploying and managing the configuration -of EDP instances within the Open Telekom Cloud (OTC) environment. Deployments -are primarily driven by Forgejo Actions and leverage Terraform for -infrastructure provisioning and lifecycle management, adhering to GitOps -principles. - -### Deployment Workflows - -The lifecycle management of EDP instances is orchestrated through a set of -dedicated workflows within the `infra-deploy` Forgejo -[repository](https://edp.buildth.ing/DevFW/infra-deploy), hosted on -`edp.buildth.ing`. These workflows are designed to emulate the standard -Terraform lifecycle, offering `plan`, `deploy`, and `destroy` operations. - -- **Triggering Deployments**: Workflows are manually initiated and require - explicit configuration of an OTC tenant and an environment to accurately - target a specific system instance. - -- **`plan` Workflow**: - - Executes a dry-run of the proposed deployment. - - Outputs the detailed `terraform plan`, showing all anticipated - infrastructure changes. - - Shows the diff of the configuration that would be applied to the - `stacks-instances` repository, reflecting changes derived from the `stacks` - repository. - -- **`deploy` Workflow**: - - Utilized for both the initial creation of new EDP instances and subsequent - updates to existing deployments. - - For new instance creation, all required configuration fields must be - populated. - - **Important Considerations**: - - Configuration fields explicitly marked as "(INITIAL)" are foundational - and, once set during the initial deployment, cannot be altered through the - workflow without manual modification of the underlying Git configuration. - - Certain changes to the configuration may lead to extensive infrastructure - redeployments, which could potentially result in data loss if not - carefully managed and accompanied by appropriate backup strategies. - -- **`destroy` Workflow**: - - Initiates the deprovisioning and complete removal of an existing EDP system - instance from the OTC environment. - - While the infrastructure is torn down, the corresponding configuration entry - is intentionally retained within the `stacks-instances` repository for - historical tracking or potential re-creation. - -> NOTE: When deploying a new instance of EDP it is bootstrapped with random -> secrets including admin logins. Initial admin credentials for individual -> components are printed in workflow output. They can be retrieved from the -> secrets withing Kubernetes at a later point in time. - - - Deploy workflow form - - -### Configuration Management - -The configuration for deployed EDP instances is systematically managed across -several Git repositories to ensure version control, traceability, and adherence -to GitOps practices. - -- **Base Configuration**: A foundational configuration entry for each deployed - system instance is stored directly within the `infra-deploy` repository. -- **Complete System Configuration**: The comprehensive configuration for a - system instance, derived from the `stacks` template repository, is maintained - in the `stacks-instances` repository. -- **GitOps Synchronization**: ArgoCD continuously monitors the - `stacks-instances` repository. It automatically detects and synchronizes any - discrepancies between the desired state defined in Git and the actual state of - the deployed system within the OTC Kubernetes cluster. The configurations in - the `stacks-instances` repository are organized by OTC tenant and instance - name. ArgoCD monitors only the portion of the repository that is relevant to - its specific instance. diff --git a/content/en/docs/edp/deployment/otc/workflow-deploy-form.png b/content/en/docs/edp/deployment/otc/workflow-deploy-form.png deleted file mode 100644 index 5f3694f..0000000 Binary files a/content/en/docs/edp/deployment/otc/workflow-deploy-form.png and /dev/null differ diff --git a/content/en/docs/edp/documentationsystem.md b/content/en/docs/edp/documentationsystem.md deleted file mode 100644 index 1d8a337..0000000 --- a/content/en/docs/edp/documentationsystem.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Documentation System" -linkTitle: "Documentation System" -weight: 100 -description: This documentation system, built on the 'documentation as code' principle, is used internally and recommended for all development teams. ---- - -Embracing the powerful philosophy of **Documentation as Code**, the entire -documentation is authored and meticulously maintained as plain text Markdown -files. These files are stored within a Git repository, allowing for the -leveraging of version control to track changes, facilitate collaborative -contributions, and ensure a robust review process, much like source code. - -The documentation source code is hosted at -. The `README` -files within this repository provide detailed instructions on how to contribute -to and build the documentation. It is primarily powered by -[Hugo](https://gohugo.io/), a fast and flexible static site generator, which -transforms the Markdown content into a production-ready website. To enhance -clarity and understanding, sophisticated diagramming tools are integrated: -[Mermaid.js](https://mermaid.js.org/) for creating dynamic charts and diagrams -from text, and [LikeC4](https://likec4.dev/) for generating C4 model -architecture diagrams directly within the documentation. - -Changes pushed to the `main` branch of the repository automatically trigger the -continuous integration and deployment (CI/CD) pipeline. This process is -orchestrated using [Forgejo Actions](/docs/edp/forgejo/actions/), which -automates the build of the static site. Subsequently, the updated documentation -is automatically deployed to . This streamlined -workflow guarantees that the documentation is always current, accurately -reflecting the latest system state, and readily accessible to all stakeholders. diff --git a/content/en/docs/edp/forgejo/_index.md b/content/en/docs/edp/forgejo/_index.md deleted file mode 100644 index df33f90..0000000 --- a/content/en/docs/edp/forgejo/_index.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Forgejo -linkTitle: Forgejo -weight: 5 -description: Forgejo provides source code management, project management, and CI/CD automation for the EDP. ---- - -The internal service is officially designated as the Edge Developer Platform (EDP). It is hosted at **[edp.buildth.ing](https://edp.buildth.ing)**. The domain selection followed a democratic team process to establish a unique identity distinct from standard corporate naming conventions. - -![alt text](image.png) - -![alt text](image-1.png) - -## Technical Architecture & Deployment - -### Infrastructure Stack - -The platform is hosted on the **Open Telekom Cloud (OTC)**. The infrastructure adheres to Infrastructure-as-Code (IaC) principles. - -* **Deployment Method:** The official Forgejo Helm Chart is deployed via **ArgoCD**. -* **Infrastructure Provisioning:** **Terraform** is used to provision all underlying OTC services, including: - * **Container Orchestration**: CCE (Cloud Container Engine): Kubernetes - * **Database:** RDS (Distributed Cache Service): PostgreSQL - * **Caching:** DCS (Distributed Cache Service): Redis - * **Object Storage:** OBS (Object Storage Service, S3-compatible): for user data (avatars, attachments). - * **Search:** CSS (Cloud Search Service): Elasticsearch - -### The "Self-Replicating" Pipeline - -A key architectural feature is the ability of the platform to maintain itself. A Forgejo Action can trigger the deployment script, which runs Terraform and syncs ArgoCD, effectively allowing "Forgejo to create/update Forgejo." - -```mermaid -graph TD - subgraph "Open Telekom Cloud (OTC)" - subgraph "Control Plane" - Dev[DevOps Engineer] -->|Triggers| Pipeline[Deployment Pipeline] - Pipeline -->|Executes| TF[Terraform] - end - - subgraph "Provisioned Infrastructure" - TF -->|Provisions| CCE[(CCE K8s Cluster)] - TF -->|Provisions| RDS[(RDS PostgreSQL)] - TF -->|Provisions| Redis[(DCS Redis)] - TF -->|Provisions| S3[(OBS S3 Bucket)] - TF -->|Provisions| CSS[(CSS Elasticsearch)] - end - - subgraph "Application Layer (on CCE K8s)" - Pipeline -->|Helm Chart| Argo[ArgoCD] - Argo -->|Deploys| ForgejoApp[Forgejo] - end - - CCE -- Runs --> Argo - CCE -- Runs --> ForgejoApp - ForgejoApp -->|Connects| RDS - ForgejoApp -->|Connects| Redis - ForgejoApp -->|Connects| S3 - ForgejoApp -->|Connects| CSS - end -``` - -### Migration History - -The initial environment was a manual setup on the Open Sovereign Cloud (OSC). Once the automation stack (Terraform/ArgoCD) was matured, the platform was migrated to the current OTC environment. - -## Application Extensions - -### Core Functionality - -Beyond standard Git versioning, the platform utilizes: - -* **Releases:** Hosting binaries for software distribution (e.g., Edge Connect CLI). -* **CI/CD:** Extensive pipeline usage for build, test, and deployment automation. -* **Note on Issues:** While initially used, issue tracking was migrated to JIRA to align with the broader IPCEI program standards. - -### GARM (Git-based Actions Runner Manager) - -The primary technical innovation was the integration of [GARM](./actions/runner-orchestration.md) to enable ephemeral, scalable runners. This required extending Forgejo's capabilities to support GitHub-compatible runner registration and webhook events. - -## Development Methodology & Contributions - -### Workflow - -* **Branching Strategy:** Trunk-based development was utilized to ensure rapid integration. -* **Collaboration:** The team adopted **Mob Programming**. This practice proved essential for knowledge sharing and onboarding junior developers, creating a resilient and high-intensity learning environment. -* **Versions:** The platform evolved from Forgejo v7/8 to the current v11.0.3-edp1. An upgrade is pending to leverage the latest upstream GARM features. - -### Open Source Contributions - -We actively contributed our extensions back to the upstream Forgejo project in [a list of Codeberg.org pull requests](../../governance/_index.md#forgejo) - - -### Artifact Caching (Pull-Through Proxy) - -We implemented a feature allowing Forgejo to act as a pull-through proxy for remote container registries, optimizing bandwidth and build speeds. - -* [Source Code Branch: refactor-remote-registry-client](https://edp.buildth.ing/DevFW/edp-forgejo/src/branch/refactor-remote-registry-client) - -## Key Performance Indicators (KPIs) - -These KPIs measure the effectiveness of the Forgejo setup and quantify our strategic commitment to the Forgejo community. - -| KPI | Description | Target / Benchmark | -| :--- | :--- | :--- | -| **Deployment Frequency** | Frequency of successful pipeline executions. | High (Daily/On-demand) | -| **Artifact Cache Hit Rate** | Percentage of build requests served by the local Forgejo proxy. | > 90% (Reduced external traffic) | -| **Upstream Contribution** | Percentage of GARM-related features contributed back to Codeberg. | 100% (No vendor lock-in) | -| **PR Resolution Time** | Average time for upstream community review and merge. | < 14 days (Healthy collaboration) | diff --git a/content/en/docs/edp/forgejo/actions/_index.md b/content/en/docs/edp/forgejo/actions/_index.md deleted file mode 100644 index 7dbf9ed..0000000 --- a/content/en/docs/edp/forgejo/actions/_index.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Forgejo Actions -linkTitle: Forgejo Actions -weight: 10 -description: GitHub Actions-compatible CI/CD automation ---- - -## Overview - -[Forgejo Actions](https://forgejo.org/docs/next/user/actions/reference/) is a built-in CI/CD automation system that enables developers to define and execute workflows directly within their Forgejo repositories. As a continuous integration and continuous deployment platform, Forgejo Actions automates software development tasks such as building, testing, packaging, and deploying applications whenever specific events occur in your repository. - -Forgejo Actions provides [GitHub Actions similarity](https://forgejo.org/docs/latest/user/actions/github-actions/), allowing teams to easily adapt existing GitHub Actions workflows and marketplace actions with minimal or no modifications. This compatibility significantly reduces migration effort for teams transitioning from GitHub to Forgejo, while maintaining familiar syntax and workflow patterns. - -Workflows are defined using YAML files stored in the `.forgejo/workflows/` directory of your repository. Each workflow consists of one or more jobs that execute on action runners when triggered by repository events such as pushes, pull requests, tags, or manual dispatch. This enables automation of repetitive development tasks, ensuring consistent build and deployment processes across your software delivery pipeline. - -By integrating CI/CD directly into the repository management platform, Forgejo Actions eliminates the need for external CI/CD systems, reducing infrastructure complexity and providing a unified development experience. - -## Key Features - -* **Automated Workflow Execution** - Execute automated workflows triggered by repository events such as code pushes, pull requests, tag creation, or manual dispatch, enabling continuous integration and deployment without manual intervention -* **GitHub Actions Similarity** - Maintains similarity with GitHub Actions syntax and workflows, allowing reuse of existing actions from the GitHub marketplace and simplifying migration from GitHub-based CI/CD pipelines - -## Purpose in EDP - -Forgejo Actions enables EDP customers to execute complete CI/CD pipelines directly on the platform for building, testing, packaging, and deploying software. This integrated automation capability is fundamental to the EDP value proposition. - -Without native CI/CD automation, customers would face significant integration overhead connecting external CI/CD systems to their EDP workflows. This fragmentation would complicate pipeline management, increase operational complexity, and reduce the platform's effectiveness as a unified development solution. - -Since Forgejo Actions is natively integrated into Forgejo, EDP provides this critical CI/CD capability with minimal additional infrastructure. Customers benefit from seamless automation without requiring separate tool provisioning, authentication configuration, or cross-system integration maintenance. - -## Getting Started - -### Prerequisites - -* Installed Forgejo -* Installed Forgejo runner (see [Runner Installation Quick Start](/docs/edp/forgejo/actions/runners/#quick-start)) - -### Quick Start - -1. Create a repository -2. Create file `/.forgejo/workflows/example.yaml` - -```yaml -# example.yaml -name: example - -on: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Hello World - run: | - echo "Hello World!" -``` - -1. Navigate to Actions > example.yaml > Run workflow - -### Verification - -See the logs, there should appear a "Hello World!" in "Hello World" Step - -## Usage Examples - -### Use actions to deploy infrastructure - -See [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/.github/workflows/deploy.yaml) repository as a example - -### Use goreleaser to build, test, package and release a project - -This pipeline is triggered when a tag with the prefix `v` is pushed to the repository. -Then, it fetches the current repository with all tags and checks out the version for the current run. - -After that the application is being built. - -```yaml -# .github/workflows/release.yaml -name: ci - -on: - push: - tags: - - v* - -jobs: - goreleaser: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version: ">=1.25.1" - - name: Test code - run: make test - - name: Import GPG key - id: import_gpg - uses: https://github.com/crazy-max/ghaction-import-gpg@v6 - with: - gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} - passphrase: ${{ secrets.GPG_PASSPHRASE }} - - name: Run GoReleaser - uses: https://github.com/goreleaser/goreleaser-action@v6 - env: - GITEA_TOKEN: ${{ secrets.PACKAGES_TOKEN }} - GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} - with: - args: release --clean -``` - -## Troubleshooting - -### The job is not being executed by a runner - -**Problem**: The job is not being picked up by a runner - -**Solution**: Probably, there is currently no runner available with the label defined in your job `runs-on` attribute. Check the available runner for your repository by navigating to the repository settings > Actions > Runners. Now you can see all available runners and their Labels. Choose on of them as your `runs-on` attribute. - -## Status - -**Maturity**: Production - -## Additional Resources - -* [Forgejo Actions](https://forgejo.org/docs/next/user/actions/reference/) -* [GitHub Actions](https://github.com/features/actions) -* [GitHub Actions similarity](https://forgejo.org/docs/latest/user/actions/github-actions/) diff --git a/content/en/docs/edp/forgejo/actions/runners/_index.md b/content/en/docs/edp/forgejo/actions/runners/_index.md deleted file mode 100644 index f54a8e4..0000000 --- a/content/en/docs/edp/forgejo/actions/runners/_index.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: Runners -linkTitle: Runners -weight: 20 -description: > - Self-hosted runner infrastructure with orchestration capabilities ---- - -## Overview - -Action runners are the execution environment for Forgejo Actions workflows. By design, runners execute remote code submitted through CI/CD pipelines, making their architecture highly dependent on the underlying infrastructure and security requirements. - -The primary objective in any runner setup is the separation and isolation of individual runs. Since runners are specifically built to execute arbitrary code from repositories, proper isolation is critical to prevent data and secret leakage between different pipeline executions. Each runner must be thoroughly cleaned or recreated after every job to ensure no residual data persists that could compromise subsequent runs. - -Beyond isolation concerns, action runners represent high-value targets for supply chain attacks. Runners frequently compile, build, and package software binaries that may be distributed to thousands or millions of end users. Compromising a runner could allow attackers to inject malicious code directly into the software supply chain, making runner security a critical consideration in any deployment. - -This document explores different runner architectures, examining their security characteristics, operational trade-offs, and suitability for various infrastructure environments and showing off an example deployment using a Containerized Kubernetes environment. - -## Key Features - -* Consistent environment for Forgejo Actions -* Primary location to execute code e.g. deployments -* Good [security practices](/docs/edp/forgejo/actions/runners/garm/) essential due to broad remit - -## Purpose in EDP - -A actions runner are executing Forgejo actions, which can be used to build, test, package and deploy software. To ensure that EDP customers do not need to provision their own action runners with high efford, we provide globally registered actions runners to pick up jobs. - -## Repository - -**Code**: - -* [Runner on edge connect using GARM](https://edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/src/branch/main/runner) -* [Static runner](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo/forgejo-runner/dind-docker.yaml) - -**Documentation**: [Forgejo Runner installation guide](https://forgejo.org/docs/latest/admin/actions/runner-installation/) - -## Runner Setups - -Different runner deployment architectures offer varying levels of isolation, security, and operational complexity. The choice depends on your infrastructure capabilities, security requirements, and operational overhead tolerance. - -### On Bare Metal - -Bare metal runners execute directly on physical hardware without virtualization layers. - -**Advantages:** - -* Maximum performance with direct hardware access -* Complete hardware isolation between different physical machines -* No hypervisor overhead or virtualization complexity - -**Disadvantages:** - -* Difficult to clean after each run, requiring manual intervention or full OS reinstallation -* Long provisioning time for individual runners -* Complex provisioning processes requiring physical access or remote management tools -* Limited scalability due to physical hardware constraints -* Higher risk of persistent contamination between runs - -**Use case:** Best suited for specialized workloads requiring specific hardware, performance-critical builds, or environments where virtualization is not available. - -### On Virtual Machines - -VM-based runners operate within virtualized environments managed by a hypervisor. - -**Advantages:** - -* Strong isolation through hypervisor and hardware memory mapping -* Virtual machine images enable faster provisioning compared to bare metal -* Easy to snapshot, clone, and restore to clean states -* Better resource utilization through multiple VMs per physical host -* Automated cleanup by destroying and recreating VMs after each run - -**Disadvantages:** - -* Requires hypervisor infrastructure and management -* Slower provisioning than containers -* Higher resource overhead compared to containerized solutions -* More complex orchestration for scaling runner fleets - -**Use case:** Ideal for environments requiring strong isolation guarantees, multi-tenant scenarios, or when running untrusted code from external contributors. - -### In Containerized Environment - -Container-based runners execute within isolated containers using OCI-compliant runtimes. - -**Advantages:** - -* Kernel-level isolation using Linux namespaces and cgroups -* Fast provisioning and startup times -* Easy deployment through standardized OCI container images -* Lightweight resource usage enabling high-density runner deployments -* Simple orchestration with Kubernetes or Docker Compose - -**Disadvantages:** - -* Weaker isolation than VMs since containers share the host kernel -* Requires elevated permissions or privileged access for certain workflows (e.g., Docker-in-Docker) -* Potential kernel-level vulnerabilities affect all containers on the host -* Container escape vulnerabilities pose security risks in multi-tenant environments - -**Use case:** Best for high-volume CI/CD workloads, trusted code repositories, and environments prioritizing speed and efficiency over maximum isolation. - -## Getting Started - -### Prerequisites - -* Forgejo instance -* Runner registration token has been generated for a given scope - * Global runners in `admin settings > actions > runner > Create new runner` - * Organization runners in `organization settings > actions > runner > Create new runner` - * Repository runners in `repository settings > actions > runner > Create new runner` -* Kubernetes cluster - -### Quick Start - -1. Download [Kubernetes manifest](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo/forgejo-runner/dind-docker.yaml) -2. Replace `${RUNNER_SECRET}` with the runner registration token -3. Replace `${RUNNER_NAME}` with the name the runner should have -4. Replace `${FORGEJO_INSTANCE_URL}` with the instance url -5. (if namespace does not exists) `kubectl create ns gitea` -6. Run `kubectl apply -f ` - -### Verification - -Take a look at the runners page, where you generated the token. There should be 3 runners in idle state now. - -### Sequence Diagrams - -```mermaid ---- -title: Forgejo Runner executed in daemon mode ---- -sequenceDiagram - Runner->>Forgejo: Register runner - loop Job Workflow - Runner->>Forgejo: Fetch job - Runner->>Runner: Work on job - Runner->>Forgejo: Send result - end -``` - -### Deployment Architecture - -[Add infrastructure and deployment diagrams showing how the component is deployed] - -## Configuration - -There is a sophisticated [configuration file](https://forgejo.org/docs/latest/admin/actions/runner-installation/#configuration), where finetuning can be done. -The most important thing is done by using labels to define the execution environment. - -The label `ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-22.04` (as used in [example runner](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo/forgejo-runner/dind-docker.yaml)). That a job that uses `ubuntu-latest` label will be executed as docker container inside the `ghcr.io/catthehacker/ubuntu:act-22.04` image. - -Alternatives to `docker` are [`lxc`](https://forgejo.org/docs/latest/admin/actions/security/#job-containers-w-lxc) and [`host`](https://forgejo.org/docs/latest/admin/actions/security/#execution-on-host-host). - -## Troubleshooting - -### In containerized environments, I want to build container images - -**Problem**: In containerized environment, containers usually do not have many privileges. To start or build containers additional privleges, usually root is required inside of the kernel, the container runtime needs to manage linux namespaces and cgroups. - -**Solution**: A partial solution for this is `buildkitd` utilizing `rootlesskit`. This allows containers to be **built** (but not run) in a non root environment. Several examples can be found in the [official buildkit repo](https://github.com/moby/buildkit/tree/master/examples/kubernetes). - -***Rootless vs User namespaces:*** - -As of Kubernetes 1.33, uid mapping can be enabled for pods using `pod.spec.hostUsers: false` utilizing user namespaces to map user and group ids between the container ids (0-65535) to high host ids (0-65535 + n * 65536) where n is an arbitrary number of containers. This allows that the container runs with actual root permission in its user namespace without being root on the host system. - -Rootless is considered the more secure version, as the executable is mapped to a privileged entitiy at all. - -## Status - -**Maturity**: Beta - -## Additional Resources - -* [Forgejo Runner installation guide](https://forgejo.org/docs/latest/admin/actions/runner-installation) -* [Static Runners on Kubernetes](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo/forgejo-runner/dind-docker.yaml) -* [Runner Orchestartion using GARM on Edge Connect](../runner-orchestration) diff --git a/content/en/docs/edp/forgejo/actions/runners/garm.md b/content/en/docs/edp/forgejo/actions/runners/garm.md deleted file mode 100644 index 75e1896..0000000 --- a/content/en/docs/edp/forgejo/actions/runners/garm.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Orchestration with GARM -linkTitle: Orchestration with GARM -weight: 30 -description: Using GARM to manage short-lived Forgejo runners ---- - -## Overview - -GARM provides on-demand runner orchestration for Forgejo Actions through dynamic autoscaling. As Forgejo has similar API structure to Gitea (from which it was forked), GARM's Gitea/GitHub compatibility makes it a natural fit for automated runner provisioning. GARM supports custom providers, enabling runner infrastructure deployment across multiple cloud and infrastructure platforms. - -A custom edge-connect provider was implemented for GARM to enable infrastructure provisioning. Additionally, Forgejo was adapted to align more closely with Gitea's API, ensuring seamless integration with GARM's orchestration capabilities. - -## Key Features - -* Autoscales Forgejo Actions runners dynamically based on workload demand -* Leverages edge-connect infrastructure for distributed runner provisioning - -## Purpose in EDP - -- Provides CI/CD infrastructure for all software development projects -- Enhances the EDP platform capabilities through improved Forgejo automation -- Enables teams to focus on development by consuming platform-managed runners without capacity planning concerns - -## Repository - -**Code**: -- [GARM Provider for Edge Connect](https://edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect) -- [GARM deploy script](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/scripts/local-helm.sh) -- [GARM deploy manifests](https://edp.buildth.ing/DevFW/garm-deploy.git) - -## Getting Started - -### Prerequisites - -* Container Runtime installed (e.g. docker) -* Forgejo, Gitea or Github - -### Quick Start - -1. Clone the [GARM Provider repository](https://edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/) -2. Build the Docker image: `docker buildx build -t .` -3. Push the image to your container registry -4. Deploy GARM using the [deployment script](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/scripts/local-helm.sh) from the [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy) repository, targeting your Kubernetes cluster: `./local-helm.sh --garm` - -### Verification - -- Verify the GARM pod is running: `kubectl get pods -n garm` -- Retrieve the GARM domain endpoint: `kubectl get ing -n garm` -- Get the GARM admin password: `kubectl get secret -n garm garm-credentials -o json | jq .data.GARM_ADMIN_PASSWORD -r | base64 -d` -- Configure endpoints, credentials, repositories, and runner pools in GARM as described in [TODO](TODO) - -## Integration Points - -* **Forgejo**: Picks up pending action jobs, listen in Forgejo -* **Edge Connect**: Uses this infrastructure to deploy runners that can pick up open jobs in forgejo - -## Architecture - -The primary technical innovation was the integration of **[GARM](https://github.com/cloudbase/garm)** to enable ephemeral, scalable runners. This required extending Forgejo's capabilities to support GitHub-compatible runner registration and webhook events. - -**Workflow Architecture:** - -1. **Event:** A workflow event occurs in Forgejo. -2. **Trigger:** A webhook notifies GARM. -3. **Provisioning:** GARM spins up a fresh, ephemeral runner. -4. **Execution:** The runner registers via the API, executes the job, and is terminated immediately after, ensuring a clean build environment. - -```mermaid -sequenceDiagram - participant User - participant Forgejo - participant GARM - participant Runner as Ephemeral Runner - - User->>Forgejo: Push Code / Trigger Event - Forgejo->>GARM: Webhook Event (Workflow Dispatch) - GARM->>Forgejo: Register Runner (via API) - GARM->>Runner: Spin up Instance - Runner->>Forgejo: Request Job - Forgejo->>Runner: Send Job Payload - Runner->>Runner: Execute Steps - Runner->>Forgejo: Report Status - GARM->>Runner: Terminate (Ephemeral) -``` -### Sequence Diagrams - -The diagram below shows how a trigger of an action results in deployment of a runner on edge-connect. - -{{}} - -### Deployment Architecture - -{{}} - -## Configuration - -### Provider Setup - -The config below configures an external provder for garm. Especially important is the `provider.external.config_file` which refers to the configuration of the external provider (example below) and `provider.external.provider_executable` which needs to point to the provider executable. - - -```config.toml -# config.toml -... -[[provider]] -name = "edge-connect" -description = "edge connect provider" -provider_type = "external" - -[provider.external] -config_file = "/etc/garm/edge-connect-provider-config.toml" -provider_executable = "/opt/garm/providers.d/garm-provider-edge-connect" -environment_variables = ["EDP_EDGE_CONNECT_"] -``` - -```edge-connect-provider-config.toml -# edge-connect-provider-config.toml -log_file = "/garm/provider.log" -credentials_file = "/etc/garm-creds/credentials.toml" # to authenticate agains edge_connect.url - -[edge_connect] -organization = "edp-developer-framework" -region = "EU" -url = "https://hub.apps.edge.platform.mg3.mdb.osc.live" -default_flavor = "EU.small" - -[edge_connect.cloudlet] -name = "Munich" -organization = "TelekomOP" -``` - -```credentials.toml -# credentials.toml for edge connect platform -username = "" -password = "" -``` - -### Runner Pool Configuration - -Once the configuration is in place and garm has been deployed. You can connect garm to Forgejo/Gitea/Github, using the commands below. If you have a forgejo instance, you want to create a gitea endpoint. - -```sh -# https://edp.buildth.ing/DevFW/garm-deploy/src/branch/master/helm/garm/templates/init-job.yaml#L39-L56 -garm-cli init --name gitea --password ${GARM_ADMIN_PASSWORD} --username ${GARM_ADMIN_USERNAME} --email ${GARM_ADMIN_EMAIL} --url ${GARM_URL} -if [ $? -ne 0 ]; then - echo "garm maybe already initialized" - exit 0 -fi - -# API_GIT_URL=https://garm-provider-test.t09.de/api/v1 -# GIT_URL=https://garm-provider-test.t09.de -garm-cli gitea endpoint create \ ---api-base-url ${API_GIT_URL} \ ---base-url ${GIT_URL} \ ---description "My first Gitea endpoint" \ ---name local-gitea - -garm-cli gitea credentials add \ ---endpoint local-gitea \ ---auth-type pat \ ---pat-oauth-token $GITEA_TOKEN \ ---name autotoken \ ---description "Gitea token" -``` - -Now, connect to the WebUI, use `GARM_ADMIN_USERNAME` and `GARM_ADMIN_PASSWORD` as credentials to authenticate. Click on repositories and - -## Status - -**Maturity**: Beta - -## Additional Resources - -* [GARM repository](https://github.com/cloudbase/garm) - * [How to use](https://github.com/cloudbase/garm/blob/main/doc/using_garm.md) diff --git a/content/en/docs/edp/forgejo/image-1.png b/content/en/docs/edp/forgejo/image-1.png deleted file mode 100644 index d247705..0000000 Binary files a/content/en/docs/edp/forgejo/image-1.png and /dev/null differ diff --git a/content/en/docs/edp/forgejo/image.png b/content/en/docs/edp/forgejo/image.png deleted file mode 100644 index 944674e..0000000 Binary files a/content/en/docs/edp/forgejo/image.png and /dev/null differ diff --git a/content/en/docs/edp/forgejo/project-mgmt.md b/content/en/docs/edp/forgejo/project-mgmt.md deleted file mode 100644 index 01fb113..0000000 --- a/content/en/docs/edp/forgejo/project-mgmt.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Project Management in Forgejo -linkTitle: Project Management -weight: 50 -description: > - Organization-level project and issue management ---- - -{{% alert title="Discontinued Feature" color="warning" %}} -This feature was implemented at a prototype level but never reached production readiness. Development was discontinued in favor of other platform priorities. -{{% /alert %}} - -## Overview - -This was an attempt to extend Forgejo's project and issue management capabilities beyond the repository level. The goal was to enable organizations and users to create projects and issues that could span multiple repositories or exist independently of any repository. - -## Problem Statement - -Forgejo's issue management is repository-centered. While this works well for code-specific issues, it creates challenges for broader project management: - -* **Cross-repository work**: Tasks often span multiple repositories but must be artificially tied to one -* **Non-code projects**: Some projects don't map cleanly to a repository (e.g., planning, documentation initiatives) -* **Related repositories**: Symbiotically related repos would benefit from shared issue tracking - -Real-world examples: -* Upstream: [forgejo-actions-feature-requests](https://code.forgejo.org/forgejo/forgejo-actions-feature-requests) - arguably doesn't need repository/code functionality -* EDP: [infra-deploy](https://edp.buildth.ing/DevFW/infra-deploy) and [infra-catalogue](https://edp.buildth.ing/DevFW/infra-catalogue) - symbiotically related projects - -## Implementation Status - -**Status**: Prototype level - basic operations work but not production-ready - -**What was built:** -* Projects can be created at the organization/user level (not tied to repositories) -* Issues can be created within these organization-level projects -* Issues can be moved between columns within any projects -* Basic Create and View Issue pages function without errors - -**What was incomplete:** -* Several features on Create/View pages disabled rather than adapted, e.g. due dates -* Repository-specific features (tags, code reviews, etc.) not resolved for org-level context -* Broader issue management features not yet functional - -## Discontinuation - -Development was discontinued due to: -* Project priorities shifted to other platform features -* Scope of remaining work deemed too large for the anticipated value -* Concerns about maintaining a custom feature divergent from upstream Forgejo - -## Repository - -**Code**: [edp-forgejo](https://edp.buildth.ing/DevFW/edp-forgejo) (Remark: You must be logged into edp.buildth.ing as the repo is internal) - -This is a fork of upstream Forgejo with the organization-level project management changes. The fork is based on Forgejo v11.x (upstream has progressed to at least v13.x). - -**Implementation**: Changes to both UI (in TypeScript) and server-side (Golang) functionality. - -## Technical Approach - -The implementation involved: -* Minimally modifying Forgejo's data model to associate projects with organizations/users instead of repositories -* Adapting issue creation and display logic to work without repository context -* Addressing repository-specific settings (labels, milestones, code review integration) for org-level issues -* UI changes to support project creation and issue management at the organization level - -## Integration Points - -This feature was developed as an isolated extension to Forgejo. Its code is within the `edp-forgejo` repository alongside other EDP updates - such as magenta colour scheme - but in terms of functionality has minimal overlap/links with other EDP components. - -## Lessons Learned - -* Repository-centric design is deeply embedded in Forgejo's architecture -* Maintaining custom features in a fork creates significant maintenance burden -* The scope of fully-functional cross-repository project management is substantial - * This is related to Issues and Repositories being two of the most extensive features in Forgejo -* Alternative approaches (using dedicated project management tools, or simply 'shell' repositories) may be more sustainable -* Clear buy-in is needed for the long term in order to make a change like this viable diff --git a/content/en/docs/edp/operations/_index.md b/content/en/docs/edp/operations/_index.md deleted file mode 100644 index 18475b8..0000000 --- a/content/en/docs/edp/operations/_index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Operations" -linkTitle: "Operations" -weight: 40 -description: > - Operational guides for deploying, monitoring, and maintaining the Edge Developer Platform components. ---- - -## Operations Overview - -This section outlines some of the operational aspects of the Edge Developer -Platform (EDP). The approach emphasizes a "developer operations" mode, primarily -focusing on monitoring and issue resolution rather than traditional operations. - -## Deployments - -### EDP Clusters - -For details on deploying instances of EDP on OTC, see -[this](/docs/edp/deployment/otc/) section. - -#### Further Infrastructural References - -- OTC Documentation: - - [IPCEI-CIS Confluence - OTC](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1000105031/OTC) - -### Edge Connect - -The `edge` and `orca` clouds within Edge Connect serve as deployment targets for -EDP applications. These environments are [Gardener](https://gardener.cloud/) -Kubernetes clusters. - -For general use, interaction with Edge Connect is intended via its web UI: - - -![Edge Hub](edge-hub.png) - -#### Further Infrastructural References - -![Gardener](gardener.png) - -Cluster-level access is available for addressing operational issues. Details on -obtaining access are provided in the following resources: - -- [IPCEI-CIS Confluence - Edge Cloud](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1122869593/Edge+Cloud) -- [IPCEI-CIS Jira - Edge Cloud Access](https://jira.telekom-mms.com/browse/IPCEICIS-6222?focusedId=3411527&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-3411527) -- **Hint:** To authenticate and obtain the cluster `kubectl` context, retrieve - the `kubeconfig` for the `platform` from your Gardener Account Settings. Then, - execute: - ```bash - gardenctl target --garden mg3 --project platform --shoot edge - ``` - -## Monitoring & Observability - -The `observability.buildth.ing` [cluster](https://observability.buildth.ing/) within the Prod OTC [tenant](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/prod/observability) is designated -for monitoring platform stacks, with visualization primarily through -[Grafana](https://grafana.observability.buildth.ing). Currently, a formal -operational monitoring lifecycle with defined metrics and alerts is not fully -established, reflecting the current developer-centric operational mode. - -Login credentials can be found in the `grafana-admin-credentials` secret within the cluster. - -> NOTE: The deployed stacks are depending on the `is_observability` flag setting (to include extra components for observability) in the `deploy` workflow within the `infra-deploy` repository. - -![EDP Grafana Dashboard](edp-grafana.png) - -## Maintenance - -EDP maintenance follows an issue-driven strategy. - -### Updates & Upgrades - -Updates are performed on-demand for individual components in -[stacks](/docs/edp/deployment/infrastructure/stacks/). - -### Backup & Recovery - -Customer data within EDP is regularly backed up. Refer to -[IPCEICIS-5017](https://jira.telekom-mms.com/browse/IPCEICIS-5017) for details. diff --git a/content/en/docs/edp/operations/edge-hub.png b/content/en/docs/edp/operations/edge-hub.png deleted file mode 100644 index d272307..0000000 Binary files a/content/en/docs/edp/operations/edge-hub.png and /dev/null differ diff --git a/content/en/docs/edp/operations/edp-grafana.png b/content/en/docs/edp/operations/edp-grafana.png deleted file mode 100644 index 97600b1..0000000 Binary files a/content/en/docs/edp/operations/edp-grafana.png and /dev/null differ diff --git a/content/en/docs/edp/operations/gardener.png b/content/en/docs/edp/operations/gardener.png deleted file mode 100644 index d4a6ab9..0000000 Binary files a/content/en/docs/edp/operations/gardener.png and /dev/null differ diff --git a/content/en/docs/edp/operations/otc-hub.png b/content/en/docs/edp/operations/otc-hub.png deleted file mode 100644 index 60a70fd..0000000 Binary files a/content/en/docs/edp/operations/otc-hub.png and /dev/null differ diff --git a/content/en/docs/governance/_index.md b/content/en/docs/governance/_index.md deleted file mode 100644 index f059879..0000000 --- a/content/en/docs/governance/_index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Governance" -linkTitle: "Governance" -weight: 100 -description: > - Project history, decision context, and audit-oriented traceability (primary sources and evidence). ---- - -## Governance Overview - -This chapter is publicly accessible, but it is written from within the IPCEI-CIS project context and therefore builds heavily on internal shared understanding. - -Most terminology, references, and primary sources in this chapter are internal (e.g., Confluence, Jira). Access and context are assumed. - -Primary intended audience: - -- IPCEI-CIS auditors -- IPCEI-CIS project management -- Project leads of other IPCEI-CIS sub-projects -- IPCEI-CIS central architecture - diff --git a/content/en/docs/governance/compliance-audit/_index.md b/content/en/docs/governance/compliance-audit/_index.md deleted file mode 100644 index 5b112cf..0000000 --- a/content/en/docs/governance/compliance-audit/_index.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: "Compliance & audit" -linkTitle: "Compliance" -weight: 30 -description: > - Technology choices, auditability, and external relations. ---- - -## Technology Choices - -Documentation of technology evaluation and selection process for key components (e.g., VictoriaMetrics, GARM, Terraform, ArgoCD). - -### Forgejo - -The internal service is officially designated as the [Edge Developer Platform (EDP)](/docs/edp/forgejo/). It is hosted at **[edp.buildth.ing](https://edp.buildth.ing)**. The domain selection followed a democratic team process to establish a unique identity distinct from standard corporate naming conventions. - -**Solution selection:** - -The decision to utilize **[Forgejo](https://forgejo.org/)** as the core self-hosted Git service was driven by specific strategic requirements: - -- **EU-Based Stewardship:** Forgejo is stewarded by **[Codeberg e.V.](https://docs.codeberg.org/getting-started/what-is-codeberg/)**, a non-profit organization based in Berlin, Germany. This alignment ensures compliance with GDPR and data sovereignty requirements, placing governance under EU jurisdiction rather than US tech entities. -- **License Protection (GPL v3+):** Unlike "Open Core" models, Forgejo uses a copyleft license. This legally protects custom extensions developed in this project (such as GARM support) from being appropriated into proprietary software, ensuring the ecosystem remains open. -- **Open Source Strategy:** The platform aligns with the "Public Money, Public Code" philosophy, mandating that funded developments are returned to the community. - -**Access Model:** - -The platform operates on a hybrid visibility model: - -- **Public Access:** The [`DEVFW-CICD`](https://edp.buildth.ing/DevFW-CICD) organization is publicly accessible, fostering transparency. -- **Private Access:** Sensitive development occurs in restricted organizations (e.g., [`DEVFW`](https://edp.buildth.ing/DevFW)). -- **User Base:** Primary users include the internal development team, with friendly user access granted to the IPCEI team and MMS BT. - -## Ticket References - -Cross-references to Jira tickets, epics, and project tracking for audit trails. - -Current, evidence-backed anchors: - -- PoC “parts” and hands-on scope are anchored in Jira and listed explicitly in the PoC design README (see Traceability / Ticket anchors). -- PoC consolidation and governance intent (“traces from tickets to outputs”) is described in the team-process documentation. -- The Forgejo ProjectMgmt prototype documents how tickets, milestones, and boards were structured in Forgejo to run demo slices and work packages. - -## Open Source Contributions - -Contributions to the Forgejo community and other open-source projects. - -### Forgejo - -Project extensions were contributed upstream to the Forgejo project on **[Codeberg.org](https://codeberg.org/)**. - -**Key Pull Requests:** - -- **API Compatibility:** Added GitHub-compatible endpoints for runner registration. - - [PR #9409: Feat: Add endpoints for GARM](https://codeberg.org/forgejo/forgejo/pulls/9409) -- **Webhook Support:** Implemented webhook triggers for workflow events. - - [PR #9803: Feat: Add webhook support for workflow events](https://codeberg.org/forgejo/forgejo/pulls/9803) -- **Ephemeral Runners:** Added support for runners that terminate after a single job. - - [PR #9962: Feat: Support for ephemeral runners](https://codeberg.org/forgejo/forgejo/pulls/9962) - -## External Stakeholders - -From the beginning, the project used structured stakeholder formats to collect requirements, validate assumptions, and strengthen a product-development mindset beyond “pure delivery”. - -Evidence (internal only): - -- Stakeholder workshop planning and target groups are captured in Confluence: [eDF Stakeholder Workshops](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/902567168/eDF+Stakeholder+Workshops) (internal/external workshops, goals, and intended outcomes). -- A concrete external workshop session is documented in Confluence: [external stakeholder workshop](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/936478033/external+stakeholder+workshop) (incl. agenda attachment). Note: the page explicitly contains AI-generated content and should be verified. -- An internal workshop session with detailed agenda and feedback is documented in Confluence: [internal stakeholder workshop 7.11.](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/915155061/internal+stakeholder+workshop+7.11.) (also includes AI-generated summary blocks). - -### Key decisions and learnings (PII-free synthesis) - -The workshop and research artifacts consistently point to a few pragmatic decisions and product learnings (summarized here without personal data[^pii-free]): - -- **Onboarding is a primary adoption gate:** prioritize low cognitive load, clear guidance, and a “cold start” path that works without prior context (captured in the Customer Engagement plan and related onboarding-focused activities). -- **Treat navigation and information architecture as product work:** “too many clicks”, missing global orientation cues, and inconsistent navigation were recurring friction points; prioritization leaned towards making “projects / work” more discoverable and first-class (see UX insights log for navigation/IA patterns). -- **Forgejo PM & Docs need either redesign or deliberate scope boundaries:** modern PM/docs workflows and stakeholder reporting expectations were a known gap; this informed decisions about prototyping and scoping improvements vs. relying on integrations. -- **Expect a tension between autonomy and guardrails:** research highlights that developer autonomy is valued while guardrails increase trust and repeatability; positioning matters because “platform” concepts can be perceived as top-down control if not framed carefully. -- **Institutionalize UX feedback loops:** beyond ad-hoc workshops, the work moved towards a repeatable research cadence (panel/community, surveys, and insight logging) to reduce “one-off feedback” risk. -- **Automated UX testing was formalized as a concrete use case:** a dedicated “use case identification” artifact structures automated UX testing around functional correctness, visual consistency/accessibility, and task-based end-to-end “happy path” flow checks (used as input for the later UX work package stream). - -[^pii-free]: PII = “personally identifiable information”. “PII-free synthesis” means summarizing patterns, decisions, and learnings without including names, participant lists, direct quotes, or other details that could identify individuals. - -Later, a dedicated “user experience” focus was strengthened and formalized via a dedicated work package / deliverable stream that explicitly frames UX validation as an activity with objectives, KPIs, and user validation: - -- Work package definition and objectives: [Workpackage e.3 - Sustainable-edge-management-optimized user interface for edge developers](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1165704046/Workpackage+e.3+-+Sustainable-edge-management-optimized+user+interface+for+edge+developers) -- Deliverable (incl. PoC results summary around autonomous UI/UX testing and “happy path” user flows): [Deliverable D66 - Sustainable-edge-management-optimized user interface for edge developers](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1165704082/Deliverable+D66+-+Sustainable-edge-management-optimized+user+interface+for+edge+developers) - -See also: the central [References](/docs/governance/references/) index. diff --git a/content/en/docs/governance/project-history/_index.md b/content/en/docs/governance/project-history/_index.md deleted file mode 100644 index 3b18f45..0000000 --- a/content/en/docs/governance/project-history/_index.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: "Project history" -linkTitle: "History" -weight: 10 -description: > - Mandate, phases, milestones, and process evolution. ---- - -## Mandate and product vision - -Within the IPCEI-CIS work package for an Edge Developer Framework, the goal of the Developer Framework / EDP effort is to provide services that enable teams to develop, validate, roll out and operate applications efficiently across the edge cloud continuum. - -The initial product framing emphasized: - -- A coherent developer experience spanning development, testing, validation, rollout, monitoring and (eventually) billing. -- Reuse through templates and "golden paths". -- A portal-centric interaction model where developers consume platform capabilities via stable APIs and UI, not ad-hoc cluster access. - -Primary source (internal only): [Confluence: Sub Project Developer Framework](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/856788263/Sub+Project+Developer+Framework) - -## Phases and milestones - -The following phase model is derived from the documented primary sources referenced in this chapter (Confluence and the referenced repositories). The phrasing focuses on “what changed and why”; it is not a release plan. - -Terminology: In this chapter, “Repository” refers to concrete Git repositories used as evidence sources. Unless stated otherwise: - -- “Repository (this docs repo)” means this documentation repository (“website-and-documentation”), including `/docs-old/`. -- “Repository (edp-doc)” means the EDP technical documentation repository at (internal only) [edp.buildth.ing/DevFW/edp-doc](https://edp.buildth.ing/DevFW/edp-doc). -- “Confluence” refers to the IPCEI-CIS Confluence space on `confluence.telekom-mms.com` (internal only). - -It does not refer to the wider set of platform/service code repositories unless explicitly stated. - -### Phase 1 — Discovery & system design (2024) - -Focus: - -- Establish a reference architecture for an Internal Developer Platform (IDP) style solution. -- Evaluate IDP foundations (explicitly referencing CNOE as a favored baseline), using a “planes” model as conceptual structure. -- Early emphasis on becoming self-hosting quickly (“eat your own dogfood”) and validating end-to-end paths. - -Primary source (internal only): [Confluence: System Design](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/856788272/System+Design) - -### Phase 2 — Proof of Concept (PoC) definition and scope (2024) - -Focus: - -- Align on a shared understanding of the product “Developer Platform” (technical and business framing) and what is feasible within 2024. -- Define PoC goals and acceptance criteria, including an end-to-end story centered on: - - an IDP builder/orchestrator running in the target environment (OSC), - - a developer portal (Backstage) for the user experience, - - a “golden path” flow from source → CI/CD → deployment. - -Primary sources: - -- Confluence (internal only): [Confluence: Proof of Concept 2024](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/902010138/Proof+of+Concept+2024) -- Repository (this repo): docs-old PoC structure summary: [PoC Structure](/docs-old/v1/project/plan-in-2024/poc/) - -### Phase 3 — PoC consolidation: deliverables, repository structure, traceability (late 2024) - -Focus: - -- Package outputs produced since mid-2024 into a demonstrable PoC product. -- Make “traces” explicit from backlog items to concrete outputs (repos, docs, capabilities), to support governance and auditability. -- Establish working agreements for branching, PR-based review, and Definition of Done. - -Primary source: repository document [Team and Work Structure](/docs-old/v1/project/team-process/) (docs-old, in this repo). - -### Phase 4 — “Forgejo as a Service” and Foundry-based provisioning (2025) - -Focus: - -- Expand from “PoC capabilities” toward a service milestone around Forgejo, including supporting services (persistence, backups, caching, indexing, SSO, runners, observability). -- Provision Foundry/EDP resources via Infrastructure-as-Code, initially in OTC. -- Address reliability and migration risks while moving from earlier instances to production endpoints. - -Evidence: - -- Confluence (internal only): [Confluence: Forgejo as a service](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/999903971/Forgejo+as+a+service) (service decomposition and operational concerns) -- ADR: “Add Scaleway as Cloud resource Provider” explicitly places Foundry/EDP IaC provisioning in mid-April 2025 and captures platform issues and mitigation. -- Postmortem (2025-07-14) documents downtime rooted in an incomplete Foundry migration and the need for explicit migration plans. - -### Phase 5 — EdgeConnect integration: deployment target + SDK/tooling (ongoing) - -Focus: - -- Treat EdgeConnect as a sovereign deployment target operated outside EDP, and provide consumable tooling to integrate it into delivery workflows. -- Provide reusable automation components (SDK, CLI client, Terraform provider, Forgejo Actions) so that EdgeConnect is used consistently through stable entry points. -- Use EdgeConnect for deploying project artifacts (including this documentation website) to edge cloudlets. - -Evidence: - -- Repository (this repo): EdgeConnect documentation under `/docs/edgeconnect/` (SDK/client/actions). -- Repository (this repo): docs-old “Publishing to Edge” describes the documentation deployment via `edgeconnectdeployment.yaml`. - -## Development and delivery process evolution - -Across the phases above, delivery methods and team process evolved in response to scaling and operational needs: - -- Scrum ceremonies and working agreements are documented in Confluence (internal only): [Confluence: Scrum working agreement](https://confluence.telekom-mms.com/pages/viewpage.action?pageId=977833214). -- Collaborative delivery techniques (mob / ensemble programming) appear as an explicit practice, including in incident documentation (“Team: Mob”) and internal guidance on sustainable mobbing models. - -### Team enablement and skill development (PII-free synthesis) - -This section summarizes team enablement and skill development, based on the project’s documented sources, and is presented without personal data[^pii-free]: - -- **Baseline skill assumptions**: Kubernetes and GitOps are foundational. The platform architecture explicitly uses Kubernetes and a CNOE-derived stacks concept (see [Platform Orchestration](/docs/edp/deployment/basics/orchestration/)). -- **Enablement/training happened as part of delivery** (not a separate “academy”): retrospectives and planning explicitly track knowledge-sharing sessions and training topics (internal only, see References). -- **Kubernetes enablement**: a Kubernetes introduction training was planned as part of team onboarding/enablement activities (internal only; see References). -- **Go as a relevant skill**: multiple components are implemented in Golang (e.g., EdgeConnect tooling, Forgejo). Internal material discusses Golang developer skill profiles; this docs repo does not contain a single, explicit record of a dedicated “Go training” event. -- **Skill leveling via collaboration**: Mob Programming is used as a deliberate practice for knowledge sharing and onboarding less experienced developers (see [Forgejo docs entry](/docs/edp/forgejo/)). - -[^pii-free]: PII = “personally identifiable information”. “PII-free synthesis” means summarizing patterns and practices without including names, participant lists, or direct quotes that could identify individuals. - -See also: the central [References](/docs/governance/references/) index. diff --git a/content/en/docs/governance/references/_index.md b/content/en/docs/governance/references/_index.md deleted file mode 100644 index 8427b07..0000000 --- a/content/en/docs/governance/references/_index.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "References" -linkTitle: "References" -weight: 40 -description: > - Index of primary sources and evidence links used across the Governance chapter. ---- - -This list is an index of links referenced across the Governance chapter, plus the intended meaning (“semantics”) of each link. - -- (internal only) Confluence: [Sub Project Developer Framework](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/856788263/Sub+Project+Developer+Framework) — mandate, quick links, and high-level framing. -- (internal only) Confluence: [System Design](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/856788272/System+Design) — architecture framing (planes model, baseline preferences, early decision drivers). -- (internal only) Confluence: [Proof of Concept 2024](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/902010138/Proof+of+Concept+2024) — PoC scope, goals, and evaluation/acceptance framing. -- (internal only) Confluence: [Forgejo as a service](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/999903971/Forgejo+as+a+service) — service decomposition and operational concerns used as evidence for Phase 4. -- (internal only) Confluence: [Scrum working agreement](https://confluence.telekom-mms.com/pages/viewpage.action?pageId=977833214) — delivery process reference. -- (internal only) Confluence: [Knowledge sharing sessions](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/999672269/Knowledge+sharing+sessions) — planning table of internal enablement sessions (training topics and facilitation). Note: contains personal data; use only for PII-free synthesis. -- (internal only) Confluence: [Retro: How to improve our work](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/895683955/Retro+How+to+improve+our+work) — retrospective notes including explicit calls for Kubernetes training sessions and documentation/working-agreement improvements. Note: contains personal data; use only for PII-free synthesis. -- (internal only) Confluence: [Retro 15/04/25](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/999671293/Retro+15+04+25) — retrospective notes showing iteration on ticket sizing, async refinement, and meeting overhead; also references “Knowledge sharing sessions”. Note: contains personal data; use only for PII-free synthesis. -- (internal only) Confluence: [Retro 13/05/25](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/999891618/Retro+13+05+25) — retrospective notes explicitly discussing mobbing practices (roles, breaks, splitting mob groups) and knowledge exchange. Note: contains personal data; use only for PII-free synthesis. -- (internal only) Confluence: [Research Paper Mob Programming](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1131139130/Research+Paper+Mob+Programming) — internal background material on mob programming practices and trade-offs. Note: treat as internal working material. -- (internal only) Confluence: [eDF Stakeholder Workshops](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/902567168/eDF+Stakeholder+Workshops) — plan for internal/external stakeholder workshops, target groups, and intended outcomes. -- (internal only) Confluence: [internal stakeholder workshop 7.11.](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/915155061/internal+stakeholder+workshop+7.11.) — internal stakeholder session agenda and captured feedback (contains AI-generated summary blocks). -- (internal only) Confluence: [external stakeholder workshop](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/936478033/external+stakeholder+workshop) — external stakeholder session notes (contains agenda attachment and AI-generated summary blocks). -- (internal only) Confluence: [Workpackage e.3 - Sustainable-edge-management-optimized user interface for edge developers](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1165704046/Workpackage+e.3+-+Sustainable-edge-management-optimized+user+interface+for+edge+developers) — UX-focused workpackage with objectives, KPIs, and “validation with users” framing. -- (internal only) Confluence: [Deliverable D66 - Sustainable-edge-management-optimized user interface for edge developers](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1165704082/Deliverable+D66+-+Sustainable-edge-management-optimized+user+interface+for+edge+developers) — deliverable page including PoC results summary for autonomous UI/UX testing. -- (internal only) Confluence: [Customer Engagement](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1040844220/Customer+Engagement) — research planning cadence (who/why/when), plus synthesized insights/assumptions used to justify PII-free learnings summaries. -- (internal only) Confluence: [UX Insights and Learnings](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1033832272/UX+Insights+and+Learnings) — running log of UX observations and recommended improvements (useful for evidence-backed, non-PII synthesis of recurring friction patterns). -- (internal only) Confluence: [[IPCEICIS-3703] Use Case identification for automated UX testing](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/1055949846/IPCEICIS-3703+Use+Case+identification+for+automated+UX+testing) — structured prioritization of automated UX testing scenarios (happy-path smoke flows, functional correctness, visual/accessibility checks). Note: treat as internal working material; do not replicate embedded credentials/content. -- (internal only) Jira: [IPCEICIS-368](https://jira.telekom-mms.com/browse/IPCEICIS-368) — PoC part 1 traceability anchor. -- (internal only) Jira: [IPCEICIS-765](https://jira.telekom-mms.com/browse/IPCEICIS-765) — PoC part 2.1 traceability anchor. -- (internal only) Jira: [IPCEICIS-766](https://jira.telekom-mms.com/browse/IPCEICIS-766) — PoC part 2.2 traceability anchor. -- (internal only) Jira: [IPCEICIS-514](https://jira.telekom-mms.com/browse/IPCEICIS-514) — PoC golden path template traceability anchor. -- (internal only) Jira: [IPCEICIS-759](https://jira.telekom-mms.com/browse/IPCEICIS-759) — PoC example app traceability anchor. -- (internal only) Jira: [IPCEICIS-760](https://jira.telekom-mms.com/browse/IPCEICIS-760) — PoC CI/CD traceability anchor. -- (internal only) Jira: [IPCEICIS-761](https://jira.telekom-mms.com/browse/IPCEICIS-761) — PoC telemetry traceability anchor. -- (internal only) Jira: [IPCEICIS-762](https://jira.telekom-mms.com/browse/IPCEICIS-762) — PoC infrastructure traceability anchor. -- (internal only) Jira: [IPCEICIS-763](https://jira.telekom-mms.com/browse/IPCEICIS-763) — PoC additional items traceability anchor. -- (internal only) Jira: [IPCEICIS-767](https://jira.telekom-mms.com/browse/IPCEICIS-767) — PoC orchestration extension traceability anchor. -- (internal only) Jira: [IPCEICIS-768](https://jira.telekom-mms.com/browse/IPCEICIS-768) — PoC part 3 (user documentation) traceability anchor. -- Documentation site: [PoC Structure](/docs-old/v1/project/plan-in-2024/poc/) — published docs-old summary of the PoC structure. -- Documentation site: [Team and Work Structure](/docs-old/v1/project/team-process/) — published docs-old description of process and traceability intent. -- Documentation site: [Forgejo docs entry](/docs/edp/forgejo/) — documentation entry point for the Forgejo/EDP component. -- Service entry point: [edp.buildth.ing](https://edp.buildth.ing) — EDP Forgejo instance. -- Service org: [edp.buildth.ing/DevFW-CICD](https://edp.buildth.ing/DevFW-CICD) — public organization referenced for transparency. -- Service org: [edp.buildth.ing/DevFW](https://edp.buildth.ing/DevFW) — private organization reference. -- (internal only) Repository (edp-doc): [edp.buildth.ing/DevFW/edp-doc](https://edp.buildth.ing/DevFW/edp-doc) — EDP technical documentation repository (ADRs, postmortems, PoC process), used as evidence sources in this chapter. -- Upstream project: [forgejo.org](https://forgejo.org/) — Forgejo project homepage. -- Upstream governance: [Codeberg e.V.](https://docs.codeberg.org/getting-started/what-is-codeberg/) — referenced as steward/governance body. -- Upstream contribution: [PR #9409](https://codeberg.org/forgejo/forgejo/pulls/9409) — GARM endpoints contribution. -- Upstream contribution: [PR #9803](https://codeberg.org/forgejo/forgejo/pulls/9803) — webhook workflow events contribution. -- Upstream contribution: [PR #9962](https://codeberg.org/forgejo/forgejo/pulls/9962) — ephemeral runners contribution. -- Upstream hosting: [Codeberg.org](https://codeberg.org/) — hosting platform used for upstream Forgejo contributions. diff --git a/content/en/docs/governance/traceability/_index.md b/content/en/docs/governance/traceability/_index.md deleted file mode 100644 index 1107969..0000000 --- a/content/en/docs/governance/traceability/_index.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Traceability" -linkTitle: "Traceability" -weight: 20 -description: > - Deliverables mapping, evidence model, matrix overview, and ticket anchors. ---- - -## Deliverables mapping - -This section captures the traceability model and evidence-backed anchors that connect capabilities/phases to concrete outputs (repositories, documentation pages, deployed services). It does not yet claim a complete IPCEI deliverable-ID → epic → artifact mapping. - -## Traceability model (used for audit) - -The working model (used throughout the PoC) is: - -- Deliverable / capability definition (often in Confluence) → -- Ticket(s) in Jira / Forgejo → -- Implementation via commits + pull requests → -- Concrete output (repo, docs page, automation component, deployed service) → -- Evidence (ADR / postmortem / runbook / deployment config) showing real operation. - -Primary sources for the traceability intent: - -- Repository (edp-doc): PoC design README lists Jira parts and calls for a mapping table from “parts” to upstream references. -- Repository (edp-doc): team-process documents emphasize “traces from tickets to outputs” and an outcome summary in the ticket as part of Definition of Done. - -## Matrix (evidence-backed overview) - -This matrix is intended to be directly consumable: it summarizes what can already be evidenced from the current sources. It is an overview across phases/capabilities; it is not the full IPCEI deliverable-ID mapping. - -| Phase | What is delivered / proven | Concrete outputs (where) | Evidence / trace hooks | -| --- | --- | --- | --- | -| Phase 1 — Discovery & system design | Reference architecture framing and decision drivers | Confluence (internal only): [System Design](https://confluence.telekom-mms.com/spaces/IPCEICIS/pages/856788272/System+Design) (planes model, CNOE baseline preference, dogfooding) | Architecture notes are the earliest “why” evidence for later component choices | -| Phase 2 — PoC definition | PoC scope, acceptance criteria, end-to-end “golden path” story | Repository (this docs repo): PoC structure page (docs-old) and Repository (edp-doc): PoC design README | Jira parts exist for user docs + hands-on building blocks (see “Ticket anchors” below) | -| Phase 3 — PoC consolidation & traceability | A packaged PoC with explicit traceability from backlog to outputs | Repository (this docs repo): PoC team-process guidance (Definition of Done, PR review, “traces”) | “Outcome” is expected to be summarized in the ticket with links to PR/commit artifacts | -| Phase 4 — Forgejo-as-a-Service + Foundry provisioning | A service milestone with operational concerns (persistence, backups, SSO, runners) and IaC provisioning | ADR (Scaleway as additional install channel) + postmortem (Foundry migration downtime) | Concrete operational evidence that architecture and migration risks were handled as governance work | -| Phase 5 — EdgeConnect integration | EdgeConnect as delivery target and integration tooling | Repository (this docs repo): EdgeConnect docs section + docs-old “Publishing to Edge” (deployment yaml) | Deployment configuration and workflow description provide concrete “proof of use” | - -## Ticket anchors (PoC) - -The PoC design README explicitly provides Jira anchors that can be used to build a full traceability matrix: - -- Part 1 (User documentation): [IPCEICIS-368](https://jira.telekom-mms.com/browse/IPCEICIS-368) -- Part 2.1 (Local IdP creation): [IPCEICIS-765](https://jira.telekom-mms.com/browse/IPCEICIS-765) -- Part 2.2 (OSC IdP creation): [IPCEICIS-766](https://jira.telekom-mms.com/browse/IPCEICIS-766) -- Part 2.x.1 (Golden Path template): [IPCEICIS-514](https://jira.telekom-mms.com/browse/IPCEICIS-514) -- Part 2.x.2 (Fibonacci example app): [IPCEICIS-759](https://jira.telekom-mms.com/browse/IPCEICIS-759) -- Part 2.x.3 (Forgejo Actions CI/CD): [IPCEICIS-760](https://jira.telekom-mms.com/browse/IPCEICIS-760) -- Part 2.x.4 (Telemetry): [IPCEICIS-761](https://jira.telekom-mms.com/browse/IPCEICIS-761) -- Part 2.x.5 (OSC infrastructure): [IPCEICIS-762](https://jira.telekom-mms.com/browse/IPCEICIS-762) -- Part 2.x.6 (Additional items): [IPCEICIS-763](https://jira.telekom-mms.com/browse/IPCEICIS-763) -- Part 2.3 (Extended local orchestration): [IPCEICIS-767](https://jira.telekom-mms.com/browse/IPCEICIS-767) -- Part 3 (User documentation): [IPCEICIS-768](https://jira.telekom-mms.com/browse/IPCEICIS-768) - -Related docs-old pages referenced by the history and matrix: - -- [PoC Structure](/docs-old/v1/project/plan-in-2024/poc/) -- [Team and Work Structure](/docs-old/v1/project/team-process/) - -See also: the central [References](/docs/governance/references/) index. diff --git a/content/en/docs-old/v1/project/_index.md b/content/en/docs/project/_index.md similarity index 100% rename from content/en/docs-old/v1/project/_index.md rename to content/en/docs/project/_index.md diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/1_intro/_index.md b/content/en/docs/project/conceptual-onboarding/1_intro/_index.md similarity index 97% rename from content/en/docs-old/v1/project/conceptual-onboarding/1_intro/_index.md rename to content/en/docs/project/conceptual-onboarding/1_intro/_index.md index 37aa4d0..9fa9723 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/1_intro/_index.md +++ b/content/en/docs/project/conceptual-onboarding/1_intro/_index.md @@ -5,12 +5,10 @@ description: The 5-step storyflow of this Onboarding chapter --- {{% pageinfo color="info" %}} - ## Summary -This onboarding section is for you when are new to IPCEI-CIS subproject 'Edge Developer Framework (EDF)' and you want to know about - -* its context to 'Platform Engineering' +This onboarding section is for you when are new to IPCEI-CIS subproject 'Edge Developer Framework (EDF)' and you want to know about +* its context to 'Platform Engineering' * and why we think it's the stuff we need to care about in the EDF {{% /pageinfo %}} @@ -43,7 +41,9 @@ Please do not think this story and the underlying assumptions are carved in ston ## Your role as 'Framework Engineer' in the Domain Architecture -Pls be aware of the the following domain and task structure of our mission: +Pls be aware of the the following domain and task structure of our mission: ![](./conclusio/images/modern.png) + + diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/2_edge-developer-framework/_index.md b/content/en/docs/project/conceptual-onboarding/2_edge-developer-framework/_index.md similarity index 90% rename from content/en/docs-old/v1/project/conceptual-onboarding/2_edge-developer-framework/_index.md rename to content/en/docs/project/conceptual-onboarding/2_edge-developer-framework/_index.md index 452461a..8da5935 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/2_edge-developer-framework/_index.md +++ b/content/en/docs/project/conceptual-onboarding/2_edge-developer-framework/_index.md @@ -5,11 +5,10 @@ description: Driving requirements for a platform --- {{% pageinfo color="info" %}} - ## Summary -The 'Edge Developer Framework' is both the project and the product we are working for. Out of the leading 'Portfolio Document' -we derive requirements which are ought to be fulfilled by Platform Engineering. +The 'Edge Developer Framework' is both the project and the product we are working for. Out of the leading 'Portfolio Document' +we derive requirements which are ought to be fulfilled by Platform Engineering. **This is our claim!** @@ -27,7 +26,6 @@ e. Development of DTAG/TSI Edge Developer Framework * Goal: All developed innovations must be accessible to developer communities in a **highly user-friendly and easy way** ### Development of DTAG/TSI Edge Developer Framework (p.14) - | capability | major novelties ||| | -- | -- | -- | -- | | e.1. Edge Developer full service framework (SDK + day1 +day2 support for edge installations) | Adaptive CI/CD pipelines for heterogeneous edge environments | Decentralized and self healing deployment and management | edge-driven monitoring and analytics | @@ -36,23 +34,22 @@ e. Development of DTAG/TSI Edge Developer Framework ### DTAG objectives & contributions (p.27) -DTAG will also focus on developing an easy-to-use **Edge Developer framework for software +DTAG will also focus on developing an easy-to-use **Edge Developer framework for software developers** to **manage the whole lifecycle of edge applications**, i.e. for **day-0-, day-1- and up to day-2- -operations**. With this DTAG will strongly enable the ecosystem building for the entire IPCEI-CIS edge to -cloud continuum and ensure openness and accessibility for anyone or any company to make use and -further build on the edge to cloud continuum. Providing the use of the tool framework via an open-source approach will further reduce entry barriers and enhance the openness and accessibility for anyone or +operations**. With this DTAG will strongly enable the ecosystem building for the entire IPCEI-CIS edge to +cloud continuum and ensure openness and accessibility for anyone or any company to make use and +further build on the edge to cloud continuum. Providing the use of the tool framework via an open-source approach will further reduce entry barriers and enhance the openness and accessibility for anyone or any organization (see innovations e.). ### WP Deliverables (p.170) e.1 Edge developer full-service framework -This tool set and related best practices and guidelines will **adapt, enhance and further innovate DevOps principles** and -their related, necessary supporting technologies according to the specific requirements and constraints associated with edge or edge cloud development, in order to keep the healthy and balanced innovation path on both sides, +This tool set and related best practices and guidelines will **adapt, enhance and further innovate DevOps principles** and +their related, necessary supporting technologies according to the specific requirements and constraints associated with edge or edge cloud development, in order to keep the healthy and balanced innovation path on both sides, the (software) development side and the operations side in the field of DevOps. {{% pageinfo color="info" %}} - ### What comes next? [Next](../platforming/) we'll see how these requirements seem to be fulfilled by platforms! diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/_index.md b/content/en/docs/project/conceptual-onboarding/3_platforming/_index.md similarity index 96% rename from content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/_index.md rename to content/en/docs/project/conceptual-onboarding/3_platforming/_index.md index 48f790f..6a41b34 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/_index.md +++ b/content/en/docs/project/conceptual-onboarding/3_platforming/_index.md @@ -7,18 +7,17 @@ description: DevOps is dead - long live next level DevOps in platforms {{% pageinfo color="info" %}} - ## Summary -Since 2010 we have DevOps. This brings increasing delivery speed and efficiency at scale. -But next we got high 'cognitive loads' for developers and production congestion due to engineering lifecycle complexity. +Since 2010 we have DevOps. This brings increasing delivery speed and efficiency at scale. +But next we got high 'cognitive loads' for developers and production congestion due to engineering lifecycle complexity. So we need on top of DevOps an instrumentation to ensure and enforce speed, quality, security in modern, cloud native software development. This instrumentation is called 'golden paths' in intenal develoepr platforms (IDP). {{% /pageinfo %}} ## History of Platform Engineering -Let's start with a look into the history of platform engineering. A good starting point is [Humanitec](https://humanitec.com/), as they nowadays are one of the biggest players (['the market leader in IDPs.'](https://internaldeveloperplatform.org/#how-we-curate-this-site)) in platform engineering. +Let's start with a look into the history of platform engineering. A good starting point is [Humanitec](https://humanitec.com/), as they nowadays are one of the biggest players (['the market leader in IDPs.'](https://internaldeveloperplatform.org/#how-we-curate-this-site)) in platform engineering. They create lots of [beautiful articles and insights](https://humanitec.com/blog), their own [platform products](https://humanitec.com/products/) and [basic concepts for the platform architecture](https://humanitec.com/platform-engineering) (we'll meet this later on!). @@ -52,7 +51,7 @@ There is a CNCF working group which provides the definition of [Capabilities of ### Platform Engineering Team -Or, in another illustration for the platform as a developer service interface, which also defines the **'Platform Engineering Team'** inbetween: +Or, in another illustration for the platform as a developer service interface, which also defines the **'Platform Engineering Team'** inbetween: https://medium.com/@bijit211987/what-is-platform-engineering-and-how-it-reduce-cognitive-load-on-developers-ac7805603925 @@ -71,7 +70,7 @@ First of all some important wording to motivate the important term 'internal dev [Capabilities of platforms](https://tag-app-delivery.cncf.io/whitepapers/platforms/#capabilities-of-platforms) -### Ecosystems in InternalDeveloperPlatform +### Ecosystems in InternalDeveloperPlatform Build or buy - this is also in pltaform engineering a tweaked discussion, which one of the oldest player answers like this with some oppinioated internal capability structuring: @@ -79,7 +78,6 @@ Build or buy - this is also in pltaform engineering a tweaked discussion, which {{% pageinfo color="info" %}} - ### What comes next? [Next](../orchestrators/) we'll see how these concepts got structured! @@ -89,7 +87,7 @@ Build or buy - this is also in pltaform engineering a tweaked discussion, which ### Digital Platform defintion from [What we **call** a Platform](https://martinfowler.com/articles/talk-about-platforms.html) -> Words are hard, it seems. ‘Platform’ is just about the most ambiguous term we could use for an approach that is super-important for increasing delivery speed and efficiency at scale. Hence the title of this article, here is what I’ve been talking about most recently. +> Words are hard, it seems. ‘Platform’ is just about the most ambiguous term we could use for an approach that is super-important for increasing delivery speed and efficiency at scale. Hence the title of this article, here is what I’ve been talking about most recently. \ Definitions for software and hardware platforms abound, generally describing an operating environment upon which applications can execute and which provides reusable capabilities such as file systems and security. \ diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/humanitec-history.png b/content/en/docs/project/conceptual-onboarding/3_platforming/humanitec-history.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/humanitec-history.png rename to content/en/docs/project/conceptual-onboarding/3_platforming/humanitec-history.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/platform-self-services.webp b/content/en/docs/project/conceptual-onboarding/3_platforming/platform-self-services.webp similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/platform-self-services.webp rename to content/en/docs/project/conceptual-onboarding/3_platforming/platform-self-services.webp diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/platforms-def.drawio.png b/content/en/docs/project/conceptual-onboarding/3_platforming/platforms-def.drawio.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/platforms-def.drawio.png rename to content/en/docs/project/conceptual-onboarding/3_platforming/platforms-def.drawio.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/teams.png b/content/en/docs/project/conceptual-onboarding/3_platforming/teams.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/3_platforming/teams.png rename to content/en/docs/project/conceptual-onboarding/3_platforming/teams.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/_index.md b/content/en/docs/project/conceptual-onboarding/4_orchestrators/_index.md similarity index 98% rename from content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/_index.md rename to content/en/docs/project/conceptual-onboarding/4_orchestrators/_index.md index 29b4486..11f4446 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/_index.md +++ b/content/en/docs/project/conceptual-onboarding/4_orchestrators/_index.md @@ -5,11 +5,9 @@ description: Next level platforming is orchestrating platforms --- {{% pageinfo color="info" %}} - ## Summary -When defining and setting up platforms next two intrinsic problems arise: - +When defining and setting up platforms next two intrinsic problems arise: 1. it is not declarative and automated 2. it is not or least not easily changable @@ -35,11 +33,10 @@ https://humanitec.com/reference-architectures https://humanitec.com/blog/aws-azure-and-gcp-open-source-reference-architectures-to-start-your-mvp -> Hint: There is a [slides tool provided by McKinsey](https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures) to set up your own platform deign based on the reference architecture +> Hint: There is a [slides tool provided by McKinsey](https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures) to set up your own platform deign based on the reference architecture {{% pageinfo color="info" %}} - ### What comes next? [Next](../cnoe/) we'll see how we are going to do platform orchestration with CNOE! @@ -53,3 +50,4 @@ You remember the [capability mappings from the time before orchestration](../pla https://humanitec.com/whitepapers/state-of-platform-engineering-report-volume-2 Whitepaper_ State of Platform Engineering Report.pdf + diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/platform-architectures.webp b/content/en/docs/project/conceptual-onboarding/4_orchestrators/platform-architectures.webp similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/platform-architectures.webp rename to content/en/docs/project/conceptual-onboarding/4_orchestrators/platform-architectures.webp diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/platform-tooling-humanitec-platform-report-2024.PNG b/content/en/docs/project/conceptual-onboarding/4_orchestrators/platform-tooling-humanitec-platform-report-2024.PNG similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/platform-tooling-humanitec-platform-report-2024.PNG rename to content/en/docs/project/conceptual-onboarding/4_orchestrators/platform-tooling-humanitec-platform-report-2024.PNG diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/vendor-neutral-idp-final.gif b/content/en/docs/project/conceptual-onboarding/4_orchestrators/vendor-neutral-idp-final.gif similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/4_orchestrators/vendor-neutral-idp-final.gif rename to content/en/docs/project/conceptual-onboarding/4_orchestrators/vendor-neutral-idp-final.gif diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/_index.md b/content/en/docs/project/conceptual-onboarding/5_cnoe/_index.md similarity index 97% rename from content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/_index.md rename to content/en/docs/project/conceptual-onboarding/5_cnoe/_index.md index 19b2e67..35c4ca0 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/_index.md +++ b/content/en/docs/project/conceptual-onboarding/5_cnoe/_index.md @@ -5,12 +5,11 @@ description: Our top candidate for a platform orchestrator --- {{% pageinfo color="info" %}} - ## Summary In late 2023 platform orchestration raised - the discipline of declarativley dinfing, building, orchestarting and reconciling building blocks of (digital) platforms. -The famost one ist the platform orchestrator from Humanitec. They provide lots of concepts and access, also open sourced tools and schemas. But they do not have open sourced the ocheastartor itself. +The famost one ist the platfrom orchestrator from Humanitec. They provide lots of concepts and access, also open sourced tools and schemas. But they do not have open sourced the ocheastartor itself. Thus we were looking for open source means for platform orchestrating and found [CNOE](https://cnoe.io). {{% /pageinfo %}} @@ -18,7 +17,6 @@ Thus we were looking for open source means for platform orchestrating and found ## Requirements for an Orchestrator When we want to set up a [complete platform](../platforming/platforms-def.drawio.png) we expect to have - * a **schema** which defines the platform, its ressources and internal behaviour * a **dynamic configuration or templating mechanism** to provide a concrete specification of a platform * a **deployment mechanism** to deploy and reconcile the platform @@ -57,7 +55,6 @@ There are already some example stacks: {{% pageinfo color="info" %}} - ### What comes next? [Next](../cnoe-showtime/) we'll see how a CNOE stacked Internal Developer Platform is deployed on you local laptop! diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-architecture.png b/content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-architecture.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-architecture.png rename to content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-architecture.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-capabilities.png b/content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-capabilities.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-capabilities.png rename to content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-capabilities.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-stacks.png b/content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-stacks.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/5_cnoe/cnoe-stacks.png rename to content/en/docs/project/conceptual-onboarding/5_cnoe/cnoe-stacks.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/_index.md b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/_index.md similarity index 98% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/_index.md rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/_index.md index a741445..be22825 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/_index.md +++ b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/_index.md @@ -5,10 +5,9 @@ description: CNOE hands on --- {{% pageinfo color="info" %}} - ## Summary -CNOE is a 'Platform Engineering Framework' (Danger: Our wording!) - it is open source and locally runnable. +CNOE is a 'Platform Engineering Framework' (Danger: Our wording!) - it is open source and locally runnable. It consists of the orchestrator 'idpbuilder' and both of some predefined building blocks and also some predefined platform configurations. @@ -88,7 +87,7 @@ It's an important feature of idpbuilder that it will set up on an existing clust That's why we here first create the kind cluster `localdev`itself: -```bash +```bash cat << EOF | kind create cluster --name localdev --config=- # Kind kubernetes release images https://github.com/kubernetes-sigs/kind/releases kind: Cluster @@ -138,7 +137,7 @@ kube-system kube-scheduler-localdev-control-plane 1/1 Ru local-path-storage local-path-provisioner-6f8956fb48-6fvt2 1/1 Running 0 15s ``` -### First run: Start with core applications, 'core package' +### First run: Start with core applications, 'core package' Now we run idpbuilder the first time: @@ -150,7 +149,7 @@ ib create --use-path-routing #### Output -##### idpbuilder log +##### idpbuilder log ```bash stl@ubuntu-vpn:~/git/mms/idpbuilder$ ib create --use-path-routing @@ -244,7 +243,7 @@ Data: username : giteaAdmin ``` -In ArgoCD you will see the deployed three applications of the core package: +In ArgoCD you will see the deployed three applications of the core package: ![alt text](image-1.png) @@ -303,7 +302,7 @@ drwxr-xr-x 4 stl stl 4096 Jul 29 10:57 .. Now we run idpbuilder the second time with `-p basic/package1` -##### idpbuilder log +##### idpbuilder log ```bash stl@ubuntu-vpn:~/git/mms/cnoe-stacks$ ib create --use-path-routing -p basic/package1 @@ -390,7 +389,7 @@ NAMESPACE NAME SYNC STATUS HEALTH STATUS argocd argo-workflows Synced Healthy argocd argocd Synced Healthy argocd backstage Synced Healthy -argocd included-backstage-templates Synced Healthy +argocd backstage-templates Synced Healthy argocd external-secrets Synced Healthy argocd gitea Synced Healthy argocd keycloak Synced Healthy @@ -473,7 +472,7 @@ and see the basic setup of the Backstage portal: ### Use a Golden Path: 'Basic Deployment' -Now we want to use the Backstage portal as a developer. We create in Backstage our own platform based activity by using the golden path template 'Basic Deployment: +Now we want to use the Backstage portal as a developer. We create in Backstage our own platfrom based activity by using the golden path template 'Basic Deployment: ![alt text](image-10.png) @@ -573,10 +572,9 @@ Next wait a bit until Gitops does its magic and our 'wanted' state in the repo g ![alt text](image-15.png) {{% pageinfo color="info" %}} - ### What comes next? The showtime of CNOE high level behaviour and usage scenarios is now finished. We setup an initial IDP and used a backstage golden path to init and deploy a simple application. -[Last not least](../conclusio/) we want to sum up the whole way from Devops to 'Frameworking' (is this the correct wording???) +[Last not least](../conclusio/) we want to sum up the whole way from Devops to 'Frameworking' (is this the correct wording???) {{% /pageinfo %}} diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-1.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-1.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-1.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-1.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-10.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-10.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-10.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-10.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-11.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-11.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-11.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-11.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-12.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-12.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-12.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-12.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-13.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-13.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-13.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-13.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-14.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-14.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-14.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-14.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-15.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-15.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-15.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-15.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-16.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-16.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-16.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-16.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-2.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-2.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-2.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-2.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-3.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-3.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-3.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-3.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-4.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-4.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-4.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-4.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-5.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-5.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-5.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-5.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-6.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-6.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-6.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-6.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-7.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-7.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-7.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-7.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-8.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-8.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-8.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-8.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-9.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-9.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image-9.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image-9.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image.png b/content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/6_cnoe-showtime/image.png rename to content/en/docs/project/conceptual-onboarding/6_cnoe-showtime/image.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/README.md b/content/en/docs/project/conceptual-onboarding/7_conclusio/README.md similarity index 84% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/README.md rename to content/en/docs/project/conceptual-onboarding/7_conclusio/README.md index a1027c9..769478d 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/README.md +++ b/content/en/docs/project/conceptual-onboarding/7_conclusio/README.md @@ -9,10 +9,10 @@ docker commit likec4 likec4 docker run -it --rm --user node -v $PWD:/app -p 5173:5173 likec4 bash // as root -npx playwright install-deps +npx playwright install-deps npx playwright install npm install likec4 // render -node@e20899c8046f:/app/content/en/docs/project/onboarding$ ./node_modules/.bin/likec4 export png -o ./images . +node@e20899c8046f:/app/content/en/docs/project/onboarding$ ./node_modules/.bin/likec4 export png -o ./images . \ No newline at end of file diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/_index.md b/content/en/docs/project/conceptual-onboarding/7_conclusio/_index.md similarity index 78% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/_index.md rename to content/en/docs/project/conceptual-onboarding/7_conclusio/_index.md index f76269f..da262e3 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/_index.md +++ b/content/en/docs/project/conceptual-onboarding/7_conclusio/_index.md @@ -5,7 +5,6 @@ description: 'Summary and final thoughts: Always challenge theses concepts, accu --- {{% pageinfo color="info" %}} - ## Summary In the project 'Edge Developer Framework' we start with DevOps, set platforms on top to automate golden paths, and finally set 'frameworks' (aka Orchestrators') on top to have declarative,automated and reconcilable platforms. @@ -15,7 +14,7 @@ In the project 'Edge Developer Framework' we start with DevOps, set platforms on ## From Devops over Platform to Framework Engineering -We come along from a quite well known, but already complex discipline called 'Platform Engineering', which is the next level devops. +We come along from a quite well known, but already complex discipline called 'Platform Engineering', which is the next level devops. On top of these two domains we now have 'Framework Engineering', i.e. buildung dynamic, orchestrated and reconciling platforms: | Classic Platform engineering | New: Framework Orchestration on top of Platforms | Your job: Framework Engineer | @@ -24,12 +23,11 @@ On top of these two domains we now have 'Framework Engineering', i.e. buildung d ## The whole picture of engineering -So always keep in mind that as as 'Framework Engineer' you - -* include the skills of a platform and a devops engineer, -* you do Framework, Platform and Devops Engineering at the same time -* and your results have impact on Frameworks, Platforms and Devops tools, layers, processes. +So always keep in mind that as as 'Framework Engineer' you + * include the skills of a platform and a devops engineer, + * you do Framework, Platform and Devops Engineering at the same time + * and your results have impact on Frameworks, Platforms and Devops tools, layers, processes. The following diamond is illustrating this: on top is you, on the bottom is our baseline 'DevOps' - + \ No newline at end of file diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/domain-architecture.c4 b/content/en/docs/project/conceptual-onboarding/7_conclusio/domain-architecture.c4 similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/domain-architecture.c4 rename to content/en/docs/project/conceptual-onboarding/7_conclusio/domain-architecture.c4 diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers-and-framework-engineer.png b/content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers-and-framework-engineer.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers-and-framework-engineer.png rename to content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers-and-framework-engineer.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers-and-platform-engineer.png b/content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers-and-platform-engineer.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers-and-platform-engineer.png rename to content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers-and-platform-engineer.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers.png b/content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/layers.png rename to content/en/docs/project/conceptual-onboarding/7_conclusio/images/layers.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/modern.png b/content/en/docs/project/conceptual-onboarding/7_conclusio/images/modern.png similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/7_conclusio/images/modern.png rename to content/en/docs/project/conceptual-onboarding/7_conclusio/images/modern.png diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/_index.md b/content/en/docs/project/conceptual-onboarding/_index.md similarity index 100% rename from content/en/docs-old/v1/project/conceptual-onboarding/_index.md rename to content/en/docs/project/conceptual-onboarding/_index.md diff --git a/content/en/docs-old/v1/project/conceptual-onboarding/storyline.md b/content/en/docs/project/conceptual-onboarding/storyline.md similarity index 98% rename from content/en/docs-old/v1/project/conceptual-onboarding/storyline.md rename to content/en/docs/project/conceptual-onboarding/storyline.md index b49b373..11d2997 100644 --- a/content/en/docs-old/v1/project/conceptual-onboarding/storyline.md +++ b/content/en/docs/project/conceptual-onboarding/storyline.md @@ -1,5 +1,5 @@ -## Storyline +## Storyline 1. We have the 'Developer Framework' 2. We think the solution for DF is 'Platforming' (Digital Platforms) @@ -25,3 +25,4 @@ ## Architecture + diff --git a/content/en/docs-old/v1/project/plan-in-2024/_index.md b/content/en/docs/project/plan-in-2024/_index.md similarity index 80% rename from content/en/docs-old/v1/project/plan-in-2024/_index.md rename to content/en/docs/project/plan-in-2024/_index.md index ed78154..56ff916 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/_index.md +++ b/content/en/docs/project/plan-in-2024/_index.md @@ -5,7 +5,7 @@ description: The planned project workload in 2024 --- -## First Blue Print in 2024 +## First Blue Print in 2024 Our first architectural blue print for the IPCEI-CIS Developer Framework derives from Humanitecs Reference Architecture, see links in [Blog](../../blog/240823-archsession.md) @@ -13,6 +13,10 @@ Our first architectural blue print for the IPCEI-CIS Developer Framework derives ## C4 Model +> (sources see in ./ressources/architecture-c4) + +> How to use: install C4lite VSC exension and/or C4lite cli - then open *.c4 files in ./ressources/architecture-c4 + First system landscape C4 model: ![c4-model](./planes.png) @@ -24,7 +28,7 @@ https://confluence.telekom-mms.com/display/IPCEICIS/Architecture ## Dimensionierung Cloud für initiales DevFramework -### 28.08.24, Stefan Bethke, Florian Fürstenberg, Stephan Lo +### 28.08.24, Stefan Betkle, Florian Fürstenberg, Stephan Lo 1) zuerst viele DevFrameworkPlatformEngineers arbeiten lokal, mit zentralem Deployment nach OTC in **einen/max zwei** Control-Cluster 2) wir gehen anfangs von ca. 5 clustern aus @@ -35,7 +39,6 @@ https://confluence.telekom-mms.com/display/IPCEICIS/Architecture 7) Wildcard Domain ?? --> Eher ja Next Steps: (Vorschlag: in den nächsten 2 Wochen) - 1. Florian spezifiziert an Tobias 2. Tobias stellt bereit, kubeconfig kommt an uns 3. wir deployen diff --git a/content/en/docs-old/v1/project/plan-in-2024/image-2024-8-14_10-50-27.png b/content/en/docs/project/plan-in-2024/image-2024-8-14_10-50-27.png similarity index 100% rename from content/en/docs-old/v1/project/plan-in-2024/image-2024-8-14_10-50-27.png rename to content/en/docs/project/plan-in-2024/image-2024-8-14_10-50-27.png diff --git a/content/en/docs-old/v1/project/plan-in-2024/planes.png b/content/en/docs/project/plan-in-2024/planes.png similarity index 100% rename from content/en/docs-old/v1/project/plan-in-2024/planes.png rename to content/en/docs/project/plan-in-2024/planes.png diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/_index.md b/content/en/docs/project/plan-in-2024/streams/_index.md similarity index 96% rename from content/en/docs-old/v1/project/plan-in-2024/streams/_index.md rename to content/en/docs/project/plan-in-2024/streams/_index.md index 2f65326..d060a96 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/_index.md @@ -3,10 +3,9 @@ title: Workstreams weight: 2 --- -This page is WiP (23.8.2024). +This page is WiP (23.8.2024). > Continued discussion on 29th Aug 24 -> > * idea: Top down mit SAFe, Value Streams > * paralell dazu bottom up (die zB aus den technisch/operativen Tätigkeietn entstehen) > * Scrum Master? @@ -15,7 +14,7 @@ This page is WiP (23.8.2024). Stefan and Stephan try to solve the mission 'wir wollen losmachen'. -**Solution Idea**: +**Solution Idea**: 1. First we define a **rough overall structure (see 'streams')** and propose some initial **activities** (like user stories) within them. 1. Next we work in **iterative steps** and produce iteratively progress and knowledge and outcomes in these activities. diff --git a/content/en/docs/project/plan-in-2024/streams/deployment/_index.md b/content/en/docs/project/plan-in-2024/streams/deployment/_index.md new file mode 100644 index 0000000..ed797a0 --- /dev/null +++ b/content/en/docs/project/plan-in-2024/streams/deployment/_index.md @@ -0,0 +1,14 @@ +--- +title: Deployment +weight: 3 +--- + +> **Mantra**: +> 1. Everything as Code. +> 1. Cloud natively deployable everywhere. +> 1. Ramping up and tearing down oftenly is a no-brainer. +> 1. Especially locally (whereby 'locally' means 'under my own control') + +## Entwurf (28.8.24) + +![Deployment 2024](./deployment.drawio.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/deployment.drawio.png b/content/en/docs/project/plan-in-2024/streams/deployment/deployment.drawio.png similarity index 100% rename from content/en/docs-old/v1/project/plan-in-2024/streams/deployment/deployment.drawio.png rename to content/en/docs/project/plan-in-2024/streams/deployment/deployment.drawio.png diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/forgejo/_index.md b/content/en/docs/project/plan-in-2024/streams/deployment/forgejo/_index.md similarity index 84% rename from content/en/docs-old/v1/project/plan-in-2024/streams/deployment/forgejo/_index.md rename to content/en/docs/project/plan-in-2024/streams/deployment/forgejo/_index.md index de68795..7e10216 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/deployment/forgejo/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/deployment/forgejo/_index.md @@ -4,7 +4,7 @@ linkTitle: Forgejo weight: 1 --- -> **WiP** Ich (Stephan) schreibe mal schnell einige Stichworte, was ich so von Stefan gehört habe: +> **WiP** Ich (Stephan) schreibe mal schnell einige Stichworte, was ich so von Stefan gehört habe: ## Summary @@ -33,4 +33,4 @@ tbd * STBE deployed mit Helm in bereitgestelltes OTC-Kubernetes * erstmal interne User Datenbank nutzen -* dann ggf. OIDC mit vorhandenem Keycloak in der OTC anbinden +* dann ggf. OIDC mit vorhandenem Keycloak in der OTC anbinden \ No newline at end of file diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/_index.md b/content/en/docs/project/plan-in-2024/streams/fundamentals/_index.md similarity index 95% rename from content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/_index.md rename to content/en/docs/project/plan-in-2024/streams/fundamentals/_index.md index 13d90d3..fd8d2df 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/fundamentals/_index.md @@ -15,4 +15,4 @@ weight: 1 ### nice article about platform orchestration automation (introducing BACK stack) -* https://dev.to/thenjdevopsguy/creating-your-platform-engineering-environment-4hpa +* https://dev.to/thenjdevopsguy/creating-your-platform-engineering-environment-4hpa \ No newline at end of file diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md b/content/en/docs/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md similarity index 94% rename from content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md rename to content/en/docs/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md index 54259ed..2565522 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/fundamentals/cicd-definition/_index.md @@ -12,10 +12,9 @@ Der Produktionsprozess für Applikationen soll im Kontext von Gitops und Plattfo In Gitops basierten Plattformen (Anm.: wie es zB. CNOE und Humanitec mit ArgoCD sind) trifft das klassische Verständnis von Pipelining mit finalem Pushing des fertigen Builds auf die Target-Plattform nicht mehr zu. -D.h. in diesem fall is Argo CD = Continuous Delivery = Pulling des desired state auf die Target plattform. Eine pipeline hat hier keien Rechte mehr, single source of truth ist das 'Control-Git'. +D.h. in diesem fall is Argo CD = Continuous Delivery = Pulling des desired state auf die Target plattform. Eine pipeline hat hier keien Rechte mehr, single source of truth ist das 'Control-Git'. D.h. es stellen sich zwei Fragen: - 1. Wie sieht der adaptierte Workflow aus, der die 'Single Source of Truth' im 'Control-Git' definiert? Was ist das gewünschte korrekte Wording? Was bedeuen CI und CD in diesem (neuen) Kontext ? Auf welchen Environmants laufen Steps (zB Funktionstest), die eben nicht mehr auf einer gitops-kontrollierten Stage laufen? 2. Wie sieht der Workflow aus für 'Events', die nach dem CI/CD in die single source of truth einfliessen? ZB. abnahmen auf einer Abnahme Stage, oder Integrationsprobleme auf einer test Stage @@ -23,9 +22,9 @@ D.h. es stellen sich zwei Fragen: * Es sollen existierende, typische Pipelines hergenommen werden und auf die oben skizzierten Fragestellungen hin untersucht und angepasst werden. * In lokalen Demo-Systemen (mit oder ohne CNOE aufgesetzt) sollen die Pipeline entwürfe dummyhaft dargestellt werden und luffähig sein. -* Für den POC sollen Workflow-Systeme wie Dagger, Argo Workflow, Flux, Forgejo Actions zum Einsatz kommen. +* Für den POC sollen Workflow-Systeme wie Dagger, Argo Workflow, Flux, Forgejo Actions zum Einsatz kommen. ## Further ideas for POSs -* see sample flows in https://docs.kubefirst.io/ +* see sample flows in https://docs.kubefirst.io/ \ No newline at end of file diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/image.png b/content/en/docs/project/plan-in-2024/streams/fundamentals/image.png similarity index 100% rename from content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/image.png rename to content/en/docs/project/plan-in-2024/streams/fundamentals/image.png diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md b/content/en/docs/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md similarity index 93% rename from content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md rename to content/en/docs/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md index 33d842d..c4d21c9 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/fundamentals/platform-definition/_index.md @@ -4,14 +4,14 @@ linkTitle: Platform Definition weight: 1 --- -## Summary +## Summary -Das theoretische Fundament unserer Plattform-Architektur soll begründet und weitere wesentliche Erfahrungen anderer Player durch Recherche erhoben werden, so dass unser aktuelles Zielbild abgesichert ist. +Das theoretische Fundament unserer Plattform-Architektur soll begründet und weitere wesentliche Erfahrungen anderer Player durch Recherche erhoben werden, so dass unser aktuelles Zielbild abgesichert ist. ## Rationale -Wir starten gerade auf der Bais des Referenzmodells zu Platform-Engineering von Gartner und Huamitec. -Es gibt viele weitere Grundlagen und Entwicklungen zu Platform Engineering. +Wir starten gerade auf der Bais des Referenzmodells zu Platform-Engineering von Gartner und Huamitec. +Es gibt viele weitere Grundlagen und Entwicklungen zu Platform Engineering. ## Task @@ -25,3 +25,6 @@ Es gibt viele weitere Grundlagen und Entwicklungen zu Platform Engineering. * Argumentation für unseren Weg zusammentragen. * Best Practices und wichtige Tipps und Erfahrungen zusammentragen. + + + diff --git a/content/en/docs/project/plan-in-2024/streams/pocs/_index.md b/content/en/docs/project/plan-in-2024/streams/pocs/_index.md new file mode 100644 index 0000000..fb81dfc --- /dev/null +++ b/content/en/docs/project/plan-in-2024/streams/pocs/_index.md @@ -0,0 +1,8 @@ +--- +title: POCs +weight: 2 +--- + +## Further ideas for POSs + +* see sample apps 'metaphor' in https://docs.kubefirst.io/ \ No newline at end of file diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/cnoe/_index.md b/content/en/docs/project/plan-in-2024/streams/pocs/cnoe/_index.md similarity index 97% rename from content/en/docs-old/v1/project/plan-in-2024/streams/pocs/cnoe/_index.md rename to content/en/docs/project/plan-in-2024/streams/pocs/cnoe/_index.md index 9d0f324..1a48228 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/cnoe/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/pocs/cnoe/_index.md @@ -11,7 +11,7 @@ Als designiertes Basis-Tool des Developer Frameworks sollen die Verwendung und d ## Rationale -CNOE ist das designierte Werkzeug zur Beschreibung und Ausspielung des Developer Frameworks. +CNOE ist das designierte Werkzeug zur Beschreibung und Ausspielung des Developer Frameworks. Dieses Werkzeug gilt es zu erlernen, zu beschreiben und weiterzuentwickeln. Insbesondere der Metacharkter des 'Software zur Bereitstellung von Bereitstellungssoftware für Software', d.h. der unterschiedlichen Ebenen für unterschiedliche Use Cases und Akteure soll klar verständlich und dokumentiert werden. Siehe hierzu auch das Webinar von Huamnitec und die Diskussion zu unterschiedlichen Bereitstellungsmethoden eines RedisCaches. @@ -29,3 +29,4 @@ Insbesondere der Metacharkter des 'Software zur Bereitstellung von Bereitstellun * k3d anstatt kind * kind: ggf. issue mit kindnet, ersetzen durch Cilium + diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/kratix/_index.md b/content/en/docs/project/plan-in-2024/streams/pocs/kratix/_index.md similarity index 100% rename from content/en/docs-old/v1/project/plan-in-2024/streams/pocs/kratix/_index.md rename to content/en/docs/project/plan-in-2024/streams/pocs/kratix/_index.md diff --git a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/sia-asset/_index.md b/content/en/docs/project/plan-in-2024/streams/pocs/sia-asset/_index.md similarity index 99% rename from content/en/docs-old/v1/project/plan-in-2024/streams/pocs/sia-asset/_index.md rename to content/en/docs/project/plan-in-2024/streams/pocs/sia-asset/_index.md index 60967a9..147f8a8 100644 --- a/content/en/docs-old/v1/project/plan-in-2024/streams/pocs/sia-asset/_index.md +++ b/content/en/docs/project/plan-in-2024/streams/pocs/sia-asset/_index.md @@ -47,4 +47,4 @@ graph TB LocalBox.EDF -. "provision" .-> LocalBox.Local LocalBox.EDF -. "provision" .-> CloudGroup.Prod LocalBox.EDF -. "provision" .-> CloudGroup.Test -``` +``` \ No newline at end of file diff --git a/content/en/docs/solution/_index.md b/content/en/docs/solution/_index.md new file mode 100644 index 0000000..7afabb6 --- /dev/null +++ b/content/en/docs/solution/_index.md @@ -0,0 +1,8 @@ +--- +title: Solution +weight: 2 +description: The underlying platfroming concepts of the EDF solution, the solution domain +--- + +All output the project created: Design, Building blocks, results, show cases, artifacts + diff --git a/content/en/docs-old/v1/solution/scenarios/_index.md b/content/en/docs/solution/scenarios/_index.md similarity index 100% rename from content/en/docs-old/v1/solution/scenarios/_index.md rename to content/en/docs/solution/scenarios/_index.md diff --git a/content/en/docs-old/v1/solution/scenarios/gitops/_index.md b/content/en/docs/solution/scenarios/gitops/_index.md similarity index 90% rename from content/en/docs-old/v1/solution/scenarios/gitops/_index.md rename to content/en/docs/solution/scenarios/gitops/_index.md index 81490f5..b0191fb 100644 --- a/content/en/docs-old/v1/solution/scenarios/gitops/_index.md +++ b/content/en/docs/solution/scenarios/gitops/_index.md @@ -13,4 +13,4 @@ What kind of Gitops do we have with idpbuilder/CNOE ? https://github.com/gitops-bridge-dev/gitops-bridge -![alt text](image.png) +![alt text](image.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/scenarios/gitops/image.png b/content/en/docs/solution/scenarios/gitops/image.png similarity index 100% rename from content/en/docs-old/v1/solution/scenarios/gitops/image.png rename to content/en/docs/solution/scenarios/gitops/image.png diff --git a/content/en/docs-old/v1/solution/scenarios/orchestration/_index.md b/content/en/docs/solution/scenarios/orchestration/_index.md similarity index 96% rename from content/en/docs-old/v1/solution/scenarios/orchestration/_index.md rename to content/en/docs/solution/scenarios/orchestration/_index.md index d45f7d5..2ef6417 100644 --- a/content/en/docs-old/v1/solution/scenarios/orchestration/_index.md +++ b/content/en/docs/solution/scenarios/orchestration/_index.md @@ -18,7 +18,7 @@ The next chart shows a system landscape of CNOE orchestration. [2024-04-PlatformEngineering-DevOpsDayRaleigh.pdf](https://github.com/cnoe-io/presentations/blob/main/2024-04-PlatformEngineering-DevOpsDayRaleigh.pdf) -Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist? +Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist? ![alt text](image.png) @@ -28,7 +28,7 @@ The next chart shows a context chart of CNOE orchestration. [reference-implementation-aws](https://github.com/cnoe-io/reference-implementation-aws) -Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist? +Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist? -![alt text](image-1.png) +![alt text](image-1.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/scenarios/orchestration/image-1.png b/content/en/docs/solution/scenarios/orchestration/image-1.png similarity index 100% rename from content/en/docs-old/v1/solution/scenarios/orchestration/image-1.png rename to content/en/docs/solution/scenarios/orchestration/image-1.png diff --git a/content/en/docs-old/v1/solution/scenarios/orchestration/image.png b/content/en/docs/solution/scenarios/orchestration/image.png similarity index 100% rename from content/en/docs-old/v1/solution/scenarios/orchestration/image.png rename to content/en/docs/solution/scenarios/orchestration/image.png diff --git a/content/en/docs-old/v1/solution/tools/Backstage/Backstage setup tutorial/_index.md b/content/en/docs/solution/tools/Backstage/Backstage setup tutorial/_index.md similarity index 84% rename from content/en/docs-old/v1/solution/tools/Backstage/Backstage setup tutorial/_index.md rename to content/en/docs/solution/tools/Backstage/Backstage setup tutorial/_index.md index 9f8f288..d8cdba2 100644 --- a/content/en/docs-old/v1/solution/tools/Backstage/Backstage setup tutorial/_index.md +++ b/content/en/docs/solution/tools/Backstage/Backstage setup tutorial/_index.md @@ -33,11 +33,9 @@ To install the Backstage Standalone app, you can use npx. npx is a tool that com ```bash npx @backstage/create-app@latest ``` - This command will create a new directory with a Backstage app inside. The wizard will ask you for the name of the app. This name will be created as sub directory in your current working directory. Below is a simplified layout of the files and folders generated when creating an app. - ```bash app ├── app-config.yaml @@ -48,17 +46,15 @@ app └── backend ``` -* **app-config.yaml**: Main configuration file for the app. See Configuration for more information. -* **catalog-info.yaml**: Catalog Entities descriptors. See Descriptor Format of Catalog Entities to get started. -* **package.json**: Root package.json for the project. Note: Be sure that you don't add any npm dependencies here as they probably should be installed in the intended workspace rather than in the root. -* **packages/**: Lerna leaf packages or "workspaces". Everything here is going to be a separate package, managed by lerna. -* **packages/app/**: A fully functioning Backstage frontend app that acts as a good starting point for you to get to know Backstage. -* **packages/backend/**: We include a backend that helps power features such as Authentication, Software Catalog, Software Templates, and TechDocs, amongst other things. +- **app-config.yaml**: Main configuration file for the app. See Configuration for more information. +- **catalog-info.yaml**: Catalog Entities descriptors. See Descriptor Format of Catalog Entities to get started. +- **package.json**: Root package.json for the project. Note: Be sure that you don't add any npm dependencies here as they probably should be installed in the intended workspace rather than in the root. +- **packages/**: Lerna leaf packages or "workspaces". Everything here is going to be a separate package, managed by lerna. +- **packages/app/**: A fully functioning Backstage frontend app that acts as a good starting point for you to get to know Backstage. +- **packages/backend/**: We include a backend that helps power features such as Authentication, Software Catalog, Software Templates, and TechDocs, amongst other things. ## Run the Backstage Application - You can run it in Backstage root directory by executing this command: - ```bash yarn dev ``` diff --git a/content/en/docs/solution/tools/Backstage/Exsisting Plugins/_index.md b/content/en/docs/solution/tools/Backstage/Exsisting Plugins/_index.md new file mode 100644 index 0000000..d449433 --- /dev/null +++ b/content/en/docs/solution/tools/Backstage/Exsisting Plugins/_index.md @@ -0,0 +1,49 @@ ++++ +title = "Existing Backstage Plugins" +weight = 4 ++++ + +1. **Catalog**: + - Used for managing services and microservices, including registration, visualization, and the ability to track dependencies and relationships between services. It serves as a central directory for all services in an organization. + +2. **Docs**: + - Designed for creating and managing documentation, supporting formats such as Markdown. It helps teams organize and access technical and non-technical documentation in a unified interface. + +3. **API Docs**: + - Automatically generates API documentation based on OpenAPI specifications or other API definitions, ensuring that your API information is always up to date and accessible for developers. + +4. **TechDocs**: + - A tool for creating and publishing technical documentation. It is integrated directly into Backstage, allowing developers to host and maintain documentation alongside their projects. + +5. **Scaffolder**: + - Allows the rapid creation of new projects based on predefined templates, making it easier to deploy services or infrastructure with consistent best practices. + +6. **CI/CD**: + - Provides integration with CI/CD systems such as GitHub Actions and Jenkins, allowing developers to view build status, logs, and pipelines directly in Backstage. + +7. **Metrics**: + - Offers the ability to monitor and visualize performance metrics for applications, helping teams to keep track of key indicators like response times and error rates. + +8. **Snyk**: + - Used for dependency security analysis, scanning your codebase for vulnerabilities and helping to manage any potential security risks in third-party libraries. + +9. **SonarQube**: + - Integrates with SonarQube to analyze code quality, providing insights into code health, including issues like technical debt, bugs, and security vulnerabilities. + +10. **GitHub**: + - Enables integration with GitHub repositories, displaying information such as commits, pull requests, and other repository activity, making collaboration more transparent and efficient. + +11. **CircleCI**: + - Allows seamless integration with CircleCI for managing CI/CD workflows, giving developers insight into build pipelines, test results, and deployment statuses. + +12. **Kubernetes**: + - Provides tools to manage Kubernetes clusters, including visualizing pod status, logs, and cluster health, helping teams maintain and troubleshoot their cloud-native applications. + +13. **Cloud**: + - Includes plugins for integration with cloud providers like AWS and Azure, allowing teams to manage cloud infrastructure, services, and billing directly from Backstage. + +14. **OpenTelemetry**: + - Helps with monitoring distributed applications by integrating OpenTelemetry, offering powerful tools to trace requests, detect performance bottlenecks, and ensure application health. + +15. **Lighthouse**: + - Integrates Google Lighthouse to analyze web application performance, helping teams identify areas for improvement in metrics like load times, accessibility, and SEO. diff --git a/content/en/docs-old/v1/solution/tools/Backstage/General Information/_index.md b/content/en/docs/solution/tools/Backstage/General Information/_index.md similarity index 98% rename from content/en/docs-old/v1/solution/tools/Backstage/General Information/_index.md rename to content/en/docs/solution/tools/Backstage/General Information/_index.md index 09d2514..54dabd1 100644 --- a/content/en/docs-old/v1/solution/tools/Backstage/General Information/_index.md +++ b/content/en/docs/solution/tools/Backstage/General Information/_index.md @@ -21,4 +21,4 @@ Backstage supports the concept of "Golden Paths," enabling teams to follow recom Modularity and Extensibility: The platform allows for the creation of plugins, enabling users to customize and extend Backstage's functionality to fit their organization's needs. -Backstage provides developers with centralized and convenient access to essential tools and resources, making it an effective solution for supporting Platform Engineering and developing an internal platform portal. +Backstage provides developers with centralized and convenient access to essential tools and resources, making it an effective solution for supporting Platform Engineering and developing an internal platform portal. \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/_index.md b/content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/_index.md similarity index 99% rename from content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/_index.md rename to content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/_index.md index e83bc96..a975456 100644 --- a/content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/_index.md +++ b/content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/_index.md @@ -3,7 +3,6 @@ title = "Plugin Creation Tutorial" weight = 4 +++ Backstage plugins and functionality extensions should be writen in TypeScript/Node.js because backstage is written in those languages - ### General Algorithm for Adding a Plugin in Backstage 1. **Create the Plugin** @@ -34,7 +33,6 @@ Backstage plugins and functionality extensions should be writen in TypeScript/No Run the Backstage development server using `yarn dev` and navigate to your plugin’s route via the sidebar or directly through its URL. Ensure that the plugin’s functionality works as expected. ### Example - All steps will be demonstrated using a simple example plugin, which will request JSON files from the API of jsonplaceholder.typicode.com and display them on a page. 1. Creating test-plugin: @@ -123,9 +121,8 @@ All steps will be demonstrated using a simple example plugin, which will request }; ``` - + 3. Setup routs in plugins/{plugin_id}/src/routs.ts - ```javascript import { createRouteRef } from '@backstage/core-plugin-api'; @@ -136,13 +133,11 @@ All steps will be demonstrated using a simple example plugin, which will request 4. Register the plugin in `packages/app/src/App.tsx` in routes Import of the plugin: - ```javascript import { TestPluginPage } from '@internal/backstage-plugin-test-plugin'; ``` Adding route: - ```javascript const routes = ( @@ -153,7 +148,6 @@ All steps will be demonstrated using a simple example plugin, which will request ``` 5. Add Item to sidebar menu of the backstage in `packages/app/src/components/Root/Root.tsx`. This should be added in to Root object as another SidebarItem - ```javascript export const Root = ({ children }: PropsWithChildren<{}>) => ( @@ -165,12 +159,11 @@ All steps will be demonstrated using a simple example plugin, which will request ); ``` - + 6. Plugin is ready. Run the application - ```bash yarn dev ``` ![example](example_1.png) -![example](example_2.png) +![example](example_2.png) \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/example_1.png b/content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/example_1.png similarity index 100% rename from content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/example_1.png rename to content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/example_1.png diff --git a/content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/example_2.png b/content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/example_2.png similarity index 100% rename from content/en/docs-old/v1/solution/tools/Backstage/Plugin Creation Tutorial/example_2.png rename to content/en/docs/solution/tools/Backstage/Plugin Creation Tutorial/example_2.png diff --git a/content/en/docs/solution/tools/Backstage/_index.md b/content/en/docs/solution/tools/Backstage/_index.md new file mode 100644 index 0000000..df22096 --- /dev/null +++ b/content/en/docs/solution/tools/Backstage/_index.md @@ -0,0 +1,9 @@ ++++ +title = "Backstage" +weight = 2 +[params] + author = 'evgenii.dominov@telekom.de' + date = '2024-09-36' ++++ + +Here you will find information about Backstage, it's plugins and usage tutorials \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/CNOE/CNOE-competitors/_index.md b/content/en/docs/solution/tools/CNOE-competitors/_index.md similarity index 74% rename from content/en/docs-old/v1/solution/tools/CNOE/CNOE-competitors/_index.md rename to content/en/docs/solution/tools/CNOE-competitors/_index.md index dfed2d0..2f8772e 100644 --- a/content/en/docs-old/v1/solution/tools/CNOE/CNOE-competitors/_index.md +++ b/content/en/docs/solution/tools/CNOE-competitors/_index.md @@ -1,70 +1,67 @@ ---- -title: Analysis of CNOE competitors -weight: 1 -description: We compare CNOW - which we see as an orchestrator - with other platform orchestring tools like Kratix and Humanitc ---- ++++ +title = "Analysis of the CNOE competitors" +weight = 1 ++++ ## Kratix Kratix is a Kubernetes-native framework that helps platform engineering teams automate the provisioning and management of infrastructure and services through custom-defined abstractions called Promises. It allows teams to extend Kubernetes functionality and provide resources in a self-service manner to developers, streamlining the delivery and management of workloads across environments. ### Concepts - Key concepts of Kratix: -* Workload: +- Workload: This is an abstraction representing any application or service that needs to be deployed within the infrastructure. It defines the requirements and dependent resources necessary to execute this task. -* Promise: +- Promise: A "Promise" is a ready-to-use infrastructure or service package. Promises allow developers to request specific resources (such as databases, storage, or computing power) through the standard Kubernetes interface. It’s similar to an operator in Kubernetes but more universal and flexible. Kratix simplifies the development and delivery of applications by automating the provisioning and management of infrastructure and resources through simple Kubernetes APIs. -### Pros of Kratix -* Resource provisioning automation. Kratix simplifies infrastructure creation for developers through the abstraction of "Promises." This means developers can simply request the necessary resources (like databases, message queues) without dealing with the intricacies of infrastructure management. +### Pros of Kratix: +- Resource provisioning automation. Kratix simplifies infrastructure creation for developers through the abstraction of "Promises." This means developers can simply request the necessary resources (like databases, message queues) without dealing with the intricacies of infrastructure management. -* Flexibility and adaptability. Platform teams can customize and adapt Kratix to specific needs by creating custom Promises for various services, allowing the infrastructure to meet the specific requirements of the organization. +- Flexibility and adaptability. Platform teams can customize and adapt Kratix to specific needs by creating custom Promises for various services, allowing the infrastructure to meet the specific requirements of the organization. -* Unified resource request interface. Developers can use a single API (Kubernetes) to request resources, simplifying interaction with infrastructure and reducing complexity when working with different tools and systems. +- Unified resource request interface. Developers can use a single API (Kubernetes) to request resources, simplifying interaction with infrastructure and reducing complexity when working with different tools and systems. -### Cons of Kratix -* Although Kratix offers great flexibility, it can also lead to more complex setup and platform management processes. Creating custom Promises and configuring their behavior requires time and effort. +### Cons of Kratix: +- Although Kratix offers great flexibility, it can also lead to more complex setup and platform management processes. Creating custom Promises and configuring their behavior requires time and effort. -* Kubernetes dependency. Kratix relies on Kubernetes, which makes it less applicable in environments that don’t use Kubernetes or containerization technologies. It might also lead to integration challenges if an organization uses other solutions. +- Kubernetes dependency. Kratix relies on Kubernetes, which makes it less applicable in environments that don’t use Kubernetes or containerization technologies. It might also lead to integration challenges if an organization uses other solutions. -* Limited ecosystem. Kratix doesn’t have as mature an ecosystem as some other infrastructure management solutions (e.g., Terraform, Pulumi). This may limit the availability of ready-made solutions and tools, increasing the amount of manual work when implementing Kratix. +- Limited ecosystem. Kratix doesn’t have as mature an ecosystem as some other infrastructure management solutions (e.g., Terraform, Pulumi). This may limit the availability of ready-made solutions and tools, increasing the amount of manual work when implementing Kratix. ## Humanitec -Humanitec is an Internal Developer Platform (IDP) that helps platform engineering teams automate the provisioning -and management of infrastructure and services through dynamic configuration and environment management. +Humanitec is an Internal Developer Platform (IDP) that helps platform engineering teams automate the provisioning +and management of infrastructure and services through dynamic configuration and environment management. It allows teams to extend their infrastructure capabilities and provide resources in a self-service manner to developers, streamlining the deployment and management of workloads across various environments. ### Concepts - Key concepts of Humanitec: -* Application Definition: +- Application Definition: This is an abstraction where developers define their application, including its services, environments, a dependencies. It abstracts away infrastructure details, allowing developers to focus on building and deploying their applications. -* Dynamic Configuration Management: +- Dynamic Configuration Management: Humanitec automatically manages the configuration of applications and services across multiple environments (e.g., development, staging, production). It ensures consistency and alignment of configurations as applications move through different stages of deployment. -Humanitec simplifies the development and delivery process by providing self-service deployment options while maintaining +Humanitec simplifies the development and delivery process by providing self-service deployment options while maintaining centralized governance and control for platform teams. -### Pros of Humanitec -* Resource provisioning automation. Humanitec automates infrastructure and environment provisioning, allowing developers to focus on building and deploying applications without worrying about manual configuration. +### Pros of Humanitec: +- Resource provisioning automation. Humanitec automates infrastructure and environment provisioning, allowing developers to focus on building and deploying applications without worrying about manual configuration. -* Dynamic environment management. Humanitec manages application configurations across different environments, ensuring consistency and reducing manual configuration errors. +- Dynamic environment management. Humanitec manages application configurations across different environments, ensuring consistency and reducing manual configuration errors. -* Golden Paths. best-practice workflows and processes that guide developers through infrastructure provisioning and application deployment. This ensures consistency and reduces cognitive load by providing a set of recommended practices. +- Golden Paths. best-practice workflows and processes that guide developers through infrastructure provisioning and application deployment. This ensures consistency and reduces cognitive load by providing a set of recommended practices. -* Unified resource management interface. Developers can use Humanitec’s interface to request resources and deploy applications, reducing complexity and improving the development workflow. +- Unified resource management interface. Developers can use Humanitec’s interface to request resources and deploy applications, reducing complexity and improving the development workflow. -### Cons of Humanitec -* Humanitec is commercially licensed software +### Cons of Humanitec: +- Humanitec is commercially licensed software -* Integration challenges. Humanitec’s dependency on specific cloud-native environments can create challenges for organizations with diverse infrastructures or those using legacy systems. +- Integration challenges. Humanitec’s dependency on specific cloud-native environments can create challenges for organizations with diverse infrastructures or those using legacy systems. -* Cost. Depending on usage, Humanitec might introduce additional costs related to the implementation of an Internal Developer Platform, especially for smaller teams. +- Cost. Depending on usage, Humanitec might introduce additional costs related to the implementation of an Internal Developer Platform, especially for smaller teams. -* Harder to customise +- Harder to customise diff --git a/content/en/docs-old/v1/solution/tools/_index.md b/content/en/docs/solution/tools/_index.md similarity index 100% rename from content/en/docs-old/v1/solution/tools/_index.md rename to content/en/docs/solution/tools/_index.md diff --git a/content/en/docs/solution/tools/idpbuilder/_index.md b/content/en/docs/solution/tools/idpbuilder/_index.md new file mode 100644 index 0000000..e302c08 --- /dev/null +++ b/content/en/docs/solution/tools/idpbuilder/_index.md @@ -0,0 +1,6 @@ ++++ +title = "idpbuilder" +weight = 3 ++++ + +Here you will find information about idpbuilder installation and usage \ No newline at end of file diff --git a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/installation/_index.md b/content/en/docs/solution/tools/idpbuilder/installation/_index.md similarity index 93% rename from content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/installation/_index.md rename to content/en/docs/solution/tools/idpbuilder/installation/_index.md index fbb475d..f30b4b5 100644 --- a/content/en/docs-old/v1/solution/tools/CNOE/idpbuilder/installation/_index.md +++ b/content/en/docs/solution/tools/idpbuilder/installation/_index.md @@ -11,10 +11,10 @@ Windows and Mac users already utilize a virtual machine for the Docker Linux env ### Prerequisites -* Docker Engine -* Go -* kubectl -* kind +- Docker Engine +- Go +- kubectl +- kind ### Build process @@ -76,28 +76,28 @@ idpbuilder delete cluster CNOE provides two implementations of an IDP: -* Amazon AWS implementation -* KIND implementation +- Amazon AWS implementation +- KIND implementation Both are not useable to run on bare metal or an OSC instance. The Amazon implementation is complex and makes use of Terraform which is currently not supported by either base metal or OSC. Therefore the KIND implementation is used and customized to support the idpbuilder installation. The idpbuilder is also doing some network magic which needs to be replicated. Several prerequisites have to be provided to support the idpbuilder on bare metal or the OSC: -* Kubernetes dependencies -* Network dependencies -* Changes to the idpbuilder - +- Kubernetes dependencies +- Network dependencies +- Changes to the idpbuilder + ### Prerequisites Talos Linux is choosen for a bare metal Kubernetes instance. -* talosctl -* Go -* Docker Engine -* kubectl -* kustomize -* helm -* nginx +- talosctl +- Go +- Docker Engine +- kubectl +- kustomize +- helm +- nginx As soon as the idpbuilder works correctly on bare metal, the next step is to apply it to an OSC instance. @@ -338,14 +338,14 @@ talosctl cluster destroy Required: -* Add *.cnoe.localtest.me to the Talos cluster DNS, pointing to the host device IP address, which runs nginx. +- Add *.cnoe.localtest.me to the Talos cluster DNS, pointing to the host device IP address, which runs nginx. -* Create a SSL certificate with `cnoe.localtest.me` as common name. Edit the nginx config to load this certificate. Configure idpbuilder to distribute this certificate instead of the one idpbuilder distributes by idefault. +- Create a SSL certificate with `cnoe.localtest.me` as common name. Edit the nginx config to load this certificate. Configure idpbuilder to distribute this certificate instead of the one idpbuilder distributes by idefault. Optimizations: -* Implement an idpbuilder uninstall. This is specially important when working on the OSC instance. +- Implement an idpbuilder uninstall. This is specially important when working on the OSC instance. -* Remove or configure gitea.cnoe.localtest.me, it seems not to work even in the idpbuilder local installation with KIND. +- Remove or configure gitea.cnoe.localtest.me, it seems not to work even in the idpbuilder local installation with KIND. -* Improvements to the idpbuilder to support Kubernetes instances other then KIND. This can either be done by parametrization or by utilizing Terraform / OpenTOFU or Crossplane. +- Improvements to the idpbuilder to support Kubernetes instances other then KIND. This can either be done by parametrization or by utilizing Terraform / OpenTOFU or Crossplane. diff --git a/devbox.json b/devbox.json deleted file mode 100644 index 4c3241a..0000000 --- a/devbox.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.10.5/.schema/devbox.schema.json", - "packages": [ - "hugo@0.151.0", - "dart-sass@latest", - "go@1.25.1", - "nodejs@24.10.0", - "htmltest@latest", - "go-task@latest" - ], - "shell": { - "init_hook": [], - "scripts": {} - } -} diff --git a/devbox.lock b/devbox.lock deleted file mode 100644 index 678ea90..0000000 --- a/devbox.lock +++ /dev/null @@ -1,346 +0,0 @@ -{ - "lockfile_version": "1", - "packages": { - "dart-sass@latest": { - "last_modified": "2025-10-11T06:31:15Z", - "resolved": "github:NixOS/nixpkgs/362791944032cb532aabbeed7887a441496d5e6e#dart-sass", - "source": "devbox-search", - "version": "1.93.2", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/2wjcjimv86a010lvbsqiyjdl2jmbz49z-dart-sass-1.93.2", - "default": true - }, - { - "name": "pubcache", - "path": "/nix/store/r8d714i4fgjgsv1hj875afbp0n9cq4gi-dart-sass-1.93.2-pubcache" - } - ], - "store_path": "/nix/store/2wjcjimv86a010lvbsqiyjdl2jmbz49z-dart-sass-1.93.2" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/r8a0s7gf8chy7p5jjhdj4ip5a3jjyjb0-dart-sass-1.93.2", - "default": true - }, - { - "name": "pubcache", - "path": "/nix/store/b68qdyy9zwzanlvcqf9ppj1yna7svkna-dart-sass-1.93.2-pubcache" - } - ], - "store_path": "/nix/store/r8a0s7gf8chy7p5jjhdj4ip5a3jjyjb0-dart-sass-1.93.2" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/i09v3a327zg2kcby5kapqpyrx1ijh8vi-dart-sass-1.93.2", - "default": true - }, - { - "name": "pubcache", - "path": "/nix/store/ranyl11vksmg46nf9biw4nwk8h0hpqv9-dart-sass-1.93.2-pubcache" - } - ], - "store_path": "/nix/store/i09v3a327zg2kcby5kapqpyrx1ijh8vi-dart-sass-1.93.2" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/hqfw052brhr3ln21sw347jgdva8z33qh-dart-sass-1.93.2", - "default": true - }, - { - "name": "pubcache", - "path": "/nix/store/5vfpdb333pcbxw7adky8nbqjn2r4dc5h-dart-sass-1.93.2-pubcache" - } - ], - "store_path": "/nix/store/hqfw052brhr3ln21sw347jgdva8z33qh-dart-sass-1.93.2" - } - } - }, - "github:NixOS/nixpkgs/nixpkgs-unstable": { - "last_modified": "2025-10-20T13:06:07Z", - "resolved": "github:NixOS/nixpkgs/cb82756ecc37fa623f8cf3e88854f9bf7f64af93?lastModified=1760965567&narHash=sha256-0JDOal5P7xzzAibvD0yTE3ptyvoVOAL0rcELmDdtSKg%3D" - }, - "go-task@latest": { - "last_modified": "2025-10-07T08:41:47Z", - "resolved": "github:NixOS/nixpkgs/bce5fe2bb998488d8e7e7856315f90496723793c#go-task", - "source": "devbox-search", - "version": "3.45.4", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/jpyzi7ph07mxn64vr684rn4sn81rmdbv-go-task-3.45.4", - "default": true - } - ], - "store_path": "/nix/store/jpyzi7ph07mxn64vr684rn4sn81rmdbv-go-task-3.45.4" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/bhkmm0w7wmgncwvn8gmbsn254n0r9app-go-task-3.45.4", - "default": true - } - ], - "store_path": "/nix/store/bhkmm0w7wmgncwvn8gmbsn254n0r9app-go-task-3.45.4" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/pv4fd2995ys0dd4rvsqcn6cd2q2qi98s-go-task-3.45.4", - "default": true - } - ], - "store_path": "/nix/store/pv4fd2995ys0dd4rvsqcn6cd2q2qi98s-go-task-3.45.4" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/535z3a3p7hwdg4g3w4f4ssq44vnqsxqh-go-task-3.45.4", - "default": true - } - ], - "store_path": "/nix/store/535z3a3p7hwdg4g3w4f4ssq44vnqsxqh-go-task-3.45.4" - } - } - }, - "go@1.25.1": { - "last_modified": "2025-10-07T08:41:47Z", - "resolved": "github:NixOS/nixpkgs/bce5fe2bb998488d8e7e7856315f90496723793c#go", - "source": "devbox-search", - "version": "1.25.1", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/mkdfnr1nkfj2kznxyag9pypbxp3wqqdv-go-1.25.1", - "default": true - } - ], - "store_path": "/nix/store/mkdfnr1nkfj2kznxyag9pypbxp3wqqdv-go-1.25.1" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/0jzj8p7k9wkr4l17sgrlg3z5di27sggf-go-1.25.1", - "default": true - } - ], - "store_path": "/nix/store/0jzj8p7k9wkr4l17sgrlg3z5di27sggf-go-1.25.1" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/q2xylk8h3kbfajhw2lpdmyzyyqgqx8fl-go-1.25.1", - "default": true - } - ], - "store_path": "/nix/store/q2xylk8h3kbfajhw2lpdmyzyyqgqx8fl-go-1.25.1" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/f01qkydd3c2jqwi4w6hkddkf3blp16kw-go-1.25.1", - "default": true - } - ], - "store_path": "/nix/store/f01qkydd3c2jqwi4w6hkddkf3blp16kw-go-1.25.1" - } - } - }, - "htmltest@latest": { - "last_modified": "2025-10-07T08:41:47Z", - "resolved": "github:NixOS/nixpkgs/bce5fe2bb998488d8e7e7856315f90496723793c#htmltest", - "source": "devbox-search", - "version": "0.17.0", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/46gsr9pd5ssf705yl68mdb1wsls20q2p-htmltest-0.17.0", - "default": true - } - ], - "store_path": "/nix/store/46gsr9pd5ssf705yl68mdb1wsls20q2p-htmltest-0.17.0" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/chw7bw31lh3knq26p5ij6i7rq33wlhws-htmltest-0.17.0", - "default": true - } - ], - "store_path": "/nix/store/chw7bw31lh3knq26p5ij6i7rq33wlhws-htmltest-0.17.0" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/lclvbaw9h8jr3wq8y7jxyd5p67ljqnd0-htmltest-0.17.0", - "default": true - } - ], - "store_path": "/nix/store/lclvbaw9h8jr3wq8y7jxyd5p67ljqnd0-htmltest-0.17.0" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/0pywisrmyx271ryk3jd35hair132sc7k-htmltest-0.17.0", - "default": true - } - ], - "store_path": "/nix/store/0pywisrmyx271ryk3jd35hair132sc7k-htmltest-0.17.0" - } - } - }, - "hugo@0.151.0": { - "last_modified": "2025-10-09T02:37:25Z", - "resolved": "github:NixOS/nixpkgs/2dad7af78a183b6c486702c18af8a9544f298377#hugo", - "source": "devbox-search", - "version": "0.151.0", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/dcrip0cqzp49qrxj2y6866zivlh4ll7n-hugo-0.151.0", - "default": true - } - ], - "store_path": "/nix/store/dcrip0cqzp49qrxj2y6866zivlh4ll7n-hugo-0.151.0" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/7wkfywf6q4im4lqfb0px0gj1z470qbji-hugo-0.151.0", - "default": true - } - ], - "store_path": "/nix/store/7wkfywf6q4im4lqfb0px0gj1z470qbji-hugo-0.151.0" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/lgn4bf0axzgm44783j8rp24gjh87j1an-hugo-0.151.0", - "default": true - } - ], - "store_path": "/nix/store/lgn4bf0axzgm44783j8rp24gjh87j1an-hugo-0.151.0" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/jh0xghg9k3l7f8igldaqymj84fncyzcc-hugo-0.151.0", - "default": true - } - ], - "store_path": "/nix/store/jh0xghg9k3l7f8igldaqymj84fncyzcc-hugo-0.151.0" - } - } - }, - "nodejs@24.10.0": { - "last_modified": "2025-10-13T09:56:54Z", - "plugin_version": "0.0.2", - "resolved": "github:NixOS/nixpkgs/c12c63cd6c5eb34c7b4c3076c6a99e00fcab86ec#nodejs_24", - "source": "devbox-search", - "version": "24.10.0", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/355hbbr8bfhyij7vkqczbjmgqa9dbrsh-nodejs-24.10.0", - "default": true - }, - { - "name": "dev", - "path": "/nix/store/pfnl3nqxa7agrd4rw52z52pspss7nvbi-nodejs-24.10.0-dev" - }, - { - "name": "libv8", - "path": "/nix/store/ch0ss8jqxs4dda64786ap78s3vrfi3kz-nodejs-24.10.0-libv8" - } - ], - "store_path": "/nix/store/355hbbr8bfhyij7vkqczbjmgqa9dbrsh-nodejs-24.10.0" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/ybfap4y7drm5nbx358cj238ba87gp8bk-nodejs-24.10.0", - "default": true - }, - { - "name": "dev", - "path": "/nix/store/zdwjsr9hcb8ydkgwvljnm1rcbfg3336k-nodejs-24.10.0-dev" - }, - { - "name": "libv8", - "path": "/nix/store/lmcnw7gwb71bfy15qb87b1cphsxvj5jp-nodejs-24.10.0-libv8" - } - ], - "store_path": "/nix/store/ybfap4y7drm5nbx358cj238ba87gp8bk-nodejs-24.10.0" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/bgh57m6c4k348hd4wyb367xwkljq42ky-nodejs-24.10.0", - "default": true - }, - { - "name": "dev", - "path": "/nix/store/747r79izxv4jm0h1zn2qdyc7hbz06ckz-nodejs-24.10.0-dev" - }, - { - "name": "libv8", - "path": "/nix/store/2zb0z0qhzb29jlksjpc2vz0sk9icln1p-nodejs-24.10.0-libv8" - } - ], - "store_path": "/nix/store/bgh57m6c4k348hd4wyb367xwkljq42ky-nodejs-24.10.0" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/p2sk3402d788hqn5diy5gba8cskjffzz-nodejs-24.10.0", - "default": true - }, - { - "name": "dev", - "path": "/nix/store/fn613shrdw5k5d5is7h8rs3dmi9xrh37-nodejs-24.10.0-dev" - }, - { - "name": "libv8", - "path": "/nix/store/y9km82y1yqw1r7ld0xcifpj9zfzfy0q3-nodejs-24.10.0-libv8" - } - ], - "store_path": "/nix/store/p2sk3402d788hqn5diy5gba8cskjffzz-nodejs-24.10.0" - } - } - } - } -} diff --git a/doc/README-developer.md b/doc/README-developer.md deleted file mode 100644 index b01c9ec..0000000 --- a/doc/README-developer.md +++ /dev/null @@ -1,496 +0,0 @@ -# Developer Guide - IPCEI-CIS Developer Framework - -## 🚀 Quick Start - -### Prerequisites - -Install [Devbox](https://www.jetify.com/devbox/): -```bash -curl -fsSL https://get.jetify.com/devbox | bash -``` - -### Setup - -1. Clone the repository -2. Install dependencies: -```bash -task deps:install -``` -3. Start devbox shell: -```bash -devbox shell -``` - -Devbox automatically installs all required tools: -- Hugo (v0.151.0+extended) -- Go (v1.25.1) -- Node.js (v24.10.0) -- Dart Sass -- htmltest -- go-task - -> **Note:** For content contributors, see [README-technicalWriter.md](./README-technicalWriter.md) for a simplified guide. - -## 📚 Technology Stack - -### Hugo (v0.151.0+extended) - -Hugo is a fast static site generator. This project uses Hugo in extended mode with: -- **Docsy Theme** (v0.12.0) - Documentation theme with responsive design -- **Bootstrap 5.3.8** - UI framework -- **PostCSS** - CSS processing - -### Docsy Theme - -Docsy is a Hugo theme optimized for technical documentation: -- Multi-language support -- Search functionality -- Navigation menu system -- Code syntax highlighting -- Responsive design - -Key directories: -- `content/en/` - English content (Markdown files) -- `layouts/` - Custom layout overrides -- `assets/scss/` - Custom styles -- `static/` - Static assets (images, etc.) - -### LikeC4 (v1.43.0) - -LikeC4 is used for interactive architecture diagrams: -- C4 model-based architecture visualization -- Web Components for embedding diagrams -- Real-time preview during development - -Architecture models: -- `resources/edp-likec4/` - Platform architecture models -- `resources/doc-likec4/` - Documentation platform models - -LikeC4 tasks available: -- `task likec4:generate` - Generate web components -- `task likec4:validate` - Validate C4 models -- `task likec4:update` - Update LikeC4 version - -### Task (Taskfile) - -Task is a task runner / build tool that replaces Makefiles. It uses `Taskfile.yml` for defining tasks. - -## 🛠️ Development Workflow - -### Using Task (Recommended) - -View all available tasks: -```bash -task -# or -task --list -``` - -Common tasks: - -#### Development -```bash -task serve # Start Hugo dev server (http://localhost:1313) -task build # Build production site -task build:dev # Build development site -task clean # Clean build artifacts -``` - -#### Testing -```bash -task test # Run all tests -task test:quick # Run quick tests (without link checking) -task test:build # Test if Hugo builds successfully -task test:markdown # Lint Markdown files -task test:html # Validate HTML output -task test:links # Check all links (internal & external) -``` - -#### Dependencies -```bash -task deps:install # Install all dependencies -task deps:update # Update all dependencies -``` - -#### LikeC4 -```bash -task likec4:generate # Generate web components from C4 models -task likec4:validate # Validate C4 model syntax -task likec4:update # Update LikeC4 to latest version -``` - -#### Build & Test OCI Image -```bash -task build:oci-image # Build Docker/OCI image -task test:oci-image # Build and test image -``` - -#### CI/CD -```bash -task ci # Run full CI pipeline locally -``` - -## 🧪 Testing - -This project uses multiple automated tests for quality assurance. - -### Test Configuration Files - -- `.htmltest.yml` - Link checker configuration -- `.htmlvalidate.json` - HTML validation rules -- `.markdownlint.json` - Markdown linting rules - -### CI/CD Integration - -GitHub Actions runs these tests automatically on every push/PR via `.github/workflows/test.yml`. - -### Local Development Workflow - -**Before commit:** -```bash -task test:quick -``` - -**Before push:** -```bash -task test -``` - -## 🐳 Docker / Container Build - -### Version Management - -All tool versions are defined in `.env.versions` as the single source of truth: - -```bash -NODE_VERSION=24.10.0 -GO_VERSION=1.25.1 -HUGO_VERSION=0.151.0 -``` - -These versions are used in: -- `devbox.json` - Local development (manual sync required) -- `Dockerfile` - Build arguments with defaults -- `.github/workflows/ci.yaml` - CI/CD pipeline (automatic) - -**Updating versions:** - -1. Edit `.env.versions` -2. Manually sync `devbox.json`: - ```json - { - "packages": [ - "hugo@0.151.0", - "go@1.25.1", - "nodejs@24.10.0" - ] - } - ``` -3. Rebuild: `devbox shell --refresh` - -### Local Build - -**Using Task (recommended):** - -```bash -task build:oci-image # Build OCI image -task test:oci-image # Build and test -``` - -This automatically loads versions from `.env.versions` and tags with `latest` and git commit hash. - -**Helper script for manual builds:** - -```bash -source scripts/get-versions.sh -# Shows Docker build command with correct versions -``` - -**Manual build:** - -```bash -docker build --network=host \ - --build-arg NODE_VERSION=24.10.0 \ - --build-arg GO_VERSION=1.25.1 \ - --build-arg HUGO_VERSION=0.151.0 \ - -t ipceicis-developerframework:latest . -``` - -**Test the image:** - -```bash -docker run -d -p 8080:80 --name hugo-test ipceicis-developerframework:latest -curl http://localhost:8080 -docker stop hugo-test && docker rm hugo-test -``` - -### Image Structure - -- **Build Stage**: Node.js base, installs Go and Hugo -- **Runtime Stage**: nginx:alpine serves static content (~50MB) - -Build process: -1. Install npm dependencies -2. Download Hugo modules -3. Build static site (`hugo --gc --minify`) -4. Copy to nginx container - -### CI/CD Pipeline - -`.github/workflows/ci.yaml` automatically: -1. Extracts versions from devbox environment -2. Builds multi-arch images (amd64 + arm64) -3. Pushes to container registry - -**Required GitHub Secrets:** -- `PACKAGES_USER` - Registry username -- `PACKAGES_TOKEN` - Registry token/password - -#### CI/CD -```bash -task ci # Run full CI pipeline locally -``` - -### Using NPM Scripts (Alternative) - -If you prefer NPM: -```bash -npm test # All tests -npm run test:quick # Quick tests -npm run test:build # Build test -npm run test:markdown # Markdown linting -npm run test:html # HTML validation -npm run test:links # Link checking -``` - -### Using Hugo Directly - -```bash -# Development server -hugo server - -# Production build -hugo --gc --minify - -# Check version -hugo version -``` - -## 📁 Project Structure - -``` -. -├── content/ # Content files (Markdown) -│ └── en/ # English content -│ ├── docs/ # Documentation -│ └── blog/ # Blog posts -├── resources/ # LikeC4 architecture models -│ ├── edp-likec4/ # Platform architecture (C4 models) -│ └── doc-likec4/ # Documentation platform architecture -├── layouts/ # Custom HTML templates -│ └── shortcodes/ # Custom shortcodes (e.g., likec4-view) -├── static/ # Static files -│ └── js/ # JavaScript (LikeC4 webcomponents) -├── assets/ # Assets (SCSS, images) -├── public/ # Generated site (not in Git) -├── hugo.toml # Hugo configuration -├── go.mod # Hugo modules (Docsy theme) -├── Taskfile.yml # Task definitions -├── package.json # NPM dependencies & scripts -├── devbox.json # Devbox configuration -├── .env.versions # Version definitions (SSOT) -├── Dockerfile # Multi-stage container build -├── README.md # Main README -├── README-developer.md # This file -├── README-technicalWriter.md # Guide for content contributors -├── README-likec4.md # LikeC4 architecture modeling guide -└── RELEASE.md # Release process documentation -``` - -## 📝 Content Creation - -### Creating New Pages - -```bash -# Using Hugo -hugo new docs/concepts/my-page.md -hugo new blog/my-post.md - -# Or create manually in content/en/ -``` - -### Front Matter - -Every content file needs front matter: - -```yaml ---- -title: "My Page Title" -description: "Page description" -date: 2025-10-23 -weight: 10 # Order in navigation ---- - -Your content here... -``` - -### Using Docsy Shortcodes - -Docsy provides helpful shortcodes: - -#### Tabbed Panes -```markdown -{{}} - {{}} - Content for tab 1 - {{}} - {{}} - Content for tab 2 - {{}} -{{}} -``` - -#### Code Blocks -```markdown -{{}} -key: value -{{}} -``` - -#### Alerts -```markdown -{{}} -Important information -{{}} -``` - -#### LikeC4 Architecture Diagrams -```markdown -{{}} -``` - -Parameters: -- `view` - View ID from C4 model -- `project` - `"architecture"` or `"documentation-platform"` -- `title` - Optional custom title - -See [README-technicalWriter.md](./README-technicalWriter.md) for detailed LikeC4 workflow. - -## 🧪 Testing - -See [TESTING.md](TESTING.md) for detailed testing documentation. - -Quick reference: -- `task test` - Run all tests before committing -- `task test:quick` - Fast checks during development -- Tests run automatically on GitHub Actions for PRs - -## 🔧 Configuration - -### Hugo Configuration (`hugo.toml`) - -Main settings: -- `baseURL` - Site URL -- `title` - Site title -- `defaultContentLanguage` - Default language -- Module imports (Docsy theme) - -### Docsy Configuration - -Docsy-specific settings in `hugo.toml`: -```toml -[params] -github_repo = "your-repo" -github_branch = "main" -``` - -### Devbox Configuration (`devbox.json`) - -Defines all development tools and their versions. - -Update tools: -```bash -devbox update # Update all packages -task deps:update # Update all dependencies (devbox + npm + hugo modules) -``` - -## 🎨 Styling - -Custom styles in `assets/scss/_variables_project.scss`: -```scss -// Override Bootstrap/Docsy variables -$primary: #your-color; -``` - -Hugo will process SCSS automatically with PostCSS and Autoprefixer. - -## 🌐 Multi-Language Support - -Add new language: -1. Create `content//` directory -2. Add language config in `hugo.toml`: -```toml -[languages.] -languageName = "Language Name" -weight = 2 -``` - -## 🐛 Troubleshooting - -### "Module not found" errors -```bash -hugo mod get -u -hugo mod tidy -``` - -### PostCSS errors -```bash -npm install -``` - -### Build errors -```bash -task clean -task build -``` - -### Devbox issues -```bash -devbox update -devbox shell --refresh -``` - -## 📚 Resources - -- [Hugo Documentation](https://gohugo.io/documentation/) -- [Docsy Documentation](https://www.docsy.dev/docs/) -- [LikeC4 Documentation](https://likec4.dev/) -- [Taskfile Documentation](https://taskfile.dev/) -- [Devbox Documentation](https://www.jetify.com/devbox/docs/) - -**Project-specific guides:** -- [README-technicalWriter.md](./README-technicalWriter.md) - Content contributor guide -- [TESTING.md](./TESTING.md) - Detailed testing documentation -- [DOCUMENTOR-GUIDE.md](./DOCUMENTOR-GUIDE.md) - Quick reference for technicalWriters - -## 🤝 Contributing - -1. Create a feature branch -2. Make your changes -3. Run tests: `task test` -4. Commit with semantic messages: - - `feat(scope): add new feature` - - `fix(scope): fix bug` - - `docs(scope): update documentation` - - `test(scope): add tests` - - `chore(scope): maintenance` -5. Push and create pull request - -## 📦 Deployment - -Build for production: -```bash -task build -``` - -Output will be in `public/` directory, ready for deployment. diff --git a/doc/README-likec4.md b/doc/README-likec4.md deleted file mode 100644 index 9e70abf..0000000 --- a/doc/README-likec4.md +++ /dev/null @@ -1,383 +0,0 @@ -# LikeC4 Architecture Modeling - -This repository contains two distinct LikeC4 architecture projects for C4 model-based architecture visualization. - -## 📁 Project Structure - -### `resources/edp-likec4/` - -**Enterprise Developer Platform (EDP) Architecture** - -Contains architecture models for the platform itself - the systems, services, and infrastructure that make up the EDP. - -- **Purpose:** Document what we build -- **Models:** Platform components, services, deployment environments -- **Views:** System overviews, component details, deployment diagrams - -### `resources/doc-likec4/` - -**Documentation Platform Architecture** - -Contains architecture models that explain how this documentation system works - the Hugo/Docsy setup, CI/CD pipeline, and deployment process. - -- **Purpose:** Document how we document (meta-documentation) -- **Models:** Hugo, LikeC4, Taskfile, GitHub Actions, Edge deployment -- **Views:** Documentation workflow, CI/CD pipeline, testing capabilities - -## 🚀 Quick Start - -### 1. Install Dependencies - -```bash -# In the LikeC4 project directory -cd resources/edp-likec4 -# or -cd resources/doc-likec4 - -# Install dependencies (only once) -npm install -``` - -### 2. Start LikeC4 Preview - -Preview your architecture models in the browser: - -```bash -npm start -# Opens http://localhost:5173 -``` - -This launches the interactive LikeC4 viewer where you can: -- Navigate through all views -- Explore relationships -- Test changes in real-time - -### 3. Edit Models - -Edit `.c4` files in your project: - -**Example structure:** - -```text -resources/edp-likec4/ -├── models/ -│ ├── systems.c4 # System definitions -│ ├── services.c4 # Service components -│ └── infrastructure.c4 # Infrastructure elements -├── views/ -│ ├── overview.c4 # High-level views -│ ├── deployment/ # Deployment views -│ └── components/ # Component details -├── deployment/ -│ └── environments.c4 # Deployment configurations -└── likec4.config.json # LikeC4 configuration -``` - -**Example C4 model:** - -```likec4 -specification { - element system - element service - element database -} - -model { - mySystem = system 'My System' { - description 'System description' - - backend = service 'Backend API' { - description 'REST API service' - } - - db = database 'Database' { - description 'PostgreSQL database' - } - - backend -> db 'reads/writes' - } -} - -views { - view systemOverview { - title "System Overview" - - include mySystem - - autoLayout TopBottom - } -} -``` - -### 4. Generate Web Components - -After editing models, generate the web component for Hugo: - -```bash -# From repository root -task likec4:generate -``` - -This creates `static/js/likec4-webcomponent.js` (~2-3 MB) with all views. - -### 5. Embed in Hugo - -Use the `likec4-view` shortcode in Markdown: - -```markdown -{{}} -``` - -Parameters: -- `view` - View ID from your C4 model (required) -- `project` - `"architecture"` (edp-likec4) or `"documentation-platform"` (doc-likec4) -- `title` - Optional custom title - -## 🔄 Development Workflow - -### Architecture Changes Workflow - -1. **Edit Models** - - Modify `.c4` files in `models/` or `views/` - -2. **Preview Changes** - ```bash - cd resources/edp-likec4 # or doc-likec4 - npm start - ``` - Opens http://localhost:5173 for real-time preview - -3. **Validate Models** - ```bash - # From repository root - task likec4:validate - ``` - -4. **Generate Web Components** - ```bash - task likec4:generate - ``` - -5. **Test in Hugo** - ```bash - task serve - # Open http://localhost:1313 - ``` - -6. **Commit Changes** - ```bash - git add resources/edp-likec4/ - git add resources/doc-likec4/ - git add static/js/likec4-webcomponent.js - git commit -m "feat: update architecture diagrams" - ``` - -### Available Tasks - -```bash -task likec4:generate # Generate web components from all projects -task likec4:validate # Validate C4 models (ignore layout drift) -task likec4:update # Update LikeC4 to latest version -``` - -## 🔍 Finding View IDs - -To find available view IDs for embedding: - -```bash -# In the project directory -cd resources/edp-likec4 -grep -r "^view " views/ models/ --include="*.c4" - -# Or search all C4 files -grep -r "view\s\+\w" . --include="*.c4" -``` - -View IDs are defined in your C4 files: - -```likec4 -views { - view myViewId { # ← This is the view ID - title "My View" - // ... - } -} -``` - -## 📚 LikeC4 Syntax - -### Specification Block - -Define element and relationship types: - -```likec4 -specification { - element person - element system - element container - element component - - relationship async - relationship sync -} -``` - -### Model Block - -Define your architecture: - -```likec4 -model { - customer = person 'Customer' { - description 'End user' - } - - system = system 'My System' { - frontend = container 'Frontend' { - description 'React application' - } - - backend = container 'Backend' { - description 'Node.js API' - } - - frontend -> backend 'API calls' - } - - customer -> system.frontend 'uses' -} -``` - -### Views Block - -Create diagrams: - -```likec4 -views { - view overview { - title "System Overview" - - include * - - autoLayout TopBottom - } - - view systemDetail { - title "System Details" - - include system.* - - autoLayout LeftRight - } -} -``` - -## 🎯 Common View IDs - -### EDP Platform (resources/edp-likec4/) - -- `edp` - EDP overview -- `landscape` - Developer landscape -- `otc-faas` - OTC FaaS deployment -- `edpbuilderworkflow` - Builder workflow -- Component views: `keycloak`, `forgejo`, `argoCD`, etc. - -### Documentation Platform (resources/doc-likec4/) - -- `overview` - Complete system overview -- `localDevelopment` - Technical Writer workflow -- `cicdPipeline` - CI/CD pipeline -- `deploymentFlow` - Edge deployment -- `fullWorkflow` - End-to-end workflow -- `testingCapabilities` - Testing overview - -## 🛠️ Configuration - -### likec4.config.json - -Each project has a configuration file: - -```json -{ - "sources": [ - "models/**/*.c4", - "views/**/*.c4", - "deployment/**/*.c4" - ] -} -``` - -This tells LikeC4 where to find your model files. - -## 🔗 Integration with Hugo - -### How It Works - -1. **Source:** `.c4` files contain your architecture models -2. **Codegen:** `task likec4:generate` creates a self-contained web component -3. **Static Asset:** `static/js/likec4-webcomponent.js` bundled with Hugo site -4. **Custom Element:** Web Components standard enables `` tag -5. **Rendering:** Shadow DOM renders interactive diagrams - -### Web Component Registration - -The web component is automatically loaded via `layouts/partials/hooks/head-end.html`: - -```html - -``` - -This loader dynamically loads the LikeC4 web component only on pages that use it. - -### Styling - -Custom styles in `static/css/likec4-styles.css`: -- Dark mode support -- Telekom magenta color scheme -- Responsive sizing -- Loading indicators - -## 📖 Resources - -- [LikeC4 Documentation](https://likec4.dev/) -- [LikeC4 GitHub](https://github.com/likec4/likec4) -- [C4 Model](https://c4model.com/) - -## 🔧 Troubleshooting - -### Web Component Not Rendering - -1. Check that view ID exists: - ```bash - grep -r "view yourViewId" resources/ - ``` - -2. Regenerate web component: - ```bash - task likec4:generate - ``` - -3. Clear browser cache and reload - -### Layout Drift Warnings - -Layout drift warnings during validation are expected and can be ignored: - -```bash -task likec4:validate # Ignores layout drift -task likec4:validate:layout # Full validation including layout -``` - -### NPM Errors - -```bash -cd resources/edp-likec4 -rm -rf node_modules package-lock.json -npm install -``` - -## 🎓 Learn More - -For detailed usage in content creation, see: -- [README-technicalWriter.md](./README-technicalWriter.md) - Content contributor guide -- [content/en/docs/documentation/local-development.md](./content/en/docs/documentation/local-development.md) - Local development guide diff --git a/doc/README-technical-writer.md b/doc/README-technical-writer.md deleted file mode 100644 index 2379a6c..0000000 --- a/doc/README-technical-writer.md +++ /dev/null @@ -1,519 +0,0 @@ -# Technical Writer Guide - -Welcome! This guide helps you contribute to the IPCEI-CIS Developer Framework documentation. - -## Prerequisites - -- Basic knowledge of Markdown -- Git installed -- Either **Devbox** (recommended) or manual tool installation - -## Quick Start - -### 1. Clone and Setup - -```bash -# Clone the repository -git clone -cd ipceicis-developerframework - -# Install dependencies -task deps:install - -# If using Devbox -devbox shell -``` - -### 2. Start Development Server - -```bash -task serve -``` - -Open your browser at `http://localhost:1313` - changes appear instantly! - -### 3. Create Content - -Create a new page: - -```bash -# Example: Add a new guide -vim content/en/docs/your-topic/_index.md -``` - -Add frontmatter: - -```yaml ---- -title: "Your Topic" -linkTitle: "Your Topic" -weight: 10 -description: > - Brief description of your topic. ---- - -Your content here... -``` - -### 4. Test and Commit - -```bash -# Run tests (fastest - Hugo only) -task test:hugo - -# Or run full tests (includes LikeC4 validation) -task test - -# Commit your changes -git add . -git commit -m "docs: Add guide for X" -git push -``` - -## Documentation Structure - -``` -content/en/ -├── _index.md # Homepage -├── docs/ -│ ├── _index.md # Docs landing page -│ ├── edgeconnect/ # Edge Connect documentation -│ ├── edp/ # EDP platform documentation -│ └── governance/ # Governance documentation -├── docs-old/ # Legacy documentation (archived) -└── blog/ # Blog posts - ├── 20250401_review.md - ├── 20251027_important_links.md - └── 240823-archsession.md -``` - -## Writing Documentation - -### Markdown Basics - -```markdown -# Heading 1 -## Heading 2 -### Heading 3 - -**Bold text** -*Italic text* - -- Bullet list -- Item 2 - -1. Numbered list -2. Item 2 - -[Link text](https://example.com) - -`inline code` - -\`\`\`bash -# Code block -echo "Hello" -\`\`\` -``` - -### Using Shortcodes - -#### Alerts - -```markdown -{{< alert title="Note" >}} -Important information here -{{< /alert >}} - -{{< alert title="Warning" color="warning" >}} -Warning message -{{< /alert >}} -``` - -#### Code Tabs - -```markdown -{{< tabpane >}} -{{< tab header="Bash" >}} -\`\`\`bash -echo "Hello" -\`\`\` -{{< /tab >}} -{{< tab header="Python" >}} -\`\`\`python -print("Hello") -\`\`\` -{{< /tab >}} -{{< /tabpane >}} -``` - -## Creating Architecture Diagrams - -### 1. Edit LikeC4 Models - -Navigate to the appropriate project: -- `resources/edp-likec4/` - Platform architecture -- `resources/doc-likec4/` - Documentation platform architecture - -Create or edit `.c4` files: - -```likec4 -specification { - element person - element system -} - -model { - user = person 'User' { - description 'End user of the platform' - } - - platform = system 'Platform' { - description 'The EDP platform' - } - - user -> platform 'uses' -} - -views { - view overview { - title "System Overview" - - include user - include platform - - autoLayout TopBottom - } -} -``` - -### 2. Generate Webcomponent - -```bash -task likec4:generate -``` - -### 3. Embed in Documentation - -```markdown -{{< likec4-view view="overview" project="architecture" title="System Overview" >}} -``` - -**Parameters:** -- `view` - View ID from your `.c4` file -- `project` - `"architecture"` or `"documentation-platform"` -- `title` - Custom header text (optional) - -### 4. Find Available Views - -```bash -# List all view IDs -grep -r "^view " resources/edp-likec4/ --include="*.c4" -``` - -## Using LikeC4 with AI Agents (MCP Server) - -The LikeC4 Model Context Protocol (MCP) server allows AI agents to query and navigate your architecture models interactively. - -### Configuring AI Agents - -Create or edit `.vscode/mcp.json` in your workspace: - -```json -{ - "servers": { - "likec4": { - "type": "sse", - "url": "http://localhost:33335/mcp" - } - } -} -``` - -This configuration gives GitHub Copilot and other MCP-compatible AI agents access to LikeC4 tools for querying your architecture models. - -### Starting the MCP Server - -Start the LikeC4 MCP server locally: - -```bash -# in the project root of the documentation repo -npx likec4 mcp resources/edp-likec4 --http -``` - -The server runs on `http://localhost:33335/mcp` by default. - -### Querying Architecture Models - -Once connected, you can ask the AI agent questions like: - -- **"In which model file is the resource edp.garm specified?"** - - Returns: `resources/edp-likec4/models/containers/garm.c4` - -- **"Show me all views that include the forgejo element"** - - Lists all views containing the forgejo element - -- **"What relationships does edp.garm have?"** - - Shows incoming and outgoing relationships - -- **"List all elements in the architecture project"** - - Provides a complete overview of elements - -### Available MCP Tools - -The LikeC4 MCP server provides these tools to AI agents: - -- `list-projects` - List all LikeC4 projects -- `search-element` - Search elements by id/title/kind/tags -- `read-element` - Get detailed element information -- `read-view` - Get view details (nodes/edges) -- `read-deployment` - Get deployment node information -- `find-relationships` - Find relationships between elements -- `read-project-summary` - Get project overview - -### Use Cases - -**Finding definitions:** -``` -"Where is edp.forgejo defined?" -``` - -**Understanding relationships:** -``` -"What components does edp.garm contain?" -``` - -**Exploring views:** -``` -"Which views show the deployment architecture?" -``` - -**Documentation validation:** -``` -"Check if all elements in the forgejoGarmInteraction view are documented" -``` - -## Available Tasks - -View all tasks: - -```bash -task --list -``` - -### Development Tasks - -| Task | Description | -|------|-------------| -| `task serve` | Start dev server with hot reload | -| `task build` | Build production site | -| `task clean` | Remove build artifacts | -| `task test` | Run all tests (includes LikeC4) | -| `task test:hugo` | Run Hugo-only tests (fastest) | -| `task test:full` | All tests + link checking | - -### LikeC4 Tasks - -| Task | Description | -|------|-------------| -| `task likec4:generate` | Generate webcomponents from `.c4` files | -| `task likec4:validate` | Validate LikeC4 syntax | -| `task likec4:update` | Update LikeC4 to latest version | - -### Dependency Tasks - -| Task | Description | -|------|-------------| -| `task deps:install` | Install all dependencies | -| `task deps:update` | Update dependencies | - -## Testing - -### Quick Test (Recommended) - -Before committing: - -```bash -task test:quick -``` - -Validates: -- Hugo build succeeds -- Markdown syntax is correct -- LikeC4 models are valid - -### Full Test - -Includes link checking: - -```bash -task test -``` - -**Note:** Link checking can be slow. Use `test:quick` during development. - -## Best Practices - -### Writing Style - -✅ **Do:** -- Write in present tense: "The system processes..." -- Use code blocks with syntax highlighting -- Keep sections concise (3-5 paragraphs max) -- Add diagrams for complex concepts -- Use bullet points for lists -- Test locally before committing - -❌ **Don't:** -- Use future tense: "The system will process..." -- Write long paragraphs (split into sections) -- Forget to add descriptions in frontmatter -- Commit without testing - -### Frontmatter - -Always include: - -```yaml ---- -title: "Page Title" # Full title -linkTitle: "Short Title" # Used in navigation -weight: 10 # Order in menu (lower = higher) -description: > # Used in SEO and cards - Brief description of the page content. ---- -``` - -Optional: - -```yaml ---- -date: 2025-01-15 # Publication date (for blog posts) -author: "Your Name" # Author name -categories: ["Category"] # Categories -tags: ["tag1", "tag2"] # Tags ---- -``` - -### File Naming - -- Use lowercase -- Use hyphens, not underscores: `my-guide.md` not `my_guide.md` -- Main page in a section: `_index.md` -- Single page: `page-name.md` - -### Images - -Place images in the same folder as your markdown file: - -``` -docs/my-guide/ -├── _index.md -├── screenshot.png -└── diagram.svg -``` - -Reference them: - -```markdown -![Alt text](screenshot.png) -``` - -## Common Issues - -### Port 1313 already in use - -```bash -# Find and kill the process -lsof -ti:1313 | xargs kill -9 -``` - -### Build errors - -```bash -# Clean and rebuild -task clean -task build:dev -``` - -### Hugo not found (when not using Devbox) - -```bash -# Make sure you're in devbox shell -devbox shell - -# Or install Hugo manually -# See: https://gohugo.io/installation/ -``` - -### LikeC4 validation fails - -```bash -# Validate with detailed output -cd resources/edp-likec4 -npx likec4 validate --verbose - -# Ignore layout drift (common, not critical) -npx likec4 validate --ignore-layout -``` - -## Git Workflow - -### Create a Branch - -```bash -git checkout -b feature/my-new-guide -``` - -### Commit Changes - -```bash -# Stage your changes -git add content/en/docs/my-guide/ - -# Commit with clear message -git commit -m "docs: Add guide for X feature" -``` - -### Commit Message Convention - -Format: `: ` - -Types: -- `docs:` - Documentation changes -- `feat:` - New feature or content -- `fix:` - Bug fix or correction -- `chore:` - Maintenance tasks -- `style:` - CSS/styling changes - -Examples: -``` -docs: Add installation guide for Windows users -feat: Add interactive architecture diagram for OTC deployment -fix: Correct typo in API documentation -chore: Update LikeC4 to version 1.43.0 -``` - -### Push and Create PR - -```bash -# Push your branch -git push origin feature/my-new-guide - -# Create Pull Request on Forgejo/GitHub -``` - -## Getting Help - -- **Full Documentation**: See `/content/en/docs/documentation/` -- **LikeC4 Documentation**: https://likec4.dev/ -- **Hugo Documentation**: https://gohugo.io/documentation/ -- **Docsy Theme**: https://www.docsy.dev/docs/ - -## Next Steps - -1. Read the [Local Development Guide](./content/en/docs/documentation/local-development.md) -2. Explore [Architecture Documentation](./content/en/docs/architecture/) -3. Check [Testing Guide](./content/en/docs/documentation/testing.md) -4. Learn about [CI/CD Pipeline](./content/en/docs/documentation/cicd.md) - -Happy documenting! 📝✨ diff --git a/doc/RELEASE.md b/doc/RELEASE.md deleted file mode 100644 index f435beb..0000000 --- a/doc/RELEASE.md +++ /dev/null @@ -1,207 +0,0 @@ -# Release Process - -This document describes the release process for the IPCEI-CIS Developer Framework. - -## Overview - -The project uses **Semantic Versioning** (SemVer) for releases. Each release is triggered by a Git tag and automatically creates: - -- Multi-platform Docker images (linux/amd64, linux/arm64) -- Forgejo release with release notes -- Automatically generated changelog - -## Versioning Schema - -We follow [Semantic Versioning 2.0.0](https://semver.org/): - -- `MAJOR.MINOR.PATCH` (e.g., `v1.2.3`) -- **MAJOR**: Breaking changes (incompatible API changes) -- **MINOR**: New features (backwards compatible) -- **PATCH**: Bug fixes (backwards compatible) - -## Creating a Release - -### 1. Check Prerequisites - -Ensure that: - -- All tests are passing (`task test`) -- CI pipeline runs successfully -- All desired changes are in the `main` branch -- You have the latest version: `git pull origin main` - -### 2. Determine Version - -Determine the new version number based on the changes: - -```bash -# Show current tag -git describe --tags --abbrev=0 - -# Show commits since last release -git log $(git describe --tags --abbrev=0)..HEAD --oneline -``` - -### 3. Create Tag - -Create an annotated tag with the new version: - -```bash -# For a new patch release (e.g., v1.2.3 → v1.2.4) -git tag -a v1.2.4 -m "Release v1.2.4" - -# For a minor release (e.g., v1.2.3 → v1.3.0) -git tag -a v1.3.0 -m "Release v1.3.0" - -# For a major release (e.g., v1.2.3 → v2.0.0) -git tag -a v2.0.0 -m "Release v2.0.0" -``` - -### 4. Push Tag - -Push the tag to the repository - this triggers the release pipeline: - -```bash -git push origin v1.2.4 -``` - -### 5. Monitor Release Pipeline - -The release pipeline (`release.yaml`) starts automatically: - -1. Open the Actions tab in Forgejo -2. Monitor the `release` workflow -3. On success: Release is visible on the Releases page - -## What Happens Automatically? - -The release pipeline (`release.yaml`) performs the following steps: - -1. **Build Docker Images** - - Multi-platform build (AMD64 + ARM64) - - Images are tagged with: - - `vX.Y.Z` (exact version, e.g., `v1.2.3`) - - `vX.Y` (minor version, e.g., `v1.2`) - - `vX` (major version, e.g., `v1`) - - `latest` (latest release) - -2. **Push Images** - - To the container registry (Forgejo Packages) - -3. **Generate Changelog** - - Automatically from Git commits since last release - - Format: `- Commit Message (hash)` - -4. **Create Forgejo Release** - - With generated release notes - - Contains build versions (Node, Go, Hugo) - - Docker pull commands - - Changelog - -## Using Docker Images - -After a successful release, the images are available: - -```bash -# Specific version -docker pull /:v1.2.3 - -# Latest -docker pull /:latest - -# Major/Minor version -docker pull /:v1 -docker pull /:v1.2 -``` - -## Best Practices - -### Commit Messages - -Use meaningful commit messages, as they will appear in the changelog: - -```bash -# Good -git commit -m "fix: correct multi-platform Docker build for ARM64" -git commit -m "feat: add automatic release pipeline" -git commit -m "docs: update RELEASE.md" - -# Bad -git commit -m "fix stuff" -git commit -m "wip" -``` - -**Conventional Commits** help with categorization: - -- `feat:` - New features -- `fix:` - Bug fixes -- `docs:` - Documentation -- `chore:` - Maintenance -- `refactor:` - Code restructuring -- `test:` - Tests - -### Release Frequency - -- **Patch releases**: As needed (bug fixes) -- **Minor releases**: Regular (new features) -- **Major releases**: Rare (breaking changes) - -### Hotfixes - -For urgent bug fixes: - -1. Create branch from last release tag -2. Fix the bug -3. Create new patch release - -```bash -git checkout v1.2.3 -git checkout -b hotfix/critical-bug -# Implement fix -git commit -m "fix: critical bugfix" -git tag -a v1.2.4 -m "Release v1.2.4 - Hotfix" -git push origin v1.2.4 -``` - -## Troubleshooting - -### Release Pipeline Fails - -1. **Check Secrets**: `PACKAGES_USER`, `PACKAGES_TOKEN` must be set -2. **Check Logs**: Open the failed workflow in the Actions tab -3. **Local Test**: - - ```bash - task build:oci-image - task test:oci-image - ``` - -### Delete/Correct Tag - -**Locally:** - -```bash -git tag -d v1.2.3 -``` - -**Remote:** - -```bash -git push --delete origin v1.2.3 -``` - -⚠️ **Warning**: Releases should not be deleted after they have been published! - -### Edit Release Notes Afterwards - -Release notes can be manually edited in Forgejo: - -1. Go to Releases -2. Click on the release -3. Click "Edit" - -## Further Information - -- [Semantic Versioning](https://semver.org/) -- [Conventional Commits](https://www.conventionalcommits.org/) -- [Keep a Changelog](https://keepachangelog.com/) diff --git a/doc/TODO.md b/doc/TODO.md deleted file mode 100644 index 7c4bb85..0000000 --- a/doc/TODO.md +++ /dev/null @@ -1,4 +0,0 @@ -# Todos - - [] update and rework READMEs, reduce likec4 description - [] remove / consolidate doc-likec4 with edp-likec4 (as it seems that webcomponents only work for one likec4-config) diff --git a/edgeconnectdeployment.yaml b/edgeconnectdeployment.yaml deleted file mode 100644 index d2af901..0000000 --- a/edgeconnectdeployment.yaml +++ /dev/null @@ -1,23 +0,0 @@ -kind: edgeconnect-deployment -metadata: - name: "edpdoc" - appVersion: "1.0.0" - organization: "edp2" -spec: - k8sApp: - manifestFile: "./k8s-deployment.yaml" - infraTemplate: - - region: "EU" - cloudletOrg: "TelekomOP" - cloudletName: "Munich" - flavorName: "EU.small" - network: - outboundConnections: - - protocol: "tcp" - portRangeMin: 80 - portRangeMax: 80 - remoteCIDR: "0.0.0.0/0" - - protocol: "tcp" - portRangeMin: 443 - portRangeMax: 443 - remoteCIDR: "0.0.0.0/0" diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 2d45847..0000000 --- a/flake.lock +++ /dev/null @@ -1,25 +0,0 @@ -{ - "nodes": { - "nixpkgs": { - "locked": { - "lastModified": 1763421233, - "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", - "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", - "revCount": 897910, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.897910%2Brev-89c2b2330e733d6cdb5eae7b899326930c2c0648/019a9888-31f2-7667-abe4-5a1c43721ef0/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/NixOS/nixpkgs/0.1" - } - }, - "root": { - "inputs": { - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index e0925f4..0000000 --- a/flake.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - description = "dev env flake"; - - # Flake inputs - inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1"; # unstable Nixpkgs - - # Flake outputs - outputs = {self, ...} @ inputs: let - # The systems supported for this flake - supportedSystems = [ - "x86_64-linux" # 64-bit Intel/AMD Linux - "aarch64-linux" # 64-bit ARM Linux - "x86_64-darwin" # 64-bit Intel macOS - "aarch64-darwin" # 64-bit ARM macOS - ]; - - # Helper to provide system-specific attributes - forEachSupportedSystem = f: - inputs.nixpkgs.lib.genAttrs supportedSystems ( - system: - f { - pkgs = import inputs.nixpkgs {inherit system;}; - } - ); - in { - devShells = forEachSupportedSystem ( - {pkgs}: { - default = pkgs.mkShellNoCC { - # The Nix packages provided in the environment - # Add any you need here - packages = with pkgs; [ - go-task - - go - hugo - - nodejs - ]; - - # Set any environment variables for your dev shell - env = {}; - - # Add any shell logic you want executed any time the environment is activated - shellHook = ''''; - }; - } - ); - }; -} diff --git a/go.mod b/go.mod index 9cd543d..625dea4 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,4 @@ module github.com/me/ipceicis go 1.22.5 -require ( - github.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3 // indirect - github.com/google/docsy v0.12.0 // indirect - github.com/hugomods/mermaid v0.1.4 // indirect - github.com/twbs/bootstrap v5.3.8+incompatible // indirect -) +require github.com/google/docsy v0.10.0 // indirect diff --git a/go.sum b/go.sum index a5d6dc2..78bc934 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,4 @@ -github.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3 h1:/iluJkJiyTAdnqrw3Yi9rH2HNHhrrtCmj8VJe7I6o3w= -github.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.12.0 h1:CddZKL39YyJzawr8GTVaakvcUTCJRAAYdz7W0qfZ2P4= -github.com/google/docsy v0.12.0/go.mod h1:1bioDqA493neyFesaTvQ9reV0V2vYy+xUAnlnz7+miM= -github.com/hugomods/mermaid v0.1.4 h1:/u0FZRSBMpqTbDh4XPBL7c6p0DUjvIkoo9cC89GASSI= -github.com/hugomods/mermaid v0.1.4/go.mod h1:GOID2Ko1vdrX03ZMaFNQL/vdTU1tZmGcVjOgBN8O42Y= -github.com/twbs/bootstrap v5.3.6+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= -github.com/twbs/bootstrap v5.3.8+incompatible h1:eK1fsXP7R/FWFt+sSNmmvUH9usPocf240nWVw7Dh02o= -github.com/twbs/bootstrap v5.3.8+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= +github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= +github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg= +github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= +github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/hugo.toml b/hugo.toml index 620b815..29044f7 100644 --- a/hugo.toml +++ b/hugo.toml @@ -13,9 +13,6 @@ enableRobotsTXT = true # Will give values to .Lastmod etc. enableGitInfo = true -# Ignore specific content directories during build -ignoreFiles = ["content/en/blog/.*", "content/en/docs-old/.*"] - # Comment out to enable taxonomies in Docsy # disableKinds = ["taxonomy", "taxonomyTerm"] @@ -115,16 +112,16 @@ url_latest_version = "https://example.com" github_branch= "main" # Google Custom Search Engine ID. Remove or comment out to disable search. -# gcs_engine_id = "d72aa9b2712488cc3" +gcs_engine_id = "d72aa9b2712488cc3" # Enable Lunr.js offline search -offlineSearch = true +offlineSearch = false # Enable syntax highlighting and copy buttons on code blocks with Prism prism_syntax_highlighting = false [params.copyright] - authors = "IPCEI-CIS eDF Development Team" + authors = "IPCEIS-CIS Authors | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0) | " from_year = 2024 # User interface configuration @@ -155,12 +152,10 @@ enable = false # workspace = "docsy.work" [module.hugoVersion] extended = true - min = "0.151.0" + min = "0.110.0" [[module.imports]] path = "github.com/google/docsy" disable = false -[[module.imports]] -path = "github.com/hugomods/mermaid" [params.mermaid] version = "10.9.0" @@ -179,10 +174,4 @@ svg_image_url = "https://www.plantuml.com/plantuml/svg/" # By default the plantuml implementation uses tags to display UML diagrams. # When svg is set to true, diagrams are displayed using tags, maintaining functionality like links e.g. # default = false -svg = true - -# LikeC4 interactive architecture diagrams configuration -[params.likec4] -enable = true -# The webcomponent file will be generated from resources/likec4 and placed in static/js/ -webcomponent_file = "likec4-webcomponent.js" \ No newline at end of file +svg = true \ No newline at end of file diff --git a/k8s-deployment.yaml b/k8s-deployment.yaml deleted file mode 100644 index 02166d0..0000000 --- a/k8s-deployment.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: edpdoc - labels: - run: edpdoc -spec: - type: LoadBalancer - ports: - - name: tcp80 - protocol: TCP - port: 80 - targetPort: 80 - selector: - run: edpdoc ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: edpdoc -spec: - replicas: 1 - selector: - matchLabels: - run: edpdoc - template: - metadata: - labels: - run: edpdoc - mexDeployGen: kubernetes-basic - spec: - volumes: - containers: - - name: edpdoc - image: ###IMAGETAG### - imagePullPolicy: Always - ports: - - containerPort: 80 - protocol: TCP diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html new file mode 100644 index 0000000..7f8e974 --- /dev/null +++ b/layouts/_default/_markup/render-heading.html @@ -0,0 +1 @@ +{{ template "_default/_markup/td-render-heading.html" . }} diff --git a/layouts/docs/single.html b/layouts/docs/single.html deleted file mode 100644 index 7386260..0000000 --- a/layouts/docs/single.html +++ /dev/null @@ -1,17 +0,0 @@ -{{ define "main" }} -{{ partial "legacy-banner.html" . }} -
-

{{ .Title }}

- {{ with .Params.description }}
{{ . | markdownify }}
{{ end }} - {{ .Content }} - {{ if (and (not .Params.hide_feedback) (.Site.Params.ui.feedback.enable) (.Site.GoogleAnalytics)) }} - {{ partial "feedback.html" .Site.Params.ui.feedback }} -
- {{ end }} - {{ if (.Site.Config.Services.Disqus.Shortname) }} -
- {{ partial "disqus-comment.html" . }} - {{ end }} -
{{ partial "page-meta-lastmod.html" . }}
-
-{{ end }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html deleted file mode 100644 index e369687..0000000 --- a/layouts/partials/footer.html +++ /dev/null @@ -1,56 +0,0 @@ -{{ $links := .Site.Params.links }} -
-
-
- {{ with $links }} - - - {{ end }} - {{ with .Site.GetPage "privacy-policy" }} - - {{ end }} - {{ with .Site.GetPage "deprecation-policy" }} - - {{ end }} -
-
- -
-
-
- -{{ define "footer-links-block" }} -{{ range . }} -
  • {{ .name }}
  • -{{ end }} -{{ end }} diff --git a/layouts/partials/hooks/head-end.html b/layouts/partials/hooks/head-end.html deleted file mode 100644 index 6968af4..0000000 --- a/layouts/partials/hooks/head-end.html +++ /dev/null @@ -1,10 +0,0 @@ -{{ if .Site.Params.likec4.enable }} - - - - -{{ end }} - - - -{{ partial "version-info-script.html" . }} diff --git a/layouts/partials/legacy-banner.html b/layouts/partials/legacy-banner.html deleted file mode 100644 index 045e3e0..0000000 --- a/layouts/partials/legacy-banner.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ if or (hasPrefix .RelPermalink "/docs/v1/") (hasPrefix .File.Path "docs/v1/") }} - -{{ end }} diff --git a/layouts/partials/navbar-version.html b/layouts/partials/navbar-version.html deleted file mode 100644 index 59a31ca..0000000 --- a/layouts/partials/navbar-version.html +++ /dev/null @@ -1,17 +0,0 @@ -{{/* Header version info - compact display in navbar */}} -{{ $buildInfo := .Site.Data.build_info }} -{{ if $buildInfo }} - -{{ end }} \ No newline at end of file diff --git a/layouts/partials/version-info-script.html b/layouts/partials/version-info-script.html deleted file mode 100644 index d1724af..0000000 --- a/layouts/partials/version-info-script.html +++ /dev/null @@ -1,35 +0,0 @@ -{{/* Inline JavaScript to add version info to navbar */}} -{{ $buildInfo := .Site.Data.build_info }} -{{ if $buildInfo }} - -{{ end }} \ No newline at end of file diff --git a/layouts/partials/version-info.html b/layouts/partials/version-info.html deleted file mode 100644 index ac3315e..0000000 --- a/layouts/partials/version-info.html +++ /dev/null @@ -1,36 +0,0 @@ -{{/* Version info banner - displays git commit info and build time */}} -{{ $buildInfo := .Site.Data.build_info }} -{{ if $buildInfo }} -
    -
    -
    -
    - - - {{ if $buildInfo.git_tag }} - {{ $buildInfo.git_tag }} - {{ if ne $buildInfo.git_tag $buildInfo.git_commit }} - (@{{ $buildInfo.git_commit_short }}) - {{ end }} - {{ else }} - {{ $buildInfo.git_branch }} - @{{ $buildInfo.git_commit_short }} - {{ end }} - {{ if $buildInfo.git_dirty }} - dirty - {{ end }} - -
    -
    - - - Built {{ $buildInfo.build_time_human }} - {{ if $buildInfo.build_user }} - by {{ $buildInfo.build_user }} - {{ end }} - -
    -
    -
    -
    -{{ end }} \ No newline at end of file diff --git a/layouts/shortcodes/likec4-view.html b/layouts/shortcodes/likec4-view.html deleted file mode 100644 index b57ac06..0000000 --- a/layouts/shortcodes/likec4-view.html +++ /dev/null @@ -1,53 +0,0 @@ -{{- $view := .Get "view" -}} -{{- $project := .Get "project" | default "architecture" -}} -{{- $title := .Get "title" | default (print "Architecture View: " $view) -}} -{{- $uniqueId := printf "likec4-loading-%s" (md5 $view) -}} - -
    -
    - {{ $title }} -
    - -
    - Loading architecture diagram... -
    -
    - - diff --git a/otc.conf b/otc.conf new file mode 100644 index 0000000..d44f520 --- /dev/null +++ b/otc.conf @@ -0,0 +1,35 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lSQU5NM3Z0ZlRKWmdZVWdkZG14NC9SbjB3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdIaGNOTWpRd09UQXlNVFEwT1RNd1doY05NelF3T1RBeU1UUTBPVE13V2pBTgpNUXN3Q1FZRFZRUURFd0pqWVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWJUCjhJb0xxRGNmdmRhTUNicExDbEZEd09rMDVQQUhsdXBmbkF5bmd3OStrWmZBY21GNUd1WS95TlJtQWUxbGY2RlAKc3pWRUNRZXVFa1gyS1lRekxvclJMOE53VmM5RDBNWkRJMmRHMEdVUjZueU5RZHZaTkFLUWtwM3luT2VqbEdvYwp2SWVCREVKejJnNzErWTZoOGtwWUh0NEx1clIwZStvVEwySXhBYStIdjh6SmJCa2pPQ1lCZExRYWVGNjduSE15CitDTUV2emRRSlBCSXlqb2RtREFKTWVDWm9ac3g0YUE5T2hXL3dwczdKTzRnQ1NuUGVkMjN4blVTeWd4QnNBWVcKMWJDZEhONzlscWZxaFV6K21Wb3hrRXZkemt6S0ErWUdSZ3FSY0ZCRE9pR1dOVzREV0t5Y2hsYTBoektPZ3dFZwpvK21WaXBtV1RCbjY4REJJVWdjQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0dtTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZGYVR6VEUwNTNNSy9tN0JyY3hXMDVOYXkxN0VNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZGtMWVpLNWZnRFNYb2xGNTNwTldYNWlxMlJDMXVaTlhOb3ArZ0drSjkzTW5tNFM5bQpZWXNiMks2ZDNUM0JkdmNHOWQ0VUhGTzMvdU9kaTkrc3AxY2h1U25hNis4V1hrZkZBY0c2anJubXVVTDNzOWUyCmFrRGhoWHdubnlSQmF2N0FVdGlQeWxTVVllbmZsZDd2dC91MmRQeDRYT2QrMmcwV3ZpdHpZWUdKenY2K1FiQ1UKS1pwVENmUkhPejFCQ2JnVDBoSU5BZjhMcFNoL3pzd1lrZjM5MHV1Z0tzVkZPVVJBNmc4dU5rSEoyUzRlUEloVApib3Zzb0swYTR6WDRZUWhrREpUYTF6MVBFUzJXWW1VYU5uZWlaTTVyTWw2TEppcWFBZ01mbUg2WTI1UnJobldlCkpTS1dlNmNxajdYUDhZemxMcVBEMUpNamh5QkVHbGpFT25hSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://api.edf-bootstrap.cx.fg1.ffm.osc.live + name: shoot-fs1-0-edf-bootstrap-oidc +contexts: +- context: + cluster: shoot-fs1-0-edf-bootstrap-oidc + user: shoot-fs1-0-edf-bootstrap-oidc + name: shoot-fs1-0-edf-bootstrap-oidc +current-context: shoot-fs1-0-edf-bootstrap-oidc +kind: Config +preferences: {} +users: +- name: shoot-fs1-0-edf-bootstrap-oidc + user: + exec: + apiVersion: client.authentication.k8s.io/v1beta1 + args: + - oidc-login + - get-token + - --oidc-issuer-url=https://auth.apps.fs1-0.ffm.osc.live/dex + - --oidc-client-id=oidc-user + - --oidc-client-secret=8GmH7HL4mu4iwWptpV0418iMooaz4k4F + - --oidc-extra-scope=openid + - --oidc-extra-scope=profile + - --oidc-extra-scope=email + - --oidc-extra-scope=groups + - --oidc-extra-scope=audience:server:client_id:kubernetes + - --certificate-authority-data=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY2ekNDQk5PZ0F3SUJBZ0lRSVFPK0xDcWpDbHRiSHc0YVJGWWptakFOQmdrcWhraUc5dzBCQVFzRkFEQ0IKZ2pFTE1Ba0dBMVVFQmhNQ1JFVXhLekFwQmdOVkJBb01JbFF0VTNsemRHVnRjeUJGYm5SbGNuQnlhWE5sSUZObApjblpwWTJWeklFZHRZa2d4SHpBZEJnTlZCQXNNRmxRdFUzbHpkR1Z0Y3lCVWNuVnpkQ0JEWlc1MFpYSXhKVEFqCkJnTlZCQU1NSEZRdFZHVnNaVk5sWXlCSGJHOWlZV3hTYjI5MElFTnNZWE56SURJd0hoY05Nakl3TWpJeU1UQXcKT1RBMldoY05Nekl3TWpJeU1qTTFPVFU1V2pCZU1Rc3dDUVlEVlFRR0V3SkVSVEVuTUNVR0ExVUVDZ3dlUkdWMQpkSE5qYUdVZ1ZHVnNaV3R2YlNCVFpXTjFjbWwwZVNCSGJXSklNU1l3SkFZRFZRUUREQjFVWld4bGEyOXRJRk5sClkzVnlhWFI1SUVSV0lGSlRRU0JEUVNBeU1qQ0NBaUl3RFFZSktvWklodmNOQVFFQkJRQURnZ0lQQURDQ0Fnb0MKZ2dJQkFLWWhCY0psRUVSUldRanNSVTIzcWJJVjE5aUxOdUE2UTNQMnd2YzYrdVo0ZkNwajhyWklFdlNwZUMxUwp5YnZnU216UnZ0c3VUL2hBNG1Ib0FJaFdpalJHVHNodGljY0dhWHFGUSt6SFFwb1FHY2tOOGhRUjUwMWVIVldyCnR6YmYxZFp4UmtoUzgrYVNtUWtLa1Y2ZlpDRzRvVXVmOTVOcnRQUmVNc3RrMGVIRk5KRU1HOTRoSFVZczFwemcKb043MnhtZ2JRYTBiZkJoMy9nWUZxbHdLOWxHam16MGhndzNRRGxucnB4T3E0RUdhc09walVtSGs4ZVJCQlhkMwpCUWM3TTQrWVZDd0VoYUdRMTV4aDR5M3NRNXM0ejFBY1AxOHJueWNmdnpZamRtdzBDSXNCQ3NPbC9sai9Fb2ZXCk1zK2h3Z002cGRPZGJReWsxd1JnS3JSaUkvcDMzM1QrY3oyR1BYRWlTTHhFUUN5THE3N2Y1WTZZMkFlRnpaSTIKV0tqSnJwbTlGTzNCYytUZ29vbURWM2hOeUdoU3FyRFdvcEpyUTl0RUI1UzZKcU1OcDlyeEFBRnVYMFkwQ2pndQo1SmhENENwNmp0dTBvdU5Kd1ZidE1rWlBwVmNwSHRhc1JJdGl1ZDNva2VtTWlqRTJSbEdtM3lGbGFUK3BEQmZvCnZ3T1NNMElqY0U0eDdvUnBWRXJuSG1FYThpN3hqWk1PMjhOUkNUWndZWkdHNE1LV2luL3NkR2ovSmJzcGJSNVoKelBMZlpkOGZkUGZBZ2RZQUllUHkwOWVyTkdWUWpYQnhLenNCOWlUMGxobEE3ZUFlU256azEyc2pac0I2RG0yRQoxWDJPMmlUSXZCKzhmQlUvN21oYnYzaWFVTjdxUG1rT2NacERkNUVmTXNVSjByQkZBZ01CQUFHamdnRitNSUlCCmVqQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0hRWURWUjBPQkJZRUZQRTlPcVpjZHYyK25LZ05EU2x6RWRFYmRXY0gKTUI4R0ExVWRJd1FZTUJhQUZMOVpJRFlBZWFDZ0ltdU0xZkpoMHJnc3k0SktNQklHQTFVZEV3RUIvd1FJTUFZQgpBZjhDQVFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUJNRkFHQTFVZEh3UkpNRWN3ClJhQkRvRUdHUDJoMGRIQTZMeTluY21Oc01pNWpjbXd1ZEdWc1pYTmxZeTVrWlM5eWJDOVVMVlJsYkdWVFpXTmYKUjJ4dlltRnNVbTl2ZEY5RGJHRnpjMTh5TG1OeWJEQ0JqUVlJS3dZQkJRVUhBUUVFZ1lBd2ZqQXVCZ2dyQmdFRgpCUWN3QVlZaWFIUjBjRG92TDJkeVkyd3lMbTlqYzNBdWRHVnNaWE5sWXk1a1pTOXZZM053Y2pCTUJnZ3JCZ0VGCkJRY3dBb1pBYUhSMGNEb3ZMMmR5WTJ3eUxtTnlkQzUwWld4bGMyVmpMbVJsTDJOeWRDOVVMVlJsYkdWVFpXTmYKUjJ4dlltRnNVbTl2ZEY5RGJHRnpjMTh5TG1OeWREQVRCZ05WSFNBRUREQUtNQWdHQm1lQkRBRUNBVEFOQmdrcQpoa2lHOXcwQkFRc0ZBQU9DQVFFQWc3U1piL0t3aVJkcWFrc2hkZmFBckpkdWxqUTBiUVRoZGtaS0lpUVNBdUtWCkd2UUcxRU5BL3NPRkpzYXlnNVBicVN6cDM0eEVjMk9KY1B4NEU0YU9FRFF5dmtDOFRxWnlKeDFROU9rQ1R5aDkKSDFlVWRSaWozMWJFWVIxd2JyTXJBR0FGdmR2VUkzc25xZnpFNzJkK05aSVJSN0ZUK2tvdVgzdksyYjNCdFFLdgprT3ZaWFlzOUZSYU5rZ05KT204dGNzbFVsYTkzMkpjcTM4OXN4cXorKzlRYjZUNlpWeGxDVXZWUFFoRW1aemhoCllCMTZYUldvVFFHZ0pLMXlPV25IRk01c2Q3ZFJUclkvd1VVTXZ5bWNzelZYUWd5Y2lTVzhJTDZCZXNCdXdFNlcKY3Z4bVV1eFNqZ2krM21zR3dmWmJPaitmcnVkUTY0QksrL2ErdnpZWEJnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHd6Q0NBcXVnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnakVMTUFrR0ExVUVCaE1DUkVVeApLekFwQmdOVkJBb01JbFF0VTNsemRHVnRjeUJGYm5SbGNuQnlhWE5sSUZObGNuWnBZMlZ6SUVkdFlrZ3hIekFkCkJnTlZCQXNNRmxRdFUzbHpkR1Z0Y3lCVWNuVnpkQ0JEWlc1MFpYSXhKVEFqQmdOVkJBTU1IRlF0VkdWc1pWTmwKWXlCSGJHOWlZV3hTYjI5MElFTnNZWE56SURJd0hoY05NRGd4TURBeE1UQTBNREUwV2hjTk16TXhNREF4TWpNMQpPVFU1V2pDQmdqRUxNQWtHQTFVRUJoTUNSRVV4S3pBcEJnTlZCQW9NSWxRdFUzbHpkR1Z0Y3lCRmJuUmxjbkJ5CmFYTmxJRk5sY25acFkyVnpJRWR0WWtneEh6QWRCZ05WQkFzTUZsUXRVM2x6ZEdWdGN5QlVjblZ6ZENCRFpXNTAKWlhJeEpUQWpCZ05WQkFNTUhGUXRWR1ZzWlZObFl5QkhiRzlpWVd4U2IyOTBJRU5zWVhOeklESXdnZ0VpTUEwRwpDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3FYOW9iWCtoemtlWGFYUFNpNWtmbDgyaFZZQVVkCkFxU3ptMW56SG9xdk5LMzhEY0xaU0JudWFZL0pJUHdocWdjWjdiQmNyR1hIWCswQ2ZIdDhMUnZXdXJtQXdoaUMKRm9UNlpyQUl4bFFqZ2VUTnVVay85azl1TjBnb09BL0Z2dWRvY1AwNWwwM1N4NWlSVUtyRVJMTWpmVGxINlZKaQoxaEtUWHJjeGxrSUYrM2FuSHFQMXd2enBlc1ZzcVhGUDZzdDR2R0N2eDk3MDJjdStmak9sYnBTRDhEVDZJYXZxCmpuS2dQNlRlTUZ2dmhrMXFsVnREUktnUUZSemxBVmZGbVBIbUJpaVJxaURGdDFNbVVVT3lDeEdWV09IQUQzYloKd0kxOGdmTnljSjV2L2hxTzJWODF4ckp2Tkh5K1NFL2lXam5YMkoxNG5wK0dQZ05lR1l0RW90WEhBZ01CQUFHagpRakJBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRREFnRUdNQjBHQTFVZERnUVdCQlMvCldTQTJBSG1nb0NKcmpOWHlZZEs0TE11Q1NqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFNUU9pWVFzZmRPaHkKTnNadCtVMmUraUtvNFlGV3o4MjduK3Fya1JrNHI2cDhGVTN6dHFPTnBmU085a1NwcCtnaGxhMCtBR0lXaVBBQwp1dnhoSStZem16QjZhelppZTYwRUk0UllaZUxiSzRybkpWTTNZbE5mdk5vQllpbWlwaWR4NWpvaWZzRnZIWlZ3CklFb0hOTi9xL3hXQTViclhldGhiZFh3RmVpbEhma0NvTVJOM3pVQTd0RkZIZWk0UjQwY1IzcDFtMEl2VlZHYjYKZzFYcWZNSXBpUnZwYjdQTzRnV0V5UzgrZUlWaWJzbGZ3WGhqZEZqQVNCZ01tVG5ycE13YXRYbGFqUldjMkJRTgo5bm9IVjhjaWd3VXRQSnNsSmowWXM2bERmTWpJcTJTUERxTy9uQnVkTU52YTBCa3Vxanp4K3pPQWR1VE5yUmxQCkJTZU9FNkZ1d2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + command: kubectl + env: null + provideClusterInfo: false + diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f4cdb9d..0000000 --- a/package-lock.json +++ /dev/null @@ -1,4588 +0,0 @@ -{ - "name": "ipceicis-developerframework", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ipceicis-developerframework", - "version": "1.0.0", - "dependencies": { - "likec4": "^1.44.0" - }, - "devDependencies": { - "autoprefixer": "^10.4.21", - "html-validate": "^10.1.2", - "markdownlint-cli": "^0.45.0", - "postcss": "^8.5.6", - "postcss-cli": "^11.0.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", - "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", - "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", - "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", - "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", - "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", - "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", - "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", - "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", - "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", - "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", - "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", - "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", - "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", - "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", - "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", - "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", - "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", - "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", - "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", - "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", - "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", - "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", - "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", - "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", - "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", - "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hpcc-js/wasm-graphviz": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@hpcc-js/wasm-graphviz/-/wasm-graphviz-1.17.0.tgz", - "integrity": "sha512-EeQUvc41JrFU7AWkh3//KdgRT9waJrBxFA7H9m3uI/zAHzbvTgbw05tik+fxuDPD0sXRxc8g2kXqC5jMobWUQA==", - "license": "Apache-2.0" - }, - "node_modules/@html-validate/stylish": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-4.3.0.tgz", - "integrity": "sha512-eUfvKpRJg5TvzSfTf2EovrQoTKjkRnPUOUnXVJ2cQ4GbC/bQw98oxN+DdSf+HxOBK00YOhsP52xWdJPV1o4n5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@likec4/core": { - "version": "1.46.3", - "resolved": "https://registry.npmjs.org/@likec4/core/-/core-1.46.3.tgz", - "integrity": "sha512-yCG8HjGv+Di8OEGKKcDF0Fbe67bHzrVhEsektJW/QmZzQIJTJnYpJU9fwkocGBJ07RFv6oMS0ztZn0BXvsnMTw==", - "license": "MIT", - "dependencies": { - "type-fest": "^4.41.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", - "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", - "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", - "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", - "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", - "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", - "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", - "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", - "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", - "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", - "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", - "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", - "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", - "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", - "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", - "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", - "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", - "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", - "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", - "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", - "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", - "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", - "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "license": "MIT" - }, - "node_modules/@types/d3-drag": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", - "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-selection": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", - "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", - "license": "MIT" - }, - "node_modules/@types/d3-transition": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", - "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", - "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", - "license": "MIT", - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.5", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/@xyflow/react": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.10.0.tgz", - "integrity": "sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw==", - "license": "MIT", - "dependencies": { - "@xyflow/system": "0.0.74", - "classcat": "^5.0.3", - "zustand": "^4.4.0" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@xyflow/system": { - "version": "0.0.74", - "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.74.tgz", - "integrity": "sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q==", - "license": "MIT", - "dependencies": { - "@types/d3-drag": "^3.0.7", - "@types/d3-interpolate": "^3.0.4", - "@types/d3-selection": "^3.0.10", - "@types/d3-transition": "^3.0.8", - "@types/d3-zoom": "^3.0.8", - "d3-drag": "^3.0.0", - "d3-interpolate": "^3.0.1", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/autoprefixer": { - "version": "10.4.23", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", - "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001760", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz", - "integrity": "sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bundle-require": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", - "license": "MIT", - "dependencies": { - "load-tsconfig": "^0.2.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.18" - } - }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001760", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", - "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/classcat": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", - "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", - "license": "MIT" - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/dependency-graph": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", - "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/esbuild": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", - "integrity": "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==", - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.1", - "@esbuild/android-arm": "0.27.1", - "@esbuild/android-arm64": "0.27.1", - "@esbuild/android-x64": "0.27.1", - "@esbuild/darwin-arm64": "0.27.1", - "@esbuild/darwin-x64": "0.27.1", - "@esbuild/freebsd-arm64": "0.27.1", - "@esbuild/freebsd-x64": "0.27.1", - "@esbuild/linux-arm": "0.27.1", - "@esbuild/linux-arm64": "0.27.1", - "@esbuild/linux-ia32": "0.27.1", - "@esbuild/linux-loong64": "0.27.1", - "@esbuild/linux-mips64el": "0.27.1", - "@esbuild/linux-ppc64": "0.27.1", - "@esbuild/linux-riscv64": "0.27.1", - "@esbuild/linux-s390x": "0.27.1", - "@esbuild/linux-x64": "0.27.1", - "@esbuild/netbsd-arm64": "0.27.1", - "@esbuild/netbsd-x64": "0.27.1", - "@esbuild/openbsd-arm64": "0.27.1", - "@esbuild/openbsd-x64": "0.27.1", - "@esbuild/openharmony-arm64": "0.27.1", - "@esbuild/sunos-x64": "0.27.1", - "@esbuild/win32-arm64": "0.27.1", - "@esbuild/win32-ia32": "0.27.1", - "@esbuild/win32-x64": "0.27.1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fdir": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.0.tgz", - "integrity": "sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==", - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-validate": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.5.0.tgz", - "integrity": "sha512-7uzzfy1fAaZevqKlE1ISaLR5h0IedkJOin/vh+nq3X1fXNdd1/ZKF0BcJSqBHUFJfVMgh7g3zXIOMjQ0rzVW0g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^4.1.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.12.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/katex": { - "version": "0.16.27", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz", - "integrity": "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==", - "dev": true, - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/likec4": { - "version": "1.46.3", - "resolved": "https://registry.npmjs.org/likec4/-/likec4-1.46.3.tgz", - "integrity": "sha512-mNikpkUKq476KkzpYA1t2MmaGf7EURYZpIbvShrVsfrJR3NOt6zapBtXAAuSih17BgOo8wE9Vi/gjcgGVdGhww==", - "license": "MIT", - "dependencies": { - "@hpcc-js/wasm-graphviz": "1.17.0", - "@likec4/core": "1.46.3", - "@vitejs/plugin-react": "^5.1.2", - "@xyflow/react": "12.10.0", - "@xyflow/system": "0.0.74", - "boxen": "^8.0.1", - "bundle-require": "^5.1.0", - "esbuild": "0.27.1", - "fdir": "6.4.0", - "playwright": "1.56.1", - "rollup": "^4.53.5", - "std-env": "^3.10.0", - "type-fest": "^4.41.0", - "vite": "^7.3.0", - "yargs": "17.7.2" - }, - "bin": { - "likec4": "bin/likec4.mjs" - }, - "engines": { - "node": ">=22.21.1" - }, - "peerDependencies": { - "react": "^18.x || ^19.x", - "react-dom": "^18.x || ^19.x" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdownlint": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.38.0.tgz", - "integrity": "sha512-xaSxkaU7wY/0852zGApM8LdlIfGCW8ETZ0Rr62IQtAnUMlMuifsg09vWJcNYeL4f0anvr8Vo4ZQar8jGpV0btQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark": "4.0.2", - "micromark-core-commonmark": "2.0.3", - "micromark-extension-directive": "4.0.0", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.1", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.45.0.tgz", - "integrity": "sha512-GiWr7GfJLVfcopL3t3pLumXCYs8sgWppjIA1F/Cc3zIMgD3tmkpyZ1xkm1Tej8mw53B93JsDjgA3KOftuYcfOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "~13.1.0", - "glob": "~11.0.2", - "ignore": "~7.0.4", - "js-yaml": "~4.1.0", - "jsonc-parser": "~3.3.1", - "jsonpointer": "~5.0.1", - "markdown-it": "~14.1.0", - "markdownlint": "~0.38.0", - "minimatch": "~10.0.1", - "run-con": "~1.3.2", - "smol-toml": "~1.3.4" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/markdownlint-cli/node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "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" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "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" - } - }, - "node_modules/micromark-extension-directive": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", - "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "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" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "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" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.56.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-cli": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", - "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.3.0", - "dependency-graph": "^1.0.0", - "fs-extra": "^11.0.0", - "picocolors": "^1.0.0", - "postcss-load-config": "^5.0.0", - "postcss-reporter": "^7.0.0", - "pretty-hrtime": "^1.0.3", - "read-cache": "^1.0.0", - "slash": "^5.0.0", - "tinyglobby": "^0.2.12", - "yargs": "^17.0.0" - }, - "bin": { - "postcss": "index.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", - "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1", - "yaml": "^2.4.2" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - } - } - }, - "node_modules/postcss-reporter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", - "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "thenby": "^1.3.4" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.3" - } - }, - "node_modules/react-refresh": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", - "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.5", - "@rollup/rollup-android-arm64": "4.53.5", - "@rollup/rollup-darwin-arm64": "4.53.5", - "@rollup/rollup-darwin-x64": "4.53.5", - "@rollup/rollup-freebsd-arm64": "4.53.5", - "@rollup/rollup-freebsd-x64": "4.53.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", - "@rollup/rollup-linux-arm-musleabihf": "4.53.5", - "@rollup/rollup-linux-arm64-gnu": "4.53.5", - "@rollup/rollup-linux-arm64-musl": "4.53.5", - "@rollup/rollup-linux-loong64-gnu": "4.53.5", - "@rollup/rollup-linux-ppc64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-musl": "4.53.5", - "@rollup/rollup-linux-s390x-gnu": "4.53.5", - "@rollup/rollup-linux-x64-gnu": "4.53.5", - "@rollup/rollup-linux-x64-musl": "4.53.5", - "@rollup/rollup-openharmony-arm64": "4.53.5", - "@rollup/rollup-win32-arm64-msvc": "4.53.5", - "@rollup/rollup-win32-ia32-msvc": "4.53.5", - "@rollup/rollup-win32-x64-gnu": "4.53.5", - "@rollup/rollup-win32-x64-msvc": "4.53.5", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smol-toml": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", - "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "license": "MIT" - }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/thenby": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", - "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", - "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/vite": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", - "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "devOptional": true, - "license": "ISC", - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/zustand": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", - "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.2.2" - }, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "@types/react": ">=16.8", - "immer": ">=9.0.6", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - } - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 2987763..0000000 --- a/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ipceicis-developerframework", - "version": "1.0.0", - "scripts": { - "build": "hugo --gc --minify", - "test:build": "hugo --gc --minify --logLevel info", - "test:links": "htmltest", - "test:html": "html-validate 'public/**/*.html'", - "test:markdown": "markdownlint 'content/**/*.md'", - "test": "npm run test:build && npm run test:markdown && npm run test:html && npm run test:links", - "test:quick": "npm run test:build && npm run test:markdown" - }, - "devDependencies": { - "autoprefixer": "^10.4.21", - "html-validate": "^10.1.2", - "markdownlint-cli": "^0.45.0", - "postcss": "^8.5.6", - "postcss-cli": "^11.0.1" - }, - "dependencies": { - "likec4": "^1.44.0" - } -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 1c6390f..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,3 +0,0 @@ -export const plugins = { - autoprefixer: {} -}; diff --git a/resources/LIKEC4-REGENERATION.md b/resources/LIKEC4-REGENERATION.md deleted file mode 100644 index eeba200..0000000 --- a/resources/LIKEC4-REGENERATION.md +++ /dev/null @@ -1,73 +0,0 @@ -# Regenerating LikeC4 Webcomponents - -After modifying LikeC4 models (`.c4` files), you need to regenerate the webcomponents. - -## Automatic Regeneration - -Add to `Taskfile.yml`: - -```yaml - likec4:generate: - desc: Generate LikeC4 webcomponents from both projects - cmds: - - cd resources/edp-likec4 && npx likec4 codegen webcomponent --webcomponent-prefix likec4 --outfile ../../static/js/likec4-webcomponent.js - - cd resources/doc-likec4 && npx likec4 codegen webcomponent --webcomponent-prefix likec4 --outfile ../../static/js/likec4-doc-webcomponent.js -``` - -Then run: - -```bash -task likec4:generate -``` - -## Manual Regeneration - -### EDP Platform Architecture - -```bash -cd resources/edp-likec4 -npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js -``` - -### Documentation Platform Architecture - -```bash -cd resources/doc-likec4 -npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-doc-webcomponent.js -``` - -## When to Regenerate - -Regenerate webcomponents when you: - -- ✅ Add new elements or relationships -- ✅ Modify existing models -- ✅ Create new views -- ✅ Change element properties (colors, shapes, etc.) - -## File Sizes - -The webcomponents are large (~6MB total): - -- `likec4-webcomponent.js` - ~3.1MB (EDP architecture) -- `likec4-doc-webcomponent.js` - ~2.9MB (Documentation platform) - -This is normal as they contain: - -- React runtime -- Complete model data -- Diagram rendering engine -- Interactive controls - -## Note - -Both webcomponents are loaded in `layouts/partials/hooks/head-end.html` as ES modules: - -```html - - -``` diff --git a/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content b/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content new file mode 100644 index 0000000..e79aaa3 --- /dev/null +++ b/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content @@ -0,0 +1,19722 @@ +/* + +Add styles or override variables from the theme here. + +*/ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i&display=swap"); +:root, +[data-bs-theme="light"] { + --td-pre-bg: var(--bs-tertiary-bg); } + +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme="light"] { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #30638e; + --bs-secondary: #ffa630; + --bs-success: #3772ff; + --bs-info: #c0e0de; + --bs-warning: #ed6a5a; + --bs-danger: #ed6a5a; + --bs-light: #d3f3ee; + --bs-dark: #403f4c; + --bs-primary-rgb: 48, 99, 142; + --bs-secondary-rgb: 255, 166, 48; + --bs-success-rgb: 55, 114, 255; + --bs-info-rgb: 192, 224, 222; + --bs-warning-rgb: 237, 106, 90; + --bs-danger-rgb: 237, 106, 90; + --bs-light-rgb: 211, 243, 238; + --bs-dark-rgb: 64, 63, 76; + --bs-primary-text-emphasis: #132839; + --bs-secondary-text-emphasis: #664213; + --bs-success-text-emphasis: #162e66; + --bs-info-text-emphasis: #4d5a59; + --bs-warning-text-emphasis: #5f2a24; + --bs-danger-text-emphasis: #5f2a24; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #d6e0e8; + --bs-secondary-bg-subtle: #ffedd6; + --bs-success-bg-subtle: #d7e3ff; + --bs-info-bg-subtle: #f2f9f8; + --bs-warning-bg-subtle: #fbe1de; + --bs-danger-bg-subtle: #fbe1de; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #acc1d2; + --bs-secondary-border-subtle: #ffdbac; + --bs-success-border-subtle: #afc7ff; + --bs-info-border-subtle: #e6f3f2; + --bs-warning-border-subtle: #f8c3bd; + --bs-danger-border-subtle: #f8c3bd; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-font-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #094db1; + --bs-link-hover-color-rgb: 9, 77, 177; + --bs-code-color: #99641d; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(48, 99, 142, 0.25); + --bs-form-valid-color: #3772ff; + --bs-form-valid-border-color: #3772ff; + --bs-form-invalid-color: #ed6a5a; + --bs-form-invalid-border-color: #ed6a5a; } + +[data-bs-theme="dark"] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #83a1bb; + --bs-secondary-text-emphasis: #ffca83; + --bs-success-text-emphasis: #87aaff; + --bs-info-text-emphasis: #d9eceb; + --bs-warning-text-emphasis: #f4a69c; + --bs-danger-text-emphasis: #f4a69c; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #0a141c; + --bs-secondary-bg-subtle: #33210a; + --bs-success-bg-subtle: #0b1733; + --bs-info-bg-subtle: #262d2c; + --bs-warning-bg-subtle: #2f1512; + --bs-danger-bg-subtle: #2f1512; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #1d3b55; + --bs-secondary-border-subtle: #99641d; + --bs-success-border-subtle: #214499; + --bs-info-border-subtle: #738685; + --bs-warning-border-subtle: #8e4036; + --bs-danger-border-subtle: #8e4036; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #83a1bb; + --bs-link-hover-color: #a8bdcf; + --bs-link-color-rgb: 131, 161, 187; + --bs-link-hover-color-rgb: 168, 189, 207; + --bs-code-color: #c2a277; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; } } + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; } + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, .td-footer__links-item, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); } + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); } + @media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; } } +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); } + @media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; } } +h3, .h3, .td-footer__links-item { + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + h3, .h3, .td-footer__links-item { + font-size: 1.5rem; } } +h4, .h4 { + font-size: calc(1.26rem + 0.12vw); } + @media (min-width: 1200px) { + h4, .h4 { + font-size: 1.35rem; } } +h5, .h5 { + font-size: 1.15rem; } + +h6, .h6 { + font-size: 1rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul { + padding-left: 2rem; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small, .small, .td-footer__center, .td-cover-block > .byline { + font-size: 0.875em; } + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); } + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; } + a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); } + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; } + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; } + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; } + kbd kbd { + padding: 0; + font-size: 1em; } + +figure { + margin: 0 0 1rem; } + +img, +svg { + vertical-align: middle; } + +table { + caption-side: bottom; + border-collapse: collapse; } + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; } + +th { + text-align: inherit; + text-align: -webkit-match-parent; } + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; } + +label { + display: inline-block; } + +button { + border-radius: 0; } + +button:focus:not(:focus-visible) { + outline: 0; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +select { + text-transform: none; } + +[role="button"] { + cursor: pointer; } + +select { + word-wrap: normal; } + select:disabled { + opacity: 1; } + +[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator { + display: none !important; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; } + +::-moz-focus-inner { + padding: 0; + border-style: none; } + +textarea { + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; } + @media (min-width: 1200px) { + legend { + font-size: 1.5rem; } } + legend + * { + clear: left; } + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; } + +::-webkit-inner-spin-button { + height: auto; } + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-color-swatch-wrapper { + padding: 0; } + +::file-selector-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +iframe { + border: 0; } + +summary { + display: list-item; + cursor: pointer; } + +progress { + vertical-align: baseline; } + +[hidden] { + display: none !important; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-1 { + font-size: 5rem; } } +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; } } +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-3 { + font-size: 4rem; } } +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; } } +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-5 { + font-size: 3rem; } } +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; } } +.list-unstyled, .td-blog-posts-list { + padding-left: 0; + list-style: none; } + +.list-inline, .td-footer__links-list { + padding-left: 0; + list-style: none; } + +.list-inline-item, .td-footer__links-item { + display: inline-block; } + .list-inline-item:not(:last-child), .td-footer__links-item:not(:last-child) { + margin-right: 1rem; } + +.initialism { + font-size: 0.875em; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + .blockquote > :last-child { + margin-bottom: 0; } + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid, .td-content img { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-sm); + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; } } + +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; } } + +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; } } + +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; } } + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; } } + +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; } + +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-.5 * var(--bs-gutter-x)); + margin-left: calc(-.5 * var(--bs-gutter-x)); } + .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); } + +.col { + flex: 1 0 0%; } + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; } + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; } + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; } + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; } + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; } + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-auto { + flex: 0 0 auto; + width: auto; } + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; } + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-3 { + flex: 0 0 auto; + width: 25%; } + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; } + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; } + +.col-6 { + flex: 0 0 auto; + width: 50%; } + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; } + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; } + +.col-9 { + flex: 0 0 auto; + width: 75%; } + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; } + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; } + +.col-12 { + flex: 0 0 auto; + width: 100%; } + +.offset-1 { + margin-left: 8.33333333%; } + +.offset-2 { + margin-left: 16.66666667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333333%; } + +.offset-5 { + margin-left: 41.66666667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333333%; } + +.offset-8 { + margin-left: 66.66666667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333333%; } + +.offset-11 { + margin-left: 91.66666667%; } + +.g-0, +.gx-0 { + --bs-gutter-x: 0; } + +.g-0, +.gy-0 { + --bs-gutter-y: 0; } + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; } + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; } + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; } + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; } + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; } + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; } + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; } + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; } + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; } + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; } + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-auto { + flex: 0 0 auto; + width: auto; } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333333%; } + .offset-sm-2 { + margin-left: 16.66666667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333333%; } + .offset-sm-5 { + margin-left: 41.66666667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333333%; } + .offset-sm-8 { + margin-left: 66.66666667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333333%; } + .offset-sm-11 { + margin-left: 91.66666667%; } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-auto { + flex: 0 0 auto; + width: auto; } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-3 { + flex: 0 0 auto; + width: 25%; } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-md-6 { + flex: 0 0 auto; + width: 50%; } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-md-9 { + flex: 0 0 auto; + width: 75%; } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-md-12 { + flex: 0 0 auto; + width: 100%; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333333%; } + .offset-md-2 { + margin-left: 16.66666667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333333%; } + .offset-md-5 { + margin-left: 41.66666667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333333%; } + .offset-md-8 { + margin-left: 66.66666667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333333%; } + .offset-md-11 { + margin-left: 91.66666667%; } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-auto { + flex: 0 0 auto; + width: auto; } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333333%; } + .offset-lg-2 { + margin-left: 16.66666667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333333%; } + .offset-lg-5 { + margin-left: 41.66666667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333333%; } + .offset-lg-8 { + margin-left: 66.66666667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333333%; } + .offset-lg-11 { + margin-left: 91.66666667%; } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-auto { + flex: 0 0 auto; + width: auto; } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333333%; } + .offset-xl-2 { + margin-left: 16.66666667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333333%; } + .offset-xl-5 { + margin-left: 41.66666667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333333%; } + .offset-xl-8 { + margin-left: 66.66666667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333333%; } + .offset-xl-11 { + margin-left: 91.66666667%; } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xxl-0 { + margin-left: 0; } + .offset-xxl-1 { + margin-left: 8.33333333%; } + .offset-xxl-2 { + margin-left: 16.66666667%; } + .offset-xxl-3 { + margin-left: 25%; } + .offset-xxl-4 { + margin-left: 33.33333333%; } + .offset-xxl-5 { + margin-left: 41.66666667%; } + .offset-xxl-6 { + margin-left: 50%; } + .offset-xxl-7 { + margin-left: 58.33333333%; } + .offset-xxl-8 { + margin-left: 66.66666667%; } + .offset-xxl-9 { + margin-left: 75%; } + .offset-xxl-10 { + margin-left: 83.33333333%; } + .offset-xxl-11 { + margin-left: 91.66666667%; } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; } } + +.table, .td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); } + .table > :not(caption) > * > *, .td-table:not(.td-initial) > :not(caption) > * > *, .td-content table:not(.td-initial) > :not(caption) > * > *, .td-box table:not(.td-initial) > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); } + .table > tbody, .td-table:not(.td-initial) > tbody, .td-content table:not(.td-initial) > tbody, .td-box table:not(.td-initial) > tbody { + vertical-align: inherit; } + .table > thead, .td-table:not(.td-initial) > thead, .td-content table:not(.td-initial) > thead, .td-box table:not(.td-initial) > thead { + vertical-align: bottom; } + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; } + +.caption-top { + caption-side: top; } + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; } + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; } + .table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); } + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; } + +.table-borderless > :not(:first-child) { + border-top-width: 0; } + +.table-striped > tbody > tr:nth-of-type(odd) > *, .td-table:not(.td-initial) > tbody > tr:nth-of-type(odd) > *, .td-content table:not(.td-initial) > tbody > tr:nth-of-type(odd) > *, .td-box table:not(.td-initial) > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); } + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); } + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #d6e0e8; + --bs-table-border-color: #abb3ba; + --bs-table-striped-bg: #cbd5dc; + --bs-table-striped-color: #000; + --bs-table-active-bg: #c1cad1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c6cfd7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #ffedd6; + --bs-table-border-color: #ccbeab; + --bs-table-striped-bg: #f2e1cb; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6d5c1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ecdbc6; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d7e3ff; + --bs-table-border-color: #acb6cc; + --bs-table-striped-bg: #ccd8f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #c2cce6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c7d2ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #f2f9f8; + --bs-table-border-color: #c2c7c6; + --bs-table-striped-bg: #e6edec; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dae0df; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e0e6e5; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fbe1de; + --bs-table-border-color: #c9b4b2; + --bs-table-striped-bg: #eed6d3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e2cbc8; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e8d0cd; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #fbe1de; + --bs-table-border-color: #c9b4b2; + --bs-table-striped-bg: #eed6d3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e2cbc8; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e8d0cd; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #d3f3ee; + --bs-table-border-color: #a9c2be; + --bs-table-striped-bg: #c8e7e2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bedbd6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c3e1dc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #403f4c; + --bs-table-border-color: #666570; + --bs-table-striped-bg: #4a4955; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #53525e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #4e4d59; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-responsive, .td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +.form-label { + margin-bottom: 0.5rem; } + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; } + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; } + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-inset); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; } } + .form-control[type="file"] { + overflow: hidden; } + .form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #98b1c7; + outline: 0; + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; } + .form-control::-webkit-datetime-edit { + display: block; + padding: 0; } + .form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; } + .form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; } + .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + background-image: var(--bs-gradient); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; } } + .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); } + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; } + .form-control-plaintext:focus { + outline: 0; } + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; } + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; } + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; } + .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-inset); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; } } + .form-select:focus { + border-color: #98b1c7; + outline: 0; + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; } + .form-select:disabled { + background-color: var(--bs-secondary-bg); } + .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); } + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +[data-bs-theme="dark"] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); } + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; } + .form-check .form-check-input { + float: left; + margin-left: -1.5em; } + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; } + .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; } + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + print-color-adjust: exact; } + .form-check-input[type="checkbox"] { + border-radius: 0.25em; } + .form-check-input[type="radio"] { + border-radius: 50%; } + .form-check-input:active { + filter: brightness(90%); } + .form-check-input:focus { + border-color: #98b1c7; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-check-input:checked { + background-color: #30638e; + border-color: #30638e; } + .form-check-input:checked[type="checkbox"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input:checked[type="radio"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input[type="checkbox"]:indeterminate { + background-color: #30638e; + border-color: #30638e; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; } + .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; } + +.form-switch { + padding-left: 2.5em; } + .form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; } } + .form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2398b1c7'/%3e%3c/svg%3e"); } + .form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; } + .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; } + +.form-check-inline { + display: inline-block; + margin-right: 1rem; } + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + .btn-check[disabled] + .btn, div.drawio .btn-check[disabled] + button, .td-blog .btn-check[disabled] + .td-rss-button, .btn-check:disabled + .btn, div.drawio .btn-check:disabled + button, .td-blog .btn-check:disabled + .td-rss-button { + pointer-events: none; + filter: none; + opacity: 0.65; } + +[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); } + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + appearance: none; + background-color: transparent; } + .form-range:focus { + outline: 0; } + .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-range::-moz-focus-outer { + border: 0; } + .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #30638e; + background-image: var(--bs-gradient); + border: 0; + border-radius: 1rem; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; } } + .form-range::-webkit-slider-thumb:active { + background-color: #c1d0dd; + background-image: var(--bs-gradient); } + .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; + box-shadow: var(--bs-box-shadow-inset); } + .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #30638e; + background-image: var(--bs-gradient); + border: 0; + border-radius: 1rem; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; } } + .form-range::-moz-range-thumb:active { + background-color: #c1d0dd; + background-image: var(--bs-gradient); } + .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; + box-shadow: var(--bs-box-shadow-inset); } + .form-range:disabled { + pointer-events: none; } + .form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); } + .form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); } + +.form-floating { + position: relative; } + .form-floating > .form-control, + .form-floating > .form-control-plaintext, + .form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; } + .form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; } } + .form-floating > .form-control, + .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; } + .form-floating > .form-control::placeholder, + .form-floating > .form-control-plaintext::placeholder { + color: transparent; } + .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), + .form-floating > .form-control-plaintext:focus, + .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:-webkit-autofill, + .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:focus ~ label, + .form-floating > .form-control:not(:placeholder-shown) ~ label, + .form-floating > .form-control-plaintext ~ label, + .form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control:focus ~ label::after, + .form-floating > .form-control:not(:placeholder-shown) ~ label::after, + .form-floating > .form-control-plaintext ~ label::after, + .form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); } + .form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; } + .form-floating > :disabled ~ label, + .form-floating > .form-control:disabled ~ label { + color: #6c757d; } + .form-floating > :disabled ~ label::after, + .form-floating > .form-control:disabled ~ label::after { + background-color: var(--bs-secondary-bg); } + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .form-select, + .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } + .input-group > .form-control:focus, + .input-group > .form-select:focus, + .input-group > .form-floating:focus-within { + z-index: 5; } + .input-group .btn, .input-group div.drawio button, div.drawio .input-group button, .input-group .td-blog .td-rss-button, .td-blog .input-group .td-rss-button { + position: relative; + z-index: 2; } + .input-group .btn:focus, .input-group div.drawio button:focus, div.drawio .input-group button:focus, .input-group .td-blog .td-rss-button:focus, .td-blog .input-group .td-rss-button:focus { + z-index: 5; } + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); } + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn, +div.drawio .input-group-lg > button, +.td-blog .input-group-lg > .td-rss-button { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn, +div.drawio .input-group-sm > button, +.td-blog .input-group-sm > .td-rss-button { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; } + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--bs-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); } + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233772ff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233772ff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); } + .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); } + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, .was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, .was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); } + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ed6a5a'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ed6a5a' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ed6a5a'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ed6a5a' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); } + .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); } + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, .was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, .was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; } + +.btn, div.drawio button, .td-blog .td-rss-button { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + background-image: var(--bs-gradient); + box-shadow: var(--bs-btn-box-shadow); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .btn, div.drawio button, .td-blog .td-rss-button { + transition: none; } } + .btn:hover, div.drawio button:hover, .td-blog .td-rss-button:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); } + .btn-check + .btn:hover, div.drawio .btn-check + button:hover, .td-blog .btn-check + .td-rss-button:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); } + .btn:focus-visible, div.drawio button:focus-visible, .td-blog .td-rss-button:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + background-image: var(--bs-gradient); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-box-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:focus-visible + .btn, div.drawio .btn-check:focus-visible + button, .td-blog .btn-check:focus-visible + .td-rss-button { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-box-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:checked + .btn, div.drawio .btn-check:checked + button, .td-blog .btn-check:checked + .td-rss-button, :not(.btn-check) + .btn:active, div.drawio :not(.btn-check) + button:active, .td-blog :not(.btn-check) + .td-rss-button:active, .btn:first-child:active, div.drawio button:first-child:active, .td-blog .td-rss-button:first-child:active, .btn.active, div.drawio button.active, .td-blog .active.td-rss-button, .btn.show, div.drawio button.show, .td-blog .show.td-rss-button { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + background-image: none; + border-color: var(--bs-btn-active-border-color); + box-shadow: var(--bs-btn-active-shadow); } + .btn-check:checked + .btn:focus-visible, div.drawio .btn-check:checked + button:focus-visible, .td-blog .btn-check:checked + .td-rss-button:focus-visible, :not(.btn-check) + .btn:active:focus-visible, div.drawio :not(.btn-check) + button:active:focus-visible, .td-blog :not(.btn-check) + .td-rss-button:active:focus-visible, .btn:first-child:active:focus-visible, div.drawio button:first-child:active:focus-visible, .td-blog .td-rss-button:first-child:active:focus-visible, .btn.active:focus-visible, div.drawio button.active:focus-visible, .td-blog .active.td-rss-button:focus-visible, .btn.show:focus-visible, div.drawio button.show:focus-visible, .td-blog .show.td-rss-button:focus-visible { + box-shadow: var(--bs-btn-active-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:checked:focus-visible + .btn, div.drawio .btn-check:checked:focus-visible + button, .td-blog .btn-check:checked:focus-visible + .td-rss-button { + box-shadow: var(--bs-btn-active-shadow), var(--bs-btn-focus-box-shadow); } + .btn:disabled, div.drawio button:disabled, .td-blog .td-rss-button:disabled, .btn.disabled, div.drawio button.disabled, .td-blog .disabled.td-rss-button, fieldset:disabled .btn, fieldset:disabled div.drawio button, div.drawio fieldset:disabled button, fieldset:disabled .td-blog .td-rss-button, .td-blog fieldset:disabled .td-rss-button { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + background-image: none; + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); + box-shadow: none; } + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #30638e; + --bs-btn-border-color: #30638e; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #295479; + --bs-btn-hover-border-color: #264f72; + --bs-btn-focus-shadow-rgb: 79, 122, 159; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #264f72; + --bs-btn-active-border-color: #244a6b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #30638e; + --bs-btn-disabled-border-color: #30638e; } + +.btn-secondary { + --bs-btn-color: #000; + --bs-btn-bg: #ffa630; + --bs-btn-border-color: #ffa630; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffb34f; + --bs-btn-hover-border-color: #ffaf45; + --bs-btn-focus-shadow-rgb: 217, 141, 41; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffb859; + --bs-btn-active-border-color: #ffaf45; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffa630; + --bs-btn-disabled-border-color: #ffa630; } + +.btn-success { + --bs-btn-color: #000; + --bs-btn-bg: #3772ff; + --bs-btn-border-color: #3772ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #5587ff; + --bs-btn-hover-border-color: #4b80ff; + --bs-btn-focus-shadow-rgb: 47, 97, 217; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #5f8eff; + --bs-btn-active-border-color: #4b80ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #3772ff; + --bs-btn-disabled-border-color: #3772ff; } + +.btn-info, .td-blog .td-rss-button { + --bs-btn-color: #000; + --bs-btn-bg: #c0e0de; + --bs-btn-border-color: #c0e0de; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #c9e5e3; + --bs-btn-hover-border-color: #c6e3e1; + --bs-btn-focus-shadow-rgb: 163, 190, 189; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #cde6e5; + --bs-btn-active-border-color: #c6e3e1; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #c0e0de; + --bs-btn-disabled-border-color: #c0e0de; } + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f08073; + --bs-btn-hover-border-color: #ef796b; + --bs-btn-focus-shadow-rgb: 201, 90, 77; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f1887b; + --bs-btn-active-border-color: #ef796b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ed6a5a; + --bs-btn-disabled-border-color: #ed6a5a; } + +.btn-danger { + --bs-btn-color: #000; + --bs-btn-bg: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f08073; + --bs-btn-hover-border-color: #ef796b; + --bs-btn-focus-shadow-rgb: 201, 90, 77; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f1887b; + --bs-btn-active-border-color: #ef796b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ed6a5a; + --bs-btn-disabled-border-color: #ed6a5a; } + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #d3f3ee; + --bs-btn-border-color: #d3f3ee; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #b3cfca; + --bs-btn-hover-border-color: #a9c2be; + --bs-btn-focus-shadow-rgb: 179, 207, 202; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #a9c2be; + --bs-btn-active-border-color: #9eb6b3; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #d3f3ee; + --bs-btn-disabled-border-color: #d3f3ee; } + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #403f4c; + --bs-btn-border-color: #403f4c; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5d5c67; + --bs-btn-hover-border-color: #53525e; + --bs-btn-focus-shadow-rgb: 93, 92, 103; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #666570; + --bs-btn-active-border-color: #53525e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #403f4c; + --bs-btn-disabled-border-color: #403f4c; } + +.btn-outline-primary, div.drawio button { + --bs-btn-color: #30638e; + --bs-btn-border-color: #30638e; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #30638e; + --bs-btn-hover-border-color: #30638e; + --bs-btn-focus-shadow-rgb: 48, 99, 142; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #30638e; + --bs-btn-active-border-color: #30638e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #30638e; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #30638e; + --bs-gradient: none; } + +.btn-outline-secondary { + --bs-btn-color: #ffa630; + --bs-btn-border-color: #ffa630; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffa630; + --bs-btn-hover-border-color: #ffa630; + --bs-btn-focus-shadow-rgb: 255, 166, 48; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffa630; + --bs-btn-active-border-color: #ffa630; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffa630; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffa630; + --bs-gradient: none; } + +.btn-outline-success { + --bs-btn-color: #3772ff; + --bs-btn-border-color: #3772ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #3772ff; + --bs-btn-hover-border-color: #3772ff; + --bs-btn-focus-shadow-rgb: 55, 114, 255; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3772ff; + --bs-btn-active-border-color: #3772ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #3772ff; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #3772ff; + --bs-gradient: none; } + +.btn-outline-info { + --bs-btn-color: #c0e0de; + --bs-btn-border-color: #c0e0de; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #c0e0de; + --bs-btn-hover-border-color: #c0e0de; + --bs-btn-focus-shadow-rgb: 192, 224, 222; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c0e0de; + --bs-btn-active-border-color: #c0e0de; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #c0e0de; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #c0e0de; + --bs-gradient: none; } + +.btn-outline-warning { + --bs-btn-color: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ed6a5a; + --bs-btn-hover-border-color: #ed6a5a; + --bs-btn-focus-shadow-rgb: 237, 106, 90; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ed6a5a; + --bs-btn-active-border-color: #ed6a5a; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ed6a5a; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ed6a5a; + --bs-gradient: none; } + +.btn-outline-danger { + --bs-btn-color: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ed6a5a; + --bs-btn-hover-border-color: #ed6a5a; + --bs-btn-focus-shadow-rgb: 237, 106, 90; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ed6a5a; + --bs-btn-active-border-color: #ed6a5a; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ed6a5a; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ed6a5a; + --bs-gradient: none; } + +.btn-outline-light { + --bs-btn-color: #d3f3ee; + --bs-btn-border-color: #d3f3ee; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3f3ee; + --bs-btn-hover-border-color: #d3f3ee; + --bs-btn-focus-shadow-rgb: 211, 243, 238; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #d3f3ee; + --bs-btn-active-border-color: #d3f3ee; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #d3f3ee; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #d3f3ee; + --bs-gradient: none; } + +.btn-outline-dark { + --bs-btn-color: #403f4c; + --bs-btn-border-color: #403f4c; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #403f4c; + --bs-btn-hover-border-color: #403f4c; + --bs-btn-focus-shadow-rgb: 64, 63, 76; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #403f4c; + --bs-btn-active-border-color: #403f4c; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #403f4c; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #403f4c; + --bs-gradient: none; } + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; + background-image: none; } + .btn-link:focus-visible { + color: var(--bs-btn-color); } + .btn-link:hover { + color: var(--bs-btn-hover-color); } + +.btn-lg, .td-blog .td-rss-button, .btn-group-lg > .btn, div.drawio .btn-group-lg > button { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); } + +.btn-sm, .btn-group-sm > .btn, div.drawio .btn-group-sm > button, .td-blog .btn-group-sm > .td-rss-button { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); } + +.fade { + transition: opacity 0.15s linear; } + @media (prefers-reduced-motion: reduce) { + .fade { + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; } } + .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; } } +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; } + +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #30638e; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); + box-shadow: var(--bs-dropdown-box-shadow); } + .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); } + +.dropdown-menu-start { + --bs-position: start; } + .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; } + +.dropdown-menu-end { + --bs-position: end; } + .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; } + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-sm-end { + --bs-position: end; } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-md-end { + --bs-position: end; } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-lg-end { + --bs-position: end; } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xl-end { + --bs-position: end; } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xxl-end { + --bs-position: end; } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; } } + +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); } + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); } + +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-toggle::after { + vertical-align: 0; } + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); } + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropstart .dropdown-toggle::after { + display: none; } + +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropstart .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; } + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); } + .dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); + background-image: var(--bs-gradient); } + .dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); + background-image: var(--bs-gradient); } + .dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; + background-image: none; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); } + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #30638e; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, div.drawio .btn-group > button, .td-blog .btn-group > .td-rss-button, + .btn-group-vertical > .btn, + div.drawio .btn-group-vertical > button, + .td-blog .btn-group-vertical > .td-rss-button { + position: relative; + flex: 1 1 auto; } + .btn-group > .btn-check:checked + .btn, div.drawio .btn-group > .btn-check:checked + button, .td-blog .btn-group > .btn-check:checked + .td-rss-button, + .btn-group > .btn-check:focus + .btn, + div.drawio .btn-group > .btn-check:focus + button, + .td-blog .btn-group > .btn-check:focus + .td-rss-button, + .btn-group > .btn:hover, + div.drawio .btn-group > button:hover, + .td-blog .btn-group > .td-rss-button:hover, + .btn-group > .btn:focus, + div.drawio .btn-group > button:focus, + .td-blog .btn-group > .td-rss-button:focus, + .btn-group > .btn:active, + div.drawio .btn-group > button:active, + .td-blog .btn-group > .td-rss-button:active, + .btn-group > .btn.active, + div.drawio .btn-group > button.active, + .td-blog .btn-group > .active.td-rss-button, + .btn-group-vertical > .btn-check:checked + .btn, + div.drawio .btn-group-vertical > .btn-check:checked + button, + .td-blog .btn-group-vertical > .btn-check:checked + .td-rss-button, + .btn-group-vertical > .btn-check:focus + .btn, + div.drawio .btn-group-vertical > .btn-check:focus + button, + .td-blog .btn-group-vertical > .btn-check:focus + .td-rss-button, + .btn-group-vertical > .btn:hover, + div.drawio .btn-group-vertical > button:hover, + .td-blog .btn-group-vertical > .td-rss-button:hover, + .btn-group-vertical > .btn:focus, + div.drawio .btn-group-vertical > button:focus, + .td-blog .btn-group-vertical > .td-rss-button:focus, + .btn-group-vertical > .btn:active, + div.drawio .btn-group-vertical > button:active, + .td-blog .btn-group-vertical > .td-rss-button:active, + .btn-group-vertical > .btn.active, + div.drawio .btn-group-vertical > button.active, + .td-blog .btn-group-vertical > .active.td-rss-button { + z-index: 1; } + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group { + border-radius: var(--bs-border-radius); } + .btn-group > :not(.btn-check:first-child) + .btn, div.drawio .btn-group > :not(.btn-check:first-child) + button, .td-blog .btn-group > :not(.btn-check:first-child) + .td-rss-button, + .btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--bs-border-width) * -1); } + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), div.drawio .btn-group > button:not(:last-child):not(.dropdown-toggle), .td-blog .btn-group > .td-rss-button:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn.dropdown-toggle-split:first-child, + div.drawio .btn-group > button.dropdown-toggle-split:first-child, + .td-blog .btn-group > .dropdown-toggle-split.td-rss-button:first-child, + .btn-group > .btn-group:not(:last-child) > .btn, + div.drawio .btn-group > .btn-group:not(:last-child) > button, + .td-blog .btn-group > .btn-group:not(:last-child) > .td-rss-button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn:nth-child(n + 3), div.drawio .btn-group > button:nth-child(n + 3), .td-blog .btn-group > .td-rss-button:nth-child(n + 3), + .btn-group > :not(.btn-check) + .btn, + div.drawio .btn-group > :not(.btn-check) + button, + .td-blog .btn-group > :not(.btn-check) + .td-rss-button, + .btn-group > .btn-group:not(:first-child) > .btn, + div.drawio .btn-group > .btn-group:not(:first-child) > button, + .td-blog .btn-group > .btn-group:not(:first-child) > .td-rss-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; } + .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; } + .dropstart .dropdown-toggle-split::before { + margin-right: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split, div.drawio .btn-group-sm > button + .dropdown-toggle-split, .td-blog .btn-group-sm > .td-rss-button + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; } + +.btn-lg + .dropdown-toggle-split, .td-blog .td-rss-button + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split, div.drawio .btn-group-lg > button + .dropdown-toggle-split, .td-blog .btn-group-lg > .td-rss-button + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-group.show .dropdown-toggle { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } + .btn-group.show .dropdown-toggle.btn-link { + box-shadow: none; } + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; } + .btn-group-vertical > .btn, div.drawio .btn-group-vertical > button, .td-blog .btn-group-vertical > .td-rss-button, + .btn-group-vertical > .btn-group { + width: 100%; } + .btn-group-vertical > .btn:not(:first-child), div.drawio .btn-group-vertical > button:not(:first-child), .td-blog .btn-group-vertical > .td-rss-button:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--bs-border-width) * -1); } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), div.drawio .btn-group-vertical > button:not(:last-child):not(.dropdown-toggle), .td-blog .btn-group-vertical > .td-rss-button:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn, + div.drawio .btn-group-vertical > .btn-group:not(:last-child) > button, + .td-blog .btn-group-vertical > .btn-group:not(:last-child) > .td-rss-button { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn ~ .btn, div.drawio .btn-group-vertical > button ~ .btn, div.drawio .btn-group-vertical > .btn ~ button, div.drawio .btn-group-vertical > button ~ button, .td-blog .btn-group-vertical > .td-rss-button ~ .btn, .td-blog div.drawio .btn-group-vertical > .td-rss-button ~ button, div.drawio .td-blog .btn-group-vertical > .td-rss-button ~ button, .td-blog .btn-group-vertical > .btn ~ .td-rss-button, .td-blog div.drawio .btn-group-vertical > button ~ .td-rss-button, div.drawio .td-blog .btn-group-vertical > button ~ .td-rss-button, .td-blog .btn-group-vertical > .td-rss-button ~ .td-rss-button, + .btn-group-vertical > .btn-group:not(:first-child) > .btn, + div.drawio .btn-group-vertical > .btn-group:not(:first-child) > button, + .td-blog .btn-group-vertical > .btn-group:not(:first-child) > .td-rss-button { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; } } + .nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); } + .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; } + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); } + .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); } + .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #30638e; } + .nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); } + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); + background-image: var(--bs-gradient); } + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); } + .nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; } + .nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; } + .nav-underline .nav-link.active, + .nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; } + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; } + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; } + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar, .td-navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); + background-image: var(--bs-gradient); } + .navbar > .container, .td-navbar > .container, + .navbar > .container-fluid, + .td-navbar > .container-fluid, + .navbar > .container-sm, + .td-navbar > .container-sm, + .navbar > .container-md, + .td-navbar > .container-md, + .navbar > .container-lg, + .td-navbar > .container-lg, + .navbar > .container-xl, + .td-navbar > .container-xl, + .navbar > .container-xxl, + .td-navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; } + +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); } + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); } + .navbar-nav .dropdown-menu { + position: static; } + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); } + .navbar-text a, + .navbar-text a:hover, + .navbar-text a:focus { + color: var(--bs-navbar-active-color); } + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; } + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); } + @media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; } } + .navbar-toggler:hover { + text-decoration: none; } + .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; } + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; } + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xxl .navbar-toggler { + display: none; } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +.navbar-expand, .td-navbar { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand .navbar-nav, .td-navbar .navbar-nav { + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu, .td-navbar .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link, .td-navbar .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand .navbar-nav-scroll, .td-navbar .navbar-nav-scroll { + overflow: visible; } + .navbar-expand .navbar-collapse, .td-navbar .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand .navbar-toggler, .td-navbar .navbar-toggler { + display: none; } + .navbar-expand .offcanvas, .td-navbar .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand .offcanvas .offcanvas-header, .td-navbar .offcanvas .offcanvas-header { + display: none; } + .navbar-expand .offcanvas .offcanvas-body, .td-navbar .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } + +.navbar-dark, +.navbar[data-bs-theme="dark"], +[data-bs-theme="dark"].td-navbar { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +[data-bs-theme="dark"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); + box-shadow: var(--bs-card-box-shadow); } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group { + border-top: inherit; + border-bottom: inherit; } + .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + .card > .card-header + .list-group, + .card > .list-group + .card-footer { + border-top: 0; } + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); } + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); } + +.card-subtitle { + margin-top: calc(-.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); } + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; } + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); } + +.card-header-tabs { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; } + .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); } + +.card-header-pills { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; } + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); } + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23132839' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); } + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; } } + .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); } + .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); } + .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; } } + .accordion-button:hover { + z-index: 2; } + .accordion-button:focus { + z-index: 3; + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); } + +.accordion-header { + margin-bottom: 0; } + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); } + .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); } + .accordion-item:first-of-type > .accordion-header .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:not(:first-of-type) { + border-top: 0; } + .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + .accordion-item:last-of-type > .accordion-header .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:last-of-type > .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); } + +.accordion-flush > .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + .accordion-flush > .accordion-item:first-child { + border-top: 0; } + .accordion-flush > .accordion-item:last-child { + border-bottom: 0; } + .accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { + border-radius: 0; } + .accordion-flush > .accordion-item > .accordion-collapse { + border-radius: 0; } + +[data-bs-theme="dark"] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2383a1bb'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2383a1bb'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); } + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); } + .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } + +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); } + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: #6c757d; + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #30638e; + --bs-pagination-active-border-color: #30638e; + --bs-pagination-disabled-color: #dee2e6; + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; } + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; } } + .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); } + .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); } + .page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + background-image: var(--bs-gradient); + border-color: var(--bs-pagination-active-border-color); } + .page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); } + +.page-item:not(:first-child) .page-link { + margin-left: calc(var(--bs-border-width) * -1); } + +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); } + +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); } + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); } + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); } + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: var(--bs-border-radius); + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); + background-image: var(--bs-gradient); } + .badge:empty { + display: none; } + +.btn .badge, div.drawio button .badge, .td-blog .td-rss-button .badge { + position: relative; + top: -1px; } + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); + --bs-alert-border-radius: var(--bs-border-radius); + --bs-alert-link-color: inherit; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); } + +.alert-heading { + color: inherit; } + +.alert-link { + font-weight: 700; + color: var(--bs-alert-link-color); } + +.alert-dismissible { + padding-right: 3rem; } + .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; } + +.alert-primary, .pageinfo-primary { + --bs-alert-color: var(--bs-primary-text-emphasis); + --bs-alert-bg: var(--bs-primary-bg-subtle); + --bs-alert-border-color: var(--bs-primary-border-subtle); + --bs-alert-link-color: var(--bs-primary-text-emphasis); } + +.alert-secondary, .pageinfo-secondary { + --bs-alert-color: var(--bs-secondary-text-emphasis); + --bs-alert-bg: var(--bs-secondary-bg-subtle); + --bs-alert-border-color: var(--bs-secondary-border-subtle); + --bs-alert-link-color: var(--bs-secondary-text-emphasis); } + +.alert-success, .pageinfo-success { + --bs-alert-color: var(--bs-success-text-emphasis); + --bs-alert-bg: var(--bs-success-bg-subtle); + --bs-alert-border-color: var(--bs-success-border-subtle); + --bs-alert-link-color: var(--bs-success-text-emphasis); } + +.alert-info, .pageinfo-info { + --bs-alert-color: var(--bs-info-text-emphasis); + --bs-alert-bg: var(--bs-info-bg-subtle); + --bs-alert-border-color: var(--bs-info-border-subtle); + --bs-alert-link-color: var(--bs-info-text-emphasis); } + +.alert-warning, .pageinfo-warning { + --bs-alert-color: var(--bs-warning-text-emphasis); + --bs-alert-bg: var(--bs-warning-bg-subtle); + --bs-alert-border-color: var(--bs-warning-border-subtle); + --bs-alert-link-color: var(--bs-warning-text-emphasis); } + +.alert-danger, .pageinfo-danger { + --bs-alert-color: var(--bs-danger-text-emphasis); + --bs-alert-bg: var(--bs-danger-bg-subtle); + --bs-alert-border-color: var(--bs-danger-border-subtle); + --bs-alert-link-color: var(--bs-danger-text-emphasis); } + +.alert-light, .pageinfo-light { + --bs-alert-color: var(--bs-light-text-emphasis); + --bs-alert-bg: var(--bs-light-bg-subtle); + --bs-alert-border-color: var(--bs-light-border-subtle); + --bs-alert-link-color: var(--bs-light-text-emphasis); } + +.alert-dark, .pageinfo-dark { + --bs-alert-color: var(--bs-dark-text-emphasis); + --bs-alert-bg: var(--bs-dark-bg-subtle); + --bs-alert-border-color: var(--bs-dark-border-subtle); + --bs-alert-link-color: var(--bs-dark-text-emphasis); } + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; } } + +.progress, +.progress-stacked { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: var(--bs-secondary-bg); + --bs-progress-border-radius: var(--bs-border-radius); + --bs-progress-box-shadow: var(--bs-box-shadow-inset); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #30638e; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); + box-shadow: var(--bs-progress-box-shadow); } + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); } + @media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; } } +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); } + +.progress-stacked > .progress { + overflow: visible; } + +.progress-stacked > .progress > .progress-bar { + width: 100%; } + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } +.list-group { + --bs-list-group-color: var(--bs-body-color); + --bs-list-group-bg: var(--bs-body-bg); + --bs-list-group-border-color: var(--bs-border-color); + --bs-list-group-border-width: var(--bs-border-width); + --bs-list-group-border-radius: var(--bs-border-radius); + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-secondary-color); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); + --bs-list-group-action-active-color: var(--bs-body-color); + --bs-list-group-action-active-bg: var(--bs-secondary-bg); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #30638e; + --bs-list-group-active-border-color: #30638e; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); } + +.list-group-numbered { + list-style-type: none; + counter-reset: section; } + .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; } + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; } + .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); } + .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); } + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); } + .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; } + .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; } + .list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); } + .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); } + .list-group-item + .list-group-item { + border-top-width: 0; } + .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); } + +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +.list-group-flush { + border-radius: 0; } + .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); } + .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; } + +.list-group-item-primary { + --bs-list-group-color: var(--bs-primary-text-emphasis); + --bs-list-group-bg: var(--bs-primary-bg-subtle); + --bs-list-group-border-color: var(--bs-primary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); + --bs-list-group-active-color: var(--bs-primary-bg-subtle); + --bs-list-group-active-bg: var(--bs-primary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); } + +.list-group-item-secondary { + --bs-list-group-color: var(--bs-secondary-text-emphasis); + --bs-list-group-bg: var(--bs-secondary-bg-subtle); + --bs-list-group-border-color: var(--bs-secondary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); + --bs-list-group-active-color: var(--bs-secondary-bg-subtle); + --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); } + +.list-group-item-success { + --bs-list-group-color: var(--bs-success-text-emphasis); + --bs-list-group-bg: var(--bs-success-bg-subtle); + --bs-list-group-border-color: var(--bs-success-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-success-border-subtle); + --bs-list-group-active-color: var(--bs-success-bg-subtle); + --bs-list-group-active-bg: var(--bs-success-text-emphasis); + --bs-list-group-active-border-color: var(--bs-success-text-emphasis); } + +.list-group-item-info { + --bs-list-group-color: var(--bs-info-text-emphasis); + --bs-list-group-bg: var(--bs-info-bg-subtle); + --bs-list-group-border-color: var(--bs-info-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-info-border-subtle); + --bs-list-group-active-color: var(--bs-info-bg-subtle); + --bs-list-group-active-bg: var(--bs-info-text-emphasis); + --bs-list-group-active-border-color: var(--bs-info-text-emphasis); } + +.list-group-item-warning { + --bs-list-group-color: var(--bs-warning-text-emphasis); + --bs-list-group-bg: var(--bs-warning-bg-subtle); + --bs-list-group-border-color: var(--bs-warning-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); + --bs-list-group-active-color: var(--bs-warning-bg-subtle); + --bs-list-group-active-bg: var(--bs-warning-text-emphasis); + --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); } + +.list-group-item-danger { + --bs-list-group-color: var(--bs-danger-text-emphasis); + --bs-list-group-bg: var(--bs-danger-bg-subtle); + --bs-list-group-border-color: var(--bs-danger-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); + --bs-list-group-active-color: var(--bs-danger-bg-subtle); + --bs-list-group-active-bg: var(--bs-danger-text-emphasis); + --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); } + +.list-group-item-light { + --bs-list-group-color: var(--bs-light-text-emphasis); + --bs-list-group-bg: var(--bs-light-bg-subtle); + --bs-list-group-border-color: var(--bs-light-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-light-border-subtle); + --bs-list-group-active-color: var(--bs-light-bg-subtle); + --bs-list-group-active-bg: var(--bs-light-text-emphasis); + --bs-list-group-active-border-color: var(--bs-light-text-emphasis); } + +.list-group-item-dark { + --bs-list-group-color: var(--bs-dark-text-emphasis); + --bs-list-group-bg: var(--bs-dark-bg-subtle); + --bs-list-group-border-color: var(--bs-dark-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); + --bs-list-group-active-color: var(--bs-dark-bg-subtle); + --bs-list-group-active-bg: var(--bs-dark-text-emphasis); + --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); } + +.btn-close { + --bs-btn-close-color: #000; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); } + .btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); } + .btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); } + .btn-close:disabled, .btn-close.disabled { + pointer-events: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); } + +.btn-close-white { + filter: var(--bs-btn-close-white-filter); } + +[data-bs-theme="dark"] .btn-close { + filter: var(--bs-btn-close-white-filter); } + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-border-width: var(--bs-border-width); + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: var(--bs-border-radius); + --bs-toast-box-shadow: var(--bs-box-shadow); + --bs-toast-header-color: var(--bs-secondary-color); + --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-header-border-color: var(--bs-border-color-translucent); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); } + .toast.showing { + opacity: 0; } + .toast:not(.show) { + display: none; } + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: max-content; + max-width: 100%; + pointer-events: none; } + .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); } + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); } + .toast-header .btn-close { + margin-right: calc(-.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); } + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; } + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; } + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; } + .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; } } + .modal.show .modal-dialog { + transform: none; } + .modal.modal-static .modal-dialog { + transform: scale(1.02); } + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); } + .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); } + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + box-shadow: var(--bs-modal-box-shadow); + outline: 0; } + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); } + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); } + .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5); + margin: calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto; } + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); } + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); } + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); } + .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * .5); } + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; } + .modal-sm { + --bs-modal-width: 300px; } } + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; } } + +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; } } + +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen .modal-header, + .modal-fullscreen .modal-footer { + border-radius: 0; } + .modal-fullscreen .modal-body { + overflow-y: auto; } + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; } } + +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: var(--bs-body-bg); + --bs-tooltip-bg: var(--bs-emphasis-color); + --bs-tooltip-border-radius: var(--bs-border-radius); + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + margin: var(--bs-tooltip-margin); + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; } + .tooltip.show { + opacity: var(--bs-tooltip-opacity); } + .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); } + .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-top-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-right-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); } + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: var(--bs-body-bg); + --bs-popover-border-width: var(--bs-border-width); + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: var(--bs-border-radius-lg); + --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); + --bs-popover-box-shadow: var(--bs-box-shadow); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: inherit; + --bs-popover-header-bg: var(--bs-secondary-bg); + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: var(--bs-body-color); + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); + box-shadow: var(--bs-popover-box-shadow); } + .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); } + .popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; } + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); } + .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); } + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); } + .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); } + .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); } + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); } + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); } + .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); } + +.carousel { + position: relative; } + +.carousel.pointer-event { + touch-action: pan-y; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); } + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); } + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; } + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; } + +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; } + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; } } +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; } + +.carousel-control-prev { + left: 0; + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); } + +.carousel-control-next { + right: 0; + background-image: linear-gradient(270deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; } + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/; } + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/; } + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; } + .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; } } + .carousel-indicators .active { + opacity: 1; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; } + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; } + +.carousel-dark .carousel-caption { + color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-control-prev-icon, +[data-bs-theme="dark"] .carousel .carousel-control-next-icon, [data-bs-theme="dark"].carousel .carousel-control-prev-icon, +[data-bs-theme="dark"].carousel .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target], [data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target] { + background-color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-caption, [data-bs-theme="dark"].carousel .carousel-caption { + color: #000; } + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); } + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; } } + +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; } + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; + transform: none; } } + +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; } + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; } + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; } } + +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: var(--bs-body-color); + --bs-offcanvas-bg: var(--bs-body-bg); + --bs-offcanvas-border-width: var(--bs-border-width); + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); + --bs-offcanvas-transition: transform 0.3s ease-in-out; + --bs-offcanvas-title-line-height: 1.5; } + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; } } +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; } } + +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-sm .offcanvas-header { + display: none; } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; } } +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; } } + +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-md .offcanvas-header { + display: none; } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; } } +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; } } + +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-lg .offcanvas-header { + display: none; } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; } } +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; } } + +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xl .offcanvas-header { + display: none; } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; } } +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; } } + +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xxl .offcanvas-header { + display: none; } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } + @media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; } } + .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; } + .offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; } + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; } + .offcanvas-backdrop.fade { + opacity: 0; } + .offcanvas-backdrop.show { + opacity: 0.5; } + +.offcanvas-header { + display: flex; + align-items: center; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); } + .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5); + margin: calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto; } + +.offcanvas-title { + margin-bottom: 0; + line-height: var(--bs-offcanvas-title-line-height); } + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; } + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; } + .placeholder.btn::before, div.drawio button.placeholder::before, .td-blog .placeholder.td-rss-button::before { + display: inline-block; + content: ""; } + +.placeholder-xs { + min-height: .6em; } + +.placeholder-sm { + min-height: .8em; } + +.placeholder-lg { + min-height: 1.2em; } + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; } + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; } } + +.placeholder-wave { + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; } + +@keyframes placeholder-wave { + 100% { + mask-position: -200% 0%; } } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-secondary { + color: #000 !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-success { + color: #000 !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-info { + color: #000 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-danger { + color: #000 !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-light { + color: #000 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; } + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-primary:hover, .link-primary:focus { + color: RGBA(34, 69, 99, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(34, 69, 99, var(--bs-link-underline-opacity, 1)) !important; } + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-secondary:hover, .link-secondary:focus { + color: RGBA(255, 193, 110, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 193, 110, var(--bs-link-underline-opacity, 1)) !important; } + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-success:hover, .link-success:focus { + color: RGBA(115, 156, 255, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(115, 156, 255, var(--bs-link-underline-opacity, 1)) !important; } + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-info:hover, .link-info:focus { + color: RGBA(211, 233, 232, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(211, 233, 232, var(--bs-link-underline-opacity, 1)) !important; } + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-warning:hover, .link-warning:focus { + color: RGBA(242, 151, 140, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(242, 151, 140, var(--bs-link-underline-opacity, 1)) !important; } + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-danger:hover, .link-danger:focus { + color: RGBA(242, 151, 140, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(242, 151, 140, var(--bs-link-underline-opacity, 1)) !important; } + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-light:hover, .link-light:focus { + color: RGBA(224, 247, 243, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(224, 247, 243, var(--bs-link-underline-opacity, 1)) !important; } + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-dark:hover, .link-dark:focus { + color: RGBA(45, 44, 53, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(45, 44, 53, var(--bs-link-underline-opacity, 1)) !important; } + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; } + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); } + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; } + .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; } + @media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; } } +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); } + +.ratio { + position: relative; + width: 100%; } + .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; } + .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + +.ratio-1x1 { + --bs-aspect-ratio: 100%; } + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); } + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); } + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; } + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; } + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; } + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + .visually-hidden:not(caption), + .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.float-start { + float: left !important; } + +.float-end { + float: right !important; } + +.float-none { + float: none !important; } + +.object-fit-contain { + object-fit: contain !important; } + +.object-fit-cover { + object-fit: cover !important; } + +.object-fit-fill { + object-fit: fill !important; } + +.object-fit-scale { + object-fit: scale-down !important; } + +.object-fit-none { + object-fit: none !important; } + +.opacity-0 { + opacity: 0 !important; } + +.opacity-25 { + opacity: 0.25 !important; } + +.opacity-50 { + opacity: 0.5 !important; } + +.opacity-75 { + opacity: 0.75 !important; } + +.opacity-100 { + opacity: 1 !important; } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.overflow-visible { + overflow: visible !important; } + +.overflow-scroll { + overflow: scroll !important; } + +.overflow-x-auto { + overflow-x: auto !important; } + +.overflow-x-hidden { + overflow-x: hidden !important; } + +.overflow-x-visible { + overflow-x: visible !important; } + +.overflow-x-scroll { + overflow-x: scroll !important; } + +.overflow-y-auto { + overflow-y: auto !important; } + +.overflow-y-hidden { + overflow-y: hidden !important; } + +.overflow-y-visible { + overflow-y: visible !important; } + +.overflow-y-scroll { + overflow-y: scroll !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-grid { + display: grid !important; } + +.d-inline-grid { + display: inline-grid !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: flex !important; } + +.d-inline-flex { + display: inline-flex !important; } + +.d-none { + display: none !important; } + +.shadow { + box-shadow: var(--bs-box-shadow) !important; } + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; } + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; } + +.shadow-none { + box-shadow: none !important; } + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: sticky !important; } + +.top-0 { + top: 0 !important; } + +.top-50 { + top: 50% !important; } + +.top-100 { + top: 100% !important; } + +.bottom-0 { + bottom: 0 !important; } + +.bottom-50 { + bottom: 50% !important; } + +.bottom-100 { + bottom: 100% !important; } + +.start-0 { + left: 0 !important; } + +.start-50 { + left: 50% !important; } + +.start-100 { + left: 100% !important; } + +.end-0 { + right: 0 !important; } + +.end-50 { + right: 50% !important; } + +.end-100 { + right: 100% !important; } + +.translate-middle { + transform: translate(-50%, -50%) !important; } + +.translate-middle-x { + transform: translateX(-50%) !important; } + +.translate-middle-y { + transform: translateY(-50%) !important; } + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-0 { + border: 0 !important; } + +.border-top, .td-page-meta__lastmod { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-end-0 { + border-right: 0 !important; } + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-start-0 { + border-left: 0 !important; } + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; } + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; } + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; } + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; } + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; } + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; } + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; } + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; } + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; } + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; } + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; } + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; } + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; } + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; } + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; } + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; } + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; } + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; } + +.border-1 { + border-width: 1px !important; } + +.border-2 { + border-width: 2px !important; } + +.border-3 { + border-width: 3px !important; } + +.border-4 { + border-width: 4px !important; } + +.border-5 { + border-width: 5px !important; } + +.border-opacity-10 { + --bs-border-opacity: 0.1; } + +.border-opacity-25 { + --bs-border-opacity: 0.25; } + +.border-opacity-50 { + --bs-border-opacity: 0.5; } + +.border-opacity-75 { + --bs-border-opacity: 0.75; } + +.border-opacity-100 { + --bs-border-opacity: 1; } + +.w-25 { + width: 25% !important; } + +.w-50 { + width: 50% !important; } + +.w-75 { + width: 75% !important; } + +.w-100 { + width: 100% !important; } + +.w-auto { + width: auto !important; } + +.mw-100 { + max-width: 100% !important; } + +.vw-100 { + width: 100vw !important; } + +.min-vw-100 { + min-width: 100vw !important; } + +.h-25 { + height: 25% !important; } + +.h-50 { + height: 50% !important; } + +.h-75 { + height: 75% !important; } + +.h-100 { + height: 100% !important; } + +.h-auto { + height: auto !important; } + +.mh-100 { + max-height: 100% !important; } + +.vh-100 { + height: 100vh !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.flex-fill { + flex: 1 1 auto !important; } + +.flex-row { + flex-direction: row !important; } + +.flex-column { + flex-direction: column !important; } + +.flex-row-reverse { + flex-direction: row-reverse !important; } + +.flex-column-reverse { + flex-direction: column-reverse !important; } + +.flex-grow-0 { + flex-grow: 0 !important; } + +.flex-grow-1 { + flex-grow: 1 !important; } + +.flex-shrink-0 { + flex-shrink: 0 !important; } + +.flex-shrink-1 { + flex-shrink: 1 !important; } + +.flex-wrap { + flex-wrap: wrap !important; } + +.flex-nowrap { + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; } + +.justify-content-start { + justify-content: flex-start !important; } + +.justify-content-end { + justify-content: flex-end !important; } + +.justify-content-center { + justify-content: center !important; } + +.justify-content-between { + justify-content: space-between !important; } + +.justify-content-around { + justify-content: space-around !important; } + +.justify-content-evenly { + justify-content: space-evenly !important; } + +.align-items-start { + align-items: flex-start !important; } + +.align-items-end { + align-items: flex-end !important; } + +.align-items-center { + align-items: center !important; } + +.align-items-baseline { + align-items: baseline !important; } + +.align-items-stretch { + align-items: stretch !important; } + +.align-content-start { + align-content: flex-start !important; } + +.align-content-end { + align-content: flex-end !important; } + +.align-content-center { + align-content: center !important; } + +.align-content-between { + align-content: space-between !important; } + +.align-content-around { + align-content: space-around !important; } + +.align-content-stretch { + align-content: stretch !important; } + +.align-self-auto { + align-self: auto !important; } + +.align-self-start { + align-self: flex-start !important; } + +.align-self-end { + align-self: flex-end !important; } + +.align-self-center { + align-self: center !important; } + +.align-self-baseline { + align-self: baseline !important; } + +.align-self-stretch { + align-self: stretch !important; } + +.order-first { + order: -1 !important; } + +.order-0 { + order: 0 !important; } + +.order-1 { + order: 1 !important; } + +.order-2 { + order: 2 !important; } + +.order-3 { + order: 3 !important; } + +.order-4 { + order: 4 !important; } + +.order-5 { + order: 5 !important; } + +.order-last { + order: 6 !important; } + +.m-0 { + margin: 0 !important; } + +.m-1 { + margin: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.m-auto { + margin: auto !important; } + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; } + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + +.mt-0 { + margin-top: 0 !important; } + +.mt-1 { + margin-top: 0.25rem !important; } + +.mt-2 { + margin-top: 0.5rem !important; } + +.mt-3 { + margin-top: 1rem !important; } + +.mt-4 { + margin-top: 1.5rem !important; } + +.mt-5 { + margin-top: 3rem !important; } + +.mt-auto { + margin-top: auto !important; } + +.me-0 { + margin-right: 0 !important; } + +.me-1 { + margin-right: 0.25rem !important; } + +.me-2 { + margin-right: 0.5rem !important; } + +.me-3 { + margin-right: 1rem !important; } + +.me-4 { + margin-right: 1.5rem !important; } + +.me-5 { + margin-right: 3rem !important; } + +.me-auto { + margin-right: auto !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.mb-1 { + margin-bottom: 0.25rem !important; } + +.mb-2 { + margin-bottom: 0.5rem !important; } + +.mb-3 { + margin-bottom: 1rem !important; } + +.mb-4 { + margin-bottom: 1.5rem !important; } + +.mb-5 { + margin-bottom: 3rem !important; } + +.mb-auto { + margin-bottom: auto !important; } + +.ms-0 { + margin-left: 0 !important; } + +.ms-1 { + margin-left: 0.25rem !important; } + +.ms-2 { + margin-left: 0.5rem !important; } + +.ms-3 { + margin-left: 1rem !important; } + +.ms-4 { + margin-left: 1.5rem !important; } + +.ms-5 { + margin-left: 3rem !important; } + +.ms-auto { + margin-left: auto !important; } + +.p-0 { + padding: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pt-1 { + padding-top: 0.25rem !important; } + +.pt-2 { + padding-top: 0.5rem !important; } + +.pt-3 { + padding-top: 1rem !important; } + +.pt-4 { + padding-top: 1.5rem !important; } + +.pt-5 { + padding-top: 3rem !important; } + +.pe-0 { + padding-right: 0 !important; } + +.pe-1 { + padding-right: 0.25rem !important; } + +.pe-2 { + padding-right: 0.5rem !important; } + +.pe-3 { + padding-right: 1rem !important; } + +.pe-4 { + padding-right: 1.5rem !important; } + +.pe-5 { + padding-right: 3rem !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.pb-1 { + padding-bottom: 0.25rem !important; } + +.pb-2 { + padding-bottom: 0.5rem !important; } + +.pb-3 { + padding-bottom: 1rem !important; } + +.pb-4 { + padding-bottom: 1.5rem !important; } + +.pb-5 { + padding-bottom: 3rem !important; } + +.ps-0 { + padding-left: 0 !important; } + +.ps-1 { + padding-left: 0.25rem !important; } + +.ps-2 { + padding-left: 0.5rem !important; } + +.ps-3 { + padding-left: 1rem !important; } + +.ps-4 { + padding-left: 1.5rem !important; } + +.ps-5 { + padding-left: 3rem !important; } + +.gap-0 { + gap: 0 !important; } + +.gap-1 { + gap: 0.25rem !important; } + +.gap-2 { + gap: 0.5rem !important; } + +.gap-3 { + gap: 1rem !important; } + +.gap-4 { + gap: 1.5rem !important; } + +.gap-5 { + gap: 3rem !important; } + +.row-gap-0 { + row-gap: 0 !important; } + +.row-gap-1 { + row-gap: 0.25rem !important; } + +.row-gap-2 { + row-gap: 0.5rem !important; } + +.row-gap-3 { + row-gap: 1rem !important; } + +.row-gap-4 { + row-gap: 1.5rem !important; } + +.row-gap-5 { + row-gap: 3rem !important; } + +.column-gap-0 { + column-gap: 0 !important; } + +.column-gap-1 { + column-gap: 0.25rem !important; } + +.column-gap-2 { + column-gap: 0.5rem !important; } + +.column-gap-3 { + column-gap: 1rem !important; } + +.column-gap-4 { + column-gap: 1.5rem !important; } + +.column-gap-5 { + column-gap: 3rem !important; } + +.font-monospace { + font-family: var(--bs-font-monospace) !important; } + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; } + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; } + +.fs-3 { + font-size: calc(1.275rem + 0.3vw) !important; } + +.fs-4 { + font-size: calc(1.26rem + 0.12vw) !important; } + +.fs-5 { + font-size: 1.15rem !important; } + +.fs-6 { + font-size: 1rem !important; } + +.fst-italic { + font-style: italic !important; } + +.fst-normal { + font-style: normal !important; } + +.fw-lighter { + font-weight: lighter !important; } + +.fw-light { + font-weight: 300 !important; } + +.fw-normal { + font-weight: 400 !important; } + +.fw-medium { + font-weight: 500 !important; } + +.fw-semibold { + font-weight: 600 !important; } + +.fw-bold { + font-weight: 700 !important; } + +.fw-bolder { + font-weight: bolder !important; } + +.lh-1 { + line-height: 1 !important; } + +.lh-sm { + line-height: 1.25 !important; } + +.lh-base { + line-height: 1.5 !important; } + +.lh-lg { + line-height: 2 !important; } + +.text-start { + text-align: left !important; } + +.text-end { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +.text-decoration-none { + text-decoration: none !important; } + +.text-decoration-underline { + text-decoration: underline !important; } + +.text-decoration-line-through { + text-decoration: line-through !important; } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.text-wrap { + white-space: normal !important; } + +.text-nowrap { + white-space: nowrap !important; } + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; } + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; } + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; } + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; } + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; } + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; } + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; } + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; } + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; } + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; } + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; } + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; } + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; } + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; } + +.text-body-secondary, .td-page-meta__lastmod { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; } + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; } + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; } + +.text-opacity-25 { + --bs-text-opacity: 0.25; } + +.text-opacity-50 { + --bs-text-opacity: 0.5; } + +.text-opacity-75 { + --bs-text-opacity: 0.75; } + +.text-opacity-100 { + --bs-text-opacity: 1; } + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; } + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; } + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; } + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; } + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; } + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; } + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; } + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; } + +.link-opacity-10 { + --bs-link-opacity: 0.1; } + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; } + +.link-opacity-25 { + --bs-link-opacity: 0.25; } + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; } + +.link-opacity-50 { + --bs-link-opacity: 0.5; } + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; } + +.link-opacity-75 { + --bs-link-opacity: 0.75; } + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; } + +.link-opacity-100 { + --bs-link-opacity: 1; } + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; } + +.link-offset-1 { + text-underline-offset: 0.125em !important; } + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; } + +.link-offset-2 { + text-underline-offset: 0.25em !important; } + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; } + +.link-offset-3 { + text-underline-offset: 0.375em !important; } + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; } + +.link-underline-primary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; } + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; } + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; } + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; } + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; } + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; } + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; } + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; } + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; } + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; } + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; } + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; } + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; } + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; } + +.bg-opacity-100 { + --bs-bg-opacity: 1; } + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; } + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; } + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; } + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; } + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; } + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; } + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; } + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; } + +.bg-gradient { + background-image: var(--bs-gradient) !important; } + +.user-select-all { + user-select: all !important; } + +.user-select-auto { + user-select: auto !important; } + +.user-select-none { + user-select: none !important; } + +.pe-none { + pointer-events: none !important; } + +.pe-auto { + pointer-events: auto !important; } + +.rounded { + border-radius: var(--bs-border-radius) !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; } + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; } + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; } + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; } + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; } + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; } + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; } + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; } + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; } + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; } + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; } + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; } + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; } + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; } + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +.z-n1 { + z-index: -1 !important; } + +.z-0 { + z-index: 0 !important; } + +.z-1 { + z-index: 1 !important; } + +.z-2 { + z-index: 2 !important; } + +.z-3 { + z-index: 3 !important; } + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; } + .float-sm-end { + float: right !important; } + .float-sm-none { + float: none !important; } + .object-fit-sm-contain { + object-fit: contain !important; } + .object-fit-sm-cover { + object-fit: cover !important; } + .object-fit-sm-fill { + object-fit: fill !important; } + .object-fit-sm-scale { + object-fit: scale-down !important; } + .object-fit-sm-none { + object-fit: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-grid { + display: grid !important; } + .d-sm-inline-grid { + display: inline-grid !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: flex !important; } + .d-sm-inline-flex { + display: inline-flex !important; } + .d-sm-none { + display: none !important; } + .flex-sm-fill { + flex: 1 1 auto !important; } + .flex-sm-row { + flex-direction: row !important; } + .flex-sm-column { + flex-direction: column !important; } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; } + .flex-sm-grow-0 { + flex-grow: 0 !important; } + .flex-sm-grow-1 { + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; } + .flex-sm-wrap { + flex-wrap: wrap !important; } + .flex-sm-nowrap { + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-sm-start { + justify-content: flex-start !important; } + .justify-content-sm-end { + justify-content: flex-end !important; } + .justify-content-sm-center { + justify-content: center !important; } + .justify-content-sm-between { + justify-content: space-between !important; } + .justify-content-sm-around { + justify-content: space-around !important; } + .justify-content-sm-evenly { + justify-content: space-evenly !important; } + .align-items-sm-start { + align-items: flex-start !important; } + .align-items-sm-end { + align-items: flex-end !important; } + .align-items-sm-center { + align-items: center !important; } + .align-items-sm-baseline { + align-items: baseline !important; } + .align-items-sm-stretch { + align-items: stretch !important; } + .align-content-sm-start { + align-content: flex-start !important; } + .align-content-sm-end { + align-content: flex-end !important; } + .align-content-sm-center { + align-content: center !important; } + .align-content-sm-between { + align-content: space-between !important; } + .align-content-sm-around { + align-content: space-around !important; } + .align-content-sm-stretch { + align-content: stretch !important; } + .align-self-sm-auto { + align-self: auto !important; } + .align-self-sm-start { + align-self: flex-start !important; } + .align-self-sm-end { + align-self: flex-end !important; } + .align-self-sm-center { + align-self: center !important; } + .align-self-sm-baseline { + align-self: baseline !important; } + .align-self-sm-stretch { + align-self: stretch !important; } + .order-sm-first { + order: -1 !important; } + .order-sm-0 { + order: 0 !important; } + .order-sm-1 { + order: 1 !important; } + .order-sm-2 { + order: 2 !important; } + .order-sm-3 { + order: 3 !important; } + .order-sm-4 { + order: 4 !important; } + .order-sm-5 { + order: 5 !important; } + .order-sm-last { + order: 6 !important; } + .m-sm-0 { + margin: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-sm-0 { + margin-top: 0 !important; } + .mt-sm-1 { + margin-top: 0.25rem !important; } + .mt-sm-2 { + margin-top: 0.5rem !important; } + .mt-sm-3 { + margin-top: 1rem !important; } + .mt-sm-4 { + margin-top: 1.5rem !important; } + .mt-sm-5 { + margin-top: 3rem !important; } + .mt-sm-auto { + margin-top: auto !important; } + .me-sm-0 { + margin-right: 0 !important; } + .me-sm-1 { + margin-right: 0.25rem !important; } + .me-sm-2 { + margin-right: 0.5rem !important; } + .me-sm-3 { + margin-right: 1rem !important; } + .me-sm-4 { + margin-right: 1.5rem !important; } + .me-sm-5 { + margin-right: 3rem !important; } + .me-sm-auto { + margin-right: auto !important; } + .mb-sm-0 { + margin-bottom: 0 !important; } + .mb-sm-1 { + margin-bottom: 0.25rem !important; } + .mb-sm-2 { + margin-bottom: 0.5rem !important; } + .mb-sm-3 { + margin-bottom: 1rem !important; } + .mb-sm-4 { + margin-bottom: 1.5rem !important; } + .mb-sm-5 { + margin-bottom: 3rem !important; } + .mb-sm-auto { + margin-bottom: auto !important; } + .ms-sm-0 { + margin-left: 0 !important; } + .ms-sm-1 { + margin-left: 0.25rem !important; } + .ms-sm-2 { + margin-left: 0.5rem !important; } + .ms-sm-3 { + margin-left: 1rem !important; } + .ms-sm-4 { + margin-left: 1.5rem !important; } + .ms-sm-5 { + margin-left: 3rem !important; } + .ms-sm-auto { + margin-left: auto !important; } + .p-sm-0 { + padding: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-sm-0 { + padding-top: 0 !important; } + .pt-sm-1 { + padding-top: 0.25rem !important; } + .pt-sm-2 { + padding-top: 0.5rem !important; } + .pt-sm-3 { + padding-top: 1rem !important; } + .pt-sm-4 { + padding-top: 1.5rem !important; } + .pt-sm-5 { + padding-top: 3rem !important; } + .pe-sm-0 { + padding-right: 0 !important; } + .pe-sm-1 { + padding-right: 0.25rem !important; } + .pe-sm-2 { + padding-right: 0.5rem !important; } + .pe-sm-3 { + padding-right: 1rem !important; } + .pe-sm-4 { + padding-right: 1.5rem !important; } + .pe-sm-5 { + padding-right: 3rem !important; } + .pb-sm-0 { + padding-bottom: 0 !important; } + .pb-sm-1 { + padding-bottom: 0.25rem !important; } + .pb-sm-2 { + padding-bottom: 0.5rem !important; } + .pb-sm-3 { + padding-bottom: 1rem !important; } + .pb-sm-4 { + padding-bottom: 1.5rem !important; } + .pb-sm-5 { + padding-bottom: 3rem !important; } + .ps-sm-0 { + padding-left: 0 !important; } + .ps-sm-1 { + padding-left: 0.25rem !important; } + .ps-sm-2 { + padding-left: 0.5rem !important; } + .ps-sm-3 { + padding-left: 1rem !important; } + .ps-sm-4 { + padding-left: 1.5rem !important; } + .ps-sm-5 { + padding-left: 3rem !important; } + .gap-sm-0 { + gap: 0 !important; } + .gap-sm-1 { + gap: 0.25rem !important; } + .gap-sm-2 { + gap: 0.5rem !important; } + .gap-sm-3 { + gap: 1rem !important; } + .gap-sm-4 { + gap: 1.5rem !important; } + .gap-sm-5 { + gap: 3rem !important; } + .row-gap-sm-0 { + row-gap: 0 !important; } + .row-gap-sm-1 { + row-gap: 0.25rem !important; } + .row-gap-sm-2 { + row-gap: 0.5rem !important; } + .row-gap-sm-3 { + row-gap: 1rem !important; } + .row-gap-sm-4 { + row-gap: 1.5rem !important; } + .row-gap-sm-5 { + row-gap: 3rem !important; } + .column-gap-sm-0 { + column-gap: 0 !important; } + .column-gap-sm-1 { + column-gap: 0.25rem !important; } + .column-gap-sm-2 { + column-gap: 0.5rem !important; } + .column-gap-sm-3 { + column-gap: 1rem !important; } + .column-gap-sm-4 { + column-gap: 1.5rem !important; } + .column-gap-sm-5 { + column-gap: 3rem !important; } + .text-sm-start { + text-align: left !important; } + .text-sm-end { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .float-md-start { + float: left !important; } + .float-md-end { + float: right !important; } + .float-md-none { + float: none !important; } + .object-fit-md-contain { + object-fit: contain !important; } + .object-fit-md-cover { + object-fit: cover !important; } + .object-fit-md-fill { + object-fit: fill !important; } + .object-fit-md-scale { + object-fit: scale-down !important; } + .object-fit-md-none { + object-fit: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-grid { + display: grid !important; } + .d-md-inline-grid { + display: inline-grid !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: flex !important; } + .d-md-inline-flex { + display: inline-flex !important; } + .d-md-none { + display: none !important; } + .flex-md-fill { + flex: 1 1 auto !important; } + .flex-md-row { + flex-direction: row !important; } + .flex-md-column { + flex-direction: column !important; } + .flex-md-row-reverse { + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + flex-direction: column-reverse !important; } + .flex-md-grow-0 { + flex-grow: 0 !important; } + .flex-md-grow-1 { + flex-grow: 1 !important; } + .flex-md-shrink-0 { + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + flex-shrink: 1 !important; } + .flex-md-wrap { + flex-wrap: wrap !important; } + .flex-md-nowrap { + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-md-start { + justify-content: flex-start !important; } + .justify-content-md-end { + justify-content: flex-end !important; } + .justify-content-md-center { + justify-content: center !important; } + .justify-content-md-between { + justify-content: space-between !important; } + .justify-content-md-around { + justify-content: space-around !important; } + .justify-content-md-evenly { + justify-content: space-evenly !important; } + .align-items-md-start { + align-items: flex-start !important; } + .align-items-md-end { + align-items: flex-end !important; } + .align-items-md-center { + align-items: center !important; } + .align-items-md-baseline { + align-items: baseline !important; } + .align-items-md-stretch { + align-items: stretch !important; } + .align-content-md-start { + align-content: flex-start !important; } + .align-content-md-end { + align-content: flex-end !important; } + .align-content-md-center { + align-content: center !important; } + .align-content-md-between { + align-content: space-between !important; } + .align-content-md-around { + align-content: space-around !important; } + .align-content-md-stretch { + align-content: stretch !important; } + .align-self-md-auto { + align-self: auto !important; } + .align-self-md-start { + align-self: flex-start !important; } + .align-self-md-end { + align-self: flex-end !important; } + .align-self-md-center { + align-self: center !important; } + .align-self-md-baseline { + align-self: baseline !important; } + .align-self-md-stretch { + align-self: stretch !important; } + .order-md-first { + order: -1 !important; } + .order-md-0 { + order: 0 !important; } + .order-md-1 { + order: 1 !important; } + .order-md-2 { + order: 2 !important; } + .order-md-3 { + order: 3 !important; } + .order-md-4 { + order: 4 !important; } + .order-md-5 { + order: 5 !important; } + .order-md-last { + order: 6 !important; } + .m-md-0 { + margin: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .m-md-auto { + margin: auto !important; } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-md-0 { + margin-top: 0 !important; } + .mt-md-1 { + margin-top: 0.25rem !important; } + .mt-md-2 { + margin-top: 0.5rem !important; } + .mt-md-3 { + margin-top: 1rem !important; } + .mt-md-4 { + margin-top: 1.5rem !important; } + .mt-md-5 { + margin-top: 3rem !important; } + .mt-md-auto { + margin-top: auto !important; } + .me-md-0 { + margin-right: 0 !important; } + .me-md-1 { + margin-right: 0.25rem !important; } + .me-md-2 { + margin-right: 0.5rem !important; } + .me-md-3 { + margin-right: 1rem !important; } + .me-md-4 { + margin-right: 1.5rem !important; } + .me-md-5 { + margin-right: 3rem !important; } + .me-md-auto { + margin-right: auto !important; } + .mb-md-0 { + margin-bottom: 0 !important; } + .mb-md-1 { + margin-bottom: 0.25rem !important; } + .mb-md-2 { + margin-bottom: 0.5rem !important; } + .mb-md-3 { + margin-bottom: 1rem !important; } + .mb-md-4 { + margin-bottom: 1.5rem !important; } + .mb-md-5 { + margin-bottom: 3rem !important; } + .mb-md-auto { + margin-bottom: auto !important; } + .ms-md-0 { + margin-left: 0 !important; } + .ms-md-1 { + margin-left: 0.25rem !important; } + .ms-md-2 { + margin-left: 0.5rem !important; } + .ms-md-3 { + margin-left: 1rem !important; } + .ms-md-4 { + margin-left: 1.5rem !important; } + .ms-md-5 { + margin-left: 3rem !important; } + .ms-md-auto { + margin-left: auto !important; } + .p-md-0 { + padding: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-md-0 { + padding-top: 0 !important; } + .pt-md-1 { + padding-top: 0.25rem !important; } + .pt-md-2 { + padding-top: 0.5rem !important; } + .pt-md-3 { + padding-top: 1rem !important; } + .pt-md-4 { + padding-top: 1.5rem !important; } + .pt-md-5 { + padding-top: 3rem !important; } + .pe-md-0 { + padding-right: 0 !important; } + .pe-md-1 { + padding-right: 0.25rem !important; } + .pe-md-2 { + padding-right: 0.5rem !important; } + .pe-md-3 { + padding-right: 1rem !important; } + .pe-md-4 { + padding-right: 1.5rem !important; } + .pe-md-5 { + padding-right: 3rem !important; } + .pb-md-0 { + padding-bottom: 0 !important; } + .pb-md-1 { + padding-bottom: 0.25rem !important; } + .pb-md-2 { + padding-bottom: 0.5rem !important; } + .pb-md-3 { + padding-bottom: 1rem !important; } + .pb-md-4 { + padding-bottom: 1.5rem !important; } + .pb-md-5 { + padding-bottom: 3rem !important; } + .ps-md-0 { + padding-left: 0 !important; } + .ps-md-1 { + padding-left: 0.25rem !important; } + .ps-md-2 { + padding-left: 0.5rem !important; } + .ps-md-3 { + padding-left: 1rem !important; } + .ps-md-4 { + padding-left: 1.5rem !important; } + .ps-md-5 { + padding-left: 3rem !important; } + .gap-md-0 { + gap: 0 !important; } + .gap-md-1 { + gap: 0.25rem !important; } + .gap-md-2 { + gap: 0.5rem !important; } + .gap-md-3 { + gap: 1rem !important; } + .gap-md-4 { + gap: 1.5rem !important; } + .gap-md-5 { + gap: 3rem !important; } + .row-gap-md-0 { + row-gap: 0 !important; } + .row-gap-md-1 { + row-gap: 0.25rem !important; } + .row-gap-md-2 { + row-gap: 0.5rem !important; } + .row-gap-md-3 { + row-gap: 1rem !important; } + .row-gap-md-4 { + row-gap: 1.5rem !important; } + .row-gap-md-5 { + row-gap: 3rem !important; } + .column-gap-md-0 { + column-gap: 0 !important; } + .column-gap-md-1 { + column-gap: 0.25rem !important; } + .column-gap-md-2 { + column-gap: 0.5rem !important; } + .column-gap-md-3 { + column-gap: 1rem !important; } + .column-gap-md-4 { + column-gap: 1.5rem !important; } + .column-gap-md-5 { + column-gap: 3rem !important; } + .text-md-start { + text-align: left !important; } + .text-md-end { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .float-lg-start { + float: left !important; } + .float-lg-end { + float: right !important; } + .float-lg-none { + float: none !important; } + .object-fit-lg-contain { + object-fit: contain !important; } + .object-fit-lg-cover { + object-fit: cover !important; } + .object-fit-lg-fill { + object-fit: fill !important; } + .object-fit-lg-scale { + object-fit: scale-down !important; } + .object-fit-lg-none { + object-fit: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block, .td-blog .td-rss-button { + display: block !important; } + .d-lg-grid { + display: grid !important; } + .d-lg-inline-grid { + display: inline-grid !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: flex !important; } + .d-lg-inline-flex { + display: inline-flex !important; } + .d-lg-none { + display: none !important; } + .flex-lg-fill { + flex: 1 1 auto !important; } + .flex-lg-row { + flex-direction: row !important; } + .flex-lg-column { + flex-direction: column !important; } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; } + .flex-lg-grow-0 { + flex-grow: 0 !important; } + .flex-lg-grow-1 { + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; } + .flex-lg-wrap { + flex-wrap: wrap !important; } + .flex-lg-nowrap { + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-lg-start { + justify-content: flex-start !important; } + .justify-content-lg-end { + justify-content: flex-end !important; } + .justify-content-lg-center { + justify-content: center !important; } + .justify-content-lg-between { + justify-content: space-between !important; } + .justify-content-lg-around { + justify-content: space-around !important; } + .justify-content-lg-evenly { + justify-content: space-evenly !important; } + .align-items-lg-start { + align-items: flex-start !important; } + .align-items-lg-end { + align-items: flex-end !important; } + .align-items-lg-center { + align-items: center !important; } + .align-items-lg-baseline { + align-items: baseline !important; } + .align-items-lg-stretch { + align-items: stretch !important; } + .align-content-lg-start { + align-content: flex-start !important; } + .align-content-lg-end { + align-content: flex-end !important; } + .align-content-lg-center { + align-content: center !important; } + .align-content-lg-between { + align-content: space-between !important; } + .align-content-lg-around { + align-content: space-around !important; } + .align-content-lg-stretch { + align-content: stretch !important; } + .align-self-lg-auto { + align-self: auto !important; } + .align-self-lg-start { + align-self: flex-start !important; } + .align-self-lg-end { + align-self: flex-end !important; } + .align-self-lg-center { + align-self: center !important; } + .align-self-lg-baseline { + align-self: baseline !important; } + .align-self-lg-stretch { + align-self: stretch !important; } + .order-lg-first { + order: -1 !important; } + .order-lg-0 { + order: 0 !important; } + .order-lg-1 { + order: 1 !important; } + .order-lg-2 { + order: 2 !important; } + .order-lg-3 { + order: 3 !important; } + .order-lg-4 { + order: 4 !important; } + .order-lg-5 { + order: 5 !important; } + .order-lg-last { + order: 6 !important; } + .m-lg-0 { + margin: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-lg-0 { + margin-top: 0 !important; } + .mt-lg-1 { + margin-top: 0.25rem !important; } + .mt-lg-2 { + margin-top: 0.5rem !important; } + .mt-lg-3 { + margin-top: 1rem !important; } + .mt-lg-4 { + margin-top: 1.5rem !important; } + .mt-lg-5 { + margin-top: 3rem !important; } + .mt-lg-auto { + margin-top: auto !important; } + .me-lg-0 { + margin-right: 0 !important; } + .me-lg-1 { + margin-right: 0.25rem !important; } + .me-lg-2 { + margin-right: 0.5rem !important; } + .me-lg-3 { + margin-right: 1rem !important; } + .me-lg-4 { + margin-right: 1.5rem !important; } + .me-lg-5 { + margin-right: 3rem !important; } + .me-lg-auto { + margin-right: auto !important; } + .mb-lg-0 { + margin-bottom: 0 !important; } + .mb-lg-1 { + margin-bottom: 0.25rem !important; } + .mb-lg-2 { + margin-bottom: 0.5rem !important; } + .mb-lg-3 { + margin-bottom: 1rem !important; } + .mb-lg-4 { + margin-bottom: 1.5rem !important; } + .mb-lg-5 { + margin-bottom: 3rem !important; } + .mb-lg-auto { + margin-bottom: auto !important; } + .ms-lg-0 { + margin-left: 0 !important; } + .ms-lg-1 { + margin-left: 0.25rem !important; } + .ms-lg-2 { + margin-left: 0.5rem !important; } + .ms-lg-3 { + margin-left: 1rem !important; } + .ms-lg-4 { + margin-left: 1.5rem !important; } + .ms-lg-5 { + margin-left: 3rem !important; } + .ms-lg-auto { + margin-left: auto !important; } + .p-lg-0 { + padding: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-lg-0 { + padding-top: 0 !important; } + .pt-lg-1 { + padding-top: 0.25rem !important; } + .pt-lg-2 { + padding-top: 0.5rem !important; } + .pt-lg-3 { + padding-top: 1rem !important; } + .pt-lg-4 { + padding-top: 1.5rem !important; } + .pt-lg-5 { + padding-top: 3rem !important; } + .pe-lg-0 { + padding-right: 0 !important; } + .pe-lg-1 { + padding-right: 0.25rem !important; } + .pe-lg-2 { + padding-right: 0.5rem !important; } + .pe-lg-3 { + padding-right: 1rem !important; } + .pe-lg-4 { + padding-right: 1.5rem !important; } + .pe-lg-5 { + padding-right: 3rem !important; } + .pb-lg-0 { + padding-bottom: 0 !important; } + .pb-lg-1 { + padding-bottom: 0.25rem !important; } + .pb-lg-2 { + padding-bottom: 0.5rem !important; } + .pb-lg-3 { + padding-bottom: 1rem !important; } + .pb-lg-4 { + padding-bottom: 1.5rem !important; } + .pb-lg-5 { + padding-bottom: 3rem !important; } + .ps-lg-0 { + padding-left: 0 !important; } + .ps-lg-1 { + padding-left: 0.25rem !important; } + .ps-lg-2 { + padding-left: 0.5rem !important; } + .ps-lg-3 { + padding-left: 1rem !important; } + .ps-lg-4 { + padding-left: 1.5rem !important; } + .ps-lg-5 { + padding-left: 3rem !important; } + .gap-lg-0 { + gap: 0 !important; } + .gap-lg-1 { + gap: 0.25rem !important; } + .gap-lg-2 { + gap: 0.5rem !important; } + .gap-lg-3 { + gap: 1rem !important; } + .gap-lg-4 { + gap: 1.5rem !important; } + .gap-lg-5 { + gap: 3rem !important; } + .row-gap-lg-0 { + row-gap: 0 !important; } + .row-gap-lg-1 { + row-gap: 0.25rem !important; } + .row-gap-lg-2 { + row-gap: 0.5rem !important; } + .row-gap-lg-3 { + row-gap: 1rem !important; } + .row-gap-lg-4 { + row-gap: 1.5rem !important; } + .row-gap-lg-5 { + row-gap: 3rem !important; } + .column-gap-lg-0 { + column-gap: 0 !important; } + .column-gap-lg-1 { + column-gap: 0.25rem !important; } + .column-gap-lg-2 { + column-gap: 0.5rem !important; } + .column-gap-lg-3 { + column-gap: 1rem !important; } + .column-gap-lg-4 { + column-gap: 1.5rem !important; } + .column-gap-lg-5 { + column-gap: 3rem !important; } + .text-lg-start { + text-align: left !important; } + .text-lg-end { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; } + .float-xl-end { + float: right !important; } + .float-xl-none { + float: none !important; } + .object-fit-xl-contain { + object-fit: contain !important; } + .object-fit-xl-cover { + object-fit: cover !important; } + .object-fit-xl-fill { + object-fit: fill !important; } + .object-fit-xl-scale { + object-fit: scale-down !important; } + .object-fit-xl-none { + object-fit: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-grid { + display: grid !important; } + .d-xl-inline-grid { + display: inline-grid !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: flex !important; } + .d-xl-inline-flex { + display: inline-flex !important; } + .d-xl-none { + display: none !important; } + .flex-xl-fill { + flex: 1 1 auto !important; } + .flex-xl-row { + flex-direction: row !important; } + .flex-xl-column { + flex-direction: column !important; } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xl-grow-0 { + flex-grow: 0 !important; } + .flex-xl-grow-1 { + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xl-wrap { + flex-wrap: wrap !important; } + .flex-xl-nowrap { + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xl-start { + justify-content: flex-start !important; } + .justify-content-xl-end { + justify-content: flex-end !important; } + .justify-content-xl-center { + justify-content: center !important; } + .justify-content-xl-between { + justify-content: space-between !important; } + .justify-content-xl-around { + justify-content: space-around !important; } + .justify-content-xl-evenly { + justify-content: space-evenly !important; } + .align-items-xl-start { + align-items: flex-start !important; } + .align-items-xl-end { + align-items: flex-end !important; } + .align-items-xl-center { + align-items: center !important; } + .align-items-xl-baseline { + align-items: baseline !important; } + .align-items-xl-stretch { + align-items: stretch !important; } + .align-content-xl-start { + align-content: flex-start !important; } + .align-content-xl-end { + align-content: flex-end !important; } + .align-content-xl-center { + align-content: center !important; } + .align-content-xl-between { + align-content: space-between !important; } + .align-content-xl-around { + align-content: space-around !important; } + .align-content-xl-stretch { + align-content: stretch !important; } + .align-self-xl-auto { + align-self: auto !important; } + .align-self-xl-start { + align-self: flex-start !important; } + .align-self-xl-end { + align-self: flex-end !important; } + .align-self-xl-center { + align-self: center !important; } + .align-self-xl-baseline { + align-self: baseline !important; } + .align-self-xl-stretch { + align-self: stretch !important; } + .order-xl-first { + order: -1 !important; } + .order-xl-0 { + order: 0 !important; } + .order-xl-1 { + order: 1 !important; } + .order-xl-2 { + order: 2 !important; } + .order-xl-3 { + order: 3 !important; } + .order-xl-4 { + order: 4 !important; } + .order-xl-5 { + order: 5 !important; } + .order-xl-last { + order: 6 !important; } + .m-xl-0 { + margin: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xl-0 { + margin-top: 0 !important; } + .mt-xl-1 { + margin-top: 0.25rem !important; } + .mt-xl-2 { + margin-top: 0.5rem !important; } + .mt-xl-3 { + margin-top: 1rem !important; } + .mt-xl-4 { + margin-top: 1.5rem !important; } + .mt-xl-5 { + margin-top: 3rem !important; } + .mt-xl-auto { + margin-top: auto !important; } + .me-xl-0 { + margin-right: 0 !important; } + .me-xl-1 { + margin-right: 0.25rem !important; } + .me-xl-2 { + margin-right: 0.5rem !important; } + .me-xl-3 { + margin-right: 1rem !important; } + .me-xl-4 { + margin-right: 1.5rem !important; } + .me-xl-5 { + margin-right: 3rem !important; } + .me-xl-auto { + margin-right: auto !important; } + .mb-xl-0 { + margin-bottom: 0 !important; } + .mb-xl-1 { + margin-bottom: 0.25rem !important; } + .mb-xl-2 { + margin-bottom: 0.5rem !important; } + .mb-xl-3 { + margin-bottom: 1rem !important; } + .mb-xl-4 { + margin-bottom: 1.5rem !important; } + .mb-xl-5 { + margin-bottom: 3rem !important; } + .mb-xl-auto { + margin-bottom: auto !important; } + .ms-xl-0 { + margin-left: 0 !important; } + .ms-xl-1 { + margin-left: 0.25rem !important; } + .ms-xl-2 { + margin-left: 0.5rem !important; } + .ms-xl-3 { + margin-left: 1rem !important; } + .ms-xl-4 { + margin-left: 1.5rem !important; } + .ms-xl-5 { + margin-left: 3rem !important; } + .ms-xl-auto { + margin-left: auto !important; } + .p-xl-0 { + padding: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xl-0 { + padding-top: 0 !important; } + .pt-xl-1 { + padding-top: 0.25rem !important; } + .pt-xl-2 { + padding-top: 0.5rem !important; } + .pt-xl-3 { + padding-top: 1rem !important; } + .pt-xl-4 { + padding-top: 1.5rem !important; } + .pt-xl-5 { + padding-top: 3rem !important; } + .pe-xl-0 { + padding-right: 0 !important; } + .pe-xl-1 { + padding-right: 0.25rem !important; } + .pe-xl-2 { + padding-right: 0.5rem !important; } + .pe-xl-3 { + padding-right: 1rem !important; } + .pe-xl-4 { + padding-right: 1.5rem !important; } + .pe-xl-5 { + padding-right: 3rem !important; } + .pb-xl-0 { + padding-bottom: 0 !important; } + .pb-xl-1 { + padding-bottom: 0.25rem !important; } + .pb-xl-2 { + padding-bottom: 0.5rem !important; } + .pb-xl-3 { + padding-bottom: 1rem !important; } + .pb-xl-4 { + padding-bottom: 1.5rem !important; } + .pb-xl-5 { + padding-bottom: 3rem !important; } + .ps-xl-0 { + padding-left: 0 !important; } + .ps-xl-1 { + padding-left: 0.25rem !important; } + .ps-xl-2 { + padding-left: 0.5rem !important; } + .ps-xl-3 { + padding-left: 1rem !important; } + .ps-xl-4 { + padding-left: 1.5rem !important; } + .ps-xl-5 { + padding-left: 3rem !important; } + .gap-xl-0 { + gap: 0 !important; } + .gap-xl-1 { + gap: 0.25rem !important; } + .gap-xl-2 { + gap: 0.5rem !important; } + .gap-xl-3 { + gap: 1rem !important; } + .gap-xl-4 { + gap: 1.5rem !important; } + .gap-xl-5 { + gap: 3rem !important; } + .row-gap-xl-0 { + row-gap: 0 !important; } + .row-gap-xl-1 { + row-gap: 0.25rem !important; } + .row-gap-xl-2 { + row-gap: 0.5rem !important; } + .row-gap-xl-3 { + row-gap: 1rem !important; } + .row-gap-xl-4 { + row-gap: 1.5rem !important; } + .row-gap-xl-5 { + row-gap: 3rem !important; } + .column-gap-xl-0 { + column-gap: 0 !important; } + .column-gap-xl-1 { + column-gap: 0.25rem !important; } + .column-gap-xl-2 { + column-gap: 0.5rem !important; } + .column-gap-xl-3 { + column-gap: 1rem !important; } + .column-gap-xl-4 { + column-gap: 1.5rem !important; } + .column-gap-xl-5 { + column-gap: 3rem !important; } + .text-xl-start { + text-align: left !important; } + .text-xl-end { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; } + .float-xxl-end { + float: right !important; } + .float-xxl-none { + float: none !important; } + .object-fit-xxl-contain { + object-fit: contain !important; } + .object-fit-xxl-cover { + object-fit: cover !important; } + .object-fit-xxl-fill { + object-fit: fill !important; } + .object-fit-xxl-scale { + object-fit: scale-down !important; } + .object-fit-xxl-none { + object-fit: none !important; } + .d-xxl-inline { + display: inline !important; } + .d-xxl-inline-block { + display: inline-block !important; } + .d-xxl-block { + display: block !important; } + .d-xxl-grid { + display: grid !important; } + .d-xxl-inline-grid { + display: inline-grid !important; } + .d-xxl-table { + display: table !important; } + .d-xxl-table-row { + display: table-row !important; } + .d-xxl-table-cell { + display: table-cell !important; } + .d-xxl-flex { + display: flex !important; } + .d-xxl-inline-flex { + display: inline-flex !important; } + .d-xxl-none { + display: none !important; } + .flex-xxl-fill { + flex: 1 1 auto !important; } + .flex-xxl-row { + flex-direction: row !important; } + .flex-xxl-column { + flex-direction: column !important; } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xxl-grow-0 { + flex-grow: 0 !important; } + .flex-xxl-grow-1 { + flex-grow: 1 !important; } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xxl-wrap { + flex-wrap: wrap !important; } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xxl-start { + justify-content: flex-start !important; } + .justify-content-xxl-end { + justify-content: flex-end !important; } + .justify-content-xxl-center { + justify-content: center !important; } + .justify-content-xxl-between { + justify-content: space-between !important; } + .justify-content-xxl-around { + justify-content: space-around !important; } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; } + .align-items-xxl-start { + align-items: flex-start !important; } + .align-items-xxl-end { + align-items: flex-end !important; } + .align-items-xxl-center { + align-items: center !important; } + .align-items-xxl-baseline { + align-items: baseline !important; } + .align-items-xxl-stretch { + align-items: stretch !important; } + .align-content-xxl-start { + align-content: flex-start !important; } + .align-content-xxl-end { + align-content: flex-end !important; } + .align-content-xxl-center { + align-content: center !important; } + .align-content-xxl-between { + align-content: space-between !important; } + .align-content-xxl-around { + align-content: space-around !important; } + .align-content-xxl-stretch { + align-content: stretch !important; } + .align-self-xxl-auto { + align-self: auto !important; } + .align-self-xxl-start { + align-self: flex-start !important; } + .align-self-xxl-end { + align-self: flex-end !important; } + .align-self-xxl-center { + align-self: center !important; } + .align-self-xxl-baseline { + align-self: baseline !important; } + .align-self-xxl-stretch { + align-self: stretch !important; } + .order-xxl-first { + order: -1 !important; } + .order-xxl-0 { + order: 0 !important; } + .order-xxl-1 { + order: 1 !important; } + .order-xxl-2 { + order: 2 !important; } + .order-xxl-3 { + order: 3 !important; } + .order-xxl-4 { + order: 4 !important; } + .order-xxl-5 { + order: 5 !important; } + .order-xxl-last { + order: 6 !important; } + .m-xxl-0 { + margin: 0 !important; } + .m-xxl-1 { + margin: 0.25rem !important; } + .m-xxl-2 { + margin: 0.5rem !important; } + .m-xxl-3 { + margin: 1rem !important; } + .m-xxl-4 { + margin: 1.5rem !important; } + .m-xxl-5 { + margin: 3rem !important; } + .m-xxl-auto { + margin: auto !important; } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xxl-0 { + margin-top: 0 !important; } + .mt-xxl-1 { + margin-top: 0.25rem !important; } + .mt-xxl-2 { + margin-top: 0.5rem !important; } + .mt-xxl-3 { + margin-top: 1rem !important; } + .mt-xxl-4 { + margin-top: 1.5rem !important; } + .mt-xxl-5 { + margin-top: 3rem !important; } + .mt-xxl-auto { + margin-top: auto !important; } + .me-xxl-0 { + margin-right: 0 !important; } + .me-xxl-1 { + margin-right: 0.25rem !important; } + .me-xxl-2 { + margin-right: 0.5rem !important; } + .me-xxl-3 { + margin-right: 1rem !important; } + .me-xxl-4 { + margin-right: 1.5rem !important; } + .me-xxl-5 { + margin-right: 3rem !important; } + .me-xxl-auto { + margin-right: auto !important; } + .mb-xxl-0 { + margin-bottom: 0 !important; } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; } + .mb-xxl-3 { + margin-bottom: 1rem !important; } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; } + .mb-xxl-5 { + margin-bottom: 3rem !important; } + .mb-xxl-auto { + margin-bottom: auto !important; } + .ms-xxl-0 { + margin-left: 0 !important; } + .ms-xxl-1 { + margin-left: 0.25rem !important; } + .ms-xxl-2 { + margin-left: 0.5rem !important; } + .ms-xxl-3 { + margin-left: 1rem !important; } + .ms-xxl-4 { + margin-left: 1.5rem !important; } + .ms-xxl-5 { + margin-left: 3rem !important; } + .ms-xxl-auto { + margin-left: auto !important; } + .p-xxl-0 { + padding: 0 !important; } + .p-xxl-1 { + padding: 0.25rem !important; } + .p-xxl-2 { + padding: 0.5rem !important; } + .p-xxl-3 { + padding: 1rem !important; } + .p-xxl-4 { + padding: 1.5rem !important; } + .p-xxl-5 { + padding: 3rem !important; } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xxl-0 { + padding-top: 0 !important; } + .pt-xxl-1 { + padding-top: 0.25rem !important; } + .pt-xxl-2 { + padding-top: 0.5rem !important; } + .pt-xxl-3 { + padding-top: 1rem !important; } + .pt-xxl-4 { + padding-top: 1.5rem !important; } + .pt-xxl-5 { + padding-top: 3rem !important; } + .pe-xxl-0 { + padding-right: 0 !important; } + .pe-xxl-1 { + padding-right: 0.25rem !important; } + .pe-xxl-2 { + padding-right: 0.5rem !important; } + .pe-xxl-3 { + padding-right: 1rem !important; } + .pe-xxl-4 { + padding-right: 1.5rem !important; } + .pe-xxl-5 { + padding-right: 3rem !important; } + .pb-xxl-0 { + padding-bottom: 0 !important; } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; } + .pb-xxl-3 { + padding-bottom: 1rem !important; } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; } + .pb-xxl-5 { + padding-bottom: 3rem !important; } + .ps-xxl-0 { + padding-left: 0 !important; } + .ps-xxl-1 { + padding-left: 0.25rem !important; } + .ps-xxl-2 { + padding-left: 0.5rem !important; } + .ps-xxl-3 { + padding-left: 1rem !important; } + .ps-xxl-4 { + padding-left: 1.5rem !important; } + .ps-xxl-5 { + padding-left: 3rem !important; } + .gap-xxl-0 { + gap: 0 !important; } + .gap-xxl-1 { + gap: 0.25rem !important; } + .gap-xxl-2 { + gap: 0.5rem !important; } + .gap-xxl-3 { + gap: 1rem !important; } + .gap-xxl-4 { + gap: 1.5rem !important; } + .gap-xxl-5 { + gap: 3rem !important; } + .row-gap-xxl-0 { + row-gap: 0 !important; } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; } + .row-gap-xxl-3 { + row-gap: 1rem !important; } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; } + .row-gap-xxl-5 { + row-gap: 3rem !important; } + .column-gap-xxl-0 { + column-gap: 0 !important; } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; } + .column-gap-xxl-3 { + column-gap: 1rem !important; } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; } + .column-gap-xxl-5 { + column-gap: 3rem !important; } + .text-xxl-start { + text-align: left !important; } + .text-xxl-end { + text-align: right !important; } + .text-xxl-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; } + .fs-2 { + font-size: 2rem !important; } + .fs-3 { + font-size: 1.5rem !important; } + .fs-4 { + font-size: 1.35rem !important; } } + +@media print { + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-grid { + display: grid !important; } + .d-print-inline-grid { + display: inline-grid !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: flex !important; } + .d-print-inline-flex { + display: inline-flex !important; } + .d-print-none { + display: none !important; } } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa, .td-search__icon:before { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, .td-search__icon:before, +.fa-classic, +.fa-sharp, +.fas, +.td-offline-search-results__close-button:after, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, .td-offline-search-results__close-button:after, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07142857em; + vertical-align: 0.05357143em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04166667em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + animation-name: fa-beat; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + animation-name: fa-bounce; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + animation-name: fa-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + animation-name: fa-beat-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + animation-name: fa-flip; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + animation-name: fa-shake; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + animation-name: fa-spin; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 2s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + animation-name: fa-spin; + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + animation-delay: -1ms; + animation-duration: 1ms; + animation-iteration-count: 1; + transition-delay: 0s; + transition-duration: 0s; } } + +@keyframes fa-beat { + 0%, 90% { + transform: scale(1); } + 45% { + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-bounce { + 0% { + transform: scale(1, 1) translateY(0); } + 10% { + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + transform: scale(1, 1) translateY(0); } + 100% { + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + transform: scale(1); } + 50% { + opacity: 1; + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-flip { + 50% { + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-shake { + 0% { + transform: rotate(-15deg); } + 4% { + transform: rotate(15deg); } + 8%, 24% { + transform: rotate(-18deg); } + 12%, 28% { + transform: rotate(18deg); } + 16% { + transform: rotate(-22deg); } + 20% { + transform: rotate(22deg); } + 32% { + transform: rotate(-12deg); } + 36% { + transform: rotate(12deg); } + 40%, 100% { + transform: rotate(0deg); } } + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(360deg); } } + +.fa-rotate-90 { + transform: rotate(90deg); } + +.fa-rotate-180 { + transform: rotate(180deg); } + +.fa-rotate-270 { + transform: rotate(270deg); } + +.fa-flip-horizontal { + transform: scale(-1, 1); } + +.fa-flip-vertical { + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + transform: scale(-1, -1); } + +.fa-rotate-by { + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, .td-offline-search-results__close-button:after, +.fa-solid { + font-weight: 900; } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +/* +Projects can override this file. For details, see: +https://www.docsy.dev/docs/adding-content/lookandfeel/#project-style-files +*/ +.td-border-top { + border: none; + border-top: 1px solid #eee; } + +.td-border-none { + border: none; } + +.td-block-padding, .td-default main section { + padding-top: 4rem; + padding-bottom: 4rem; } + @media (min-width: 768px) { + .td-block-padding, .td-default main section { + padding-top: 5rem; + padding-bottom: 5rem; } } +.td-overlay { + position: relative; } + .td-overlay::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .td-overlay--dark::after { + background-color: rgba(64, 63, 76, 0.3); } + .td-overlay--light::after { + background-color: rgba(211, 243, 238, 0.3); } + .td-overlay__inner { + position: relative; + z-index: 1; } + +@media (min-width: 992px) { + .td-max-width-on-larger-screens, .td-card.card, .td-card-group.card-group, .td-content > .tab-content .tab-pane, .td-content .footnotes, + .td-content > .alert, + .td-content > .highlight, + .td-content > .lead, + .td-content > .td-table, + .td-box .td-content > table, + .td-content > table, + .td-content > blockquote, + .td-content > dl dd, + .td-content > h1, + .td-content > .h1, + .td-content > h2, + .td-content > .h2, + .td-content > ol, + .td-content > p, + .td-content > pre, + .td-content > ul { + max-width: 80%; } } + +.-bg-blue { + color: #fff; + background-color: #0d6efd; } + +.-bg-blue p:not(.p-initial) > a { + color: #81b3fe; } + .-bg-blue p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-blue { + color: #0d6efd; } + +.-bg-indigo { + color: #fff; + background-color: #6610f2; } + +.-bg-indigo p:not(.p-initial) > a { + color: #85b6fe; } + .-bg-indigo p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-indigo { + color: #6610f2; } + +.-bg-purple { + color: #fff; + background-color: #6f42c1; } + +.-bg-purple p:not(.p-initial) > a { + color: #84b5fe; } + .-bg-purple p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-purple { + color: #6f42c1; } + +.-bg-pink { + color: #fff; + background-color: #d63384; } + +.-bg-pink p:not(.p-initial) > a { + color: #81b4fe; } + .-bg-pink p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-pink { + color: #d63384; } + +.-bg-red { + color: #fff; + background-color: #dc3545; } + +.-bg-red p:not(.p-initial) > a { + color: #7db1fe; } + .-bg-red p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-red { + color: #dc3545; } + +.-bg-orange { + color: #000; + background-color: #fd7e14; } + +.-bg-orange p:not(.p-initial) > a { + color: #073b87; } + .-bg-orange p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-orange { + color: #fd7e14; } + +.-bg-yellow { + color: #000; + background-color: #ffc107; } + +.-bg-yellow p:not(.p-initial) > a { + color: #073982; } + .-bg-yellow p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-yellow { + color: #ffc107; } + +.-bg-green { + color: #fff; + background-color: #198754; } + +.-bg-green p:not(.p-initial) > a { + color: #b3d2fe; } + .-bg-green p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-green { + color: #198754; } + +.-bg-teal { + color: #000; + background-color: #20c997; } + +.-bg-teal p:not(.p-initial) > a { + color: #063274; } + .-bg-teal p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-teal { + color: #20c997; } + +.-bg-cyan { + color: #000; + background-color: #0dcaf0; } + +.-bg-cyan p:not(.p-initial) > a { + color: #06377e; } + .-bg-cyan p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-cyan { + color: #0dcaf0; } + +.-bg-black { + color: #fff; + background-color: #000; } + +.-bg-black p:not(.p-initial) > a { + color: white; } + .-bg-black p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-black { + color: #000; } + +.-bg-white { + color: #000; + background-color: #fff; } + +.-bg-white p:not(.p-initial) > a { + color: #0d6efd; } + .-bg-white p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-white { + color: #fff; } + +.-bg-gray { + color: #fff; + background-color: #6c757d; } + +.-bg-gray p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-gray p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-gray { + color: #6c757d; } + +.-bg-gray-dark { + color: #fff; + background-color: #343a40; } + +.-bg-gray-dark p:not(.p-initial) > a { + color: #c8deff; } + .-bg-gray-dark p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-gray-dark { + color: #343a40; } + +.-bg-primary { + color: #fff; + background-color: #30638e; } + +.-bg-primary p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-primary p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-primary { + color: #30638e; } + +.-bg-secondary { + color: #000; + background-color: #ffa630; } + +.-bg-secondary p:not(.p-initial) > a { + color: #084196; } + .-bg-secondary p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-secondary { + color: #ffa630; } + +.-bg-success { + color: #000; + background-color: #3772ff; } + +.-bg-success p:not(.p-initial) > a { + color: #08439a; } + .-bg-success p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-success { + color: #3772ff; } + +.-bg-info { + color: #000; + background-color: #c0e0de; } + +.-bg-info p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-info p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-info { + color: #c0e0de; } + +.-bg-warning { + color: #000; + background-color: #ed6a5a; } + +.-bg-warning p:not(.p-initial) > a { + color: #0847a2; } + .-bg-warning p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-warning { + color: #ed6a5a; } + +.-bg-danger { + color: #000; + background-color: #ed6a5a; } + +.-bg-danger p:not(.p-initial) > a { + color: #0847a2; } + .-bg-danger p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-danger { + color: #ed6a5a; } + +.-bg-light { + color: #000; + background-color: #d3f3ee; } + +.-bg-light p:not(.p-initial) > a { + color: #0c62e1; } + .-bg-light p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-light { + color: #d3f3ee; } + +.-bg-dark { + color: #fff; + background-color: #403f4c; } + +.-bg-dark p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-dark p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-dark { + color: #403f4c; } + +.-bg-100 { + color: #000; + background-color: #f8f9fa; } + +.-bg-100 p:not(.p-initial) > a { + color: #0d6bf7; } + .-bg-100 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-100 { + color: #f8f9fa; } + +.-bg-200 { + color: #000; + background-color: #e9ecef; } + +.-bg-200 p:not(.p-initial) > a { + color: #0c66ea; } + .-bg-200 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-200 { + color: #e9ecef; } + +.-bg-300 { + color: #000; + background-color: #dee2e6; } + +.-bg-300 p:not(.p-initial) > a { + color: #0c61e0; } + .-bg-300 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-300 { + color: #dee2e6; } + +.-bg-400 { + color: #000; + background-color: #ced4da; } + +.-bg-400 p:not(.p-initial) > a { + color: #0b5bd2; } + .-bg-400 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-400 { + color: #ced4da; } + +.-bg-500 { + color: #000; + background-color: #adb5bd; } + +.-bg-500 p:not(.p-initial) > a { + color: #094eb4; } + .-bg-500 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-500 { + color: #adb5bd; } + +.-bg-600 { + color: #fff; + background-color: #6c757d; } + +.-bg-600 p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-600 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-600 { + color: #6c757d; } + +.-bg-700 { + color: #fff; + background-color: #495057; } + +.-bg-700 p:not(.p-initial) > a { + color: #b3d2fe; } + .-bg-700 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-700 { + color: #495057; } + +.-bg-800 { + color: #fff; + background-color: #343a40; } + +.-bg-800 p:not(.p-initial) > a { + color: #c8deff; } + .-bg-800 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-800 { + color: #343a40; } + +.-bg-900 { + color: #fff; + background-color: #212529; } + +.-bg-900 p:not(.p-initial) > a { + color: #dceaff; } + .-bg-900 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-900 { + color: #212529; } + +.-bg-0 { + color: #fff; + background-color: #403f4c; } + +.-bg-0 p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-0 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-0 { + color: #403f4c; } + +.-bg-1 { + color: #fff; + background-color: #30638e; } + +.-bg-1 p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-1 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-1 { + color: #30638e; } + +.-bg-2 { + color: #000; + background-color: #ffa630; } + +.-bg-2 p:not(.p-initial) > a { + color: #084196; } + .-bg-2 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-2 { + color: #ffa630; } + +.-bg-3 { + color: #000; + background-color: #c0e0de; } + +.-bg-3 p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-3 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-3 { + color: #c0e0de; } + +.-bg-4 { + color: #000; + background-color: #fff; } + +.-bg-4 p:not(.p-initial) > a { + color: #0d6efd; } + .-bg-4 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-4 { + color: #fff; } + +.-bg-5 { + color: #fff; + background-color: #6c757d; } + +.-bg-5 p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-5 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-5 { + color: #6c757d; } + +.-bg-6 { + color: #000; + background-color: #3772ff; } + +.-bg-6 p:not(.p-initial) > a { + color: #08439a; } + .-bg-6 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-6 { + color: #3772ff; } + +.-bg-7 { + color: #000; + background-color: #ed6a5a; } + +.-bg-7 p:not(.p-initial) > a { + color: #0847a2; } + .-bg-7 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-7 { + color: #ed6a5a; } + +.-bg-8 { + color: #fff; + background-color: #403f4c; } + +.-bg-8 p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-8 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-8 { + color: #403f4c; } + +.-bg-9 { + color: #000; + background-color: #ed6a5a; } + +.-bg-9 p:not(.p-initial) > a { + color: #0847a2; } + .-bg-9 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-9 { + color: #ed6a5a; } + +.-bg-10 { + color: #fff; + background-color: #30638e; } + +.-bg-10 p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-10 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-10 { + color: #30638e; } + +.-bg-11 { + color: #000; + background-color: #ffa630; } + +.-bg-11 p:not(.p-initial) > a { + color: #084196; } + .-bg-11 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-11 { + color: #ffa630; } + +.-bg-12 { + color: #000; + background-color: #c0e0de; } + +.-bg-12 p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-12 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-12 { + color: #c0e0de; } + +.td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + display: block; } + +.td-box--height-min { + min-height: 300px; } + +.td-box--height-med { + min-height: 400px; } + +.td-box--height-max { + min-height: 500px; } + +.td-box--height-full { + min-height: 100vh; } + +@media (min-width: 768px) { + .td-box--height-min { + min-height: 450px; } + .td-box--height-med { + min-height: 500px; } + .td-box--height-max { + min-height: 650px; } } + +.td-box .row { + padding-left: 5vw; + padding-right: 5vw; } + +.td-box.linkbox { + padding: 5vh 5vw; } + +.td-box--0 { + color: #fff; + background-color: #403f4c; } + .td-box--0 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--0 p > a, .td-box--0 span > a { + color: #bdd7fe; } + .td-box--0 p > a:hover, .td-box--0 span > a:hover { + color: #d1e3fe; } + +.td-box--1 { + color: #fff; + background-color: #30638e; } + .td-box--1 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--1 p > a, .td-box--1 span > a { + color: #a5c9fe; } + .td-box--1 p > a:hover, .td-box--1 span > a:hover { + color: #c0d9fe; } + +.td-box--2 { + color: #000; + background-color: #ffa630; } + .td-box--2 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--2 p > a, .td-box--2 span > a { + color: #084196; } + .td-box--2 p > a:hover, .td-box--2 span > a:hover { + color: #062e69; } + +.td-box--3 { + color: #000; + background-color: #c0e0de; } + .td-box--3 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--3 p > a, .td-box--3 span > a { + color: #0b5ace; } + .td-box--3 p > a:hover, .td-box--3 span > a:hover { + color: #083f90; } + +.td-box--4 { + color: #000; + background-color: #fff; } + .td-box--4 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--4 p > a, .td-box--4 span > a { + color: #0d6efd; } + .td-box--4 p > a:hover, .td-box--4 span > a:hover { + color: #094db1; } + +.td-box--5 { + color: #fff; + background-color: #6c757d; } + .td-box--5 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--5 p > a, .td-box--5 span > a { + color: #90bdfe; } + .td-box--5 p > a:hover, .td-box--5 span > a:hover { + color: #b1d1fe; } + +.td-box--6 { + color: #000; + background-color: #3772ff; } + .td-box--6 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #3772ff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--6 p > a, .td-box--6 span > a { + color: #08439a; } + .td-box--6 p > a:hover, .td-box--6 span > a:hover { + color: #062f6c; } + +.td-box--7 { + color: #000; + background-color: #ed6a5a; } + .td-box--7 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--7 p > a, .td-box--7 span > a { + color: #0847a2; } + .td-box--7 p > a:hover, .td-box--7 span > a:hover { + color: #063271; } + +.td-box--8 { + color: #fff; + background-color: #403f4c; } + .td-box--8 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--8 p > a, .td-box--8 span > a { + color: #bdd7fe; } + .td-box--8 p > a:hover, .td-box--8 span > a:hover { + color: #d1e3fe; } + +.td-box--9 { + color: #000; + background-color: #ed6a5a; } + .td-box--9 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--9 p > a, .td-box--9 span > a { + color: #0847a2; } + .td-box--9 p > a:hover, .td-box--9 span > a:hover { + color: #063271; } + +.td-box--10 { + color: #fff; + background-color: #30638e; } + .td-box--10 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--10 p > a, .td-box--10 span > a { + color: #a5c9fe; } + .td-box--10 p > a:hover, .td-box--10 span > a:hover { + color: #c0d9fe; } + +.td-box--11 { + color: #000; + background-color: #ffa630; } + .td-box--11 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--11 p > a, .td-box--11 span > a { + color: #084196; } + .td-box--11 p > a:hover, .td-box--11 span > a:hover { + color: #062e69; } + +.td-box--12 { + color: #000; + background-color: #c0e0de; } + .td-box--12 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--12 p > a, .td-box--12 span > a { + color: #0b5ace; } + .td-box--12 p > a:hover, .td-box--12 span > a:hover { + color: #083f90; } + +.td-box--blue { + color: #fff; + background-color: #0d6efd; } + .td-box--blue .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #0d6efd transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--blue p > a, .td-box--blue span > a { + color: #81b3fe; } + .td-box--blue p > a:hover, .td-box--blue span > a:hover { + color: #a7cafe; } + +.td-box--indigo { + color: #fff; + background-color: #6610f2; } + .td-box--indigo .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6610f2 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--indigo p > a, .td-box--indigo span > a { + color: #85b6fe; } + .td-box--indigo p > a:hover, .td-box--indigo span > a:hover { + color: #aaccfe; } + +.td-box--purple { + color: #fff; + background-color: #6f42c1; } + .td-box--purple .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6f42c1 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--purple p > a, .td-box--purple span > a { + color: #84b5fe; } + .td-box--purple p > a:hover, .td-box--purple span > a:hover { + color: #a9cbfe; } + +.td-box--pink { + color: #fff; + background-color: #d63384; } + .td-box--pink .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #d63384 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--pink p > a, .td-box--pink span > a { + color: #81b4fe; } + .td-box--pink p > a:hover, .td-box--pink span > a:hover { + color: #a7cbfe; } + +.td-box--red { + color: #fff; + background-color: #dc3545; } + .td-box--red .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #dc3545 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--red p > a, .td-box--red span > a { + color: #7db1fe; } + .td-box--red p > a:hover, .td-box--red span > a:hover { + color: #a4c8fe; } + +.td-box--orange { + color: #000; + background-color: #fd7e14; } + .td-box--orange .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fd7e14 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--orange p > a, .td-box--orange span > a { + color: #073b87; } + .td-box--orange p > a:hover, .td-box--orange span > a:hover { + color: #05295f; } + +.td-box--yellow { + color: #000; + background-color: #ffc107; } + .td-box--yellow .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffc107 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--yellow p > a, .td-box--yellow span > a { + color: #073982; } + .td-box--yellow p > a:hover, .td-box--yellow span > a:hover { + color: #05285b; } + +.td-box--green { + color: #fff; + background-color: #198754; } + .td-box--green .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #198754 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--green p > a, .td-box--green span > a { + color: #b3d2fe; } + .td-box--green p > a:hover, .td-box--green span > a:hover { + color: #cae0fe; } + +.td-box--teal { + color: #000; + background-color: #20c997; } + .td-box--teal .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #20c997 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--teal p > a, .td-box--teal span > a { + color: #063274; } + .td-box--teal p > a:hover, .td-box--teal span > a:hover { + color: #042351; } + +.td-box--cyan { + color: #000; + background-color: #0dcaf0; } + .td-box--cyan .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #0dcaf0 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--cyan p > a, .td-box--cyan span > a { + color: #06377e; } + .td-box--cyan p > a:hover, .td-box--cyan span > a:hover { + color: #042758; } + +.td-box--black { + color: #fff; + background-color: #000; } + .td-box--black .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #000 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--black p > a, .td-box--black span > a { + color: white; } + .td-box--black p > a:hover, .td-box--black span > a:hover { + color: white; } + +.td-box--white { + color: #000; + background-color: #fff; } + .td-box--white .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--white p > a, .td-box--white span > a { + color: #0d6efd; } + .td-box--white p > a:hover, .td-box--white span > a:hover { + color: #094db1; } + +.td-box--gray { + color: #fff; + background-color: #6c757d; } + .td-box--gray .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--gray p > a, .td-box--gray span > a { + color: #90bdfe; } + .td-box--gray p > a:hover, .td-box--gray span > a:hover { + color: #b1d1fe; } + +.td-box--gray-dark { + color: #fff; + background-color: #343a40; } + .td-box--gray-dark .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #343a40 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--gray-dark p > a, .td-box--gray-dark span > a { + color: #c8deff; } + .td-box--gray-dark p > a:hover, .td-box--gray-dark span > a:hover { + color: #d9e8ff; } + +.td-box--primary { + color: #fff; + background-color: #30638e; } + .td-box--primary .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--primary p > a, .td-box--primary span > a { + color: #a5c9fe; } + .td-box--primary p > a:hover, .td-box--primary span > a:hover { + color: #c0d9fe; } + +.td-box--secondary { + color: #000; + background-color: #ffa630; } + .td-box--secondary .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--secondary p > a, .td-box--secondary span > a { + color: #084196; } + .td-box--secondary p > a:hover, .td-box--secondary span > a:hover { + color: #062e69; } + +.td-box--success { + color: #000; + background-color: #3772ff; } + .td-box--success .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #3772ff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--success p > a, .td-box--success span > a { + color: #08439a; } + .td-box--success p > a:hover, .td-box--success span > a:hover { + color: #062f6c; } + +.td-box--info { + color: #000; + background-color: #c0e0de; } + .td-box--info .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--info p > a, .td-box--info span > a { + color: #0b5ace; } + .td-box--info p > a:hover, .td-box--info span > a:hover { + color: #083f90; } + +.td-box--warning { + color: #000; + background-color: #ed6a5a; } + .td-box--warning .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--warning p > a, .td-box--warning span > a { + color: #0847a2; } + .td-box--warning p > a:hover, .td-box--warning span > a:hover { + color: #063271; } + +.td-box--danger { + color: #000; + background-color: #ed6a5a; } + .td-box--danger .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--danger p > a, .td-box--danger span > a { + color: #0847a2; } + .td-box--danger p > a:hover, .td-box--danger span > a:hover { + color: #063271; } + +.td-box--light { + color: #000; + background-color: #d3f3ee; } + .td-box--light .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #d3f3ee transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--light p > a, .td-box--light span > a { + color: #0c62e1; } + .td-box--light p > a:hover, .td-box--light span > a:hover { + color: #08459e; } + +.td-box--dark, .td-footer { + color: #fff; + background-color: #403f4c; } + .td-box--dark .td-arrow-down::before, .td-footer .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--dark p > a, .td-footer p > a, .td-box--dark span > a, .td-footer span > a { + color: #bdd7fe; } + .td-box--dark p > a:hover, .td-footer p > a:hover, .td-box--dark span > a:hover, .td-footer span > a:hover { + color: #d1e3fe; } + +.td-box--100 { + color: #000; + background-color: #f8f9fa; } + .td-box--100 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #f8f9fa transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--100 p > a, .td-box--100 span > a { + color: #0d6bf7; } + .td-box--100 p > a:hover, .td-box--100 span > a:hover { + color: #094bad; } + +.td-box--200 { + color: #000; + background-color: #e9ecef; } + .td-box--200 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #e9ecef transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--200 p > a, .td-box--200 span > a { + color: #0c66ea; } + .td-box--200 p > a:hover, .td-box--200 span > a:hover { + color: #0847a4; } + +.td-box--300 { + color: #000; + background-color: #dee2e6; } + .td-box--300 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #dee2e6 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--300 p > a, .td-box--300 span > a { + color: #0c61e0; } + .td-box--300 p > a:hover, .td-box--300 span > a:hover { + color: #08449d; } + +.td-box--400 { + color: #000; + background-color: #ced4da; } + .td-box--400 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ced4da transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--400 p > a, .td-box--400 span > a { + color: #0b5bd2; } + .td-box--400 p > a:hover, .td-box--400 span > a:hover { + color: #084093; } + +.td-box--500 { + color: #000; + background-color: #adb5bd; } + .td-box--500 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #adb5bd transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--500 p > a, .td-box--500 span > a { + color: #094eb4; } + .td-box--500 p > a:hover, .td-box--500 span > a:hover { + color: #06377e; } + +.td-box--600 { + color: #fff; + background-color: #6c757d; } + .td-box--600 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--600 p > a, .td-box--600 span > a { + color: #90bdfe; } + .td-box--600 p > a:hover, .td-box--600 span > a:hover { + color: #b1d1fe; } + +.td-box--700 { + color: #fff; + background-color: #495057; } + .td-box--700 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #495057 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--700 p > a, .td-box--700 span > a { + color: #b3d2fe; } + .td-box--700 p > a:hover, .td-box--700 span > a:hover { + color: #cae0fe; } + +.td-box--800 { + color: #fff; + background-color: #343a40; } + .td-box--800 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #343a40 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--800 p > a, .td-box--800 span > a { + color: #c8deff; } + .td-box--800 p > a:hover, .td-box--800 span > a:hover { + color: #d9e8ff; } + +.td-box--900 { + color: #fff; + background-color: #212529; } + .td-box--900 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #212529 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--900 p > a, .td-box--900 span > a { + color: #dceaff; } + .td-box--900 p > a:hover, .td-box--900 span > a:hover { + color: #e7f0ff; } + +[data-bs-theme="dark"] .td-box--white { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); } + [data-bs-theme="dark"] .td-box--white p > a, [data-bs-theme="dark"] .td-box--white span > a { + color: var(--bs-link-color); } + [data-bs-theme="dark"] .td-box--white p > a:focus, [data-bs-theme="dark"] .td-box--white p > a:hover, [data-bs-theme="dark"] .td-box--white span > a:focus, [data-bs-theme="dark"] .td-box--white span > a:hover { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); } + [data-bs-theme="dark"] .td-box--white .td-arrow-down::before { + border-color: var(--bs-body-bg) transparent transparent transparent; } + +.td-blog .td-rss-button { + border-radius: 2rem; + float: right; + display: none; } + +.td-blog-posts-list { + margin-top: 1.5rem !important; } + .td-blog-posts-list__item { + display: flex; + align-items: flex-start; + margin-bottom: 1.5rem !important; } + .td-blog-posts-list__item__body { + flex: 1; } + +[data-bs-theme="dark"] { + --td-pre-bg: #1b1f22; } + +.td-content .highlight { + margin: 2rem 0; + padding: 0; + position: relative; } + .td-content .highlight .click-to-copy { + display: block; + text-align: right; } + .td-content .highlight pre { + margin: 0; + padding: 1rem; + border-radius: inherit; } + .td-content .highlight pre button.td-click-to-copy { + position: absolute; + color: var(--bs-tertiary-color); + border-width: 0; + background-color: transparent; + background-image: none; + --bs-btn-box-shadow: 0; + padding: var(--bs-btn-padding-y) calc(var(--bs-btn-padding-x) / 2); + right: 4px; + top: 2px; } + .td-content .highlight pre button.td-click-to-copy:hover { + color: var(--bs-secondary-color); + background-color: var(--bs-dark-bg-subtle); } + .td-content .highlight pre button.td-click-to-copy:active { + color: var(--bs-secondary-color); + background-color: var(--bs-dark-bg-subtle); + transform: translateY(2px); } + +.td-content p code, +.td-content li > code, +.td-content table code { + color: inherit; + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + word-break: normal; + background-color: var(--td-pre-bg); + border-radius: 0.375rem; } + .td-content p code br, + .td-content li > code br, + .td-content table code br { + display: none; } + +.td-content pre { + word-wrap: normal; + background-color: var(--td-pre-bg); + border: solid var(--bs-border-color); + border-width: 1px; + padding: 1rem; } + .td-content pre > code { + background-color: inherit !important; + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + border: 0; } + +.td-content pre.mermaid { + background-color: inherit; + font-size: 0; + padding: 0; } + +@media (min-width: 768px) { + .td-navbar-cover { + background: transparent !important; } + .td-navbar-cover .nav-link { + text-shadow: 1px 1px 2px #403f4c; } } + +.td-navbar-cover.navbar-bg-onscroll .nav-link { + text-shadow: none; } + +.navbar-bg-onscroll { + background: #30638e !important; + opacity: inherit; } + +.td-navbar { + background: #30638e; + min-height: 4rem; + margin: 0; + z-index: 32; } + .td-navbar .navbar-brand { + text-transform: none; } + .td-navbar .navbar-brand__name { + font-weight: 700; } + .td-navbar .navbar-brand svg { + display: inline-block; + margin: 0 10px; + height: 30px; } + .td-navbar .navbar-nav { + padding-top: 0.5rem; + white-space: nowrap; } + .td-navbar .nav-link { + text-transform: none; + font-weight: 700; } + .td-navbar .dropdown { + min-width: 50px; } + @media (min-width: 768px) { + .td-navbar { + position: fixed; + top: 0; + width: 100%; } + .td-navbar .nav-item { + padding-inline-end: 0.5rem; } + .td-navbar .navbar-nav { + padding-top: 0 !important; } } + @media (max-width: 991.98px) { + .td-navbar .td-navbar-nav-scroll { + max-width: 100%; + height: 2.5rem; + overflow: hidden; + font-size: 0.9rem; } + .td-navbar .navbar-brand { + margin-right: 0; } + .td-navbar .navbar-nav { + padding-bottom: 2rem; + overflow-x: auto; } } + .td-navbar .td-light-dark-menu .bi { + width: 1em; + height: 1em; + vertical-align: -.125em; + fill: currentcolor; } + @media (max-width: 991.98px) { + .td-navbar .td-light-dark-menu.dropdown { + position: unset; } } +#main_navbar li i { + padding-right: 0.5em; } + #main_navbar li i:before { + display: inline-block; + text-align: center; + min-width: 1em; } + +#main_navbar .alert { + background-color: inherit; + padding: 0; + color: #ffa630; + border: 0; + font-weight: inherit; } + #main_navbar .alert:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + content: "\f0d9"; + padding-left: 0.5em; + padding-right: 0.5em; } + +nav.foldable-nav#td-section-nav { + position: relative; } + +nav.foldable-nav#td-section-nav label { + margin-bottom: 0; + width: 100%; } + +nav.foldable-nav .td-sidebar-nav__section, +nav.foldable-nav .with-child ul { + list-style: none; + padding: 0; + margin: 0; } + +nav.foldable-nav .ul-1 > li { + padding-left: 1.5em; } + +nav.foldable-nav ul.foldable { + display: none; } + +nav.foldable-nav input:checked ~ ul.foldable { + display: block; } + +nav.foldable-nav input[type="checkbox"] { + display: none; } + +nav.foldable-nav .with-child, +nav.foldable-nav .without-child { + position: relative; + padding-left: 1.5em; } + +nav.foldable-nav .ul-1 .with-child > label:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + content: "\f0da"; + position: absolute; + left: 0.1em; + padding-left: 0.4em; + padding-right: 0.4em; + font-size: 1em; + color: var(--bs-secondary-color); + transition: all 0.5s; } + nav.foldable-nav .ul-1 .with-child > label:before:hover { + transform: rotate(90deg); } + +nav.foldable-nav .ul-1 .with-child > input:checked ~ label:before { + color: var(--bs-secondary-color); + transform: rotate(90deg); + transition: transform 0.5s; } + +nav.foldable-nav .with-child ul { + margin-top: 0.1em; } + +@media (hover: hover) and (pointer: fine) { + nav.foldable-nav .ul-1 .with-child > label:hover:before { + color: var(--bs-link-color); + transition: color 0.3s; } + nav.foldable-nav .ul-1 .with-child > input:checked ~ label:hover:before { + color: var(--bs-link-color); + transition: color 0.3s; } } + +.td-sidebar-nav { + padding-right: 0.5rem; + margin-right: -15px; + margin-left: -15px; } + @media (min-width: 768px) { + @supports (position: sticky) { + .td-sidebar-nav { + max-height: calc(100vh - 8.5rem); + overflow-y: auto; } } } + @media (min-width: 992px) { + .td-sidebar-nav.td-sidebar-nav--search-disabled { + padding-top: 1rem; } + @supports (position: sticky) { + .td-sidebar-nav.td-sidebar-nav--search-disabled { + max-height: calc(calc(100vh - 8.5rem) + 4.5rem); } } } + @media (min-width: 768px) { + .td-sidebar-nav { + display: block !important; } } + .td-sidebar-nav__section { + padding-left: 0; } + .td-sidebar-nav__section li { + list-style: none; } + .td-sidebar-nav__section.ul-0, .td-sidebar-nav__section ul { + padding: 0; + margin: 0; } + @media (min-width: 768px) { + .td-sidebar-nav__section .ul-1 ul { + padding-left: 1.5em; } } + .td-sidebar-nav__section-title { + display: block; + font-weight: 500; } + .td-sidebar-nav__section-title .active { + font-weight: 700; } + .td-sidebar-nav__section-title a { + color: var(--bs-secondary-color); } + .td-sidebar-nav .td-sidebar-link { + display: block; + padding-bottom: 0.375rem; } + .td-sidebar-nav .td-sidebar-link__page { + color: var(--bs-body-color); + font-weight: 300; } + .td-sidebar-nav a:focus, .td-sidebar-nav a:hover { + color: var(--bs-link-color); } + .td-sidebar-nav a.active { + font-weight: 700; } + .td-sidebar-nav .dropdown a { + color: var(--bs-tertiary-color); } + .td-sidebar-nav .dropdown .nav-link { + padding: 0 0 1rem; } + .td-sidebar-nav > .td-sidebar-nav__section { + padding-left: 1.5rem; } + .td-sidebar-nav li i { + padding-right: 0.5em; } + .td-sidebar-nav li i:before { + display: inline-block; + text-align: center; + min-width: 1em; } + .td-sidebar-nav .td-sidebar-link.tree-root { + font-weight: 700; + border-bottom: 1px solid var(--bs-tertiary-color); + margin-bottom: 1rem; } + +.td-sidebar { + padding-bottom: 1rem; } + .td-sidebar a { + text-decoration: none; } + .td-sidebar a:focus, .td-sidebar a:hover { + text-decoration: initial; } + .td-sidebar .btn-link { + text-decoration: none; } + @media (min-width: 768px) { + .td-sidebar { + padding-top: 4rem; + background-color: var(--bs-body-tertiary-bg); + padding-right: 1rem; + border-right: 1px solid var(--bs-border-color); } } + .td-sidebar__toggle { + line-height: 1; + color: var(--bs-body-color); + margin: 1rem; } + .td-sidebar__search { + padding: 1rem 0; } + .td-sidebar__inner { + order: 0; } + @media (min-width: 768px) { + @supports (position: sticky) { + .td-sidebar__inner { + position: sticky; + top: 4rem; + z-index: 10; + height: calc(100vh - 5rem); } } } + @media (min-width: 1200px) { + .td-sidebar__inner { + flex: 0 1 320px; } } + .td-sidebar__inner .td-search-box { + width: 100%; } + .td-sidebar #content-desktop { + display: block; } + .td-sidebar #content-mobile { + display: none; } + @media (max-width: 991.98px) { + .td-sidebar #content-desktop { + display: none; } + .td-sidebar #content-mobile { + display: block; } } +.td-sidebar-toc { + border-left: 1px solid var(--bs-border-color); + order: 2; + padding-top: 0.75rem; + padding-bottom: 1.5rem; + vertical-align: top; } + .td-sidebar-toc a { + text-decoration: none; } + .td-sidebar-toc a:focus, .td-sidebar-toc a:hover { + text-decoration: initial; } + .td-sidebar-toc .btn-link { + text-decoration: none; } + @supports (position: sticky) { + .td-sidebar-toc { + position: sticky; + top: 4rem; + height: calc(100vh - 4rem); + overflow-y: auto; } } + .td-sidebar-toc .td-page-meta a { + display: block; + font-weight: 500; } + +.td-toc a { + display: block; + font-weight: 300; + padding-bottom: 0.25rem; } + +.td-toc li { + list-style: none; + display: block; } + +.td-toc li li { + margin-left: 0.5rem; } + +.td-toc #TableOfContents a { + color: var(--bs-secondary-color); } + .td-toc #TableOfContents a:focus, .td-toc #TableOfContents a:hover { + color: initial; } + +.td-toc ul { + padding-left: 0; } + +@media print { + .td-breadcrumbs { + display: none !important; } } + +.td-breadcrumbs .breadcrumb { + background: inherit; + padding-left: 0; + padding-top: 0; } + +.alert { + font-weight: 500; + color: inherit; + border-radius: 0; } + .alert-primary, .pageinfo-primary { + border-style: solid; + border-color: #30638e; + border-width: 0 0 0 4px; } + .alert-primary .alert-heading, .pageinfo-primary .alert-heading { + color: #30638e; } + .alert-secondary, .pageinfo-secondary { + border-style: solid; + border-color: #ffa630; + border-width: 0 0 0 4px; } + .alert-secondary .alert-heading, .pageinfo-secondary .alert-heading { + color: #ffa630; } + .alert-success, .pageinfo-success { + border-style: solid; + border-color: #3772ff; + border-width: 0 0 0 4px; } + .alert-success .alert-heading, .pageinfo-success .alert-heading { + color: #3772ff; } + .alert-info, .pageinfo-info { + border-style: solid; + border-color: #c0e0de; + border-width: 0 0 0 4px; } + .alert-info .alert-heading, .pageinfo-info .alert-heading { + color: #c0e0de; } + .alert-warning, .pageinfo-warning { + border-style: solid; + border-color: #ed6a5a; + border-width: 0 0 0 4px; } + .alert-warning .alert-heading, .pageinfo-warning .alert-heading { + color: #ed6a5a; } + .alert-danger, .pageinfo-danger { + border-style: solid; + border-color: #ed6a5a; + border-width: 0 0 0 4px; } + .alert-danger .alert-heading, .pageinfo-danger .alert-heading { + color: #ed6a5a; } + .alert-light, .pageinfo-light { + border-style: solid; + border-color: #d3f3ee; + border-width: 0 0 0 4px; } + .alert-light .alert-heading, .pageinfo-light .alert-heading { + color: #d3f3ee; } + .alert-dark, .pageinfo-dark { + border-style: solid; + border-color: #403f4c; + border-width: 0 0 0 4px; } + .alert-dark .alert-heading, .pageinfo-dark .alert-heading { + color: #403f4c; } + +.td-content { + order: 1; } + .td-content p, + .td-content li, + .td-content td { + font-weight: 400; } + .td-content > h1, .td-content > .h1 { + font-weight: 700; + margin-bottom: 1rem; } + .td-content > h2, .td-content > .h2 { + margin-bottom: 1rem; } + .td-content > h2:not(:first-child), .td-content > .h2:not(:first-child) { + margin-top: 3rem; } + .td-content > h2 + h3, .td-content > .h2 + h3, .td-content > h2 + .h3, .td-content > h2 + .td-footer__links-item, .td-content > .h2 + .h3, .td-content > .h2 + .td-footer__links-item { + margin-top: 1rem; } + .td-content > h3, .td-content > .h3, .td-content > .td-footer__links-item, + .td-content > h4, + .td-content > .h4, + .td-content > h5, + .td-content > .h5, + .td-content > h6, + .td-content > .h6 { + margin-bottom: 1rem; + margin-top: 2rem; } + .td-content blockquote { + padding: 0 0 0 1rem; + margin-bottom: 1rem; + color: var(--bs-secondary-color); + border-left: 6px solid var(--bs-primary); } + .td-content ul li, + .td-content ol li { + margin-bottom: 0.25rem; } + .td-content strong { + font-weight: 700; } + .td-content .alert:not(:first-child) { + margin-top: 2rem; + margin-bottom: 2rem; } + .td-content .lead { + margin-bottom: 1.5rem; } + +.td-title { + margin-top: 1rem; + margin-bottom: 0.5rem; } + @media (min-width: 576px) { + .td-title { + font-size: 3rem; } } +.td-heading-self-link { + font-size: 90%; + padding-left: 0.25em; + text-decoration: none; + visibility: hidden; } + .td-heading-self-link:before { + content: '#'; } + @media (hover: none) and (pointer: coarse), (max-width: 576px) { + .td-heading-self-link { + visibility: visible; } } +h1:hover > .td-heading-self-link, .h1:hover > .td-heading-self-link { + visibility: visible; } + +h2:hover > .td-heading-self-link, .h2:hover > .td-heading-self-link { + visibility: visible; } + +h3:hover > .td-heading-self-link, .h3:hover > .td-heading-self-link, .td-footer__links-item:hover > .td-heading-self-link { + visibility: visible; } + +h4:hover > .td-heading-self-link, .h4:hover > .td-heading-self-link { + visibility: visible; } + +h5:hover > .td-heading-self-link, .h5:hover > .td-heading-self-link { + visibility: visible; } + +h6:hover > .td-heading-self-link, .h6:hover > .td-heading-self-link { + visibility: visible; } + +.td-search { + background: transparent; + position: relative; + width: 100%; } + .td-search__icon { + display: flex; + align-items: center; + height: 100%; + position: absolute; + left: 0.75em; + pointer-events: none; } + .td-search__icon:before { + content: "\f002"; } + .td-navbar .td-search__icon { + color: inherit; } + .td-search__input { + width: 100%; + text-indent: 1.25em; } + .td-search__input:not(:focus) { + background: transparent; } + .td-search__input.form-control:focus { + border-color: #f5f7f9; + box-shadow: 0 0 0 2px #83a1bb; + color: var(--bs-body-color); } + .td-navbar .td-search__input { + border: none; + color: inherit; } + .td-navbar .td-search__input::-webkit-input-placeholder { + color: inherit; } + .td-navbar .td-search__input:-moz-placeholder { + color: inherit; } + .td-navbar .td-search__input::-moz-placeholder { + color: inherit; } + .td-navbar .td-search__input:-ms-input-placeholder { + color: inherit; } + .td-search:focus-within .td-search__icon { + display: none; } + .td-search:focus-within .td-search-input { + text-indent: 0px; } + .td-search:not(:focus-within) { + color: var(--bs-secondary-color); } + +.td-sidebar .td-search--algolia { + display: block; + padding: 0 0.5rem; } + .td-sidebar .td-search--algolia > button { + margin: 0; + width: 100%; } + +.td-search--offline:focus-within .td-search__icon { + display: flex; + color: var(--bs-secondary-color); } + +.td-offline-search-results { + max-width: 90%; } + .td-offline-search-results .card { + margin-bottom: 0.5rem; } + .td-offline-search-results .card .card-header { + font-weight: bold; } + .td-offline-search-results__close-button { + float: right; } + .td-offline-search-results__close-button:after { + content: "\f00d"; } + +.td-outer { + display: flex; + flex-direction: column; + min-height: 100vh; } + +@media (min-width: 768px) { + .td-default main > section:first-of-type { + padding-top: 8rem; } } + +.td-main { + flex-grow: 1; } + +.td-404 main, +.td-main main { + padding-top: 1.5rem; + padding-bottom: 2rem; } + @media (min-width: 768px) { + .td-404 main, + .td-main main { + padding-top: 5.5rem; } } +.td-cover-block--height-min { + min-height: 300px; } + +.td-cover-block--height-med { + min-height: 400px; } + +.td-cover-block--height-max { + min-height: 500px; } + +.td-cover-block--height-full { + min-height: 100vh; } + +@media (min-width: 768px) { + .td-cover-block--height-min { + min-height: 450px; } + .td-cover-block--height-med { + min-height: 500px; } + .td-cover-block--height-max { + min-height: 650px; } } + +.td-cover-logo { + margin-right: 0.5em; } + +.td-cover-block { + position: relative; + padding-top: 5rem; + padding-bottom: 5rem; + background-repeat: no-repeat; + background-position: 50% 0; + background-size: cover; } + .td-cover-block > .byline { + position: absolute; + bottom: 2px; + right: 4px; } + +.td-bg-arrow-wrapper { + position: relative; } + +.section-index .entry { + padding: 0.75rem; } + +.section-index h5, .section-index .h5 { + margin-bottom: 0; } + .section-index h5 a, .section-index .h5 a { + font-weight: 700; } + +.section-index p { + margin-top: 0; } + +.pageinfo { + font-weight: 500; + background: var(--bs-alert-bg); + color: inherit; + margin: 2rem auto; + padding: 1.5rem; + padding-bottom: 0.5rem; } + .pageinfo-primary { + border-width: 0; } + .pageinfo-secondary { + border-width: 0; } + .pageinfo-success { + border-width: 0; } + .pageinfo-info { + border-width: 0; } + .pageinfo-warning { + border-width: 0; } + .pageinfo-danger { + border-width: 0; } + .pageinfo-light { + border-width: 0; } + .pageinfo-dark { + border-width: 0; } + +.td-page-meta__lastmod { + margin-top: 3rem !important; + padding-top: 1rem !important; } + +.taxonomy-terms-article { + width: 100%; + clear: both; + font-size: 0.8rem; } + .taxonomy-terms-article .taxonomy-title { + display: inline; + font-size: 1.25em; + height: 1em; + line-height: 1em; + margin-right: 0.5em; + padding: 0; } + +.taxonomy-terms-cloud { + width: 100%; + clear: both; + font-size: 0.8rem; } + .taxonomy-terms-cloud .taxonomy-title { + display: inline-block; + width: 100%; + font-size: 1rem; + font-weight: 700; + color: var(--bs-primary-text-emphasis); + border-bottom: 1px solid var(--bs-tertiary-color); + margin-bottom: 1em; + padding-bottom: 0.375rem; + margin-top: 1em; } + +.taxonomy-terms-page { + max-width: 800px; + margin: auto; } + .taxonomy-terms-page h1, .taxonomy-terms-page .h1 { + margin-bottom: 1em; } + .taxonomy-terms-page .taxonomy-terms-cloud { + font-size: 1em; } + .taxonomy-terms-page .taxonomy-terms-cloud li { + display: block; } + .taxonomy-terms-page .taxo-text-tags li + li::before { + content: none; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count, + .taxonomy-terms-page .taxo-fruits .taxonomy-label { + display: inherit; + font-size: 1rem; + margin: 0; + padding: 0; + padding-right: 0.5em; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count::before { + content: "("; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count::after { + content: ")"; } + +.taxonomy-terms { + list-style: none; + margin: 0; + overflow: hidden; + padding: 0; + display: inline; } + .taxonomy-terms li { + display: inline; + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; } + +.taxonomy-count { + font-size: 0.8em; + line-height: 1.25em; + display: inline-block; + padding-left: 0.6em; + padding-right: 0.6em; + margin-left: 0.6em; + text-align: center; + border-radius: 1em; + background-color: var(--bs-body-bg); } + +.taxonomy-term { + background: var(--bs-secondary-bg); + border-width: 0; + border-radius: 0 3px 3px 0; + color: var(--bs-body-color); + display: inline-block; + font-size: 1em; + line-height: 1.5em; + min-height: 1.5em; + max-width: 100%; + padding: 0 0.5em 0 1em; + position: relative; + margin: 0 0.5em 0.2em 0; + text-decoration: none; + -webkit-transition: color 0.2s; + -webkit-clip-path: polygon(100% 0, 100% 100%, 0.8em 100%, 0 50%, 0.8em 0); + clip-path: polygon(100% 0, 100% 100%, 0.8em 100%, 0 50%, 0.8em 0); } + .taxonomy-term:hover { + background-color: var(--bs-primary-bg-subtle); + color: var(--bs-body-color-dark); } + .taxonomy-term:hover .taxonomy-count { + color: var(--bs-body-color-dark); } + .taxonomy-term:hover::before { + background: #30638e; } + +.taxo-text-tags .taxonomy-term { + background: none; + border-width: 0; + border-radius: 0; + color: #6c757d; + font-size: 1em; + line-height: 1.5em; + min-height: 1.5em; + max-width: 100%; + padding: 0; + position: relative; + margin: 0; + text-decoration: none; + -webkit-clip-path: none; + clip-path: none; } + .taxo-text-tags .taxonomy-term:hover { + background: none; + color: #0d6efd; } + .taxo-text-tags .taxonomy-term:hover .taxonomy-count { + color: #403f4c !important; } + .taxo-text-tags .taxonomy-term:hover::before { + background: none; } + +.taxo-text-tags li + li::before { + content: "|"; + color: #6c757d; + margin-right: 0.2em; } + +.taxo-text-tags .taxonomy-count { + font-size: 1em; + line-height: 1.25em; + display: inline-block; + padding: 0; + margin: 0; + text-align: center; + border-radius: 0; + background: none; + vertical-align: super; + font-size: 0.75em; } + +.taxo-text-tags .taxonomy-term:hover .taxonomy-count { + color: #0d6efd !important; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term]::before { + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + padding-right: 0.5em; + font-size: 2em; + min-width: 1.5em; + display: inline-block; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="apple"]::before { + content: "\f5d1"; + color: red; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="carrot"]::before { + content: "\f787"; + color: orange; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="lemon"]::before { + content: "\f094"; + color: limegreen; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="pepper"]::before { + content: "\f816"; + color: darkred; } + +.taxo-fruits .taxonomy-term { + background: none; + border-width: 0; + border-radius: 0; + color: #6c757d; + font-size: 1em; + line-height: 2.5em; + max-width: 100%; + padding: 0; + position: relative; + margin: 0; + text-decoration: none; + -webkit-clip-path: none; + clip-path: none; } + .taxo-fruits .taxonomy-term:hover { + background: none; + color: #0d6efd; } + .taxo-fruits .taxonomy-term:hover .taxonomy-count { + color: #403f4c !important; } + .taxo-fruits .taxonomy-term:hover::before { + background: none; + text-shadow: 0 0 3px #212529; } + +.taxo-fruits .taxonomy-count, +.taxo-fruits .taxonomy-label { + display: none; } + +.taxo-fruits.taxonomy-terms-article { + margin-bottom: 1rem; } + .taxo-fruits.taxonomy-terms-article .taxonomy-title { + display: none; } + +.taxonomy-taxonomy-page { + max-width: 800px; + margin: auto; } + .taxonomy-taxonomy-page h1, .taxonomy-taxonomy-page .h1 { + margin-bottom: 1em; } + +.article-meta { + margin-bottom: 1.5rem; } + +.article-teaser.article-type-docs h3 a:before, .article-teaser.article-type-docs .h3 a:before, .article-teaser.article-type-docs .td-footer__links-item a:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f02d"; + padding-right: 0.5em; } + +.article-teaser.article-type-blog h3 a:before, .article-teaser.article-type-blog .h3 a:before, .article-teaser.article-type-blog .td-footer__links-item a:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f781"; + padding-right: 0.5em; } + +.all-taxonomy-terms { + font-weight: 500; + line-height: 1.2; + font-size: 1.5rem; } + .all-taxonomy-terms:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f122"; + padding-right: 0.5em; } + +.article-teaser.card { + padding: 1em; + margin-bottom: 1.5em; } + +.article-teaser .breadcrumb { + margin-bottom: 0em; + font-size: 0.85rem; } + +.article-teaser .article-meta { + margin-bottom: 0em; } + +div.drawio { + display: inline-block; + position: relative; } + div.drawio button { + position: absolute; + bottom: 5px; + right: 5px; + padding: 0.4em 0.5em; + font-size: 0.8em; + display: none; } + div.drawio:hover button { + display: inline; } + +div.drawioframe { + position: fixed; + height: 100%; + width: 100%; + top: 0; + left: 0px; + z-index: 1000; + background: #000b; + border: 0; } + div.drawioframe iframe { + position: absolute; + height: 90%; + width: 90%; + top: 5%; + left: 5%; + z-index: 1010; } + +.tab-content .tab-pane { + margin-top: 0rem; + margin-bottom: 1.5rem; + border-left: var(--bs-border-width) solid var(--bs-border-color); + border-right: var(--bs-border-width) solid var(--bs-border-color); + border-bottom: var(--bs-border-width) solid var(--bs-border-color); } + .tab-content .tab-pane .highlight { + margin: 0; + border: none; + max-width: 100%; } + +.tab-body { + font-weight: 500; + background: var(--td-pre-bg); + color: var(--bs-body-color); + border-radius: 0; + padding: 1.5rem; } + .tab-body > :last-child { + margin-bottom: 0; } + .tab-body > .highlight:only-child { + margin: -1.5rem; + max-width: calc(100% + 3rem); } + .tab-body-primary { + border-style: solid; + border-color: #30638e; } + .tab-body-secondary { + border-style: solid; + border-color: #ffa630; } + .tab-body-success { + border-style: solid; + border-color: #3772ff; } + .tab-body-info { + border-style: solid; + border-color: #c0e0de; } + .tab-body-warning { + border-style: solid; + border-color: #ed6a5a; } + .tab-body-danger { + border-style: solid; + border-color: #ed6a5a; } + .tab-body-light { + border-style: solid; + border-color: #d3f3ee; } + .tab-body-dark { + border-style: solid; + border-color: #403f4c; } + +.td-card.card .highlight { + border: none; + margin: 0; } + +.td-card .card-header.code { + background-color: var(--bs-body-bg); } + +.td-card .card-body.code { + background-color: var(--bs-body-bg); + padding: 0 0 0 1ex; } + +.td-card .card-body pre { + margin: 0; + padding: 0 1rem 1rem 1rem; } + +.swagger-ui .info .title small pre, .swagger-ui .info .title .small pre, .swagger-ui .info .title .td-footer__center pre, .swagger-ui .info .title .td-cover-block > .byline pre { + background: #7d8492; } + +.td-footer { + min-height: 150px; + padding-top: 3rem; + /* &__left { } */ } + @media (max-width: 991.98px) { + .td-footer { + min-height: 200px; } } + .td-footer__center { + text-align: center; } + .td-footer__right { + text-align: right; } + .td-footer__about { + font-size: initial; } + .td-footer__links-list { + margin-bottom: 0; } + .td-footer__links-item a { + color: inherit !important; } + .td-footer__authors, .td-footer__all_rights_reserved { + padding-left: 0.25rem; } + .td-footer__all_rights_reserved { + display: none; } + +@media (min-width: 768px) { + .td-offset-anchor:target { + display: block; + position: relative; + top: -4rem; + visibility: hidden; } + h2[id]:before, [id].h2:before, + h3[id]:before, + [id].h3:before, + [id].td-footer__links-item:before, + h4[id]:before, + [id].h4:before, + h5[id]:before, + [id].h5:before { + display: block; + content: " "; + margin-top: -5rem; + height: 5rem; + visibility: hidden; } } + +/* + +Nothing defined here. The Hugo project that uses this theme can override Bootstrap by adding a file to: + +assets/scss/_styles_project.scss + +*/ + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.json b/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.json new file mode 100644 index 0000000..a8ece4a --- /dev/null +++ b/resources/_gen/assets/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.json @@ -0,0 +1 @@ +{"Target":"/scss/main.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.content b/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.content new file mode 100644 index 0000000..e79aaa3 --- /dev/null +++ b/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.content @@ -0,0 +1,19722 @@ +/* + +Add styles or override variables from the theme here. + +*/ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i&display=swap"); +:root, +[data-bs-theme="light"] { + --td-pre-bg: var(--bs-tertiary-bg); } + +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme="light"] { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #30638e; + --bs-secondary: #ffa630; + --bs-success: #3772ff; + --bs-info: #c0e0de; + --bs-warning: #ed6a5a; + --bs-danger: #ed6a5a; + --bs-light: #d3f3ee; + --bs-dark: #403f4c; + --bs-primary-rgb: 48, 99, 142; + --bs-secondary-rgb: 255, 166, 48; + --bs-success-rgb: 55, 114, 255; + --bs-info-rgb: 192, 224, 222; + --bs-warning-rgb: 237, 106, 90; + --bs-danger-rgb: 237, 106, 90; + --bs-light-rgb: 211, 243, 238; + --bs-dark-rgb: 64, 63, 76; + --bs-primary-text-emphasis: #132839; + --bs-secondary-text-emphasis: #664213; + --bs-success-text-emphasis: #162e66; + --bs-info-text-emphasis: #4d5a59; + --bs-warning-text-emphasis: #5f2a24; + --bs-danger-text-emphasis: #5f2a24; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #d6e0e8; + --bs-secondary-bg-subtle: #ffedd6; + --bs-success-bg-subtle: #d7e3ff; + --bs-info-bg-subtle: #f2f9f8; + --bs-warning-bg-subtle: #fbe1de; + --bs-danger-bg-subtle: #fbe1de; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #acc1d2; + --bs-secondary-border-subtle: #ffdbac; + --bs-success-border-subtle: #afc7ff; + --bs-info-border-subtle: #e6f3f2; + --bs-warning-border-subtle: #f8c3bd; + --bs-danger-border-subtle: #f8c3bd; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-font-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #094db1; + --bs-link-hover-color-rgb: 9, 77, 177; + --bs-code-color: #99641d; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(48, 99, 142, 0.25); + --bs-form-valid-color: #3772ff; + --bs-form-valid-border-color: #3772ff; + --bs-form-invalid-color: #ed6a5a; + --bs-form-invalid-border-color: #ed6a5a; } + +[data-bs-theme="dark"] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #83a1bb; + --bs-secondary-text-emphasis: #ffca83; + --bs-success-text-emphasis: #87aaff; + --bs-info-text-emphasis: #d9eceb; + --bs-warning-text-emphasis: #f4a69c; + --bs-danger-text-emphasis: #f4a69c; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #0a141c; + --bs-secondary-bg-subtle: #33210a; + --bs-success-bg-subtle: #0b1733; + --bs-info-bg-subtle: #262d2c; + --bs-warning-bg-subtle: #2f1512; + --bs-danger-bg-subtle: #2f1512; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #1d3b55; + --bs-secondary-border-subtle: #99641d; + --bs-success-border-subtle: #214499; + --bs-info-border-subtle: #738685; + --bs-warning-border-subtle: #8e4036; + --bs-danger-border-subtle: #8e4036; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #83a1bb; + --bs-link-hover-color: #a8bdcf; + --bs-link-color-rgb: 131, 161, 187; + --bs-link-hover-color-rgb: 168, 189, 207; + --bs-code-color: #c2a277; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; } } + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; } + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, .td-footer__links-item, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); } + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); } + @media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; } } +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); } + @media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; } } +h3, .h3, .td-footer__links-item { + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + h3, .h3, .td-footer__links-item { + font-size: 1.5rem; } } +h4, .h4 { + font-size: calc(1.26rem + 0.12vw); } + @media (min-width: 1200px) { + h4, .h4 { + font-size: 1.35rem; } } +h5, .h5 { + font-size: 1.15rem; } + +h6, .h6 { + font-size: 1rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul { + padding-left: 2rem; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small, .small, .td-footer__center, .td-cover-block > .byline { + font-size: 0.875em; } + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); } + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; } + a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); } + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; } + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; } + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; } + kbd kbd { + padding: 0; + font-size: 1em; } + +figure { + margin: 0 0 1rem; } + +img, +svg { + vertical-align: middle; } + +table { + caption-side: bottom; + border-collapse: collapse; } + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; } + +th { + text-align: inherit; + text-align: -webkit-match-parent; } + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; } + +label { + display: inline-block; } + +button { + border-radius: 0; } + +button:focus:not(:focus-visible) { + outline: 0; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +select { + text-transform: none; } + +[role="button"] { + cursor: pointer; } + +select { + word-wrap: normal; } + select:disabled { + opacity: 1; } + +[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator { + display: none !important; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; } + +::-moz-focus-inner { + padding: 0; + border-style: none; } + +textarea { + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; } + @media (min-width: 1200px) { + legend { + font-size: 1.5rem; } } + legend + * { + clear: left; } + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; } + +::-webkit-inner-spin-button { + height: auto; } + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-color-swatch-wrapper { + padding: 0; } + +::file-selector-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +iframe { + border: 0; } + +summary { + display: list-item; + cursor: pointer; } + +progress { + vertical-align: baseline; } + +[hidden] { + display: none !important; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-1 { + font-size: 5rem; } } +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; } } +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-3 { + font-size: 4rem; } } +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; } } +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-5 { + font-size: 3rem; } } +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; } } +.list-unstyled, .td-blog-posts-list { + padding-left: 0; + list-style: none; } + +.list-inline, .td-footer__links-list { + padding-left: 0; + list-style: none; } + +.list-inline-item, .td-footer__links-item { + display: inline-block; } + .list-inline-item:not(:last-child), .td-footer__links-item:not(:last-child) { + margin-right: 1rem; } + +.initialism { + font-size: 0.875em; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + .blockquote > :last-child { + margin-bottom: 0; } + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid, .td-content img { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-sm); + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; } } + +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; } } + +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; } } + +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; } } + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; } } + +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; } + +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-.5 * var(--bs-gutter-x)); + margin-left: calc(-.5 * var(--bs-gutter-x)); } + .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); } + +.col { + flex: 1 0 0%; } + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; } + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; } + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; } + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; } + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; } + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-auto { + flex: 0 0 auto; + width: auto; } + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; } + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-3 { + flex: 0 0 auto; + width: 25%; } + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; } + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; } + +.col-6 { + flex: 0 0 auto; + width: 50%; } + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; } + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; } + +.col-9 { + flex: 0 0 auto; + width: 75%; } + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; } + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; } + +.col-12 { + flex: 0 0 auto; + width: 100%; } + +.offset-1 { + margin-left: 8.33333333%; } + +.offset-2 { + margin-left: 16.66666667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333333%; } + +.offset-5 { + margin-left: 41.66666667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333333%; } + +.offset-8 { + margin-left: 66.66666667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333333%; } + +.offset-11 { + margin-left: 91.66666667%; } + +.g-0, +.gx-0 { + --bs-gutter-x: 0; } + +.g-0, +.gy-0 { + --bs-gutter-y: 0; } + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; } + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; } + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; } + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; } + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; } + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; } + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; } + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; } + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; } + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; } + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-auto { + flex: 0 0 auto; + width: auto; } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333333%; } + .offset-sm-2 { + margin-left: 16.66666667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333333%; } + .offset-sm-5 { + margin-left: 41.66666667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333333%; } + .offset-sm-8 { + margin-left: 66.66666667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333333%; } + .offset-sm-11 { + margin-left: 91.66666667%; } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-auto { + flex: 0 0 auto; + width: auto; } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-3 { + flex: 0 0 auto; + width: 25%; } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-md-6 { + flex: 0 0 auto; + width: 50%; } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-md-9 { + flex: 0 0 auto; + width: 75%; } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-md-12 { + flex: 0 0 auto; + width: 100%; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333333%; } + .offset-md-2 { + margin-left: 16.66666667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333333%; } + .offset-md-5 { + margin-left: 41.66666667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333333%; } + .offset-md-8 { + margin-left: 66.66666667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333333%; } + .offset-md-11 { + margin-left: 91.66666667%; } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-auto { + flex: 0 0 auto; + width: auto; } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333333%; } + .offset-lg-2 { + margin-left: 16.66666667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333333%; } + .offset-lg-5 { + margin-left: 41.66666667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333333%; } + .offset-lg-8 { + margin-left: 66.66666667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333333%; } + .offset-lg-11 { + margin-left: 91.66666667%; } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-auto { + flex: 0 0 auto; + width: auto; } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333333%; } + .offset-xl-2 { + margin-left: 16.66666667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333333%; } + .offset-xl-5 { + margin-left: 41.66666667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333333%; } + .offset-xl-8 { + margin-left: 66.66666667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333333%; } + .offset-xl-11 { + margin-left: 91.66666667%; } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xxl-0 { + margin-left: 0; } + .offset-xxl-1 { + margin-left: 8.33333333%; } + .offset-xxl-2 { + margin-left: 16.66666667%; } + .offset-xxl-3 { + margin-left: 25%; } + .offset-xxl-4 { + margin-left: 33.33333333%; } + .offset-xxl-5 { + margin-left: 41.66666667%; } + .offset-xxl-6 { + margin-left: 50%; } + .offset-xxl-7 { + margin-left: 58.33333333%; } + .offset-xxl-8 { + margin-left: 66.66666667%; } + .offset-xxl-9 { + margin-left: 75%; } + .offset-xxl-10 { + margin-left: 83.33333333%; } + .offset-xxl-11 { + margin-left: 91.66666667%; } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; } } + +.table, .td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); } + .table > :not(caption) > * > *, .td-table:not(.td-initial) > :not(caption) > * > *, .td-content table:not(.td-initial) > :not(caption) > * > *, .td-box table:not(.td-initial) > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); } + .table > tbody, .td-table:not(.td-initial) > tbody, .td-content table:not(.td-initial) > tbody, .td-box table:not(.td-initial) > tbody { + vertical-align: inherit; } + .table > thead, .td-table:not(.td-initial) > thead, .td-content table:not(.td-initial) > thead, .td-box table:not(.td-initial) > thead { + vertical-align: bottom; } + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; } + +.caption-top { + caption-side: top; } + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; } + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; } + .table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); } + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; } + +.table-borderless > :not(:first-child) { + border-top-width: 0; } + +.table-striped > tbody > tr:nth-of-type(odd) > *, .td-table:not(.td-initial) > tbody > tr:nth-of-type(odd) > *, .td-content table:not(.td-initial) > tbody > tr:nth-of-type(odd) > *, .td-box table:not(.td-initial) > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); } + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); } + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #d6e0e8; + --bs-table-border-color: #abb3ba; + --bs-table-striped-bg: #cbd5dc; + --bs-table-striped-color: #000; + --bs-table-active-bg: #c1cad1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c6cfd7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #ffedd6; + --bs-table-border-color: #ccbeab; + --bs-table-striped-bg: #f2e1cb; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6d5c1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ecdbc6; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d7e3ff; + --bs-table-border-color: #acb6cc; + --bs-table-striped-bg: #ccd8f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #c2cce6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c7d2ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #f2f9f8; + --bs-table-border-color: #c2c7c6; + --bs-table-striped-bg: #e6edec; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dae0df; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e0e6e5; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fbe1de; + --bs-table-border-color: #c9b4b2; + --bs-table-striped-bg: #eed6d3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e2cbc8; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e8d0cd; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #fbe1de; + --bs-table-border-color: #c9b4b2; + --bs-table-striped-bg: #eed6d3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e2cbc8; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e8d0cd; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #d3f3ee; + --bs-table-border-color: #a9c2be; + --bs-table-striped-bg: #c8e7e2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bedbd6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c3e1dc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #403f4c; + --bs-table-border-color: #666570; + --bs-table-striped-bg: #4a4955; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #53525e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #4e4d59; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-responsive, .td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +.form-label { + margin-bottom: 0.5rem; } + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; } + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; } + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-inset); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; } } + .form-control[type="file"] { + overflow: hidden; } + .form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #98b1c7; + outline: 0; + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; } + .form-control::-webkit-datetime-edit { + display: block; + padding: 0; } + .form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; } + .form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; } + .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + background-image: var(--bs-gradient); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; } } + .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); } + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; } + .form-control-plaintext:focus { + outline: 0; } + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; } + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; } + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; } + .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + box-shadow: var(--bs-box-shadow-inset); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; } } + .form-select:focus { + border-color: #98b1c7; + outline: 0; + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; } + .form-select:disabled { + background-color: var(--bs-secondary-bg); } + .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); } + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +[data-bs-theme="dark"] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); } + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; } + .form-check .form-check-input { + float: left; + margin-left: -1.5em; } + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; } + .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; } + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + print-color-adjust: exact; } + .form-check-input[type="checkbox"] { + border-radius: 0.25em; } + .form-check-input[type="radio"] { + border-radius: 50%; } + .form-check-input:active { + filter: brightness(90%); } + .form-check-input:focus { + border-color: #98b1c7; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-check-input:checked { + background-color: #30638e; + border-color: #30638e; } + .form-check-input:checked[type="checkbox"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input:checked[type="radio"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input[type="checkbox"]:indeterminate { + background-color: #30638e; + border-color: #30638e; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; } + .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; } + +.form-switch { + padding-left: 2.5em; } + .form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; } } + .form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2398b1c7'/%3e%3c/svg%3e"); } + .form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"), var(--bs-gradient); } + .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; } + .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; } + +.form-check-inline { + display: inline-block; + margin-right: 1rem; } + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + .btn-check[disabled] + .btn, div.drawio .btn-check[disabled] + button, .td-blog .btn-check[disabled] + .td-rss-button, .btn-check:disabled + .btn, div.drawio .btn-check:disabled + button, .td-blog .btn-check:disabled + .td-rss-button { + pointer-events: none; + filter: none; + opacity: 0.65; } + +[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); } + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + appearance: none; + background-color: transparent; } + .form-range:focus { + outline: 0; } + .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .form-range::-moz-focus-outer { + border: 0; } + .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #30638e; + background-image: var(--bs-gradient); + border: 0; + border-radius: 1rem; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; } } + .form-range::-webkit-slider-thumb:active { + background-color: #c1d0dd; + background-image: var(--bs-gradient); } + .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; + box-shadow: var(--bs-box-shadow-inset); } + .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #30638e; + background-image: var(--bs-gradient); + border: 0; + border-radius: 1rem; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; } } + .form-range::-moz-range-thumb:active { + background-color: #c1d0dd; + background-image: var(--bs-gradient); } + .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; + box-shadow: var(--bs-box-shadow-inset); } + .form-range:disabled { + pointer-events: none; } + .form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); } + .form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); } + +.form-floating { + position: relative; } + .form-floating > .form-control, + .form-floating > .form-control-plaintext, + .form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; } + .form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; } } + .form-floating > .form-control, + .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; } + .form-floating > .form-control::placeholder, + .form-floating > .form-control-plaintext::placeholder { + color: transparent; } + .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), + .form-floating > .form-control-plaintext:focus, + .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:-webkit-autofill, + .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:focus ~ label, + .form-floating > .form-control:not(:placeholder-shown) ~ label, + .form-floating > .form-control-plaintext ~ label, + .form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control:focus ~ label::after, + .form-floating > .form-control:not(:placeholder-shown) ~ label::after, + .form-floating > .form-control-plaintext ~ label::after, + .form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); } + .form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; } + .form-floating > :disabled ~ label, + .form-floating > .form-control:disabled ~ label { + color: #6c757d; } + .form-floating > :disabled ~ label::after, + .form-floating > .form-control:disabled ~ label::after { + background-color: var(--bs-secondary-bg); } + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .form-select, + .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } + .input-group > .form-control:focus, + .input-group > .form-select:focus, + .input-group > .form-floating:focus-within { + z-index: 5; } + .input-group .btn, .input-group div.drawio button, div.drawio .input-group button, .input-group .td-blog .td-rss-button, .td-blog .input-group .td-rss-button { + position: relative; + z-index: 2; } + .input-group .btn:focus, .input-group div.drawio button:focus, div.drawio .input-group button:focus, .input-group .td-blog .td-rss-button:focus, .td-blog .input-group .td-rss-button:focus { + z-index: 5; } + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); } + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn, +div.drawio .input-group-lg > button, +.td-blog .input-group-lg > .td-rss-button { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn, +div.drawio .input-group-sm > button, +.td-blog .input-group-sm > .td-rss-button { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; } + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--bs-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); } + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233772ff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233772ff' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); } + .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); } + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, .was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, .was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); } + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ed6a5a'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ed6a5a' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ed6a5a'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ed6a5a' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: var(--bs-box-shadow-inset), 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); } + .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); } + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, .was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, .was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; } + +.btn, div.drawio button, .td-blog .td-rss-button { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + background-image: var(--bs-gradient); + box-shadow: var(--bs-btn-box-shadow); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .btn, div.drawio button, .td-blog .td-rss-button { + transition: none; } } + .btn:hover, div.drawio button:hover, .td-blog .td-rss-button:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); } + .btn-check + .btn:hover, div.drawio .btn-check + button:hover, .td-blog .btn-check + .td-rss-button:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); } + .btn:focus-visible, div.drawio button:focus-visible, .td-blog .td-rss-button:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + background-image: var(--bs-gradient); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-box-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:focus-visible + .btn, div.drawio .btn-check:focus-visible + button, .td-blog .btn-check:focus-visible + .td-rss-button { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-box-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:checked + .btn, div.drawio .btn-check:checked + button, .td-blog .btn-check:checked + .td-rss-button, :not(.btn-check) + .btn:active, div.drawio :not(.btn-check) + button:active, .td-blog :not(.btn-check) + .td-rss-button:active, .btn:first-child:active, div.drawio button:first-child:active, .td-blog .td-rss-button:first-child:active, .btn.active, div.drawio button.active, .td-blog .active.td-rss-button, .btn.show, div.drawio button.show, .td-blog .show.td-rss-button { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + background-image: none; + border-color: var(--bs-btn-active-border-color); + box-shadow: var(--bs-btn-active-shadow); } + .btn-check:checked + .btn:focus-visible, div.drawio .btn-check:checked + button:focus-visible, .td-blog .btn-check:checked + .td-rss-button:focus-visible, :not(.btn-check) + .btn:active:focus-visible, div.drawio :not(.btn-check) + button:active:focus-visible, .td-blog :not(.btn-check) + .td-rss-button:active:focus-visible, .btn:first-child:active:focus-visible, div.drawio button:first-child:active:focus-visible, .td-blog .td-rss-button:first-child:active:focus-visible, .btn.active:focus-visible, div.drawio button.active:focus-visible, .td-blog .active.td-rss-button:focus-visible, .btn.show:focus-visible, div.drawio button.show:focus-visible, .td-blog .show.td-rss-button:focus-visible { + box-shadow: var(--bs-btn-active-shadow), var(--bs-btn-focus-box-shadow); } + .btn-check:checked:focus-visible + .btn, div.drawio .btn-check:checked:focus-visible + button, .td-blog .btn-check:checked:focus-visible + .td-rss-button { + box-shadow: var(--bs-btn-active-shadow), var(--bs-btn-focus-box-shadow); } + .btn:disabled, div.drawio button:disabled, .td-blog .td-rss-button:disabled, .btn.disabled, div.drawio button.disabled, .td-blog .disabled.td-rss-button, fieldset:disabled .btn, fieldset:disabled div.drawio button, div.drawio fieldset:disabled button, fieldset:disabled .td-blog .td-rss-button, .td-blog fieldset:disabled .td-rss-button { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + background-image: none; + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); + box-shadow: none; } + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #30638e; + --bs-btn-border-color: #30638e; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #295479; + --bs-btn-hover-border-color: #264f72; + --bs-btn-focus-shadow-rgb: 79, 122, 159; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #264f72; + --bs-btn-active-border-color: #244a6b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #30638e; + --bs-btn-disabled-border-color: #30638e; } + +.btn-secondary { + --bs-btn-color: #000; + --bs-btn-bg: #ffa630; + --bs-btn-border-color: #ffa630; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffb34f; + --bs-btn-hover-border-color: #ffaf45; + --bs-btn-focus-shadow-rgb: 217, 141, 41; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffb859; + --bs-btn-active-border-color: #ffaf45; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffa630; + --bs-btn-disabled-border-color: #ffa630; } + +.btn-success { + --bs-btn-color: #000; + --bs-btn-bg: #3772ff; + --bs-btn-border-color: #3772ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #5587ff; + --bs-btn-hover-border-color: #4b80ff; + --bs-btn-focus-shadow-rgb: 47, 97, 217; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #5f8eff; + --bs-btn-active-border-color: #4b80ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #3772ff; + --bs-btn-disabled-border-color: #3772ff; } + +.btn-info, .td-blog .td-rss-button { + --bs-btn-color: #000; + --bs-btn-bg: #c0e0de; + --bs-btn-border-color: #c0e0de; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #c9e5e3; + --bs-btn-hover-border-color: #c6e3e1; + --bs-btn-focus-shadow-rgb: 163, 190, 189; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #cde6e5; + --bs-btn-active-border-color: #c6e3e1; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #c0e0de; + --bs-btn-disabled-border-color: #c0e0de; } + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f08073; + --bs-btn-hover-border-color: #ef796b; + --bs-btn-focus-shadow-rgb: 201, 90, 77; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f1887b; + --bs-btn-active-border-color: #ef796b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ed6a5a; + --bs-btn-disabled-border-color: #ed6a5a; } + +.btn-danger { + --bs-btn-color: #000; + --bs-btn-bg: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f08073; + --bs-btn-hover-border-color: #ef796b; + --bs-btn-focus-shadow-rgb: 201, 90, 77; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f1887b; + --bs-btn-active-border-color: #ef796b; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ed6a5a; + --bs-btn-disabled-border-color: #ed6a5a; } + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #d3f3ee; + --bs-btn-border-color: #d3f3ee; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #b3cfca; + --bs-btn-hover-border-color: #a9c2be; + --bs-btn-focus-shadow-rgb: 179, 207, 202; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #a9c2be; + --bs-btn-active-border-color: #9eb6b3; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #d3f3ee; + --bs-btn-disabled-border-color: #d3f3ee; } + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #403f4c; + --bs-btn-border-color: #403f4c; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5d5c67; + --bs-btn-hover-border-color: #53525e; + --bs-btn-focus-shadow-rgb: 93, 92, 103; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #666570; + --bs-btn-active-border-color: #53525e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #403f4c; + --bs-btn-disabled-border-color: #403f4c; } + +.btn-outline-primary, div.drawio button { + --bs-btn-color: #30638e; + --bs-btn-border-color: #30638e; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #30638e; + --bs-btn-hover-border-color: #30638e; + --bs-btn-focus-shadow-rgb: 48, 99, 142; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #30638e; + --bs-btn-active-border-color: #30638e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #30638e; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #30638e; + --bs-gradient: none; } + +.btn-outline-secondary { + --bs-btn-color: #ffa630; + --bs-btn-border-color: #ffa630; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffa630; + --bs-btn-hover-border-color: #ffa630; + --bs-btn-focus-shadow-rgb: 255, 166, 48; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffa630; + --bs-btn-active-border-color: #ffa630; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffa630; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffa630; + --bs-gradient: none; } + +.btn-outline-success { + --bs-btn-color: #3772ff; + --bs-btn-border-color: #3772ff; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #3772ff; + --bs-btn-hover-border-color: #3772ff; + --bs-btn-focus-shadow-rgb: 55, 114, 255; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3772ff; + --bs-btn-active-border-color: #3772ff; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #3772ff; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #3772ff; + --bs-gradient: none; } + +.btn-outline-info { + --bs-btn-color: #c0e0de; + --bs-btn-border-color: #c0e0de; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #c0e0de; + --bs-btn-hover-border-color: #c0e0de; + --bs-btn-focus-shadow-rgb: 192, 224, 222; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c0e0de; + --bs-btn-active-border-color: #c0e0de; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #c0e0de; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #c0e0de; + --bs-gradient: none; } + +.btn-outline-warning { + --bs-btn-color: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ed6a5a; + --bs-btn-hover-border-color: #ed6a5a; + --bs-btn-focus-shadow-rgb: 237, 106, 90; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ed6a5a; + --bs-btn-active-border-color: #ed6a5a; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ed6a5a; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ed6a5a; + --bs-gradient: none; } + +.btn-outline-danger { + --bs-btn-color: #ed6a5a; + --bs-btn-border-color: #ed6a5a; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ed6a5a; + --bs-btn-hover-border-color: #ed6a5a; + --bs-btn-focus-shadow-rgb: 237, 106, 90; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ed6a5a; + --bs-btn-active-border-color: #ed6a5a; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ed6a5a; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ed6a5a; + --bs-gradient: none; } + +.btn-outline-light { + --bs-btn-color: #d3f3ee; + --bs-btn-border-color: #d3f3ee; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3f3ee; + --bs-btn-hover-border-color: #d3f3ee; + --bs-btn-focus-shadow-rgb: 211, 243, 238; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #d3f3ee; + --bs-btn-active-border-color: #d3f3ee; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #d3f3ee; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #d3f3ee; + --bs-gradient: none; } + +.btn-outline-dark { + --bs-btn-color: #403f4c; + --bs-btn-border-color: #403f4c; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #403f4c; + --bs-btn-hover-border-color: #403f4c; + --bs-btn-focus-shadow-rgb: 64, 63, 76; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #403f4c; + --bs-btn-active-border-color: #403f4c; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #403f4c; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #403f4c; + --bs-gradient: none; } + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; + background-image: none; } + .btn-link:focus-visible { + color: var(--bs-btn-color); } + .btn-link:hover { + color: var(--bs-btn-hover-color); } + +.btn-lg, .td-blog .td-rss-button, .btn-group-lg > .btn, div.drawio .btn-group-lg > button { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); } + +.btn-sm, .btn-group-sm > .btn, div.drawio .btn-group-sm > button, .td-blog .btn-group-sm > .td-rss-button { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); } + +.fade { + transition: opacity 0.15s linear; } + @media (prefers-reduced-motion: reduce) { + .fade { + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; } } + .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; } } +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; } + +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #30638e; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); + box-shadow: var(--bs-dropdown-box-shadow); } + .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); } + +.dropdown-menu-start { + --bs-position: start; } + .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; } + +.dropdown-menu-end { + --bs-position: end; } + .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; } + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-sm-end { + --bs-position: end; } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-md-end { + --bs-position: end; } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-lg-end { + --bs-position: end; } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xl-end { + --bs-position: end; } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xxl-end { + --bs-position: end; } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; } } + +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); } + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); } + +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-toggle::after { + vertical-align: 0; } + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); } + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropstart .dropdown-toggle::after { + display: none; } + +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropstart .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; } + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); } + .dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); + background-image: var(--bs-gradient); } + .dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); + background-image: var(--bs-gradient); } + .dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; + background-image: none; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); } + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #30638e; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, div.drawio .btn-group > button, .td-blog .btn-group > .td-rss-button, + .btn-group-vertical > .btn, + div.drawio .btn-group-vertical > button, + .td-blog .btn-group-vertical > .td-rss-button { + position: relative; + flex: 1 1 auto; } + .btn-group > .btn-check:checked + .btn, div.drawio .btn-group > .btn-check:checked + button, .td-blog .btn-group > .btn-check:checked + .td-rss-button, + .btn-group > .btn-check:focus + .btn, + div.drawio .btn-group > .btn-check:focus + button, + .td-blog .btn-group > .btn-check:focus + .td-rss-button, + .btn-group > .btn:hover, + div.drawio .btn-group > button:hover, + .td-blog .btn-group > .td-rss-button:hover, + .btn-group > .btn:focus, + div.drawio .btn-group > button:focus, + .td-blog .btn-group > .td-rss-button:focus, + .btn-group > .btn:active, + div.drawio .btn-group > button:active, + .td-blog .btn-group > .td-rss-button:active, + .btn-group > .btn.active, + div.drawio .btn-group > button.active, + .td-blog .btn-group > .active.td-rss-button, + .btn-group-vertical > .btn-check:checked + .btn, + div.drawio .btn-group-vertical > .btn-check:checked + button, + .td-blog .btn-group-vertical > .btn-check:checked + .td-rss-button, + .btn-group-vertical > .btn-check:focus + .btn, + div.drawio .btn-group-vertical > .btn-check:focus + button, + .td-blog .btn-group-vertical > .btn-check:focus + .td-rss-button, + .btn-group-vertical > .btn:hover, + div.drawio .btn-group-vertical > button:hover, + .td-blog .btn-group-vertical > .td-rss-button:hover, + .btn-group-vertical > .btn:focus, + div.drawio .btn-group-vertical > button:focus, + .td-blog .btn-group-vertical > .td-rss-button:focus, + .btn-group-vertical > .btn:active, + div.drawio .btn-group-vertical > button:active, + .td-blog .btn-group-vertical > .td-rss-button:active, + .btn-group-vertical > .btn.active, + div.drawio .btn-group-vertical > button.active, + .td-blog .btn-group-vertical > .active.td-rss-button { + z-index: 1; } + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group { + border-radius: var(--bs-border-radius); } + .btn-group > :not(.btn-check:first-child) + .btn, div.drawio .btn-group > :not(.btn-check:first-child) + button, .td-blog .btn-group > :not(.btn-check:first-child) + .td-rss-button, + .btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--bs-border-width) * -1); } + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), div.drawio .btn-group > button:not(:last-child):not(.dropdown-toggle), .td-blog .btn-group > .td-rss-button:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn.dropdown-toggle-split:first-child, + div.drawio .btn-group > button.dropdown-toggle-split:first-child, + .td-blog .btn-group > .dropdown-toggle-split.td-rss-button:first-child, + .btn-group > .btn-group:not(:last-child) > .btn, + div.drawio .btn-group > .btn-group:not(:last-child) > button, + .td-blog .btn-group > .btn-group:not(:last-child) > .td-rss-button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn:nth-child(n + 3), div.drawio .btn-group > button:nth-child(n + 3), .td-blog .btn-group > .td-rss-button:nth-child(n + 3), + .btn-group > :not(.btn-check) + .btn, + div.drawio .btn-group > :not(.btn-check) + button, + .td-blog .btn-group > :not(.btn-check) + .td-rss-button, + .btn-group > .btn-group:not(:first-child) > .btn, + div.drawio .btn-group > .btn-group:not(:first-child) > button, + .td-blog .btn-group > .btn-group:not(:first-child) > .td-rss-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; } + .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; } + .dropstart .dropdown-toggle-split::before { + margin-right: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split, div.drawio .btn-group-sm > button + .dropdown-toggle-split, .td-blog .btn-group-sm > .td-rss-button + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; } + +.btn-lg + .dropdown-toggle-split, .td-blog .td-rss-button + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split, div.drawio .btn-group-lg > button + .dropdown-toggle-split, .td-blog .btn-group-lg > .td-rss-button + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-group.show .dropdown-toggle { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } + .btn-group.show .dropdown-toggle.btn-link { + box-shadow: none; } + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; } + .btn-group-vertical > .btn, div.drawio .btn-group-vertical > button, .td-blog .btn-group-vertical > .td-rss-button, + .btn-group-vertical > .btn-group { + width: 100%; } + .btn-group-vertical > .btn:not(:first-child), div.drawio .btn-group-vertical > button:not(:first-child), .td-blog .btn-group-vertical > .td-rss-button:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--bs-border-width) * -1); } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), div.drawio .btn-group-vertical > button:not(:last-child):not(.dropdown-toggle), .td-blog .btn-group-vertical > .td-rss-button:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn, + div.drawio .btn-group-vertical > .btn-group:not(:last-child) > button, + .td-blog .btn-group-vertical > .btn-group:not(:last-child) > .td-rss-button { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn ~ .btn, div.drawio .btn-group-vertical > button ~ .btn, div.drawio .btn-group-vertical > .btn ~ button, div.drawio .btn-group-vertical > button ~ button, .td-blog .btn-group-vertical > .td-rss-button ~ .btn, .td-blog div.drawio .btn-group-vertical > .td-rss-button ~ button, div.drawio .td-blog .btn-group-vertical > .td-rss-button ~ button, .td-blog .btn-group-vertical > .btn ~ .td-rss-button, .td-blog div.drawio .btn-group-vertical > button ~ .td-rss-button, div.drawio .td-blog .btn-group-vertical > button ~ .td-rss-button, .td-blog .btn-group-vertical > .td-rss-button ~ .td-rss-button, + .btn-group-vertical > .btn-group:not(:first-child) > .btn, + div.drawio .btn-group-vertical > .btn-group:not(:first-child) > button, + .td-blog .btn-group-vertical > .btn-group:not(:first-child) > .td-rss-button { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; } } + .nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); } + .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); } + .nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; } + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); } + .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); } + .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #30638e; } + .nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); } + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); + background-image: var(--bs-gradient); } + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); } + .nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; } + .nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; } + .nav-underline .nav-link.active, + .nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; } + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; } + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; } + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar, .td-navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); + background-image: var(--bs-gradient); } + .navbar > .container, .td-navbar > .container, + .navbar > .container-fluid, + .td-navbar > .container-fluid, + .navbar > .container-sm, + .td-navbar > .container-sm, + .navbar > .container-md, + .td-navbar > .container-md, + .navbar > .container-lg, + .td-navbar > .container-lg, + .navbar > .container-xl, + .td-navbar > .container-xl, + .navbar > .container-xxl, + .td-navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; } + +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); } + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); } + .navbar-nav .dropdown-menu { + position: static; } + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); } + .navbar-text a, + .navbar-text a:hover, + .navbar-text a:focus { + color: var(--bs-navbar-active-color); } + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; } + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); } + @media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; } } + .navbar-toggler:hover { + text-decoration: none; } + .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; } + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; } + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xxl .navbar-toggler { + display: none; } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +.navbar-expand, .td-navbar { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand .navbar-nav, .td-navbar .navbar-nav { + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu, .td-navbar .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link, .td-navbar .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand .navbar-nav-scroll, .td-navbar .navbar-nav-scroll { + overflow: visible; } + .navbar-expand .navbar-collapse, .td-navbar .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand .navbar-toggler, .td-navbar .navbar-toggler { + display: none; } + .navbar-expand .offcanvas, .td-navbar .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + box-shadow: none; + transition: none; } + .navbar-expand .offcanvas .offcanvas-header, .td-navbar .offcanvas .offcanvas-header { + display: none; } + .navbar-expand .offcanvas .offcanvas-body, .td-navbar .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } + +.navbar-dark, +.navbar[data-bs-theme="dark"], +[data-bs-theme="dark"].td-navbar { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +[data-bs-theme="dark"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); + box-shadow: var(--bs-card-box-shadow); } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group { + border-top: inherit; + border-bottom: inherit; } + .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + .card > .card-header + .list-group, + .card > .list-group + .card-footer { + border-top: 0; } + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); } + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); } + +.card-subtitle { + margin-top: calc(-.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); } + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; } + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); } + +.card-header-tabs { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; } + .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); } + +.card-header-pills { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; } + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); } + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23132839' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); } + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; } } + .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); } + .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); } + .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; } } + .accordion-button:hover { + z-index: 2; } + .accordion-button:focus { + z-index: 3; + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); } + +.accordion-header { + margin-bottom: 0; } + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); } + .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); } + .accordion-item:first-of-type > .accordion-header .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:not(:first-of-type) { + border-top: 0; } + .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + .accordion-item:last-of-type > .accordion-header .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:last-of-type > .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); } + +.accordion-flush > .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + .accordion-flush > .accordion-item:first-child { + border-top: 0; } + .accordion-flush > .accordion-item:last-child { + border-bottom: 0; } + .accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { + border-radius: 0; } + .accordion-flush > .accordion-item > .accordion-collapse { + border-radius: 0; } + +[data-bs-theme="dark"] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2383a1bb'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2383a1bb'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); } + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); } + .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } + +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); } + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: #6c757d; + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #30638e; + --bs-pagination-active-border-color: #30638e; + --bs-pagination-disabled-color: #dee2e6; + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; } + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; } } + .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); } + .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); } + .page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + background-image: var(--bs-gradient); + border-color: var(--bs-pagination-active-border-color); } + .page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); } + +.page-item:not(:first-child) .page-link { + margin-left: calc(var(--bs-border-width) * -1); } + +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); } + +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); } + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); } + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); } + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: var(--bs-border-radius); + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); + background-image: var(--bs-gradient); } + .badge:empty { + display: none; } + +.btn .badge, div.drawio button .badge, .td-blog .td-rss-button .badge { + position: relative; + top: -1px; } + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); + --bs-alert-border-radius: var(--bs-border-radius); + --bs-alert-link-color: inherit; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); } + +.alert-heading { + color: inherit; } + +.alert-link { + font-weight: 700; + color: var(--bs-alert-link-color); } + +.alert-dismissible { + padding-right: 3rem; } + .alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; } + +.alert-primary, .pageinfo-primary { + --bs-alert-color: var(--bs-primary-text-emphasis); + --bs-alert-bg: var(--bs-primary-bg-subtle); + --bs-alert-border-color: var(--bs-primary-border-subtle); + --bs-alert-link-color: var(--bs-primary-text-emphasis); } + +.alert-secondary, .pageinfo-secondary { + --bs-alert-color: var(--bs-secondary-text-emphasis); + --bs-alert-bg: var(--bs-secondary-bg-subtle); + --bs-alert-border-color: var(--bs-secondary-border-subtle); + --bs-alert-link-color: var(--bs-secondary-text-emphasis); } + +.alert-success, .pageinfo-success { + --bs-alert-color: var(--bs-success-text-emphasis); + --bs-alert-bg: var(--bs-success-bg-subtle); + --bs-alert-border-color: var(--bs-success-border-subtle); + --bs-alert-link-color: var(--bs-success-text-emphasis); } + +.alert-info, .pageinfo-info { + --bs-alert-color: var(--bs-info-text-emphasis); + --bs-alert-bg: var(--bs-info-bg-subtle); + --bs-alert-border-color: var(--bs-info-border-subtle); + --bs-alert-link-color: var(--bs-info-text-emphasis); } + +.alert-warning, .pageinfo-warning { + --bs-alert-color: var(--bs-warning-text-emphasis); + --bs-alert-bg: var(--bs-warning-bg-subtle); + --bs-alert-border-color: var(--bs-warning-border-subtle); + --bs-alert-link-color: var(--bs-warning-text-emphasis); } + +.alert-danger, .pageinfo-danger { + --bs-alert-color: var(--bs-danger-text-emphasis); + --bs-alert-bg: var(--bs-danger-bg-subtle); + --bs-alert-border-color: var(--bs-danger-border-subtle); + --bs-alert-link-color: var(--bs-danger-text-emphasis); } + +.alert-light, .pageinfo-light { + --bs-alert-color: var(--bs-light-text-emphasis); + --bs-alert-bg: var(--bs-light-bg-subtle); + --bs-alert-border-color: var(--bs-light-border-subtle); + --bs-alert-link-color: var(--bs-light-text-emphasis); } + +.alert-dark, .pageinfo-dark { + --bs-alert-color: var(--bs-dark-text-emphasis); + --bs-alert-bg: var(--bs-dark-bg-subtle); + --bs-alert-border-color: var(--bs-dark-border-subtle); + --bs-alert-link-color: var(--bs-dark-text-emphasis); } + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; } } + +.progress, +.progress-stacked { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: var(--bs-secondary-bg); + --bs-progress-border-radius: var(--bs-border-radius); + --bs-progress-box-shadow: var(--bs-box-shadow-inset); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #30638e; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); + box-shadow: var(--bs-progress-box-shadow); } + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); } + @media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; } } +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); } + +.progress-stacked > .progress { + overflow: visible; } + +.progress-stacked > .progress > .progress-bar { + width: 100%; } + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; } } +.list-group { + --bs-list-group-color: var(--bs-body-color); + --bs-list-group-bg: var(--bs-body-bg); + --bs-list-group-border-color: var(--bs-border-color); + --bs-list-group-border-width: var(--bs-border-width); + --bs-list-group-border-radius: var(--bs-border-radius); + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-secondary-color); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); + --bs-list-group-action-active-color: var(--bs-body-color); + --bs-list-group-action-active-bg: var(--bs-secondary-bg); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #30638e; + --bs-list-group-active-border-color: #30638e; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); } + +.list-group-numbered { + list-style-type: none; + counter-reset: section; } + .list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; } + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; } + .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); } + .list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); } + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); } + .list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; } + .list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; } + .list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); } + .list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); } + .list-group-item + .list-group-item { + border-top-width: 0; } + .list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); } + +.list-group-horizontal { + flex-direction: row; } + .list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); } } + +.list-group-flush { + border-radius: 0; } + .list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); } + .list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; } + +.list-group-item-primary { + --bs-list-group-color: var(--bs-primary-text-emphasis); + --bs-list-group-bg: var(--bs-primary-bg-subtle); + --bs-list-group-border-color: var(--bs-primary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); + --bs-list-group-active-color: var(--bs-primary-bg-subtle); + --bs-list-group-active-bg: var(--bs-primary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); } + +.list-group-item-secondary { + --bs-list-group-color: var(--bs-secondary-text-emphasis); + --bs-list-group-bg: var(--bs-secondary-bg-subtle); + --bs-list-group-border-color: var(--bs-secondary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); + --bs-list-group-active-color: var(--bs-secondary-bg-subtle); + --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); } + +.list-group-item-success { + --bs-list-group-color: var(--bs-success-text-emphasis); + --bs-list-group-bg: var(--bs-success-bg-subtle); + --bs-list-group-border-color: var(--bs-success-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-success-border-subtle); + --bs-list-group-active-color: var(--bs-success-bg-subtle); + --bs-list-group-active-bg: var(--bs-success-text-emphasis); + --bs-list-group-active-border-color: var(--bs-success-text-emphasis); } + +.list-group-item-info { + --bs-list-group-color: var(--bs-info-text-emphasis); + --bs-list-group-bg: var(--bs-info-bg-subtle); + --bs-list-group-border-color: var(--bs-info-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-info-border-subtle); + --bs-list-group-active-color: var(--bs-info-bg-subtle); + --bs-list-group-active-bg: var(--bs-info-text-emphasis); + --bs-list-group-active-border-color: var(--bs-info-text-emphasis); } + +.list-group-item-warning { + --bs-list-group-color: var(--bs-warning-text-emphasis); + --bs-list-group-bg: var(--bs-warning-bg-subtle); + --bs-list-group-border-color: var(--bs-warning-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); + --bs-list-group-active-color: var(--bs-warning-bg-subtle); + --bs-list-group-active-bg: var(--bs-warning-text-emphasis); + --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); } + +.list-group-item-danger { + --bs-list-group-color: var(--bs-danger-text-emphasis); + --bs-list-group-bg: var(--bs-danger-bg-subtle); + --bs-list-group-border-color: var(--bs-danger-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); + --bs-list-group-active-color: var(--bs-danger-bg-subtle); + --bs-list-group-active-bg: var(--bs-danger-text-emphasis); + --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); } + +.list-group-item-light { + --bs-list-group-color: var(--bs-light-text-emphasis); + --bs-list-group-bg: var(--bs-light-bg-subtle); + --bs-list-group-border-color: var(--bs-light-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-light-border-subtle); + --bs-list-group-active-color: var(--bs-light-bg-subtle); + --bs-list-group-active-bg: var(--bs-light-text-emphasis); + --bs-list-group-active-border-color: var(--bs-light-text-emphasis); } + +.list-group-item-dark { + --bs-list-group-color: var(--bs-dark-text-emphasis); + --bs-list-group-bg: var(--bs-dark-bg-subtle); + --bs-list-group-border-color: var(--bs-dark-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); + --bs-list-group-active-color: var(--bs-dark-bg-subtle); + --bs-list-group-active-bg: var(--bs-dark-text-emphasis); + --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); } + +.btn-close { + --bs-btn-close-color: #000; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(48, 99, 142, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); } + .btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); } + .btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); } + .btn-close:disabled, .btn-close.disabled { + pointer-events: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); } + +.btn-close-white { + filter: var(--bs-btn-close-white-filter); } + +[data-bs-theme="dark"] .btn-close { + filter: var(--bs-btn-close-white-filter); } + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-border-width: var(--bs-border-width); + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: var(--bs-border-radius); + --bs-toast-box-shadow: var(--bs-box-shadow); + --bs-toast-header-color: var(--bs-secondary-color); + --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-header-border-color: var(--bs-border-color-translucent); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); } + .toast.showing { + opacity: 0; } + .toast:not(.show) { + display: none; } + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: max-content; + max-width: 100%; + pointer-events: none; } + .toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); } + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); } + .toast-header .btn-close { + margin-right: calc(-.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); } + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; } + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; } + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; } + .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; } } + .modal.show .modal-dialog { + transform: none; } + .modal.modal-static .modal-dialog { + transform: scale(1.02); } + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); } + .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); } + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + box-shadow: var(--bs-modal-box-shadow); + outline: 0; } + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); } + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); } + .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5); + margin: calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto; } + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); } + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); } + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); } + .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * .5); } + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; } + .modal-sm { + --bs-modal-width: 300px; } } + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; } } + +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; } } + +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen .modal-header, + .modal-fullscreen .modal-footer { + border-radius: 0; } + .modal-fullscreen .modal-body { + overflow-y: auto; } + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; } } + +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: var(--bs-body-bg); + --bs-tooltip-bg: var(--bs-emphasis-color); + --bs-tooltip-border-radius: var(--bs-border-radius); + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + margin: var(--bs-tooltip-margin); + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; } + .tooltip.show { + opacity: var(--bs-tooltip-opacity); } + .tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); } + .tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-top-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0; + border-right-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); } + .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); } + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); } + .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); } + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); } + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: var(--bs-body-bg); + --bs-popover-border-width: var(--bs-border-width); + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: var(--bs-border-radius-lg); + --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); + --bs-popover-box-shadow: var(--bs-box-shadow); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: inherit; + --bs-popover-header-bg: var(--bs-secondary-bg); + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: var(--bs-body-color); + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); + box-shadow: var(--bs-popover-box-shadow); } + .popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); } + .popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; } + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); } + .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); } + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0; } + .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); } + .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); } + .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); } + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); } + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height); } + .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); } + .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); } + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); } + +.carousel { + position: relative; } + +.carousel.pointer-event { + touch-action: pan-y; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner::after { + display: block; + clear: both; + content: ""; } + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; } } +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); } + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); } + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; } + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; } + +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; } + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; } } +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; } } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; } + +.carousel-control-prev { + left: 0; + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); } + +.carousel-control-next { + right: 0; + background-image: linear-gradient(270deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; } + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/; } + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/; } + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; } + .carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; } } + .carousel-indicators .active { + opacity: 1; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; } + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; } + +.carousel-dark .carousel-caption { + color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-control-prev-icon, +[data-bs-theme="dark"] .carousel .carousel-control-next-icon, [data-bs-theme="dark"].carousel .carousel-control-prev-icon, +[data-bs-theme="dark"].carousel .carousel-control-next-icon { + filter: invert(1) grayscale(100); } + +[data-bs-theme="dark"] .carousel .carousel-indicators [data-bs-target], [data-bs-theme="dark"].carousel .carousel-indicators [data-bs-target] { + background-color: #000; } + +[data-bs-theme="dark"] .carousel .carousel-caption, [data-bs-theme="dark"].carousel .carousel-caption { + color: #000; } + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); } + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; } } + +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; } + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; } + +@keyframes spinner-grow { + 0% { + transform: scale(0); } + 50% { + opacity: 1; + transform: none; } } + +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; } + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; } + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; } } + +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: var(--bs-body-color); + --bs-offcanvas-bg: var(--bs-body-bg); + --bs-offcanvas-border-width: var(--bs-border-width); + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); + --bs-offcanvas-transition: transform 0.3s ease-in-out; + --bs-offcanvas-title-line-height: 1.5; } + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; } } +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; } } + +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-sm .offcanvas-header { + display: none; } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; } } +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; } } + +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-md .offcanvas-header { + display: none; } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; } } +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; } } + +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-lg .offcanvas-header { + display: none; } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; } } +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; } } + +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xl .offcanvas-header { + display: none; } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } } + @media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; } } +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; } } + +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; } + .offcanvas-xxl .offcanvas-header { + display: none; } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; } } + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + box-shadow: var(--bs-offcanvas-box-shadow); + transition: var(--bs-offcanvas-transition); } + @media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; } } + .offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); } + .offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); } + .offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); } + .offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); } + .offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; } + .offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; } + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; } + .offcanvas-backdrop.fade { + opacity: 0; } + .offcanvas-backdrop.show { + opacity: 0.5; } + +.offcanvas-header { + display: flex; + align-items: center; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); } + .offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5); + margin: calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto; } + +.offcanvas-title { + margin-bottom: 0; + line-height: var(--bs-offcanvas-title-line-height); } + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; } + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; } + .placeholder.btn::before, div.drawio button.placeholder::before, .td-blog .placeholder.td-rss-button::before { + display: inline-block; + content: ""; } + +.placeholder-xs { + min-height: .6em; } + +.placeholder-sm { + min-height: .8em; } + +.placeholder-lg { + min-height: 1.2em; } + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; } + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; } } + +.placeholder-wave { + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; } + +@keyframes placeholder-wave { + 100% { + mask-position: -200% 0%; } } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-secondary { + color: #000 !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-success { + color: #000 !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-info { + color: #000 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-danger { + color: #000 !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-light { + color: #000 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; } + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-primary:hover, .link-primary:focus { + color: RGBA(34, 69, 99, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(34, 69, 99, var(--bs-link-underline-opacity, 1)) !important; } + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-secondary:hover, .link-secondary:focus { + color: RGBA(255, 193, 110, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 193, 110, var(--bs-link-underline-opacity, 1)) !important; } + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-success:hover, .link-success:focus { + color: RGBA(115, 156, 255, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(115, 156, 255, var(--bs-link-underline-opacity, 1)) !important; } + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-info:hover, .link-info:focus { + color: RGBA(211, 233, 232, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(211, 233, 232, var(--bs-link-underline-opacity, 1)) !important; } + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-warning:hover, .link-warning:focus { + color: RGBA(242, 151, 140, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(242, 151, 140, var(--bs-link-underline-opacity, 1)) !important; } + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-danger:hover, .link-danger:focus { + color: RGBA(242, 151, 140, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(242, 151, 140, var(--bs-link-underline-opacity, 1)) !important; } + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-light:hover, .link-light:focus { + color: RGBA(224, 247, 243, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(224, 247, 243, var(--bs-link-underline-opacity, 1)) !important; } + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-dark:hover, .link-dark:focus { + color: RGBA(45, 44, 53, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(45, 44, 53, var(--bs-link-underline-opacity, 1)) !important; } + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; } + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); } + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; } + .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; } + @media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; } } +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); } + +.ratio { + position: relative; + width: 100%; } + .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; } + .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + +.ratio-1x1 { + --bs-aspect-ratio: 100%; } + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); } + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); } + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; } + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; } + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; } + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + .visually-hidden:not(caption), + .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.float-start { + float: left !important; } + +.float-end { + float: right !important; } + +.float-none { + float: none !important; } + +.object-fit-contain { + object-fit: contain !important; } + +.object-fit-cover { + object-fit: cover !important; } + +.object-fit-fill { + object-fit: fill !important; } + +.object-fit-scale { + object-fit: scale-down !important; } + +.object-fit-none { + object-fit: none !important; } + +.opacity-0 { + opacity: 0 !important; } + +.opacity-25 { + opacity: 0.25 !important; } + +.opacity-50 { + opacity: 0.5 !important; } + +.opacity-75 { + opacity: 0.75 !important; } + +.opacity-100 { + opacity: 1 !important; } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.overflow-visible { + overflow: visible !important; } + +.overflow-scroll { + overflow: scroll !important; } + +.overflow-x-auto { + overflow-x: auto !important; } + +.overflow-x-hidden { + overflow-x: hidden !important; } + +.overflow-x-visible { + overflow-x: visible !important; } + +.overflow-x-scroll { + overflow-x: scroll !important; } + +.overflow-y-auto { + overflow-y: auto !important; } + +.overflow-y-hidden { + overflow-y: hidden !important; } + +.overflow-y-visible { + overflow-y: visible !important; } + +.overflow-y-scroll { + overflow-y: scroll !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-grid { + display: grid !important; } + +.d-inline-grid { + display: inline-grid !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: flex !important; } + +.d-inline-flex { + display: inline-flex !important; } + +.d-none { + display: none !important; } + +.shadow { + box-shadow: var(--bs-box-shadow) !important; } + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; } + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; } + +.shadow-none { + box-shadow: none !important; } + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: sticky !important; } + +.top-0 { + top: 0 !important; } + +.top-50 { + top: 50% !important; } + +.top-100 { + top: 100% !important; } + +.bottom-0 { + bottom: 0 !important; } + +.bottom-50 { + bottom: 50% !important; } + +.bottom-100 { + bottom: 100% !important; } + +.start-0 { + left: 0 !important; } + +.start-50 { + left: 50% !important; } + +.start-100 { + left: 100% !important; } + +.end-0 { + right: 0 !important; } + +.end-50 { + right: 50% !important; } + +.end-100 { + right: 100% !important; } + +.translate-middle { + transform: translate(-50%, -50%) !important; } + +.translate-middle-x { + transform: translateX(-50%) !important; } + +.translate-middle-y { + transform: translateY(-50%) !important; } + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-0 { + border: 0 !important; } + +.border-top, .td-page-meta__lastmod { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-end-0 { + border-right: 0 !important; } + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-start-0 { + border-left: 0 !important; } + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; } + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; } + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; } + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; } + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; } + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; } + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; } + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; } + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; } + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; } + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; } + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; } + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; } + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; } + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; } + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; } + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; } + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; } + +.border-1 { + border-width: 1px !important; } + +.border-2 { + border-width: 2px !important; } + +.border-3 { + border-width: 3px !important; } + +.border-4 { + border-width: 4px !important; } + +.border-5 { + border-width: 5px !important; } + +.border-opacity-10 { + --bs-border-opacity: 0.1; } + +.border-opacity-25 { + --bs-border-opacity: 0.25; } + +.border-opacity-50 { + --bs-border-opacity: 0.5; } + +.border-opacity-75 { + --bs-border-opacity: 0.75; } + +.border-opacity-100 { + --bs-border-opacity: 1; } + +.w-25 { + width: 25% !important; } + +.w-50 { + width: 50% !important; } + +.w-75 { + width: 75% !important; } + +.w-100 { + width: 100% !important; } + +.w-auto { + width: auto !important; } + +.mw-100 { + max-width: 100% !important; } + +.vw-100 { + width: 100vw !important; } + +.min-vw-100 { + min-width: 100vw !important; } + +.h-25 { + height: 25% !important; } + +.h-50 { + height: 50% !important; } + +.h-75 { + height: 75% !important; } + +.h-100 { + height: 100% !important; } + +.h-auto { + height: auto !important; } + +.mh-100 { + max-height: 100% !important; } + +.vh-100 { + height: 100vh !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.flex-fill { + flex: 1 1 auto !important; } + +.flex-row { + flex-direction: row !important; } + +.flex-column { + flex-direction: column !important; } + +.flex-row-reverse { + flex-direction: row-reverse !important; } + +.flex-column-reverse { + flex-direction: column-reverse !important; } + +.flex-grow-0 { + flex-grow: 0 !important; } + +.flex-grow-1 { + flex-grow: 1 !important; } + +.flex-shrink-0 { + flex-shrink: 0 !important; } + +.flex-shrink-1 { + flex-shrink: 1 !important; } + +.flex-wrap { + flex-wrap: wrap !important; } + +.flex-nowrap { + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; } + +.justify-content-start { + justify-content: flex-start !important; } + +.justify-content-end { + justify-content: flex-end !important; } + +.justify-content-center { + justify-content: center !important; } + +.justify-content-between { + justify-content: space-between !important; } + +.justify-content-around { + justify-content: space-around !important; } + +.justify-content-evenly { + justify-content: space-evenly !important; } + +.align-items-start { + align-items: flex-start !important; } + +.align-items-end { + align-items: flex-end !important; } + +.align-items-center { + align-items: center !important; } + +.align-items-baseline { + align-items: baseline !important; } + +.align-items-stretch { + align-items: stretch !important; } + +.align-content-start { + align-content: flex-start !important; } + +.align-content-end { + align-content: flex-end !important; } + +.align-content-center { + align-content: center !important; } + +.align-content-between { + align-content: space-between !important; } + +.align-content-around { + align-content: space-around !important; } + +.align-content-stretch { + align-content: stretch !important; } + +.align-self-auto { + align-self: auto !important; } + +.align-self-start { + align-self: flex-start !important; } + +.align-self-end { + align-self: flex-end !important; } + +.align-self-center { + align-self: center !important; } + +.align-self-baseline { + align-self: baseline !important; } + +.align-self-stretch { + align-self: stretch !important; } + +.order-first { + order: -1 !important; } + +.order-0 { + order: 0 !important; } + +.order-1 { + order: 1 !important; } + +.order-2 { + order: 2 !important; } + +.order-3 { + order: 3 !important; } + +.order-4 { + order: 4 !important; } + +.order-5 { + order: 5 !important; } + +.order-last { + order: 6 !important; } + +.m-0 { + margin: 0 !important; } + +.m-1 { + margin: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.m-auto { + margin: auto !important; } + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; } + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + +.mt-0 { + margin-top: 0 !important; } + +.mt-1 { + margin-top: 0.25rem !important; } + +.mt-2 { + margin-top: 0.5rem !important; } + +.mt-3 { + margin-top: 1rem !important; } + +.mt-4 { + margin-top: 1.5rem !important; } + +.mt-5 { + margin-top: 3rem !important; } + +.mt-auto { + margin-top: auto !important; } + +.me-0 { + margin-right: 0 !important; } + +.me-1 { + margin-right: 0.25rem !important; } + +.me-2 { + margin-right: 0.5rem !important; } + +.me-3 { + margin-right: 1rem !important; } + +.me-4 { + margin-right: 1.5rem !important; } + +.me-5 { + margin-right: 3rem !important; } + +.me-auto { + margin-right: auto !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.mb-1 { + margin-bottom: 0.25rem !important; } + +.mb-2 { + margin-bottom: 0.5rem !important; } + +.mb-3 { + margin-bottom: 1rem !important; } + +.mb-4 { + margin-bottom: 1.5rem !important; } + +.mb-5 { + margin-bottom: 3rem !important; } + +.mb-auto { + margin-bottom: auto !important; } + +.ms-0 { + margin-left: 0 !important; } + +.ms-1 { + margin-left: 0.25rem !important; } + +.ms-2 { + margin-left: 0.5rem !important; } + +.ms-3 { + margin-left: 1rem !important; } + +.ms-4 { + margin-left: 1.5rem !important; } + +.ms-5 { + margin-left: 3rem !important; } + +.ms-auto { + margin-left: auto !important; } + +.p-0 { + padding: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pt-1 { + padding-top: 0.25rem !important; } + +.pt-2 { + padding-top: 0.5rem !important; } + +.pt-3 { + padding-top: 1rem !important; } + +.pt-4 { + padding-top: 1.5rem !important; } + +.pt-5 { + padding-top: 3rem !important; } + +.pe-0 { + padding-right: 0 !important; } + +.pe-1 { + padding-right: 0.25rem !important; } + +.pe-2 { + padding-right: 0.5rem !important; } + +.pe-3 { + padding-right: 1rem !important; } + +.pe-4 { + padding-right: 1.5rem !important; } + +.pe-5 { + padding-right: 3rem !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.pb-1 { + padding-bottom: 0.25rem !important; } + +.pb-2 { + padding-bottom: 0.5rem !important; } + +.pb-3 { + padding-bottom: 1rem !important; } + +.pb-4 { + padding-bottom: 1.5rem !important; } + +.pb-5 { + padding-bottom: 3rem !important; } + +.ps-0 { + padding-left: 0 !important; } + +.ps-1 { + padding-left: 0.25rem !important; } + +.ps-2 { + padding-left: 0.5rem !important; } + +.ps-3 { + padding-left: 1rem !important; } + +.ps-4 { + padding-left: 1.5rem !important; } + +.ps-5 { + padding-left: 3rem !important; } + +.gap-0 { + gap: 0 !important; } + +.gap-1 { + gap: 0.25rem !important; } + +.gap-2 { + gap: 0.5rem !important; } + +.gap-3 { + gap: 1rem !important; } + +.gap-4 { + gap: 1.5rem !important; } + +.gap-5 { + gap: 3rem !important; } + +.row-gap-0 { + row-gap: 0 !important; } + +.row-gap-1 { + row-gap: 0.25rem !important; } + +.row-gap-2 { + row-gap: 0.5rem !important; } + +.row-gap-3 { + row-gap: 1rem !important; } + +.row-gap-4 { + row-gap: 1.5rem !important; } + +.row-gap-5 { + row-gap: 3rem !important; } + +.column-gap-0 { + column-gap: 0 !important; } + +.column-gap-1 { + column-gap: 0.25rem !important; } + +.column-gap-2 { + column-gap: 0.5rem !important; } + +.column-gap-3 { + column-gap: 1rem !important; } + +.column-gap-4 { + column-gap: 1.5rem !important; } + +.column-gap-5 { + column-gap: 3rem !important; } + +.font-monospace { + font-family: var(--bs-font-monospace) !important; } + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; } + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; } + +.fs-3 { + font-size: calc(1.275rem + 0.3vw) !important; } + +.fs-4 { + font-size: calc(1.26rem + 0.12vw) !important; } + +.fs-5 { + font-size: 1.15rem !important; } + +.fs-6 { + font-size: 1rem !important; } + +.fst-italic { + font-style: italic !important; } + +.fst-normal { + font-style: normal !important; } + +.fw-lighter { + font-weight: lighter !important; } + +.fw-light { + font-weight: 300 !important; } + +.fw-normal { + font-weight: 400 !important; } + +.fw-medium { + font-weight: 500 !important; } + +.fw-semibold { + font-weight: 600 !important; } + +.fw-bold { + font-weight: 700 !important; } + +.fw-bolder { + font-weight: bolder !important; } + +.lh-1 { + line-height: 1 !important; } + +.lh-sm { + line-height: 1.25 !important; } + +.lh-base { + line-height: 1.5 !important; } + +.lh-lg { + line-height: 2 !important; } + +.text-start { + text-align: left !important; } + +.text-end { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +.text-decoration-none { + text-decoration: none !important; } + +.text-decoration-underline { + text-decoration: underline !important; } + +.text-decoration-line-through { + text-decoration: line-through !important; } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.text-wrap { + white-space: normal !important; } + +.text-nowrap { + white-space: nowrap !important; } + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; } + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; } + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; } + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; } + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; } + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; } + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; } + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; } + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; } + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; } + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; } + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; } + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; } + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; } + +.text-body-secondary, .td-page-meta__lastmod { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; } + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; } + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; } + +.text-opacity-25 { + --bs-text-opacity: 0.25; } + +.text-opacity-50 { + --bs-text-opacity: 0.5; } + +.text-opacity-75 { + --bs-text-opacity: 0.75; } + +.text-opacity-100 { + --bs-text-opacity: 1; } + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; } + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; } + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; } + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; } + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; } + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; } + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; } + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; } + +.link-opacity-10 { + --bs-link-opacity: 0.1; } + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; } + +.link-opacity-25 { + --bs-link-opacity: 0.25; } + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; } + +.link-opacity-50 { + --bs-link-opacity: 0.5; } + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; } + +.link-opacity-75 { + --bs-link-opacity: 0.75; } + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; } + +.link-opacity-100 { + --bs-link-opacity: 1; } + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; } + +.link-offset-1 { + text-underline-offset: 0.125em !important; } + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; } + +.link-offset-2 { + text-underline-offset: 0.25em !important; } + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; } + +.link-offset-3 { + text-underline-offset: 0.375em !important; } + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; } + +.link-underline-primary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; } + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; } + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; } + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; } + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; } + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; } + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; } + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; } + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; } + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; } + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; } + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; } + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; } + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; } + +.bg-opacity-100 { + --bs-bg-opacity: 1; } + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; } + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; } + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; } + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; } + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; } + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; } + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; } + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; } + +.bg-gradient { + background-image: var(--bs-gradient) !important; } + +.user-select-all { + user-select: all !important; } + +.user-select-auto { + user-select: auto !important; } + +.user-select-none { + user-select: none !important; } + +.pe-none { + pointer-events: none !important; } + +.pe-auto { + pointer-events: auto !important; } + +.rounded { + border-radius: var(--bs-border-radius) !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; } + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; } + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; } + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; } + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; } + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; } + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; } + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; } + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; } + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; } + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; } + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; } + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; } + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; } + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +.z-n1 { + z-index: -1 !important; } + +.z-0 { + z-index: 0 !important; } + +.z-1 { + z-index: 1 !important; } + +.z-2 { + z-index: 2 !important; } + +.z-3 { + z-index: 3 !important; } + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; } + .float-sm-end { + float: right !important; } + .float-sm-none { + float: none !important; } + .object-fit-sm-contain { + object-fit: contain !important; } + .object-fit-sm-cover { + object-fit: cover !important; } + .object-fit-sm-fill { + object-fit: fill !important; } + .object-fit-sm-scale { + object-fit: scale-down !important; } + .object-fit-sm-none { + object-fit: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-grid { + display: grid !important; } + .d-sm-inline-grid { + display: inline-grid !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: flex !important; } + .d-sm-inline-flex { + display: inline-flex !important; } + .d-sm-none { + display: none !important; } + .flex-sm-fill { + flex: 1 1 auto !important; } + .flex-sm-row { + flex-direction: row !important; } + .flex-sm-column { + flex-direction: column !important; } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; } + .flex-sm-grow-0 { + flex-grow: 0 !important; } + .flex-sm-grow-1 { + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; } + .flex-sm-wrap { + flex-wrap: wrap !important; } + .flex-sm-nowrap { + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-sm-start { + justify-content: flex-start !important; } + .justify-content-sm-end { + justify-content: flex-end !important; } + .justify-content-sm-center { + justify-content: center !important; } + .justify-content-sm-between { + justify-content: space-between !important; } + .justify-content-sm-around { + justify-content: space-around !important; } + .justify-content-sm-evenly { + justify-content: space-evenly !important; } + .align-items-sm-start { + align-items: flex-start !important; } + .align-items-sm-end { + align-items: flex-end !important; } + .align-items-sm-center { + align-items: center !important; } + .align-items-sm-baseline { + align-items: baseline !important; } + .align-items-sm-stretch { + align-items: stretch !important; } + .align-content-sm-start { + align-content: flex-start !important; } + .align-content-sm-end { + align-content: flex-end !important; } + .align-content-sm-center { + align-content: center !important; } + .align-content-sm-between { + align-content: space-between !important; } + .align-content-sm-around { + align-content: space-around !important; } + .align-content-sm-stretch { + align-content: stretch !important; } + .align-self-sm-auto { + align-self: auto !important; } + .align-self-sm-start { + align-self: flex-start !important; } + .align-self-sm-end { + align-self: flex-end !important; } + .align-self-sm-center { + align-self: center !important; } + .align-self-sm-baseline { + align-self: baseline !important; } + .align-self-sm-stretch { + align-self: stretch !important; } + .order-sm-first { + order: -1 !important; } + .order-sm-0 { + order: 0 !important; } + .order-sm-1 { + order: 1 !important; } + .order-sm-2 { + order: 2 !important; } + .order-sm-3 { + order: 3 !important; } + .order-sm-4 { + order: 4 !important; } + .order-sm-5 { + order: 5 !important; } + .order-sm-last { + order: 6 !important; } + .m-sm-0 { + margin: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-sm-0 { + margin-top: 0 !important; } + .mt-sm-1 { + margin-top: 0.25rem !important; } + .mt-sm-2 { + margin-top: 0.5rem !important; } + .mt-sm-3 { + margin-top: 1rem !important; } + .mt-sm-4 { + margin-top: 1.5rem !important; } + .mt-sm-5 { + margin-top: 3rem !important; } + .mt-sm-auto { + margin-top: auto !important; } + .me-sm-0 { + margin-right: 0 !important; } + .me-sm-1 { + margin-right: 0.25rem !important; } + .me-sm-2 { + margin-right: 0.5rem !important; } + .me-sm-3 { + margin-right: 1rem !important; } + .me-sm-4 { + margin-right: 1.5rem !important; } + .me-sm-5 { + margin-right: 3rem !important; } + .me-sm-auto { + margin-right: auto !important; } + .mb-sm-0 { + margin-bottom: 0 !important; } + .mb-sm-1 { + margin-bottom: 0.25rem !important; } + .mb-sm-2 { + margin-bottom: 0.5rem !important; } + .mb-sm-3 { + margin-bottom: 1rem !important; } + .mb-sm-4 { + margin-bottom: 1.5rem !important; } + .mb-sm-5 { + margin-bottom: 3rem !important; } + .mb-sm-auto { + margin-bottom: auto !important; } + .ms-sm-0 { + margin-left: 0 !important; } + .ms-sm-1 { + margin-left: 0.25rem !important; } + .ms-sm-2 { + margin-left: 0.5rem !important; } + .ms-sm-3 { + margin-left: 1rem !important; } + .ms-sm-4 { + margin-left: 1.5rem !important; } + .ms-sm-5 { + margin-left: 3rem !important; } + .ms-sm-auto { + margin-left: auto !important; } + .p-sm-0 { + padding: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-sm-0 { + padding-top: 0 !important; } + .pt-sm-1 { + padding-top: 0.25rem !important; } + .pt-sm-2 { + padding-top: 0.5rem !important; } + .pt-sm-3 { + padding-top: 1rem !important; } + .pt-sm-4 { + padding-top: 1.5rem !important; } + .pt-sm-5 { + padding-top: 3rem !important; } + .pe-sm-0 { + padding-right: 0 !important; } + .pe-sm-1 { + padding-right: 0.25rem !important; } + .pe-sm-2 { + padding-right: 0.5rem !important; } + .pe-sm-3 { + padding-right: 1rem !important; } + .pe-sm-4 { + padding-right: 1.5rem !important; } + .pe-sm-5 { + padding-right: 3rem !important; } + .pb-sm-0 { + padding-bottom: 0 !important; } + .pb-sm-1 { + padding-bottom: 0.25rem !important; } + .pb-sm-2 { + padding-bottom: 0.5rem !important; } + .pb-sm-3 { + padding-bottom: 1rem !important; } + .pb-sm-4 { + padding-bottom: 1.5rem !important; } + .pb-sm-5 { + padding-bottom: 3rem !important; } + .ps-sm-0 { + padding-left: 0 !important; } + .ps-sm-1 { + padding-left: 0.25rem !important; } + .ps-sm-2 { + padding-left: 0.5rem !important; } + .ps-sm-3 { + padding-left: 1rem !important; } + .ps-sm-4 { + padding-left: 1.5rem !important; } + .ps-sm-5 { + padding-left: 3rem !important; } + .gap-sm-0 { + gap: 0 !important; } + .gap-sm-1 { + gap: 0.25rem !important; } + .gap-sm-2 { + gap: 0.5rem !important; } + .gap-sm-3 { + gap: 1rem !important; } + .gap-sm-4 { + gap: 1.5rem !important; } + .gap-sm-5 { + gap: 3rem !important; } + .row-gap-sm-0 { + row-gap: 0 !important; } + .row-gap-sm-1 { + row-gap: 0.25rem !important; } + .row-gap-sm-2 { + row-gap: 0.5rem !important; } + .row-gap-sm-3 { + row-gap: 1rem !important; } + .row-gap-sm-4 { + row-gap: 1.5rem !important; } + .row-gap-sm-5 { + row-gap: 3rem !important; } + .column-gap-sm-0 { + column-gap: 0 !important; } + .column-gap-sm-1 { + column-gap: 0.25rem !important; } + .column-gap-sm-2 { + column-gap: 0.5rem !important; } + .column-gap-sm-3 { + column-gap: 1rem !important; } + .column-gap-sm-4 { + column-gap: 1.5rem !important; } + .column-gap-sm-5 { + column-gap: 3rem !important; } + .text-sm-start { + text-align: left !important; } + .text-sm-end { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .float-md-start { + float: left !important; } + .float-md-end { + float: right !important; } + .float-md-none { + float: none !important; } + .object-fit-md-contain { + object-fit: contain !important; } + .object-fit-md-cover { + object-fit: cover !important; } + .object-fit-md-fill { + object-fit: fill !important; } + .object-fit-md-scale { + object-fit: scale-down !important; } + .object-fit-md-none { + object-fit: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-grid { + display: grid !important; } + .d-md-inline-grid { + display: inline-grid !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: flex !important; } + .d-md-inline-flex { + display: inline-flex !important; } + .d-md-none { + display: none !important; } + .flex-md-fill { + flex: 1 1 auto !important; } + .flex-md-row { + flex-direction: row !important; } + .flex-md-column { + flex-direction: column !important; } + .flex-md-row-reverse { + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + flex-direction: column-reverse !important; } + .flex-md-grow-0 { + flex-grow: 0 !important; } + .flex-md-grow-1 { + flex-grow: 1 !important; } + .flex-md-shrink-0 { + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + flex-shrink: 1 !important; } + .flex-md-wrap { + flex-wrap: wrap !important; } + .flex-md-nowrap { + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-md-start { + justify-content: flex-start !important; } + .justify-content-md-end { + justify-content: flex-end !important; } + .justify-content-md-center { + justify-content: center !important; } + .justify-content-md-between { + justify-content: space-between !important; } + .justify-content-md-around { + justify-content: space-around !important; } + .justify-content-md-evenly { + justify-content: space-evenly !important; } + .align-items-md-start { + align-items: flex-start !important; } + .align-items-md-end { + align-items: flex-end !important; } + .align-items-md-center { + align-items: center !important; } + .align-items-md-baseline { + align-items: baseline !important; } + .align-items-md-stretch { + align-items: stretch !important; } + .align-content-md-start { + align-content: flex-start !important; } + .align-content-md-end { + align-content: flex-end !important; } + .align-content-md-center { + align-content: center !important; } + .align-content-md-between { + align-content: space-between !important; } + .align-content-md-around { + align-content: space-around !important; } + .align-content-md-stretch { + align-content: stretch !important; } + .align-self-md-auto { + align-self: auto !important; } + .align-self-md-start { + align-self: flex-start !important; } + .align-self-md-end { + align-self: flex-end !important; } + .align-self-md-center { + align-self: center !important; } + .align-self-md-baseline { + align-self: baseline !important; } + .align-self-md-stretch { + align-self: stretch !important; } + .order-md-first { + order: -1 !important; } + .order-md-0 { + order: 0 !important; } + .order-md-1 { + order: 1 !important; } + .order-md-2 { + order: 2 !important; } + .order-md-3 { + order: 3 !important; } + .order-md-4 { + order: 4 !important; } + .order-md-5 { + order: 5 !important; } + .order-md-last { + order: 6 !important; } + .m-md-0 { + margin: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .m-md-auto { + margin: auto !important; } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-md-0 { + margin-top: 0 !important; } + .mt-md-1 { + margin-top: 0.25rem !important; } + .mt-md-2 { + margin-top: 0.5rem !important; } + .mt-md-3 { + margin-top: 1rem !important; } + .mt-md-4 { + margin-top: 1.5rem !important; } + .mt-md-5 { + margin-top: 3rem !important; } + .mt-md-auto { + margin-top: auto !important; } + .me-md-0 { + margin-right: 0 !important; } + .me-md-1 { + margin-right: 0.25rem !important; } + .me-md-2 { + margin-right: 0.5rem !important; } + .me-md-3 { + margin-right: 1rem !important; } + .me-md-4 { + margin-right: 1.5rem !important; } + .me-md-5 { + margin-right: 3rem !important; } + .me-md-auto { + margin-right: auto !important; } + .mb-md-0 { + margin-bottom: 0 !important; } + .mb-md-1 { + margin-bottom: 0.25rem !important; } + .mb-md-2 { + margin-bottom: 0.5rem !important; } + .mb-md-3 { + margin-bottom: 1rem !important; } + .mb-md-4 { + margin-bottom: 1.5rem !important; } + .mb-md-5 { + margin-bottom: 3rem !important; } + .mb-md-auto { + margin-bottom: auto !important; } + .ms-md-0 { + margin-left: 0 !important; } + .ms-md-1 { + margin-left: 0.25rem !important; } + .ms-md-2 { + margin-left: 0.5rem !important; } + .ms-md-3 { + margin-left: 1rem !important; } + .ms-md-4 { + margin-left: 1.5rem !important; } + .ms-md-5 { + margin-left: 3rem !important; } + .ms-md-auto { + margin-left: auto !important; } + .p-md-0 { + padding: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-md-0 { + padding-top: 0 !important; } + .pt-md-1 { + padding-top: 0.25rem !important; } + .pt-md-2 { + padding-top: 0.5rem !important; } + .pt-md-3 { + padding-top: 1rem !important; } + .pt-md-4 { + padding-top: 1.5rem !important; } + .pt-md-5 { + padding-top: 3rem !important; } + .pe-md-0 { + padding-right: 0 !important; } + .pe-md-1 { + padding-right: 0.25rem !important; } + .pe-md-2 { + padding-right: 0.5rem !important; } + .pe-md-3 { + padding-right: 1rem !important; } + .pe-md-4 { + padding-right: 1.5rem !important; } + .pe-md-5 { + padding-right: 3rem !important; } + .pb-md-0 { + padding-bottom: 0 !important; } + .pb-md-1 { + padding-bottom: 0.25rem !important; } + .pb-md-2 { + padding-bottom: 0.5rem !important; } + .pb-md-3 { + padding-bottom: 1rem !important; } + .pb-md-4 { + padding-bottom: 1.5rem !important; } + .pb-md-5 { + padding-bottom: 3rem !important; } + .ps-md-0 { + padding-left: 0 !important; } + .ps-md-1 { + padding-left: 0.25rem !important; } + .ps-md-2 { + padding-left: 0.5rem !important; } + .ps-md-3 { + padding-left: 1rem !important; } + .ps-md-4 { + padding-left: 1.5rem !important; } + .ps-md-5 { + padding-left: 3rem !important; } + .gap-md-0 { + gap: 0 !important; } + .gap-md-1 { + gap: 0.25rem !important; } + .gap-md-2 { + gap: 0.5rem !important; } + .gap-md-3 { + gap: 1rem !important; } + .gap-md-4 { + gap: 1.5rem !important; } + .gap-md-5 { + gap: 3rem !important; } + .row-gap-md-0 { + row-gap: 0 !important; } + .row-gap-md-1 { + row-gap: 0.25rem !important; } + .row-gap-md-2 { + row-gap: 0.5rem !important; } + .row-gap-md-3 { + row-gap: 1rem !important; } + .row-gap-md-4 { + row-gap: 1.5rem !important; } + .row-gap-md-5 { + row-gap: 3rem !important; } + .column-gap-md-0 { + column-gap: 0 !important; } + .column-gap-md-1 { + column-gap: 0.25rem !important; } + .column-gap-md-2 { + column-gap: 0.5rem !important; } + .column-gap-md-3 { + column-gap: 1rem !important; } + .column-gap-md-4 { + column-gap: 1.5rem !important; } + .column-gap-md-5 { + column-gap: 3rem !important; } + .text-md-start { + text-align: left !important; } + .text-md-end { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .float-lg-start { + float: left !important; } + .float-lg-end { + float: right !important; } + .float-lg-none { + float: none !important; } + .object-fit-lg-contain { + object-fit: contain !important; } + .object-fit-lg-cover { + object-fit: cover !important; } + .object-fit-lg-fill { + object-fit: fill !important; } + .object-fit-lg-scale { + object-fit: scale-down !important; } + .object-fit-lg-none { + object-fit: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block, .td-blog .td-rss-button { + display: block !important; } + .d-lg-grid { + display: grid !important; } + .d-lg-inline-grid { + display: inline-grid !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: flex !important; } + .d-lg-inline-flex { + display: inline-flex !important; } + .d-lg-none { + display: none !important; } + .flex-lg-fill { + flex: 1 1 auto !important; } + .flex-lg-row { + flex-direction: row !important; } + .flex-lg-column { + flex-direction: column !important; } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; } + .flex-lg-grow-0 { + flex-grow: 0 !important; } + .flex-lg-grow-1 { + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; } + .flex-lg-wrap { + flex-wrap: wrap !important; } + .flex-lg-nowrap { + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-lg-start { + justify-content: flex-start !important; } + .justify-content-lg-end { + justify-content: flex-end !important; } + .justify-content-lg-center { + justify-content: center !important; } + .justify-content-lg-between { + justify-content: space-between !important; } + .justify-content-lg-around { + justify-content: space-around !important; } + .justify-content-lg-evenly { + justify-content: space-evenly !important; } + .align-items-lg-start { + align-items: flex-start !important; } + .align-items-lg-end { + align-items: flex-end !important; } + .align-items-lg-center { + align-items: center !important; } + .align-items-lg-baseline { + align-items: baseline !important; } + .align-items-lg-stretch { + align-items: stretch !important; } + .align-content-lg-start { + align-content: flex-start !important; } + .align-content-lg-end { + align-content: flex-end !important; } + .align-content-lg-center { + align-content: center !important; } + .align-content-lg-between { + align-content: space-between !important; } + .align-content-lg-around { + align-content: space-around !important; } + .align-content-lg-stretch { + align-content: stretch !important; } + .align-self-lg-auto { + align-self: auto !important; } + .align-self-lg-start { + align-self: flex-start !important; } + .align-self-lg-end { + align-self: flex-end !important; } + .align-self-lg-center { + align-self: center !important; } + .align-self-lg-baseline { + align-self: baseline !important; } + .align-self-lg-stretch { + align-self: stretch !important; } + .order-lg-first { + order: -1 !important; } + .order-lg-0 { + order: 0 !important; } + .order-lg-1 { + order: 1 !important; } + .order-lg-2 { + order: 2 !important; } + .order-lg-3 { + order: 3 !important; } + .order-lg-4 { + order: 4 !important; } + .order-lg-5 { + order: 5 !important; } + .order-lg-last { + order: 6 !important; } + .m-lg-0 { + margin: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-lg-0 { + margin-top: 0 !important; } + .mt-lg-1 { + margin-top: 0.25rem !important; } + .mt-lg-2 { + margin-top: 0.5rem !important; } + .mt-lg-3 { + margin-top: 1rem !important; } + .mt-lg-4 { + margin-top: 1.5rem !important; } + .mt-lg-5 { + margin-top: 3rem !important; } + .mt-lg-auto { + margin-top: auto !important; } + .me-lg-0 { + margin-right: 0 !important; } + .me-lg-1 { + margin-right: 0.25rem !important; } + .me-lg-2 { + margin-right: 0.5rem !important; } + .me-lg-3 { + margin-right: 1rem !important; } + .me-lg-4 { + margin-right: 1.5rem !important; } + .me-lg-5 { + margin-right: 3rem !important; } + .me-lg-auto { + margin-right: auto !important; } + .mb-lg-0 { + margin-bottom: 0 !important; } + .mb-lg-1 { + margin-bottom: 0.25rem !important; } + .mb-lg-2 { + margin-bottom: 0.5rem !important; } + .mb-lg-3 { + margin-bottom: 1rem !important; } + .mb-lg-4 { + margin-bottom: 1.5rem !important; } + .mb-lg-5 { + margin-bottom: 3rem !important; } + .mb-lg-auto { + margin-bottom: auto !important; } + .ms-lg-0 { + margin-left: 0 !important; } + .ms-lg-1 { + margin-left: 0.25rem !important; } + .ms-lg-2 { + margin-left: 0.5rem !important; } + .ms-lg-3 { + margin-left: 1rem !important; } + .ms-lg-4 { + margin-left: 1.5rem !important; } + .ms-lg-5 { + margin-left: 3rem !important; } + .ms-lg-auto { + margin-left: auto !important; } + .p-lg-0 { + padding: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-lg-0 { + padding-top: 0 !important; } + .pt-lg-1 { + padding-top: 0.25rem !important; } + .pt-lg-2 { + padding-top: 0.5rem !important; } + .pt-lg-3 { + padding-top: 1rem !important; } + .pt-lg-4 { + padding-top: 1.5rem !important; } + .pt-lg-5 { + padding-top: 3rem !important; } + .pe-lg-0 { + padding-right: 0 !important; } + .pe-lg-1 { + padding-right: 0.25rem !important; } + .pe-lg-2 { + padding-right: 0.5rem !important; } + .pe-lg-3 { + padding-right: 1rem !important; } + .pe-lg-4 { + padding-right: 1.5rem !important; } + .pe-lg-5 { + padding-right: 3rem !important; } + .pb-lg-0 { + padding-bottom: 0 !important; } + .pb-lg-1 { + padding-bottom: 0.25rem !important; } + .pb-lg-2 { + padding-bottom: 0.5rem !important; } + .pb-lg-3 { + padding-bottom: 1rem !important; } + .pb-lg-4 { + padding-bottom: 1.5rem !important; } + .pb-lg-5 { + padding-bottom: 3rem !important; } + .ps-lg-0 { + padding-left: 0 !important; } + .ps-lg-1 { + padding-left: 0.25rem !important; } + .ps-lg-2 { + padding-left: 0.5rem !important; } + .ps-lg-3 { + padding-left: 1rem !important; } + .ps-lg-4 { + padding-left: 1.5rem !important; } + .ps-lg-5 { + padding-left: 3rem !important; } + .gap-lg-0 { + gap: 0 !important; } + .gap-lg-1 { + gap: 0.25rem !important; } + .gap-lg-2 { + gap: 0.5rem !important; } + .gap-lg-3 { + gap: 1rem !important; } + .gap-lg-4 { + gap: 1.5rem !important; } + .gap-lg-5 { + gap: 3rem !important; } + .row-gap-lg-0 { + row-gap: 0 !important; } + .row-gap-lg-1 { + row-gap: 0.25rem !important; } + .row-gap-lg-2 { + row-gap: 0.5rem !important; } + .row-gap-lg-3 { + row-gap: 1rem !important; } + .row-gap-lg-4 { + row-gap: 1.5rem !important; } + .row-gap-lg-5 { + row-gap: 3rem !important; } + .column-gap-lg-0 { + column-gap: 0 !important; } + .column-gap-lg-1 { + column-gap: 0.25rem !important; } + .column-gap-lg-2 { + column-gap: 0.5rem !important; } + .column-gap-lg-3 { + column-gap: 1rem !important; } + .column-gap-lg-4 { + column-gap: 1.5rem !important; } + .column-gap-lg-5 { + column-gap: 3rem !important; } + .text-lg-start { + text-align: left !important; } + .text-lg-end { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; } + .float-xl-end { + float: right !important; } + .float-xl-none { + float: none !important; } + .object-fit-xl-contain { + object-fit: contain !important; } + .object-fit-xl-cover { + object-fit: cover !important; } + .object-fit-xl-fill { + object-fit: fill !important; } + .object-fit-xl-scale { + object-fit: scale-down !important; } + .object-fit-xl-none { + object-fit: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-grid { + display: grid !important; } + .d-xl-inline-grid { + display: inline-grid !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: flex !important; } + .d-xl-inline-flex { + display: inline-flex !important; } + .d-xl-none { + display: none !important; } + .flex-xl-fill { + flex: 1 1 auto !important; } + .flex-xl-row { + flex-direction: row !important; } + .flex-xl-column { + flex-direction: column !important; } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xl-grow-0 { + flex-grow: 0 !important; } + .flex-xl-grow-1 { + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xl-wrap { + flex-wrap: wrap !important; } + .flex-xl-nowrap { + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xl-start { + justify-content: flex-start !important; } + .justify-content-xl-end { + justify-content: flex-end !important; } + .justify-content-xl-center { + justify-content: center !important; } + .justify-content-xl-between { + justify-content: space-between !important; } + .justify-content-xl-around { + justify-content: space-around !important; } + .justify-content-xl-evenly { + justify-content: space-evenly !important; } + .align-items-xl-start { + align-items: flex-start !important; } + .align-items-xl-end { + align-items: flex-end !important; } + .align-items-xl-center { + align-items: center !important; } + .align-items-xl-baseline { + align-items: baseline !important; } + .align-items-xl-stretch { + align-items: stretch !important; } + .align-content-xl-start { + align-content: flex-start !important; } + .align-content-xl-end { + align-content: flex-end !important; } + .align-content-xl-center { + align-content: center !important; } + .align-content-xl-between { + align-content: space-between !important; } + .align-content-xl-around { + align-content: space-around !important; } + .align-content-xl-stretch { + align-content: stretch !important; } + .align-self-xl-auto { + align-self: auto !important; } + .align-self-xl-start { + align-self: flex-start !important; } + .align-self-xl-end { + align-self: flex-end !important; } + .align-self-xl-center { + align-self: center !important; } + .align-self-xl-baseline { + align-self: baseline !important; } + .align-self-xl-stretch { + align-self: stretch !important; } + .order-xl-first { + order: -1 !important; } + .order-xl-0 { + order: 0 !important; } + .order-xl-1 { + order: 1 !important; } + .order-xl-2 { + order: 2 !important; } + .order-xl-3 { + order: 3 !important; } + .order-xl-4 { + order: 4 !important; } + .order-xl-5 { + order: 5 !important; } + .order-xl-last { + order: 6 !important; } + .m-xl-0 { + margin: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xl-0 { + margin-top: 0 !important; } + .mt-xl-1 { + margin-top: 0.25rem !important; } + .mt-xl-2 { + margin-top: 0.5rem !important; } + .mt-xl-3 { + margin-top: 1rem !important; } + .mt-xl-4 { + margin-top: 1.5rem !important; } + .mt-xl-5 { + margin-top: 3rem !important; } + .mt-xl-auto { + margin-top: auto !important; } + .me-xl-0 { + margin-right: 0 !important; } + .me-xl-1 { + margin-right: 0.25rem !important; } + .me-xl-2 { + margin-right: 0.5rem !important; } + .me-xl-3 { + margin-right: 1rem !important; } + .me-xl-4 { + margin-right: 1.5rem !important; } + .me-xl-5 { + margin-right: 3rem !important; } + .me-xl-auto { + margin-right: auto !important; } + .mb-xl-0 { + margin-bottom: 0 !important; } + .mb-xl-1 { + margin-bottom: 0.25rem !important; } + .mb-xl-2 { + margin-bottom: 0.5rem !important; } + .mb-xl-3 { + margin-bottom: 1rem !important; } + .mb-xl-4 { + margin-bottom: 1.5rem !important; } + .mb-xl-5 { + margin-bottom: 3rem !important; } + .mb-xl-auto { + margin-bottom: auto !important; } + .ms-xl-0 { + margin-left: 0 !important; } + .ms-xl-1 { + margin-left: 0.25rem !important; } + .ms-xl-2 { + margin-left: 0.5rem !important; } + .ms-xl-3 { + margin-left: 1rem !important; } + .ms-xl-4 { + margin-left: 1.5rem !important; } + .ms-xl-5 { + margin-left: 3rem !important; } + .ms-xl-auto { + margin-left: auto !important; } + .p-xl-0 { + padding: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xl-0 { + padding-top: 0 !important; } + .pt-xl-1 { + padding-top: 0.25rem !important; } + .pt-xl-2 { + padding-top: 0.5rem !important; } + .pt-xl-3 { + padding-top: 1rem !important; } + .pt-xl-4 { + padding-top: 1.5rem !important; } + .pt-xl-5 { + padding-top: 3rem !important; } + .pe-xl-0 { + padding-right: 0 !important; } + .pe-xl-1 { + padding-right: 0.25rem !important; } + .pe-xl-2 { + padding-right: 0.5rem !important; } + .pe-xl-3 { + padding-right: 1rem !important; } + .pe-xl-4 { + padding-right: 1.5rem !important; } + .pe-xl-5 { + padding-right: 3rem !important; } + .pb-xl-0 { + padding-bottom: 0 !important; } + .pb-xl-1 { + padding-bottom: 0.25rem !important; } + .pb-xl-2 { + padding-bottom: 0.5rem !important; } + .pb-xl-3 { + padding-bottom: 1rem !important; } + .pb-xl-4 { + padding-bottom: 1.5rem !important; } + .pb-xl-5 { + padding-bottom: 3rem !important; } + .ps-xl-0 { + padding-left: 0 !important; } + .ps-xl-1 { + padding-left: 0.25rem !important; } + .ps-xl-2 { + padding-left: 0.5rem !important; } + .ps-xl-3 { + padding-left: 1rem !important; } + .ps-xl-4 { + padding-left: 1.5rem !important; } + .ps-xl-5 { + padding-left: 3rem !important; } + .gap-xl-0 { + gap: 0 !important; } + .gap-xl-1 { + gap: 0.25rem !important; } + .gap-xl-2 { + gap: 0.5rem !important; } + .gap-xl-3 { + gap: 1rem !important; } + .gap-xl-4 { + gap: 1.5rem !important; } + .gap-xl-5 { + gap: 3rem !important; } + .row-gap-xl-0 { + row-gap: 0 !important; } + .row-gap-xl-1 { + row-gap: 0.25rem !important; } + .row-gap-xl-2 { + row-gap: 0.5rem !important; } + .row-gap-xl-3 { + row-gap: 1rem !important; } + .row-gap-xl-4 { + row-gap: 1.5rem !important; } + .row-gap-xl-5 { + row-gap: 3rem !important; } + .column-gap-xl-0 { + column-gap: 0 !important; } + .column-gap-xl-1 { + column-gap: 0.25rem !important; } + .column-gap-xl-2 { + column-gap: 0.5rem !important; } + .column-gap-xl-3 { + column-gap: 1rem !important; } + .column-gap-xl-4 { + column-gap: 1.5rem !important; } + .column-gap-xl-5 { + column-gap: 3rem !important; } + .text-xl-start { + text-align: left !important; } + .text-xl-end { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; } + .float-xxl-end { + float: right !important; } + .float-xxl-none { + float: none !important; } + .object-fit-xxl-contain { + object-fit: contain !important; } + .object-fit-xxl-cover { + object-fit: cover !important; } + .object-fit-xxl-fill { + object-fit: fill !important; } + .object-fit-xxl-scale { + object-fit: scale-down !important; } + .object-fit-xxl-none { + object-fit: none !important; } + .d-xxl-inline { + display: inline !important; } + .d-xxl-inline-block { + display: inline-block !important; } + .d-xxl-block { + display: block !important; } + .d-xxl-grid { + display: grid !important; } + .d-xxl-inline-grid { + display: inline-grid !important; } + .d-xxl-table { + display: table !important; } + .d-xxl-table-row { + display: table-row !important; } + .d-xxl-table-cell { + display: table-cell !important; } + .d-xxl-flex { + display: flex !important; } + .d-xxl-inline-flex { + display: inline-flex !important; } + .d-xxl-none { + display: none !important; } + .flex-xxl-fill { + flex: 1 1 auto !important; } + .flex-xxl-row { + flex-direction: row !important; } + .flex-xxl-column { + flex-direction: column !important; } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xxl-grow-0 { + flex-grow: 0 !important; } + .flex-xxl-grow-1 { + flex-grow: 1 !important; } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xxl-wrap { + flex-wrap: wrap !important; } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xxl-start { + justify-content: flex-start !important; } + .justify-content-xxl-end { + justify-content: flex-end !important; } + .justify-content-xxl-center { + justify-content: center !important; } + .justify-content-xxl-between { + justify-content: space-between !important; } + .justify-content-xxl-around { + justify-content: space-around !important; } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; } + .align-items-xxl-start { + align-items: flex-start !important; } + .align-items-xxl-end { + align-items: flex-end !important; } + .align-items-xxl-center { + align-items: center !important; } + .align-items-xxl-baseline { + align-items: baseline !important; } + .align-items-xxl-stretch { + align-items: stretch !important; } + .align-content-xxl-start { + align-content: flex-start !important; } + .align-content-xxl-end { + align-content: flex-end !important; } + .align-content-xxl-center { + align-content: center !important; } + .align-content-xxl-between { + align-content: space-between !important; } + .align-content-xxl-around { + align-content: space-around !important; } + .align-content-xxl-stretch { + align-content: stretch !important; } + .align-self-xxl-auto { + align-self: auto !important; } + .align-self-xxl-start { + align-self: flex-start !important; } + .align-self-xxl-end { + align-self: flex-end !important; } + .align-self-xxl-center { + align-self: center !important; } + .align-self-xxl-baseline { + align-self: baseline !important; } + .align-self-xxl-stretch { + align-self: stretch !important; } + .order-xxl-first { + order: -1 !important; } + .order-xxl-0 { + order: 0 !important; } + .order-xxl-1 { + order: 1 !important; } + .order-xxl-2 { + order: 2 !important; } + .order-xxl-3 { + order: 3 !important; } + .order-xxl-4 { + order: 4 !important; } + .order-xxl-5 { + order: 5 !important; } + .order-xxl-last { + order: 6 !important; } + .m-xxl-0 { + margin: 0 !important; } + .m-xxl-1 { + margin: 0.25rem !important; } + .m-xxl-2 { + margin: 0.5rem !important; } + .m-xxl-3 { + margin: 1rem !important; } + .m-xxl-4 { + margin: 1.5rem !important; } + .m-xxl-5 { + margin: 3rem !important; } + .m-xxl-auto { + margin: auto !important; } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xxl-0 { + margin-top: 0 !important; } + .mt-xxl-1 { + margin-top: 0.25rem !important; } + .mt-xxl-2 { + margin-top: 0.5rem !important; } + .mt-xxl-3 { + margin-top: 1rem !important; } + .mt-xxl-4 { + margin-top: 1.5rem !important; } + .mt-xxl-5 { + margin-top: 3rem !important; } + .mt-xxl-auto { + margin-top: auto !important; } + .me-xxl-0 { + margin-right: 0 !important; } + .me-xxl-1 { + margin-right: 0.25rem !important; } + .me-xxl-2 { + margin-right: 0.5rem !important; } + .me-xxl-3 { + margin-right: 1rem !important; } + .me-xxl-4 { + margin-right: 1.5rem !important; } + .me-xxl-5 { + margin-right: 3rem !important; } + .me-xxl-auto { + margin-right: auto !important; } + .mb-xxl-0 { + margin-bottom: 0 !important; } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; } + .mb-xxl-3 { + margin-bottom: 1rem !important; } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; } + .mb-xxl-5 { + margin-bottom: 3rem !important; } + .mb-xxl-auto { + margin-bottom: auto !important; } + .ms-xxl-0 { + margin-left: 0 !important; } + .ms-xxl-1 { + margin-left: 0.25rem !important; } + .ms-xxl-2 { + margin-left: 0.5rem !important; } + .ms-xxl-3 { + margin-left: 1rem !important; } + .ms-xxl-4 { + margin-left: 1.5rem !important; } + .ms-xxl-5 { + margin-left: 3rem !important; } + .ms-xxl-auto { + margin-left: auto !important; } + .p-xxl-0 { + padding: 0 !important; } + .p-xxl-1 { + padding: 0.25rem !important; } + .p-xxl-2 { + padding: 0.5rem !important; } + .p-xxl-3 { + padding: 1rem !important; } + .p-xxl-4 { + padding: 1.5rem !important; } + .p-xxl-5 { + padding: 3rem !important; } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xxl-0 { + padding-top: 0 !important; } + .pt-xxl-1 { + padding-top: 0.25rem !important; } + .pt-xxl-2 { + padding-top: 0.5rem !important; } + .pt-xxl-3 { + padding-top: 1rem !important; } + .pt-xxl-4 { + padding-top: 1.5rem !important; } + .pt-xxl-5 { + padding-top: 3rem !important; } + .pe-xxl-0 { + padding-right: 0 !important; } + .pe-xxl-1 { + padding-right: 0.25rem !important; } + .pe-xxl-2 { + padding-right: 0.5rem !important; } + .pe-xxl-3 { + padding-right: 1rem !important; } + .pe-xxl-4 { + padding-right: 1.5rem !important; } + .pe-xxl-5 { + padding-right: 3rem !important; } + .pb-xxl-0 { + padding-bottom: 0 !important; } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; } + .pb-xxl-3 { + padding-bottom: 1rem !important; } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; } + .pb-xxl-5 { + padding-bottom: 3rem !important; } + .ps-xxl-0 { + padding-left: 0 !important; } + .ps-xxl-1 { + padding-left: 0.25rem !important; } + .ps-xxl-2 { + padding-left: 0.5rem !important; } + .ps-xxl-3 { + padding-left: 1rem !important; } + .ps-xxl-4 { + padding-left: 1.5rem !important; } + .ps-xxl-5 { + padding-left: 3rem !important; } + .gap-xxl-0 { + gap: 0 !important; } + .gap-xxl-1 { + gap: 0.25rem !important; } + .gap-xxl-2 { + gap: 0.5rem !important; } + .gap-xxl-3 { + gap: 1rem !important; } + .gap-xxl-4 { + gap: 1.5rem !important; } + .gap-xxl-5 { + gap: 3rem !important; } + .row-gap-xxl-0 { + row-gap: 0 !important; } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; } + .row-gap-xxl-3 { + row-gap: 1rem !important; } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; } + .row-gap-xxl-5 { + row-gap: 3rem !important; } + .column-gap-xxl-0 { + column-gap: 0 !important; } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; } + .column-gap-xxl-3 { + column-gap: 1rem !important; } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; } + .column-gap-xxl-5 { + column-gap: 3rem !important; } + .text-xxl-start { + text-align: left !important; } + .text-xxl-end { + text-align: right !important; } + .text-xxl-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; } + .fs-2 { + font-size: 2rem !important; } + .fs-3 { + font-size: 1.5rem !important; } + .fs-4 { + font-size: 1.35rem !important; } } + +@media print { + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-grid { + display: grid !important; } + .d-print-inline-grid { + display: inline-grid !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: flex !important; } + .d-print-inline-flex { + display: inline-flex !important; } + .d-print-none { + display: none !important; } } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa, .td-search__icon:before { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, .td-search__icon:before, +.fa-classic, +.fa-sharp, +.fas, +.td-offline-search-results__close-button:after, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, .td-offline-search-results__close-button:after, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07142857em; + vertical-align: 0.05357143em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04166667em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + animation-name: fa-beat; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + animation-name: fa-bounce; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + animation-name: fa-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + animation-name: fa-beat-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + animation-name: fa-flip; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + animation-name: fa-shake; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + animation-name: fa-spin; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 2s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + animation-name: fa-spin; + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + animation-delay: -1ms; + animation-duration: 1ms; + animation-iteration-count: 1; + transition-delay: 0s; + transition-duration: 0s; } } + +@keyframes fa-beat { + 0%, 90% { + transform: scale(1); } + 45% { + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-bounce { + 0% { + transform: scale(1, 1) translateY(0); } + 10% { + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + transform: scale(1, 1) translateY(0); } + 100% { + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + transform: scale(1); } + 50% { + opacity: 1; + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-flip { + 50% { + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-shake { + 0% { + transform: rotate(-15deg); } + 4% { + transform: rotate(15deg); } + 8%, 24% { + transform: rotate(-18deg); } + 12%, 28% { + transform: rotate(18deg); } + 16% { + transform: rotate(-22deg); } + 20% { + transform: rotate(22deg); } + 32% { + transform: rotate(-12deg); } + 36% { + transform: rotate(12deg); } + 40%, 100% { + transform: rotate(0deg); } } + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(360deg); } } + +.fa-rotate-90 { + transform: rotate(90deg); } + +.fa-rotate-180 { + transform: rotate(180deg); } + +.fa-rotate-270 { + transform: rotate(270deg); } + +.fa-flip-horizontal { + transform: scale(-1, 1); } + +.fa-flip-vertical { + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + transform: scale(-1, -1); } + +.fa-rotate-by { + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, .td-offline-search-results__close-button:after, +.fa-solid { + font-weight: 900; } + +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +/* +Projects can override this file. For details, see: +https://www.docsy.dev/docs/adding-content/lookandfeel/#project-style-files +*/ +.td-border-top { + border: none; + border-top: 1px solid #eee; } + +.td-border-none { + border: none; } + +.td-block-padding, .td-default main section { + padding-top: 4rem; + padding-bottom: 4rem; } + @media (min-width: 768px) { + .td-block-padding, .td-default main section { + padding-top: 5rem; + padding-bottom: 5rem; } } +.td-overlay { + position: relative; } + .td-overlay::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .td-overlay--dark::after { + background-color: rgba(64, 63, 76, 0.3); } + .td-overlay--light::after { + background-color: rgba(211, 243, 238, 0.3); } + .td-overlay__inner { + position: relative; + z-index: 1; } + +@media (min-width: 992px) { + .td-max-width-on-larger-screens, .td-card.card, .td-card-group.card-group, .td-content > .tab-content .tab-pane, .td-content .footnotes, + .td-content > .alert, + .td-content > .highlight, + .td-content > .lead, + .td-content > .td-table, + .td-box .td-content > table, + .td-content > table, + .td-content > blockquote, + .td-content > dl dd, + .td-content > h1, + .td-content > .h1, + .td-content > h2, + .td-content > .h2, + .td-content > ol, + .td-content > p, + .td-content > pre, + .td-content > ul { + max-width: 80%; } } + +.-bg-blue { + color: #fff; + background-color: #0d6efd; } + +.-bg-blue p:not(.p-initial) > a { + color: #81b3fe; } + .-bg-blue p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-blue { + color: #0d6efd; } + +.-bg-indigo { + color: #fff; + background-color: #6610f2; } + +.-bg-indigo p:not(.p-initial) > a { + color: #85b6fe; } + .-bg-indigo p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-indigo { + color: #6610f2; } + +.-bg-purple { + color: #fff; + background-color: #6f42c1; } + +.-bg-purple p:not(.p-initial) > a { + color: #84b5fe; } + .-bg-purple p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-purple { + color: #6f42c1; } + +.-bg-pink { + color: #fff; + background-color: #d63384; } + +.-bg-pink p:not(.p-initial) > a { + color: #81b4fe; } + .-bg-pink p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-pink { + color: #d63384; } + +.-bg-red { + color: #fff; + background-color: #dc3545; } + +.-bg-red p:not(.p-initial) > a { + color: #7db1fe; } + .-bg-red p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-red { + color: #dc3545; } + +.-bg-orange { + color: #000; + background-color: #fd7e14; } + +.-bg-orange p:not(.p-initial) > a { + color: #073b87; } + .-bg-orange p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-orange { + color: #fd7e14; } + +.-bg-yellow { + color: #000; + background-color: #ffc107; } + +.-bg-yellow p:not(.p-initial) > a { + color: #073982; } + .-bg-yellow p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-yellow { + color: #ffc107; } + +.-bg-green { + color: #fff; + background-color: #198754; } + +.-bg-green p:not(.p-initial) > a { + color: #b3d2fe; } + .-bg-green p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-green { + color: #198754; } + +.-bg-teal { + color: #000; + background-color: #20c997; } + +.-bg-teal p:not(.p-initial) > a { + color: #063274; } + .-bg-teal p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-teal { + color: #20c997; } + +.-bg-cyan { + color: #000; + background-color: #0dcaf0; } + +.-bg-cyan p:not(.p-initial) > a { + color: #06377e; } + .-bg-cyan p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-cyan { + color: #0dcaf0; } + +.-bg-black { + color: #fff; + background-color: #000; } + +.-bg-black p:not(.p-initial) > a { + color: white; } + .-bg-black p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-black { + color: #000; } + +.-bg-white { + color: #000; + background-color: #fff; } + +.-bg-white p:not(.p-initial) > a { + color: #0d6efd; } + .-bg-white p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-white { + color: #fff; } + +.-bg-gray { + color: #fff; + background-color: #6c757d; } + +.-bg-gray p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-gray p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-gray { + color: #6c757d; } + +.-bg-gray-dark { + color: #fff; + background-color: #343a40; } + +.-bg-gray-dark p:not(.p-initial) > a { + color: #c8deff; } + .-bg-gray-dark p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-gray-dark { + color: #343a40; } + +.-bg-primary { + color: #fff; + background-color: #30638e; } + +.-bg-primary p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-primary p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-primary { + color: #30638e; } + +.-bg-secondary { + color: #000; + background-color: #ffa630; } + +.-bg-secondary p:not(.p-initial) > a { + color: #084196; } + .-bg-secondary p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-secondary { + color: #ffa630; } + +.-bg-success { + color: #000; + background-color: #3772ff; } + +.-bg-success p:not(.p-initial) > a { + color: #08439a; } + .-bg-success p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-success { + color: #3772ff; } + +.-bg-info { + color: #000; + background-color: #c0e0de; } + +.-bg-info p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-info p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-info { + color: #c0e0de; } + +.-bg-warning { + color: #000; + background-color: #ed6a5a; } + +.-bg-warning p:not(.p-initial) > a { + color: #0847a2; } + .-bg-warning p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-warning { + color: #ed6a5a; } + +.-bg-danger { + color: #000; + background-color: #ed6a5a; } + +.-bg-danger p:not(.p-initial) > a { + color: #0847a2; } + .-bg-danger p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-danger { + color: #ed6a5a; } + +.-bg-light { + color: #000; + background-color: #d3f3ee; } + +.-bg-light p:not(.p-initial) > a { + color: #0c62e1; } + .-bg-light p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-light { + color: #d3f3ee; } + +.-bg-dark { + color: #fff; + background-color: #403f4c; } + +.-bg-dark p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-dark p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-dark { + color: #403f4c; } + +.-bg-100 { + color: #000; + background-color: #f8f9fa; } + +.-bg-100 p:not(.p-initial) > a { + color: #0d6bf7; } + .-bg-100 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-100 { + color: #f8f9fa; } + +.-bg-200 { + color: #000; + background-color: #e9ecef; } + +.-bg-200 p:not(.p-initial) > a { + color: #0c66ea; } + .-bg-200 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-200 { + color: #e9ecef; } + +.-bg-300 { + color: #000; + background-color: #dee2e6; } + +.-bg-300 p:not(.p-initial) > a { + color: #0c61e0; } + .-bg-300 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-300 { + color: #dee2e6; } + +.-bg-400 { + color: #000; + background-color: #ced4da; } + +.-bg-400 p:not(.p-initial) > a { + color: #0b5bd2; } + .-bg-400 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-400 { + color: #ced4da; } + +.-bg-500 { + color: #000; + background-color: #adb5bd; } + +.-bg-500 p:not(.p-initial) > a { + color: #094eb4; } + .-bg-500 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-500 { + color: #adb5bd; } + +.-bg-600 { + color: #fff; + background-color: #6c757d; } + +.-bg-600 p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-600 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-600 { + color: #6c757d; } + +.-bg-700 { + color: #fff; + background-color: #495057; } + +.-bg-700 p:not(.p-initial) > a { + color: #b3d2fe; } + .-bg-700 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-700 { + color: #495057; } + +.-bg-800 { + color: #fff; + background-color: #343a40; } + +.-bg-800 p:not(.p-initial) > a { + color: #c8deff; } + .-bg-800 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-800 { + color: #343a40; } + +.-bg-900 { + color: #fff; + background-color: #212529; } + +.-bg-900 p:not(.p-initial) > a { + color: #dceaff; } + .-bg-900 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-900 { + color: #212529; } + +.-bg-0 { + color: #fff; + background-color: #403f4c; } + +.-bg-0 p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-0 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-0 { + color: #403f4c; } + +.-bg-1 { + color: #fff; + background-color: #30638e; } + +.-bg-1 p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-1 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-1 { + color: #30638e; } + +.-bg-2 { + color: #000; + background-color: #ffa630; } + +.-bg-2 p:not(.p-initial) > a { + color: #084196; } + .-bg-2 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-2 { + color: #ffa630; } + +.-bg-3 { + color: #000; + background-color: #c0e0de; } + +.-bg-3 p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-3 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-3 { + color: #c0e0de; } + +.-bg-4 { + color: #000; + background-color: #fff; } + +.-bg-4 p:not(.p-initial) > a { + color: #0d6efd; } + .-bg-4 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-4 { + color: #fff; } + +.-bg-5 { + color: #fff; + background-color: #6c757d; } + +.-bg-5 p:not(.p-initial) > a { + color: #90bdfe; } + .-bg-5 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-5 { + color: #6c757d; } + +.-bg-6 { + color: #000; + background-color: #3772ff; } + +.-bg-6 p:not(.p-initial) > a { + color: #08439a; } + .-bg-6 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-6 { + color: #3772ff; } + +.-bg-7 { + color: #000; + background-color: #ed6a5a; } + +.-bg-7 p:not(.p-initial) > a { + color: #0847a2; } + .-bg-7 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-7 { + color: #ed6a5a; } + +.-bg-8 { + color: #fff; + background-color: #403f4c; } + +.-bg-8 p:not(.p-initial) > a { + color: #bdd7fe; } + .-bg-8 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-8 { + color: #403f4c; } + +.-bg-9 { + color: #000; + background-color: #ed6a5a; } + +.-bg-9 p:not(.p-initial) > a { + color: #0847a2; } + .-bg-9 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-9 { + color: #ed6a5a; } + +.-bg-10 { + color: #fff; + background-color: #30638e; } + +.-bg-10 p:not(.p-initial) > a { + color: #a5c9fe; } + .-bg-10 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-10 { + color: #30638e; } + +.-bg-11 { + color: #000; + background-color: #ffa630; } + +.-bg-11 p:not(.p-initial) > a { + color: #084196; } + .-bg-11 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-11 { + color: #ffa630; } + +.-bg-12 { + color: #000; + background-color: #c0e0de; } + +.-bg-12 p:not(.p-initial) > a { + color: #0b5ace; } + .-bg-12 p:not(.p-initial) > a:hover { + color: #094db1; } + +.-text-12 { + color: #c0e0de; } + +.td-table:not(.td-initial), .td-content table:not(.td-initial), .td-box table:not(.td-initial) { + display: block; } + +.td-box--height-min { + min-height: 300px; } + +.td-box--height-med { + min-height: 400px; } + +.td-box--height-max { + min-height: 500px; } + +.td-box--height-full { + min-height: 100vh; } + +@media (min-width: 768px) { + .td-box--height-min { + min-height: 450px; } + .td-box--height-med { + min-height: 500px; } + .td-box--height-max { + min-height: 650px; } } + +.td-box .row { + padding-left: 5vw; + padding-right: 5vw; } + +.td-box.linkbox { + padding: 5vh 5vw; } + +.td-box--0 { + color: #fff; + background-color: #403f4c; } + .td-box--0 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--0 p > a, .td-box--0 span > a { + color: #bdd7fe; } + .td-box--0 p > a:hover, .td-box--0 span > a:hover { + color: #d1e3fe; } + +.td-box--1 { + color: #fff; + background-color: #30638e; } + .td-box--1 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--1 p > a, .td-box--1 span > a { + color: #a5c9fe; } + .td-box--1 p > a:hover, .td-box--1 span > a:hover { + color: #c0d9fe; } + +.td-box--2 { + color: #000; + background-color: #ffa630; } + .td-box--2 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--2 p > a, .td-box--2 span > a { + color: #084196; } + .td-box--2 p > a:hover, .td-box--2 span > a:hover { + color: #062e69; } + +.td-box--3 { + color: #000; + background-color: #c0e0de; } + .td-box--3 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--3 p > a, .td-box--3 span > a { + color: #0b5ace; } + .td-box--3 p > a:hover, .td-box--3 span > a:hover { + color: #083f90; } + +.td-box--4 { + color: #000; + background-color: #fff; } + .td-box--4 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--4 p > a, .td-box--4 span > a { + color: #0d6efd; } + .td-box--4 p > a:hover, .td-box--4 span > a:hover { + color: #094db1; } + +.td-box--5 { + color: #fff; + background-color: #6c757d; } + .td-box--5 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--5 p > a, .td-box--5 span > a { + color: #90bdfe; } + .td-box--5 p > a:hover, .td-box--5 span > a:hover { + color: #b1d1fe; } + +.td-box--6 { + color: #000; + background-color: #3772ff; } + .td-box--6 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #3772ff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--6 p > a, .td-box--6 span > a { + color: #08439a; } + .td-box--6 p > a:hover, .td-box--6 span > a:hover { + color: #062f6c; } + +.td-box--7 { + color: #000; + background-color: #ed6a5a; } + .td-box--7 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--7 p > a, .td-box--7 span > a { + color: #0847a2; } + .td-box--7 p > a:hover, .td-box--7 span > a:hover { + color: #063271; } + +.td-box--8 { + color: #fff; + background-color: #403f4c; } + .td-box--8 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--8 p > a, .td-box--8 span > a { + color: #bdd7fe; } + .td-box--8 p > a:hover, .td-box--8 span > a:hover { + color: #d1e3fe; } + +.td-box--9 { + color: #000; + background-color: #ed6a5a; } + .td-box--9 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--9 p > a, .td-box--9 span > a { + color: #0847a2; } + .td-box--9 p > a:hover, .td-box--9 span > a:hover { + color: #063271; } + +.td-box--10 { + color: #fff; + background-color: #30638e; } + .td-box--10 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--10 p > a, .td-box--10 span > a { + color: #a5c9fe; } + .td-box--10 p > a:hover, .td-box--10 span > a:hover { + color: #c0d9fe; } + +.td-box--11 { + color: #000; + background-color: #ffa630; } + .td-box--11 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--11 p > a, .td-box--11 span > a { + color: #084196; } + .td-box--11 p > a:hover, .td-box--11 span > a:hover { + color: #062e69; } + +.td-box--12 { + color: #000; + background-color: #c0e0de; } + .td-box--12 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--12 p > a, .td-box--12 span > a { + color: #0b5ace; } + .td-box--12 p > a:hover, .td-box--12 span > a:hover { + color: #083f90; } + +.td-box--blue { + color: #fff; + background-color: #0d6efd; } + .td-box--blue .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #0d6efd transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--blue p > a, .td-box--blue span > a { + color: #81b3fe; } + .td-box--blue p > a:hover, .td-box--blue span > a:hover { + color: #a7cafe; } + +.td-box--indigo { + color: #fff; + background-color: #6610f2; } + .td-box--indigo .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6610f2 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--indigo p > a, .td-box--indigo span > a { + color: #85b6fe; } + .td-box--indigo p > a:hover, .td-box--indigo span > a:hover { + color: #aaccfe; } + +.td-box--purple { + color: #fff; + background-color: #6f42c1; } + .td-box--purple .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6f42c1 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--purple p > a, .td-box--purple span > a { + color: #84b5fe; } + .td-box--purple p > a:hover, .td-box--purple span > a:hover { + color: #a9cbfe; } + +.td-box--pink { + color: #fff; + background-color: #d63384; } + .td-box--pink .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #d63384 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--pink p > a, .td-box--pink span > a { + color: #81b4fe; } + .td-box--pink p > a:hover, .td-box--pink span > a:hover { + color: #a7cbfe; } + +.td-box--red { + color: #fff; + background-color: #dc3545; } + .td-box--red .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #dc3545 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--red p > a, .td-box--red span > a { + color: #7db1fe; } + .td-box--red p > a:hover, .td-box--red span > a:hover { + color: #a4c8fe; } + +.td-box--orange { + color: #000; + background-color: #fd7e14; } + .td-box--orange .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fd7e14 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--orange p > a, .td-box--orange span > a { + color: #073b87; } + .td-box--orange p > a:hover, .td-box--orange span > a:hover { + color: #05295f; } + +.td-box--yellow { + color: #000; + background-color: #ffc107; } + .td-box--yellow .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffc107 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--yellow p > a, .td-box--yellow span > a { + color: #073982; } + .td-box--yellow p > a:hover, .td-box--yellow span > a:hover { + color: #05285b; } + +.td-box--green { + color: #fff; + background-color: #198754; } + .td-box--green .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #198754 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--green p > a, .td-box--green span > a { + color: #b3d2fe; } + .td-box--green p > a:hover, .td-box--green span > a:hover { + color: #cae0fe; } + +.td-box--teal { + color: #000; + background-color: #20c997; } + .td-box--teal .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #20c997 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--teal p > a, .td-box--teal span > a { + color: #063274; } + .td-box--teal p > a:hover, .td-box--teal span > a:hover { + color: #042351; } + +.td-box--cyan { + color: #000; + background-color: #0dcaf0; } + .td-box--cyan .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #0dcaf0 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--cyan p > a, .td-box--cyan span > a { + color: #06377e; } + .td-box--cyan p > a:hover, .td-box--cyan span > a:hover { + color: #042758; } + +.td-box--black { + color: #fff; + background-color: #000; } + .td-box--black .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #000 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--black p > a, .td-box--black span > a { + color: white; } + .td-box--black p > a:hover, .td-box--black span > a:hover { + color: white; } + +.td-box--white { + color: #000; + background-color: #fff; } + .td-box--white .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #fff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--white p > a, .td-box--white span > a { + color: #0d6efd; } + .td-box--white p > a:hover, .td-box--white span > a:hover { + color: #094db1; } + +.td-box--gray { + color: #fff; + background-color: #6c757d; } + .td-box--gray .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--gray p > a, .td-box--gray span > a { + color: #90bdfe; } + .td-box--gray p > a:hover, .td-box--gray span > a:hover { + color: #b1d1fe; } + +.td-box--gray-dark { + color: #fff; + background-color: #343a40; } + .td-box--gray-dark .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #343a40 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--gray-dark p > a, .td-box--gray-dark span > a { + color: #c8deff; } + .td-box--gray-dark p > a:hover, .td-box--gray-dark span > a:hover { + color: #d9e8ff; } + +.td-box--primary { + color: #fff; + background-color: #30638e; } + .td-box--primary .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #30638e transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--primary p > a, .td-box--primary span > a { + color: #a5c9fe; } + .td-box--primary p > a:hover, .td-box--primary span > a:hover { + color: #c0d9fe; } + +.td-box--secondary { + color: #000; + background-color: #ffa630; } + .td-box--secondary .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ffa630 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--secondary p > a, .td-box--secondary span > a { + color: #084196; } + .td-box--secondary p > a:hover, .td-box--secondary span > a:hover { + color: #062e69; } + +.td-box--success { + color: #000; + background-color: #3772ff; } + .td-box--success .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #3772ff transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--success p > a, .td-box--success span > a { + color: #08439a; } + .td-box--success p > a:hover, .td-box--success span > a:hover { + color: #062f6c; } + +.td-box--info { + color: #000; + background-color: #c0e0de; } + .td-box--info .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #c0e0de transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--info p > a, .td-box--info span > a { + color: #0b5ace; } + .td-box--info p > a:hover, .td-box--info span > a:hover { + color: #083f90; } + +.td-box--warning { + color: #000; + background-color: #ed6a5a; } + .td-box--warning .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--warning p > a, .td-box--warning span > a { + color: #0847a2; } + .td-box--warning p > a:hover, .td-box--warning span > a:hover { + color: #063271; } + +.td-box--danger { + color: #000; + background-color: #ed6a5a; } + .td-box--danger .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ed6a5a transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--danger p > a, .td-box--danger span > a { + color: #0847a2; } + .td-box--danger p > a:hover, .td-box--danger span > a:hover { + color: #063271; } + +.td-box--light { + color: #000; + background-color: #d3f3ee; } + .td-box--light .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #d3f3ee transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--light p > a, .td-box--light span > a { + color: #0c62e1; } + .td-box--light p > a:hover, .td-box--light span > a:hover { + color: #08459e; } + +.td-box--dark, .td-footer { + color: #fff; + background-color: #403f4c; } + .td-box--dark .td-arrow-down::before, .td-footer .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #403f4c transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--dark p > a, .td-footer p > a, .td-box--dark span > a, .td-footer span > a { + color: #bdd7fe; } + .td-box--dark p > a:hover, .td-footer p > a:hover, .td-box--dark span > a:hover, .td-footer span > a:hover { + color: #d1e3fe; } + +.td-box--100 { + color: #000; + background-color: #f8f9fa; } + .td-box--100 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #f8f9fa transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--100 p > a, .td-box--100 span > a { + color: #0d6bf7; } + .td-box--100 p > a:hover, .td-box--100 span > a:hover { + color: #094bad; } + +.td-box--200 { + color: #000; + background-color: #e9ecef; } + .td-box--200 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #e9ecef transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--200 p > a, .td-box--200 span > a { + color: #0c66ea; } + .td-box--200 p > a:hover, .td-box--200 span > a:hover { + color: #0847a4; } + +.td-box--300 { + color: #000; + background-color: #dee2e6; } + .td-box--300 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #dee2e6 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--300 p > a, .td-box--300 span > a { + color: #0c61e0; } + .td-box--300 p > a:hover, .td-box--300 span > a:hover { + color: #08449d; } + +.td-box--400 { + color: #000; + background-color: #ced4da; } + .td-box--400 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #ced4da transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--400 p > a, .td-box--400 span > a { + color: #0b5bd2; } + .td-box--400 p > a:hover, .td-box--400 span > a:hover { + color: #084093; } + +.td-box--500 { + color: #000; + background-color: #adb5bd; } + .td-box--500 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #adb5bd transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--500 p > a, .td-box--500 span > a { + color: #094eb4; } + .td-box--500 p > a:hover, .td-box--500 span > a:hover { + color: #06377e; } + +.td-box--600 { + color: #fff; + background-color: #6c757d; } + .td-box--600 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #6c757d transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--600 p > a, .td-box--600 span > a { + color: #90bdfe; } + .td-box--600 p > a:hover, .td-box--600 span > a:hover { + color: #b1d1fe; } + +.td-box--700 { + color: #fff; + background-color: #495057; } + .td-box--700 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #495057 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--700 p > a, .td-box--700 span > a { + color: #b3d2fe; } + .td-box--700 p > a:hover, .td-box--700 span > a:hover { + color: #cae0fe; } + +.td-box--800 { + color: #fff; + background-color: #343a40; } + .td-box--800 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #343a40 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--800 p > a, .td-box--800 span > a { + color: #c8deff; } + .td-box--800 p > a:hover, .td-box--800 span > a:hover { + color: #d9e8ff; } + +.td-box--900 { + color: #fff; + background-color: #212529; } + .td-box--900 .td-arrow-down::before { + left: 50%; + margin-left: -30px; + bottom: -25px; + border-style: solid; + border-width: 25px 30px 0 30px; + border-color: #212529 transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; } + +.td-box--900 p > a, .td-box--900 span > a { + color: #dceaff; } + .td-box--900 p > a:hover, .td-box--900 span > a:hover { + color: #e7f0ff; } + +[data-bs-theme="dark"] .td-box--white { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); } + [data-bs-theme="dark"] .td-box--white p > a, [data-bs-theme="dark"] .td-box--white span > a { + color: var(--bs-link-color); } + [data-bs-theme="dark"] .td-box--white p > a:focus, [data-bs-theme="dark"] .td-box--white p > a:hover, [data-bs-theme="dark"] .td-box--white span > a:focus, [data-bs-theme="dark"] .td-box--white span > a:hover { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); } + [data-bs-theme="dark"] .td-box--white .td-arrow-down::before { + border-color: var(--bs-body-bg) transparent transparent transparent; } + +.td-blog .td-rss-button { + border-radius: 2rem; + float: right; + display: none; } + +.td-blog-posts-list { + margin-top: 1.5rem !important; } + .td-blog-posts-list__item { + display: flex; + align-items: flex-start; + margin-bottom: 1.5rem !important; } + .td-blog-posts-list__item__body { + flex: 1; } + +[data-bs-theme="dark"] { + --td-pre-bg: #1b1f22; } + +.td-content .highlight { + margin: 2rem 0; + padding: 0; + position: relative; } + .td-content .highlight .click-to-copy { + display: block; + text-align: right; } + .td-content .highlight pre { + margin: 0; + padding: 1rem; + border-radius: inherit; } + .td-content .highlight pre button.td-click-to-copy { + position: absolute; + color: var(--bs-tertiary-color); + border-width: 0; + background-color: transparent; + background-image: none; + --bs-btn-box-shadow: 0; + padding: var(--bs-btn-padding-y) calc(var(--bs-btn-padding-x) / 2); + right: 4px; + top: 2px; } + .td-content .highlight pre button.td-click-to-copy:hover { + color: var(--bs-secondary-color); + background-color: var(--bs-dark-bg-subtle); } + .td-content .highlight pre button.td-click-to-copy:active { + color: var(--bs-secondary-color); + background-color: var(--bs-dark-bg-subtle); + transform: translateY(2px); } + +.td-content p code, +.td-content li > code, +.td-content table code { + color: inherit; + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + word-break: normal; + background-color: var(--td-pre-bg); + border-radius: 0.375rem; } + .td-content p code br, + .td-content li > code br, + .td-content table code br { + display: none; } + +.td-content pre { + word-wrap: normal; + background-color: var(--td-pre-bg); + border: solid var(--bs-border-color); + border-width: 1px; + padding: 1rem; } + .td-content pre > code { + background-color: inherit !important; + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + border: 0; } + +.td-content pre.mermaid { + background-color: inherit; + font-size: 0; + padding: 0; } + +@media (min-width: 768px) { + .td-navbar-cover { + background: transparent !important; } + .td-navbar-cover .nav-link { + text-shadow: 1px 1px 2px #403f4c; } } + +.td-navbar-cover.navbar-bg-onscroll .nav-link { + text-shadow: none; } + +.navbar-bg-onscroll { + background: #30638e !important; + opacity: inherit; } + +.td-navbar { + background: #30638e; + min-height: 4rem; + margin: 0; + z-index: 32; } + .td-navbar .navbar-brand { + text-transform: none; } + .td-navbar .navbar-brand__name { + font-weight: 700; } + .td-navbar .navbar-brand svg { + display: inline-block; + margin: 0 10px; + height: 30px; } + .td-navbar .navbar-nav { + padding-top: 0.5rem; + white-space: nowrap; } + .td-navbar .nav-link { + text-transform: none; + font-weight: 700; } + .td-navbar .dropdown { + min-width: 50px; } + @media (min-width: 768px) { + .td-navbar { + position: fixed; + top: 0; + width: 100%; } + .td-navbar .nav-item { + padding-inline-end: 0.5rem; } + .td-navbar .navbar-nav { + padding-top: 0 !important; } } + @media (max-width: 991.98px) { + .td-navbar .td-navbar-nav-scroll { + max-width: 100%; + height: 2.5rem; + overflow: hidden; + font-size: 0.9rem; } + .td-navbar .navbar-brand { + margin-right: 0; } + .td-navbar .navbar-nav { + padding-bottom: 2rem; + overflow-x: auto; } } + .td-navbar .td-light-dark-menu .bi { + width: 1em; + height: 1em; + vertical-align: -.125em; + fill: currentcolor; } + @media (max-width: 991.98px) { + .td-navbar .td-light-dark-menu.dropdown { + position: unset; } } +#main_navbar li i { + padding-right: 0.5em; } + #main_navbar li i:before { + display: inline-block; + text-align: center; + min-width: 1em; } + +#main_navbar .alert { + background-color: inherit; + padding: 0; + color: #ffa630; + border: 0; + font-weight: inherit; } + #main_navbar .alert:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + content: "\f0d9"; + padding-left: 0.5em; + padding-right: 0.5em; } + +nav.foldable-nav#td-section-nav { + position: relative; } + +nav.foldable-nav#td-section-nav label { + margin-bottom: 0; + width: 100%; } + +nav.foldable-nav .td-sidebar-nav__section, +nav.foldable-nav .with-child ul { + list-style: none; + padding: 0; + margin: 0; } + +nav.foldable-nav .ul-1 > li { + padding-left: 1.5em; } + +nav.foldable-nav ul.foldable { + display: none; } + +nav.foldable-nav input:checked ~ ul.foldable { + display: block; } + +nav.foldable-nav input[type="checkbox"] { + display: none; } + +nav.foldable-nav .with-child, +nav.foldable-nav .without-child { + position: relative; + padding-left: 1.5em; } + +nav.foldable-nav .ul-1 .with-child > label:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + content: "\f0da"; + position: absolute; + left: 0.1em; + padding-left: 0.4em; + padding-right: 0.4em; + font-size: 1em; + color: var(--bs-secondary-color); + transition: all 0.5s; } + nav.foldable-nav .ul-1 .with-child > label:before:hover { + transform: rotate(90deg); } + +nav.foldable-nav .ul-1 .with-child > input:checked ~ label:before { + color: var(--bs-secondary-color); + transform: rotate(90deg); + transition: transform 0.5s; } + +nav.foldable-nav .with-child ul { + margin-top: 0.1em; } + +@media (hover: hover) and (pointer: fine) { + nav.foldable-nav .ul-1 .with-child > label:hover:before { + color: var(--bs-link-color); + transition: color 0.3s; } + nav.foldable-nav .ul-1 .with-child > input:checked ~ label:hover:before { + color: var(--bs-link-color); + transition: color 0.3s; } } + +.td-sidebar-nav { + padding-right: 0.5rem; + margin-right: -15px; + margin-left: -15px; } + @media (min-width: 768px) { + @supports (position: sticky) { + .td-sidebar-nav { + max-height: calc(100vh - 8.5rem); + overflow-y: auto; } } } + @media (min-width: 992px) { + .td-sidebar-nav.td-sidebar-nav--search-disabled { + padding-top: 1rem; } + @supports (position: sticky) { + .td-sidebar-nav.td-sidebar-nav--search-disabled { + max-height: calc(calc(100vh - 8.5rem) + 4.5rem); } } } + @media (min-width: 768px) { + .td-sidebar-nav { + display: block !important; } } + .td-sidebar-nav__section { + padding-left: 0; } + .td-sidebar-nav__section li { + list-style: none; } + .td-sidebar-nav__section.ul-0, .td-sidebar-nav__section ul { + padding: 0; + margin: 0; } + @media (min-width: 768px) { + .td-sidebar-nav__section .ul-1 ul { + padding-left: 1.5em; } } + .td-sidebar-nav__section-title { + display: block; + font-weight: 500; } + .td-sidebar-nav__section-title .active { + font-weight: 700; } + .td-sidebar-nav__section-title a { + color: var(--bs-secondary-color); } + .td-sidebar-nav .td-sidebar-link { + display: block; + padding-bottom: 0.375rem; } + .td-sidebar-nav .td-sidebar-link__page { + color: var(--bs-body-color); + font-weight: 300; } + .td-sidebar-nav a:focus, .td-sidebar-nav a:hover { + color: var(--bs-link-color); } + .td-sidebar-nav a.active { + font-weight: 700; } + .td-sidebar-nav .dropdown a { + color: var(--bs-tertiary-color); } + .td-sidebar-nav .dropdown .nav-link { + padding: 0 0 1rem; } + .td-sidebar-nav > .td-sidebar-nav__section { + padding-left: 1.5rem; } + .td-sidebar-nav li i { + padding-right: 0.5em; } + .td-sidebar-nav li i:before { + display: inline-block; + text-align: center; + min-width: 1em; } + .td-sidebar-nav .td-sidebar-link.tree-root { + font-weight: 700; + border-bottom: 1px solid var(--bs-tertiary-color); + margin-bottom: 1rem; } + +.td-sidebar { + padding-bottom: 1rem; } + .td-sidebar a { + text-decoration: none; } + .td-sidebar a:focus, .td-sidebar a:hover { + text-decoration: initial; } + .td-sidebar .btn-link { + text-decoration: none; } + @media (min-width: 768px) { + .td-sidebar { + padding-top: 4rem; + background-color: var(--bs-body-tertiary-bg); + padding-right: 1rem; + border-right: 1px solid var(--bs-border-color); } } + .td-sidebar__toggle { + line-height: 1; + color: var(--bs-body-color); + margin: 1rem; } + .td-sidebar__search { + padding: 1rem 0; } + .td-sidebar__inner { + order: 0; } + @media (min-width: 768px) { + @supports (position: sticky) { + .td-sidebar__inner { + position: sticky; + top: 4rem; + z-index: 10; + height: calc(100vh - 5rem); } } } + @media (min-width: 1200px) { + .td-sidebar__inner { + flex: 0 1 320px; } } + .td-sidebar__inner .td-search-box { + width: 100%; } + .td-sidebar #content-desktop { + display: block; } + .td-sidebar #content-mobile { + display: none; } + @media (max-width: 991.98px) { + .td-sidebar #content-desktop { + display: none; } + .td-sidebar #content-mobile { + display: block; } } +.td-sidebar-toc { + border-left: 1px solid var(--bs-border-color); + order: 2; + padding-top: 0.75rem; + padding-bottom: 1.5rem; + vertical-align: top; } + .td-sidebar-toc a { + text-decoration: none; } + .td-sidebar-toc a:focus, .td-sidebar-toc a:hover { + text-decoration: initial; } + .td-sidebar-toc .btn-link { + text-decoration: none; } + @supports (position: sticky) { + .td-sidebar-toc { + position: sticky; + top: 4rem; + height: calc(100vh - 4rem); + overflow-y: auto; } } + .td-sidebar-toc .td-page-meta a { + display: block; + font-weight: 500; } + +.td-toc a { + display: block; + font-weight: 300; + padding-bottom: 0.25rem; } + +.td-toc li { + list-style: none; + display: block; } + +.td-toc li li { + margin-left: 0.5rem; } + +.td-toc #TableOfContents a { + color: var(--bs-secondary-color); } + .td-toc #TableOfContents a:focus, .td-toc #TableOfContents a:hover { + color: initial; } + +.td-toc ul { + padding-left: 0; } + +@media print { + .td-breadcrumbs { + display: none !important; } } + +.td-breadcrumbs .breadcrumb { + background: inherit; + padding-left: 0; + padding-top: 0; } + +.alert { + font-weight: 500; + color: inherit; + border-radius: 0; } + .alert-primary, .pageinfo-primary { + border-style: solid; + border-color: #30638e; + border-width: 0 0 0 4px; } + .alert-primary .alert-heading, .pageinfo-primary .alert-heading { + color: #30638e; } + .alert-secondary, .pageinfo-secondary { + border-style: solid; + border-color: #ffa630; + border-width: 0 0 0 4px; } + .alert-secondary .alert-heading, .pageinfo-secondary .alert-heading { + color: #ffa630; } + .alert-success, .pageinfo-success { + border-style: solid; + border-color: #3772ff; + border-width: 0 0 0 4px; } + .alert-success .alert-heading, .pageinfo-success .alert-heading { + color: #3772ff; } + .alert-info, .pageinfo-info { + border-style: solid; + border-color: #c0e0de; + border-width: 0 0 0 4px; } + .alert-info .alert-heading, .pageinfo-info .alert-heading { + color: #c0e0de; } + .alert-warning, .pageinfo-warning { + border-style: solid; + border-color: #ed6a5a; + border-width: 0 0 0 4px; } + .alert-warning .alert-heading, .pageinfo-warning .alert-heading { + color: #ed6a5a; } + .alert-danger, .pageinfo-danger { + border-style: solid; + border-color: #ed6a5a; + border-width: 0 0 0 4px; } + .alert-danger .alert-heading, .pageinfo-danger .alert-heading { + color: #ed6a5a; } + .alert-light, .pageinfo-light { + border-style: solid; + border-color: #d3f3ee; + border-width: 0 0 0 4px; } + .alert-light .alert-heading, .pageinfo-light .alert-heading { + color: #d3f3ee; } + .alert-dark, .pageinfo-dark { + border-style: solid; + border-color: #403f4c; + border-width: 0 0 0 4px; } + .alert-dark .alert-heading, .pageinfo-dark .alert-heading { + color: #403f4c; } + +.td-content { + order: 1; } + .td-content p, + .td-content li, + .td-content td { + font-weight: 400; } + .td-content > h1, .td-content > .h1 { + font-weight: 700; + margin-bottom: 1rem; } + .td-content > h2, .td-content > .h2 { + margin-bottom: 1rem; } + .td-content > h2:not(:first-child), .td-content > .h2:not(:first-child) { + margin-top: 3rem; } + .td-content > h2 + h3, .td-content > .h2 + h3, .td-content > h2 + .h3, .td-content > h2 + .td-footer__links-item, .td-content > .h2 + .h3, .td-content > .h2 + .td-footer__links-item { + margin-top: 1rem; } + .td-content > h3, .td-content > .h3, .td-content > .td-footer__links-item, + .td-content > h4, + .td-content > .h4, + .td-content > h5, + .td-content > .h5, + .td-content > h6, + .td-content > .h6 { + margin-bottom: 1rem; + margin-top: 2rem; } + .td-content blockquote { + padding: 0 0 0 1rem; + margin-bottom: 1rem; + color: var(--bs-secondary-color); + border-left: 6px solid var(--bs-primary); } + .td-content ul li, + .td-content ol li { + margin-bottom: 0.25rem; } + .td-content strong { + font-weight: 700; } + .td-content .alert:not(:first-child) { + margin-top: 2rem; + margin-bottom: 2rem; } + .td-content .lead { + margin-bottom: 1.5rem; } + +.td-title { + margin-top: 1rem; + margin-bottom: 0.5rem; } + @media (min-width: 576px) { + .td-title { + font-size: 3rem; } } +.td-heading-self-link { + font-size: 90%; + padding-left: 0.25em; + text-decoration: none; + visibility: hidden; } + .td-heading-self-link:before { + content: '#'; } + @media (hover: none) and (pointer: coarse), (max-width: 576px) { + .td-heading-self-link { + visibility: visible; } } +h1:hover > .td-heading-self-link, .h1:hover > .td-heading-self-link { + visibility: visible; } + +h2:hover > .td-heading-self-link, .h2:hover > .td-heading-self-link { + visibility: visible; } + +h3:hover > .td-heading-self-link, .h3:hover > .td-heading-self-link, .td-footer__links-item:hover > .td-heading-self-link { + visibility: visible; } + +h4:hover > .td-heading-self-link, .h4:hover > .td-heading-self-link { + visibility: visible; } + +h5:hover > .td-heading-self-link, .h5:hover > .td-heading-self-link { + visibility: visible; } + +h6:hover > .td-heading-self-link, .h6:hover > .td-heading-self-link { + visibility: visible; } + +.td-search { + background: transparent; + position: relative; + width: 100%; } + .td-search__icon { + display: flex; + align-items: center; + height: 100%; + position: absolute; + left: 0.75em; + pointer-events: none; } + .td-search__icon:before { + content: "\f002"; } + .td-navbar .td-search__icon { + color: inherit; } + .td-search__input { + width: 100%; + text-indent: 1.25em; } + .td-search__input:not(:focus) { + background: transparent; } + .td-search__input.form-control:focus { + border-color: #f5f7f9; + box-shadow: 0 0 0 2px #83a1bb; + color: var(--bs-body-color); } + .td-navbar .td-search__input { + border: none; + color: inherit; } + .td-navbar .td-search__input::-webkit-input-placeholder { + color: inherit; } + .td-navbar .td-search__input:-moz-placeholder { + color: inherit; } + .td-navbar .td-search__input::-moz-placeholder { + color: inherit; } + .td-navbar .td-search__input:-ms-input-placeholder { + color: inherit; } + .td-search:focus-within .td-search__icon { + display: none; } + .td-search:focus-within .td-search-input { + text-indent: 0px; } + .td-search:not(:focus-within) { + color: var(--bs-secondary-color); } + +.td-sidebar .td-search--algolia { + display: block; + padding: 0 0.5rem; } + .td-sidebar .td-search--algolia > button { + margin: 0; + width: 100%; } + +.td-search--offline:focus-within .td-search__icon { + display: flex; + color: var(--bs-secondary-color); } + +.td-offline-search-results { + max-width: 90%; } + .td-offline-search-results .card { + margin-bottom: 0.5rem; } + .td-offline-search-results .card .card-header { + font-weight: bold; } + .td-offline-search-results__close-button { + float: right; } + .td-offline-search-results__close-button:after { + content: "\f00d"; } + +.td-outer { + display: flex; + flex-direction: column; + min-height: 100vh; } + +@media (min-width: 768px) { + .td-default main > section:first-of-type { + padding-top: 8rem; } } + +.td-main { + flex-grow: 1; } + +.td-404 main, +.td-main main { + padding-top: 1.5rem; + padding-bottom: 2rem; } + @media (min-width: 768px) { + .td-404 main, + .td-main main { + padding-top: 5.5rem; } } +.td-cover-block--height-min { + min-height: 300px; } + +.td-cover-block--height-med { + min-height: 400px; } + +.td-cover-block--height-max { + min-height: 500px; } + +.td-cover-block--height-full { + min-height: 100vh; } + +@media (min-width: 768px) { + .td-cover-block--height-min { + min-height: 450px; } + .td-cover-block--height-med { + min-height: 500px; } + .td-cover-block--height-max { + min-height: 650px; } } + +.td-cover-logo { + margin-right: 0.5em; } + +.td-cover-block { + position: relative; + padding-top: 5rem; + padding-bottom: 5rem; + background-repeat: no-repeat; + background-position: 50% 0; + background-size: cover; } + .td-cover-block > .byline { + position: absolute; + bottom: 2px; + right: 4px; } + +.td-bg-arrow-wrapper { + position: relative; } + +.section-index .entry { + padding: 0.75rem; } + +.section-index h5, .section-index .h5 { + margin-bottom: 0; } + .section-index h5 a, .section-index .h5 a { + font-weight: 700; } + +.section-index p { + margin-top: 0; } + +.pageinfo { + font-weight: 500; + background: var(--bs-alert-bg); + color: inherit; + margin: 2rem auto; + padding: 1.5rem; + padding-bottom: 0.5rem; } + .pageinfo-primary { + border-width: 0; } + .pageinfo-secondary { + border-width: 0; } + .pageinfo-success { + border-width: 0; } + .pageinfo-info { + border-width: 0; } + .pageinfo-warning { + border-width: 0; } + .pageinfo-danger { + border-width: 0; } + .pageinfo-light { + border-width: 0; } + .pageinfo-dark { + border-width: 0; } + +.td-page-meta__lastmod { + margin-top: 3rem !important; + padding-top: 1rem !important; } + +.taxonomy-terms-article { + width: 100%; + clear: both; + font-size: 0.8rem; } + .taxonomy-terms-article .taxonomy-title { + display: inline; + font-size: 1.25em; + height: 1em; + line-height: 1em; + margin-right: 0.5em; + padding: 0; } + +.taxonomy-terms-cloud { + width: 100%; + clear: both; + font-size: 0.8rem; } + .taxonomy-terms-cloud .taxonomy-title { + display: inline-block; + width: 100%; + font-size: 1rem; + font-weight: 700; + color: var(--bs-primary-text-emphasis); + border-bottom: 1px solid var(--bs-tertiary-color); + margin-bottom: 1em; + padding-bottom: 0.375rem; + margin-top: 1em; } + +.taxonomy-terms-page { + max-width: 800px; + margin: auto; } + .taxonomy-terms-page h1, .taxonomy-terms-page .h1 { + margin-bottom: 1em; } + .taxonomy-terms-page .taxonomy-terms-cloud { + font-size: 1em; } + .taxonomy-terms-page .taxonomy-terms-cloud li { + display: block; } + .taxonomy-terms-page .taxo-text-tags li + li::before { + content: none; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count, + .taxonomy-terms-page .taxo-fruits .taxonomy-label { + display: inherit; + font-size: 1rem; + margin: 0; + padding: 0; + padding-right: 0.5em; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count::before { + content: "("; } + .taxonomy-terms-page .taxo-fruits .taxonomy-count::after { + content: ")"; } + +.taxonomy-terms { + list-style: none; + margin: 0; + overflow: hidden; + padding: 0; + display: inline; } + .taxonomy-terms li { + display: inline; + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; } + +.taxonomy-count { + font-size: 0.8em; + line-height: 1.25em; + display: inline-block; + padding-left: 0.6em; + padding-right: 0.6em; + margin-left: 0.6em; + text-align: center; + border-radius: 1em; + background-color: var(--bs-body-bg); } + +.taxonomy-term { + background: var(--bs-secondary-bg); + border-width: 0; + border-radius: 0 3px 3px 0; + color: var(--bs-body-color); + display: inline-block; + font-size: 1em; + line-height: 1.5em; + min-height: 1.5em; + max-width: 100%; + padding: 0 0.5em 0 1em; + position: relative; + margin: 0 0.5em 0.2em 0; + text-decoration: none; + -webkit-transition: color 0.2s; + -webkit-clip-path: polygon(100% 0, 100% 100%, 0.8em 100%, 0 50%, 0.8em 0); + clip-path: polygon(100% 0, 100% 100%, 0.8em 100%, 0 50%, 0.8em 0); } + .taxonomy-term:hover { + background-color: var(--bs-primary-bg-subtle); + color: var(--bs-body-color-dark); } + .taxonomy-term:hover .taxonomy-count { + color: var(--bs-body-color-dark); } + .taxonomy-term:hover::before { + background: #30638e; } + +.taxo-text-tags .taxonomy-term { + background: none; + border-width: 0; + border-radius: 0; + color: #6c757d; + font-size: 1em; + line-height: 1.5em; + min-height: 1.5em; + max-width: 100%; + padding: 0; + position: relative; + margin: 0; + text-decoration: none; + -webkit-clip-path: none; + clip-path: none; } + .taxo-text-tags .taxonomy-term:hover { + background: none; + color: #0d6efd; } + .taxo-text-tags .taxonomy-term:hover .taxonomy-count { + color: #403f4c !important; } + .taxo-text-tags .taxonomy-term:hover::before { + background: none; } + +.taxo-text-tags li + li::before { + content: "|"; + color: #6c757d; + margin-right: 0.2em; } + +.taxo-text-tags .taxonomy-count { + font-size: 1em; + line-height: 1.25em; + display: inline-block; + padding: 0; + margin: 0; + text-align: center; + border-radius: 0; + background: none; + vertical-align: super; + font-size: 0.75em; } + +.taxo-text-tags .taxonomy-term:hover .taxonomy-count { + color: #0d6efd !important; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term]::before { + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + padding-right: 0.5em; + font-size: 2em; + min-width: 1.5em; + display: inline-block; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="apple"]::before { + content: "\f5d1"; + color: red; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="carrot"]::before { + content: "\f787"; + color: orange; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="lemon"]::before { + content: "\f094"; + color: limegreen; } + +.taxo-fruits .taxonomy-term[data-taxonomy-term="pepper"]::before { + content: "\f816"; + color: darkred; } + +.taxo-fruits .taxonomy-term { + background: none; + border-width: 0; + border-radius: 0; + color: #6c757d; + font-size: 1em; + line-height: 2.5em; + max-width: 100%; + padding: 0; + position: relative; + margin: 0; + text-decoration: none; + -webkit-clip-path: none; + clip-path: none; } + .taxo-fruits .taxonomy-term:hover { + background: none; + color: #0d6efd; } + .taxo-fruits .taxonomy-term:hover .taxonomy-count { + color: #403f4c !important; } + .taxo-fruits .taxonomy-term:hover::before { + background: none; + text-shadow: 0 0 3px #212529; } + +.taxo-fruits .taxonomy-count, +.taxo-fruits .taxonomy-label { + display: none; } + +.taxo-fruits.taxonomy-terms-article { + margin-bottom: 1rem; } + .taxo-fruits.taxonomy-terms-article .taxonomy-title { + display: none; } + +.taxonomy-taxonomy-page { + max-width: 800px; + margin: auto; } + .taxonomy-taxonomy-page h1, .taxonomy-taxonomy-page .h1 { + margin-bottom: 1em; } + +.article-meta { + margin-bottom: 1.5rem; } + +.article-teaser.article-type-docs h3 a:before, .article-teaser.article-type-docs .h3 a:before, .article-teaser.article-type-docs .td-footer__links-item a:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f02d"; + padding-right: 0.5em; } + +.article-teaser.article-type-blog h3 a:before, .article-teaser.article-type-blog .h3 a:before, .article-teaser.article-type-blog .td-footer__links-item a:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f781"; + padding-right: 0.5em; } + +.all-taxonomy-terms { + font-weight: 500; + line-height: 1.2; + font-size: 1.5rem; } + .all-taxonomy-terms:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + font-family: "Font Awesome 6 Free"; + content: "\f122"; + padding-right: 0.5em; } + +.article-teaser.card { + padding: 1em; + margin-bottom: 1.5em; } + +.article-teaser .breadcrumb { + margin-bottom: 0em; + font-size: 0.85rem; } + +.article-teaser .article-meta { + margin-bottom: 0em; } + +div.drawio { + display: inline-block; + position: relative; } + div.drawio button { + position: absolute; + bottom: 5px; + right: 5px; + padding: 0.4em 0.5em; + font-size: 0.8em; + display: none; } + div.drawio:hover button { + display: inline; } + +div.drawioframe { + position: fixed; + height: 100%; + width: 100%; + top: 0; + left: 0px; + z-index: 1000; + background: #000b; + border: 0; } + div.drawioframe iframe { + position: absolute; + height: 90%; + width: 90%; + top: 5%; + left: 5%; + z-index: 1010; } + +.tab-content .tab-pane { + margin-top: 0rem; + margin-bottom: 1.5rem; + border-left: var(--bs-border-width) solid var(--bs-border-color); + border-right: var(--bs-border-width) solid var(--bs-border-color); + border-bottom: var(--bs-border-width) solid var(--bs-border-color); } + .tab-content .tab-pane .highlight { + margin: 0; + border: none; + max-width: 100%; } + +.tab-body { + font-weight: 500; + background: var(--td-pre-bg); + color: var(--bs-body-color); + border-radius: 0; + padding: 1.5rem; } + .tab-body > :last-child { + margin-bottom: 0; } + .tab-body > .highlight:only-child { + margin: -1.5rem; + max-width: calc(100% + 3rem); } + .tab-body-primary { + border-style: solid; + border-color: #30638e; } + .tab-body-secondary { + border-style: solid; + border-color: #ffa630; } + .tab-body-success { + border-style: solid; + border-color: #3772ff; } + .tab-body-info { + border-style: solid; + border-color: #c0e0de; } + .tab-body-warning { + border-style: solid; + border-color: #ed6a5a; } + .tab-body-danger { + border-style: solid; + border-color: #ed6a5a; } + .tab-body-light { + border-style: solid; + border-color: #d3f3ee; } + .tab-body-dark { + border-style: solid; + border-color: #403f4c; } + +.td-card.card .highlight { + border: none; + margin: 0; } + +.td-card .card-header.code { + background-color: var(--bs-body-bg); } + +.td-card .card-body.code { + background-color: var(--bs-body-bg); + padding: 0 0 0 1ex; } + +.td-card .card-body pre { + margin: 0; + padding: 0 1rem 1rem 1rem; } + +.swagger-ui .info .title small pre, .swagger-ui .info .title .small pre, .swagger-ui .info .title .td-footer__center pre, .swagger-ui .info .title .td-cover-block > .byline pre { + background: #7d8492; } + +.td-footer { + min-height: 150px; + padding-top: 3rem; + /* &__left { } */ } + @media (max-width: 991.98px) { + .td-footer { + min-height: 200px; } } + .td-footer__center { + text-align: center; } + .td-footer__right { + text-align: right; } + .td-footer__about { + font-size: initial; } + .td-footer__links-list { + margin-bottom: 0; } + .td-footer__links-item a { + color: inherit !important; } + .td-footer__authors, .td-footer__all_rights_reserved { + padding-left: 0.25rem; } + .td-footer__all_rights_reserved { + display: none; } + +@media (min-width: 768px) { + .td-offset-anchor:target { + display: block; + position: relative; + top: -4rem; + visibility: hidden; } + h2[id]:before, [id].h2:before, + h3[id]:before, + [id].h3:before, + [id].td-footer__links-item:before, + h4[id]:before, + [id].h4:before, + h5[id]:before, + [id].h5:before { + display: block; + content: " "; + margin-top: -5rem; + height: 5rem; + visibility: hidden; } } + +/* + +Nothing defined here. The Hugo project that uses this theme can override Bootstrap by adding a file to: + +assets/scss/_styles_project.scss + +*/ + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.json b/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.json new file mode 100644 index 0000000..a8ece4a --- /dev/null +++ b/resources/_gen/assets/scss/main.scss_fae17086e470d8c6ed0d487092f631b7.json @@ -0,0 +1 @@ +{"Target":"/scss/main.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg b/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg new file mode 100644 index 0000000..80e6e71 Binary files /dev/null and b/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg differ diff --git a/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg b/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg new file mode 100644 index 0000000..a883d00 Binary files /dev/null and b/resources/_gen/images/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg differ diff --git a/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png b/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png new file mode 100644 index 0000000..30df1c3 Binary files /dev/null and b/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png differ diff --git a/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png b/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png new file mode 100644 index 0000000..e4e0620 Binary files /dev/null and b/resources/_gen/images/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png differ diff --git a/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg b/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg new file mode 100644 index 0000000..80e6e71 Binary files /dev/null and b/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_bottom.jpg differ diff --git a/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg b/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg new file mode 100644 index 0000000..a883d00 Binary files /dev/null and b/resources/_gen/images/fa/about/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_bottom.jpg differ diff --git a/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png b/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png new file mode 100644 index 0000000..30df1c3 Binary files /dev/null and b/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_3.png differ diff --git a/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png b/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png new file mode 100644 index 0000000..e4e0620 Binary files /dev/null and b/resources/_gen/images/fa/blog/2018/10/06/مستدات-راحت-با-داکسی/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_3.png differ diff --git a/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg b/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg new file mode 100644 index 0000000..f2a6e45 Binary files /dev/null and b/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg differ diff --git a/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg b/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg new file mode 100644 index 0000000..d7c8202 Binary files /dev/null and b/resources/_gen/images/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg differ diff --git a/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg b/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg new file mode 100644 index 0000000..f2a6e45 Binary files /dev/null and b/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_1920x1080_fill_q75_catmullrom_top.jpg differ diff --git a/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg b/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg new file mode 100644 index 0000000..d7c8202 Binary files /dev/null and b/resources/_gen/images/no/featured-background_hu376e1fbab6ce6c455a2b3aa5c258c0d9_496231_960x540_fill_q75_catmullrom_top.jpg differ diff --git a/resources/architecture-c4/ipceicis-363-goldenpath-sia/developer.png b/resources/architecture-c4/ipceicis-363-goldenpath-sia/developer.png new file mode 100755 index 0000000..852c2fc Binary files /dev/null and b/resources/architecture-c4/ipceicis-363-goldenpath-sia/developer.png differ diff --git a/resources/architecture-c4/ipceicis-363-goldenpath-sia/environments.png b/resources/architecture-c4/ipceicis-363-goldenpath-sia/environments.png new file mode 100755 index 0000000..e75946a Binary files /dev/null and b/resources/architecture-c4/ipceicis-363-goldenpath-sia/environments.png differ diff --git a/resources/architecture-c4/ipceicis-363-goldenpath-sia/ipceicis-363-goldenpath-sia.c4 b/resources/architecture-c4/ipceicis-363-goldenpath-sia/ipceicis-363-goldenpath-sia.c4 new file mode 100755 index 0000000..d8d7d11 --- /dev/null +++ b/resources/architecture-c4/ipceicis-363-goldenpath-sia/ipceicis-363-goldenpath-sia.c4 @@ -0,0 +1,84 @@ +specification { + tag developer + element actor { + style { + shape person + } + } + element environment + +} + +model { + actor developer 'Developer' { + -> Platform.DeliveryAndControlPlane.Portal 'use Portal as E2E Golden Path Processor' + -> Platform.DeliveryAndControlPlane.IDE 'use preferred IDE as local code editing, building, testing, syncing tool' + -> Platform.DeliveryAndControlPlane.VersionControl.ApplicationSourceCode 'git cli tools' + -> Platform.DeliveryAndControlPlane.VersionControl.PlatformSourceCode 'git cli tools' + + -> Platform.DeliveryAndControlPlane.Portal.Catalogue + -> Platform.DeliveryAndControlPlane.Portal.Documentation + -> Platform.DeliveryAndControlPlane.Portal.Templates + -> Platform.DeliveryAndControlPlane.Portal.SystemDashboard + } + + actor platformengineer 'P' { + -> Platform.DeliveryAndControlPlane.Portal 'use Portal as E2E Golden Path Processor' + -> Platform.DeliveryAndControlPlane.IDE 'use preferred IDE as local code editing, building, testing, syncing tool' + -> Platform.DeliveryAndControlPlane.VersionControl.ApplicationSourceCode 'git cli tools' + -> Platform.DeliveryAndControlPlane.VersionControl.PlatformSourceCode 'git cli tools' + + } + + extend Platform.DeliveryAndControlPlane.IDE { + IDE -> Platform.DeliveryAndControlPlane.VersionControl.PlatformSourceCode 'IDE git' + IDE -> Platform.DeliveryAndControlPlane.VersionControl.ApplicationSourceCode 'IDE git' + IDE -> Platform.DeliveryAndControlPlane.Portal.API '(opt.) browse/control in IDE' + } + + extend Platform.DeliveryAndControlPlane.Portal { + component API + component Templates + component Catalogue + component Documentation + component SystemDashboard + } + + environment localBox { + environment EDF 'Platform' 'Environment for the EDF Platform Orchestration' { + -> local 'provision' + -> test 'provision' + -> prod 'provision' + developer -> this 'manage (in Developer Portal)' + Platform.DeliveryAndControlPlane.IDE -> this 'provide "code"' + } + environment local 'Environment Local' 'Environment for developing / Integration' + } + environment cloud { + environment test 'Environment Test' 'Environment for review delivery' + environment prod 'Environment Prod' 'Environment for final delivery' + } +} + +views { + view developer { + title "Developer Experience" + include developer + include Platform.DeliveryAndControlPlane.* + include Platform.DeliveryAndControlPlane.VersionControl.* + include Platform.DeliveryAndControlPlane.Portal.* + + include Platform.DeliveryAndControlPlane.IDE with { + title 'IDE' + description 'The IDE is the developers center of coding' + color green + } + } + + view environments { + include platformengineer, developer + include Platform.DeliveryAndControlPlane.IDE, Platform.Portal + include element.kind=environment + autoLayout TopBottom + } +} \ No newline at end of file diff --git a/resources/architecture-c4/ipceicis-363-goldenpath-sia/landscape.png b/resources/architecture-c4/ipceicis-363-goldenpath-sia/landscape.png new file mode 100755 index 0000000..b49bbd8 Binary files /dev/null and b/resources/architecture-c4/ipceicis-363-goldenpath-sia/landscape.png differ diff --git a/resources/architecture-c4/ipceicis-363-goldenpath-sia/platform.c4 b/resources/architecture-c4/ipceicis-363-goldenpath-sia/platform.c4 new file mode 100755 index 0000000..a9b925f --- /dev/null +++ b/resources/architecture-c4/ipceicis-363-goldenpath-sia/platform.c4 @@ -0,0 +1,106 @@ +specification { + tag plane + tag genericPlatformComponent + element plane { + notation "Plane" + style { + color gray + } + } + element system { + style { + opacity 20% + color secondary + } + } + element container { + style { + opacity 20% + color secondary + } + } + element component { + style { + opacity 20% + color secondary + } + } + element platform +} + +model { + platform Platform { + plane DeliveryAndControlPlane { + #plane + system IDE { + #genericPlatformComponent + -> CIPipeline + } + system Portal { + #genericPlatformComponent + ->ApplicationSourceCode + } + system VersionControl { + #genericPlatformComponent + style { + icon https://upload.wikimedia.org/wikipedia/commons/0/0f/Forgejo-wordmark.svg + } + component PlatformSourceCode { + #genericPlatformComponent + title 'Platform Source Code' + component IAC { + -> Orchestrator + } + component Automations + } + component ApplicationSourceCode { + #genericPlatformComponent + title 'Application Source Code' + component Score + component Workload + -> CIPipeline + } + } + } + plane IntegrationAndDeliveryPlane { + #plane + system CIPipeline { + -> Registry + } + system Registry { + -> Orchestrator + } + system Orchestrator { + #genericPlatformComponent + style { + color red + } + -> CDPipeline + -> SecretsAndIdentityManagement + } + system CDPipeline { + -> RessourcePlane + } + } + plane MonitoringAndLoggingPlane { + #plane + system Observability + } + plane SecurityPlane { + #plane + style { + + } + system SecretsAndIdentityManagement { + #genericPlatformComponent + } + } + plane RessourcePlane { + #plane + system Compute + system Data + system Networking + system Services + } + } +} diff --git a/resources/architecture-c4/platform.c4 b/resources/architecture-c4/platform.c4 new file mode 100755 index 0000000..85449a8 --- /dev/null +++ b/resources/architecture-c4/platform.c4 @@ -0,0 +1,126 @@ +specification { + tag plane + tag genericPlatformComponent + element plane { + notation "Plane" + style { + color gray + } + } + element system { + style { + opacity 20% + color secondary + } + } + element container { + style { + opacity 20% + color secondary + } + } + element component { + style { + opacity 20% + color secondary + } + } +} + +model { + plane DeliveryAndControlPlane { + #plane + system IDE { + #genericPlatformComponent + -> CIPipeline + } + system Portal { + #genericPlatformComponent + ->ApplicationSourceCode + } + system VersionControl { + #genericPlatformComponent + style { + icon https://upload.wikimedia.org/wikipedia/commons/0/0f/Forgejo-wordmark.svg + } + component PlatformSourceCode { + #genericPlatformComponent + title 'Platform Source Code' + component IAC { + -> Orchestrator + } + component Automations + } + component ApplicationSourceCode { + #genericPlatformComponent + title 'Application Source Code' + component Score + component Workload + -> CIPipeline + } + } + } + plane IntegrationAndDeliveryPlane { + #plane + system CIPipeline { + -> Registry + } + system Registry { + -> Orchestrator + } + system Orchestrator { + #genericPlatformComponent + style { + color red + } + -> CDPipeline + -> SecretsAndIdentityManagement + } + system CDPipeline { + -> RessourcePlane + } + } + plane MonitoringAndLoggingPlane { + #plane + system Observability + } + plane SecurityPlane { + #plane + style { + + } + system SecretsAndIdentityManagement { + #genericPlatformComponent + } + } + plane RessourcePlane { + #plane + system Compute + system Data + system Networking + system Services + } +} + +views { + /** + * @likec4-generated(v1) + * iKRoYXNo2Sg4YzM0OTBhYzE2MGZhNjIwNWI5YzNmNjY5ZGE3YzZiMTRiMWMzM2I4qmF1dG9MYXlvdXSiVEKhePiheQCld2lkdGjNCBCmaGVpZ2h0zQeRpW5vZGVz3gAUt0RlbGl2ZXJ5QW5kQ29udHJvbFBsYW5lgqFilP3NAfLNCAvNAkehY8O7SW50ZWdyYXRpb25B + * bmREZWxpdmVyeVBsYW5lgqFilPjNBEjNBnLNARqhY8O5TW9uaXRvcmluZ0FuZExvZ2dpbmdQbGFuZYKhYpT9zQVuzQGAzQEJoWPDrVNlY3VyaXR5UGxhbmWCoWKU+s0GiM0Bgs0BCaFjw65SZXNzb3VyY2VQbGFuZYKhYpTNBnTNBEfNAZLNA0ChY8O7RGVsaXZlcnlB + * bmRDb250cm9sUGxhbmUuSURFgqFilCXNAijNAUDMtKFjwr5EZWxpdmVyeUFuZENvbnRyb2xQbGFuZS5Qb3J0YWyCoWKUzQG9zQIpzQFAzLShY8LZJkRlbGl2ZXJ5QW5kQ29udHJvbFBsYW5lLlZlcnNpb25Db250cm9sgqFilM0Blc0C+c0GS80BGKFjw9koSW50ZWdy + * YXRpb25BbmREZWxpdmVyeVBsYW5lLk9yY2hlc3RyYXRvcoKhYpTNA2jNBIbNAUDMtKFjwtkmSW50ZWdyYXRpb25BbmREZWxpdmVyeVBsYW5lLkNJUGlwZWxpbmWCoWKUIM0EhM0BQMy0oWPC2SRJbnRlZ3JhdGlvbkFuZERlbGl2ZXJ5UGxhbmUuUmVnaXN0cnmCoWKU + * zQHEzQSDzQFAzLShY8LZJkludGVncmF0aW9uQW5kRGVsaXZlcnlQbGFuZS5DRFBpcGVsaW5lgqFilM0FAs0Efs0BQMy0oWPC2SdNb25pdG9yaW5nQW5kTG9nZ2luZ1BsYW5lLk9ic2VydmFiaWxpdHmCoWKUHc0Fo80BQMy0oWPC2SpTZWN1cml0eVBsYW5lLlNlY3Jl + * dHNBbmRJZGVudGl0eU1hbmFnZW1lbnSCoWKUGs0Gvc0BQsy0oWPCtlJlc3NvdXJjZVBsYW5lLkNvbXB1dGWCoWKUzQaczQR8zQFAzLShY8KzUmVzc291cmNlUGxhbmUuRGF0YYKhYpTNBp3NBTbNAUDMtKFjwrlSZXNzb3VyY2VQbGFuZS5OZXR3b3JraW5ngqFilM0G + * ns0Gq80BQMy0oWPCt1Jlc3NvdXJjZVBsYW5lLlNlcnZpY2VzgqFilM0Gnc0F8c0BQMy0oWPC2TlEZWxpdmVyeUFuZENvbnRyb2xQbGFuZS5WZXJzaW9uQ29udHJvbC5QbGF0Zm9ybVNvdXJjZUNvZGWCoWKUzQZ3zQMvzQFAzLShY8LZPERlbGl2ZXJ5QW5kQ29udHJv + * bFBsYW5lLlZlcnNpb25Db250cm9sLkFwcGxpY2F0aW9uU291cmNlQ29kZYKhYpTNAb7NAzXNAUDMtKFjwqVlZGdlc4A= + */ + view planes { + title "Platform" + description "Platform Reference Architecture High Level Planes (by Humanitec)" + include element.tag==#plane, element.tag==#genericPlatformComponent + include DeliveryAndControlPlane.*, VersionControl.*, IntegrationAndDeliveryPlane.*, MonitoringAndLoggingPlane.*, RessourcePlane.* + + exclude -> ApplicationSourceCode, -> DeliveryAndControlPlane, -> IntegrationAndDeliveryPlane.*, -> SecurityPlane, -> RessourcePlane + } + +} \ No newline at end of file diff --git a/resources/doc-likec4/README.md b/resources/doc-likec4/README.md deleted file mode 100644 index 76c9695..0000000 --- a/resources/doc-likec4/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Documentation Platform Architecture - -This folder contains LikeC4 architecture models that document the documentation platform itself. - -## Purpose - -These models help new **Technical Writers** understand: - -- How the documentation platform works -- The local development workflow -- CI/CD pipeline and testing processes -- Deployment to edge infrastructure - -## Models - -- `documentation-platform.c4` - Main model with all elements and relationships -- `views.c4` - View definitions for different perspectives - -## Views - -### Overview - -High-level view of the entire documentation platform, showing all major components. - -### Local Development Workflow - -How a technicalWriter works locally with content, Taskfile, and Hugo server. - -### CI/CD Pipeline - -Automated testing and container build process via GitHub Actions. - -### Deployment Flow - -How documentation is deployed to the edge environment via Kubernetes. - -### Full Workflow - -End-to-end process from content creation to published documentation. - -### Testing Capabilities - -All automated tests that ensure documentation quality. - -## Usage - -### Start LikeC4 Development Server - -```bash -cd resources/doc-likec4 -npm install -npm start -``` - -This opens the LikeC4 IDE in your browser where you can: - -- Edit models interactively -- Preview views in real-time -- Export diagrams - -### Embed in Documentation - -In your Markdown files: - -```markdown -{{< likec4-view view="overview" project="documentation-platform" >}} -``` - -Optional parameters: -- `view` (required) - The view ID from your LikeC4 model -- `project` (optional, default: "architecture") - The LikeC4 project name -- `title` (optional, default: "Architecture View: {view}") - Custom header text - -Example with custom title: - -```markdown -{{< likec4-view view="overview" project="documentation-platform" title="Complete Documentation Platform" >}} -``` - -## Configuration - -- `likec4.config.json` - Project configuration -- `package.json` - LikeC4 CLI dependencies - -## Related Documentation - -The models are documented in: `content/en/docs/documentation/` - -- Overview and introduction -- Local development guide -- Testing processes -- CI/CD pipeline -- Publishing to edge diff --git a/resources/doc-likec4/documentation-platform.c4 b/resources/doc-likec4/documentation-platform.c4 deleted file mode 100644 index dce272c..0000000 --- a/resources/doc-likec4/documentation-platform.c4 +++ /dev/null @@ -1,371 +0,0 @@ -specification { - element person { - style { - shape person - } - } - element system { - style { - shape rectangle - } - } - element tool { - style { - shape rectangle - } - } - element component { - style { - shape rectangle - } - } - element process { - style { - shape rectangle - } - } - element environment { - style { - shape cylinder - } - } - element repository { - style { - shape storage - } - } -} - -model { - -// === Personas === -technicalWriter = person 'Technical Writer' { - description 'Content creator and maintainer of the developer platform documentation' - technology 'Hugo, Markdown, LikeC4' -} - -// === Documentation Platform System === -docPlatform = system 'Documentation Platform' { - description 'Hugo-based documentation system with integrated architecture visualization' - - // Core Components - hugoSite = component 'Hugo Site' { - description 'Static site generator based on Hugo with Docsy theme' - technology 'Hugo Extended, Docsy' - } - - contentRepo = repository 'Content Repository' { - description 'Markdown files, images, and configuration' - technology 'Git, Markdown' - - contentPages = component 'Content Pages' { - description 'Documentation pages in Markdown format' - technology 'Markdown' - } - - archModels = component 'Architecture Models' { - description 'LikeC4 architecture models and views' - technology 'LikeC4 DSL' - } - - assets = component 'Static Assets' { - description 'CSS, JavaScript, images, fonts' - technology 'CSS, JavaScript' - } - } - - likec4Integration = component 'LikeC4 Integration' { - description 'Architecture diagram visualization embedded in documentation' - technology 'LikeC4, Web Components' - } - - // Build & Development Tools - taskfile = tool 'Taskfile' { - description 'Task automation for local development, build, and testing' - technology 'Task (go-task)' - } - - devServer = process 'Development Server' { - description 'Local Hugo server with hot reload for content development' - technology 'Hugo Server' - } -} - -// === CI/CD Pipeline === -cicdPipeline = system 'CI/CD Pipeline' { - description 'Automated testing and deployment pipeline' - - githubActions = process 'GitHub Actions' { - description 'Automated testing workflow on push/PR' - technology 'GitHub Actions' - - testBuild = component 'Build Test' { - description 'Hugo build validation' - technology 'Hugo' - } - - testMarkdown = component 'Markdown Lint' { - description 'Markdown syntax and style checking' - technology 'markdownlint' - } - - testHtml = component 'HTML Validation' { - description 'Generated HTML validation' - technology 'htmlvalidate' - } - - testLinks = component 'Link Checker' { - description 'Broken link detection' - technology 'htmltest' - } - } - - containerBuild = process 'Container Build' { - description 'OCI/Docker image creation with Hugo site' - technology 'Docker' - } -} - -// === Deployment === -deploymentEnv = system 'Deployment Environment' { - description 'Edge deployment infrastructure' - - edgeConnect = environment 'Edge Connect' { - description 'Edge deployment orchestration platform' - technology 'EdgeConnect' - } - - k8sCluster = environment 'Kubernetes Cluster' { - description 'K8s cluster on edge cloudlet (Munich)' - technology 'Kubernetes' - - docService = component 'Documentation Service' { - description 'LoadBalancer service exposing docs on port 80' - technology 'K8s Service' - } - - docDeployment = component 'Documentation Deployment' { - description 'Pod running Hugo-generated static site' - technology 'K8s Deployment, Nginx' - } - } -} - -// === Relationships: Technical Writer Workflow === -technicalWriter -> contentRepo.contentPages 'writes documentation' { - description 'Creates and updates Markdown content' -} - -technicalWriter -> contentRepo.archModels 'creates architecture models' { - description 'Defines C4 models with LikeC4 DSL' -} - -technicalWriter -> taskfile 'executes local tasks' { - description 'task serve, task build, task test' -} - -// === Relationships: Local Development === -taskfile -> devServer 'starts' { - description 'task serve' -} - -devServer -> hugoSite 'renders' { - description 'Live reload on content changes' -} - -hugoSite -> contentRepo 'reads content from' { - description 'Processes Markdown and templates' -} - -hugoSite -> likec4Integration 'integrates' { - description 'Embeds architecture diagrams' -} - -likec4Integration -> contentRepo.archModels 'visualizes' { - description 'Renders C4 models as interactive diagrams' -} - -// === Relationships: Testing === -taskfile -> githubActions.testBuild 'can run locally' { - description 'task test:build' -} - -taskfile -> githubActions.testMarkdown 'can run locally' { - description 'task test:markdown' -} - -taskfile -> githubActions.testHtml 'can run locally' { - description 'task test:html' -} - -taskfile -> githubActions.testLinks 'can run locally' { - description 'task test:links' -} - -// === Relationships: CI/CD === -contentRepo -> githubActions 'triggers on push/PR' { - description 'Webhook on main branch' -} - -githubActions.testBuild -> hugoSite 'builds' { - description 'hugo --gc --minify' -} - -githubActions.testMarkdown -> contentRepo.contentPages 'validates' { - description 'Lints Markdown files' -} - -githubActions.testHtml -> hugoSite 'validates output' { - description 'Checks generated HTML' -} - -githubActions.testLinks -> hugoSite 'checks links in' { - description 'Detects broken links' -} - -githubActions -> containerBuild 'triggers on success' { - description 'Builds Docker image with Hugo output' -} - -containerBuild -> hugoSite 'packages' { - description 'public/ directory served by Nginx' -} - -// === Relationships: Deployment === -containerBuild -> deploymentEnv.edgeConnect 'pushes image to' { - description 'Tagged container image' -} - -deploymentEnv.edgeConnect -> deploymentEnv.k8sCluster 'deploys to' { - description 'Via edgeconnectdeployment.yaml' -} - -deploymentEnv.k8sCluster.docDeployment -> deploymentEnv.k8sCluster.docService 'exposed by' { - description 'Port 80' -} - -technicalWriter -> deploymentEnv.k8sCluster.docService 'views published docs' { - description 'HTTPS access to live documentation' -} - -} - -// === Views === - -views { - - view overview of docPlatform { - title 'Documentation Platform Overview' - description 'High-level overview of the Hugo-based documentation platform for technicalWriters' - - include * - - style technicalWriter { - color green - } - style docPlatform { - color blue - } - } - - view localDevelopment of docPlatform { - title 'Local Development Workflow' - description 'How a technicalWriter works locally with the documentation' - - include technicalWriter - include docPlatform - include docPlatform.contentRepo -> * - include docPlatform.hugoSite - include docPlatform.likec4Integration - include docPlatform.taskfile - include docPlatform.devServer - - style technicalWriter { - color green - } - style docPlatform.taskfile { - color amber - } - style docPlatform.devServer { - color amber - } - } - - view cicdPipeline of cicdPipeline { - title 'CI/CD Pipeline' - description 'Automated testing and container build process' - - include cicdPipeline - include cicdPipeline.githubActions -> * - include cicdPipeline.containerBuild - include docPlatform.contentRepo - include docPlatform.hugoSite - - style cicdPipeline.githubActions { - color blue - } - style cicdPipeline.containerBuild { - color indigo - } - } - - view deploymentFlow { - title 'Deployment to Edge Environment' - description 'How the documentation is deployed to the edge infrastructure' - - include cicdPipeline.containerBuild - include deploymentEnv - include deploymentEnv.edgeConnect - include deploymentEnv.k8sCluster -> * - include technicalWriter - - style deploymentEnv { - color muted - } - style deploymentEnv.k8sCluster { - color secondary - } - } - - view fullWorkflow { - title 'Complete Technical Writer Workflow' - description 'End-to-end view from content creation to published documentation' - - include technicalWriter - include docPlatform.contentRepo - include docPlatform.taskfile - include cicdPipeline.githubActions - include cicdPipeline.containerBuild - include deploymentEnv.edgeConnect - include deploymentEnv.k8sCluster - - style technicalWriter { - color green - } - style docPlatform.taskfile { - color amber - } - style cicdPipeline.githubActions { - color blue - } - style deploymentEnv.k8sCluster { - color secondary - } - } - - view testingCapabilities of cicdPipeline.githubActions { - title 'Testing Capabilities' - description 'All automated tests that ensure documentation quality' - - include * - include docPlatform.hugoSite - include docPlatform.contentRepo.contentPages - include docPlatform.taskfile - - style cicdPipeline.githubActions { - color blue - } - } - -} - diff --git a/resources/doc-likec4/likec4.config.json b/resources/doc-likec4/likec4.config.json deleted file mode 100644 index 0a3b2c2..0000000 --- a/resources/doc-likec4/likec4.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "documentation-platform" -} diff --git a/resources/doc-likec4/package-lock.json b/resources/doc-likec4/package-lock.json deleted file mode 100644 index fd4ba24..0000000 --- a/resources/doc-likec4/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "doc-likec4", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/resources/edp-likec4/INTEGRATION.md b/resources/edp-likec4/INTEGRATION.md deleted file mode 100644 index 9a73472..0000000 --- a/resources/edp-likec4/INTEGRATION.md +++ /dev/null @@ -1,124 +0,0 @@ -# LikeC4 Architecture Documentation Integration - -This directory contains the LikeC4 architecture models and views that power the interactive architecture diagrams throughout this documentation. - -## What is LikeC4? - -LikeC4 is a tool for creating interactive C4 architecture diagrams as code. It generates web components that can be embedded directly into web pages, providing an interactive way to explore complex system architectures. - -## Directory Structure - -``` -resources/likec4/ -├── models/ # C4 model definitions (.c4 files) -│ ├── components/ # Component-level models -│ ├── containers/ # Container-level models -│ ├── context/ # System context models -│ └── code/ # Code-level workflow models -├── views/ # View definitions -│ ├── deployment/ # Deployment architecture views -│ ├── edp/ # EDP-specific views -│ ├── high-level-concept/ # Conceptual views -│ └── dynamic/ # Dynamic process views -├── deployment/ # Deployment-specific models -├── doc/ # Documentation and screenshots -├── package.json # Node.js dependencies -└── README.md # This file -``` - -## Generating Web Components - -To generate the web component that Hugo can use: - -```bash -cd resources/likec4 - -# Install dependencies (first time only) -npm install - -# Generate the web component -npx likec4 codegen webcomponent \ - --webcomponent-prefix likec4 \ - --outfile ../../static/js/likec4-webcomponent.js -``` - -This creates `static/js/likec4-webcomponent.js` which contains all your architecture views as an interactive web component. - -## Using in Hugo Content - -### Using the Shortcode (Recommended) - -The simplest way to embed diagrams: - -```markdown -## Architecture Overview - -{{< likec4-view view="otc-faas" project="architecture" title="OTC FaaS Deployment Architecture" >}} -``` - -**Parameters:** -- `view` (required) - The view ID from your LikeC4 model -- `project` (optional, default: "architecture") - The LikeC4 project name -- `title` (optional, default: "Architecture View: {view}") - Custom header text - -### Manual HTML (Alternative) - -If you need more control: - -```markdown -
    -
    - System Architecture - High Level View -
    - -
    - Loading architecture diagram... -
    -
    - -{{< alert title="Note" >}} -The diagram above is interactive. Click on components to explore details. -{{< /alert >}} -``` - -## Available Views - -To discover available view IDs: - -```bash -# Search for all view definitions in .c4 files -cd resources/likec4 -grep -r "view\s\+\w" views/ models/ --include="*.c4" -``` - -Common view IDs include: -- `otc-faas` - OTC FaaS Deployment Architecture -- `edp` - EDP Main Overview -- `landscape` - Developer Landscape -- `edpbuilderworkflow` - EDP Builder Workflow -- And many more... - -## Workflow for Changes - -1. **Edit Models**: Modify `.c4` files in `models/` or `views/` -2. **Regenerate**: Run the codegen command (see above) -3. **Test**: Start Hugo dev server and check your pages -4. **Commit**: Commit both the `.c4` changes and regenerated JS file - -## Integration with Hugo - -The integration is enabled via: -- `hugo.toml` - Configuration parameter `params.likec4.enable = true` -- `layouts/partials/hooks/head-end.html` - Loads CSS and JS -- `static/css/likec4-styles.css` - Styling for diagrams -- `static/js/likec4-loader.js` - Dynamic loading logic -- `static/js/likec4-webcomponent.js` - Generated web component (you create this) - -## Migrated from edp-doc - -This content was migrated from the edp-doc repository with full Git history preserved. This repository is now the primary source for LikeC4 architecture documentation. - -## More Information - -- [LikeC4 Documentation](https://likec4.dev/) -- [C4 Model](https://c4model.com/) diff --git a/resources/edp-likec4/README.md b/resources/edp-likec4/README.md deleted file mode 100644 index f567446..0000000 --- a/resources/edp-likec4/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# LikeC4 Architecture Documentation - EDP Platform - -This folder contains LikeC4 architecture models for the **Enterprise Developer Platform (EDP)**. - -## Purpose - -These models document the platform architecture, not the documentation system itself. -(For documentation platform architecture, see `resources/doc-likec4/`) - -## Usage - -Run `npx likec4 start` to start dev server - -## with docker and how to render/export images - -// how to create/export c4 images: -// see also https://likec4.dev/tooling/cli/ - -docker run -it --rm --name likec4 --user node -v $PWD:/app node bash -npm install likec4 -exit - -docker commit likec4 likec4 -docker run -it --rm --user node -v $PWD:/app -p 5173:5173 likec4 bash - -// as root -npx playwright install-deps -npx playwright install - -npm install likec4 - -// render -node@e20899c8046f:/app/content/en/docs/project/onboarding$ ./node_modules/.bin/likec4 export png -o ./images . - -## trouble shooting - -when refactoring you might need to restart the languange server, just that it updates its internal model representation -In VSCode it is: `ctrl+Shift+P' + 'LikeC4: restart languange server` \ No newline at end of file diff --git a/resources/edp-likec4/deployment/kind/edp.c4 b/resources/edp-likec4/deployment/kind/edp.c4 deleted file mode 100644 index e677b53..0000000 --- a/resources/edp-likec4/deployment/kind/edp.c4 +++ /dev/null @@ -1,86 +0,0 @@ -// Deployment model -deployment { - - environment local 'Local kind-cluster' { - description 'Local kind-cluster environment for EDP, typically run by edpbuilder' - technology 'Kind' - icon tech:kubernetes - - namespace backstage { - instanceOf edp.ui.backstage - instanceOf edp.ui.database - } - - namespace argocd { - instanceOf edp.argoCD.argocdAppController - instanceOf edp.argoCD.argocdAppSetController - instanceOf edp.argoCD.argocdRedis - instanceOf edp.argoCD.argocdRepoServer - instanceOf edp.argoCD.argocdServer - } - - namespace gitea { - instanceOf edp.forgejo - instanceOf forgejoRunner - } - - namespace keycloak { - instanceOf edp.keycloak.keycloak - instanceOf edp.keycloak.keycloakDB - } - - namespace crossplane 'crossplane-system' { - instanceOf edp.crossplane.crossplane - instanceOf edp.crossplane.crossplaneFunction - instanceOf edp.crossplane.crossplaneRbacManager - instanceOf edp.crossplane.providerArgoCD - instanceOf edp.crossplane.providerKind - instanceOf edp.crossplane.providerShell - } - - namespace externalSecrets 'external-secrets' { - instanceOf edp.externalSecrets.certController - instanceOf edp.externalSecrets.externalSecrets - instanceOf edp.externalSecrets.webhook - } - - namespace velero { - instanceOf edp.velero.velero - } - - namespace minio 'minio-backup' { - instanceOf edp.minio.minio - } - - namespace monitoring { - instanceOf edp.monitoring.alloy - instanceOf edp.monitoring.distributor - instanceOf edp.monitoring.gateway - instanceOf edp.monitoring.ingestor - instanceOf edp.monitoring.querier - instanceOf edp.monitoring.queryFrontend - } - - namespace ingressNginx 'ingress-nginx'{ - instanceOf edp.ingressNginx.ingressNginx - } - - namespace openbao 'openbao' { - instanceOf edp.openbao.openbao - instanceOf edp.openbao.agentInjector - } - - namespace fibonacci 'fibonacci-app' { - instanceOf edp.testApp.fibonacci - } - - namespace mailhog 'mailhog' { - instanceOf edp.mailhog.mailhog - } - - namespace spark 'spark' { - instanceOf edp.spark.sparkoperator - } - } -} - diff --git a/resources/edp-likec4/deployment/otc/edp.c4 b/resources/edp-likec4/deployment/otc/edp.c4 deleted file mode 100644 index 3587b15..0000000 --- a/resources/edp-likec4/deployment/otc/edp.c4 +++ /dev/null @@ -1,48 +0,0 @@ -// Deployment model -deployment { - - cloud otc-edp-per-tenant 'OTC EDP per tenant cluster' { - description 'OTC environment for EDP. EDP is the environment a customer gets from us. - - This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry. - ' - technology 'OTC' - - kubernetes cce 'OTC CCE' { - description 'OTC Container Cluster Engine' - icon tech:kubernetes - technology 'Kubernetes' - - cluster edp 'EDP' { - instanceOf edp.argoCD - instanceOf forgejoRunner - instanceOf edp.forgejo { - -> cloudServices.elasticsearch - -> cloudServices.objectstorage - -> cloudServices.postgres - -> cloudServices.redis - } - instanceOf edp.externalSecrets - instanceOf edp.ingressNginx - instanceOf edp.garm - } - } - - paas cloudServices 'EDP Cloud Services' { - description 'EDP Cloud Services' - technology 'Cloud Services' - - instanceOf postgres - instanceOf redis - instanceOf objectstorage - instanceOf elasticsearch - } - - computeressource forgejoRunnerInfrastructure 'EDP ForgejoRunner infrastructure' { - description 'Infrastructure for Forgejo runners like pods, vms, lxds, etc' - instanceOf forgejoRunner { - -> cce.edp.forgejo 'registers' - } - } - } -} diff --git a/resources/edp-likec4/deployment/otc/faas-deployment.c4 b/resources/edp-likec4/deployment/otc/faas-deployment.c4 deleted file mode 100644 index 22a09c9..0000000 --- a/resources/edp-likec4/deployment/otc/faas-deployment.c4 +++ /dev/null @@ -1,84 +0,0 @@ -deployment { - - cloud otc-faas 'OTC prototype FaaS' { - description 'OTC environments for Prototype FaaS.' - technology 'OTC' - - environment dev 'tenant Dev' { - description '*.t09.de' - technology 'OTC' - - kubernetes cce 'Central Forgejo' { - description '*.t09.de' - icon tech:kubernetes - technology 'Kubernetes' - - cluster edp 'Forgejo Dev for platform team' { - description 't09.de' - - instanceOf edp.forgejo { - -> cloudServices - } - } - } - - paas cloudServices 'EDP Cloud Services' { - description 'EDP Cloud Services (Postgres, Redis, etc.)' - technology 'Cloud Services' - } - - kubernetes observability 'Observability' { - description '*.t09.de' - icon tech:kubernetes - technology 'Kubernetes' - } - } - - environment prod 'Tenant Prod' { - description '*.buildth.ing' - technology 'OTC' - - kubernetes cce 'Central Forgejo' { - description '*.buildth.ing' - icon tech:kubernetes - technology 'Kubernetes' - - cluster edp 'Forgejo for all EDP-tenants' { - - instanceOf edp.forgejo 'Forgejo for all EDP-tenants' { - description 'buildth.ing' - -> cloudServices - } - } - } - - - paas cloudServices 'EDP Cloud Services' { - description 'EDP Cloud Services (Postgres, Redis, etc.)' - technology 'Cloud Services' - } - - kubernetes observability 'Observability' { - description '*.buildth.ing' - icon tech:kubernetes - technology 'Kubernetes' - } - } - - - } - cloud edge 'Edge Cloud' { - description 'Edge environments for distributed workloads.' - technology 'Edge' - - environment edge-dev 'Edge Dev' { - description 'Edge development environment' - technology 'Edge' - } - - environment edge-prod 'Edge Prod' { - description 'Edge production environment' - technology 'Edge' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/deployment/otc/foundry.c4 b/resources/edp-likec4/deployment/otc/foundry.c4 deleted file mode 100644 index dcd1197..0000000 --- a/resources/edp-likec4/deployment/otc/foundry.c4 +++ /dev/null @@ -1,74 +0,0 @@ -// Deployment model -deployment { - - cloud otc-edpFoundry 'OTC EDP Foundry Central Service clusters' { - description ' - OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. - - A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. - Optionally we will have a WebUI/API/CLI - ' - technology 'OTC' - - kubernetes cce 'OTC CCE' { - description 'OTC Container Cluster Engine' - icon tech:kubernetes - technology 'Kubernetes' - - cluster internalServices 'EDP Foundry Internal Services' { - instanceOf edp.argoCD - instanceOf edp.forgejo { - -> workflowSetupEDPInfrastructure.forgejoRunner 'invokes' - -> workflowSetupArgoCDInfrastructure.forgejoRunner 'invokes' - } - instanceOf edp.externalSecrets - instanceOf edp.openbao - instanceOf edp.ingressNginx - } - - cluster centralObservability 'EDP Foundry Central Observability' { - instanceOf edp.grafana - instanceOf edp.prometheus - instanceOf edp.loki - } - } - computeressource workflowSetupEDPInfrastructure 'EDP infrastructure Workflow' { - description 'EDP infrastructure Workflow' - - instanceOf forgejoRunner { - -> forgejoRunnerWorker 'runs' - } - instanceOf forgejoRunnerWorker { - -> edpworkflow 'executes' - } - instanceOf edpworkflow { - -> otc-edp-per-tenant.cce.edp 'deploys edp to otc.cce' - -> otc-edp-per-tenant.cloudServices 'deploys edp to otc.paas' - - } - } - - computeressource workflowSetupArgoCDInfrastructure 'EDP ArgoCD Workflow' { - description 'EDP Setup ArgoCD Workflow' - instanceOf forgejoRunner { - -> forgejoRunnerWorker 'runs' - } - instanceOf forgejoRunnerWorker { - -> edpworkflow 'executes' - } - instanceOf edpworkflow { - -> otc-edp-per-tenant.cce.argoCD - - } - } - - computeressource forgejoRunnerInfrastructure 'EDP ForgejoRunner infrastructure' { - description 'Infrastructure for Forgejo runners like pods, vms, lxds, etc' - instanceOf forgejoRunner { - -> cce.internalServices.forgejo 'registers' - } - } - - } -} - diff --git a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-2.png b/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-2.png deleted file mode 100644 index 6199ff1..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-2.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-draft.png b/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-draft.png deleted file mode 100644 index f56ef30..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop-draft.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop.png b/resources/edp-likec4/doc/developer-landscape/cicd-outerloop.png deleted file mode 100644 index 29b5122..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/cicd-outerloop.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/devday-presentation.md b/resources/edp-likec4/doc/developer-landscape/devday-presentation.md deleted file mode 100644 index 339d63e..0000000 --- a/resources/edp-likec4/doc/developer-landscape/devday-presentation.md +++ /dev/null @@ -1,44 +0,0 @@ -# Developer landscape with respect to DevOps Inner-Outer loop - -## Inner loop, outer loop - -![alt text](localdev.png) - -* [What software delivery leaders need to know about inner & outer loops](https://curiositysoftware.medium.com/what-software-delivery-leaders-need-to-know-about-inner-outer-loops-9da765b0ca2c) - -* (original articale is here](https://www.curiositysoftware.ie/blog/software-delivery-leaders-guide-inner-outer-loops) - -## Landscape - -### Draft - -![alt text](developer-landscape-view-draft.png) - -### C4 - -See [developer-landscape](../../views/landscape.c4) - -![alt text](developer-landscape-view-c4.png) -![alt text](developer-landscape-view-c4-2.png) - -![alt text](developer-landscape-view-c4-ppt-layouted.png) -![alt text](developer-landscape-view-c4-ppt-layouted-dark.png) - -## CI/CD Outerloop - -### Draft - -![alt text](cicd-outerloop-draft.png) - -ArgoCD and Cloud are CD, Forgejo is CI - -### C4 - -![alt text](cicd-outerloop.png) - -![alt text](cicd-outerloop-2.png) - - -## PPT - -![alt text](slide-1.png) \ No newline at end of file diff --git a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-2.png b/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-2.png deleted file mode 100644 index eb9b073..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-2.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted-dark.png b/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted-dark.png deleted file mode 100644 index 5480fb0..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted-dark.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted.png b/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted.png deleted file mode 100644 index 81c4d0d..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4-ppt-layouted.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4.png b/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4.png deleted file mode 100644 index 58e7847..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-c4.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-draft.png b/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-draft.png deleted file mode 100644 index 46b3044..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/developer-landscape-view-draft.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/localdev.png b/resources/edp-likec4/doc/developer-landscape/localdev.png deleted file mode 100644 index 6de1218..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/localdev.png and /dev/null differ diff --git a/resources/edp-likec4/doc/developer-landscape/slide-1.png b/resources/edp-likec4/doc/developer-landscape/slide-1.png deleted file mode 100644 index 70acab2..0000000 Binary files a/resources/edp-likec4/doc/developer-landscape/slide-1.png and /dev/null differ diff --git a/resources/edp-likec4/images/person-profile.svg b/resources/edp-likec4/images/person-profile.svg deleted file mode 100644 index 40786b2..0000000 --- a/resources/edp-likec4/images/person-profile.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - Person profile - - diff --git a/resources/edp-likec4/likec4.config.json b/resources/edp-likec4/likec4.config.json deleted file mode 100644 index bf92db2..0000000 --- a/resources/edp-likec4/likec4.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "architecture" -} \ No newline at end of file diff --git a/resources/edp-likec4/models/code/workflow-edpbuilder.c4 b/resources/edp-likec4/models/code/workflow-edpbuilder.c4 deleted file mode 100644 index 1610d72..0000000 --- a/resources/edp-likec4/models/code/workflow-edpbuilder.c4 +++ /dev/null @@ -1,103 +0,0 @@ -model { - workflow edfbuilder_workflow "EDFbuilder" { - step runEDP "Run edpbuilder script" { - style { - opacity 25% - } - step createCrossplaneNS "Create Crossplane namespace" - step installCrossplaneHelm "Install Crossplane Helm Chart" - step installCrossplaneFunctionsAndProviders "Install Crossplane Functions and Providers" - step waitForCrossplaneFunctionsAndProviders "Wait for Crossplane Functions and Providers to become available" - step setupCrossplaneServiceAccount "Apply cluster-admin role to crossplane shell provider service account" - step createArgoCdNS "Create ArgoCD namespace" - step createGiteaNS "Create Gitea namespace" - step createArgoCdTlsCert "Create TLS Cert for Argo" - step createGiteaTlsCert "Create TLS Cert for Forgejo" - step createEDFBuilderDefinition "Create EDFbuilder crossplane definition (defines API)" - step createEDFBuilderComposition "Create EDFbuilder crossplane composition (defines what happens when EDFbuilder is applied)" - } - - step applyEDFBuilder "Applies EDFbuilder resource (and triggers creation)" { - style { - opacity 15% - } - - step setEnvVars "Set required environment variables" - step readWriteKubeConf "Make kube.conf write/readbale" - step setWorkDir "Set workdir to /tmp/rundir" - step cloneStacksRepo "Clone steps repo and checkout desired branch" - step hydrateStacksWithValues "Hydrate Stacks with values" - step createNamespaces "Create all required namespaces" - step createGiteaAdminPass "Create Admin Password for Forgejo" - step createGrafanaPass "Create Grafana Admin Password" - step applyServiceMonitorCRD "Apply ServiceMonitor CRDs for Prometheus" - step cloneIngressNginxChart "Git clone ingress-nginx helm chart" - step isntallIngressNginx "Install ingress-nginx from cloned chart" - step waitForIngress "Wait till ingress-nginx is ready" - step cloneArgoCDHelm "Git clone ArgoCD Helm Chart" - step installArgoCD "Install ArgoCD Helm Chart" - step installArgoCDIngress "Install ingress for ArgoCD" - step cloneForgejoHelmChart "Git clone Forgejo Helm Chart" - step installForgejo "Install Forgejo Helm Chart" - step installForgejoIngress "Install ingress for Forgejo" - step waitForArgoCD "Wait till ArgoCD is available" - step waitForForgejo "Wait till Forgejo is available" - step createForgejoUser "Create technical user for Forgejo" - step createForgejoRepo "Create repository for EDP state in Forgejo" - step installForgejoRunner "Install Forgejo Runner deployment" - step registerForgejoRunner "Create registration token secret for runner" - step configGitIdentity "Configure Git identity" - step configCrossplaneArgoCDProvider "Configure Crossplane ArgoCD provider" - step configCrossplaneKindProvider "Configure Crossplane Kind provider" - step uploadStacksToForgjo "Git push hydrated stacks to Forgejo isntance" - step configArgoDockerRegistry "Configure Docker Registry for Argo Workflows" - step createPackagesForgejoUser "Create packages user and token in Forgejo (unused?)" - step installArgoCDStacks "Apply all selected ArgoCD stacks" - step cleanup "Cleanup work folder and unset all env vars" - - setEnvVars -> readWriteKubeConf - readWriteKubeConf -> setWorkDir - setWorkDir -> cloneStacksRepo - cloneStacksRepo -> hydrateStacksWithValues - hydrateStacksWithValues -> createNamespaces - createNamespaces -> createGiteaAdminPass - createGiteaAdminPass -> createGrafanaPass - createGrafanaPass -> applyServiceMonitorCRD - applyServiceMonitorCRD -> cloneIngressNginxChart - cloneIngressNginxChart -> isntallIngressNginx - isntallIngressNginx -> waitForIngress - waitForIngress -> cloneArgoCDHelm - cloneArgoCDHelm -> installArgoCD - installArgoCD -> installArgoCDIngress - installArgoCDIngress -> cloneForgejoHelmChart - cloneForgejoHelmChart -> installForgejo - installForgejo -> installForgejoIngress - installForgejoIngress -> waitForArgoCD - waitForArgoCD -> waitForForgejo - waitForForgejo -> createForgejoUser - createForgejoUser -> createForgejoRepo - createForgejoRepo -> installForgejoRunner - installForgejoRunner -> registerForgejoRunner - registerForgejoRunner -> configGitIdentity - configGitIdentity -> configCrossplaneArgoCDProvider - configCrossplaneArgoCDProvider -> configCrossplaneKindProvider - configCrossplaneKindProvider -> uploadStacksToForgjo - uploadStacksToForgjo -> configArgoDockerRegistry - configArgoDockerRegistry -> createPackagesForgejoUser - createPackagesForgejoUser -> installArgoCDStacks - installArgoCDStacks -> cleanup - } - - createCrossplaneNS -> installCrossplaneHelm - installCrossplaneHelm -> installCrossplaneFunctionsAndProviders - installCrossplaneFunctionsAndProviders -> waitForCrossplaneFunctionsAndProviders - waitForCrossplaneFunctionsAndProviders -> setupCrossplaneServiceAccount - setupCrossplaneServiceAccount -> createArgoCdNS - createArgoCdNS -> createGiteaNS - createGiteaNS -> createArgoCdTlsCert - createArgoCdTlsCert -> createGiteaTlsCert - createGiteaTlsCert -> createEDFBuilderDefinition - createEDFBuilderDefinition -> createEDFBuilderComposition - createEDFBuilderComposition -> applyEDFBuilder - } -} diff --git a/resources/edp-likec4/models/code/workflow-setup-edp-argocd.c4 b/resources/edp-likec4/models/code/workflow-setup-edp-argocd.c4 deleted file mode 100644 index b47b9f6..0000000 --- a/resources/edp-likec4/models/code/workflow-setup-edp-argocd.c4 +++ /dev/null @@ -1,6 +0,0 @@ -model { - workflow argocdworkflow "EDP ArgoCD Setup Workflow" { - - } -} - diff --git a/resources/edp-likec4/models/code/workflow-setup-edp-infrastructure.c4 b/resources/edp-likec4/models/code/workflow-setup-edp-infrastructure.c4 deleted file mode 100644 index 456dfa4..0000000 --- a/resources/edp-likec4/models/code/workflow-setup-edp-infrastructure.c4 +++ /dev/null @@ -1,7 +0,0 @@ -model { - workflow edpworkflow "EDP Infrastructure Setup Workflow" { - // step createS3bucket "Create s3 bucket for state" {} - // step setupRedis "Setup Redis" {} - } -} - diff --git a/resources/edp-likec4/models/components/application-specification.c4 b/resources/edp-likec4/models/components/application-specification.c4 deleted file mode 100644 index 3916520..0000000 --- a/resources/edp-likec4/models/components/application-specification.c4 +++ /dev/null @@ -1,16 +0,0 @@ -model { - component applicationspecification "application-specification" { - description 'The application specification describes the application and its components. It is used to generate the application and its components.' - - component application_gitrepo 'Git App Repo' { - description 'Git Application Repository' - technology 'Git' - icon tech:git - } - component applicationspec_gitrepo 'Git AppSpec Repo' { - description 'Git Application Specification Repository' - technology 'Git' - icon tech:git - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/components/forgejoRunner.c4 b/resources/edp-likec4/models/components/forgejoRunner.c4 deleted file mode 100644 index 2a70d49..0000000 --- a/resources/edp-likec4/models/components/forgejoRunner.c4 +++ /dev/null @@ -1,6 +0,0 @@ -model { - component forgejoRunner 'Forgejo Runner' { - description 'A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM.' - -> edp.forgejoActions 'register' - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/components/forgejoRunnerWorker.c4 b/resources/edp-likec4/models/components/forgejoRunnerWorker.c4 deleted file mode 100644 index 4397bd1..0000000 --- a/resources/edp-likec4/models/components/forgejoRunnerWorker.c4 +++ /dev/null @@ -1,6 +0,0 @@ -model { - component forgejoRunnerWorker 'Forgejo Runner Worker' { - description 'A worker is a service that runs a job invoked by a runner. A worker typically is a container.' - - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/components/promtail.c4 b/resources/edp-likec4/models/components/promtail.c4 deleted file mode 100644 index 85b8e5e..0000000 --- a/resources/edp-likec4/models/components/promtail.c4 +++ /dev/null @@ -1,6 +0,0 @@ -model { - component promtail 'Promtail' { - description 'Log shipper agent for Loki' - - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/components/tools.c4 b/resources/edp-likec4/models/components/tools.c4 deleted file mode 100644 index 1d4dd0e..0000000 --- a/resources/edp-likec4/models/components/tools.c4 +++ /dev/null @@ -1,36 +0,0 @@ -model { - component edfbuilder "edfbuilder" { - description 'EDP Foundry Builder' - technology 'Golang' - icon tech:go - style { - shape rectangle - } - -> edf "boots one" - platformdeveloper -> edfbuilder "runs" - } - - component idpbuilder "idpbuilder" { - description 'Bootstrap tool for initial platform provisioning' - technology 'Golang' - icon tech:go - style { - shape rectangle - } - - -> edp.argoCD 'installs' - -> edp.forgejo 'installs' - -> edp.ingressNginx 'installs' - - platformdeveloper -> idpbuilder 'runs' - } - - component terraform 'Terraform' { - description 'Infrastructure provisioning (IaC)' - technology 'Terraform' - style { - shape rectangle - } - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/api.c4 b/resources/edp-likec4/models/containers/api.c4 deleted file mode 100644 index 8902864..0000000 --- a/resources/edp-likec4/models/containers/api.c4 +++ /dev/null @@ -1,9 +0,0 @@ -model { - - extend edp { - container api 'API' { - description 'API for the EDP platform' - icon tech:swagger - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/argocd.c4 b/resources/edp-likec4/models/containers/argocd.c4 deleted file mode 100644 index 59fbf47..0000000 --- a/resources/edp-likec4/models/containers/argocd.c4 +++ /dev/null @@ -1,24 +0,0 @@ -model { - - extend edp { - container argoCD 'ArgoCD' { - description 'GitOps Service' - - component argocdServer 'ArgoCD Server' - component argocdAppController 'ApplicationController' - component argocdAppSetController 'ApplicationSeetController' - component argocdRedis 'Redis' { - technology: 'Redis' - icon: tech:redis - } - component argocdRepoServer 'Repo Server' - - argocdServer -> argocdRedis 'read/write' - argocdRepoServer -> argocdRedis 'read/write' - argocdAppController -> argocdRedis 'read/write' - argocdAppSetController -> argocdRedis 'read/write' - - argocdRepoServer -> edp.forgejogit 'Syncs git repo' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/backstage.c4 b/resources/edp-likec4/models/containers/backstage.c4 deleted file mode 100644 index fd323c6..0000000 --- a/resources/edp-likec4/models/containers/backstage.c4 +++ /dev/null @@ -1,25 +0,0 @@ -model { - - extend edp { - container ui 'Backstage' { - description 'Developer Portal' - - component backstage 'Backstage' { - style { - icon tech:react - shape browser - } - } - - component database 'Database' { - technology 'Postgresql' - icon tech:postgresql - style { - shape storage - } - } - - backstage -> database 'reads/writes' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/crossplane.c4 b/resources/edp-likec4/models/containers/crossplane.c4 deleted file mode 100644 index 6452b8b..0000000 --- a/resources/edp-likec4/models/containers/crossplane.c4 +++ /dev/null @@ -1,16 +0,0 @@ -model { - - extend edp { - container crossplane 'Crossplane' { - #internal - description 'Declarative management of ressources' - - component crossplane 'Crossplane' - component crossplaneFunction 'Function Patch and Transform' - component crossplaneRbacManager 'RBAC Manager' - component providerArgoCD 'ArgoCD Provider' - component providerKind 'Kind Provider' - component providerShell 'Shell Provider' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/edgeconnect.c4 b/resources/edp-likec4/models/containers/edgeconnect.c4 deleted file mode 100644 index 5e39a06..0000000 --- a/resources/edp-likec4/models/containers/edgeconnect.c4 +++ /dev/null @@ -1,41 +0,0 @@ -model { - system edgeConnect 'EdgeConnect Cloud' { - description 'Provides an API and control plane to run applications on the edge' - - container api 'Edge Cloud API' { - description 'Single entry point for provisioning and lifecycle management' - } - - container resources 'Edge Resources' { - description 'Managed resources such as App, AppInstance, etc.' - } - - container controllers 'Controllers / Scheduler' { - description 'Reconciles desired state and drives deployments' - } - - container runtime 'Edge Clusters' { - description 'Runtime where applications actually run' - } - - api -> resources 'creates/updates' - controllers -> resources 'reconciles' - controllers -> runtime 'deploys' - } - - component edgeCli 'EdgeConnect CLI' { - description 'Command-line client for interactive usage' - } - - component edgeSdk 'EdgeConnect SDK' { - description 'SDK for programmatic integration' - } - - component edgeTerraformProvider 'Terraform Edge provider' { - description 'Terraform provider enabling declarative provisioning' - } - - edgeCli -> edgeConnect.api 'calls' - edgeSdk -> edgeConnect.api 'calls' - edgeTerraformProvider -> edgeConnect.api 'provisions via' -} diff --git a/resources/edp-likec4/models/containers/elasticsearch.c4 b/resources/edp-likec4/models/containers/elasticsearch.c4 deleted file mode 100644 index c50a766..0000000 --- a/resources/edp-likec4/models/containers/elasticsearch.c4 +++ /dev/null @@ -1,13 +0,0 @@ -model { - - container elasticsearch 'Elasticsearch' { - description ' - Elasticsearch is a distributed, RESTful search and analytics engine capable of - addressing a growing number of use cases. It centrally stores your data so you can - discover the expected and uncover the unexpected. - ' - icon tech:elasticsearch - technology 'Elasticsearch' - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/externalsecrets.c4 b/resources/edp-likec4/models/containers/externalsecrets.c4 deleted file mode 100644 index f929e19..0000000 --- a/resources/edp-likec4/models/containers/externalsecrets.c4 +++ /dev/null @@ -1,13 +0,0 @@ -model { - - extend edp { - container externalSecrets 'external-secrets' { - #internal - description 'Provider to access externally stored Kubernetes secrets' - - component externalSecrets 'external-secrets controller' - component certController 'cert-controller' - component webhook 'webhook' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/forgejo.c4 b/resources/edp-likec4/models/containers/forgejo.c4 deleted file mode 100644 index fcaeacd..0000000 --- a/resources/edp-likec4/models/containers/forgejo.c4 +++ /dev/null @@ -1,42 +0,0 @@ -model { - - extend edp { - container forgejo 'Forgejo' { - description ' - Fully managed DevOps Platform - offering capabilities like - code version controling - collaboration and ticketing - and security scanning - ' - technology 'Golang' - icon tech:go - - component forgejocollaboration 'Collaboration' { - icon tech:github - } - - component forgejoproject 'Project Mgmt' { - icon tech:github - } - - } - - component forgejoActions 'Forgejo Actions' { - description 'Continuous Integration like Github Actions' - technology 'Golang' - icon tech:go - -> forgejoRunner 'runs workflows' - } - - component imageregistry 'Forgejo OCI Image Registry' { - description 'Container Image Registry' - technology 'Golang' - icon tech:go - } - - component forgejogit 'ForgejoGit' { - icon tech:git - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/garm.c4 b/resources/edp-likec4/models/containers/garm.c4 deleted file mode 100644 index 26631e7..0000000 --- a/resources/edp-likec4/models/containers/garm.c4 +++ /dev/null @@ -1,24 +0,0 @@ -model { - extend edp { - container garm 'Garm Image' { - icon tech:docker - component garm 'Garm' { - description 'Provisions runners for Forgejo' - icon tech:go - } - - component providerEdgeConnect 'Garm Provider for EdgeConnect' { - icon tech:go - description 'Acts as abstraction layer for EdgeConnect' - } - - component providerKubernetes 'Garm Provider for Kubernetes' { - icon tech:go - description 'Acts as abstraction layer for Kubernetes' - } - - garm -> providerEdgeConnect 'calls binary' - garm -> providerKubernetes 'calls binary' - } - } -} diff --git a/resources/edp-likec4/models/containers/grafana.c4 b/resources/edp-likec4/models/containers/grafana.c4 deleted file mode 100644 index df88bb9..0000000 --- a/resources/edp-likec4/models/containers/grafana.c4 +++ /dev/null @@ -1,11 +0,0 @@ -model { - - extend edp { - container grafana 'Grafana' { - description 'Data visualization and monitoring' - icon tech:grafana - -> prometheus 'get metrics and alerts' - -> loki 'get logs' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/ingress.c4 b/resources/edp-likec4/models/containers/ingress.c4 deleted file mode 100644 index d0babc4..0000000 --- a/resources/edp-likec4/models/containers/ingress.c4 +++ /dev/null @@ -1,25 +0,0 @@ -model { - - extend edp { - container ingressNginx 'Ingress' { - #internal - description 'Ingress Controller for incoming http(s) traffic' - - component ingressNginx 'ingress-nginx' { - technology 'Nginx' - icon tech:nginx - } - - ingressNginx -> edp.forgejo 'https' - ingressNginx -> edp.keycloak.keycloak 'https' - ingressNginx -> edp.openbao.openbao 'https' - ingressNginx -> edp.argoCD.argocdServer 'https' - ingressNginx -> edp.ui.backstage 'https' - ingressNginx -> edp.minio.minio 'https' - ingressNginx -> edp.monitoring.alloy 'https' - ingressNginx -> edp.monitoring.queryFrontend 'https' - ingressNginx -> testApp.fibonacci 'https' - ingressNginx -> mailhog.mailhog 'https' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/keycloak.c4 b/resources/edp-likec4/models/containers/keycloak.c4 deleted file mode 100644 index 7f5ea08..0000000 --- a/resources/edp-likec4/models/containers/keycloak.c4 +++ /dev/null @@ -1,21 +0,0 @@ -model { - - extend edp { - container keycloak 'Keycloak' { - description 'Single Sign On for all EDP products' - component keycloak 'Keycloak' { - technology 'Java' - icon tech:java - } - - component keycloakDB 'Database' { - technology 'Postgresql' - icon tech:postgresql - style { - shape storage - } - } - keycloak -> keycloakDB 'reads/writes' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/kyverno.c4 b/resources/edp-likec4/models/containers/kyverno.c4 deleted file mode 100644 index 0ab2d71..0000000 --- a/resources/edp-likec4/models/containers/kyverno.c4 +++ /dev/null @@ -1,9 +0,0 @@ -model { - - extend edp { - container kyverno 'Kyverno' { - #internal - description 'Policy-as-Code' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/loki.c4 b/resources/edp-likec4/models/containers/loki.c4 deleted file mode 100644 index f49070a..0000000 --- a/resources/edp-likec4/models/containers/loki.c4 +++ /dev/null @@ -1,8 +0,0 @@ -model { - - extend edp { - container loki 'Loki' { - description 'Log aggregation system' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/mailhog.c4 b/resources/edp-likec4/models/containers/mailhog.c4 deleted file mode 100644 index c773c0f..0000000 --- a/resources/edp-likec4/models/containers/mailhog.c4 +++ /dev/null @@ -1,13 +0,0 @@ -model { - - extend edp { - container mailhog 'Mailhog' { - description 'Web and API based SMTP testing' - - component mailhog 'Mailhog' { - technology 'Golang' - icon tech:go - } - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/minio.c4 b/resources/edp-likec4/models/containers/minio.c4 deleted file mode 100644 index eb14fce..0000000 --- a/resources/edp-likec4/models/containers/minio.c4 +++ /dev/null @@ -1,15 +0,0 @@ -model { - - extend edp { - container minio 'Minio' { - description 'S3 compatible blob storage' - - component minio 'S3 Blob Storage' { - technology 'Minio' - style { - shape storage - } - } - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/monitoring.c4 b/resources/edp-likec4/models/containers/monitoring.c4 deleted file mode 100644 index 226acde..0000000 --- a/resources/edp-likec4/models/containers/monitoring.c4 +++ /dev/null @@ -1,30 +0,0 @@ -model { - - extend edp { - container monitoring 'Monitoring' { - description 'Observability system to monitor deployed components' - - component alloy 'Alloy' { - description 'Open Telemetry Collector' - - style { - icon tech:grafana - multiple true - } - } - - container loki 'Loki' { - description 'Log aggregation system' - icon tech:grafana - - component queryFrontend 'Query Frontend' - component distributor 'Distributor' - component gateway 'Gateway' - component ingestor 'Ingestor' - component querier 'Querier' - - alloy -> distributor 'pushes logs' - } - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/objectstorage.c4 b/resources/edp-likec4/models/containers/objectstorage.c4 deleted file mode 100644 index d1a9550..0000000 --- a/resources/edp-likec4/models/containers/objectstorage.c4 +++ /dev/null @@ -1,8 +0,0 @@ -model { - - container objectstorage 's3 Object Storage' { - description 's3 Object Storage' - technology 'S3 Object Storage' - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/openbao.c4 b/resources/edp-likec4/models/containers/openbao.c4 deleted file mode 100644 index 039355a..0000000 --- a/resources/edp-likec4/models/containers/openbao.c4 +++ /dev/null @@ -1,17 +0,0 @@ -model { - - extend edp { - container openbao 'OpenBao' { - description 'Secure secret storage' - - component openbao 'Openbao' { - technology 'Openbao' - style { - shape storage - } - } - - component agentInjector 'Agent Injector' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/postgres.c4 b/resources/edp-likec4/models/containers/postgres.c4 deleted file mode 100644 index a77cc73..0000000 --- a/resources/edp-likec4/models/containers/postgres.c4 +++ /dev/null @@ -1,13 +0,0 @@ -model { - - container postgres 'PostgreSQL' { - description ' - PostgreSQL is a powerful, open source object-relational database system. - It has more than 15 years of active development and a proven architecture - that has earned it a strong reputation for reliability, data integrity, - and correctness.' - icon tech:postgresql - technology 'PostgreSQL' - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/prometheus.c4 b/resources/edp-likec4/models/containers/prometheus.c4 deleted file mode 100644 index 5da49e8..0000000 --- a/resources/edp-likec4/models/containers/prometheus.c4 +++ /dev/null @@ -1,9 +0,0 @@ -model { - - extend edp { - container prometheus 'Prometheus' { - description 'Monitoring and alerting toolkit' - icon tech:prometheus - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/redis.c4 b/resources/edp-likec4/models/containers/redis.c4 deleted file mode 100644 index 4173b72..0000000 --- a/resources/edp-likec4/models/containers/redis.c4 +++ /dev/null @@ -1,9 +0,0 @@ -model { - - container redis 'Redis' { - description 'Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.' - icon tech:redis - technology 'Redis' - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/spark-operator.c4 b/resources/edp-likec4/models/containers/spark-operator.c4 deleted file mode 100644 index 92a73bb..0000000 --- a/resources/edp-likec4/models/containers/spark-operator.c4 +++ /dev/null @@ -1,14 +0,0 @@ -model { - - extend edp { - container spark 'Spark' { - #internal - description 'Allows running Spark applications on K8s' - - component sparkoperator 'Spark Operator' { - technology 'Spark' - icon tech:spark - } - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/containers/velero.c4 b/resources/edp-likec4/models/containers/velero.c4 deleted file mode 100644 index 3676cbf..0000000 --- a/resources/edp-likec4/models/containers/velero.c4 +++ /dev/null @@ -1,13 +0,0 @@ -model { - - extend edp { - container velero 'Velero' { - #internal - description 'Backup Kubernetes resources' - - component velero 'Velero' - - velero -> edp.minio.minio 'store backups' - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/context/actors.c4 b/resources/edp-likec4/models/context/actors.c4 deleted file mode 100644 index cb8071d..0000000 --- a/resources/edp-likec4/models/context/actors.c4 +++ /dev/null @@ -1,39 +0,0 @@ -model { - developer = actor 'Developer' { - description 'The regular user of the platform' - -> localbox 'inner loop' - -> edp 'outer loop' - -> edgeCli 'uses' - -> edgeSdk 'uses' - -> edgeTerraformProvider 'uses' - -> edp.ui 'manages project' - -> edp.forgejo 'manages code' - -> edp.keycloak 'authenticates' - -> edp.argoCD 'manages deployments' - -> edp.grafana 'monitors' - -> edp.backstage 'create and maintain apps' - -> edp.imageregistry 'pushes and pull images' - -> edp.api 'uses API' - -> edp.forgejogit 'uses git' - } - platformdeveloper = actor 'Platform Developer' { - description 'The EDP engineer' - style { - color gray - shape person - } - -> edgeConnect 'operates' - } - otherProductLifecycleRoles = actor 'Reviewer, Tester, Auditors, Operators' { - description 'Coworking roles in the outer loop' - -> edp 'review / operate' - } - customers = actor 'End Customers' { - description 'Consumers of your Application' - style { - color amber - shape person - } - -> cloud 'uses your app' - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/context/application-deployment.c4 b/resources/edp-likec4/models/context/application-deployment.c4 deleted file mode 100644 index 63d1ce6..0000000 --- a/resources/edp-likec4/models/context/application-deployment.c4 +++ /dev/null @@ -1,21 +0,0 @@ -model { - runtimeCluster = system 'Kubernetes Cluster' { - description 'Target cluster where applications are deployed' - technology 'Kubernetes' - - container runningApplication 'Running Application' { - description 'Deployed workload' - - component pods 'Pods' - component services 'Services' - component ingress 'Ingress' - } - } - - // Relationships matching the documentation flow - developer -> edp.forgejogit 'git push' - edp.forgejogit -> edp.forgejoActions 'triggers' - edp.forgejoActions -> edp.imageregistry 'push image' - edp.forgejogit -> edp.argoCD 'watches manifests' - edp.argoCD -> runtimeCluster 'deploys' -} diff --git a/resources/edp-likec4/models/context/cloud.c4 b/resources/edp-likec4/models/context/cloud.c4 deleted file mode 100644 index 0602ac5..0000000 --- a/resources/edp-likec4/models/context/cloud.c4 +++ /dev/null @@ -1,14 +0,0 @@ -model { - cloud = system 'Cloud' { - description 'Cloud environments' - technology 'IaaS/PaaS' - - application = schema 'application' { - description 'An application description' - technology 'DSL' - style { - color primary - } - } - } -} diff --git a/resources/edp-likec4/models/context/customer-systems.c4 b/resources/edp-likec4/models/context/customer-systems.c4 deleted file mode 100644 index 2d15443..0000000 --- a/resources/edp-likec4/models/context/customer-systems.c4 +++ /dev/null @@ -1,6 +0,0 @@ -model { - enterprise = system "Customers' Enterprise Systems" { - description "The customers' enterprise systems" - -> cloud 'app specific dependencies' - } -} diff --git a/resources/edp-likec4/models/context/documentation.c4 b/resources/edp-likec4/models/context/documentation.c4 deleted file mode 100644 index cc72f06..0000000 --- a/resources/edp-likec4/models/context/documentation.c4 +++ /dev/null @@ -1,10 +0,0 @@ -model { - documentation = system 'Documentation' { - description 'Documentation system for EDP LikeC4 platform.' - technology 'Static Site Generator' - icon tech:electron - -> edp 'provides documentation for' - platformdeveloper -> documentation "creates and maintains documentation" - - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/context/edfoundry.c4 b/resources/edp-likec4/models/context/edfoundry.c4 deleted file mode 100644 index 2453ca1..0000000 --- a/resources/edp-likec4/models/context/edfoundry.c4 +++ /dev/null @@ -1,10 +0,0 @@ -model { - edf = system 'EDF' { - description 'EDP Foundry is a platform for building and deploying EDPs tenantwise.' - technology 'Kubernetes' - icon tech:kubernetes - -> edp 'builds many' - platformdeveloper -> edf "develops EDP and EDF" - - } -} \ No newline at end of file diff --git a/resources/edp-likec4/models/context/edp.c4 b/resources/edp-likec4/models/context/edp.c4 deleted file mode 100644 index 5ee6d85..0000000 --- a/resources/edp-likec4/models/context/edp.c4 +++ /dev/null @@ -1,32 +0,0 @@ -model { - edp = system 'EDP' { - description 'EDP Edge Development Platform' - technology 'Kubernetes' - icon tech:kubernetes - -> enterprise 'integrates' - -> cloud 'deploy & observe' - -> edgeTerraformProvider 'automates' - -> localbox // inner-outer loop synchronization - - application = schema 'application' { - description 'An application description' - technology 'DSL' - style { - color primary - } - } - - container testApp 'Fibonacci' { - description 'Testapp to validate deployments' - - component fibonacci 'Fibonacci' { - technology 'Golang' - icon tech:go - } - } - - // UI requests data from the Backend - // ui -> backend 'fetches via HTTPS' - } -} - diff --git a/resources/edp-likec4/models/context/localbox.c4 b/resources/edp-likec4/models/context/localbox.c4 deleted file mode 100644 index 1a3138f..0000000 --- a/resources/edp-likec4/models/context/localbox.c4 +++ /dev/null @@ -1,22 +0,0 @@ -model { - localbox = system 'localbox' { - description 'A local development system' - technology 'Linux/Windows/Mac' - -> edp 'sync' - -> enterprise 'company integration' - - application = schema 'application' { - description 'An application description' - technology 'DSL' - style { - color primary - } - } - - git = component 'git' { - description 'local git' - technology 'Git' - icon tech:git - } - } -} diff --git a/resources/edp-likec4/models/spec.c4 b/resources/edp-likec4/models/spec.c4 deleted file mode 100644 index 75311f7..0000000 --- a/resources/edp-likec4/models/spec.c4 +++ /dev/null @@ -1,51 +0,0 @@ -specification { - // Custom color used for view-local highlighting - color magenta #b100ff - - element actor { - style { - shape person - color green - } - } - element person { - style { - shape person - color green - } - } - element component - element container { - style { - opacity 20% - } - } - element internalComponent { - style { - color muted - opacity 15% - } - } - - element schema - element step - element system - element workflow - element tool - element process - element repository { - style { - shape storage - } - } - - deploymentNode cloud - deploymentNode environment - deploymentNode computeressource - deploymentNode paas - deploymentNode kubernetes - deploymentNode cluster - deploymentNode namespace - - tag internal -} \ No newline at end of file diff --git a/resources/edp-likec4/package-lock.json b/resources/edp-likec4/package-lock.json deleted file mode 100644 index 602e4bf..0000000 --- a/resources/edp-likec4/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "edp-likec4", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/resources/edp-likec4/views/deployment/edge/provider.c4 b/resources/edp-likec4/views/deployment/edge/provider.c4 deleted file mode 100644 index d7aee46..0000000 --- a/resources/edp-likec4/views/deployment/edge/provider.c4 +++ /dev/null @@ -1,68 +0,0 @@ -deployment { - - paas edgeProvider 'Terraform Edge provider' { - icon tech:terraform - description "Unlocks the terraform ecosystem" - -> edgeSdk "built using" - -> terralist "published to" - -> edp "hosted on" - } - - environment edgeProviderHost 'OTC' { - - cluster edp 'Forgejo for all EDP-tenants' { - icon tech:git - instanceOf edp.forgejo 'Forgejo for all EDP-tenants' { - description 'edp.buildth.ing' - } - } - - paas terralist 'Terralist' { - icon tech:terraform - description 'Terraform provider private hosting' - technology 'Cloud Services' - -> edp "authenticates via" - } - } - - paas edgeSdk 'Edge Cloud SDK' { - icon tech:go - description 'Wrapper around API' - technology 'Cloud Services' - -> edgeApi "calls" - -> edp "hosted on" - } - - environment edgeCloud 'Edge cloud' { - - paas edgeApi 'Edge Cloud API' { - icon tech:swagger - link https://swagger.edge.platform.mg3.mdb.osc.live "Documentation" - technology 'Edge Cloud (managed)' - -> edgeResources "creates/destroys" - } - - paas edgeResources 'Edge Cloud Resources' { - description 'App, AppInstance, etc.' - technology 'Edge Cloud (managed)' - } - - } -} - -views { - deployment view provider { - title 'Terraform Edge provider' - - include - edgeProviderHost, - edp, - edgeResources, - edgeCloud, - edgeApi, - terralist, - edgeSdk, - edgeProvider, - } -} - diff --git a/resources/edp-likec4/views/deployment/kind/kind.c4 b/resources/edp-likec4/views/deployment/kind/kind.c4 deleted file mode 100644 index a6d12f3..0000000 --- a/resources/edp-likec4/views/deployment/kind/kind.c4 +++ /dev/null @@ -1,16 +0,0 @@ -views { - deployment view index { - title 'Local Kind Deployment' - - include - *, - local.**, - local.monitoring.*, - local.openbao.*, - local.externalSecrets.*, - local.crossplane.*, - local.spark.*, - local.argocd.* - } -} - diff --git a/resources/edp-likec4/views/deployment/otc/edp.c4 b/resources/edp-likec4/views/deployment/otc/edp.c4 deleted file mode 100644 index b5d9d0b..0000000 --- a/resources/edp-likec4/views/deployment/otc/edp.c4 +++ /dev/null @@ -1,24 +0,0 @@ -views { - deployment view edp-per-tenant { - title 'EDP per tenant' - - include - otc-edp-per-tenant, - otc-edp-per-tenant.*, - otc-edp-per-tenant.cce, - otc-edp-per-tenant.cce.*, - otc-edp-per-tenant.cce.**, - otc-edp-per-tenant.cce.externalSecrets, - otc-edp-per-tenant.forgejoRunnerInfrastructure, - otc-edp-per-tenant.forgejoRunnerInfrastructure.*, - otc-edp-per-tenant.cloudServices, - otc-edp-per-tenant.cloudServices.* - style otc-edp-per-tenant { - color slate - } - style otc-edp-per-tenant.cce { - color red - } - } -} - diff --git a/resources/edp-likec4/views/deployment/otc/forgejo-runner-connections.md b/resources/edp-likec4/views/deployment/otc/forgejo-runner-connections.md deleted file mode 100644 index 13697f9..0000000 --- a/resources/edp-likec4/views/deployment/otc/forgejo-runner-connections.md +++ /dev/null @@ -1,19 +0,0 @@ -```mermaid -flowchart TD - subgraph Forgejo - forgejoActions[Forgejo Actions] - forgejogit[ForgejoGit] - end - forgejoRunner[Forgejo Runner] - imageregistry[Forgejo OCI Image Registry] - - forgejoActions -- runs workflows --> forgejoRunner - forgejogit -- triggers on push --> forgejoRunner - forgejoRunner -- pushes new image --> imageregistry - forgejoRunner -- pushes new appspec --> forgejogit -``` - -This diagram shows the main components that connect to `forgejo-runner`: -- `Forgejo Actions` triggers workflows to be run by the runner. -- `ForgejoGit` triggers the runner on push events. -- The runner interacts with the image registry and git as part of CI/CD flows. diff --git a/resources/edp-likec4/views/deployment/otc/foundry-and-edp.c4 b/resources/edp-likec4/views/deployment/otc/foundry-and-edp.c4 deleted file mode 100644 index ee0794d..0000000 --- a/resources/edp-likec4/views/deployment/otc/foundry-and-edp.c4 +++ /dev/null @@ -1,53 +0,0 @@ -views { - - deployment view forgejo-as-a-service { - title 'Forgejo as a Service' - - include - - otc-edpFoundry.*, - otc-edpFoundry.internalServices, - otc-edpFoundry.internalServices.*, - otc-edpFoundry.centralObservability, - otc-edpFoundry.centralObservability.*, - otc-edpFoundry.workflowSetupEDPInfrastructure, - otc-edpFoundry.workflowSetupEDPInfrastructure.*, - otc-edpFoundry.workflowSetupArgoCDInfrastructure, - otc-edpFoundry.workflowSetupArgoCDInfrastructure.*, - otc-edpFoundry.forgejoRunnerInfrastructure, - otc-edpFoundry.forgejoRunnerInfrastructure.*, - - otc-edp-per-tenant, - otc-edp-per-tenant.*, - otc-edp-per-tenant.cce, - otc-edp-per-tenant.cce.*, - otc-edp-per-tenant.cce.**, - otc-edp-per-tenant.cce.externalSecrets, - otc-edp-per-tenant.forgejoRunnerInfrastructure, - otc-edp-per-tenant.forgejoRunnerInfrastructure.*, - otc-edp-per-tenant.cloudServices, - otc-edp-per-tenant.cloudServices.* - style otc-edp-per-tenant { - color slate - } - style otc-edpFoundry { - color slate - } - style otc-edpFoundry.workflowSetupEDPInfrastructure { - color amber - } - style otc-edpFoundry.workflowSetupArgoCDInfrastructure { - color amber - } - style otc-edpFoundry.forgejoRunnerInfrastructure { - color green - } - style otc-edp-per-tenant.cce { - color red - } - style otc-edpFoundry.cce { - color red - } - } -} - diff --git a/resources/edp-likec4/views/deployment/otc/foundry.c4 b/resources/edp-likec4/views/deployment/otc/foundry.c4 deleted file mode 100644 index b07546c..0000000 --- a/resources/edp-likec4/views/deployment/otc/foundry.c4 +++ /dev/null @@ -1,37 +0,0 @@ -views { - deployment view edp-foundry-central-service { - title 'EDP Foundry Central Service' - - include - otc-edpFoundry, - otc-edpFoundry.*, - otc-edpFoundry.internalServices, - otc-edpFoundry.internalServices.*, - otc-edpFoundry.centralObservability, - otc-edpFoundry.centralObservability.*, - otc-edpFoundry.workflowSetupEDPInfrastructure, - otc-edpFoundry.workflowSetupEDPInfrastructure.*, - otc-edpFoundry.workflowSetupArgoCDInfrastructure, - otc-edpFoundry.workflowSetupArgoCDInfrastructure.*, - otc-edpFoundry.workflowSetupArgoCDInfrastructure.*, - otc-edpFoundry.forgejoRunnerInfrastructure, - otc-edpFoundry.forgejoRunnerInfrastructure.* - - style otc-edpFoundry.forgejoRunnerInfrastructure { - color green - } - style otc-edpFoundry.workflowSetupEDPInfrastructure { - color amber - } - style otc-edpFoundry.workflowSetupArgoCDInfrastructure { - color amber - } - style otc-edpFoundry { - color slate - } - style otc-edpFoundry.cce { - color red - } - } -} - diff --git a/resources/edp-likec4/views/deployment/otc/otc-faas.c4 b/resources/edp-likec4/views/deployment/otc/otc-faas.c4 deleted file mode 100644 index 4ba87eb..0000000 --- a/resources/edp-likec4/views/deployment/otc/otc-faas.c4 +++ /dev/null @@ -1,24 +0,0 @@ -views { - deployment view otc-faas { - title 'OTC Prototype FaaS' - - include - otc-faas, - otc-faas.*, - otc-faas.dev, - otc-faas.dev.*, - otc-faas.dev.cce, - otc-faas.dev.cce.*, - otc-faas.prod, - otc-faas.prod.*, - otc-faas.prod.cce, - otc-faas.prod.cce.*, - style otc-edp-per-tenant { - color slate - } - style otc-edp-per-tenant.cce { - color red - } - } -} - diff --git a/resources/edp-likec4/views/deployment/otc/otc-tenants.c4 b/resources/edp-likec4/views/deployment/otc/otc-tenants.c4 deleted file mode 100644 index 95c62ae..0000000 --- a/resources/edp-likec4/views/deployment/otc/otc-tenants.c4 +++ /dev/null @@ -1,57 +0,0 @@ -deployment { - - environment otcTenantProd 'Prod - builth.ing' { - - cluster otcTenantEdpBuildthing 'edp.builth.ing' { - icon tech:git - description 'Primary Instance' - - } - - cluster otcTenantObservability 'observability.builth.ing' { - icon tech:git - description 'Observability Instance' - } - - cluster otcTenantCustomerA 'customer-a.builth.ing' { - icon tech:git - description 'Customer Instance' - } - } - - environment otcTenantNonProd 'Non-Prod - t09.de' { - - cluster otcTenantDev1 'dev1.t09.de' { - icon tech:git - description 'Development Instance' - } - - cluster otcTenantTestX 'test-x.t09.de' { - icon tech:git - description 'Testing Instance' - } - - } - - otcTenantEdpBuildthing -> otcTenantObservability 'deploys' - otcTenantEdpBuildthing -> otcTenantCustomerA 'deploys' - otcTenantEdpBuildthing -> otcTenantDev1 'deploys' - otcTenantEdpBuildthing -> otcTenantTestX 'deploys' -} - -views { - deployment view otcTenants { - title 'OTC tenants' - - include - otcTenantProd, - otcTenantNonProd, - otcTenantEdpBuildthing, - otcTenantObservability, - otcTenantCustomerA, - otcTenantDev1, - otcTenantTestX, - } -} - - diff --git a/resources/edp-likec4/views/documentation/components-template-documentation.c4 b/resources/edp-likec4/views/documentation/components-template-documentation.c4 deleted file mode 100644 index 4fde87e..0000000 --- a/resources/edp-likec4/views/documentation/components-template-documentation.c4 +++ /dev/null @@ -1,11 +0,0 @@ -views { - view components-template-documentation of documentation { - description 'Documentation System Context View' - include documentation - include platformdeveloper with { - title 'Technical Writer' - description 'Could be an engineer, but in this case it\'s the Technical Writer' - } - // autoLayout LeftRight 120 110 - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 b/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 deleted file mode 100644 index 321c4b1..0000000 --- a/resources/edp-likec4/views/dynamic/cicd/forgejo-garm.c4 +++ /dev/null @@ -1,35 +0,0 @@ -views { - dynamic view forgejoGarmInteraction { - title 'Forgejo <-> Garm' - - include edp, edp.garm - include edp.forgejo with { - title 'Forgejo' - } - include edp.garm.garm - include edp.garm.providerEdgeConnect - include edgeConnect - - edp.forgejo -> edp.garm.garm '(Webhook) A new job is pending' - edp.garm.garm -> edp.garm.providerEdgeConnect 'Create new runner' - edp.garm.providerEdgeConnect -> edgeConnect 'Create App (Runner)' - edp.garm.providerEdgeConnect -> edgeConnect 'Create AppInstance (Runner)' - edgeConnect -> forgejoRunner 'Deploys' - - forgejoRunner -> edp.garm.garm 'Get runner registration token' - edp.garm.garm -> edp.forgejo 'Get runner registration token' - edp.forgejo -> edp.garm.garm 'Token' - edp.garm.garm -> forgejoRunner 'Token' - forgejoRunner -> edp.forgejo 'Register runner' - forgejoRunner -> edp.forgejo 'Fetch job' - forgejoRunner -> forgejoRunner 'Work on job' - forgejoRunner -> edp.forgejo 'Send result' - edp.forgejo -> edp.forgejo 'Deregister Runner' - forgejoRunner -> forgejoRunner 'Terminate' - - edp.forgejo -> edp.garm.garm '(Webhook) A job finished' - edp.garm.garm -> edp.garm.providerEdgeConnect 'Delete runner' - edp.garm.providerEdgeConnect -> edgeConnect 'Delete AppInstance (Runner)' - edp.garm.providerEdgeConnect -> edgeConnect 'Delete App (Runner)' - } -} diff --git a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 b/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 deleted file mode 100644 index 61150bc..0000000 --- a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 +++ /dev/null @@ -1,73 +0,0 @@ -deployment { - environment otcKubernetes 'OTC Kubernetes' { - description 'OTC Container Cluster Engine hosting EDP platform' - technology 'Kubernetes' - icon tech:kubernetes - - cluster edpCluster 'EDP Cluster' { - description 'EDP platform cluster' - - instanceOf edp.forgejo { - description 'Forgejo - Git platform with Actions' - } - - instanceOf edp.forgejoActions { - description 'CI/CD orchestration for Forgejo' - } - - garmContainer = instanceOf edp.garm { - description 'GARM container with runner orchestration' - } - - environment edpCluster 'GARM pod' { - technology 'Kubernetes' - garmService = instanceOf edp.garm.garm { - description 'GARM - Runner lifecycle manager' - } - - instanceOf edp.garm.providerEdgeConnect { - description 'GARM Provider for Edge Connect' - } - } - } - } - - environment edgeConnectEnv 'Edge Connect' { - description 'Edge infrastructure for ephemeral runner deployment' - technology 'Edge Connect Platform' - icon tech:docker - - computeressource runnerInfrastructure 'Runner Infrastructure' { - description 'Dynamically provisioned runner instances' - - instanceOf forgejoRunner { - description 'Ephemeral Forgejo Actions runner' - -> otcKubernetes.edpCluster.forgejo 'registers with and picks up jobs' - -> otcKubernetes.edpCluster.garmService 'retrieves bootstrap information' - } - } - } -} - -views { - deployment view forgejoGarmArchitecture { - title 'Architecture of Forgejo, Garm and Edge Connect' - description 'Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions' - - include - otcKubernetes, - otcKubernetes.*, - otcKubernetes.**, - edgeConnectEnv, - edgeConnectEnv.*, - edgeConnectEnv.** - - style otcKubernetes { - color blue - } - - style edgeConnectEnv { - color green - } - } -} diff --git a/resources/edp-likec4/views/dynamic/cicd/gitops-inner-outer-loop.c4 b/resources/edp-likec4/views/dynamic/cicd/gitops-inner-outer-loop.c4 deleted file mode 100644 index d6f60f2..0000000 --- a/resources/edp-likec4/views/dynamic/cicd/gitops-inner-outer-loop.c4 +++ /dev/null @@ -1,26 +0,0 @@ -views { - dynamic view view_gitops-inner-outer-loop_15 { - title 'outer-ci-loop' - - include localbox, edp - include edp.forgejo with { - color gray - title 'Forgejo' - } - - style edp._ { - color secondary - } - - localbox.git -> edp.forgejogit 'git push' - edp.forgejogit -> forgejoRunner 'on push' - - forgejoRunner -> edp.imageregistry 'pushes new image' - forgejoRunner -> edp.forgejogit 'pushes new appspec' - - edp.forgejogit -> edp.argoCD 'triggers deployment' - edp.argoCD -> cloud 'deploys application' - cloud -> edp.imageregistry 'pulls image' - } - -} \ No newline at end of file diff --git a/resources/edp-likec4/views/dynamic/orchestration/orchestration-workflow.c4 b/resources/edp-likec4/views/dynamic/orchestration/orchestration-workflow.c4 deleted file mode 100644 index 142a6f9..0000000 --- a/resources/edp-likec4/views/dynamic/orchestration/orchestration-workflow.c4 +++ /dev/null @@ -1,22 +0,0 @@ -views { - dynamic view orchestration_workflow { - title 'Orchestration Workflow' - - include developer - include edp.forgejo - include edp.forgejoActions - include edp.forgejogit - include edp.argoCD - include runtimeCluster - include terraform - - developer -> edp.forgejo 'defines & commits' - edp.forgejo -> edp.forgejoActions 'pipelines' - edp.forgejo -> edp.forgejogit 'git repository' - edp.forgejogit -> edp.argoCD 'sync trigger' - edp.argoCD -> runtimeCluster 'deploys' - terraform -> runtimeCluster 'provisions' - - autoLayout TopBottom - } -} diff --git a/resources/edp-likec4/views/edp/application-deployment-flow.c4 b/resources/edp-likec4/views/edp/application-deployment-flow.c4 deleted file mode 100644 index 1d01fb8..0000000 --- a/resources/edp-likec4/views/edp/application-deployment-flow.c4 +++ /dev/null @@ -1,22 +0,0 @@ -views { - - dynamic view application_deployment_flow { - title 'Application Deployment Flow' - - include developer - include edp.forgejo - include edp.forgejogit - include edp.forgejoActions - include edp.imageregistry - include edp.argoCD - include runtimeCluster - - developer -> edp.forgejogit 'git push' - edp.forgejogit -> edp.forgejoActions 'triggers' - edp.forgejoActions -> edp.imageregistry 'push image' - edp.forgejogit -> edp.argoCD 'watches manifests' - edp.argoCD -> runtimeCluster 'deploys' - - autoLayout TopBottom - } -} diff --git a/resources/edp-likec4/views/edp/edfbuilder.c4 b/resources/edp-likec4/views/edp/edfbuilder.c4 deleted file mode 100644 index a74cb32..0000000 --- a/resources/edp-likec4/views/edp/edfbuilder.c4 +++ /dev/null @@ -1,8 +0,0 @@ - -views { - view edpbuilderworkflow of edfbuilder { - description 'Describes the process how to create an EDP instance' - include edfbuilder.** - autoLayout LeftRight 120 110 - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/edp/edp-as-idp.c4 b/resources/edp-likec4/views/edp/edp-as-idp.c4 deleted file mode 100644 index 6a440ee..0000000 --- a/resources/edp-likec4/views/edp/edp-as-idp.c4 +++ /dev/null @@ -1,36 +0,0 @@ -views { - view idp of edp { - title 'EDP as IDP' - - global style text_large - - include developer - exclude element.tag = #internal - - style * { - opacity 25% - } - group 'EDP' { - group 'Developer Control Plane' { - group 'Frontend' { - include backstage, api - } - group 'Version Control' { - include applicationspecification.application_gitrepo, applicationspecification.applicationspec_gitrepo - include forgejogit - } - } - group 'Integration & Delivery Plane' { - include forgejoRunner, imageregistry, argoCD - exclude -> argoCD -> - } - group 'Monitoring Plane' { - include monitoring, grafana - } - group 'Security Plane' { - include keycloak, kyverno, externalSecrets, openbao - } - } - autoLayout TopBottom - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/edp/edp-as-orchestrator.c4 b/resources/edp-likec4/views/edp/edp-as-orchestrator.c4 deleted file mode 100644 index fa650f5..0000000 --- a/resources/edp-likec4/views/edp/edp-as-orchestrator.c4 +++ /dev/null @@ -1,35 +0,0 @@ -views { - view edporchestrator of edp { - title 'EDP as Orchestrator' - - global style text_large - - exclude element.tag = #internal - - style * { - opacity 25% - } - group 'EDP' { - group 'Developer Control Plane' { - - } - group 'Integration & Delivery Plane' { - - } - group 'Monitoring Plane' { - - } - group 'Security Plane' { - - } - group 'Backend' { - include argoCD with { - description 'Declarative management of platform tools' - } - include crossplane - - } - } - autoLayout TopBottom - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/edp/edp.c4 b/resources/edp-likec4/views/edp/edp.c4 deleted file mode 100644 index 490e553..0000000 --- a/resources/edp-likec4/views/edp/edp.c4 +++ /dev/null @@ -1,86 +0,0 @@ -views { - - view edp of edp { - title 'Context view' - include * - exclude ingressNginx -> - exclude element.tag = #internal - - style * { - opacity 25% - } - } - - view keycloak of edp.keycloak { - include - *, - edp.ingressNginx -> - } - - view forgejo of edp.forgejo { - include - *, - edp.ingressNginx -> - } - - view crossplane of edp.crossplane { - include - *, - edp.ingressNginx -> - } - - view externalSecrets of edp.externalSecrets { - include - *, - edp.ingressNginx -> - } - - view velero of edp.velero { - include - *, - edp.ingressNginx -> - } - - view minio of edp.minio { - include - *, - edp.ingressNginx -> - } - - view monitoring of edp.monitoring { - include - *, - edp.ingressNginx -> - loki.* - } - - view ingressNginx of edp.ingressNginx { - include * - } - - view testapp of edp.testApp { - include - *, - edp.ingressNginx -> - } - - view mailhog of edp.mailhog { - include - *, - edp.ingressNginx -> - } - - view spark of edp.spark { - include - *, - edp.ingressNginx -> - } - - view argoCD of edp.argoCD { - include - *, - edp.ingressNginx -> - } -} - - diff --git a/resources/edp-likec4/views/edp/platform-orchestration-flow.c4 b/resources/edp-likec4/views/edp/platform-orchestration-flow.c4 deleted file mode 100644 index 5c3ad27..0000000 --- a/resources/edp-likec4/views/edp/platform-orchestration-flow.c4 +++ /dev/null @@ -1,23 +0,0 @@ -views { - - view platform_orchestration_flow of edp { - title 'Platform Orchestration Flow' - - // Keep it minimal: only the elements from the documentation diagram - include idpbuilder - include edp - - include edp.argoCD - include edp.forgejo - include edp.ingressNginx - - // Represent "Platform Stacks" via representative platform components - include edp.keycloak - include edp.monitoring - - // Hide internal-only plumbing unless explicitly included - exclude element.tag = #internal - - autoLayout TopBottom - } -} diff --git a/resources/edp-likec4/views/high-level-concept/application-transition.c4 b/resources/edp-likec4/views/high-level-concept/application-transition.c4 deleted file mode 100644 index 781177c..0000000 --- a/resources/edp-likec4/views/high-level-concept/application-transition.c4 +++ /dev/null @@ -1,49 +0,0 @@ -views { - - // the application meta-definition travels through all deploying components - view application-transition { - title 'application-transistion' - autoLayout LeftRight 180 140 - - // include * - exclude developer, localbox, edp, otherProductLifecycleRoles - exclude element.kind = workflow - include cloud with { - title 'EdgeConnect Cloud' - } - include cloud.application - - group 'developer-scope' { - color green - opacity 20% - border none - include developer - include otherProductLifecycleRoles - - group 'Devops inner-loop' { - color gray - opacity 30% - border none - - include localbox, localbox.application - } - group 'Devops outer-loop' { - color gray - opacity 30% - border none - include edp, edp.application - } - } - - // Only in this view: highlight EDP itself - style edp { - color magenta - } - - // Make actors more "icon-like" (no subtitle/description in-node) - style developer, otherProductLifecycleRoles { - size xsmall - textSize small - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/high-level-concept/edgeconnect-context.c4 b/resources/edp-likec4/views/high-level-concept/edgeconnect-context.c4 deleted file mode 100644 index bfc44f5..0000000 --- a/resources/edp-likec4/views/high-level-concept/edgeconnect-context.c4 +++ /dev/null @@ -1,30 +0,0 @@ -views { - view edgeconnect-context { - title 'EdgeConnect Context' - autoLayout LeftRight 180 140 - - include developer - include platformdeveloper with { - title 'Platform / Cloud Operator' - } - include edp with { - title 'EDP / CI Automation' - } - - include edgeCli - include edgeSdk - include edgeTerraformProvider - - include edgeConnect - include edgeConnect.* - - style edgeConnect, edp { - color magenta - } - - style developer, platformdeveloper { - size xsmall - textSize small - } - } -} diff --git a/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape-with-foundry.c4 b/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape-with-foundry.c4 deleted file mode 100644 index 606c91c..0000000 --- a/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape-with-foundry.c4 +++ /dev/null @@ -1,41 +0,0 @@ - -global { - style text_large * { - size xlarge - } -} -views { - - view developer-landscape-with-foundry { - title 'Developer Landscape View (with Foundry)' - autoLayout LeftRight 100 100 - - global style text_large - - include * - exclude developer, localbox, edp, otherProductLifecycleRoles - exclude element.kind = workflow - - group 'developer-scope' { - color green - opacity 20% - border none - include developer - include otherProductLifecycleRoles - - group 'Devops inner-loop' { - color gray - opacity 30% - border none - - include localbox - } - group 'Devops outer-loop' { - color gray - opacity 30% - border none - include edp - } - } - } -} \ No newline at end of file diff --git a/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape.c4 b/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape.c4 deleted file mode 100644 index d88a9cb..0000000 --- a/resources/edp-likec4/views/high-level-concept/platform-context/developer-landscape.c4 +++ /dev/null @@ -1,33 +0,0 @@ -views { - - view landscape { - title 'Developer Landscape View' - autoLayout LeftRight 100 100 - - include * - exclude developer, localbox, edp, otherProductLifecycleRoles - exclude element.kind = workflow - - group 'developer-scope' { - color green - opacity 20% - border none - include developer - include otherProductLifecycleRoles - - group 'Devops inner-loop' { - color gray - opacity 30% - border none - - include localbox - } - group 'Devops outer-loop' { - color gray - opacity 30% - border none - include edp - } - } - } -} \ No newline at end of file diff --git a/resources/product-structure-TRL.excalidraw b/resources/product-structure-TRL.excalidraw deleted file mode 100644 index 6474e13..0000000 --- a/resources/product-structure-TRL.excalidraw +++ /dev/null @@ -1,7255 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", - "elements": [ - { - "id": "vkEBND0A690yxuKyCwa5r", - "type": "rectangle", - "x": 3448.9437917073556, - "y": -86.80836232503256, - "width": 223.6666666666665, - "height": 169.66666666666669, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a0", - "roundness": { - "type": 3 - }, - "seed": 242676382, - "version": 667, - "versionNonce": 132587654, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "EscCIjL-9_GuHSB42NcbB" - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow" - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow" - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow" - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow" - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow" - } - ], - "updated": 1763384714589, - "link": null, - "locked": false - }, - { - "id": "EscCIjL-9_GuHSB42NcbB", - "type": "text", - "x": 3521.447107950845, - "y": -24.47502899169922, - "width": 78.6600341796875, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a1", - "roundness": null, - "seed": 364626690, - "version": 647, - "versionNonce": 1887248326, - "isDeleted": false, - "boundElements": [], - "updated": 1763384714589, - "link": null, - "locked": false, - "text": "EDP", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "vkEBND0A690yxuKyCwa5r", - "originalText": "EDP", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "t0TPl7T0HbrKo0OK0MQB4", - "type": "rectangle", - "x": 3498.789647420246, - "y": 155.7583363850913, - "width": 263.6666666666666, - "height": 136.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a2", - "roundness": { - "type": 3 - }, - "seed": 1074346626, - "version": 912, - "versionNonce": 1485398234, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "w97AzKYRtc3ZIiPzWmF7v" - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow" - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow" - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow" - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow" - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391152495, - "link": null, - "locked": false - }, - { - "id": "w97AzKYRtc3ZIiPzWmF7v", - "type": "text", - "x": 3565.408968607583, - "y": 201.42500305175793, - "width": 130.4280242919922, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a3", - "roundness": null, - "seed": 633510466, - "version": 896, - "versionNonce": 85734810, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152495, - "link": null, - "locked": false, - "text": "Forgejo", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "t0TPl7T0HbrKo0OK0MQB4", - "originalText": "Forgejo", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "4lTu_DNrwnbxtfzzQ-TrP", - "type": "rectangle", - "x": 2851.8614552815734, - "y": 150.0791727701824, - "width": 270.3333333333332, - "height": 131.3333333333334, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a4", - "roundness": { - "type": 3 - }, - "seed": 1878985538, - "version": 718, - "versionNonce": 1152880774, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "jRpDlOWMofCm5734tHjnz" - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow" - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow" - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow" - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow" - } - ], - "updated": 1763384982445, - "link": null, - "locked": false - }, - { - "id": "jRpDlOWMofCm5734tHjnz", - "type": "text", - "x": 2865.45609283447, - "y": 193.24583943684908, - "width": 243.14405822753906, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a5", - "roundness": null, - "seed": 541086466, - "version": 722, - "versionNonce": 431984582, - "isDeleted": false, - "boundElements": [], - "updated": 1763384982445, - "link": null, - "locked": false, - "text": "Orchestration", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "4lTu_DNrwnbxtfzzQ-TrP", - "originalText": "Orchestration", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "NKe13dkM6xQgKluQErmaO", - "type": "rectangle", - "x": 2352.922922770181, - "y": 342.29168192545546, - "width": 282.0000000000003, - "height": 146.66666666666654, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a6", - "roundness": { - "type": 3 - }, - "seed": 429588062, - "version": 754, - "versionNonce": 1673658118, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "mrC_vkcrFwA1rQI_6eZzX" - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow" - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow" - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow" - } - ], - "updated": 1763391073082, - "link": null, - "locked": false - }, - { - "id": "mrC_vkcrFwA1rQI_6eZzX", - "type": "text", - "x": 2358.616877237954, - "y": 370.6250152587887, - "width": 270.6120910644531, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a7", - "roundness": null, - "seed": 1755808414, - "version": 783, - "versionNonce": 1941916678, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073082, - "link": null, - "locked": false, - "text": "Infrastructure-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "NKe13dkM6xQgKluQErmaO", - "originalText": "Infrastructure-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "layt3FacJkYmYXuCA3eqg", - "type": "rectangle", - "x": 2300.189526875812, - "y": 565.2916666666665, - "width": 280.33333333333326, - "height": 173.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a8", - "roundness": { - "type": 3 - }, - "seed": 1257673218, - "version": 744, - "versionNonce": 1792396870, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "iWgJ1CBtjV5Vl7VsUSCc8" - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow" - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow" - } - ], - "updated": 1763391080214, - "link": null, - "locked": false - }, - { - "id": "iWgJ1CBtjV5Vl7VsUSCc8", - "type": "text", - "x": 2308.956138610838, - "y": 584.4583333333331, - "width": 262.80010986328125, - "height": 135, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a9", - "roundness": null, - "seed": 672727490, - "version": 807, - "versionNonce": 1635838982, - "isDeleted": false, - "boundElements": [], - "updated": 1763391080215, - "link": null, - "locked": false, - "text": "Terraform\ninfra-deploy,\ninfra-catalogue", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "layt3FacJkYmYXuCA3eqg", - "originalText": "Terraform\ninfra-deploy, infra-catalogue", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "F_81STR9IKF2KqlGNdupb", - "type": "rectangle", - "x": 2771.1947886149073, - "y": 344.7458394368491, - "width": 243.66666666666754, - "height": 146.6666666666668, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aA", - "roundness": { - "type": 3 - }, - "seed": 2007215838, - "version": 796, - "versionNonce": 645240730, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "SjJ-eaTGplnq8O8Gqx9ok" - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow" - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow" - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow" - } - ], - "updated": 1763391064682, - "link": null, - "locked": false - }, - { - "id": "SjJ-eaTGplnq8O8Gqx9ok", - "type": "text", - "x": 2790.122100830077, - "y": 373.0791727701825, - "width": 205.81204223632812, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aB", - "roundness": null, - "seed": 1397105438, - "version": 842, - "versionNonce": 1999108762, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064682, - "link": null, - "locked": false, - "text": "Platform-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "F_81STR9IKF2KqlGNdupb", - "originalText": "Platform-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "_SA6WTuXA_hi0TaT8Y2cb", - "type": "rectangle", - "x": 2890.8614552815734, - "y": 574.4125061035156, - "width": 235.33333333333334, - "height": 143.00000000000014, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aC", - "roundness": { - "type": 3 - }, - "seed": 1529105182, - "version": 888, - "versionNonce": 1143562586, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "F7mNndoMDKgsucrJyfMaw" - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow" - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow" - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow" - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow" - } - ], - "updated": 1763391118113, - "link": null, - "locked": false - }, - { - "id": "F7mNndoMDKgsucrJyfMaw", - "type": "text", - "x": 2948.570098876951, - "y": 623.4125061035157, - "width": 119.91604614257812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aD", - "roundness": null, - "seed": 1827223390, - "version": 951, - "versionNonce": 1268730138, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "text": "Stacks", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "_SA6WTuXA_hi0TaT8Y2cb", - "originalText": "Stacks", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "8RoIcXb7xOv272dQSIUus", - "type": "rectangle", - "x": 2650.194788614907, - "y": 811.7458394368496, - "width": 233.6666666666666, - "height": 129.66666666666652, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aE", - "roundness": { - "type": 3 - }, - "seed": 2095895938, - "version": 915, - "versionNonce": 880936582, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "TXRFI99H-wPV8jJYQr3HX" - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow" - } - ], - "updated": 1763390995501, - "link": null, - "locked": false - }, - { - "id": "TXRFI99H-wPV8jJYQr3HX", - "type": "text", - "x": 2659.064086914061, - "y": 854.0791727701828, - "width": 215.92807006835938, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aF", - "roundness": null, - "seed": 1501222210, - "version": 996, - "versionNonce": 1422607814, - "isDeleted": false, - "boundElements": [], - "updated": 1763390995501, - "link": null, - "locked": false, - "text": "Component 1", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "8RoIcXb7xOv272dQSIUus", - "originalText": "Component 1", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow", - "x": 3448.1479014392758, - "y": 12.60854263833994, - "width": 326.26024839165575, - "height": 157.81544986050005, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aI", - "roundness": { - "type": 2 - }, - "seed": 1540868446, - "version": 1640, - "versionNonce": 1678092038, - "isDeleted": false, - "boundElements": [], - "updated": 1763384982446, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -326.26024839165575, - 157.81544986050005 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.28485983606564225, - "gap": 1 - }, - "endBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": 0.1519523386576579, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow", - "x": 2842.6674388659812, - "y": 263.08798961655305, - "width": 202.79999779555055, - "height": 106.08130661261316, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aJ", - "roundness": { - "type": 2 - }, - "seed": 2005135874, - "version": 1628, - "versionNonce": 390323014, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073115, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -202.79999779555055, - 106.08130661261316 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": 0.20732912257650107, - "gap": 11.12417597375916 - }, - "endBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.2014749804163801, - "gap": 5.670835819366529 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow", - "x": 2468.7619737407026, - "y": 489.4221224367187, - "width": 20.199540611416523, - "height": 75.34198164952329, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aK", - "roundness": { - "type": 2 - }, - "seed": 223921282, - "version": 1463, - "versionNonce": 1691358598, - "isDeleted": false, - "boundElements": [], - "updated": 1763391080214, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -20.199540611416523, - 75.34198164952329 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.03153454772276274, - "gap": 1 - }, - "endBinding": { - "elementId": "layt3FacJkYmYXuCA3eqg", - "focus": -0.09286907973609843, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow", - "x": 3577.23363489021, - "y": 84.83362334905378, - "width": 30.87910068197698, - "height": 70.46286980778127, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aL", - "roundness": { - "type": 2 - }, - "seed": 1324012318, - "version": 1758, - "versionNonce": 483878618, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152611, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 30.87910068197698, - 70.46286980778127 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.14536315130697988, - "gap": 3.2499942476817694 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.04500219885520195, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow", - "x": 2936.28220592564, - "y": 492.7487135612349, - "width": 41.35890088822225, - "height": 81.14243949452828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aN", - "roundness": { - "type": 2 - }, - "seed": 269450754, - "version": 1599, - "versionNonce": 1843930650, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 41.35890088822225, - 81.14243949452828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": -0.034244415659738126, - "gap": 2.5655005249741407 - }, - "endBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.03776994298778566, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow", - "x": 2964.5167682942715, - "y": 281.85222879409713, - "width": 21.98468917118862, - "height": 62.31825384997899, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aO", - "roundness": { - "type": 2 - }, - "seed": 583904478, - "version": 1579, - "versionNonce": 898210842, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064732, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -21.98468917118862, - 62.31825384997899 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": -0.0044550562715617165, - "gap": 1 - }, - "endBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": 0.15576156975679706, - "gap": 1.1108165692702414 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow", - "x": 2932.020304616605, - "y": 722.132905056231, - "width": 92.86372693028488, - "height": 87.72319267494106, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aP", - "roundness": { - "type": 2 - }, - "seed": 537301698, - "version": 1667, - "versionNonce": 619729626, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -92.86372693028488, - 87.72319267494106 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": -0.021599078143972487, - "gap": 8.806116783999528 - }, - "endBinding": { - "elementId": "8RoIcXb7xOv272dQSIUus", - "focus": 0.005511523490681001, - "gap": 3.821071664652436 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "OpdnLYI8J5szelucqIce1", - "type": "rectangle", - "x": 3188.528121948242, - "y": 807.4125061035154, - "width": 238.66666666666697, - "height": 126.33333333333306, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aQ", - "roundness": { - "type": 3 - }, - "seed": 2039569858, - "version": 1099, - "versionNonce": 932242202, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "4I1Olz0jRI1IrWCCpMl_6" - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow" - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow" - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow" - } - ], - "updated": 1763390991701, - "link": null, - "locked": false - }, - { - "id": "4I1Olz0jRI1IrWCCpMl_6", - "type": "text", - "x": 3196.2794240315757, - "y": 848.0791727701819, - "width": 223.1640625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aR", - "roundness": null, - "seed": 417617282, - "version": 1185, - "versionNonce": 343502810, - "isDeleted": false, - "boundElements": [], - "updated": 1763390991701, - "link": null, - "locked": false, - "text": "Component X", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "OpdnLYI8J5szelucqIce1", - "originalText": "Component X", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow", - "x": 3097.8152212385676, - "y": 717.8713052992143, - "width": 164.06503145121724, - "height": 89.07067600321659, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aS", - "roundness": { - "type": 2 - }, - "seed": 536559106, - "version": 1755, - "versionNonce": 1272244122, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 164.06503145121724, - 89.07067600321659 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.17347242703939872, - "gap": 1 - }, - "endBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.30491075133428747, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow", - "x": 3379.7138934365817, - "y": 811.1608108197398, - "width": 147.10907084991595, - "height": 518.6851927279531, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aT", - "roundness": { - "type": 2 - }, - "seed": 524561282, - "version": 1938, - "versionNonce": 24615770, - "isDeleted": false, - "boundElements": [], - "updated": 1763391711481, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 51.11894350939383, - -411.7024622276173 - ], - [ - 147.10907084991595, - -518.6851927279531 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.5069711552521924, - "gap": 3.7483047162244247 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.21913979612959741, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "kmtDycZxwwqCxwxbJ62VN", - "type": "rectangle", - "x": 3461.3614552815748, - "y": 371.57917277018214, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aU", - "roundness": { - "type": 3 - }, - "seed": 1659730626, - "version": 960, - "versionNonce": 1090785094, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ASpNMYOiBSktj9CiNGRi7" - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow" - } - ], - "updated": 1763385009911, - "link": null, - "locked": false - }, - { - "id": "ASpNMYOiBSktj9CiNGRi7", - "type": "text", - "x": 3485.3074391682935, - "y": 390.57917277018214, - "width": 144.1080322265625, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aV", - "roundness": null, - "seed": 448057986, - "version": 961, - "versionNonce": 1032730246, - "isDeleted": false, - "boundElements": [], - "updated": 1763385009911, - "link": null, - "locked": false, - "text": "Project-\nmgmt", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "kmtDycZxwwqCxwxbJ62VN", - "originalText": "Project-mgmt", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "AuV1TlXW4532KFhbJ1qOy", - "type": "rectangle", - "x": 3690.5281219482417, - "y": 364.4958394368491, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aW", - "roundness": { - "type": 3 - }, - "seed": 2043252162, - "version": 1013, - "versionNonce": 627380186, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "a5DWUJIk5eQplJNbp0otf" - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow" - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow" - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391668632, - "link": null, - "locked": false - }, - { - "id": "a5DWUJIk5eQplJNbp0otf", - "type": "text", - "x": 3720.9001007080074, - "y": 405.9958394368491, - "width": 131.25604248046875, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aX", - "roundness": null, - "seed": 1117160834, - "version": 1015, - "versionNonce": 841018310, - "isDeleted": false, - "boundElements": [], - "updated": 1763385011561, - "link": null, - "locked": false, - "text": "Actions", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "AuV1TlXW4532KFhbJ1qOy", - "originalText": "Actions", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "HGDqZbDbJ49R2jRs9GJIZ", - "type": "rectangle", - "x": 3858.7198537190734, - "y": 570.2124938964841, - "width": 188.66666666666697, - "height": 136.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aY", - "roundness": { - "type": 3 - }, - "seed": 1246374302, - "version": 1143, - "versionNonce": 1582074950, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "PmePFMsiWUJPlO2riNhKV" - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow" - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow" - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow" - } - ], - "updated": 1763385080458, - "link": null, - "locked": false - }, - { - "id": "PmePFMsiWUJPlO2riNhKV", - "type": "text", - "x": 3893.923166910806, - "y": 615.8791605631508, - "width": 118.26004028320312, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aZ", - "roundness": null, - "seed": 1758414302, - "version": 1151, - "versionNonce": 1992233862, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "text": "Runner", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "HGDqZbDbJ49R2jRs9GJIZ", - "originalText": "Runner", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "03jCrwPTuTbzVdpJni9ur", - "type": "rectangle", - "x": 3586.236333211262, - "y": 572.8291727701825, - "width": 192.00000000000003, - "height": 145, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aa", - "roundness": { - "type": 3 - }, - "seed": 586159938, - "version": 1188, - "versionNonce": 1237377286, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "qb0juwUBn201I_3S8RiT4" - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow" - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow" - } - ], - "updated": 1763384611677, - "link": null, - "locked": false - }, - { - "id": "qb0juwUBn201I_3S8RiT4", - "type": "text", - "x": 3595.2783101399727, - "y": 577.8291727701825, - "width": 173.91604614257812, - "height": 135, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ab", - "roundness": null, - "seed": 1764744962, - "version": 1211, - "versionNonce": 1112199238, - "isDeleted": false, - "boundElements": [], - "updated": 1763384611677, - "link": null, - "locked": false, - "text": "Runner-\nOrchestra\ntion", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "03jCrwPTuTbzVdpJni9ur", - "originalText": "Runner-Orchestration", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow", - "x": 3626.4145149400288, - "y": 292.6565181408057, - "width": 28.641286766907342, - "height": 78.36597963704418, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ac", - "roundness": { - "type": 2 - }, - "seed": 1611251358, - "version": 1611, - "versionNonce": 184219738, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152611, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -28.641286766907342, - 78.36597963704418 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": -0.13368249489502643, - "gap": 1.221558390886571 - }, - "endBinding": { - "elementId": "kmtDycZxwwqCxwxbJ62VN", - "focus": 0.14045563524470103, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow", - "x": 3681.6553001844177, - "y": 292.55351294668077, - "width": 69.11222120735647, - "height": 71.32418416564747, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ad", - "roundness": { - "type": 2 - }, - "seed": 682017950, - "version": 1588, - "versionNonce": 879680794, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152612, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 69.11222120735647, - 71.32418416564747 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.0800859255357604, - "gap": 1 - }, - "endBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": 0.16974068696432618, - "gap": 1.1099916743343101 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow", - "x": 3749.2100601611082, - "y": 495.0046139963675, - "width": 58.5478204371293, - "height": 76.44966472549294, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ae", - "roundness": { - "type": 2 - }, - "seed": 1443786690, - "version": 1543, - "versionNonce": 1693896710, - "isDeleted": false, - "boundElements": [], - "updated": 1763385012011, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -58.5478204371293, - 76.44966472549294 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": -0.08956284844114419, - "gap": 4.455062828851851 - }, - "endBinding": { - "elementId": "03jCrwPTuTbzVdpJni9ur", - "focus": -0.31936453669195425, - "gap": 2.270603451832244 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow", - "x": 3846.2590342234744, - "y": 494.05094250390056, - "width": 56.900326618306735, - "height": 75.52753527137321, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "af", - "roundness": { - "type": 2 - }, - "seed": 1271403138, - "version": 1579, - "versionNonce": 1172222662, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 56.900326618306735, - 75.52753527137321 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": -0.0673988430842441, - "gap": 2.776658341000825 - }, - "endBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": 0.010660183928777166, - "gap": 1.0794208734004087 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "gacAPFdY1RyNH397B5m1U", - "type": "rectangle", - "x": 4323.889862060546, - "y": 160.99173482259135, - "width": 237.00000000000006, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ag", - "roundness": { - "type": 3 - }, - "seed": 1851075330, - "version": 1039, - "versionNonce": 1577296774, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "6eO7nuzJq274YnpWW-66w" - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow" - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow" - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow" - } - ], - "updated": 1763384969462, - "link": null, - "locked": false - }, - { - "id": "6eO7nuzJq274YnpWW-66w", - "type": "text", - "x": 4333.831832885741, - "y": 202.49173482259135, - "width": 217.11605834960938, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ah", - "roundness": null, - "seed": 1983675074, - "version": 1035, - "versionNonce": 1980842694, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969462, - "link": null, - "locked": false, - "text": "Deployments", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "gacAPFdY1RyNH397B5m1U", - "originalText": "Deployments", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow", - "x": 3674.408467408685, - "y": 27.814129841038977, - "width": 705.4734361804935, - "height": 132.61786743910753, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ai", - "roundness": { - "type": 2 - }, - "seed": 506905730, - "version": 1670, - "versionNonce": 1370028550, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969462, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 417.18112202816474, - 58.310885417750285 - ], - [ - 705.4734361804935, - 132.61786743910753 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.13842181822847455, - "gap": 2.262001175630303 - }, - "endBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": 0.5124469690822768, - "gap": 1.170358416083019 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "qNeeLvM5XS8SbneZGVW0q", - "type": "rectangle", - "x": 4397.819864908852, - "y": 375.5458818308476, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aj", - "roundness": { - "type": 3 - }, - "seed": 57307458, - "version": 1241, - "versionNonce": 1525705370, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "M64AWjiJS8JuMU0z5fLRi" - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow" - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow" - } - ], - "updated": 1763385028394, - "link": null, - "locked": false - }, - { - "id": "M64AWjiJS8JuMU0z5fLRi", - "type": "text", - "x": 4453.2658487955705, - "y": 417.0458818308476, - "width": 81.1080322265625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ak", - "roundness": null, - "seed": 1028585730, - "version": 1238, - "versionNonce": 1098647386, - "isDeleted": false, - "boundElements": [], - "updated": 1763385028394, - "link": null, - "locked": false, - "text": "OTC", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "qNeeLvM5XS8SbneZGVW0q", - "originalText": "OTC", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "rl_lEbITjZxZu5tmsHPG-", - "type": "rectangle", - "x": 4655.891967773436, - "y": 382.53346626281404, - "width": 272, - "height": 129.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "al", - "roundness": { - "type": 3 - }, - "seed": 1155100062, - "version": 1306, - "versionNonce": 879891354, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "XKscc6NBAbjTdhnv_vYNs" - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow" - } - ], - "updated": 1763384897115, - "link": null, - "locked": false - }, - { - "id": "XKscc6NBAbjTdhnv_vYNs", - "type": "text", - "x": 4678.869926452635, - "y": 424.8667995961475, - "width": 226.04408264160156, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "am", - "roundness": null, - "seed": 1490422238, - "version": 1316, - "versionNonce": 786468954, - "isDeleted": false, - "boundElements": [], - "updated": 1763384897115, - "link": null, - "locked": false, - "text": "EdgeConnect", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "rl_lEbITjZxZu5tmsHPG-", - "originalText": "EdgeConnect", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "fWp85O5NBU84CIOiCRAVO", - "type": "rectangle", - "x": 4558.137908935542, - "y": 789.5836625925663, - "width": 385.3333333333338, - "height": 134.66666666666686, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "an", - "roundness": { - "type": 3 - }, - "seed": 261837890, - "version": 1407, - "versionNonce": 617794566, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "9SgHNFxPpzs6RDS3xTZoQ" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow" - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow" - } - ], - "updated": 1763391365258, - "link": null, - "locked": false - }, - { - "id": "9SgHNFxPpzs6RDS3xTZoQ", - "type": "text", - "x": 4588.930521647131, - "y": 834.4169959258998, - "width": 323.74810791015625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ao", - "roundness": null, - "seed": 2003532802, - "version": 1421, - "versionNonce": 1508334406, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365258, - "link": null, - "locked": false, - "text": "EdgeConnectClient", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "fWp85O5NBU84CIOiCRAVO", - "originalText": "EdgeConnectClient", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow", - "x": 4560.789212327934, - "y": 268.93995006037903, - "width": 152.07787355595428, - "height": 113.16039305428501, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ap", - "roundness": { - "type": 2 - }, - "seed": 2109377474, - "version": 1770, - "versionNonce": 667404614, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969463, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 152.07787355595428, - 113.16039305428501 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": -0.2902863001493682, - "gap": 1.289924287763078 - }, - "endBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.04104255304194183, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow", - "x": 4758.229635882192, - "y": 513.3020686103432, - "width": 3.4113431387913806, - "height": 72.34650144375053, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aq", - "roundness": { - "type": 2 - }, - "seed": 279119618, - "version": 2146, - "versionNonce": 1625801178, - "isDeleted": false, - "boundElements": [], - "updated": 1763384897116, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 3.4113431387913806, - 72.34650144375053 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.26009804332056685, - "gap": 2.519959810605087 - }, - "endBinding": { - "elementId": "uw_e9SDMZg5n02CI_rcGi", - "focus": 0.17524221808273333, - "gap": 3.792578784600437 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow", - "x": 4458.895332668404, - "y": 290.0585325478296, - "width": 10.771630603813719, - "height": 84.57976492942612, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ar", - "roundness": { - "type": 2 - }, - "seed": 1602753218, - "version": 1793, - "versionNonce": 905317402, - "isDeleted": false, - "boundElements": [], - "updated": 1763385028394, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 10.771630603813719, - 84.57976492942612 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": -0.07089903848836447, - "gap": 2.2181859611155232 - }, - "endBinding": { - "elementId": "qNeeLvM5XS8SbneZGVW0q", - "focus": -0.14829601841891402, - "gap": 1.626823150743462 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "jhFoxlSdAZtcvOozYLo9m", - "type": "rectangle", - "x": 2336.8356984456364, - "y": 814.9085730743369, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "as", - "roundness": { - "type": 3 - }, - "seed": 1405762142, - "version": 864, - "versionNonce": 724812442, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "9DUHGNzpdsbkuUUYSdxnB" - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow" - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow" - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow" - } - ], - "updated": 1763391365258, - "link": null, - "locked": false - }, - { - "id": "9DUHGNzpdsbkuUUYSdxnB", - "type": "text", - "x": 2360.2416814168278, - "y": 856.4085730743369, - "width": 145.1880340576172, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "at", - "roundness": null, - "seed": 294600350, - "version": 920, - "versionNonce": 1948779142, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365258, - "link": null, - "locked": false, - "text": "Provider", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "jhFoxlSdAZtcvOozYLo9m", - "originalText": "Provider", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow", - "x": 2427.219138859704, - "y": 739.1525625804243, - "width": 3.0920624680015862, - "height": 75.19933550158032, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "au", - "roundness": { - "type": 2 - }, - "seed": 571565022, - "version": 1305, - "versionNonce": 1132566790, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365259, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -3.0920624680015862, - 75.19933550158032 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "layt3FacJkYmYXuCA3eqg", - "focus": 0.06491121823017398, - "gap": 1 - }, - "endBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": -0.11501899351464845, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow", - "x": 2443.1411890515974, - "y": 947.282454654001, - "width": 2118.0065331180745, - "height": 178.43001471405125, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dotted", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b06", - "roundness": { - "type": 2 - }, - "seed": 940832450, - "version": 4187, - "versionNonce": 1851831686, - "isDeleted": false, - "boundElements": [], - "updated": 1763391629298, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 161.78173371858566, - 132.1758939381216 - ], - [ - 819.8140585168994, - 93.84256060478856 - ], - [ - 1866.8639047118318, - -24.520577218092058 - ], - [ - 2118.0065331180745, - -46.254120775929664 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": 0.42093228752165524, - "gap": 4.373881579664044 - }, - "endBinding": { - "elementId": "fWp85O5NBU84CIOiCRAVO", - "focus": -0.32972100940531696, - "gap": 2.2715512431810336 - }, - "startArrowhead": null, - "endArrowhead": null, - "elbowed": false - }, - { - "id": "X317oP4QIdCMkfQF-OHmn", - "type": "rectangle", - "x": 3944.1725565592415, - "y": 155.68767412821109, - "width": 333.66666666666663, - "height": 129.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b07", - "roundness": { - "type": 3 - }, - "seed": 151037762, - "version": 1292, - "versionNonce": 1845214470, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ta5uMdOel67C_lIjXufuD" - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow" - } - ], - "updated": 1763385152688, - "link": null, - "locked": false - }, - { - "id": "ta5uMdOel67C_lIjXufuD", - "type": "text", - "x": 3963.333847045895, - "y": 198.02100746154446, - "width": 295.3440856933594, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b08", - "roundness": null, - "seed": 1588489986, - "version": 1304, - "versionNonce": 1388981318, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152688, - "link": null, - "locked": false, - "text": "DevEnvironments", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "X317oP4QIdCMkfQF-OHmn", - "originalText": "DevEnvironments", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow", - "x": 3674.790446993681, - "y": 45.05141050313457, - "width": 305.72013926184763, - "height": 110.15641402800262, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b09", - "roundness": { - "type": 2 - }, - "seed": 121163074, - "version": 1431, - "versionNonce": 1250472838, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152688, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 305.72013926184763, - 110.15641402800262 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.04839371208373105, - "gap": 2.7438709743342224 - }, - "endBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": 0.14767675739600847, - "gap": 1.310806899352201 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "rRY3HaVMSMHWyZgjxpq2v", - "type": "rectangle", - "x": 3846.291849772133, - "y": 1020.0762962304948, - "width": 272.00000000000006, - "height": 118, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0A", - "roundness": { - "type": 3 - }, - "seed": 2126920926, - "version": 1329, - "versionNonce": 1472945222, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "6gMzVcWbiqyLsPNsRGJhG" - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow" - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow" - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow" - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow" - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow" - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow" - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow" - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow" - } - ], - "updated": 1763385141322, - "link": null, - "locked": false - }, - { - "id": "6gMzVcWbiqyLsPNsRGJhG", - "type": "text", - "x": 3870.907816569008, - "y": 1056.5762962304948, - "width": 222.76806640625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0B", - "roundness": null, - "seed": 853995806, - "version": 1350, - "versionNonce": 629639066, - "isDeleted": false, - "boundElements": [], - "updated": 1763385159713, - "link": null, - "locked": false, - "text": "PhysicalEnvs", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "rRY3HaVMSMHWyZgjxpq2v", - "originalText": "PhysicalEnvs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow", - "x": 3962.2104578599938, - "y": 707.1798433510277, - "width": 4.277899742854061, - "height": 312.49528332548505, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0C", - "roundness": { - "type": 2 - }, - "seed": 1818419906, - "version": 1519, - "versionNonce": 1776911046, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141322, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -4.277899742854061, - 312.49528332548505 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": -0.10893108584966793, - "gap": 1.079420873400295 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.1840076802158442, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow", - "x": 3783.0026230490926, - "y": 629.7180964066447, - "width": 72.34813741045537, - "height": 0.6981674421065236, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0D", - "roundness": { - "type": 2 - }, - "seed": 2086441090, - "version": 1391, - "versionNonce": 385431878, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 72.34813741045537, - 0.6981674421065236 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "03jCrwPTuTbzVdpJni9ur", - "focus": -0.2158631796542971, - "gap": 6.014496189932288 - }, - "endBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": 0.0881504966998736, - "gap": 4.180012524406266 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow", - "x": 2519.278472522735, - "y": 937.3386399061632, - "width": 1321.718322787593, - "height": 145.2287532279828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0E", - "roundness": { - "type": 2 - }, - "seed": 302844446, - "version": 2229, - "versionNonce": 1275618886, - "isDeleted": false, - "boundElements": [], - "updated": 1763391492584, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 100.64445024744782, - 77.1197086859595 - ], - [ - 797.3111169141148, - 140.45304201929264 - ], - [ - 1321.718322787593, - 145.2287532279828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": -0.05675655732228243, - "gap": 1 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.07931556413677532, - "gap": 5.295054461805194 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "2R1wTqnj3ubPsQMZU_PxS", - "type": "rectangle", - "x": 3621.3794352213517, - "y": 1210.959576666692, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0F", - "roundness": { - "type": 3 - }, - "seed": 2116317122, - "version": 1315, - "versionNonce": 219617734, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "b4p6Hvv4dpMpPwT-o3Ou2" - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow" - } - ], - "updated": 1763383971669, - "link": null, - "locked": false - }, - { - "id": "b4p6Hvv4dpMpPwT-o3Ou2", - "type": "text", - "x": 3656.7914148966447, - "y": 1252.459576666692, - "width": 121.17604064941406, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0G", - "roundness": null, - "seed": 2101684098, - "version": 1344, - "versionNonce": 1474031878, - "isDeleted": false, - "boundElements": [], - "updated": 1763383971669, - "link": null, - "locked": false, - "text": "Docker", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "2R1wTqnj3ubPsQMZU_PxS", - "originalText": "Docker", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "KojM_KzLAG1V7jiuobzUd", - "type": "rectangle", - "x": 4130.7793579101535, - "y": 1220.6263247135673, - "width": 228.66666666666694, - "height": 106.33333333333346, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0H", - "roundness": { - "type": 3 - }, - "seed": 1330695326, - "version": 1472, - "versionNonce": 968792154, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "sJpQ0pZRAKSruhAWeXqOH" - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow" - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow" - } - ], - "updated": 1763384145646, - "link": null, - "locked": false - }, - { - "id": "sJpQ0pZRAKSruhAWeXqOH", - "type": "text", - "x": 4149.1546681721975, - "y": 1251.292991380234, - "width": 191.91604614257812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0I", - "roundness": null, - "seed": 2064222430, - "version": 1511, - "versionNonce": 155287194, - "isDeleted": false, - "boundElements": [], - "updated": 1763384145646, - "link": null, - "locked": false, - "text": "Kubernetes", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "KojM_KzLAG1V7jiuobzUd", - "originalText": "Kubernetes", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow", - "x": 3913.697236173266, - "y": 1138.6225671511845, - "width": 105.92635104170358, - "height": 78.89281612144464, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0J", - "roundness": { - "type": 2 - }, - "seed": 1418783902, - "version": 1280, - "versionNonce": 848300358, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141322, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -105.92635104170358, - 78.89281612144464 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.054105302974298795, - "gap": 1.3578892127572153 - }, - "endBinding": { - "elementId": "2R1wTqnj3ubPsQMZU_PxS", - "focus": 0.07707192456052014, - "gap": 2.7629031464324063 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow", - "x": 4059.5309326323736, - "y": 1138.4774657844766, - "width": 117.3396700731978, - "height": 80.44365540828198, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0K", - "roundness": { - "type": 2 - }, - "seed": 830730910, - "version": 1414, - "versionNonce": 1334505606, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 117.3396700731978, - 80.44365540828198 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.043357881583191, - "gap": 1 - }, - "endBinding": { - "elementId": "KojM_KzLAG1V7jiuobzUd", - "focus": 0.06803604961437397, - "gap": 3.922269337634134 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "upPAv38LJEAZS_l-LkEu-", - "type": "rectangle", - "x": 3890.883728027343, - "y": 1220.7097394271086, - "width": 173.666666666667, - "height": 109.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0L", - "roundness": { - "type": 3 - }, - "seed": 967122882, - "version": 1401, - "versionNonce": 296403226, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "8o7YkUXTFWqjaK6FdUAoD" - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow" - } - ], - "updated": 1763384139196, - "link": null, - "locked": false - }, - { - "id": "8o7YkUXTFWqjaK6FdUAoD", - "type": "text", - "x": 3945.317052205403, - "y": 1253.043072760442, - "width": 64.80001831054688, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0M", - "roundness": null, - "seed": 1697634178, - "version": 1432, - "versionNonce": 195530202, - "isDeleted": false, - "boundElements": [], - "updated": 1763384139196, - "link": null, - "locked": false, - "text": "LXC", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "upPAv38LJEAZS_l-LkEu-", - "originalText": "LXC", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow", - "x": 3971.211301884916, - "y": 1138.4774657844766, - "width": 22.417090493436717, - "height": 77.09341378981071, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0N", - "roundness": { - "type": 2 - }, - "seed": 2034512542, - "version": 1314, - "versionNonce": 858189766, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 22.417090493436717, - 77.09341378981071 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.18603406557969024, - "gap": 1 - }, - "endBinding": { - "elementId": "upPAv38LJEAZS_l-LkEu-", - "focus": 0.331532005664942, - "gap": 9.261062959145589 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow", - "x": 4465.685559194899, - "y": 504.7368722186192, - "width": 416.66639859664883, - "height": 513.8492916147236, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0O", - "roundness": { - "type": 2 - }, - "seed": 360002590, - "version": 1472, - "versionNonce": 427886342, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -416.66639859664883, - 513.8492916147236 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "qNeeLvM5XS8SbneZGVW0q", - "focus": -0.16751604248648713, - "gap": 2.131147600886095 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.09616785773585025, - "gap": 3.640766669647064 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow", - "x": 4655.018816874993, - "y": 495.7977198749062, - "width": 553.8776891080634, - "height": 525.1891222998178, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0P", - "roundness": { - "type": 2 - }, - "seed": 2125809374, - "version": 1642, - "versionNonce": 857093702, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -221.76256077147536, - 181.99396205054973 - ], - [ - -553.8776891080634, - 525.1891222998178 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.3621355014904502, - "gap": 3.260200817805893 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.3243749380630405, - "gap": 1.126033152432464 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow", - "x": 4040.276578936203, - "y": 477.5521333195176, - "width": 57.974144646894274, - "height": 544.4961278689279, - "angle": 0.0633163393295888, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Q", - "roundness": { - "type": 2 - }, - "seed": 576394754, - "version": 1653, - "versionNonce": 415464838, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 37.107450986672575, - 240.52126279105897 - ], - [ - -20.8666936602217, - 544.4961278689279 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "nOSvpvwFCOMwGd2-U8NK4", - "focus": -0.22925723808690657, - "gap": 1 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.030798161473846564, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "BXRXeMn6eO7IJgm7NLwzv", - "type": "text", - "x": 2472.133514404295, - "y": -75.3570686376699, - "width": 504.36016845703125, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0R", - "roundness": null, - "seed": 1231995842, - "version": 316, - "versionNonce": 380936454, - "isDeleted": false, - "boundElements": [], - "updated": 1763383022708, - "link": null, - "locked": false, - "text": "eDF Product Structure Tree", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "eDF Product Structure Tree", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "sTl4MwlP7u0CR0h6eLvJQ", - "type": "rectangle", - "x": 4626.422922770184, - "y": 170.45834859212238, - "width": 311.9999999999998, - "height": 104.66666666666652, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0S", - "roundness": { - "type": 3 - }, - "seed": 1782051974, - "version": 1226, - "versionNonce": 501466438, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-ylDXHMB5GzSZtgYIZozG" - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow" - } - ], - "updated": 1763384736922, - "link": null, - "locked": false - }, - { - "id": "-ylDXHMB5GzSZtgYIZozG", - "type": "text", - "x": 4652.64287821452, - "y": 177.79168192545563, - "width": 259.5600891113281, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0T", - "roundness": null, - "seed": 2039706566, - "version": 1242, - "versionNonce": 285682822, - "isDeleted": false, - "boundElements": [], - "updated": 1763384736922, - "link": null, - "locked": false, - "text": "Documentation\nSystem", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "sTl4MwlP7u0CR0h6eLvJQ", - "originalText": "Documentation\nSystem", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow", - "x": 3674.166532263675, - "y": -7.539423043387444, - "width": 1001.9695327207187, - "height": 177.08777153390812, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0U", - "roundness": { - "type": 2 - }, - "seed": 1405220934, - "version": 1822, - "versionNonce": 1908124614, - "isDeleted": false, - "boundElements": [], - "updated": 1763384736922, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 702.4230571731755, - 76.99777163550999 - ], - [ - 1001.9695327207187, - 177.08777153390812 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": -0.18532736315942697, - "gap": 1.9570338578978408 - }, - "endBinding": { - "elementId": "sTl4MwlP7u0CR0h6eLvJQ", - "focus": 0.16972033991295915, - "gap": 2.7752666400353974 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "bakJjzmrp7G7d2sBa5bE1", - "type": "rectangle", - "x": 3116.422922770184, - "y": 349.4583485921225, - "width": 227.00000000000048, - "height": 145.00000000000003, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0V", - "roundness": { - "type": 3 - }, - "seed": 504948806, - "version": 863, - "versionNonce": 1596722566, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "_Pg-V6Tz2Rl3fLlB6nXEi" - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow" - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow" - } - ], - "updated": 1763391068631, - "link": null, - "locked": false - }, - { - "id": "_Pg-V6Tz2Rl3fLlB6nXEi", - "type": "text", - "x": 3127.0169016520204, - "y": 376.9583485921225, - "width": 205.81204223632812, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0W", - "roundness": null, - "seed": 882896774, - "version": 927, - "versionNonce": 1251765446, - "isDeleted": false, - "boundElements": [], - "updated": 1763391068631, - "link": null, - "locked": false, - "text": "Application-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "bakJjzmrp7G7d2sBa5bE1", - "originalText": "Application-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow", - "x": 3111.6727479941255, - "y": 276.98888252002644, - "width": 103.18774040469634, - "height": 71.9292657941337, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0X", - "roundness": { - "type": 2 - }, - "seed": 955498202, - "version": 1684, - "versionNonce": 74324614, - "isDeleted": false, - "boundElements": [], - "updated": 1763391068698, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 103.18774040469634, - 71.9292657941337 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": -0.15928775176009108, - "gap": 1.3116249354053713 - }, - "endBinding": { - "elementId": "bakJjzmrp7G7d2sBa5bE1", - "focus": 0.41080086918406883, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "GQcnY9zMohoK_v73jNmE0", - "type": "rectangle", - "x": 3160.5895894368514, - "y": 581.2916819254557, - "width": 196.99999999999986, - "height": 124.66666666666681, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Y", - "roundness": { - "type": 3 - }, - "seed": 530011866, - "version": 932, - "versionNonce": 1572672858, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "i41b16DABLTr-sgwa2oJx" - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow" - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow" - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391150317, - "link": null, - "locked": false - }, - { - "id": "i41b16DABLTr-sgwa2oJx", - "type": "text", - "x": 3202.497556050621, - "y": 621.1250152587891, - "width": 113.18406677246094, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Z", - "roundness": null, - "seed": 1660644250, - "version": 998, - "versionNonce": 1689711066, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110163, - "link": null, - "locked": false, - "text": "CI/CD", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GQcnY9zMohoK_v73jNmE0", - "originalText": "CI/CD", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "1z4ZshL3doX_LVv14PQd5", - "type": "rectangle", - "x": 2913.089589436851, - "y": 807.9583485921227, - "width": 238.66666666666697, - "height": 123.00000000000003, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0a", - "roundness": { - "type": 3 - }, - "seed": 1049767302, - "version": 1113, - "versionNonce": 346918790, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-fj92HOz7DaeDVXUB1ec8" - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow" - } - ], - "updated": 1763390993635, - "link": null, - "locked": false - }, - { - "id": "-fj92HOz7DaeDVXUB1ec8", - "type": "text", - "x": 2919.544886271161, - "y": 846.9583485921227, - "width": 225.75607299804688, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0b", - "roundness": null, - "seed": 406752454, - "version": 1200, - "versionNonce": 412987078, - "isDeleted": false, - "boundElements": [], - "updated": 1763390993635, - "link": null, - "locked": false, - "text": "Component 2", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "1z4ZshL3doX_LVv14PQd5", - "originalText": "Component 2", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow", - "x": 3014.9546496983894, - "y": 719.5858048088286, - "width": 10.084360685561023, - "height": 86.78634400800888, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0c", - "roundness": { - "type": 2 - }, - "seed": 1405611994, - "version": 1768, - "versionNonce": 2059986010, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 10.084360685561023, - 86.78634400800888 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.016951854546525768, - "gap": 4.119957231626131 - }, - "endBinding": { - "elementId": "1z4ZshL3doX_LVv14PQd5", - "focus": -0.00007194541412355224, - "gap": 3.3933770804029564 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow", - "x": 3240.366734040912, - "y": 496.4976753137354, - "width": 11.95393262985317, - "height": 82.10073781213828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0d", - "roundness": { - "type": 2 - }, - "seed": 2111838554, - "version": 1745, - "versionNonce": 930064026, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110163, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 11.95393262985317, - 82.10073781213828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "bakJjzmrp7G7d2sBa5bE1", - "focus": 0.012131730411546674, - "gap": 3.740781409685951 - }, - "endBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.020775065079411466, - "gap": 4.939956252930415 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow", - "x": 3330.7592086354553, - "y": 580.8584663690883, - "width": 167.3425940593247, - "height": 313.72241070957364, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0e", - "roundness": { - "type": 2 - }, - "seed": 1751843014, - "version": 2045, - "versionNonce": 2005412314, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152612, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 64.1637141347278, - -209.73345111029903 - ], - [ - 167.3425940593247, - -313.72241070957364 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.4462706193445063, - "gap": 1 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.44942698855441565, - "gap": 1.1905686018336108 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow", - "x": 3279.0249240152916, - "y": 707.7974287724307, - "width": 31.146088471095027, - "height": 99.14455253000006, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0f", - "roundness": { - "type": 2 - }, - "seed": 506957338, - "version": 2010, - "versionNonce": 819349530, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110164, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 31.146088471095027, - 99.14455253000006 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.004268442309165779, - "gap": 3.3927500565346236 - }, - "endBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.1555692552487658, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "iyrKGKzHkFAHUCEepXNCP", - "type": "rectangle", - "x": 4154.7562561035165, - "y": 1400.958348592122, - "width": 188.66666666666703, - "height": 83.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0g", - "roundness": { - "type": 3 - }, - "seed": 1043629594, - "version": 1525, - "versionNonce": 1733889734, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "0VtVc_LsUgaakcwYELAIv" - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow" - } - ], - "updated": 1763384122279, - "link": null, - "locked": false - }, - { - "id": "0VtVc_LsUgaakcwYELAIv", - "type": "text", - "x": 4171.077573140463, - "y": 1420.1250152587886, - "width": 156.02403259277344, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0h", - "roundness": null, - "seed": 1823519450, - "version": 1567, - "versionNonce": 1612137990, - "isDeleted": false, - "boundElements": [], - "updated": 1763384122279, - "link": null, - "locked": false, - "text": "Operator", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "iyrKGKzHkFAHUCEepXNCP", - "originalText": "Operator", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow", - "x": 4251.370249081578, - "y": 1327.3847620453423, - "width": 1.8102403392640554, - "height": 72.2936218846628, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0i", - "roundness": { - "type": 2 - }, - "seed": 1331934342, - "version": 1479, - "versionNonce": 1105447386, - "isDeleted": false, - "boundElements": [], - "updated": 1763384145646, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 1.8102403392640554, - 72.2936218846628 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "KojM_KzLAG1V7jiuobzUd", - "focus": -0.042434316865628915, - "gap": 1 - }, - "endBinding": { - "elementId": "iyrKGKzHkFAHUCEepXNCP", - "focus": 0.05407803750606913, - "gap": 3.066797992077454 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "GE2ntK1-Y0o1hS7Vo9-zm", - "type": "rectangle", - "x": 3388.9229227701835, - "y": 1210.458348592123, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0j", - "roundness": { - "type": 3 - }, - "seed": 188493978, - "version": 1357, - "versionNonce": 1640059738, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-X_vMrljPS5ULaklilxhx" - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow" - } - ], - "updated": 1763384929590, - "link": null, - "locked": false - }, - { - "id": "-X_vMrljPS5ULaklilxhx", - "type": "text", - "x": 3460.4789148966483, - "y": 1251.958348592123, - "width": 48.88801574707031, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0k", - "roundness": null, - "seed": 1079971162, - "version": 1387, - "versionNonce": 861747930, - "isDeleted": false, - "boundElements": [], - "updated": 1763383979514, - "link": null, - "locked": false, - "text": "VM", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GE2ntK1-Y0o1hS7Vo9-zm", - "originalText": "VM", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "uw_e9SDMZg5n02CI_rcGi", - "type": "rectangle", - "x": 4585.5895894368505, - "y": 587.1250152587893, - "width": 305.3333333333338, - "height": 124.66666666666686, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0l", - "roundness": { - "type": 3 - }, - "seed": 602888282, - "version": 1506, - "versionNonce": 996004742, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "2znQQlyW0T8QSBRjognw4" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow" - } - ], - "updated": 1763384560453, - "link": null, - "locked": false - }, - { - "id": "2znQQlyW0T8QSBRjognw4", - "type": "text", - "x": 4618.03421020508, - "y": 604.4583485921227, - "width": 240.444091796875, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0m", - "roundness": null, - "seed": 1876376858, - "version": 1523, - "versionNonce": 1933076486, - "isDeleted": false, - "boundElements": [], - "updated": 1763384545979, - "link": null, - "locked": false, - "text": "EdgeConnect \nSDK", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "uw_e9SDMZg5n02CI_rcGi", - "originalText": "EdgeConnect \nSDK", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow", - "x": 4742.051466806003, - "y": 713.4471437591372, - "width": 5.8909444903556505, - "height": 75.80378361758562, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0n", - "roundness": { - "type": 2 - }, - "seed": 2009573594, - "version": 2150, - "versionNonce": 1144246490, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365259, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 5.8909444903556505, - 75.80378361758562 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "uw_e9SDMZg5n02CI_rcGi", - "focus": 0.007476026682284668, - "gap": 4.238474561391172 - }, - "endBinding": { - "elementId": "fWp85O5NBU84CIOiCRAVO", - "focus": 0.012109051562514402, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "nOSvpvwFCOMwGd2-U8NK4", - "type": "rectangle", - "x": 3933.922922770184, - "y": 377.1250152587893, - "width": 192.00000000000003, - "height": 100, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0o", - "roundness": { - "type": 3 - }, - "seed": 626832582, - "version": 1088, - "versionNonce": 1823240666, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ZPMRObXGtXaQKfmBJJ-KQ" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - } - ], - "updated": 1763385040095, - "link": null, - "locked": false - }, - { - "id": "ZPMRObXGtXaQKfmBJJ-KQ", - "type": "text", - "x": 3985.8589045206722, - "y": 404.6250152587893, - "width": 88.12803649902344, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0p", - "roundness": null, - "seed": 716581894, - "version": 1136, - "versionNonce": 1860531270, - "isDeleted": false, - "boundElements": [], - "updated": 1763385014061, - "link": null, - "locked": false, - "text": "Local", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "nOSvpvwFCOMwGd2-U8NK4", - "originalText": "Local", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Q4aPE3RbERqqTQCSpoSFt", - "type": "rectangle", - "x": 4160.58958943685, - "y": 364.45834859212255, - "width": 213.66666666666706, - "height": 145, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0q", - "roundness": { - "type": 3 - }, - "seed": 109548870, - "version": 1201, - "versionNonce": 1322127642, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "iQ_kNDvjt10ji9Rskw65i" - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow" - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow" - } - ], - "updated": 1763385064503, - "link": null, - "locked": false - }, - { - "id": "iQ_kNDvjt10ji9Rskw65i", - "type": "text", - "x": 4170.510889689129, - "y": 391.95834859212255, - "width": 193.82406616210938, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0r", - "roundness": null, - "seed": 1420885126, - "version": 1201, - "versionNonce": 207114266, - "isDeleted": false, - "boundElements": [], - "updated": 1763385026627, - "link": null, - "locked": false, - "text": "Docker\nRemoteEnv", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Q4aPE3RbERqqTQCSpoSFt", - "originalText": "Docker\nRemoteEnv", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow", - "x": 3852.174174884919, - "y": 1130.5023219437203, - "width": 289.33518309975443, - "height": 81.10957567525247, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0s", - "roundness": { - "type": 2 - }, - "seed": 1751588122, - "version": 1363, - "versionNonce": 1069931718, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -289.33518309975443, - 81.10957567525247 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.1539472108942291, - "gap": 1 - }, - "endBinding": { - "elementId": "GE2ntK1-Y0o1hS7Vo9-zm", - "focus": -0.4546954019374654, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow", - "x": 4101.64589585709, - "y": 286.89444145496736, - "width": 49.65898007325768, - "height": 89.29117630522018, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0t", - "roundness": { - "type": 2 - }, - "seed": 579481370, - "version": 1636, - "versionNonce": 796152518, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152689, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -49.65898007325768, - 89.29117630522018 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": -0.13514163598325443, - "gap": 4.117292779330398 - }, - "endBinding": { - "elementId": "nOSvpvwFCOMwGd2-U8NK4", - "focus": -0.05543597463883624, - "gap": 2.0041358143996035 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow", - "x": 4192.801280649863, - "y": 289.5785332244855, - "width": 68.75839879773957, - "height": 74.31659743616035, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0u", - "roundness": { - "type": 2 - }, - "seed": 1171775110, - "version": 1647, - "versionNonce": 204081670, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152689, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 68.75839879773957, - 74.31659743616035 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": -0.08031868402593013, - "gap": 10.783959445996913 - }, - "endBinding": { - "elementId": "Q4aPE3RbERqqTQCSpoSFt", - "focus": 0.3526253866400684, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow", - "x": 4266.321864921288, - "y": 511.89374589955844, - "width": 235.22137323132665, - "height": 504.2931782805525, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0v", - "roundness": { - "type": 2 - }, - "seed": 1801718682, - "version": 1598, - "versionNonce": 1840927750, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -235.22137323132665, - 504.2931782805525 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "Q4aPE3RbERqqTQCSpoSFt", - "focus": -0.24131022543848235, - "gap": 4.283960062282063 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.11909908658082793, - "gap": 9.151362628033098 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Z6xCNDUhdW5ZX0Y2ECV9n", - "type": "rectangle", - "x": 2613.9229227701835, - "y": 574.6250152587894, - "width": 238.66666666666683, - "height": 149.66666666666677, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0w", - "roundness": { - "type": 3 - }, - "seed": 775996294, - "version": 995, - "versionNonce": 587875334, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "VnDwUbLeVmXrmKoXyW4jE" - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow" - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391161789, - "link": null, - "locked": false - }, - { - "id": "VnDwUbLeVmXrmKoXyW4jE", - "type": "text", - "x": 2659.618247985841, - "y": 626.9583485921228, - "width": 147.27601623535156, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0wV", - "roundness": null, - "seed": 1052760026, - "version": 15, - "versionNonce": 1375590170, - "isDeleted": false, - "boundElements": [], - "updated": 1763390965217, - "link": null, - "locked": false, - "text": "Pipelines", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "originalText": "Pipelines", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow", - "x": 2859.046465894031, - "y": 491.9302417078348, - "width": 119.31538317259992, - "height": 81.60007621041206, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0y", - "roundness": { - "type": 2 - }, - "seed": 800611098, - "version": 1672, - "versionNonce": 619907290, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064732, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -119.31538317259992, - 81.60007621041206 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": -0.3213784454702341, - "gap": 1 - }, - "endBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": -0.4576682084095265, - "gap": 2.0458557674033955 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow", - "x": 2570.760109010224, - "y": 489.4221224367187, - "width": 88.84700729503857, - "height": 83.61734694484142, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0z", - "roundness": { - "type": 2 - }, - "seed": 331115738, - "version": 1635, - "versionNonce": 378421702, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073115, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 88.84700729503857, - 83.61734694484142 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.006894475977603966, - "gap": 1 - }, - "endBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": 0.03900456492483074, - "gap": 2.954144232596036 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow", - "x": 2848.6028438322037, - "y": 576.019857228893, - "width": 850.3448277694256, - "height": 257.70910885318995, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b11", - "roundness": { - "type": 2 - }, - "seed": 1611589466, - "version": 2783, - "versionNonce": 1458828506, - "isDeleted": false, - "boundElements": [], - "updated": 1763391694545, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 36.320078937979815, - -34.8948419701037 - ], - [ - 204.65341227131285, - -56.56150863677044 - ], - [ - 224.65341227131285, - -233.22817530343718 - ], - [ - 396.8247546258358, - -257.70910885318995 - ], - [ - 772.9867456046463, - -251.56150863677044 - ], - [ - 850.3448277694256, - -208.71149598545628 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": 0.19728207817783538, - "gap": 7.564016222660115 - }, - "endBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": 0.10817150001893147, - "gap": 3.6705406157783296 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "S9TLBbjWctzLOv-vhelre", - "type": "ellipse", - "x": 3724.6689533346334, - "y": 109.37289790771013, - "width": 91.99996948242188, - "height": 94.00001525878905, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b14", - "roundness": { - "type": 2 - }, - "seed": 122154516, - "version": 88, - "versionNonce": 2137652012, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "G_P4xTsXJrJTCOmNHA6hI" - } - ], - "updated": 1764058164906, - "link": null, - "locked": false - }, - { - "id": "G_P4xTsXJrJTCOmNHA6hI", - "type": "text", - "x": 3759.320038334665, - "y": 133.6388814265403, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b15", - "roundness": null, - "seed": 548966036, - "version": 57, - "versionNonce": 1968813484, - "isDeleted": false, - "boundElements": null, - "updated": 1764058164906, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "S9TLBbjWctzLOv-vhelre", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "-VilYOONFJ2WkAT_Vv2lp", - "type": "ellipse", - "x": 4300.668785487954, - "y": 313.3728559460402, - "width": 93.99993896484374, - "height": 90.00003814697266, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b16", - "roundness": { - "type": 2 - }, - "seed": 422490900, - "version": 142, - "versionNonce": 392455828, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "4PnFWjU_oyfJAlNm-7zu8" - } - ], - "updated": 1764058170421, - "link": null, - "locked": false - }, - { - "id": "4PnFWjU_oyfJAlNm-7zu8", - "type": "text", - "x": 4336.904759054498, - "y": 336.05305637914034, - "width": 21.05999755859375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b17", - "roundness": null, - "seed": 1619996820, - "version": 113, - "versionNonce": 709000340, - "isDeleted": false, - "boundElements": [], - "updated": 1764058181930, - "link": null, - "locked": false, - "text": "4", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "-VilYOONFJ2WkAT_Vv2lp", - "originalText": "4", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "aWhaqZ6GtCiUWs11d3-zD", - "type": "ellipse", - "x": 4520.669243251626, - "y": 315.3729017224074, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b18", - "roundness": { - "type": 2 - }, - "seed": 1185502484, - "version": 115, - "versionNonce": 1112630548, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "tGelYBEQhOa4s9nyq-N6q" - } - ], - "updated": 1764058192913, - "link": null, - "locked": false - }, - { - "id": "tGelYBEQhOa4s9nyq-N6q", - "type": "text", - "x": 4559.491905596107, - "y": 339.6388908277324, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b19", - "roundness": null, - "seed": 174428820, - "version": 85, - "versionNonce": 1988862612, - "isDeleted": false, - "boundElements": [], - "updated": 1764058192913, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "aWhaqZ6GtCiUWs11d3-zD", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "efc5QT32abJxpRIwyJeeU", - "type": "ellipse", - "x": 4886.668922817055, - "y": 328.3728559460402, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1A", - "roundness": { - "type": 2 - }, - "seed": 77763884, - "version": 165, - "versionNonce": 702191788, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "jkXBndktr6Ls_U5B00qgc" - } - ], - "updated": 1764058264008, - "link": null, - "locked": false - }, - { - "id": "jkXBndktr6Ls_U5B00qgc", - "type": "text", - "x": 4925.293587114662, - "y": 352.6388450513652, - "width": 23.039993286132812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1B", - "roundness": null, - "seed": 1013911468, - "version": 139, - "versionNonce": 1473562668, - "isDeleted": false, - "boundElements": [], - "updated": 1764058275290, - "link": null, - "locked": false, - "text": "6", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "efc5QT32abJxpRIwyJeeU", - "originalText": "6", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "UvpUBdsYjlPl8pWXYz-hB", - "type": "ellipse", - "x": 4850.66916695768, - "y": 548.372932239985, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1C", - "roundness": { - "type": 2 - }, - "seed": 410351892, - "version": 173, - "versionNonce": 400137876, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "l1CWo30BWWg3mD9EKqiF6" - } - ], - "updated": 1764058283835, - "link": null, - "locked": false - }, - { - "id": "l1CWo30BWWg3mD9EKqiF6", - "type": "text", - "x": 4890.769829180092, - "y": 572.6389213453099, - "width": 20.087997436523438, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1D", - "roundness": null, - "seed": 386741908, - "version": 145, - "versionNonce": 1247570708, - "isDeleted": false, - "boundElements": [], - "updated": 1764058324153, - "link": null, - "locked": false, - "text": "7", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "UvpUBdsYjlPl8pWXYz-hB", - "originalText": "7", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ycyUlIojSgmT47orCFTs0", - "type": "ellipse", - "x": 4888.669044887368, - "y": 744.3729169811959, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1E", - "roundness": { - "type": 2 - }, - "seed": 2053886892, - "version": 197, - "versionNonce": 156396588, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "eKLN-wh63xn5RM1vRW2zV" - } - ], - "updated": 1764058301146, - "link": null, - "locked": false - }, - { - "id": "eKLN-wh63xn5RM1vRW2zV", - "type": "text", - "x": 4928.769707109779, - "y": 768.6389060865208, - "width": 20.087997436523438, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1F", - "roundness": null, - "seed": 1401716268, - "version": 170, - "versionNonce": 1913976364, - "isDeleted": false, - "boundElements": [], - "updated": 1764058313882, - "link": null, - "locked": false, - "text": "7", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "ycyUlIojSgmT47orCFTs0", - "originalText": "7", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "CrD3-rundH3dNU9UNqW6X", - "type": "ellipse", - "x": 4892.668983852212, - "y": 106.3728483166451, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1G", - "roundness": { - "type": 2 - }, - "seed": 1961612180, - "version": 222, - "versionNonce": 1551877652, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "C6C-N2L-gDWjl7b26QfgA" - } - ], - "updated": 1764058334486, - "link": null, - "locked": false - }, - { - "id": "C6C-N2L-gDWjl7b26QfgA", - "type": "text", - "x": 4931.689651872963, - "y": 130.6388374219701, - "width": 22.24798583984375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1H", - "roundness": null, - "seed": 2027176212, - "version": 196, - "versionNonce": 2046654868, - "isDeleted": false, - "boundElements": [], - "updated": 1764058347018, - "link": null, - "locked": false, - "text": "5", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "CrD3-rundH3dNU9UNqW6X", - "originalText": "5", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "eYPy3NFfWJlOuqZy65_VY", - "type": "ellipse", - "x": 4054.6692585104147, - "y": 320.3728254284615, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1I", - "roundness": { - "type": 2 - }, - "seed": 2122936852, - "version": 265, - "versionNonce": 2019179540, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "Q5LDNkBrAxjzQR3FymQ4k" - } - ], - "updated": 1764058432661, - "link": null, - "locked": false - }, - { - "id": "Q5LDNkBrAxjzQR3FymQ4k", - "type": "text", - "x": 4093.293922808021, - "y": 344.6388145337865, - "width": 23.039993286132812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1J", - "roundness": null, - "seed": 1782189972, - "version": 244, - "versionNonce": 512313516, - "isDeleted": false, - "boundElements": [], - "updated": 1764058447130, - "link": null, - "locked": false, - "text": "6", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "eYPy3NFfWJlOuqZy65_VY", - "originalText": "6", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "u3OsEi1bwdrX-1664tI9D", - "type": "ellipse", - "x": 3816.6692279928366, - "y": 310.37278728148885, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1K", - "roundness": { - "type": 2 - }, - "seed": 12161708, - "version": 288, - "versionNonce": 2075682348, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "y9Bi0bU5ELchh7vmhbTkf" - } - ], - "updated": 1764058461430, - "link": null, - "locked": false - }, - { - "id": "y9Bi0bU5ELchh7vmhbTkf", - "type": "text", - "x": 3855.4918903373177, - "y": 334.63877638681384, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1L", - "roundness": null, - "seed": 1741315372, - "version": 269, - "versionNonce": 212725804, - "isDeleted": false, - "boundElements": [], - "updated": 1764058465394, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "u3OsEi1bwdrX-1664tI9D", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "BbrAD_4MJOszN25AgfW_m", - "type": "ellipse", - "x": 3592.6689838522116, - "y": 330.3729017224068, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1M", - "roundness": { - "type": 2 - }, - "seed": 1476218796, - "version": 312, - "versionNonce": 1698872108, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "6RP_ZK2qmhrm8Lj0IMwAU" - } - ], - "updated": 1764058475042, - "link": null, - "locked": false - }, - { - "id": "6RP_ZK2qmhrm8Lj0IMwAU", - "type": "text", - "x": 3630.213646318763, - "y": 354.6388908277318, - "width": 25.199996948242188, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1N", - "roundness": null, - "seed": 2039380524, - "version": 294, - "versionNonce": 533479340, - "isDeleted": false, - "boundElements": [], - "updated": 1764058492450, - "link": null, - "locked": false, - "text": "2", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "BbrAD_4MJOszN25AgfW_m", - "originalText": "2", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "s_tO2OWgnd6k3p6aQO_Vl", - "type": "ellipse", - "x": 3962.6689838522116, - "y": 526.3728101696724, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1O", - "roundness": { - "type": 2 - }, - "seed": 598986540, - "version": 308, - "versionNonce": 825185964, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "cXn4nTptsuDLFutkvrg1_" - } - ], - "updated": 1764058511598, - "link": null, - "locked": false - }, - { - "id": "cXn4nTptsuDLFutkvrg1_", - "type": "text", - "x": 4001.2936481498177, - "y": 550.6387992749974, - "width": 23.039993286132812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1P", - "roundness": null, - "seed": 424217004, - "version": 288, - "versionNonce": 216506668, - "isDeleted": false, - "boundElements": [], - "updated": 1764058511598, - "link": null, - "locked": false, - "text": "6", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "s_tO2OWgnd6k3p6aQO_Vl", - "originalText": "6", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "mbq9XqroXNHQ0Erh7HiHw", - "type": "ellipse", - "x": 3714.6689533346334, - "y": 528.3728559460396, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1Q", - "roundness": { - "type": 2 - }, - "seed": 631334316, - "version": 316, - "versionNonce": 1610589484, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "OVAta9Z7WEv2pxhpklGe4" - } - ], - "updated": 1764058524410, - "link": null, - "locked": false - }, - { - "id": "OVAta9Z7WEv2pxhpklGe4", - "type": "text", - "x": 3753.2936176322396, - "y": 552.6388450513646, - "width": 23.039993286132812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1R", - "roundness": null, - "seed": 1715458092, - "version": 296, - "versionNonce": 1235885996, - "isDeleted": false, - "boundElements": [], - "updated": 1764058524410, - "link": null, - "locked": false, - "text": "6", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "mbq9XqroXNHQ0Erh7HiHw", - "originalText": "6", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "V6SBoSL79cVLklIgZQ-_f", - "type": "ellipse", - "x": 4310.669319545571, - "y": 1166.372962757563, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1S", - "roundness": { - "type": 2 - }, - "seed": 1501112724, - "version": 298, - "versionNonce": 1467034644, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "t7H3sEsGotewAoJrLiHHt" - } - ], - "updated": 1764058534474, - "link": null, - "locked": false - }, - { - "id": "t7H3sEsGotewAoJrLiHHt", - "type": "text", - "x": 4349.491981890053, - "y": 1190.638951862888, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1T", - "roundness": null, - "seed": 1296488212, - "version": 279, - "versionNonce": 151028244, - "isDeleted": false, - "boundElements": [], - "updated": 1764058537897, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "V6SBoSL79cVLklIgZQ-_f", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "srxM_rJa4L1CGsDDI-7xS", - "type": "ellipse", - "x": 4306.668922817055, - "y": 1344.3728406872506, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1U", - "roundness": { - "type": 2 - }, - "seed": 441145516, - "version": 304, - "versionNonce": 383925292, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "Lw-s4LsnxhWgQMPVbyGrR" - } - ], - "updated": 1764058551285, - "link": null, - "locked": false - }, - { - "id": "Lw-s4LsnxhWgQMPVbyGrR", - "type": "text", - "x": 4346.2835849784315, - "y": 1368.6388297925755, - "width": 21.05999755859375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1V", - "roundness": null, - "seed": 926114604, - "version": 285, - "versionNonce": 289195564, - "isDeleted": false, - "boundElements": [], - "updated": 1764058558722, - "link": null, - "locked": false, - "text": "4", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "srxM_rJa4L1CGsDDI-7xS", - "originalText": "4", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Kk8wS21N52GfyMIxNQUiD", - "type": "ellipse", - "x": 4014.6692585104147, - "y": 1184.3729169811959, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1W", - "roundness": { - "type": 2 - }, - "seed": 313779628, - "version": 317, - "versionNonce": 816040492, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "z-H2mLiBjtzrgRRmsIdYo" - } - ], - "updated": 1764058564714, - "link": null, - "locked": false - }, - { - "id": "z-H2mLiBjtzrgRRmsIdYo", - "type": "text", - "x": 4053.8699192069466, - "y": 1208.6389060865208, - "width": 21.88800048828125, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1X", - "roundness": null, - "seed": 218255404, - "version": 299, - "versionNonce": 232301076, - "isDeleted": false, - "boundElements": [], - "updated": 1764058570928, - "link": null, - "locked": false, - "text": "3", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Kk8wS21N52GfyMIxNQUiD", - "originalText": "3", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "drmADky3UliRCe__NarnQ", - "type": "ellipse", - "x": 3736.669075404946, - "y": 1164.3728406872506, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1Y", - "roundness": { - "type": 2 - }, - "seed": 1104535084, - "version": 324, - "versionNonce": 1518605740, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "QSjL3JxtYopF6JgLR31Iv" - } - ], - "updated": 1764058575711, - "link": null, - "locked": false - }, - { - "id": "QSjL3JxtYopF6JgLR31Iv", - "type": "text", - "x": 3775.491737749427, - "y": 1188.6388297925755, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1Z", - "roundness": null, - "seed": 1716598956, - "version": 305, - "versionNonce": 107339692, - "isDeleted": false, - "boundElements": [], - "updated": 1764058580737, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "drmADky3UliRCe__NarnQ", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "0zzu5r7GZk1rxwefWcgqb", - "type": "ellipse", - "x": 3514.6689533346334, - "y": 1162.3728712048287, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1a", - "roundness": { - "type": 2 - }, - "seed": 1630629676, - "version": 293, - "versionNonce": 1283582892, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "hoaCUVeszeOE86NsuidHd" - } - ], - "updated": 1764058584992, - "link": null, - "locked": false - }, - { - "id": "hoaCUVeszeOE86NsuidHd", - "type": "text", - "x": 3557.1276172660287, - "y": 1186.6388603101536, - "width": 15.371994018554688, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1b", - "roundness": null, - "seed": 370321836, - "version": 274, - "versionNonce": 1472771500, - "isDeleted": false, - "boundElements": [], - "updated": 1764058587785, - "link": null, - "locked": false, - "text": "1", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "0zzu5r7GZk1rxwefWcgqb", - "originalText": "1", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "bdJv2Zbkki-JSh50b4qkl", - "type": "ellipse", - "x": 3054.6689533346334, - "y": 94.37280254027792, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1c", - "roundness": { - "type": 2 - }, - "seed": 691799340, - "version": 330, - "versionNonce": 1995560468, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "K8d7IwE3NmuTR2JH_RIqd" - } - ], - "updated": 1764058611383, - "link": null, - "locked": false - }, - { - "id": "K8d7IwE3NmuTR2JH_RIqd", - "type": "text", - "x": 3093.2936176322396, - "y": 118.63879164560285, - "width": 23.039993286132812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1d", - "roundness": null, - "seed": 1817870252, - "version": 310, - "versionNonce": 2146825108, - "isDeleted": false, - "boundElements": [], - "updated": 1764058611383, - "link": null, - "locked": false, - "text": "6", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "bdJv2Zbkki-JSh50b4qkl", - "originalText": "6", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "0Cl2eYM9Jt7g-5spp1Kz7", - "type": "ellipse", - "x": 2588.6689685934225, - "y": 294.37287883422323, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1e", - "roundness": { - "type": 2 - }, - "seed": 1440492564, - "version": 325, - "versionNonce": 163214612, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "yVP_5O3MAdhlRElejJH4F" - } - ], - "updated": 1764058621030, - "link": null, - "locked": false - }, - { - "id": "yVP_5O3MAdhlRElejJH4F", - "type": "text", - "x": 2627.4916309379037, - "y": 318.6388679395482, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1f", - "roundness": null, - "seed": 2066057620, - "version": 306, - "versionNonce": 1541229332, - "isDeleted": false, - "boundElements": [], - "updated": 1764058624017, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "0Cl2eYM9Jt7g-5spp1Kz7", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "w03qiiXJphS43Y7WnZAG8", - "type": "ellipse", - "x": 2962.6689075582663, - "y": 306.37281016967245, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1g", - "roundness": { - "type": 2 - }, - "seed": 2006496148, - "version": 326, - "versionNonce": 1887963924, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "W1xraQTuUrNtzixW76dvf" - } - ], - "updated": 1764058640657, - "link": null, - "locked": false - }, - { - "id": "W1xraQTuUrNtzixW76dvf", - "type": "text", - "x": 3001.4915699027474, - "y": 330.63879927499744, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1h", - "roundness": null, - "seed": 1390747924, - "version": 311, - "versionNonce": 1997946796, - "isDeleted": false, - "boundElements": [], - "updated": 1764058645065, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "w03qiiXJphS43Y7WnZAG8", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ppUMNJDQLhLZXG2j47aC-", - "type": "ellipse", - "x": 3278.668892299477, - "y": 294.3728406872506, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1i", - "roundness": { - "type": 2 - }, - "seed": 1873480084, - "version": 366, - "versionNonce": 1059494164, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ZGySTb6Bxmlviqrkp8_Nd" - } - ], - "updated": 1764058651421, - "link": null, - "locked": false - }, - { - "id": "ZGySTb6Bxmlviqrkp8_Nd", - "type": "text", - "x": 3316.2135547660287, - "y": 318.63882979257556, - "width": 25.199996948242188, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1j", - "roundness": null, - "seed": 37533460, - "version": 354, - "versionNonce": 453012628, - "isDeleted": false, - "boundElements": [], - "updated": 1764058672593, - "link": null, - "locked": false, - "text": "2", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "ppUMNJDQLhLZXG2j47aC-", - "originalText": "2", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "SaW9VbGEcYVIouMPLftg1", - "type": "ellipse", - "x": 4200.66901436979, - "y": 96.37292461059042, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1k", - "roundness": { - "type": 2 - }, - "seed": 2129478932, - "version": 395, - "versionNonce": 1203258260, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "TRE19B0Rmaj4jfBB6Pm70" - } - ], - "updated": 1764058695440, - "link": null, - "locked": false - }, - { - "id": "TRE19B0Rmaj4jfBB6Pm70", - "type": "text", - "x": 4240.283676531166, - "y": 120.63891371591541, - "width": 21.05999755859375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1l", - "roundness": null, - "seed": 1957397140, - "version": 383, - "versionNonce": 1320650516, - "isDeleted": false, - "boundElements": [], - "updated": 1764058708810, - "link": null, - "locked": false, - "text": "4", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "SaW9VbGEcYVIouMPLftg1", - "originalText": "4", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "iFQd65JOiNlO6yJGM5zWP", - "type": "ellipse", - "x": 4490.668861781899, - "y": 100.37286357543417, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1m", - "roundness": { - "type": 2 - }, - "seed": 161678252, - "version": 396, - "versionNonce": 1185743404, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "GGcHQvopqtHEmiQapArI2" - } - ], - "updated": 1764058717217, - "link": null, - "locked": false - }, - { - "id": "GGcHQvopqtHEmiQapArI2", - "type": "text", - "x": 4530.283523943275, - "y": 124.63885268075916, - "width": 21.05999755859375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1n", - "roundness": null, - "seed": 1415425580, - "version": 384, - "versionNonce": 1391077036, - "isDeleted": false, - "boundElements": [], - "updated": 1764058721225, - "link": null, - "locked": false, - "text": "4", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "iFQd65JOiNlO6yJGM5zWP", - "originalText": "4", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "o9bPf2HlnO6aNdg_q2HZ7", - "type": "ellipse", - "x": 2762.6689838522116, - "y": 522.372947498774, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1o", - "roundness": { - "type": 2 - }, - "seed": 285226412, - "version": 371, - "versionNonce": 2091581612, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "mqGGRaAGkhmTcjefzoJHF" - } - ], - "updated": 1764058763069, - "link": null, - "locked": false - }, - { - "id": "mqGGRaAGkhmTcjefzoJHF", - "type": "text", - "x": 2801.4916461966927, - "y": 546.638936604099, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1p", - "roundness": null, - "seed": 491036716, - "version": 357, - "versionNonce": 2136869676, - "isDeleted": false, - "boundElements": [], - "updated": 1764058763069, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "o9bPf2HlnO6aNdg_q2HZ7", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "GrWGoHjplsYqvaTkh86q9", - "type": "ellipse", - "x": 3048.6689685934225, - "y": 538.3728559460396, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1q", - "roundness": { - "type": 2 - }, - "seed": 1900882476, - "version": 363, - "versionNonce": 1007905196, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "WKDPc6v5Mmg3LfBpKHdzp" - } - ], - "updated": 1764058755888, - "link": null, - "locked": false - }, - { - "id": "WKDPc6v5Mmg3LfBpKHdzp", - "type": "text", - "x": 3087.4916309379037, - "y": 562.6388450513646, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1r", - "roundness": null, - "seed": 1090454700, - "version": 351, - "versionNonce": 1741771820, - "isDeleted": false, - "boundElements": [], - "updated": 1764058755888, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GrWGoHjplsYqvaTkh86q9", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "weM8rA_G93HchGKHrGVob", - "type": "ellipse", - "x": 2520.6690143697897, - "y": 526.3729627575631, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1s", - "roundness": { - "type": 2 - }, - "seed": 1144998572, - "version": 420, - "versionNonce": 684134828, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "gqvfltgG9TICn1-Qlz0Km" - } - ], - "updated": 1764058779481, - "link": null, - "locked": false - }, - { - "id": "gqvfltgG9TICn1-Qlz0Km", - "type": "text", - "x": 2559.491676714271, - "y": 550.638951862888, - "width": 22.643997192382812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1t", - "roundness": null, - "seed": 567874860, - "version": 407, - "versionNonce": 1339030572, - "isDeleted": false, - "boundElements": [], - "updated": 1764058779481, - "link": null, - "locked": false, - "text": "9", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "weM8rA_G93HchGKHrGVob", - "originalText": "9", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "tbcZcV580VW3zmrjGK3tZ", - "type": "ellipse", - "x": 3294.6689533346334, - "y": 532.3728712048287, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1u", - "roundness": { - "type": 2 - }, - "seed": 1296751532, - "version": 375, - "versionNonce": 269574700, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "0o5aRBjjXLdFHhwZ61wib" - } - ], - "updated": 1764058800331, - "link": null, - "locked": false - }, - { - "id": "0o5aRBjjXLdFHhwZ61wib", - "type": "text", - "x": 3334.283615496009, - "y": 556.6388603101536, - "width": 21.05999755859375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1v", - "roundness": null, - "seed": 88770092, - "version": 363, - "versionNonce": 1588128812, - "isDeleted": false, - "boundElements": [], - "updated": 1764058807297, - "link": null, - "locked": false, - "text": "4", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "tbcZcV580VW3zmrjGK3tZ", - "originalText": "4", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "H0CJ7TNB3RjsYVYPElsw0", - "type": "ellipse", - "x": 3594.668877040688, - "y": -133.62718983032755, - "width": 100.00000000000001, - "height": 94.00005340576173, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1w", - "roundness": { - "type": 2 - }, - "seed": 1971964844, - "version": 384, - "versionNonce": 500358956, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "0VhIhPMvBfz5nGLacQzUG" - } - ], - "updated": 1764058819935, - "link": null, - "locked": false - }, - { - "id": "0VhIhPMvBfz5nGLacQzUG", - "type": "text", - "x": 3633.689545061439, - "y": -109.36120072500256, - "width": 22.24798583984375, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#f08c00", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b1x", - "roundness": null, - "seed": 673936940, - "version": 373, - "versionNonce": 1170596780, - "isDeleted": false, - "boundElements": [], - "updated": 1764058834833, - "link": null, - "locked": false, - "text": "5", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "H0CJ7TNB3RjsYVYPElsw0", - "originalText": "5", - "autoResize": true, - "lineHeight": 1.25 - } - ], - "appState": { - "gridSize": 20, - "gridStep": 5, - "gridModeEnabled": false, - "viewBackgroundColor": "#ffffff" - }, - "files": {} -} \ No newline at end of file diff --git a/resources/product-structure.excalidraw b/resources/product-structure.excalidraw deleted file mode 100644 index e9b8f9c..0000000 --- a/resources/product-structure.excalidraw +++ /dev/null @@ -1,5239 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", - "elements": [ - { - "id": "vkEBND0A690yxuKyCwa5r", - "type": "rectangle", - "x": 3448.9437917073556, - "y": -86.80836232503256, - "width": 223.6666666666665, - "height": 169.66666666666669, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a0", - "roundness": { - "type": 3 - }, - "seed": 242676382, - "version": 667, - "versionNonce": 132587654, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "EscCIjL-9_GuHSB42NcbB" - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow" - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow" - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow" - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow" - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow" - } - ], - "updated": 1763384714589, - "link": null, - "locked": false - }, - { - "id": "EscCIjL-9_GuHSB42NcbB", - "type": "text", - "x": 3521.447107950845, - "y": -24.47502899169922, - "width": 78.6600341796875, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a1", - "roundness": null, - "seed": 364626690, - "version": 647, - "versionNonce": 1887248326, - "isDeleted": false, - "boundElements": [], - "updated": 1763384714589, - "link": null, - "locked": false, - "text": "EDP", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "vkEBND0A690yxuKyCwa5r", - "originalText": "EDP", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "t0TPl7T0HbrKo0OK0MQB4", - "type": "rectangle", - "x": 3498.789647420246, - "y": 155.7583363850913, - "width": 263.6666666666666, - "height": 136.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a2", - "roundness": { - "type": 3 - }, - "seed": 1074346626, - "version": 912, - "versionNonce": 1485398234, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "w97AzKYRtc3ZIiPzWmF7v" - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow" - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow" - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow" - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow" - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391152495, - "link": null, - "locked": false - }, - { - "id": "w97AzKYRtc3ZIiPzWmF7v", - "type": "text", - "x": 3565.408968607583, - "y": 201.42500305175793, - "width": 130.4280242919922, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a3", - "roundness": null, - "seed": 633510466, - "version": 896, - "versionNonce": 85734810, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152495, - "link": null, - "locked": false, - "text": "Forgejo", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "t0TPl7T0HbrKo0OK0MQB4", - "originalText": "Forgejo", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "4lTu_DNrwnbxtfzzQ-TrP", - "type": "rectangle", - "x": 2851.8614552815734, - "y": 150.0791727701824, - "width": 270.3333333333332, - "height": 131.3333333333334, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a4", - "roundness": { - "type": 3 - }, - "seed": 1878985538, - "version": 718, - "versionNonce": 1152880774, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "jRpDlOWMofCm5734tHjnz" - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow" - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow" - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow" - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow" - } - ], - "updated": 1763384982445, - "link": null, - "locked": false - }, - { - "id": "jRpDlOWMofCm5734tHjnz", - "type": "text", - "x": 2865.45609283447, - "y": 193.24583943684908, - "width": 243.14405822753906, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a5", - "roundness": null, - "seed": 541086466, - "version": 722, - "versionNonce": 431984582, - "isDeleted": false, - "boundElements": [], - "updated": 1763384982445, - "link": null, - "locked": false, - "text": "Orchestration", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "4lTu_DNrwnbxtfzzQ-TrP", - "originalText": "Orchestration", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "NKe13dkM6xQgKluQErmaO", - "type": "rectangle", - "x": 2352.922922770181, - "y": 342.29168192545546, - "width": 282.0000000000003, - "height": 146.66666666666654, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a6", - "roundness": { - "type": 3 - }, - "seed": 429588062, - "version": 754, - "versionNonce": 1673658118, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "mrC_vkcrFwA1rQI_6eZzX" - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow" - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow" - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow" - } - ], - "updated": 1763391073082, - "link": null, - "locked": false - }, - { - "id": "mrC_vkcrFwA1rQI_6eZzX", - "type": "text", - "x": 2358.616877237954, - "y": 370.6250152587887, - "width": 270.6120910644531, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a7", - "roundness": null, - "seed": 1755808414, - "version": 783, - "versionNonce": 1941916678, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073082, - "link": null, - "locked": false, - "text": "Infrastructure-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "NKe13dkM6xQgKluQErmaO", - "originalText": "Infrastructure-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "layt3FacJkYmYXuCA3eqg", - "type": "rectangle", - "x": 2300.189526875812, - "y": 565.2916666666665, - "width": 280.33333333333326, - "height": 173.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a8", - "roundness": { - "type": 3 - }, - "seed": 1257673218, - "version": 744, - "versionNonce": 1792396870, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "iWgJ1CBtjV5Vl7VsUSCc8" - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow" - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow" - } - ], - "updated": 1763391080214, - "link": null, - "locked": false - }, - { - "id": "iWgJ1CBtjV5Vl7VsUSCc8", - "type": "text", - "x": 2308.956138610838, - "y": 584.4583333333331, - "width": 262.80010986328125, - "height": 135, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a9", - "roundness": null, - "seed": 672727490, - "version": 807, - "versionNonce": 1635838982, - "isDeleted": false, - "boundElements": [], - "updated": 1763391080215, - "link": null, - "locked": false, - "text": "Terraform\ninfra-deploy,\ninfra-catalogue", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "layt3FacJkYmYXuCA3eqg", - "originalText": "Terraform\ninfra-deploy, infra-catalogue", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "F_81STR9IKF2KqlGNdupb", - "type": "rectangle", - "x": 2771.1947886149073, - "y": 344.7458394368491, - "width": 243.66666666666754, - "height": 146.6666666666668, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aA", - "roundness": { - "type": 3 - }, - "seed": 2007215838, - "version": 796, - "versionNonce": 645240730, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "SjJ-eaTGplnq8O8Gqx9ok" - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow" - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow" - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow" - } - ], - "updated": 1763391064682, - "link": null, - "locked": false - }, - { - "id": "SjJ-eaTGplnq8O8Gqx9ok", - "type": "text", - "x": 2790.122100830077, - "y": 373.0791727701825, - "width": 205.81204223632812, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aB", - "roundness": null, - "seed": 1397105438, - "version": 842, - "versionNonce": 1999108762, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064682, - "link": null, - "locked": false, - "text": "Platform-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "F_81STR9IKF2KqlGNdupb", - "originalText": "Platform-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "_SA6WTuXA_hi0TaT8Y2cb", - "type": "rectangle", - "x": 2890.8614552815734, - "y": 574.4125061035156, - "width": 235.33333333333334, - "height": 143.00000000000014, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aC", - "roundness": { - "type": 3 - }, - "seed": 1529105182, - "version": 888, - "versionNonce": 1143562586, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "F7mNndoMDKgsucrJyfMaw" - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow" - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow" - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow" - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow" - } - ], - "updated": 1763391118113, - "link": null, - "locked": false - }, - { - "id": "F7mNndoMDKgsucrJyfMaw", - "type": "text", - "x": 2948.570098876951, - "y": 623.4125061035157, - "width": 119.91604614257812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aD", - "roundness": null, - "seed": 1827223390, - "version": 951, - "versionNonce": 1268730138, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "text": "Stacks", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "_SA6WTuXA_hi0TaT8Y2cb", - "originalText": "Stacks", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "8RoIcXb7xOv272dQSIUus", - "type": "rectangle", - "x": 2650.194788614907, - "y": 811.7458394368496, - "width": 233.6666666666666, - "height": 129.66666666666652, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aE", - "roundness": { - "type": 3 - }, - "seed": 2095895938, - "version": 915, - "versionNonce": 880936582, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "TXRFI99H-wPV8jJYQr3HX" - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow" - } - ], - "updated": 1763390995501, - "link": null, - "locked": false - }, - { - "id": "TXRFI99H-wPV8jJYQr3HX", - "type": "text", - "x": 2659.064086914061, - "y": 854.0791727701828, - "width": 215.92807006835938, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aF", - "roundness": null, - "seed": 1501222210, - "version": 996, - "versionNonce": 1422607814, - "isDeleted": false, - "boundElements": [], - "updated": 1763390995501, - "link": null, - "locked": false, - "text": "Component 1", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "8RoIcXb7xOv272dQSIUus", - "originalText": "Component 1", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "lkOogWCLbvj4ncEE1hva8", - "type": "arrow", - "x": 3448.1479014392758, - "y": 12.60854263833994, - "width": 326.26024839165575, - "height": 157.81544986050005, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aI", - "roundness": { - "type": 2 - }, - "seed": 1540868446, - "version": 1640, - "versionNonce": 1678092038, - "isDeleted": false, - "boundElements": [], - "updated": 1763384982446, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -326.26024839165575, - 157.81544986050005 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.28485983606564225, - "gap": 1 - }, - "endBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": 0.1519523386576579, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "bFzKsoWrxziwbSPRxWwVS", - "type": "arrow", - "x": 2842.6674388659812, - "y": 263.08798961655305, - "width": 202.79999779555055, - "height": 106.08130661261316, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aJ", - "roundness": { - "type": 2 - }, - "seed": 2005135874, - "version": 1628, - "versionNonce": 390323014, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073115, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -202.79999779555055, - 106.08130661261316 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": 0.20732912257650107, - "gap": 11.12417597375916 - }, - "endBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.2014749804163801, - "gap": 5.670835819366529 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "zbnZollP3pYTELPsUG-Xo", - "type": "arrow", - "x": 2468.7619737407026, - "y": 489.4221224367187, - "width": 20.199540611416523, - "height": 75.34198164952329, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aK", - "roundness": { - "type": 2 - }, - "seed": 223921282, - "version": 1463, - "versionNonce": 1691358598, - "isDeleted": false, - "boundElements": [], - "updated": 1763391080214, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -20.199540611416523, - 75.34198164952329 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.03153454772276274, - "gap": 1 - }, - "endBinding": { - "elementId": "layt3FacJkYmYXuCA3eqg", - "focus": -0.09286907973609843, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "a4N0-GhX7PXNPpXhJrLLe", - "type": "arrow", - "x": 3577.23363489021, - "y": 84.83362334905378, - "width": 30.87910068197698, - "height": 70.46286980778127, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aL", - "roundness": { - "type": 2 - }, - "seed": 1324012318, - "version": 1758, - "versionNonce": 483878618, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152611, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 30.87910068197698, - 70.46286980778127 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.14536315130697988, - "gap": 3.2499942476817694 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.04500219885520195, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "xtN_m9HdbobLbAV1oGEpC", - "type": "arrow", - "x": 2936.28220592564, - "y": 492.7487135612349, - "width": 41.35890088822225, - "height": 81.14243949452828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aN", - "roundness": { - "type": 2 - }, - "seed": 269450754, - "version": 1599, - "versionNonce": 1843930650, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 41.35890088822225, - 81.14243949452828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": -0.034244415659738126, - "gap": 2.5655005249741407 - }, - "endBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.03776994298778566, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "DffsfZQo3EdyDYreD651F", - "type": "arrow", - "x": 2964.5167682942715, - "y": 281.85222879409713, - "width": 21.98468917118862, - "height": 62.31825384997899, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aO", - "roundness": { - "type": 2 - }, - "seed": 583904478, - "version": 1579, - "versionNonce": 898210842, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064732, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -21.98468917118862, - 62.31825384997899 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": -0.0044550562715617165, - "gap": 1 - }, - "endBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": 0.15576156975679706, - "gap": 1.1108165692702414 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Bhuw2euYW-eTFNU9i16zc", - "type": "arrow", - "x": 2932.020304616605, - "y": 722.132905056231, - "width": 92.86372693028488, - "height": 87.72319267494106, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aP", - "roundness": { - "type": 2 - }, - "seed": 537301698, - "version": 1667, - "versionNonce": 619729626, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -92.86372693028488, - 87.72319267494106 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": -0.021599078143972487, - "gap": 8.806116783999528 - }, - "endBinding": { - "elementId": "8RoIcXb7xOv272dQSIUus", - "focus": 0.005511523490681001, - "gap": 3.821071664652436 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "OpdnLYI8J5szelucqIce1", - "type": "rectangle", - "x": 3188.528121948242, - "y": 807.4125061035154, - "width": 238.66666666666697, - "height": 126.33333333333306, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aQ", - "roundness": { - "type": 3 - }, - "seed": 2039569858, - "version": 1099, - "versionNonce": 932242202, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "4I1Olz0jRI1IrWCCpMl_6" - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow" - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow" - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow" - } - ], - "updated": 1763390991701, - "link": null, - "locked": false - }, - { - "id": "4I1Olz0jRI1IrWCCpMl_6", - "type": "text", - "x": 3196.2794240315757, - "y": 848.0791727701819, - "width": 223.1640625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aR", - "roundness": null, - "seed": 417617282, - "version": 1185, - "versionNonce": 343502810, - "isDeleted": false, - "boundElements": [], - "updated": 1763390991701, - "link": null, - "locked": false, - "text": "Component X", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "OpdnLYI8J5szelucqIce1", - "originalText": "Component X", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "9OOdwZcFnO8NfwcqvkMHD", - "type": "arrow", - "x": 3097.8152212385676, - "y": 717.8713052992143, - "width": 164.06503145121724, - "height": 89.07067600321659, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aS", - "roundness": { - "type": 2 - }, - "seed": 536559106, - "version": 1755, - "versionNonce": 1272244122, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 164.06503145121724, - 89.07067600321659 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.17347242703939872, - "gap": 1 - }, - "endBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.30491075133428747, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "MhRtWxLCedKpv3iZU6Rfx", - "type": "arrow", - "x": 3379.7138934365817, - "y": 811.1608108197398, - "width": 147.10907084991595, - "height": 518.6851927279531, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aT", - "roundness": { - "type": 2 - }, - "seed": 524561282, - "version": 1938, - "versionNonce": 24615770, - "isDeleted": false, - "boundElements": [], - "updated": 1763391711481, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 51.11894350939383, - -411.7024622276173 - ], - [ - 147.10907084991595, - -518.6851927279531 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.5069711552521924, - "gap": 3.7483047162244247 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.21913979612959741, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "kmtDycZxwwqCxwxbJ62VN", - "type": "rectangle", - "x": 3461.3614552815748, - "y": 371.57917277018214, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aU", - "roundness": { - "type": 3 - }, - "seed": 1659730626, - "version": 960, - "versionNonce": 1090785094, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ASpNMYOiBSktj9CiNGRi7" - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow" - } - ], - "updated": 1763385009911, - "link": null, - "locked": false - }, - { - "id": "ASpNMYOiBSktj9CiNGRi7", - "type": "text", - "x": 3485.3074391682935, - "y": 390.57917277018214, - "width": 144.1080322265625, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aV", - "roundness": null, - "seed": 448057986, - "version": 961, - "versionNonce": 1032730246, - "isDeleted": false, - "boundElements": [], - "updated": 1763385009911, - "link": null, - "locked": false, - "text": "Project-\nmgmt", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "kmtDycZxwwqCxwxbJ62VN", - "originalText": "Project-mgmt", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "AuV1TlXW4532KFhbJ1qOy", - "type": "rectangle", - "x": 3690.5281219482417, - "y": 364.4958394368491, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aW", - "roundness": { - "type": 3 - }, - "seed": 2043252162, - "version": 1013, - "versionNonce": 627380186, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "a5DWUJIk5eQplJNbp0otf" - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow" - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow" - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391668632, - "link": null, - "locked": false - }, - { - "id": "a5DWUJIk5eQplJNbp0otf", - "type": "text", - "x": 3720.9001007080074, - "y": 405.9958394368491, - "width": 131.25604248046875, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aX", - "roundness": null, - "seed": 1117160834, - "version": 1015, - "versionNonce": 841018310, - "isDeleted": false, - "boundElements": [], - "updated": 1763385011561, - "link": null, - "locked": false, - "text": "Actions", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "AuV1TlXW4532KFhbJ1qOy", - "originalText": "Actions", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "HGDqZbDbJ49R2jRs9GJIZ", - "type": "rectangle", - "x": 3858.7198537190734, - "y": 570.2124938964841, - "width": 188.66666666666697, - "height": 136.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aY", - "roundness": { - "type": 3 - }, - "seed": 1246374302, - "version": 1143, - "versionNonce": 1582074950, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "PmePFMsiWUJPlO2riNhKV" - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow" - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow" - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow" - } - ], - "updated": 1763385080458, - "link": null, - "locked": false - }, - { - "id": "PmePFMsiWUJPlO2riNhKV", - "type": "text", - "x": 3893.923166910806, - "y": 615.8791605631508, - "width": 118.26004028320312, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aZ", - "roundness": null, - "seed": 1758414302, - "version": 1151, - "versionNonce": 1992233862, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "text": "Runner", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "HGDqZbDbJ49R2jRs9GJIZ", - "originalText": "Runner", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "03jCrwPTuTbzVdpJni9ur", - "type": "rectangle", - "x": 3586.236333211262, - "y": 572.8291727701825, - "width": 192.00000000000003, - "height": 145, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aa", - "roundness": { - "type": 3 - }, - "seed": 586159938, - "version": 1188, - "versionNonce": 1237377286, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "qb0juwUBn201I_3S8RiT4" - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow" - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow" - } - ], - "updated": 1763384611677, - "link": null, - "locked": false - }, - { - "id": "qb0juwUBn201I_3S8RiT4", - "type": "text", - "x": 3595.2783101399727, - "y": 577.8291727701825, - "width": 173.91604614257812, - "height": 135, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ab", - "roundness": null, - "seed": 1764744962, - "version": 1211, - "versionNonce": 1112199238, - "isDeleted": false, - "boundElements": [], - "updated": 1763384611677, - "link": null, - "locked": false, - "text": "Runner-\nOrchestra\ntion", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "03jCrwPTuTbzVdpJni9ur", - "originalText": "Runner-Orchestration", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "35YnFI-q2BjED7vgPVNiH", - "type": "arrow", - "x": 3626.4145149400288, - "y": 292.6565181408057, - "width": 28.641286766907342, - "height": 78.36597963704418, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ac", - "roundness": { - "type": 2 - }, - "seed": 1611251358, - "version": 1611, - "versionNonce": 184219738, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152611, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -28.641286766907342, - 78.36597963704418 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": -0.13368249489502643, - "gap": 1.221558390886571 - }, - "endBinding": { - "elementId": "kmtDycZxwwqCxwxbJ62VN", - "focus": 0.14045563524470103, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "CwM7TPKWAvOReKBmO5JAt", - "type": "arrow", - "x": 3681.6553001844177, - "y": 292.55351294668077, - "width": 69.11222120735647, - "height": 71.32418416564747, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ad", - "roundness": { - "type": 2 - }, - "seed": 682017950, - "version": 1588, - "versionNonce": 879680794, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152612, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 69.11222120735647, - 71.32418416564747 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.0800859255357604, - "gap": 1 - }, - "endBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": 0.16974068696432618, - "gap": 1.1099916743343101 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "qSP9tR0BuFoaLIiwdNAHv", - "type": "arrow", - "x": 3749.2100601611082, - "y": 495.0046139963675, - "width": 58.5478204371293, - "height": 76.44966472549294, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ae", - "roundness": { - "type": 2 - }, - "seed": 1443786690, - "version": 1543, - "versionNonce": 1693896710, - "isDeleted": false, - "boundElements": [], - "updated": 1763385012011, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -58.5478204371293, - 76.44966472549294 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": -0.08956284844114419, - "gap": 4.455062828851851 - }, - "endBinding": { - "elementId": "03jCrwPTuTbzVdpJni9ur", - "focus": -0.31936453669195425, - "gap": 2.270603451832244 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "OLypIFGhJuPTv_5fZ1c5H", - "type": "arrow", - "x": 3846.2590342234744, - "y": 494.05094250390056, - "width": 56.900326618306735, - "height": 75.52753527137321, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "af", - "roundness": { - "type": 2 - }, - "seed": 1271403138, - "version": 1579, - "versionNonce": 1172222662, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 56.900326618306735, - 75.52753527137321 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": -0.0673988430842441, - "gap": 2.776658341000825 - }, - "endBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": 0.010660183928777166, - "gap": 1.0794208734004087 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "gacAPFdY1RyNH397B5m1U", - "type": "rectangle", - "x": 4323.889862060546, - "y": 160.99173482259135, - "width": 237.00000000000006, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ag", - "roundness": { - "type": 3 - }, - "seed": 1851075330, - "version": 1039, - "versionNonce": 1577296774, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "6eO7nuzJq274YnpWW-66w" - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow" - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow" - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow" - } - ], - "updated": 1763384969462, - "link": null, - "locked": false - }, - { - "id": "6eO7nuzJq274YnpWW-66w", - "type": "text", - "x": 4333.831832885741, - "y": 202.49173482259135, - "width": 217.11605834960938, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ah", - "roundness": null, - "seed": 1983675074, - "version": 1035, - "versionNonce": 1980842694, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969462, - "link": null, - "locked": false, - "text": "Deployments", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "gacAPFdY1RyNH397B5m1U", - "originalText": "Deployments", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "HvP_lxaks2dOd2SDvhfLI", - "type": "arrow", - "x": 3674.408467408685, - "y": 27.814129841038977, - "width": 705.4734361804935, - "height": 132.61786743910753, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ai", - "roundness": { - "type": 2 - }, - "seed": 506905730, - "version": 1670, - "versionNonce": 1370028550, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969462, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 417.18112202816474, - 58.310885417750285 - ], - [ - 705.4734361804935, - 132.61786743910753 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.13842181822847455, - "gap": 2.262001175630303 - }, - "endBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": 0.5124469690822768, - "gap": 1.170358416083019 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "qNeeLvM5XS8SbneZGVW0q", - "type": "rectangle", - "x": 4397.819864908852, - "y": 375.5458818308476, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aj", - "roundness": { - "type": 3 - }, - "seed": 57307458, - "version": 1241, - "versionNonce": 1525705370, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "M64AWjiJS8JuMU0z5fLRi" - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow" - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow" - } - ], - "updated": 1763385028394, - "link": null, - "locked": false - }, - { - "id": "M64AWjiJS8JuMU0z5fLRi", - "type": "text", - "x": 4453.2658487955705, - "y": 417.0458818308476, - "width": 81.1080322265625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ak", - "roundness": null, - "seed": 1028585730, - "version": 1238, - "versionNonce": 1098647386, - "isDeleted": false, - "boundElements": [], - "updated": 1763385028394, - "link": null, - "locked": false, - "text": "OTC", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "qNeeLvM5XS8SbneZGVW0q", - "originalText": "OTC", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "rl_lEbITjZxZu5tmsHPG-", - "type": "rectangle", - "x": 4655.891967773436, - "y": 382.53346626281404, - "width": 272, - "height": 129.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "al", - "roundness": { - "type": 3 - }, - "seed": 1155100062, - "version": 1306, - "versionNonce": 879891354, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "XKscc6NBAbjTdhnv_vYNs" - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow" - } - ], - "updated": 1763384897115, - "link": null, - "locked": false - }, - { - "id": "XKscc6NBAbjTdhnv_vYNs", - "type": "text", - "x": 4678.869926452635, - "y": 424.8667995961475, - "width": 226.04408264160156, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "am", - "roundness": null, - "seed": 1490422238, - "version": 1316, - "versionNonce": 786468954, - "isDeleted": false, - "boundElements": [], - "updated": 1763384897115, - "link": null, - "locked": false, - "text": "EdgeConnect", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "rl_lEbITjZxZu5tmsHPG-", - "originalText": "EdgeConnect", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "fWp85O5NBU84CIOiCRAVO", - "type": "rectangle", - "x": 4558.137908935542, - "y": 789.5836625925663, - "width": 385.3333333333338, - "height": 134.66666666666686, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "an", - "roundness": { - "type": 3 - }, - "seed": 261837890, - "version": 1407, - "versionNonce": 617794566, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "9SgHNFxPpzs6RDS3xTZoQ" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow" - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow" - } - ], - "updated": 1763391365258, - "link": null, - "locked": false - }, - { - "id": "9SgHNFxPpzs6RDS3xTZoQ", - "type": "text", - "x": 4588.930521647131, - "y": 834.4169959258998, - "width": 323.74810791015625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ao", - "roundness": null, - "seed": 2003532802, - "version": 1421, - "versionNonce": 1508334406, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365258, - "link": null, - "locked": false, - "text": "EdgeConnectClient", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "fWp85O5NBU84CIOiCRAVO", - "originalText": "EdgeConnectClient", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "VXKR-23IgHtvHvAOfqBJK", - "type": "arrow", - "x": 4560.789212327934, - "y": 268.93995006037903, - "width": 152.07787355595428, - "height": 113.16039305428501, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ap", - "roundness": { - "type": 2 - }, - "seed": 2109377474, - "version": 1770, - "versionNonce": 667404614, - "isDeleted": false, - "boundElements": [], - "updated": 1763384969463, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 152.07787355595428, - 113.16039305428501 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": -0.2902863001493682, - "gap": 1.289924287763078 - }, - "endBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.04104255304194183, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow", - "x": 4758.229635882192, - "y": 513.3020686103432, - "width": 3.4113431387913806, - "height": 72.34650144375053, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aq", - "roundness": { - "type": 2 - }, - "seed": 279119618, - "version": 2146, - "versionNonce": 1625801178, - "isDeleted": false, - "boundElements": [], - "updated": 1763384897116, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 3.4113431387913806, - 72.34650144375053 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.26009804332056685, - "gap": 2.519959810605087 - }, - "endBinding": { - "elementId": "uw_e9SDMZg5n02CI_rcGi", - "focus": 0.17524221808273333, - "gap": 3.792578784600437 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "oiu375_RGxk2Fye0pSHWl", - "type": "arrow", - "x": 4458.895332668404, - "y": 290.0585325478296, - "width": 10.771630603813719, - "height": 84.57976492942612, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ar", - "roundness": { - "type": 2 - }, - "seed": 1602753218, - "version": 1793, - "versionNonce": 905317402, - "isDeleted": false, - "boundElements": [], - "updated": 1763385028394, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 10.771630603813719, - 84.57976492942612 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "gacAPFdY1RyNH397B5m1U", - "focus": -0.07089903848836447, - "gap": 2.2181859611155232 - }, - "endBinding": { - "elementId": "qNeeLvM5XS8SbneZGVW0q", - "focus": -0.14829601841891402, - "gap": 1.626823150743462 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "jhFoxlSdAZtcvOozYLo9m", - "type": "rectangle", - "x": 2336.8356984456364, - "y": 814.9085730743369, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "as", - "roundness": { - "type": 3 - }, - "seed": 1405762142, - "version": 864, - "versionNonce": 724812442, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "9DUHGNzpdsbkuUUYSdxnB" - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow" - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow" - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow" - } - ], - "updated": 1763391365258, - "link": null, - "locked": false - }, - { - "id": "9DUHGNzpdsbkuUUYSdxnB", - "type": "text", - "x": 2360.2416814168278, - "y": 856.4085730743369, - "width": 145.1880340576172, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "at", - "roundness": null, - "seed": 294600350, - "version": 920, - "versionNonce": 1948779142, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365258, - "link": null, - "locked": false, - "text": "Provider", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "jhFoxlSdAZtcvOozYLo9m", - "originalText": "Provider", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "W9xzjyUSDx4oatQjQMCTa", - "type": "arrow", - "x": 2427.219138859704, - "y": 739.1525625804243, - "width": 3.0920624680015862, - "height": 75.19933550158032, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "au", - "roundness": { - "type": 2 - }, - "seed": 571565022, - "version": 1305, - "versionNonce": 1132566790, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365259, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -3.0920624680015862, - 75.19933550158032 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "layt3FacJkYmYXuCA3eqg", - "focus": 0.06491121823017398, - "gap": 1 - }, - "endBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": -0.11501899351464845, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "PsCiD7UuKAUpoL34oJV4C", - "type": "arrow", - "x": 2443.1411890515974, - "y": 947.282454654001, - "width": 2118.0065331180745, - "height": 178.43001471405125, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dotted", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b06", - "roundness": { - "type": 2 - }, - "seed": 940832450, - "version": 4187, - "versionNonce": 1851831686, - "isDeleted": false, - "boundElements": [], - "updated": 1763391629298, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 161.78173371858566, - 132.1758939381216 - ], - [ - 819.8140585168994, - 93.84256060478856 - ], - [ - 1866.8639047118318, - -24.520577218092058 - ], - [ - 2118.0065331180745, - -46.254120775929664 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": 0.42093228752165524, - "gap": 4.373881579664044 - }, - "endBinding": { - "elementId": "fWp85O5NBU84CIOiCRAVO", - "focus": -0.32972100940531696, - "gap": 2.2715512431810336 - }, - "startArrowhead": null, - "endArrowhead": null, - "elbowed": false - }, - { - "id": "X317oP4QIdCMkfQF-OHmn", - "type": "rectangle", - "x": 3944.1725565592415, - "y": 155.68767412821109, - "width": 333.66666666666663, - "height": 129.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b07", - "roundness": { - "type": 3 - }, - "seed": 151037762, - "version": 1292, - "versionNonce": 1845214470, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ta5uMdOel67C_lIjXufuD" - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow" - } - ], - "updated": 1763385152688, - "link": null, - "locked": false - }, - { - "id": "ta5uMdOel67C_lIjXufuD", - "type": "text", - "x": 3963.333847045895, - "y": 198.02100746154446, - "width": 295.3440856933594, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b08", - "roundness": null, - "seed": 1588489986, - "version": 1304, - "versionNonce": 1388981318, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152688, - "link": null, - "locked": false, - "text": "DevEnvironments", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "X317oP4QIdCMkfQF-OHmn", - "originalText": "DevEnvironments", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "DNfr5h1rXvZeS5O5BU772", - "type": "arrow", - "x": 3674.790446993681, - "y": 45.05141050313457, - "width": 305.72013926184763, - "height": 110.15641402800262, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b09", - "roundness": { - "type": 2 - }, - "seed": 121163074, - "version": 1431, - "versionNonce": 1250472838, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152688, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 305.72013926184763, - 110.15641402800262 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": 0.04839371208373105, - "gap": 2.7438709743342224 - }, - "endBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": 0.14767675739600847, - "gap": 1.310806899352201 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "rRY3HaVMSMHWyZgjxpq2v", - "type": "rectangle", - "x": 3846.291849772133, - "y": 1020.0762962304948, - "width": 272.00000000000006, - "height": 118, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0A", - "roundness": { - "type": 3 - }, - "seed": 2126920926, - "version": 1329, - "versionNonce": 1472945222, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "6gMzVcWbiqyLsPNsRGJhG" - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow" - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow" - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow" - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow" - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow" - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow" - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow" - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow" - } - ], - "updated": 1763385141322, - "link": null, - "locked": false - }, - { - "id": "6gMzVcWbiqyLsPNsRGJhG", - "type": "text", - "x": 3870.907816569008, - "y": 1056.5762962304948, - "width": 222.76806640625, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0B", - "roundness": null, - "seed": 853995806, - "version": 1350, - "versionNonce": 629639066, - "isDeleted": false, - "boundElements": [], - "updated": 1763385159713, - "link": null, - "locked": false, - "text": "PhysicalEnvs", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "rRY3HaVMSMHWyZgjxpq2v", - "originalText": "PhysicalEnvs", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ITzr29HGvJ1h4aIH-tm4Q", - "type": "arrow", - "x": 3962.2104578599938, - "y": 707.1798433510277, - "width": 4.277899742854061, - "height": 312.49528332548505, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0C", - "roundness": { - "type": 2 - }, - "seed": 1818419906, - "version": 1519, - "versionNonce": 1776911046, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141322, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -4.277899742854061, - 312.49528332548505 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": -0.10893108584966793, - "gap": 1.079420873400295 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.1840076802158442, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "IuHuUZm7W9LJpRuMzCgjb", - "type": "arrow", - "x": 3783.0026230490926, - "y": 629.7180964066447, - "width": 72.34813741045537, - "height": 0.6981674421065236, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0D", - "roundness": { - "type": 2 - }, - "seed": 2086441090, - "version": 1391, - "versionNonce": 385431878, - "isDeleted": false, - "boundElements": [], - "updated": 1763385080458, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 72.34813741045537, - 0.6981674421065236 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "03jCrwPTuTbzVdpJni9ur", - "focus": -0.2158631796542971, - "gap": 6.014496189932288 - }, - "endBinding": { - "elementId": "HGDqZbDbJ49R2jRs9GJIZ", - "focus": 0.0881504966998736, - "gap": 4.180012524406266 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "aOkWrFPJPKyv8zz8zr7ZI", - "type": "arrow", - "x": 2519.278472522735, - "y": 937.3386399061632, - "width": 1321.718322787593, - "height": 145.2287532279828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0E", - "roundness": { - "type": 2 - }, - "seed": 302844446, - "version": 2229, - "versionNonce": 1275618886, - "isDeleted": false, - "boundElements": [], - "updated": 1763391492584, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 100.64445024744782, - 77.1197086859595 - ], - [ - 797.3111169141148, - 140.45304201929264 - ], - [ - 1321.718322787593, - 145.2287532279828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "jhFoxlSdAZtcvOozYLo9m", - "focus": -0.05675655732228243, - "gap": 1 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.07931556413677532, - "gap": 5.295054461805194 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "2R1wTqnj3ubPsQMZU_PxS", - "type": "rectangle", - "x": 3621.3794352213517, - "y": 1210.959576666692, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0F", - "roundness": { - "type": 3 - }, - "seed": 2116317122, - "version": 1315, - "versionNonce": 219617734, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "b4p6Hvv4dpMpPwT-o3Ou2" - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow" - } - ], - "updated": 1763383971669, - "link": null, - "locked": false - }, - { - "id": "b4p6Hvv4dpMpPwT-o3Ou2", - "type": "text", - "x": 3656.7914148966447, - "y": 1252.459576666692, - "width": 121.17604064941406, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0G", - "roundness": null, - "seed": 2101684098, - "version": 1344, - "versionNonce": 1474031878, - "isDeleted": false, - "boundElements": [], - "updated": 1763383971669, - "link": null, - "locked": false, - "text": "Docker", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "2R1wTqnj3ubPsQMZU_PxS", - "originalText": "Docker", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "KojM_KzLAG1V7jiuobzUd", - "type": "rectangle", - "x": 4130.7793579101535, - "y": 1220.6263247135673, - "width": 228.66666666666694, - "height": 106.33333333333346, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0H", - "roundness": { - "type": 3 - }, - "seed": 1330695326, - "version": 1472, - "versionNonce": 968792154, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "sJpQ0pZRAKSruhAWeXqOH" - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow" - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow" - } - ], - "updated": 1763384145646, - "link": null, - "locked": false - }, - { - "id": "sJpQ0pZRAKSruhAWeXqOH", - "type": "text", - "x": 4149.1546681721975, - "y": 1251.292991380234, - "width": 191.91604614257812, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0I", - "roundness": null, - "seed": 2064222430, - "version": 1511, - "versionNonce": 155287194, - "isDeleted": false, - "boundElements": [], - "updated": 1763384145646, - "link": null, - "locked": false, - "text": "Kubernetes", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "KojM_KzLAG1V7jiuobzUd", - "originalText": "Kubernetes", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "zLoCSwM-U6aaxtdSILFjo", - "type": "arrow", - "x": 3913.697236173266, - "y": 1138.6225671511845, - "width": 105.92635104170358, - "height": 78.89281612144464, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0J", - "roundness": { - "type": 2 - }, - "seed": 1418783902, - "version": 1280, - "versionNonce": 848300358, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141322, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -105.92635104170358, - 78.89281612144464 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.054105302974298795, - "gap": 1.3578892127572153 - }, - "endBinding": { - "elementId": "2R1wTqnj3ubPsQMZU_PxS", - "focus": 0.07707192456052014, - "gap": 2.7629031464324063 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "aWjuRCS_Tywc_R495HtXb", - "type": "arrow", - "x": 4059.5309326323736, - "y": 1138.4774657844766, - "width": 117.3396700731978, - "height": 80.44365540828198, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0K", - "roundness": { - "type": 2 - }, - "seed": 830730910, - "version": 1414, - "versionNonce": 1334505606, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 117.3396700731978, - 80.44365540828198 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.043357881583191, - "gap": 1 - }, - "endBinding": { - "elementId": "KojM_KzLAG1V7jiuobzUd", - "focus": 0.06803604961437397, - "gap": 3.922269337634134 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "upPAv38LJEAZS_l-LkEu-", - "type": "rectangle", - "x": 3890.883728027343, - "y": 1220.7097394271086, - "width": 173.666666666667, - "height": 109.66666666666674, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0L", - "roundness": { - "type": 3 - }, - "seed": 967122882, - "version": 1401, - "versionNonce": 296403226, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "8o7YkUXTFWqjaK6FdUAoD" - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow" - } - ], - "updated": 1763384139196, - "link": null, - "locked": false - }, - { - "id": "8o7YkUXTFWqjaK6FdUAoD", - "type": "text", - "x": 3945.317052205403, - "y": 1253.043072760442, - "width": 64.80001831054688, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0M", - "roundness": null, - "seed": 1697634178, - "version": 1432, - "versionNonce": 195530202, - "isDeleted": false, - "boundElements": [], - "updated": 1763384139196, - "link": null, - "locked": false, - "text": "LXC", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "upPAv38LJEAZS_l-LkEu-", - "originalText": "LXC", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ra2CnfFkuG-gakqxTeOIy", - "type": "arrow", - "x": 3971.211301884916, - "y": 1138.4774657844766, - "width": 22.417090493436717, - "height": 77.09341378981071, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0N", - "roundness": { - "type": 2 - }, - "seed": 2034512542, - "version": 1314, - "versionNonce": 858189766, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 22.417090493436717, - 77.09341378981071 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.18603406557969024, - "gap": 1 - }, - "endBinding": { - "elementId": "upPAv38LJEAZS_l-LkEu-", - "focus": 0.331532005664942, - "gap": 9.261062959145589 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "uLoZmI9exhZHMKYhjSP-i", - "type": "arrow", - "x": 4465.685559194899, - "y": 504.7368722186192, - "width": 416.66639859664883, - "height": 513.8492916147236, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0O", - "roundness": { - "type": 2 - }, - "seed": 360002590, - "version": 1472, - "versionNonce": 427886342, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -416.66639859664883, - 513.8492916147236 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "qNeeLvM5XS8SbneZGVW0q", - "focus": -0.16751604248648713, - "gap": 2.131147600886095 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.09616785773585025, - "gap": 3.640766669647064 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "ewu_wkEI_N0QlOuQFAwot", - "type": "arrow", - "x": 4655.018816874993, - "y": 495.7977198749062, - "width": 553.8776891080634, - "height": 525.1891222998178, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0P", - "roundness": { - "type": 2 - }, - "seed": 2125809374, - "version": 1642, - "versionNonce": 857093702, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -221.76256077147536, - 181.99396205054973 - ], - [ - -553.8776891080634, - 525.1891222998178 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rl_lEbITjZxZu5tmsHPG-", - "focus": 0.3621355014904502, - "gap": 3.260200817805893 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.3243749380630405, - "gap": 1.126033152432464 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow", - "x": 4040.276578936203, - "y": 477.5521333195176, - "width": 57.974144646894274, - "height": 544.4961278689279, - "angle": 0.0633163393295888, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Q", - "roundness": { - "type": 2 - }, - "seed": 576394754, - "version": 1653, - "versionNonce": 415464838, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 37.107450986672575, - 240.52126279105897 - ], - [ - -20.8666936602217, - 544.4961278689279 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "nOSvpvwFCOMwGd2-U8NK4", - "focus": -0.22925723808690657, - "gap": 1 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.030798161473846564, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "BXRXeMn6eO7IJgm7NLwzv", - "type": "text", - "x": 2472.133514404295, - "y": -75.3570686376699, - "width": 504.36016845703125, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0R", - "roundness": null, - "seed": 1231995842, - "version": 316, - "versionNonce": 380936454, - "isDeleted": false, - "boundElements": [], - "updated": 1763383022708, - "link": null, - "locked": false, - "text": "eDF Product Structure Tree", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "eDF Product Structure Tree", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "sTl4MwlP7u0CR0h6eLvJQ", - "type": "rectangle", - "x": 4626.422922770184, - "y": 170.45834859212238, - "width": 311.9999999999998, - "height": 104.66666666666652, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0S", - "roundness": { - "type": 3 - }, - "seed": 1782051974, - "version": 1226, - "versionNonce": 501466438, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-ylDXHMB5GzSZtgYIZozG" - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow" - } - ], - "updated": 1763384736922, - "link": null, - "locked": false - }, - { - "id": "-ylDXHMB5GzSZtgYIZozG", - "type": "text", - "x": 4652.64287821452, - "y": 177.79168192545563, - "width": 259.5600891113281, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0T", - "roundness": null, - "seed": 2039706566, - "version": 1242, - "versionNonce": 285682822, - "isDeleted": false, - "boundElements": [], - "updated": 1763384736922, - "link": null, - "locked": false, - "text": "Documentation\nSystem", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "sTl4MwlP7u0CR0h6eLvJQ", - "originalText": "Documentation\nSystem", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Ed3PIiHWUxcNH9Mh-kOuU", - "type": "arrow", - "x": 3674.166532263675, - "y": -7.539423043387444, - "width": 1001.9695327207187, - "height": 177.08777153390812, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0U", - "roundness": { - "type": 2 - }, - "seed": 1405220934, - "version": 1822, - "versionNonce": 1908124614, - "isDeleted": false, - "boundElements": [], - "updated": 1763384736922, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 702.4230571731755, - 76.99777163550999 - ], - [ - 1001.9695327207187, - 177.08777153390812 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "vkEBND0A690yxuKyCwa5r", - "focus": -0.18532736315942697, - "gap": 1.9570338578978408 - }, - "endBinding": { - "elementId": "sTl4MwlP7u0CR0h6eLvJQ", - "focus": 0.16972033991295915, - "gap": 2.7752666400353974 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "bakJjzmrp7G7d2sBa5bE1", - "type": "rectangle", - "x": 3116.422922770184, - "y": 349.4583485921225, - "width": 227.00000000000048, - "height": 145.00000000000003, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0V", - "roundness": { - "type": 3 - }, - "seed": 504948806, - "version": 863, - "versionNonce": 1596722566, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "_Pg-V6Tz2Rl3fLlB6nXEi" - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow" - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow" - } - ], - "updated": 1763391068631, - "link": null, - "locked": false - }, - { - "id": "_Pg-V6Tz2Rl3fLlB6nXEi", - "type": "text", - "x": 3127.0169016520204, - "y": 376.9583485921225, - "width": 205.81204223632812, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0W", - "roundness": null, - "seed": 882896774, - "version": 927, - "versionNonce": 1251765446, - "isDeleted": false, - "boundElements": [], - "updated": 1763391068631, - "link": null, - "locked": false, - "text": "Application-\nProvisioning", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "bakJjzmrp7G7d2sBa5bE1", - "originalText": "Application-Provisioning", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "rRYwarMxk0bw-nql_bbzS", - "type": "arrow", - "x": 3111.6727479941255, - "y": 276.98888252002644, - "width": 103.18774040469634, - "height": 71.9292657941337, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0X", - "roundness": { - "type": 2 - }, - "seed": 955498202, - "version": 1684, - "versionNonce": 74324614, - "isDeleted": false, - "boundElements": [], - "updated": 1763391068698, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 103.18774040469634, - 71.9292657941337 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "4lTu_DNrwnbxtfzzQ-TrP", - "focus": -0.15928775176009108, - "gap": 1.3116249354053713 - }, - "endBinding": { - "elementId": "bakJjzmrp7G7d2sBa5bE1", - "focus": 0.41080086918406883, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "GQcnY9zMohoK_v73jNmE0", - "type": "rectangle", - "x": 3160.5895894368514, - "y": 581.2916819254557, - "width": 196.99999999999986, - "height": 124.66666666666681, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Y", - "roundness": { - "type": 3 - }, - "seed": 530011866, - "version": 932, - "versionNonce": 1572672858, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "i41b16DABLTr-sgwa2oJx" - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow" - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow" - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391150317, - "link": null, - "locked": false - }, - { - "id": "i41b16DABLTr-sgwa2oJx", - "type": "text", - "x": 3202.497556050621, - "y": 621.1250152587891, - "width": 113.18406677246094, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Z", - "roundness": null, - "seed": 1660644250, - "version": 998, - "versionNonce": 1689711066, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110163, - "link": null, - "locked": false, - "text": "CI/CD", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GQcnY9zMohoK_v73jNmE0", - "originalText": "CI/CD", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "1z4ZshL3doX_LVv14PQd5", - "type": "rectangle", - "x": 2913.089589436851, - "y": 807.9583485921227, - "width": 238.66666666666697, - "height": 123.00000000000003, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0a", - "roundness": { - "type": 3 - }, - "seed": 1049767302, - "version": 1113, - "versionNonce": 346918790, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-fj92HOz7DaeDVXUB1ec8" - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow" - } - ], - "updated": 1763390993635, - "link": null, - "locked": false - }, - { - "id": "-fj92HOz7DaeDVXUB1ec8", - "type": "text", - "x": 2919.544886271161, - "y": 846.9583485921227, - "width": 225.75607299804688, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0b", - "roundness": null, - "seed": 406752454, - "version": 1200, - "versionNonce": 412987078, - "isDeleted": false, - "boundElements": [], - "updated": 1763390993635, - "link": null, - "locked": false, - "text": "Component 2", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "1z4ZshL3doX_LVv14PQd5", - "originalText": "Component 2", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Eo2LC08bZTyqHZ_pAvf1c", - "type": "arrow", - "x": 3014.9546496983894, - "y": 719.5858048088286, - "width": 10.084360685561023, - "height": 86.78634400800888, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0c", - "roundness": { - "type": 2 - }, - "seed": 1405611994, - "version": 1768, - "versionNonce": 2059986010, - "isDeleted": false, - "boundElements": [], - "updated": 1763391118113, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 10.084360685561023, - 86.78634400800888 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "_SA6WTuXA_hi0TaT8Y2cb", - "focus": 0.016951854546525768, - "gap": 4.119957231626131 - }, - "endBinding": { - "elementId": "1z4ZshL3doX_LVv14PQd5", - "focus": -0.00007194541412355224, - "gap": 3.3933770804029564 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "f3GA0aaVLJtRbObBOfoLx", - "type": "arrow", - "x": 3240.366734040912, - "y": 496.4976753137354, - "width": 11.95393262985317, - "height": 82.10073781213828, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0d", - "roundness": { - "type": 2 - }, - "seed": 2111838554, - "version": 1745, - "versionNonce": 930064026, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110163, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 11.95393262985317, - 82.10073781213828 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "bakJjzmrp7G7d2sBa5bE1", - "focus": 0.012131730411546674, - "gap": 3.740781409685951 - }, - "endBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.020775065079411466, - "gap": 4.939956252930415 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "6a4IhhXjxMI4h9w65P5eW", - "type": "arrow", - "x": 3330.7592086354553, - "y": 580.8584663690883, - "width": 167.3425940593247, - "height": 313.72241070957364, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0e", - "roundness": { - "type": 2 - }, - "seed": 1751843014, - "version": 2045, - "versionNonce": 2005412314, - "isDeleted": false, - "boundElements": [], - "updated": 1763391152612, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 64.1637141347278, - -209.73345111029903 - ], - [ - 167.3425940593247, - -313.72241070957364 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.4462706193445063, - "gap": 1 - }, - "endBinding": { - "elementId": "t0TPl7T0HbrKo0OK0MQB4", - "focus": 0.44942698855441565, - "gap": 1.1905686018336108 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Few8zOmHv71iXvDfoexhc", - "type": "arrow", - "x": 3279.0249240152916, - "y": 707.7974287724307, - "width": 31.146088471095027, - "height": 99.14455253000006, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0f", - "roundness": { - "type": 2 - }, - "seed": 506957338, - "version": 2010, - "versionNonce": 819349530, - "isDeleted": false, - "boundElements": [], - "updated": 1763391110164, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 31.146088471095027, - 99.14455253000006 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "GQcnY9zMohoK_v73jNmE0", - "focus": 0.004268442309165779, - "gap": 3.3927500565346236 - }, - "endBinding": { - "elementId": "OpdnLYI8J5szelucqIce1", - "focus": 0.1555692552487658, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "iyrKGKzHkFAHUCEepXNCP", - "type": "rectangle", - "x": 4154.7562561035165, - "y": 1400.958348592122, - "width": 188.66666666666703, - "height": 83.33333333333326, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0g", - "roundness": { - "type": 3 - }, - "seed": 1043629594, - "version": 1525, - "versionNonce": 1733889734, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "0VtVc_LsUgaakcwYELAIv" - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow" - } - ], - "updated": 1763384122279, - "link": null, - "locked": false - }, - { - "id": "0VtVc_LsUgaakcwYELAIv", - "type": "text", - "x": 4171.077573140463, - "y": 1420.1250152587886, - "width": 156.02403259277344, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0h", - "roundness": null, - "seed": 1823519450, - "version": 1567, - "versionNonce": 1612137990, - "isDeleted": false, - "boundElements": [], - "updated": 1763384122279, - "link": null, - "locked": false, - "text": "Operator", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "iyrKGKzHkFAHUCEepXNCP", - "originalText": "Operator", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ZYIe0A8Pa_WkIT4gVML9E", - "type": "arrow", - "x": 4251.370249081578, - "y": 1327.3847620453423, - "width": 1.8102403392640554, - "height": 72.2936218846628, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0i", - "roundness": { - "type": 2 - }, - "seed": 1331934342, - "version": 1479, - "versionNonce": 1105447386, - "isDeleted": false, - "boundElements": [], - "updated": 1763384145646, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 1.8102403392640554, - 72.2936218846628 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "KojM_KzLAG1V7jiuobzUd", - "focus": -0.042434316865628915, - "gap": 1 - }, - "endBinding": { - "elementId": "iyrKGKzHkFAHUCEepXNCP", - "focus": 0.05407803750606913, - "gap": 3.066797992077454 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "GE2ntK1-Y0o1hS7Vo9-zm", - "type": "rectangle", - "x": 3388.9229227701835, - "y": 1210.458348592123, - "width": 192.00000000000003, - "height": 128, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0j", - "roundness": { - "type": 3 - }, - "seed": 188493978, - "version": 1357, - "versionNonce": 1640059738, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-X_vMrljPS5ULaklilxhx" - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow" - } - ], - "updated": 1763384929590, - "link": null, - "locked": false - }, - { - "id": "-X_vMrljPS5ULaklilxhx", - "type": "text", - "x": 3460.4789148966483, - "y": 1251.958348592123, - "width": 48.88801574707031, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0k", - "roundness": null, - "seed": 1079971162, - "version": 1387, - "versionNonce": 861747930, - "isDeleted": false, - "boundElements": [], - "updated": 1763383979514, - "link": null, - "locked": false, - "text": "VM", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GE2ntK1-Y0o1hS7Vo9-zm", - "originalText": "VM", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "uw_e9SDMZg5n02CI_rcGi", - "type": "rectangle", - "x": 4585.5895894368505, - "y": 587.1250152587893, - "width": 305.3333333333338, - "height": 124.66666666666686, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0l", - "roundness": { - "type": 3 - }, - "seed": 602888282, - "version": 1506, - "versionNonce": 996004742, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "2znQQlyW0T8QSBRjognw4" - }, - { - "id": "AwhH7M8t1q6KeZgpF4XnY", - "type": "arrow" - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow" - } - ], - "updated": 1763384560453, - "link": null, - "locked": false - }, - { - "id": "2znQQlyW0T8QSBRjognw4", - "type": "text", - "x": 4618.03421020508, - "y": 604.4583485921227, - "width": 240.444091796875, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0m", - "roundness": null, - "seed": 1876376858, - "version": 1523, - "versionNonce": 1933076486, - "isDeleted": false, - "boundElements": [], - "updated": 1763384545979, - "link": null, - "locked": false, - "text": "EdgeConnect \nSDK", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "uw_e9SDMZg5n02CI_rcGi", - "originalText": "EdgeConnect \nSDK", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "FxyBjbU6oLIrTe1vA6Wat", - "type": "arrow", - "x": 4742.051466806003, - "y": 713.4471437591372, - "width": 5.8909444903556505, - "height": 75.80378361758562, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0n", - "roundness": { - "type": 2 - }, - "seed": 2009573594, - "version": 2150, - "versionNonce": 1144246490, - "isDeleted": false, - "boundElements": [], - "updated": 1763391365259, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 5.8909444903556505, - 75.80378361758562 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "uw_e9SDMZg5n02CI_rcGi", - "focus": 0.007476026682284668, - "gap": 4.238474561391172 - }, - "endBinding": { - "elementId": "fWp85O5NBU84CIOiCRAVO", - "focus": 0.012109051562514402, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "nOSvpvwFCOMwGd2-U8NK4", - "type": "rectangle", - "x": 3933.922922770184, - "y": 377.1250152587893, - "width": 192.00000000000003, - "height": 100, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0o", - "roundness": { - "type": 3 - }, - "seed": 626832582, - "version": 1088, - "versionNonce": 1823240666, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "ZPMRObXGtXaQKfmBJJ-KQ" - }, - { - "id": "BTLJNPaKn9k-WNIbpNd0k", - "type": "arrow" - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow" - } - ], - "updated": 1763385040095, - "link": null, - "locked": false - }, - { - "id": "ZPMRObXGtXaQKfmBJJ-KQ", - "type": "text", - "x": 3985.8589045206722, - "y": 404.6250152587893, - "width": 88.12803649902344, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0p", - "roundness": null, - "seed": 716581894, - "version": 1136, - "versionNonce": 1860531270, - "isDeleted": false, - "boundElements": [], - "updated": 1763385014061, - "link": null, - "locked": false, - "text": "Local", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "nOSvpvwFCOMwGd2-U8NK4", - "originalText": "Local", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Q4aPE3RbERqqTQCSpoSFt", - "type": "rectangle", - "x": 4160.58958943685, - "y": 364.45834859212255, - "width": 213.66666666666706, - "height": 145, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0q", - "roundness": { - "type": 3 - }, - "seed": 109548870, - "version": 1201, - "versionNonce": 1322127642, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "iQ_kNDvjt10ji9Rskw65i" - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow" - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow" - } - ], - "updated": 1763385064503, - "link": null, - "locked": false - }, - { - "id": "iQ_kNDvjt10ji9Rskw65i", - "type": "text", - "x": 4170.510889689129, - "y": 391.95834859212255, - "width": 193.82406616210938, - "height": 90, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0r", - "roundness": null, - "seed": 1420885126, - "version": 1201, - "versionNonce": 207114266, - "isDeleted": false, - "boundElements": [], - "updated": 1763385026627, - "link": null, - "locked": false, - "text": "Docker\nRemoteEnv", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Q4aPE3RbERqqTQCSpoSFt", - "originalText": "Docker\nRemoteEnv", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "we6HVdaRQ2_30cgo_gGUE", - "type": "arrow", - "x": 3852.174174884919, - "y": 1130.5023219437203, - "width": 289.33518309975443, - "height": 81.10957567525247, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0s", - "roundness": { - "type": 2 - }, - "seed": 1751588122, - "version": 1363, - "versionNonce": 1069931718, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -289.33518309975443, - 81.10957567525247 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": -0.1539472108942291, - "gap": 1 - }, - "endBinding": { - "elementId": "GE2ntK1-Y0o1hS7Vo9-zm", - "focus": -0.4546954019374654, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "-g0IjFN-WFXq9V-ETpJB7", - "type": "arrow", - "x": 4101.64589585709, - "y": 286.89444145496736, - "width": 49.65898007325768, - "height": 89.29117630522018, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0t", - "roundness": { - "type": 2 - }, - "seed": 579481370, - "version": 1636, - "versionNonce": 796152518, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152689, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -49.65898007325768, - 89.29117630522018 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": -0.13514163598325443, - "gap": 4.117292779330398 - }, - "endBinding": { - "elementId": "nOSvpvwFCOMwGd2-U8NK4", - "focus": -0.05543597463883624, - "gap": 2.0041358143996035 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "loerItqer0HSwXUpB9cF7", - "type": "arrow", - "x": 4192.801280649863, - "y": 289.5785332244855, - "width": 68.75839879773957, - "height": 74.31659743616035, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0u", - "roundness": { - "type": 2 - }, - "seed": 1171775110, - "version": 1647, - "versionNonce": 204081670, - "isDeleted": false, - "boundElements": [], - "updated": 1763385152689, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 68.75839879773957, - 74.31659743616035 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "X317oP4QIdCMkfQF-OHmn", - "focus": -0.08031868402593013, - "gap": 10.783959445996913 - }, - "endBinding": { - "elementId": "Q4aPE3RbERqqTQCSpoSFt", - "focus": 0.3526253866400684, - "gap": 1 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "j5CwusOfOj3sDuV4ryd0L", - "type": "arrow", - "x": 4266.321864921288, - "y": 511.89374589955844, - "width": 235.22137323132665, - "height": 504.2931782805525, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0v", - "roundness": { - "type": 2 - }, - "seed": 1801718682, - "version": 1598, - "versionNonce": 1840927750, - "isDeleted": false, - "boundElements": [], - "updated": 1763385141323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -235.22137323132665, - 504.2931782805525 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "Q4aPE3RbERqqTQCSpoSFt", - "focus": -0.24131022543848235, - "gap": 4.283960062282063 - }, - "endBinding": { - "elementId": "rRY3HaVMSMHWyZgjxpq2v", - "focus": 0.11909908658082793, - "gap": 9.151362628033098 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "Z6xCNDUhdW5ZX0Y2ECV9n", - "type": "rectangle", - "x": 2613.9229227701835, - "y": 574.6250152587894, - "width": 238.66666666666683, - "height": 149.66666666666677, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0w", - "roundness": { - "type": 3 - }, - "seed": 775996294, - "version": 995, - "versionNonce": 587875334, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "VnDwUbLeVmXrmKoXyW4jE" - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow" - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow" - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow" - } - ], - "updated": 1763391161789, - "link": null, - "locked": false - }, - { - "id": "VnDwUbLeVmXrmKoXyW4jE", - "type": "text", - "x": 2659.618247985841, - "y": 626.9583485921228, - "width": 147.27601623535156, - "height": 45, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0wV", - "roundness": null, - "seed": 1052760026, - "version": 15, - "versionNonce": 1375590170, - "isDeleted": false, - "boundElements": null, - "updated": 1763390965217, - "link": null, - "locked": false, - "text": "Pipelines", - "fontSize": 36, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "originalText": "Pipelines", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "b58DD6x3YdYB3N2noILhL", - "type": "arrow", - "x": 2859.046465894031, - "y": 491.9302417078348, - "width": 119.31538317259992, - "height": 81.60007621041206, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0y", - "roundness": { - "type": 2 - }, - "seed": 800611098, - "version": 1672, - "versionNonce": 619907290, - "isDeleted": false, - "boundElements": [], - "updated": 1763391064732, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -119.31538317259992, - 81.60007621041206 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "F_81STR9IKF2KqlGNdupb", - "focus": -0.3213784454702341, - "gap": 1 - }, - "endBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": -0.4576682084095265, - "gap": 2.0458557674033955 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "KWgEAQqxr3S9KhRWsmBV2", - "type": "arrow", - "x": 2570.760109010224, - "y": 489.4221224367187, - "width": 88.84700729503857, - "height": 83.61734694484142, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0z", - "roundness": { - "type": 2 - }, - "seed": 331115738, - "version": 1635, - "versionNonce": 378421702, - "isDeleted": false, - "boundElements": [], - "updated": 1763391073115, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 88.84700729503857, - 83.61734694484142 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "NKe13dkM6xQgKluQErmaO", - "focus": 0.006894475977603966, - "gap": 1 - }, - "endBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": 0.03900456492483074, - "gap": 2.954144232596036 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - }, - { - "id": "df09G6vYHr0eiQitHZcBm", - "type": "arrow", - "x": 2848.6028438322037, - "y": 576.019857228893, - "width": 850.3448277694256, - "height": 257.70910885318995, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b11", - "roundness": { - "type": 2 - }, - "seed": 1611589466, - "version": 2783, - "versionNonce": 1458828506, - "isDeleted": false, - "boundElements": [], - "updated": 1763391694545, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 36.320078937979815, - -34.8948419701037 - ], - [ - 204.65341227131285, - -56.56150863677044 - ], - [ - 224.65341227131285, - -233.22817530343718 - ], - [ - 396.8247546258358, - -257.70910885318995 - ], - [ - 772.9867456046463, - -251.56150863677044 - ], - [ - 850.3448277694256, - -208.71149598545628 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "Z6xCNDUhdW5ZX0Y2ECV9n", - "focus": 0.19728207817783538, - "gap": 7.564016222660115 - }, - "endBinding": { - "elementId": "AuV1TlXW4532KFhbJ1qOy", - "focus": 0.10817150001893147, - "gap": 3.6705406157783296 - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": false - } - ], - "appState": { - "gridSize": 20, - "gridStep": 5, - "gridModeEnabled": false, - "viewBackgroundColor": "#ffffff" - }, - "files": {} -} \ No newline at end of file diff --git a/scripts/generate-build-info.sh b/scripts/generate-build-info.sh deleted file mode 100755 index a10e2c2..0000000 --- a/scripts/generate-build-info.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -# Generate build information for Hugo -# This script collects git information and build metadata - -set -euo pipefail - -# Create data directory if it doesn't exist -mkdir -p data - -# Get git information -GIT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown") -GIT_COMMIT_SHORT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") -GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") -GIT_TAG=$(git describe --tags --exact-match 2>/dev/null || echo "") -GIT_DIRTY="" - -# Check if working directory is dirty -if git diff-index --quiet HEAD -- 2>/dev/null; then - GIT_DIRTY="false" -else - GIT_DIRTY="true" -fi - -# Get build information -BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") -BUILD_TIME_HUMAN=$(date -u +"%Y-%m-%d %H:%M UTC") -BUILD_USER=$(whoami 2>/dev/null || echo "unknown") -BUILD_HOST=$(hostname 2>/dev/null || echo "unknown") - -# Create JSON file for Hugo -cat > data/build_info.json << EOF -{ - "git_commit": "${GIT_COMMIT}", - "git_commit_short": "${GIT_COMMIT_SHORT}", - "git_branch": "${GIT_BRANCH}", - "git_tag": "${GIT_TAG}", - "git_dirty": ${GIT_DIRTY}, - "build_time": "${BUILD_TIME}", - "build_time_human": "${BUILD_TIME_HUMAN}", - "build_user": "${BUILD_USER}", - "build_host": "${BUILD_HOST}" -} -EOF - -echo "✓ Build info generated: data/build_info.json" -echo " Git: ${GIT_BRANCH}@${GIT_COMMIT_SHORT}${GIT_TAG:+ (${GIT_TAG})}" -echo " Built: ${BUILD_TIME_HUMAN} by ${BUILD_USER}" \ No newline at end of file diff --git a/scripts/get-versions.sh b/scripts/get-versions.sh deleted file mode 100755 index cc90f56..0000000 --- a/scripts/get-versions.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Load versions from .env.versions for Docker build -# Usage: source scripts/get-versions.sh - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -VERSIONS_FILE="${SCRIPT_DIR}/../.env.versions" - -if [ ! -f "$VERSIONS_FILE" ]; then - echo "Error: .env.versions not found at $VERSIONS_FILE" - exit 1 -fi - -# Load versions -set -a -source "$VERSIONS_FILE" -set +a - -echo "Loaded versions from .env.versions:" -echo " NODE_VERSION=${NODE_VERSION}" -echo " GO_VERSION=${GO_VERSION}" -echo " HUGO_VERSION=${HUGO_VERSION}" -echo "" -echo "Build Docker image with:" -echo " docker build --network=host \\" -echo " --build-arg NODE_VERSION=${NODE_VERSION} \\" -echo " --build-arg GO_VERSION=${GO_VERSION} \\" -echo " --build-arg HUGO_VERSION=${HUGO_VERSION} \\" -echo " -t ipceicis-developerframework:latest ." diff --git a/static/TeleNeoOffice-Bold.a7bb592b.ttf b/static/TeleNeoOffice-Bold.a7bb592b.ttf deleted file mode 120000 index 2099746..0000000 --- a/static/TeleNeoOffice-Bold.a7bb592b.ttf +++ /dev/null @@ -1 +0,0 @@ -fonts/TeleNeoOffice-Bold.a7bb592b.ttf \ No newline at end of file diff --git a/static/TeleNeoOffice-ExtraBold.fbe9fe42.ttf b/static/TeleNeoOffice-ExtraBold.fbe9fe42.ttf deleted file mode 120000 index 95eb627..0000000 --- a/static/TeleNeoOffice-ExtraBold.fbe9fe42.ttf +++ /dev/null @@ -1 +0,0 @@ -fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf \ No newline at end of file diff --git a/static/TeleNeoOffice-Medium.79fb426d.ttf b/static/TeleNeoOffice-Medium.79fb426d.ttf deleted file mode 120000 index 5531d58..0000000 --- a/static/TeleNeoOffice-Medium.79fb426d.ttf +++ /dev/null @@ -1 +0,0 @@ -fonts/TeleNeoOffice-Medium.79fb426d.ttf \ No newline at end of file diff --git a/static/TeleNeoOffice-Regular.b0a2cff1.ttf b/static/TeleNeoOffice-Regular.b0a2cff1.ttf deleted file mode 120000 index dcd4564..0000000 --- a/static/TeleNeoOffice-Regular.b0a2cff1.ttf +++ /dev/null @@ -1 +0,0 @@ -fonts/TeleNeoOffice-Regular.b0a2cff1.ttf \ No newline at end of file diff --git a/static/TeleNeoOffice-Thin.53627df9.ttf b/static/TeleNeoOffice-Thin.53627df9.ttf deleted file mode 120000 index 717239f..0000000 --- a/static/TeleNeoOffice-Thin.53627df9.ttf +++ /dev/null @@ -1 +0,0 @@ -fonts/TeleNeoOffice-Thin.53627df9.ttf \ No newline at end of file diff --git a/static/css/likec4-styles.css b/static/css/likec4-styles.css deleted file mode 100644 index 0f90974..0000000 --- a/static/css/likec4-styles.css +++ /dev/null @@ -1,70 +0,0 @@ -/* LikeC4 Component Styles for Hugo/Docsy */ -likec4-view { - display: block; - width: 100%; - height: 100%; - border: none; -} - -.likec4-container { - width: 100%; - height: 600px; - border: 1px solid #ddd; - border-radius: 4px; - background: #f9f9f9; - position: relative; - overflow: hidden; - margin: 2rem 0; -} - -.likec4-loading { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - color: #666; - font-size: 14px; - font-family: system-ui, sans-serif; -} - -.likec4-loading::after { - content: ''; - display: inline-block; - width: 12px; - height: 12px; - margin-left: 8px; - border: 2px solid #dee2e6; - border-top: 2px solid #007bff; - border-radius: 50%; - animation: likec4-spin 1s linear infinite; -} - -@keyframes likec4-spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -.likec4-header { - background: #f8f9fa; - border-bottom: 1px solid #e9ecef; - padding: 8px 16px; - font-size: 12px; - color: #495057; - border-radius: 4px 4px 0 0; -} - -/* Dark mode support for Docsy */ -body[data-dark-mode] .likec4-container { - background: #1e1e1e; - border-color: #444; -} - -body[data-dark-mode] .likec4-header { - background: #2d2d2d; - border-bottom-color: #444; - color: #ccc; -} - -body[data-dark-mode] .likec4-loading { - color: #ccc; -} diff --git a/static/css/version-info.css b/static/css/version-info.css deleted file mode 100644 index 89c7631..0000000 --- a/static/css/version-info.css +++ /dev/null @@ -1,36 +0,0 @@ -/* Navbar version info styles */ -.navbar-version-info { - flex: 1; - justify-content: center; - font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace; -} - -.navbar-version-info code { - background: rgba(255, 255, 255, 0.1); - padding: 0.1rem 0.3rem; - border-radius: 0.2rem; - font-size: 0.8rem; -} - -.navbar-version-info .badge { - font-size: 0.6rem; - padding: 0.1rem 0.3rem; -} - -/* Hide on small screens */ -@media (max-width: 767px) { - .navbar-version-info { - display: none !important; - } -} - -/* Additional responsive tweaks */ -@media (min-width: 768px) and (max-width: 991px) { - .navbar-version-info { - flex: 0.5; - } - - .navbar-version-info small { - font-size: 0.75rem; - } -} \ No newline at end of file diff --git a/static/fonts/TeleNeoOffice-Bold.a7bb592b.ttf b/static/fonts/TeleNeoOffice-Bold.a7bb592b.ttf deleted file mode 100644 index 88d13e1..0000000 Binary files a/static/fonts/TeleNeoOffice-Bold.a7bb592b.ttf and /dev/null differ diff --git a/static/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf b/static/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf deleted file mode 100644 index 158ffc8..0000000 Binary files a/static/fonts/TeleNeoOffice-ExtraBold.fbe9fe42.ttf and /dev/null differ diff --git a/static/fonts/TeleNeoOffice-Medium.79fb426d.ttf b/static/fonts/TeleNeoOffice-Medium.79fb426d.ttf deleted file mode 100644 index 6ceef93..0000000 Binary files a/static/fonts/TeleNeoOffice-Medium.79fb426d.ttf and /dev/null differ diff --git a/static/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf b/static/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf deleted file mode 100644 index 672a9b8..0000000 Binary files a/static/fonts/TeleNeoOffice-Regular.b0a2cff1.ttf and /dev/null differ diff --git a/static/fonts/TeleNeoOffice-Thin.53627df9.ttf b/static/fonts/TeleNeoOffice-Thin.53627df9.ttf deleted file mode 100644 index edeb0d9..0000000 Binary files a/static/fonts/TeleNeoOffice-Thin.53627df9.ttf and /dev/null differ diff --git a/static/js/likec4-loader.js b/static/js/likec4-loader.js deleted file mode 100644 index f165e99..0000000 --- a/static/js/likec4-loader.js +++ /dev/null @@ -1,86 +0,0 @@ -/* LikeC4 Webcomponent Loader for Hugo/Docsy */ -(function() { - 'use strict'; - - // Check if the component is already loaded - if (customElements.get('likec4-view')) { - console.log('LikeC4 component already loaded'); - return; - } - - // Function to dynamically import the ES6 module - function loadLikeC4Module() { - // Try different possible paths for the webcomponent - const possiblePaths = [ - // Absolute Hugo paths (most likely to work) - '/js/likec4-webcomponent.js', - // Relative paths from current page - '../js/likec4-webcomponent.js', - '../../js/likec4-webcomponent.js', - '../../../js/likec4-webcomponent.js', - // Fallback paths - './js/likec4-webcomponent.js', - 'js/likec4-webcomponent.js' - ]; - - let pathIndex = 0; - - function tryNextPath() { - if (pathIndex >= possiblePaths.length) { - console.error('All module paths failed'); - showErrorMessage('Failed to load interactive diagram module'); - return; - } - - const modulePath = possiblePaths[pathIndex]; - console.log(`Trying to load LikeC4 module from: ${modulePath}`); - - // Dynamic import with error handling - try { - const importFunction = new Function('specifier', 'return import(specifier)'); - importFunction(modulePath) - .then(function(module) { - console.log('LikeC4 webcomponent loaded successfully'); - // Hide any loading indicators - hideLoadingIndicators(); - }) - .catch(function(error) { - console.warn(`Failed to load from ${modulePath}:`, error.message); - pathIndex++; - tryNextPath(); - }); - } catch (error) { - console.warn(`Dynamic import failed for ${modulePath}:`, error.message); - pathIndex++; - tryNextPath(); - } - } - - tryNextPath(); - } - - function hideLoadingIndicators() { - const loadingElements = document.querySelectorAll('.likec4-loading, #likec4-loading'); - loadingElements.forEach(function(el) { - el.style.display = 'none'; - }); - } - - function showErrorMessage(message) { - const containers = document.querySelectorAll('.likec4-container'); - containers.forEach(function(container) { - const errorDiv = document.createElement('div'); - errorDiv.style.cssText = 'position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #dc3545; text-align: center; font-size: 14px; max-width: 300px;'; - errorDiv.textContent = message; - container.appendChild(errorDiv); - }); - hideLoadingIndicators(); - } - - // Check if DOM is ready - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', loadLikeC4Module); - } else { - loadLikeC4Module(); - } -})(); diff --git a/static/js/likec4-webcomponent.js b/static/js/likec4-webcomponent.js deleted file mode 100644 index a22f2f3..0000000 --- a/static/js/likec4-webcomponent.js +++ /dev/null @@ -1,405 +0,0 @@ -var LikeC4Views=(function(Y6){"use strict";/* prettier-ignore-start */ -/* eslint-disable */ - -/****************************************************************************** - * This file was generated - * DO NOT EDIT MANUALLY! - ******************************************************************************/ - - -function Lme(e,r){for(var n=0;no[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}function LM(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var X6={exports:{}},Xm={};var FM;function Fme(){if(FM)return Xm;FM=1;var e=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function n(o,i,a){var l=null;if(a!==void 0&&(l=""+a),i.key!==void 0&&(l=""+i.key),"key"in i){a={};for(var s in i)s!=="key"&&(a[s]=i[s])}else a=i;return i=a.ref,{$$typeof:e,type:o,key:l,ref:i!==void 0?i:null,props:a}}return Xm.Fragment=r,Xm.jsx=n,Xm.jsxs=n,Xm}var VM;function Vme(){return VM||(VM=1,X6.exports=Fme()),X6.exports}var y=Vme(),K6={exports:{}},$t={};var qM;function qme(){if(qM)return $t;qM=1;var e=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),l=Symbol.for("react.context"),s=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),u=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),f=Symbol.iterator;function m(Y){return Y===null||typeof Y!="object"?null:(Y=f&&Y[f]||Y["@@iterator"],typeof Y=="function"?Y:null)}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,x={};function k(Y,K,O){this.props=Y,this.context=K,this.refs=x,this.updater=O||v}k.prototype.isReactComponent={},k.prototype.setState=function(Y,K){if(typeof Y!="object"&&typeof Y!="function"&&Y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,Y,K,"setState")},k.prototype.forceUpdate=function(Y){this.updater.enqueueForceUpdate(this,Y,"forceUpdate")};function C(){}C.prototype=k.prototype;function _(Y,K,O){this.props=Y,this.context=K,this.refs=x,this.updater=O||v}var $=_.prototype=new C;$.constructor=_,w($,k.prototype),$.isPureReactComponent=!0;var R=Array.isArray;function T(){}var A={H:null,A:null,T:null,S:null},z=Object.prototype.hasOwnProperty;function j(Y,K,O){var W=O.ref;return{$$typeof:e,type:Y,key:K,ref:W!==void 0?W:null,props:O}}function I(Y,K){return j(Y.type,K,Y.props)}function N(Y){return typeof Y=="object"&&Y!==null&&Y.$$typeof===e}function L(Y){var K={"=":"=0",":":"=2"};return"$"+Y.replace(/[=:]/g,function(O){return K[O]})}var H=/\/+/g;function P(Y,K){return typeof Y=="object"&&Y!==null&&Y.key!=null?L(""+Y.key):K.toString(36)}function V(Y){switch(Y.status){case"fulfilled":return Y.value;case"rejected":throw Y.reason;default:switch(typeof Y.status=="string"?Y.then(T,T):(Y.status="pending",Y.then(function(K){Y.status==="pending"&&(Y.status="fulfilled",Y.value=K)},function(K){Y.status==="pending"&&(Y.status="rejected",Y.reason=K)})),Y.status){case"fulfilled":return Y.value;case"rejected":throw Y.reason}}throw Y}function B(Y,K,O,W,Z){var Q=typeof Y;(Q==="undefined"||Q==="boolean")&&(Y=null);var ie=!1;if(Y===null)ie=!0;else switch(Q){case"bigint":case"string":case"number":ie=!0;break;case"object":switch(Y.$$typeof){case e:case r:ie=!0;break;case u:return ie=Y._init,B(ie(Y._payload),K,O,W,Z)}}if(ie)return Z=Z(Y),ie=W===""?"."+P(Y,0):W,R(Z)?(O="",ie!=null&&(O=ie.replace(H,"$&/")+"/"),B(Z,K,O,"",function(ue){return ue})):Z!=null&&(N(Z)&&(Z=I(Z,O+(Z.key==null||Y&&Y.key===Z.key?"":(""+Z.key).replace(H,"$&/")+"/")+ie)),K.push(Z)),1;ie=0;var te=W===""?".":W+":";if(R(Y))for(var re=0;re"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(r){console.error(r)}}return e(),Q6.exports=Hme(),Q6.exports}var Va=GM();const YM=LM(Va);function ar(e,r,n){const o=typeof r=="symbol"?r:Symbol.for(r);return e.hasOwnProperty(o)||Object.defineProperty(e,o,{enumerable:!1,writable:!1,value:n()}),e[o]}function J6(e){if(e===null||typeof e!="object")return!1;const r=Object.getPrototypeOf(e);return r!==null&&r!==Object.prototype&&Object.getPrototypeOf(r)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function e_(e,r,n=".",o){if(!J6(r))return e_(e,{},n);const i=Object.assign({},r);for(const a in e){if(a==="__proto__"||a==="constructor")continue;const l=e[a];l!=null&&(Array.isArray(l)&&Array.isArray(i[a])?i[a]=[...l,...i[a]]:J6(l)&&J6(i[a])?i[a]=e_(l,i[a],(n?`${n}.`:"")+a.toString()):i[a]=l)}return i}function Ume(e){return(...r)=>r.reduce((n,o)=>e_(n,o,""),{})}const XM=Ume();function Wme(e,r,n){let o=i=>e(i,...r);return n===void 0?o:Object.assign(o,{lazy:n,lazyArgs:r})}function ao(e,r,n){let o=e.length-r.length;if(o===0)return e(...r);if(o===1)return Wme(e,r,n);throw Error("Wrong number of arguments")}function Ll(...e){return ao(Gme,e)}const Gme=(e,r)=>e.length>=r;function gt(e,r){if(typeof e>"u"||e==null){const n=typeof r=="function"?r():r;throw new Error(n??`Expected defined value, but received ${e}`)}return e}function He(e,r){if(!e)throw new Error(r??"Invariant failed")}function Qo(e){throw new Error(`NonExhaustive value: ${e}`)}function Yme(...e){return ao(Xme,e)}function Xme(e,r){let n={};for(let[o,i]of e.entries())n[i]=r(i,o,e);return n}function yb(...e){return ao(Km,e)}function Km(e,r){if(e===r||Object.is(e,r))return!0;if(typeof e!="object"||typeof r!="object"||e===null||r===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(r))return!1;if(Array.isArray(e))return Kme(e,r);if(e instanceof Map)return Zme(e,r);if(e instanceof Set)return Qme(e,r);if(e instanceof Date)return e.getTime()===r.getTime();if(e instanceof RegExp)return e.toString()===r.toString();if(Object.keys(e).length!==Object.keys(r).length)return!1;for(let[n,o]of Object.entries(e))if(!(n in r)||!Km(o,r[n]))return!1;return!0}function Kme(e,r){if(e.length!==r.length)return!1;for(let[n,o]of e.entries())if(!Km(o,r[n]))return!1;return!0}function Zme(e,r){if(e.size!==r.size)return!1;for(let[n,o]of e.entries())if(!r.has(n)||!Km(o,r.get(n)))return!1;return!0}function Qme(e,r){if(e.size!==r.size)return!1;let n=[...r];for(let o of e){let i=!1;for(let[a,l]of n.entries())if(Km(o,l)){i=!0,n.splice(a,1);break}if(!i)return!1}return!0}const{min:Jme,max:e1e}=Math,Au=(e,r=0,n=1)=>Jme(e1e(r,e),n),t_=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let r=0;r<=3;r++)r<3?((e[r]<0||e[r]>255)&&(e._clipped=!0),e[r]=Au(e[r],0,255)):r===3&&(e[r]=Au(e[r],0,1));return e},KM={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])KM[`[object ${e}]`]=e.toLowerCase();function Ft(e){return KM[Object.prototype.toString.call(e)]||"object"}const jt=(e,r=null)=>e.length>=3?Array.prototype.slice.call(e):Ft(e[0])=="object"&&r?r.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0].slice(0),Rh=e=>{if(e.length<2)return null;const r=e.length-1;return Ft(e[r])=="string"?e[r].toLowerCase():null},{PI:vb,min:ZM,max:QM}=Math,Ki=e=>Math.round(e*100)/100,r_=e=>Math.round(e*100)/100,As=vb*2,n_=vb/3,t1e=vb/180,r1e=180/vb;function JM(e){return[...e.slice(0,3).reverse(),...e.slice(3)]}const Rt={format:{},autodetect:[]};let Me=class{constructor(...r){const n=this;if(Ft(r[0])==="object"&&r[0].constructor&&r[0].constructor===this.constructor)return r[0];let o=Rh(r),i=!1;if(!o){i=!0,Rt.sorted||(Rt.autodetect=Rt.autodetect.sort((a,l)=>l.p-a.p),Rt.sorted=!0);for(let a of Rt.autodetect)if(o=a.test(...r),o)break}if(Rt.format[o]){const a=Rt.format[o].apply(null,i?r:r.slice(0,-1));n._rgb=t_(a)}else throw new Error("unknown format: "+r);n._rgb.length===3&&n._rgb.push(1)}toString(){return Ft(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}};const n1e="3.2.0",zt=(...e)=>new Me(...e);zt.version=n1e;const zh={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},o1e=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,i1e=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,eN=e=>{if(e.match(o1e)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);const r=parseInt(e,16),n=r>>16,o=r>>8&255,i=r&255;return[n,o,i,1]}if(e.match(i1e)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);const r=parseInt(e,16),n=r>>24&255,o=r>>16&255,i=r>>8&255,a=Math.round((r&255)/255*100)/100;return[n,o,i,a]}throw new Error(`unknown hex color: ${e}`)},{round:bb}=Math,tN=(...e)=>{let[r,n,o,i]=jt(e,"rgba"),a=Rh(e)||"auto";i===void 0&&(i=1),a==="auto"&&(a=i<1?"rgba":"rgb"),r=bb(r),n=bb(n),o=bb(o);let s="000000"+(r<<16|n<<8|o).toString(16);s=s.substr(s.length-6);let c="0"+bb(i*255).toString(16);switch(c=c.substr(c.length-2),a.toLowerCase()){case"rgba":return`#${s}${c}`;case"argb":return`#${c}${s}`;default:return`#${s}`}};Me.prototype.name=function(){const e=tN(this._rgb,"rgb");for(let r of Object.keys(zh))if(zh[r]===e)return r.toLowerCase();return e},Rt.format.named=e=>{if(e=e.toLowerCase(),zh[e])return eN(zh[e]);throw new Error("unknown color name: "+e)},Rt.autodetect.push({p:5,test:(e,...r)=>{if(!r.length&&Ft(e)==="string"&&zh[e.toLowerCase()])return"named"}}),Me.prototype.alpha=function(e,r=!1){return e!==void 0&&Ft(e)==="number"?r?(this._rgb[3]=e,this):new Me([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]},Me.prototype.clipped=function(){return this._rgb._clipped||!1};const Fl={Kn:18,labWhitePoint:"d65",Xn:.95047,Yn:1,Zn:1.08883,kE:216/24389,kKE:8,kK:24389/27,RefWhiteRGB:{X:.95047,Y:1,Z:1.08883},MtxRGB2XYZ:{m00:.4124564390896922,m01:.21267285140562253,m02:.0193338955823293,m10:.357576077643909,m11:.715152155287818,m12:.11919202588130297,m20:.18043748326639894,m21:.07217499330655958,m22:.9503040785363679},MtxXYZ2RGB:{m00:3.2404541621141045,m01:-.9692660305051868,m02:.055643430959114726,m10:-1.5371385127977166,m11:1.8760108454466942,m12:-.2040259135167538,m20:-.498531409556016,m21:.041556017530349834,m22:1.0572251882231791},As:.9414285350000001,Bs:1.040417467,Cs:1.089532651,MtxAdaptMa:{m00:.8951,m01:-.7502,m02:.0389,m10:.2664,m11:1.7135,m12:-.0685,m20:-.1614,m21:.0367,m22:1.0296},MtxAdaptMaI:{m00:.9869929054667123,m01:.43230526972339456,m02:-.008528664575177328,m10:-.14705425642099013,m11:.5183602715367776,m12:.04004282165408487,m20:.15996265166373125,m21:.0492912282128556,m22:.9684866957875502}},a1e=new Map([["a",[1.0985,.35585]],["b",[1.0985,.35585]],["c",[.98074,1.18232]],["d50",[.96422,.82521]],["d55",[.95682,.92149]],["d65",[.95047,1.08883]],["e",[1,1,1]],["f2",[.99186,.67393]],["f7",[.95041,1.08747]],["f11",[1.00962,.6435]],["icc",[.96422,.82521]]]);function Ds(e){const r=a1e.get(String(e).toLowerCase());if(!r)throw new Error("unknown Lab illuminant "+e);Fl.labWhitePoint=e,Fl.Xn=r[0],Fl.Zn=r[1]}function Zm(){return Fl.labWhitePoint}const o_=(...e)=>{e=jt(e,"lab");const[r,n,o]=e,[i,a,l]=l1e(r,n,o),[s,c,d]=rN(i,a,l);return[s,c,d,e.length>3?e[3]:1]},l1e=(e,r,n)=>{const{kE:o,kK:i,kKE:a,Xn:l,Yn:s,Zn:c}=Fl,d=(e+16)/116,u=.002*r+d,p=d-.005*n,f=u*u*u,m=p*p*p,v=f>o?f:(116*u-16)/i,w=e>a?Math.pow((e+16)/116,3):e/i,x=m>o?m:(116*p-16)/i,k=v*l,C=w*s,_=x*c;return[k,C,_]},i_=e=>{const r=Math.sign(e);return e=Math.abs(e),(e<=.0031308?e*12.92:1.055*Math.pow(e,1/2.4)-.055)*r},rN=(e,r,n)=>{const{MtxAdaptMa:o,MtxAdaptMaI:i,MtxXYZ2RGB:a,RefWhiteRGB:l,Xn:s,Yn:c,Zn:d}=Fl,u=s*o.m00+c*o.m10+d*o.m20,p=s*o.m01+c*o.m11+d*o.m21,f=s*o.m02+c*o.m12+d*o.m22,m=l.X*o.m00+l.Y*o.m10+l.Z*o.m20,v=l.X*o.m01+l.Y*o.m11+l.Z*o.m21,w=l.X*o.m02+l.Y*o.m12+l.Z*o.m22,x=(e*o.m00+r*o.m10+n*o.m20)*(m/u),k=(e*o.m01+r*o.m11+n*o.m21)*(v/p),C=(e*o.m02+r*o.m12+n*o.m22)*(w/f),_=x*i.m00+k*i.m10+C*i.m20,$=x*i.m01+k*i.m11+C*i.m21,R=x*i.m02+k*i.m12+C*i.m22,T=i_(_*a.m00+$*a.m10+R*a.m20),A=i_(_*a.m01+$*a.m11+R*a.m21),z=i_(_*a.m02+$*a.m12+R*a.m22);return[T*255,A*255,z*255]},a_=(...e)=>{const[r,n,o,...i]=jt(e,"rgb"),[a,l,s]=nN(r,n,o),[c,d,u]=s1e(a,l,s);return[c,d,u,...i.length>0&&i[0]<1?[i[0]]:[]]};function s1e(e,r,n){const{Xn:o,Yn:i,Zn:a,kE:l,kK:s}=Fl,c=e/o,d=r/i,u=n/a,p=c>l?Math.pow(c,1/3):(s*c+16)/116,f=d>l?Math.pow(d,1/3):(s*d+16)/116,m=u>l?Math.pow(u,1/3):(s*u+16)/116;return[116*f-16,500*(p-f),200*(f-m)]}function l_(e){const r=Math.sign(e);return e=Math.abs(e),(e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4))*r}const nN=(e,r,n)=>{e=l_(e/255),r=l_(r/255),n=l_(n/255);const{MtxRGB2XYZ:o,MtxAdaptMa:i,MtxAdaptMaI:a,Xn:l,Yn:s,Zn:c,As:d,Bs:u,Cs:p}=Fl;let f=e*o.m00+r*o.m10+n*o.m20,m=e*o.m01+r*o.m11+n*o.m21,v=e*o.m02+r*o.m12+n*o.m22;const w=l*i.m00+s*i.m10+c*i.m20,x=l*i.m01+s*i.m11+c*i.m21,k=l*i.m02+s*i.m12+c*i.m22;let C=f*i.m00+m*i.m10+v*i.m20,_=f*i.m01+m*i.m11+v*i.m21,$=f*i.m02+m*i.m12+v*i.m22;return C*=w/d,_*=x/u,$*=k/p,f=C*a.m00+_*a.m10+$*a.m20,m=C*a.m01+_*a.m11+$*a.m21,v=C*a.m02+_*a.m12+$*a.m22,[f,m,v]};Me.prototype.lab=function(){return a_(this._rgb)},Object.assign(zt,{lab:(...e)=>new Me(...e,"lab"),getLabWhitePoint:Zm,setLabWhitePoint:Ds}),Rt.format.lab=o_,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"lab"),Ft(e)==="array"&&e.length===3)return"lab"}}),Me.prototype.darken=function(e=1){const r=this,n=r.lab();return n[0]-=Fl.Kn*e,new Me(n,"lab").alpha(r.alpha(),!0)},Me.prototype.brighten=function(e=1){return this.darken(-e)},Me.prototype.darker=Me.prototype.darken,Me.prototype.brighter=Me.prototype.brighten,Me.prototype.get=function(e){const[r,n]=e.split("."),o=this[r]();if(n){const i=r.indexOf(n)-(r.substr(0,2)==="ok"?2:0);if(i>-1)return o[i];throw new Error(`unknown channel ${n} in mode ${r}`)}else return o};const{pow:c1e}=Math,d1e=1e-7,u1e=20;Me.prototype.luminance=function(e,r="rgb"){if(e!==void 0&&Ft(e)==="number"){if(e===0)return new Me([0,0,0,this._rgb[3]],"rgb");if(e===1)return new Me([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),o=u1e;const i=(l,s)=>{const c=l.interpolate(s,.5,r),d=c.luminance();return Math.abs(e-d)e?i(l,c):i(c,s)},a=(n>e?i(new Me([0,0,0]),this):i(this,new Me([255,255,255]))).rgb();return new Me([...a,this._rgb[3]])}return p1e(...this._rgb.slice(0,3))};const p1e=(e,r,n)=>(e=s_(e),r=s_(r),n=s_(n),.2126*e+.7152*r+.0722*n),s_=e=>(e/=255,e<=.03928?e/12.92:c1e((e+.055)/1.055,2.4)),bo={},Th=(e,r,n=.5,...o)=>{let i=o[0]||"lrgb";if(!bo[i]&&!o.length&&(i=Object.keys(bo)[0]),!bo[i])throw new Error(`interpolation mode ${i} is not defined`);return Ft(e)!=="object"&&(e=new Me(e)),Ft(r)!=="object"&&(r=new Me(r)),bo[i](e,r,n).alpha(e.alpha()+n*(r.alpha()-e.alpha()))};Me.prototype.mix=Me.prototype.interpolate=function(e,r=.5,...n){return Th(this,e,r,...n)},Me.prototype.premultiply=function(e=!1){const r=this._rgb,n=r[3];return e?(this._rgb=[r[0]*n,r[1]*n,r[2]*n,n],this):new Me([r[0]*n,r[1]*n,r[2]*n,n],"rgb")};const{sin:h1e,cos:f1e}=Math,oN=(...e)=>{let[r,n,o]=jt(e,"lch");return isNaN(o)&&(o=0),o=o*t1e,[r,f1e(o)*n,h1e(o)*n]},c_=(...e)=>{e=jt(e,"lch");const[r,n,o]=e,[i,a,l]=oN(r,n,o),[s,c,d]=o_(i,a,l);return[s,c,d,e.length>3?e[3]:1]},g1e=(...e)=>{const r=JM(jt(e,"hcl"));return c_(...r)},{sqrt:m1e,atan2:y1e,round:v1e}=Math,iN=(...e)=>{const[r,n,o]=jt(e,"lab"),i=m1e(n*n+o*o);let a=(y1e(o,n)*r1e+360)%360;return v1e(i*1e4)===0&&(a=Number.NaN),[r,i,a]},d_=(...e)=>{const[r,n,o,...i]=jt(e,"rgb"),[a,l,s]=a_(r,n,o),[c,d,u]=iN(a,l,s);return[c,d,u,...i.length>0&&i[0]<1?[i[0]]:[]]};Me.prototype.lch=function(){return d_(this._rgb)},Me.prototype.hcl=function(){return JM(d_(this._rgb))},Object.assign(zt,{lch:(...e)=>new Me(...e,"lch"),hcl:(...e)=>new Me(...e,"hcl")}),Rt.format.lch=c_,Rt.format.hcl=g1e,["lch","hcl"].forEach(e=>Rt.autodetect.push({p:2,test:(...r)=>{if(r=jt(r,e),Ft(r)==="array"&&r.length===3)return e}})),Me.prototype.saturate=function(e=1){const r=this,n=r.lch();return n[1]+=Fl.Kn*e,n[1]<0&&(n[1]=0),new Me(n,"lch").alpha(r.alpha(),!0)},Me.prototype.desaturate=function(e=1){return this.saturate(-e)},Me.prototype.set=function(e,r,n=!1){const[o,i]=e.split("."),a=this[o]();if(i){const l=o.indexOf(i)-(o.substr(0,2)==="ok"?2:0);if(l>-1){if(Ft(r)=="string")switch(r.charAt(0)){case"+":a[l]+=+r;break;case"-":a[l]+=+r;break;case"*":a[l]*=+r.substr(1);break;case"/":a[l]/=+r.substr(1);break;default:a[l]=+r}else if(Ft(r)==="number")a[l]=r;else throw new Error("unsupported value for Color.set");const s=new Me(a,o);return n?(this._rgb=s._rgb,this):s}throw new Error(`unknown channel ${i} in mode ${o}`)}else return a},Me.prototype.tint=function(e=.5,...r){return Th(this,"white",e,...r)},Me.prototype.shade=function(e=.5,...r){return Th(this,"black",e,...r)};const b1e=(e,r,n)=>{const o=e._rgb,i=r._rgb;return new Me(o[0]+n*(i[0]-o[0]),o[1]+n*(i[1]-o[1]),o[2]+n*(i[2]-o[2]),"rgb")};bo.rgb=b1e;const{sqrt:u_,pow:jh}=Math,x1e=(e,r,n)=>{const[o,i,a]=e._rgb,[l,s,c]=r._rgb;return new Me(u_(jh(o,2)*(1-n)+jh(l,2)*n),u_(jh(i,2)*(1-n)+jh(s,2)*n),u_(jh(a,2)*(1-n)+jh(c,2)*n),"rgb")};bo.lrgb=x1e;const w1e=(e,r,n)=>{const o=e.lab(),i=r.lab();return new Me(o[0]+n*(i[0]-o[0]),o[1]+n*(i[1]-o[1]),o[2]+n*(i[2]-o[2]),"lab")};bo.lab=w1e;const Ah=(e,r,n,o)=>{let i,a;o==="hsl"?(i=e.hsl(),a=r.hsl()):o==="hsv"?(i=e.hsv(),a=r.hsv()):o==="hcg"?(i=e.hcg(),a=r.hcg()):o==="hsi"?(i=e.hsi(),a=r.hsi()):o==="lch"||o==="hcl"?(o="hcl",i=e.hcl(),a=r.hcl()):o==="oklch"&&(i=e.oklch().reverse(),a=r.oklch().reverse());let l,s,c,d,u,p;(o.substr(0,1)==="h"||o==="oklch")&&([l,c,u]=i,[s,d,p]=a);let f,m,v,w;return!isNaN(l)&&!isNaN(s)?(s>l&&s-l>180?w=s-(l+360):s180?w=s+360-l:w=s-l,m=l+n*w):isNaN(l)?isNaN(s)?m=Number.NaN:(m=s,(u==1||u==0)&&o!="hsv"&&(f=d)):(m=l,(p==1||p==0)&&o!="hsv"&&(f=c)),f===void 0&&(f=c+n*(d-c)),v=u+n*(p-u),o==="oklch"?new Me([v,f,m],o):new Me([m,f,v],o)},aN=(e,r,n)=>Ah(e,r,n,"lch");bo.lch=aN,bo.hcl=aN;const k1e=e=>{if(Ft(e)=="number"&&e>=0&&e<=16777215){const r=e>>16,n=e>>8&255,o=e&255;return[r,n,o,1]}throw new Error("unknown num color: "+e)},_1e=(...e)=>{const[r,n,o]=jt(e,"rgb");return(r<<16)+(n<<8)+o};Me.prototype.num=function(){return _1e(this._rgb)},Object.assign(zt,{num:(...e)=>new Me(...e,"num")}),Rt.format.num=k1e,Rt.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&Ft(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});const S1e=(e,r,n)=>{const o=e.num(),i=r.num();return new Me(o+n*(i-o),"num")};bo.num=S1e;const{floor:E1e}=Math,C1e=(...e)=>{e=jt(e,"hcg");let[r,n,o]=e,i,a,l;o=o*255;const s=n*255;if(n===0)i=a=l=o;else{r===360&&(r=0),r>360&&(r-=360),r<0&&(r+=360),r/=60;const c=E1e(r),d=r-c,u=o*(1-n),p=u+s*(1-d),f=u+s*d,m=u+s;switch(c){case 0:[i,a,l]=[m,f,u];break;case 1:[i,a,l]=[p,m,u];break;case 2:[i,a,l]=[u,m,f];break;case 3:[i,a,l]=[u,p,m];break;case 4:[i,a,l]=[f,u,m];break;case 5:[i,a,l]=[m,u,p];break}}return[i,a,l,e.length>3?e[3]:1]},$1e=(...e)=>{const[r,n,o]=jt(e,"rgb"),i=ZM(r,n,o),a=QM(r,n,o),l=a-i,s=l*100/255,c=i/(255-l)*100;let d;return l===0?d=Number.NaN:(r===a&&(d=(n-o)/l),n===a&&(d=2+(o-r)/l),o===a&&(d=4+(r-n)/l),d*=60,d<0&&(d+=360)),[d,s,c]};Me.prototype.hcg=function(){return $1e(this._rgb)};const R1e=(...e)=>new Me(...e,"hcg");zt.hcg=R1e,Rt.format.hcg=C1e,Rt.autodetect.push({p:1,test:(...e)=>{if(e=jt(e,"hcg"),Ft(e)==="array"&&e.length===3)return"hcg"}});const z1e=(e,r,n)=>Ah(e,r,n,"hcg");bo.hcg=z1e;const{cos:Dh}=Math,T1e=(...e)=>{e=jt(e,"hsi");let[r,n,o]=e,i,a,l;return isNaN(r)&&(r=0),isNaN(n)&&(n=0),r>360&&(r-=360),r<0&&(r+=360),r/=360,r<1/3?(l=(1-n)/3,i=(1+n*Dh(As*r)/Dh(n_-As*r))/3,a=1-(l+i)):r<2/3?(r-=1/3,i=(1-n)/3,a=(1+n*Dh(As*r)/Dh(n_-As*r))/3,l=1-(i+a)):(r-=2/3,a=(1-n)/3,l=(1+n*Dh(As*r)/Dh(n_-As*r))/3,i=1-(a+l)),i=Au(o*i*3),a=Au(o*a*3),l=Au(o*l*3),[i*255,a*255,l*255,e.length>3?e[3]:1]},{min:j1e,sqrt:A1e,acos:D1e}=Math,P1e=(...e)=>{let[r,n,o]=jt(e,"rgb");r/=255,n/=255,o/=255;let i;const a=j1e(r,n,o),l=(r+n+o)/3,s=l>0?1-a/l:0;return s===0?i=NaN:(i=(r-n+(r-o))/2,i/=A1e((r-n)*(r-n)+(r-o)*(n-o)),i=D1e(i),o>n&&(i=As-i),i/=As),[i*360,s,l]};Me.prototype.hsi=function(){return P1e(this._rgb)};const M1e=(...e)=>new Me(...e,"hsi");zt.hsi=M1e,Rt.format.hsi=T1e,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsi"),Ft(e)==="array"&&e.length===3)return"hsi"}});const N1e=(e,r,n)=>Ah(e,r,n,"hsi");bo.hsi=N1e;const p_=(...e)=>{e=jt(e,"hsl");const[r,n,o]=e;let i,a,l;if(n===0)i=a=l=o*255;else{const s=[0,0,0],c=[0,0,0],d=o<.5?o*(1+n):o+n-o*n,u=2*o-d,p=r/360;s[0]=p+1/3,s[1]=p,s[2]=p-1/3;for(let f=0;f<3;f++)s[f]<0&&(s[f]+=1),s[f]>1&&(s[f]-=1),6*s[f]<1?c[f]=u+(d-u)*6*s[f]:2*s[f]<1?c[f]=d:3*s[f]<2?c[f]=u+(d-u)*(2/3-s[f])*6:c[f]=u;[i,a,l]=[c[0]*255,c[1]*255,c[2]*255]}return e.length>3?[i,a,l,e[3]]:[i,a,l,1]},lN=(...e)=>{e=jt(e,"rgba");let[r,n,o]=e;r/=255,n/=255,o/=255;const i=ZM(r,n,o),a=QM(r,n,o),l=(a+i)/2;let s,c;return a===i?(s=0,c=Number.NaN):s=l<.5?(a-i)/(a+i):(a-i)/(2-a-i),r==a?c=(n-o)/(a-i):n==a?c=2+(o-r)/(a-i):o==a&&(c=4+(r-n)/(a-i)),c*=60,c<0&&(c+=360),e.length>3&&e[3]!==void 0?[c,s,l,e[3]]:[c,s,l]};Me.prototype.hsl=function(){return lN(this._rgb)};const B1e=(...e)=>new Me(...e,"hsl");zt.hsl=B1e,Rt.format.hsl=p_,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsl"),Ft(e)==="array"&&e.length===3)return"hsl"}});const I1e=(e,r,n)=>Ah(e,r,n,"hsl");bo.hsl=I1e;const{floor:O1e}=Math,L1e=(...e)=>{e=jt(e,"hsv");let[r,n,o]=e,i,a,l;if(o*=255,n===0)i=a=l=o;else{r===360&&(r=0),r>360&&(r-=360),r<0&&(r+=360),r/=60;const s=O1e(r),c=r-s,d=o*(1-n),u=o*(1-n*c),p=o*(1-n*(1-c));switch(s){case 0:[i,a,l]=[o,p,d];break;case 1:[i,a,l]=[u,o,d];break;case 2:[i,a,l]=[d,o,p];break;case 3:[i,a,l]=[d,u,o];break;case 4:[i,a,l]=[p,d,o];break;case 5:[i,a,l]=[o,d,u];break}}return[i,a,l,e.length>3?e[3]:1]},{min:F1e,max:V1e}=Math,q1e=(...e)=>{e=jt(e,"rgb");let[r,n,o]=e;const i=F1e(r,n,o),a=V1e(r,n,o),l=a-i;let s,c,d;return d=a/255,a===0?(s=Number.NaN,c=0):(c=l/a,r===a&&(s=(n-o)/l),n===a&&(s=2+(o-r)/l),o===a&&(s=4+(r-n)/l),s*=60,s<0&&(s+=360)),[s,c,d]};Me.prototype.hsv=function(){return q1e(this._rgb)};const H1e=(...e)=>new Me(...e,"hsv");zt.hsv=H1e,Rt.format.hsv=L1e,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"hsv"),Ft(e)==="array"&&e.length===3)return"hsv"}});const U1e=(e,r,n)=>Ah(e,r,n,"hsv");bo.hsv=U1e;function xb(e,r){let n=e.length;Array.isArray(e[0])||(e=[e]),Array.isArray(r[0])||(r=r.map(l=>[l]));let o=r[0].length,i=r[0].map((l,s)=>r.map(c=>c[s])),a=e.map(l=>i.map(s=>Array.isArray(l)?l.reduce((c,d,u)=>c+d*(s[u]||0),0):s.reduce((c,d)=>c+d*l,0)));return n===1&&(a=a[0]),o===1?a.map(l=>l[0]):a}const h_=(...e)=>{e=jt(e,"lab");const[r,n,o,...i]=e,[a,l,s]=W1e([r,n,o]),[c,d,u]=rN(a,l,s);return[c,d,u,...i.length>0&&i[0]<1?[i[0]]:[]]};function W1e(e){var r=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],n=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],o=xb(n,e);return xb(r,o.map(i=>i**3))}const f_=(...e)=>{const[r,n,o,...i]=jt(e,"rgb"),a=nN(r,n,o);return[...G1e(a),...i.length>0&&i[0]<1?[i[0]]:[]]};function G1e(e){const r=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],n=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],o=xb(r,e);return xb(n,o.map(i=>Math.cbrt(i)))}Me.prototype.oklab=function(){return f_(this._rgb)},Object.assign(zt,{oklab:(...e)=>new Me(...e,"oklab")}),Rt.format.oklab=h_,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"oklab"),Ft(e)==="array"&&e.length===3)return"oklab"}});const Y1e=(e,r,n)=>{const o=e.oklab(),i=r.oklab();return new Me(o[0]+n*(i[0]-o[0]),o[1]+n*(i[1]-o[1]),o[2]+n*(i[2]-o[2]),"oklab")};bo.oklab=Y1e;const X1e=(e,r,n)=>Ah(e,r,n,"oklch");bo.oklch=X1e;const{pow:g_,sqrt:m_,PI:y_,cos:sN,sin:cN,atan2:K1e}=Math,Z1e=(e,r="lrgb",n=null)=>{const o=e.length;n||(n=Array.from(new Array(o)).map(()=>1));const i=o/n.reduce(function(p,f){return p+f});if(n.forEach((p,f)=>{n[f]*=i}),e=e.map(p=>new Me(p)),r==="lrgb")return Q1e(e,n);const a=e.shift(),l=a.get(r),s=[];let c=0,d=0;for(let p=0;p{const m=p.get(r);u+=p.alpha()*n[f+1];for(let v=0;v=360;)f-=360;l[p]=f}else l[p]=l[p]/s[p];return u/=o,new Me(l,r).alpha(u>.99999?1:u,!0)},Q1e=(e,r)=>{const n=e.length,o=[0,0,0,0];for(let i=0;i.9999999&&(o[3]=1),new Me(t_(o))},{pow:J1e}=Math;function wb(e){let r="rgb",n=zt("#ccc"),o=0,i=[0,1],a=[0,1],l=[],s=[0,0],c=!1,d=[],u=!1,p=0,f=1,m=!1,v={},w=!0,x=1;const k=function(z){if(z=z||["#fff","#000"],z&&Ft(z)==="string"&&zt.brewer&&zt.brewer[z.toLowerCase()]&&(z=zt.brewer[z.toLowerCase()]),Ft(z)==="array"){z.length===1&&(z=[z[0],z[0]]),z=z.slice(0);for(let j=0;j=c[I];)I++;return I-1}return 0};let _=z=>z,$=z=>z;const R=function(z,j){let I,N;if(j==null&&(j=!1),isNaN(z)||z===null)return n;j?N=z:c&&c.length>2?N=C(z)/(c.length-2):f!==p?N=(z-p)/(f-p):N=1,N=$(N),j||(N=_(N)),x!==1&&(N=J1e(N,x)),N=s[0]+N*(1-s[0]-s[1]),N=Au(N,0,1);const L=Math.floor(N*1e4);if(w&&v[L])I=v[L];else{if(Ft(d)==="array")for(let H=0;H=P&&H===l.length-1){I=d[H];break}if(N>P&&Nv={};k(e);const A=function(z){const j=zt(R(z));return u&&j[u]?j[u]():j};return A.classes=function(z){if(z!=null){if(Ft(z)==="array")c=z,i=[z[0],z[z.length-1]];else{const j=zt.analyze(i);z===0?c=[j.min,j.max]:c=zt.limits(j,"e",z)}return A}return c},A.domain=function(z){if(!arguments.length)return a;a=z.slice(0),p=z[0],f=z[z.length-1],l=[];const j=d.length;if(z.length===j&&p!==f)for(let I of Array.from(z))l.push((I-p)/(f-p));else{for(let I=0;I2){const I=z.map((L,H)=>H/(z.length-1)),N=z.map(L=>(L-p)/(f-p));N.every((L,H)=>I[H]===L)||($=L=>{if(L<=0||L>=1)return L;let H=0;for(;L>=N[H+1];)H++;const P=(L-N[H])/(N[H+1]-N[H]);return I[H]+P*(I[H+1]-I[H])})}}return i=[p,f],A},A.mode=function(z){return arguments.length?(r=z,T(),A):r},A.range=function(z,j){return k(z),A},A.out=function(z){return u=z,A},A.spread=function(z){return arguments.length?(o=z,A):o},A.correctLightness=function(z){return z==null&&(z=!0),m=z,T(),m?_=function(j){const I=R(0,!0).lab()[0],N=R(1,!0).lab()[0],L=I>N;let H=R(j,!0).lab()[0];const P=I+(N-I)*j;let V=H-P,B=0,F=1,q=20;for(;Math.abs(V)>.01&&q-- >0;)(function(){return L&&(V*=-1),V<0?(B=j,j+=(F-j)*.5):(F=j,j+=(B-j)*.5),H=R(j,!0).lab()[0],V=H-P})();return j}:_=j=>j,A},A.padding=function(z){return z!=null?(Ft(z)==="number"&&(z=[z,z]),s=z,A):s},A.colors=function(z,j){arguments.length<2&&(j="hex");let I=[];if(arguments.length===0)I=d.slice(0);else if(z===1)I=[A(.5)];else if(z>1){const N=i[0],L=i[1]-N;I=eye(0,z).map(H=>A(N+H/(z-1)*L))}else{e=[];let N=[];if(c&&c.length>2)for(let L=1,H=c.length,P=1<=H;P?LH;P?L++:L--)N.push((c[L-1]+c[L])*.5);else N=i;I=N.map(L=>A(L))}return zt[j]&&(I=I.map(N=>N[j]())),I},A.cache=function(z){return z!=null?(w=z,A):w},A.gamma=function(z){return z!=null?(x=z,A):x},A.nodata=function(z){return z!=null?(n=zt(z),A):n},A}function eye(e,r,n){let o=[],i=ea;i?l++:l--)o.push(l);return o}const tye=function(e){let r=[1,1];for(let n=1;nnew Me(a)),e.length===2)[n,o]=e.map(a=>a.lab()),r=function(a){const l=[0,1,2].map(s=>n[s]+a*(o[s]-n[s]));return new Me(l,"lab")};else if(e.length===3)[n,o,i]=e.map(a=>a.lab()),r=function(a){const l=[0,1,2].map(s=>(1-a)*(1-a)*n[s]+2*(1-a)*a*o[s]+a*a*i[s]);return new Me(l,"lab")};else if(e.length===4){let a;[n,o,i,a]=e.map(l=>l.lab()),r=function(l){const s=[0,1,2].map(c=>(1-l)*(1-l)*(1-l)*n[c]+3*(1-l)*(1-l)*l*o[c]+3*(1-l)*l*l*i[c]+l*l*l*a[c]);return new Me(s,"lab")}}else if(e.length>=5){let a,l,s;a=e.map(c=>c.lab()),s=e.length-1,l=tye(s),r=function(c){const d=1-c,u=[0,1,2].map(p=>a.reduce((f,m,v)=>f+l[v]*d**(s-v)*c**v*m[p],0));return new Me(u,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return r},nye=e=>{const r=rye(e);return r.scale=()=>wb(r),r},{round:dN}=Math;Me.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(dN)},Me.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((r,n)=>n<3?e===!1?r:dN(r):r)},Object.assign(zt,{rgb:(...e)=>new Me(...e,"rgb")}),Rt.format.rgb=(...e)=>{const r=jt(e,"rgba");return r[3]===void 0&&(r[3]=1),r},Rt.autodetect.push({p:3,test:(...e)=>{if(e=jt(e,"rgba"),Ft(e)==="array"&&(e.length===3||e.length===4&&Ft(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});const qa=(e,r,n)=>{if(!qa[n])throw new Error("unknown blend mode "+n);return qa[n](e,r)},Kc=e=>(r,n)=>{const o=zt(n).rgb(),i=zt(r).rgb();return zt.rgb(e(o,i))},Zc=e=>(r,n)=>{const o=[];return o[0]=e(r[0],n[0]),o[1]=e(r[1],n[1]),o[2]=e(r[2],n[2]),o},oye=e=>e,iye=(e,r)=>e*r/255,aye=(e,r)=>e>r?r:e,lye=(e,r)=>e>r?e:r,sye=(e,r)=>255*(1-(1-e/255)*(1-r/255)),cye=(e,r)=>r<128?2*e*r/255:255*(1-2*(1-e/255)*(1-r/255)),dye=(e,r)=>255*(1-(1-r/255)/(e/255)),uye=(e,r)=>e===255?255:(e=255*(r/255)/(1-e/255),e>255?255:e);qa.normal=Kc(Zc(oye)),qa.multiply=Kc(Zc(iye)),qa.screen=Kc(Zc(sye)),qa.overlay=Kc(Zc(cye)),qa.darken=Kc(Zc(aye)),qa.lighten=Kc(Zc(lye)),qa.dodge=Kc(Zc(uye)),qa.burn=Kc(Zc(dye));const{pow:pye,sin:hye,cos:fye}=Math;function gye(e=300,r=-1.5,n=1,o=1,i=[0,1]){let a=0,l;Ft(i)==="array"?l=i[1]-i[0]:(l=0,i=[i,i]);const s=function(c){const d=As*((e+120)/360+r*c),u=pye(i[0]+l*c,o),f=(a!==0?n[0]+c*a:n)*u*(1-u)/2,m=fye(d),v=hye(d),w=u+f*(-.14861*m+1.78277*v),x=u+f*(-.29227*m-.90649*v),k=u+f*(1.97294*m);return zt(t_([w*255,x*255,k*255,1]))};return s.start=function(c){return c==null?e:(e=c,s)},s.rotations=function(c){return c==null?r:(r=c,s)},s.gamma=function(c){return c==null?o:(o=c,s)},s.hue=function(c){return c==null?n:(n=c,Ft(n)==="array"?(a=n[1]-n[0],a===0&&(n=n[1])):a=0,s)},s.lightness=function(c){return c==null?i:(Ft(c)==="array"?(i=c,l=c[1]-c[0]):(i=[c,c],l=0),s)},s.scale=()=>zt.scale(s),s.hue(n),s}const mye="0123456789abcdef",{floor:yye,random:vye}=Math,bye=(e=vye)=>{let r="#";for(let n=0;n<6;n++)r+=mye.charAt(yye(e()*16));return new Me(r,"hex")},{log:uN,pow:xye,floor:wye,abs:kye}=Math;function pN(e,r=null){const n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return Ft(e)==="object"&&(e=Object.values(e)),e.forEach(o=>{r&&Ft(o)==="object"&&(o=o[r]),o!=null&&!isNaN(o)&&(n.values.push(o),n.sum+=o,on.max&&(n.max=o),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(o,i)=>hN(n,o,i),n}function hN(e,r="equal",n=7){Ft(e)=="array"&&(e=pN(e));const{min:o,max:i}=e,a=e.values.sort((s,c)=>s-c);if(n===1)return[o,i];const l=[];if(r.substr(0,1)==="c"&&(l.push(o),l.push(i)),r.substr(0,1)==="e"){l.push(o);for(let s=1;s 0");const s=Math.LOG10E*uN(o),c=Math.LOG10E*uN(i);l.push(o);for(let d=1;d200&&(p=!1)}const v={};for(let x=0;xx-k),l.push(w[0]);for(let x=1;x{e=new Me(e),r=new Me(r);const n=e.luminance(),o=r.luminance();return n>o?(n+.05)/(o+.05):(o+.05)/(n+.05)};const fN=.027,Sye=5e-4,Eye=.1,gN=1.14,kb=.022,mN=1.414,Cye=(e,r)=>{e=new Me(e),r=new Me(r),e.alpha()<1&&(e=Th(r,e,e.alpha(),"rgb"));const n=yN(...e.rgb()),o=yN(...r.rgb()),i=n>=kb?n:n+Math.pow(kb-n,mN),a=o>=kb?o:o+Math.pow(kb-o,mN),l=Math.pow(a,.56)-Math.pow(i,.57),s=Math.pow(a,.65)-Math.pow(i,.62),c=Math.abs(a-i)0?c-fN:c+fN)*100};function yN(e,r,n){return .2126729*Math.pow(e/255,2.4)+.7151522*Math.pow(r/255,2.4)+.072175*Math.pow(n/255,2.4)}const{sqrt:Ps,pow:yn,min:$ye,max:Rye,atan2:vN,abs:bN,cos:_b,sin:xN,exp:zye,PI:wN}=Math;function Tye(e,r,n=1,o=1,i=1){var a=function(O){return 360*O/(2*wN)},l=function(O){return 2*wN*O/360};e=new Me(e),r=new Me(r);const[s,c,d]=Array.from(e.lab()),[u,p,f]=Array.from(r.lab()),m=(s+u)/2,v=Ps(yn(c,2)+yn(d,2)),w=Ps(yn(p,2)+yn(f,2)),x=(v+w)/2,k=.5*(1-Ps(yn(x,7)/(yn(x,7)+yn(25,7)))),C=c*(1+k),_=p*(1+k),$=Ps(yn(C,2)+yn(d,2)),R=Ps(yn(_,2)+yn(f,2)),T=($+R)/2,A=a(vN(d,C)),z=a(vN(f,_)),j=A>=0?A:A+360,I=z>=0?z:z+360,N=bN(j-I)>180?(j+I+360)/2:(j+I)/2,L=1-.17*_b(l(N-30))+.24*_b(l(2*N))+.32*_b(l(3*N+6))-.2*_b(l(4*N-63));let H=I-j;H=bN(H)<=180?H:I<=j?H+360:H-360,H=2*Ps($*R)*xN(l(H)/2);const P=u-s,V=R-$,B=1+.015*yn(m-50,2)/Ps(20+yn(m-50,2)),F=1+.045*T,q=1+.015*T*L,G=30*zye(-yn((N-275)/25,2)),Y=-(2*Ps(yn(T,7)/(yn(T,7)+yn(25,7))))*xN(2*l(G)),K=Ps(yn(P/(n*B),2)+yn(V/(o*F),2)+yn(H/(i*q),2)+Y*(V/(o*F))*(H/(i*q)));return Rye(0,$ye(100,K))}function jye(e,r,n="lab"){e=new Me(e),r=new Me(r);const o=e.get(n),i=r.get(n);let a=0;for(let l in o){const s=(o[l]||0)-(i[l]||0);a+=s*s}return Math.sqrt(a)}const Aye=(...e)=>{try{return new Me(...e),!0}catch{return!1}},Dye={cool(){return wb([zt.hsl(180,1,.9),zt.hsl(250,.7,.4)])},hot(){return wb(["#000","#f00","#ff0","#fff"]).mode("rgb")}},v_={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},kN=Object.keys(v_),_N=new Map(kN.map(e=>[e.toLowerCase(),e])),Pye=typeof Proxy=="function"?new Proxy(v_,{get(e,r){const n=r.toLowerCase();if(_N.has(n))return e[_N.get(n)]},getOwnPropertyNames(){return Object.getOwnPropertyNames(kN)}}):v_,Mye=(...e)=>{e=jt(e,"cmyk");const[r,n,o,i]=e,a=e.length>4?e[4]:1;return i===1?[0,0,0,a]:[r>=1?0:255*(1-r)*(1-i),n>=1?0:255*(1-n)*(1-i),o>=1?0:255*(1-o)*(1-i),a]},{max:SN}=Math,Nye=(...e)=>{let[r,n,o]=jt(e,"rgb");r=r/255,n=n/255,o=o/255;const i=1-SN(r,SN(n,o)),a=i<1?1/(1-i):0,l=(1-r-i)*a,s=(1-n-i)*a,c=(1-o-i)*a;return[l,s,c,i]};Me.prototype.cmyk=function(){return Nye(this._rgb)},Object.assign(zt,{cmyk:(...e)=>new Me(...e,"cmyk")}),Rt.format.cmyk=Mye,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"cmyk"),Ft(e)==="array"&&e.length===4)return"cmyk"}});const Bye=(...e)=>{const r=jt(e,"hsla");let n=Rh(e)||"lsa";return r[0]=Ki(r[0]||0)+"deg",r[1]=Ki(r[1]*100)+"%",r[2]=Ki(r[2]*100)+"%",n==="hsla"||r.length>3&&r[3]<1?(r[3]="/ "+(r.length>3?r[3]:1),n="hsla"):r.length=3,`${n.substr(0,3)}(${r.join(" ")})`},Iye=(...e)=>{const r=jt(e,"lab");let n=Rh(e)||"lab";return r[0]=Ki(r[0])+"%",r[1]=Ki(r[1]),r[2]=Ki(r[2]),n==="laba"||r.length>3&&r[3]<1?r[3]="/ "+(r.length>3?r[3]:1):r.length=3,`lab(${r.join(" ")})`},Oye=(...e)=>{const r=jt(e,"lch");let n=Rh(e)||"lab";return r[0]=Ki(r[0])+"%",r[1]=Ki(r[1]),r[2]=isNaN(r[2])?"none":Ki(r[2])+"deg",n==="lcha"||r.length>3&&r[3]<1?r[3]="/ "+(r.length>3?r[3]:1):r.length=3,`lch(${r.join(" ")})`},Lye=(...e)=>{const r=jt(e,"lab");return r[0]=Ki(r[0]*100)+"%",r[1]=r_(r[1]),r[2]=r_(r[2]),r.length>3&&r[3]<1?r[3]="/ "+(r.length>3?r[3]:1):r.length=3,`oklab(${r.join(" ")})`},EN=(...e)=>{const[r,n,o,...i]=jt(e,"rgb"),[a,l,s]=f_(r,n,o),[c,d,u]=iN(a,l,s);return[c,d,u,...i.length>0&&i[0]<1?[i[0]]:[]]},Fye=(...e)=>{const r=jt(e,"lch");return r[0]=Ki(r[0]*100)+"%",r[1]=r_(r[1]),r[2]=isNaN(r[2])?"none":Ki(r[2])+"deg",r.length>3&&r[3]<1?r[3]="/ "+(r.length>3?r[3]:1):r.length=3,`oklch(${r.join(" ")})`},{round:b_}=Math,Vye=(...e)=>{const r=jt(e,"rgba");let n=Rh(e)||"rgb";if(n.substr(0,3)==="hsl")return Bye(lN(r),n);if(n.substr(0,3)==="lab"){const o=Zm();Ds("d50");const i=Iye(a_(r),n);return Ds(o),i}if(n.substr(0,3)==="lch"){const o=Zm();Ds("d50");const i=Oye(d_(r),n);return Ds(o),i}return n.substr(0,5)==="oklab"?Lye(f_(r)):n.substr(0,5)==="oklch"?Fye(EN(r)):(r[0]=b_(r[0]),r[1]=b_(r[1]),r[2]=b_(r[2]),(n==="rgba"||r.length>3&&r[3]<1)&&(r[3]="/ "+(r.length>3?r[3]:1),n="rgba"),`${n.substr(0,3)}(${r.slice(0,n==="rgb"?3:4).join(" ")})`)},CN=(...e)=>{e=jt(e,"lch");const[r,n,o,...i]=e,[a,l,s]=oN(r,n,o),[c,d,u]=h_(a,l,s);return[c,d,u,...i.length>0&&i[0]<1?[i[0]]:[]]},Ms=/((?:-?\d+)|(?:-?\d+(?:\.\d+)?)%|none)/.source,Ha=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)%?)|none)/.source,Sb=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)%)|none)/.source,Zi=/\s*/.source,Ph=/\s+/.source,x_=/\s*,\s*/.source,Eb=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?)|none)/.source,Mh=/\s*(?:\/\s*((?:[01]|[01]?\.\d+)|\d+(?:\.\d+)?%))?/.source,$N=new RegExp("^rgba?\\("+Zi+[Ms,Ms,Ms].join(Ph)+Mh+"\\)$"),RN=new RegExp("^rgb\\("+Zi+[Ms,Ms,Ms].join(x_)+Zi+"\\)$"),zN=new RegExp("^rgba\\("+Zi+[Ms,Ms,Ms,Ha].join(x_)+Zi+"\\)$"),TN=new RegExp("^hsla?\\("+Zi+[Eb,Sb,Sb].join(Ph)+Mh+"\\)$"),jN=new RegExp("^hsl?\\("+Zi+[Eb,Sb,Sb].join(x_)+Zi+"\\)$"),AN=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,DN=new RegExp("^lab\\("+Zi+[Ha,Ha,Ha].join(Ph)+Mh+"\\)$"),PN=new RegExp("^lch\\("+Zi+[Ha,Ha,Eb].join(Ph)+Mh+"\\)$"),MN=new RegExp("^oklab\\("+Zi+[Ha,Ha,Ha].join(Ph)+Mh+"\\)$"),NN=new RegExp("^oklch\\("+Zi+[Ha,Ha,Eb].join(Ph)+Mh+"\\)$"),{round:BN}=Math,Nh=e=>e.map((r,n)=>n<=2?Au(BN(r),0,255):r),vn=(e,r=0,n=100,o=!1)=>(typeof e=="string"&&e.endsWith("%")&&(e=parseFloat(e.substring(0,e.length-1))/100,o?e=r+(e+1)*.5*(n-r):e=r+e*(n-r)),+e),No=(e,r)=>e==="none"?r:e,w_=e=>{if(e=e.toLowerCase().trim(),e==="transparent")return[0,0,0,0];let r;if(Rt.format.named)try{return Rt.format.named(e)}catch{}if((r=e.match($N))||(r=e.match(RN))){let n=r.slice(1,4);for(let i=0;i<3;i++)n[i]=+vn(No(n[i],0),0,255);n=Nh(n);const o=r[4]!==void 0?+vn(r[4],0,1):1;return n[3]=o,n}if(r=e.match(zN)){const n=r.slice(1,5);for(let o=0;o<4;o++)n[o]=+vn(n[o],0,255);return n}if((r=e.match(TN))||(r=e.match(jN))){const n=r.slice(1,4);n[0]=+No(n[0].replace("deg",""),0),n[1]=+vn(No(n[1],0),0,100)*.01,n[2]=+vn(No(n[2],0),0,100)*.01;const o=Nh(p_(n)),i=r[4]!==void 0?+vn(r[4],0,1):1;return o[3]=i,o}if(r=e.match(AN)){const n=r.slice(1,4);n[1]*=.01,n[2]*=.01;const o=p_(n);for(let i=0;i<3;i++)o[i]=BN(o[i]);return o[3]=+r[4],o}if(r=e.match(DN)){const n=r.slice(1,4);n[0]=vn(No(n[0],0),0,100),n[1]=vn(No(n[1],0),-125,125,!0),n[2]=vn(No(n[2],0),-125,125,!0);const o=Zm();Ds("d50");const i=Nh(o_(n));Ds(o);const a=r[4]!==void 0?+vn(r[4],0,1):1;return i[3]=a,i}if(r=e.match(PN)){const n=r.slice(1,4);n[0]=vn(n[0],0,100),n[1]=vn(No(n[1],0),0,150,!1),n[2]=+No(n[2].replace("deg",""),0);const o=Zm();Ds("d50");const i=Nh(c_(n));Ds(o);const a=r[4]!==void 0?+vn(r[4],0,1):1;return i[3]=a,i}if(r=e.match(MN)){const n=r.slice(1,4);n[0]=vn(No(n[0],0),0,1),n[1]=vn(No(n[1],0),-.4,.4,!0),n[2]=vn(No(n[2],0),-.4,.4,!0);const o=Nh(h_(n)),i=r[4]!==void 0?+vn(r[4],0,1):1;return o[3]=i,o}if(r=e.match(NN)){const n=r.slice(1,4);n[0]=vn(No(n[0],0),0,1),n[1]=vn(No(n[1],0),0,.4,!1),n[2]=+No(n[2].replace("deg",""),0);const o=Nh(CN(n)),i=r[4]!==void 0?+vn(r[4],0,1):1;return o[3]=i,o}};w_.test=e=>$N.test(e)||TN.test(e)||DN.test(e)||PN.test(e)||MN.test(e)||NN.test(e)||RN.test(e)||zN.test(e)||jN.test(e)||AN.test(e)||e==="transparent",Me.prototype.css=function(e){return Vye(this._rgb,e)};const qye=(...e)=>new Me(...e,"css");zt.css=qye,Rt.format.css=w_,Rt.autodetect.push({p:5,test:(e,...r)=>{if(!r.length&&Ft(e)==="string"&&w_.test(e))return"css"}}),Rt.format.gl=(...e)=>{const r=jt(e,"rgba");return r[0]*=255,r[1]*=255,r[2]*=255,r};const Hye=(...e)=>new Me(...e,"gl");zt.gl=Hye,Me.prototype.gl=function(){const e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]},Me.prototype.hex=function(e){return tN(this._rgb,e)};const Uye=(...e)=>new Me(...e,"hex");zt.hex=Uye,Rt.format.hex=eN,Rt.autodetect.push({p:4,test:(e,...r)=>{if(!r.length&&Ft(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});const{log:Cb}=Math,IN=e=>{const r=e/100;let n,o,i;return r<66?(n=255,o=r<6?0:-155.25485562709179-.44596950469579133*(o=r-2)+104.49216199393888*Cb(o),i=r<20?0:-254.76935184120902+.8274096064007395*(i=r-10)+115.67994401066147*Cb(i)):(n=351.97690566805693+.114206453784165*(n=r-55)-40.25366309332127*Cb(n),o=325.4494125711974+.07943456536662342*(o=r-50)-28.0852963507957*Cb(o),i=255),[n,o,i,1]},{round:Wye}=Math,Gye=(...e)=>{const r=jt(e,"rgb"),n=r[0],o=r[2];let i=1e3,a=4e4;const l=.4;let s;for(;a-i>l;){s=(a+i)*.5;const c=IN(s);c[2]/c[0]>=o/n?a=s:i=s}return Wye(s)};Me.prototype.temp=Me.prototype.kelvin=Me.prototype.temperature=function(){return Gye(this._rgb)};const k_=(...e)=>new Me(...e,"temp");Object.assign(zt,{temp:k_,kelvin:k_,temperature:k_}),Rt.format.temp=Rt.format.kelvin=Rt.format.temperature=IN,Me.prototype.oklch=function(){return EN(this._rgb)},Object.assign(zt,{oklch:(...e)=>new Me(...e,"oklch")}),Rt.format.oklch=CN,Rt.autodetect.push({p:2,test:(...e)=>{if(e=jt(e,"oklch"),Ft(e)==="array"&&e.length===3)return"oklch"}}),Object.assign(zt,{analyze:pN,average:Z1e,bezier:nye,blend:qa,brewer:Pye,Color:Me,colors:zh,contrast:_ye,contrastAPCA:Cye,cubehelix:gye,deltaE:Tye,distance:jye,input:Rt,interpolate:Th,limits:hN,mix:Th,random:bye,scale:wb,scales:Dye,valid:Aye});const __=[.96,.907,.805,.697,.605,.547,.518,.445,.395,.34],ON=[.32,.16,.08,.04,0,0,.04,.08,.16,.32];function Yye(e){const r=e.get("hsl.l");return __.reduce((n,o)=>Math.abs(o-r)a===n),i=__.map(a=>r.set("hsl.l",a)).map(a=>zt(a)).map((a,l)=>{const s=ON[l]-ON[o];return s>=0?a.saturate(s):a.desaturate(s*-1)});return i[o]=zt(e),{baseColorIndex:o,colors:i}}function Kye(e){return Xye(e).colors.map(r=>r.hex())}const LN={fill:"#3b82f6",stroke:"#2563eb",hiContrast:"#eff6ff",loContrast:"#bfdbfe"},FN={fill:"#0284c7",stroke:"#0369a1",hiContrast:"#f0f9ff",loContrast:"#B6ECF7"},VN={fill:"#64748b",stroke:"#475569",hiContrast:"#f8fafc",loContrast:"#cbd5e1"},Zye={primary:LN,blue:LN,secondary:FN,sky:FN,muted:VN,slate:VN,gray:{fill:"#737373",stroke:"#525252",hiContrast:"#fafafa",loContrast:"#d4d4d4"},red:{fill:"#AC4D39",stroke:"#853A2D",hiContrast:"#FBD3CB",loContrast:"#f5b2a3"},green:{fill:"#428a4f",stroke:"#2d5d39",hiContrast:"#f8fafc",loContrast:"#c2f0c2"},amber:{fill:"#A35829",stroke:"#7E451D",hiContrast:"#FFE0C2",loContrast:"#f9b27c"},indigo:{fill:"#6366f1",stroke:"#4f46e5",hiContrast:"#eef2ff",loContrast:"#c7d2fe"}},Qye={line:"#8D8D8D",labelBg:"#18191B",label:"#C9C9C9"},qN={line:"#64748b",labelBg:"#0f172a",label:"#cbd5e1"},HN={line:"#3b82f6",labelBg:"#172554",label:"#60a5fa"},UN={line:"#0ea5e9",labelBg:"#082f49",label:"#38bdf8"},Jye={amber:{line:"#b45309",labelBg:"#78350f",label:"#FFE0C2"},blue:HN,gray:Qye,green:{line:"#15803d",labelBg:"#052e16",label:"#22c55e"},indigo:{line:"#6366f1",labelBg:"#1e1b4b",label:"#818cf8"},muted:qN,primary:HN,red:{line:"#AC4D39",labelBg:"#b91c1c",label:"#f5b2a3"},secondary:UN,sky:UN,slate:qN},WN=60,GN=2,YN=1;function e0e(e){He(zt.valid(e),`Invalid color: ${e}`);const r=Kye(e),n=r[6],o=t0e(n);return{elements:{fill:n,stroke:r[7],hiContrast:o[0],loContrast:o[1]},relationships:{line:r[4],label:r[3],labelBg:r[9]}}}function t0e(e){const r=zt(e);let n=r.brighten(GN),o=r.darken(GN),i,a,l,s;do i=n,a=o,n=n.brighten(YN),o=o.darken(YN),l=zt.contrastAPCA(r,n),s=zt.contrastAPCA(r,o);while(Math.abs(l)Math.abs(s)?[n.brighten(.4).hex(),n.hex()]:[o.darken(.4).hex(),o.hex()]}const r0e={color:"primary",size:"md",opacity:15,shape:"rectangle",group:{opacity:15,border:"dashed"},relationship:{color:"gray",line:"dashed",arrow:"normal"}},n0e=["rectangle","person","browser","mobile","cylinder","storage","queue"],o0e={colors:Yme(["amber","blue","gray","slate","green","indigo","muted","primary","red","secondary","sky"],e=>({elements:Zye[e],relationships:Jye[e]})),sizes:{xs:{width:180,height:100},sm:{width:240,height:135},md:{width:320,height:180},lg:{width:420,height:234},xl:{width:520,height:290}},spacing:{xs:8,sm:10,md:16,lg:24,xl:32},textSizes:{xs:13.33,sm:16,md:19.2,lg:23.04,xl:27.65}};function $b({size:e,padding:r,textSize:n,...o},i=S_.defaults.size){return e??=i,n??=e,r??=e,{...o,size:e,padding:r,textSize:n}}const S_={theme:o0e,defaults:r0e};let XN=class OM{constructor(r){this.config=r,this.theme=r.theme,this.defaults=r.defaults}theme;defaults;static DEFAULT=new OM(S_);static from(...r){return Ll(r,1)?new OM(XM(...r,S_)):this.DEFAULT}get elementColors(){return this.theme.colors[this.defaults.color].elements}get relationshipColors(){return this.theme.colors[this.defaults.relationship.color].relationships}get groupColors(){const r=this.defaults.group?.color;return r?ar(this,"defaultGroup",()=>({...this.elementColors,...this.theme.colors[r].elements})):this.elementColors}isDefaultColor(r){return r===this.defaults.color}colors(r){if(r??=this.defaults.color,this.isThemeColor(r))return this.theme.colors[r];throw new Error(`Unknown color: ${r}`)}fontSize(r){return r??=this.defaults.text??this.defaults.size,this.theme.textSizes[r]}padding(r){return r??=this.defaults.padding??this.defaults.size,this.theme.spacing[r]}isThemeColor(r){return r in this.theme.colors}nodeSizes(r){const n=$b(r,this.defaults.size);return{sizes:n,values:{sizes:this.theme.sizes[n.size],padding:this.padding(n.padding),textSize:this.fontSize(n.textSize)}}}computeFrom(r){return this.isThemeColor(r)?this.theme.colors[r]:ar(this,`compute-${r}`,()=>{if(!zt.valid(r))throw new Error(`Invalid color value: "${r}"`);return e0e(r)})}equals(r){return r===this?!0:yb(this.config,r.config)}};function Qm(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Qc(e){return typeof e=="string"}const E_={done:!1,hasNext:!1};function Ns(e,...r){let n=e,o=r.map(a=>"lazy"in a?i0e(a):void 0),i=0;for(;i65;)++o;return+u.slice(p-1,o)}return f=c&&c.indexOf(u.charAt(p)),f>-1?f+76:(f=u.charCodeAt(p)||0,f<45||f>127?f:f<46?65:f<48?f-1:f<58?f+18:f<65?f-11:f<91?f+11:f<97?f-37:f<123?f+5:f-63)}if((r+="")!=(n+="")){for(;a;)if(i=d(r,l++),a=d(n,s++),i<76&&a<76&&i>66&&a>66&&(i=d(r,l,l),a=d(n,s,l=o),s=o),i!=a)return i{if(n===o)return 0;if(!n)return-1;if(!o)return 1;const i=n.split(e),a=o.split(e),l=Math.min(i.length,a.length);for(let c=0;c0?e.slice(0,r):null}function Jm(e){const r=e.lastIndexOf(".");return r>0?e.slice(r+1):e}const e1=e=>$_(e)?e:e.id;function Yn(e,r){const n=e1(e);return r?e1(r).startsWith(n+"."):o=>{const i=e1(o);return n.startsWith(i+".")}}function eB(e,r){if(!r)return i=>eB(e,i);const n=e1(e),o=e1(r);return n===o||o.startsWith(n+".")||n.startsWith(o+".")}function tB(e,r){return n=>Yn(e,n)}function Tb(e){return($_(e)?e:e.id).split(".").length}function t1(e,r){const n=e.split(".");if(n.length<2)return null;const o=r.split(".");if(o.length<2)return null;let i=[];for(let a=0;ai===0?(n.push(o),n):(n.unshift(`${n[0]}.${o}`),n),[])}function c0e(e,r){let n=r;for(const o of e)Yn(o,n)&&(n=o);return n!==r?n:null}function Jc(e){const r=[],n=[...e];let o;for(;o=n.shift();){let i;for(;i=c0e(n,o);)r.push(n.splice(n.indexOf(i),1)[0]);r.push(o)}return r}function rB(e,r){if(!e||$_(e)){const o=e??"asc";return i=>rB(i,o)}const n=r==="desc"?-1:1;return e.map(o=>({item:o,fqn:o.id.split(".")})).sort((o,i)=>{if(o.fqn.length!==i.fqn.length)return(o.fqn.length-i.fqn.length)*n;for(let a=0;ao)}var jb={},nB;function d0e(){return nB||(nB=1,jb.ARRAY_BUFFER_SUPPORT=typeof ArrayBuffer<"u",jb.SYMBOL_SUPPORT=typeof Symbol<"u"),jb}var R_,oB;function Ab(){if(oB)return R_;oB=1;var e=d0e(),r=e.ARRAY_BUFFER_SUPPORT,n=e.SYMBOL_SUPPORT;return R_=function(i,a){var l,s,c,d,u;if(!i)throw new Error("obliterator/forEach: invalid iterable.");if(typeof a!="function")throw new Error("obliterator/forEach: expecting a callback.");if(Array.isArray(i)||r&&ArrayBuffer.isView(i)||typeof i=="string"||i.toString()==="[object Arguments]"){for(c=0,d=i.length;c=n?{done:!0}:{done:!1,value:r[o++]}})},e.empty=function(){var r=new e(function(){return{done:!0}});return r},e.fromSequence=function(r){var n=0,o=r.length;return new e(function(){return n>=o?{done:!0}:{done:!1,value:r[n++]}})},e.is=function(r){return r instanceof e?!0:typeof r=="object"&&r!==null&&typeof r.next=="function"},z_=e,z_}const lB=-1,Db=0,r1=1,Pb=2,T_=3,j_=4,A_=5,D_=6,sB=7,cB=8,dB=typeof self=="object"?self:globalThis,u0e=(e,r)=>{const n=(i,a)=>(e.set(a,i),i),o=i=>{if(e.has(i))return e.get(i);const[a,l]=r[i];switch(a){case Db:case lB:return n(l,i);case r1:{const s=n([],i);for(const c of l)s.push(o(c));return s}case Pb:{const s=n({},i);for(const[c,d]of l)s[o(c)]=o(d);return s}case T_:return n(new Date(l),i);case j_:{const{source:s,flags:c}=l;return n(new RegExp(s,c),i)}case A_:{const s=n(new Map,i);for(const[c,d]of l)s.set(o(c),o(d));return s}case D_:{const s=n(new Set,i);for(const c of l)s.add(o(c));return s}case sB:{const{name:s,message:c}=l;return n(new dB[s](c),i)}case cB:return n(BigInt(l),i);case"BigInt":return n(Object(BigInt(l)),i);case"ArrayBuffer":return n(new Uint8Array(l).buffer,l);case"DataView":{const{buffer:s}=new Uint8Array(l);return n(new DataView(s),l)}}return n(new dB[a](l),i)};return o},uB=e=>u0e(new Map,e)(0),Bh="",{toString:p0e}={},{keys:h0e}=Object,n1=e=>{const r=typeof e;if(r!=="object"||!e)return[Db,r];const n=p0e.call(e).slice(8,-1);switch(n){case"Array":return[r1,Bh];case"Object":return[Pb,Bh];case"Date":return[T_,Bh];case"RegExp":return[j_,Bh];case"Map":return[A_,Bh];case"Set":return[D_,Bh];case"DataView":return[r1,n]}return n.includes("Array")?[r1,n]:n.includes("Error")?[sB,n]:[Pb,n]},Mb=([e,r])=>e===Db&&(r==="function"||r==="symbol"),f0e=(e,r,n,o)=>{const i=(l,s)=>{const c=o.push(l)-1;return n.set(s,c),c},a=l=>{if(n.has(l))return n.get(l);let[s,c]=n1(l);switch(s){case Db:{let u=l;switch(c){case"bigint":s=cB,u=l.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+c);u=null;break;case"undefined":return i([lB],l)}return i([s,u],l)}case r1:{if(c){let f=l;return c==="DataView"?f=new Uint8Array(l.buffer):c==="ArrayBuffer"&&(f=new Uint8Array(l)),i([c,[...f]],l)}const u=[],p=i([s,u],l);for(const f of l)u.push(a(f));return p}case Pb:{if(c)switch(c){case"BigInt":return i([c,l.toString()],l);case"Boolean":case"Number":case"String":return i([c,l.valueOf()],l)}if(r&&"toJSON"in l)return a(l.toJSON());const u=[],p=i([s,u],l);for(const f of h0e(l))(e||!Mb(n1(l[f])))&&u.push([a(f),a(l[f])]);return p}case T_:return i([s,l.toISOString()],l);case j_:{const{source:u,flags:p}=l;return i([s,{source:u,flags:p}],l)}case A_:{const u=[],p=i([s,u],l);for(const[f,m]of l)(e||!(Mb(n1(f))||Mb(n1(m))))&&u.push([a(f),a(m)]);return p}case D_:{const u=[],p=i([s,u],l);for(const f of l)(e||!Mb(n1(f)))&&u.push(a(f));return p}}const{message:d}=l;return i([s,{name:c,message:d}],l)};return a},pB=(e,{json:r,lossy:n}={})=>{const o=[];return f0e(!(r||n),!!r,new Map,o)(e),o},o1=typeof structuredClone=="function"?(e,r)=>r&&("json"in r||"lossy"in r)?uB(pB(e,r)):structuredClone(e):(e,r)=>uB(pB(e,r)),hB=gB("end"),fB=gB("start");function gB(e){return r;function r(n){const o=n&&n.position&&n.position[e]||{};if(typeof o.line=="number"&&o.line>0&&typeof o.column=="number"&&o.column>0)return{line:o.line,column:o.column,offset:typeof o.offset=="number"&&o.offset>-1?o.offset:void 0}}}function mB(e){const r=fB(e),n=hB(e);if(r&&n)return{start:r,end:n}}const Pu=["ariaDescribedBy","ariaLabel","ariaLabelledBy"],P_={ancestors:{tbody:["table"],td:["table"],th:["table"],thead:["table"],tfoot:["table"],tr:["table"]},attributes:{a:[...Pu,"dataFootnoteBackref","dataFootnoteRef",["className","data-footnote-backref"],"href"],blockquote:["cite"],code:[["className",/^language-./]],del:["cite"],div:["itemScope","itemType"],dl:[...Pu],h2:[["className","sr-only"]],img:[...Pu,"longDesc","src"],input:[["disabled",!0],["type","checkbox"]],ins:["cite"],li:[["className","task-list-item"]],ol:[...Pu,["className","contains-task-list"]],q:["cite"],section:["dataFootnotes",["className","footnotes"]],source:["srcSet"],summary:[...Pu],table:[...Pu],ul:[...Pu,["className","contains-task-list"]],"*":["abbr","accept","acceptCharset","accessKey","action","align","alt","axis","border","cellPadding","cellSpacing","char","charOff","charSet","checked","clear","colSpan","color","cols","compact","coords","dateTime","dir","encType","frame","hSpace","headers","height","hrefLang","htmlFor","id","isMap","itemProp","label","lang","maxLength","media","method","multiple","name","noHref","noShade","noWrap","open","prompt","readOnly","rev","rowSpan","rows","rules","scope","selected","shape","size","span","start","summary","tabIndex","title","useMap","vAlign","value","width"]},clobber:["ariaDescribedBy","ariaLabelledBy","id","name"],clobberPrefix:"user-content-",protocols:{cite:["http","https"],href:["http","https","irc","ircs","mailto","xmpp"],longDesc:["http","https"],src:["http","https"]},required:{input:{disabled:!0,type:"checkbox"}},strip:["script"],tagNames:["a","b","blockquote","br","code","dd","del","details","div","dl","dt","em","h1","h2","h3","h4","h5","h6","hr","i","img","input","ins","kbd","li","ol","p","picture","pre","q","rp","rt","ruby","s","samp","section","source","span","strike","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","tr","tt","ul","var"]},ed={}.hasOwnProperty;function g0e(e,r){let n={type:"root",children:[]};const o={schema:r?{...P_,...r}:P_,stack:[]},i=yB(o,e);return i&&(Array.isArray(i)?i.length===1?n=i[0]:n.children=i:n=i),n}function yB(e,r){if(r&&typeof r=="object"){const n=r;switch(typeof n.type=="string"?n.type:""){case"comment":return m0e(e,n);case"doctype":return y0e(e,n);case"element":return v0e(e,n);case"root":return b0e(e,n);case"text":return x0e(e,n)}}}function m0e(e,r){if(e.schema.allowComments){const n=typeof r.value=="string"?r.value:"",o=n.indexOf("-->"),a={type:"comment",value:o<0?n:n.slice(0,o)};return i1(a,r),a}}function y0e(e,r){if(e.schema.allowDoctypes){const n={type:"doctype"};return i1(n,r),n}}function v0e(e,r){const n=typeof r.tagName=="string"?r.tagName:"";e.stack.push(n);const o=vB(e,r.children),i=w0e(e,r.properties);e.stack.pop();let a=!1;if(n&&n!=="*"&&(!e.schema.tagNames||e.schema.tagNames.includes(n))&&(a=!0,e.schema.ancestors&&ed.call(e.schema.ancestors,n))){const s=e.schema.ancestors[n];let c=-1;for(a=!1;++c1){let i=!1,a=0;for(;++a-1&&a>c||l>-1&&a>l||s>-1&&a>s)return!0;let d=-1;for(;++d4&&r.slice(0,4).toLowerCase()==="data")return n}function S0e(e){return function(r){return g0e(r,e)}}const E0e=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"];class a1{constructor(r,n,o){this.normal=n,this.property=r,o&&(this.space=o)}}a1.prototype.normal={},a1.prototype.property={},a1.prototype.space=void 0;function kB(e,r){const n={},o={};for(const i of e)Object.assign(n,i.property),Object.assign(o,i.normal);return new a1(n,o,r)}function M_(e){return e.toLowerCase()}class Jo{constructor(r,n){this.attribute=n,this.property=r}}Jo.prototype.attribute="",Jo.prototype.booleanish=!1,Jo.prototype.boolean=!1,Jo.prototype.commaOrSpaceSeparated=!1,Jo.prototype.commaSeparated=!1,Jo.prototype.defined=!1,Jo.prototype.mustUseProperty=!1,Jo.prototype.number=!1,Jo.prototype.overloadedBoolean=!1,Jo.prototype.property="",Jo.prototype.spaceSeparated=!1,Jo.prototype.space=void 0;let C0e=0;const At=Mu(),bn=Mu(),_B=Mu(),Ie=Mu(),Cr=Mu(),Ih=Mu(),bi=Mu();function Mu(){return 2**++C0e}const N_={__proto__:null,boolean:At,booleanish:bn,commaOrSpaceSeparated:bi,commaSeparated:Ih,number:Ie,overloadedBoolean:_B,spaceSeparated:Cr},B_=Object.keys(N_);class I_ extends Jo{constructor(r,n,o,i){let a=-1;if(super(r,n),SB(this,"space",i),typeof o=="number")for(;++a4&&n.slice(0,4)==="data"&&T0e.test(r)){if(r.charAt(4)==="-"){const a=r.slice(5).replace(jB,D0e);o="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=r.slice(4);if(!jB.test(a)){let l=a.replace(z0e,A0e);l.charAt(0)!=="-"&&(l="-"+l),r="data"+l}}i=I_}return new i(o,r)}function A0e(e){return"-"+e.toLowerCase()}function D0e(e){return e.charAt(1).toUpperCase()}const P0e=kB([EB,$0e,RB,zB,TB],"html"),AB=kB([EB,R0e,RB,zB,TB],"svg"),DB={}.hasOwnProperty;function M0e(e,r){const n=r||{};function o(i,...a){let l=o.invalid;const s=o.handlers;if(i&&DB.call(i,e)){const c=String(i[e]);l=DB.call(s,c)?s[c]:o.unknown}if(l)return l.call(this,i,...a)}return o.handlers=n.handlers||{},o.invalid=n.invalid,o.unknown=n.unknown,o}const N0e=/["&'<>`]/g,B0e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,I0e=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,O0e=/[|\\{}()[\]^$+*?.]/g,PB=new WeakMap;function L0e(e,r){if(e=e.replace(r.subset?F0e(r.subset):N0e,o),r.subset||r.escapeOnly)return e;return e.replace(B0e,n).replace(I0e,o);function n(i,a,l){return r.format((i.charCodeAt(0)-55296)*1024+i.charCodeAt(1)-56320+65536,l.charCodeAt(a+2),r)}function o(i,a,l){return r.format(i.charCodeAt(0),l.charCodeAt(a+1),r)}}function F0e(e){let r=PB.get(e);return r||(r=V0e(e),PB.set(e,r)),r}function V0e(e){const r=[];let n=-1;for(;++n",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",permil:"‰",lsaquo:"‹",rsaquo:"›",euro:"€"},Y0e=["cent","copy","divide","gt","lt","not","para","times"],MB={}.hasOwnProperty,L_={};let Nb;for(Nb in O_)MB.call(O_,Nb)&&(L_[O_[Nb]]=Nb);const X0e=/[^\dA-Za-z]/;function K0e(e,r,n,o){const i=String.fromCharCode(e);if(MB.call(L_,i)){const a=L_[i],l="&"+a;return n&&G0e.includes(a)&&!Y0e.includes(a)&&(!o||r&&r!==61&&X0e.test(String.fromCharCode(r)))?l:l+";"}return""}function Z0e(e,r,n){let o=H0e(e,r,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=K0e(e,r,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){const a=W0e(e,r,n.omitOptionalSemicolons);a.length|^->||--!>|"],eve=["<",">"];function tve(e,r,n,o){return o.settings.bogusComments?"":"";function i(a){return Lh(a,Object.assign({},o.settings.characterReferences,{subset:eve}))}}function rve(e,r,n,o){return""}function Bb(e,r){const n=String(e);if(typeof r!="string")throw new TypeError("Expected character");let o=0,i=n.indexOf(r);for(;i!==-1;)o++,i=n.indexOf(r,i+r.length);return o}function nve(e,r){const n=r||{};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}function ove(e){return e.join(" ").trim()}const ive=/[ \t\n\f\r]/g;function F_(e){return typeof e=="object"?e.type==="text"?NB(e.value):!1:NB(e)}function NB(e){return e.replace(ive,"")===""}const On=IB(1),BB=IB(-1),ave=[];function IB(e){return r;function r(n,o,i){const a=n?n.children:ave;let l=(o||0)+e,s=a[l];if(!i)for(;s&&F_(s);)l+=e,s=a[l];return s}}const lve={}.hasOwnProperty;function OB(e){return r;function r(n,o,i){return lve.call(e,n.tagName)&&e[n.tagName](n,o,i)}}const V_=OB({body:cve,caption:q_,colgroup:q_,dd:hve,dt:pve,head:q_,html:sve,li:uve,optgroup:fve,option:gve,p:dve,rp:LB,rt:LB,tbody:yve,td:FB,tfoot:vve,th:FB,thead:mve,tr:bve});function q_(e,r,n){const o=On(n,r,!0);return!o||o.type!=="comment"&&!(o.type==="text"&&F_(o.value.charAt(0)))}function sve(e,r,n){const o=On(n,r);return!o||o.type!=="comment"}function cve(e,r,n){const o=On(n,r);return!o||o.type!=="comment"}function dve(e,r,n){const o=On(n,r);return o?o.type==="element"&&(o.tagName==="address"||o.tagName==="article"||o.tagName==="aside"||o.tagName==="blockquote"||o.tagName==="details"||o.tagName==="div"||o.tagName==="dl"||o.tagName==="fieldset"||o.tagName==="figcaption"||o.tagName==="figure"||o.tagName==="footer"||o.tagName==="form"||o.tagName==="h1"||o.tagName==="h2"||o.tagName==="h3"||o.tagName==="h4"||o.tagName==="h5"||o.tagName==="h6"||o.tagName==="header"||o.tagName==="hgroup"||o.tagName==="hr"||o.tagName==="main"||o.tagName==="menu"||o.tagName==="nav"||o.tagName==="ol"||o.tagName==="p"||o.tagName==="pre"||o.tagName==="section"||o.tagName==="table"||o.tagName==="ul"):!n||!(n.type==="element"&&(n.tagName==="a"||n.tagName==="audio"||n.tagName==="del"||n.tagName==="ins"||n.tagName==="map"||n.tagName==="noscript"||n.tagName==="video"))}function uve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&o.tagName==="li"}function pve(e,r,n){const o=On(n,r);return!!(o&&o.type==="element"&&(o.tagName==="dt"||o.tagName==="dd"))}function hve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&(o.tagName==="dt"||o.tagName==="dd")}function LB(e,r,n){const o=On(n,r);return!o||o.type==="element"&&(o.tagName==="rp"||o.tagName==="rt")}function fve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&o.tagName==="optgroup"}function gve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&(o.tagName==="option"||o.tagName==="optgroup")}function mve(e,r,n){const o=On(n,r);return!!(o&&o.type==="element"&&(o.tagName==="tbody"||o.tagName==="tfoot"))}function yve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&(o.tagName==="tbody"||o.tagName==="tfoot")}function vve(e,r,n){return!On(n,r)}function bve(e,r,n){const o=On(n,r);return!o||o.type==="element"&&o.tagName==="tr"}function FB(e,r,n){const o=On(n,r);return!o||o.type==="element"&&(o.tagName==="td"||o.tagName==="th")}const xve=OB({body:_ve,colgroup:Sve,head:kve,html:wve,tbody:Eve});function wve(e){const r=On(e,-1);return!r||r.type!=="comment"}function kve(e){const r=new Set;for(const o of e.children)if(o.type==="element"&&(o.tagName==="base"||o.tagName==="title")){if(r.has(o.tagName))return!1;r.add(o.tagName)}const n=e.children[0];return!n||n.type==="element"}function _ve(e){const r=On(e,-1,!0);return!r||r.type!=="comment"&&!(r.type==="text"&&F_(r.value.charAt(0)))&&!(r.type==="element"&&(r.tagName==="meta"||r.tagName==="link"||r.tagName==="script"||r.tagName==="style"||r.tagName==="template"))}function Sve(e,r,n){const o=BB(n,r),i=On(e,-1,!0);return n&&o&&o.type==="element"&&o.tagName==="colgroup"&&V_(o,n.children.indexOf(o),n)?!1:!!(i&&i.type==="element"&&i.tagName==="col")}function Eve(e,r,n){const o=BB(n,r),i=On(e,-1);return n&&o&&o.type==="element"&&(o.tagName==="thead"||o.tagName==="tbody")&&V_(o,n.children.indexOf(o),n)?!1:!!(i&&i.type==="element"&&i.tagName==="tr")}const Ib={name:[[` -\f\r &/=>`.split(""),` -\f\r "&'/=>\``.split("")],[`\0 -\f\r "&'/<=>`.split(""),`\0 -\f\r "&'/<=>\``.split("")]],unquoted:[[` -\f\r &>`.split(""),`\0 -\f\r "&'<=>\``.split("")],[`\0 -\f\r "&'<=>\``.split(""),`\0 -\f\r "&'<=>\``.split("")]],single:[["&'".split(""),"\"&'`".split("")],["\0&'".split(""),"\0\"&'`".split("")]],double:[['"&'.split(""),"\"&'`".split("")],['\0"&'.split(""),"\0\"&'`".split("")]]};function Cve(e,r,n,o){const i=o.schema,a=i.space==="svg"?!1:o.settings.omitOptionalTags;let l=i.space==="svg"?o.settings.closeEmptyElements:o.settings.voids.includes(e.tagName.toLowerCase());const s=[];let c;i.space==="html"&&e.tagName==="svg"&&(o.schema=AB);const d=$ve(o,e.properties),u=o.all(i.space==="html"&&e.tagName==="template"?e.content:e);return o.schema=i,u&&(l=!1),(d||!a||!xve(e,r,n))&&(s.push("<",e.tagName,d?" "+d:""),l&&(i.space==="svg"||o.settings.closeSelfClosing)&&(c=d.charAt(d.length-1),(!o.settings.tightSelfClosing||c==="/"||c&&c!=='"'&&c!=="'")&&s.push(" "),s.push("/")),s.push(">")),s.push(u),!l&&(!a||!V_(e,r,n))&&s.push(""),s.join("")}function $ve(e,r){const n=[];let o=-1,i;if(r){for(i in r)if(r[i]!==null&&r[i]!==void 0){const a=Rve(e,i,r[i]);a&&n.push(a)}}for(;++oBb(n,e.alternative)&&(l=e.alternative),s=l+Lh(n,Object.assign({},e.settings.characterReferences,{subset:(l==="'"?Ib.single:Ib.double)[i][a],attribute:!0}))+l),c+(s&&"="+s))}const zve=["<","&"];function VB(e,r,n,o){return n&&n.type==="element"&&(n.tagName==="script"||n.tagName==="style")?e.value:Lh(e.value,Object.assign({},o.settings.characterReferences,{subset:zve}))}function Tve(e,r,n,o){return o.settings.allowDangerousHtml?e.value:VB(e,r,n,o)}function jve(e,r,n,o){return o.all(e)}const Ave=M0e("type",{invalid:Dve,unknown:Pve,handlers:{comment:tve,doctype:rve,element:Cve,raw:Tve,root:jve,text:VB}});function Dve(e){throw new Error("Expected node, not `"+e+"`")}function Pve(e){const r=e;throw new Error("Cannot compile unknown node `"+r.type+"`")}const Mve={},Nve={},Bve=[];function Ive(e,r){const n=r||Mve,o=n.quote||'"',i=o==='"'?"'":'"';if(o!=='"'&&o!=="'")throw new Error("Invalid quote `"+o+"`, expected `'` or `\"`");return{one:Ove,all:Lve,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||E0e,characterReferences:n.characterReferences||Nve,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space==="svg"?AB:P0e,quote:o,alternative:i}.one(Array.isArray(e)?{type:"root",children:e}:e,void 0,void 0)}function Ove(e,r,n){return Ave(e,r,n,this)}function Lve(e){const r=[],n=e&&e.children||Bve;let o=-1;for(;++o-1&&e.test(String.fromCharCode(n))}}function Uve(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Fb=(function(e){if(e==null)return Xve;if(typeof e=="function")return Vb(e);if(typeof e=="object")return Array.isArray(e)?Wve(e):Gve(e);if(typeof e=="string")return Yve(e);throw new Error("Expected function, string, or object as test")});function Wve(e){const r=[];let n=-1;for(;++n":""))+")"})}return f;function f(){let m=qB,v,w,x;if((!r||a(c,d,u[u.length-1]||void 0))&&(m=Jve(n(c,u)),m[0]===U_))return m;if("children"in c&&c.children){const k=c;if(k.children&&m[0]!==Qve)for(w=(o?k.children.length:-1)+l,x=u.concat(k);w>-1&&w0?{type:"text",value:T}:void 0),T===!1?f.lastIndex=$+1:(v!==$&&C.push({type:"text",value:d.value.slice(v,$)}),Array.isArray(T)?C.push(...T):T&&C.push(T),v=$+_[0].length,k=!0),!f.global)break;_=f.exec(d.value)}return k?(v?\]}]+$/.exec(e);if(!r)return[e,void 0];e=e.slice(0,r.index);let n=r[0],o=n.indexOf(")");const i=Bb(e,"(");let a=Bb(e,")");for(;o!==-1&&i>a;)e+=n.slice(0,o+1),n=n.slice(o+1),o=n.indexOf(")"),a++;return[e,n]}function UB(e,r){const n=e.input.charCodeAt(e.index-1);return(e.index===0||Nu(n)||Lb(n))&&(!r||n!==47)}function Ua(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}WB.peek=Sbe;function mbe(){this.buffer()}function ybe(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function vbe(){this.buffer()}function bbe(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function xbe(e){const r=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ua(this.sliceSerialize(e)).toLowerCase(),n.label=r}function wbe(e){this.exit(e)}function kbe(e){const r=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ua(this.sliceSerialize(e)).toLowerCase(),n.label=r}function _be(e){this.exit(e)}function Sbe(){return"["}function WB(e,r,n,o){const i=n.createTracker(o);let a=i.move("[^");const l=n.enter("footnoteReference"),s=n.enter("reference");return a+=i.move(n.safe(n.associationId(e),{after:"]",before:a})),s(),l(),a+=i.move("]"),a}function Ebe(){return{enter:{gfmFootnoteCallString:mbe,gfmFootnoteCall:ybe,gfmFootnoteDefinitionLabelString:vbe,gfmFootnoteDefinition:bbe},exit:{gfmFootnoteCallString:xbe,gfmFootnoteCall:wbe,gfmFootnoteDefinitionLabelString:kbe,gfmFootnoteDefinition:_be}}}function Cbe(e){let r=!1;return e&&e.firstLineBlank&&(r=!0),{handlers:{footnoteDefinition:n,footnoteReference:WB},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(o,i,a,l){const s=a.createTracker(l);let c=s.move("[^");const d=a.enter("footnoteDefinition"),u=a.enter("label");return c+=s.move(a.safe(a.associationId(o),{before:c,after:"]"})),u(),c+=s.move("]:"),o.children&&o.children.length>0&&(s.shift(4),c+=s.move((r?` -`:" ")+a.indentLines(a.containerFlow(o,s.current()),r?GB:$be))),d(),c}}function $be(e,r,n){return r===0?e:GB(e,r,n)}function GB(e,r,n){return(n?"":" ")+e}const Rbe=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];YB.peek=Dbe;function zbe(){return{canContainEols:["delete"],enter:{strikethrough:jbe},exit:{strikethrough:Abe}}}function Tbe(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Rbe}],handlers:{delete:YB}}}function jbe(e){this.enter({type:"delete",children:[]},e)}function Abe(e){this.exit(e)}function YB(e,r,n,o){const i=n.createTracker(o),a=n.enter("strikethrough");let l=i.move("~~");return l+=n.containerPhrasing(e,{...i.current(),before:l,after:"~"}),l+=i.move("~~"),a(),l}function Dbe(){return"~"}function Pbe(e){return e.length}function Mbe(e,r){const n=r||{},o=(n.align||[]).concat(),i=n.stringLength||Pbe,a=[],l=[],s=[],c=[];let d=0,u=-1;for(;++ud&&(d=e[u].length);++kc[k])&&(c[k]=_)}w.push(C)}l[u]=w,s[u]=x}let p=-1;if(typeof o=="object"&&"length"in o)for(;++pc[p]&&(c[p]=C),m[p]=C),f[p]=_}l.splice(1,0,f),s.splice(1,0,m),u=-1;const v=[];for(;++u "),a.shift(2);const l=n.indentLines(n.containerFlow(e,a.current()),Ibe);return i(),l}function Ibe(e,r,n){return">"+(n?"":" ")+e}function Obe(e,r){return KB(e,r.inConstruct,!0)&&!KB(e,r.notInConstruct,!1)}function KB(e,r,n){if(typeof r=="string"&&(r=[r]),!r||r.length===0)return n;let o=-1;for(;++ol&&(l=a):a=1,i=o+r.length,o=n.indexOf(r,i);return l}function Fbe(e,r){return!!(r.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Vbe(e){const r=e.options.fence||"`";if(r!=="`"&&r!=="~")throw new Error("Cannot serialize code with `"+r+"` for `options.fence`, expected `` ` `` or `~`");return r}function qbe(e,r,n,o){const i=Vbe(n),a=e.value||"",l=i==="`"?"GraveAccent":"Tilde";if(Fbe(e,n)){const p=n.enter("codeIndented"),f=n.indentLines(a,Hbe);return p(),f}const s=n.createTracker(o),c=i.repeat(Math.max(Lbe(a,i)+1,3)),d=n.enter("codeFenced");let u=s.move(c);if(e.lang){const p=n.enter(`codeFencedLang${l}`);u+=s.move(n.safe(e.lang,{before:u,after:" ",encode:["`"],...s.current()})),p()}if(e.lang&&e.meta){const p=n.enter(`codeFencedMeta${l}`);u+=s.move(" "),u+=s.move(n.safe(e.meta,{before:u,after:` -`,encode:["`"],...s.current()})),p()}return u+=s.move(` -`),a&&(u+=s.move(a+` -`)),u+=s.move(c),d(),u}function Hbe(e,r,n){return(n?"":" ")+e}function X_(e){const r=e.options.quote||'"';if(r!=='"'&&r!=="'")throw new Error("Cannot serialize title with `"+r+"` for `options.quote`, expected `\"`, or `'`");return r}function Ube(e,r,n,o){const i=X_(n),a=i==='"'?"Quote":"Apostrophe",l=n.enter("definition");let s=n.enter("label");const c=n.createTracker(o);let d=c.move("[");return d+=c.move(n.safe(n.associationId(e),{before:d,after:"]",...c.current()})),d+=c.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),d+=c.move("<"),d+=c.move(n.safe(e.url,{before:d,after:">",...c.current()})),d+=c.move(">")):(s=n.enter("destinationRaw"),d+=c.move(n.safe(e.url,{before:d,after:e.title?" ":` -`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),d+=c.move(" "+i),d+=c.move(n.safe(e.title,{before:d,after:i,...c.current()})),d+=c.move(i),s()),l(),d}function Wbe(e){const r=e.options.emphasis||"*";if(r!=="*"&&r!=="_")throw new Error("Cannot serialize emphasis with `"+r+"` for `options.emphasis`, expected `*`, or `_`");return r}function l1(e){return"&#x"+e.toString(16).toUpperCase()+";"}function Fh(e){if(e===null||Sr(e)||Nu(e))return 1;if(Lb(e))return 2}function qb(e,r,n){const o=Fh(e),i=Fh(r);return o===void 0?i===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:o===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}QB.peek=Gbe;function QB(e,r,n,o){const i=Wbe(n),a=n.enter("emphasis"),l=n.createTracker(o),s=l.move(i);let c=l.move(n.containerPhrasing(e,{after:i,before:s,...l.current()}));const d=c.charCodeAt(0),u=qb(o.before.charCodeAt(o.before.length-1),d,i);u.inside&&(c=l1(d)+c.slice(1));const p=c.charCodeAt(c.length-1),f=qb(o.after.charCodeAt(0),p,i);f.inside&&(c=c.slice(0,-1)+l1(p));const m=l.move(i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+m}function Gbe(e,r,n){return n.options.emphasis||"*"}function K_(e,r,n,o){let i,a,l;typeof r=="function"&&typeof n!="function"?(a=void 0,l=r,i=n):(a=r,l=n,i=o),HB(e,a,s,i);function s(c,d){const u=d[d.length-1],p=u?u.children.indexOf(c):void 0;return l(c,p,u)}}const Ybe={};function Hb(e,r){const n=r||Ybe,o=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,i=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return JB(e,o,i)}function JB(e,r,n){if(Xbe(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(r&&"alt"in e&&e.alt)return e.alt;if("children"in e)return eI(e.children,r,n)}return Array.isArray(e)?eI(e,r,n):""}function eI(e,r,n){const o=[];let i=-1;for(;++i",...c.current()})),d+=c.move(">")):(s=n.enter("destinationRaw"),d+=c.move(n.safe(e.url,{before:d,after:e.title?" ":")",...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),d+=c.move(" "+i),d+=c.move(n.safe(e.title,{before:d,after:i,...c.current()})),d+=c.move(i),s()),d+=c.move(")"),l(),d}function Jbe(){return"!"}nI.peek=exe;function nI(e,r,n,o){const i=e.referenceType,a=n.enter("imageReference");let l=n.enter("label");const s=n.createTracker(o);let c=s.move("![");const d=n.safe(e.alt,{before:c,after:"]",...s.current()});c+=s.move(d+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const p=n.safe(n.associationId(e),{before:c,after:"]",...s.current()});return l(),n.stack=u,a(),i==="full"||!d||d!==p?c+=s.move(p+"]"):i==="shortcut"?c=c.slice(0,-1):c+=s.move("]"),c}function exe(){return"!"}oI.peek=txe;function oI(e,r,n){let o=e.value||"",i="`",a=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(o);)i+="`";for(/[^ \r\n]/.test(o)&&(/^[ \r\n]/.test(o)&&/[ \r\n]$/.test(o)||/^`|`$/.test(o))&&(o=" "+o+" ");++a\u007F]/.test(e.url))}aI.peek=rxe;function aI(e,r,n,o){const i=X_(n),a=i==='"'?"Quote":"Apostrophe",l=n.createTracker(o);let s,c;if(iI(e,n)){const u=n.stack;n.stack=[],s=n.enter("autolink");let p=l.move("<");return p+=l.move(n.containerPhrasing(e,{before:p,after:">",...l.current()})),p+=l.move(">"),s(),n.stack=u,p}s=n.enter("link"),c=n.enter("label");let d=l.move("[");return d+=l.move(n.containerPhrasing(e,{before:d,after:"](",...l.current()})),d+=l.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),d+=l.move("<"),d+=l.move(n.safe(e.url,{before:d,after:">",...l.current()})),d+=l.move(">")):(c=n.enter("destinationRaw"),d+=l.move(n.safe(e.url,{before:d,after:e.title?" ":")",...l.current()}))),c(),e.title&&(c=n.enter(`title${a}`),d+=l.move(" "+i),d+=l.move(n.safe(e.title,{before:d,after:i,...l.current()})),d+=l.move(i),c()),d+=l.move(")"),s(),d}function rxe(e,r,n){return iI(e,n)?"<":"["}lI.peek=nxe;function lI(e,r,n,o){const i=e.referenceType,a=n.enter("linkReference");let l=n.enter("label");const s=n.createTracker(o);let c=s.move("[");const d=n.containerPhrasing(e,{before:c,after:"]",...s.current()});c+=s.move(d+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const p=n.safe(n.associationId(e),{before:c,after:"]",...s.current()});return l(),n.stack=u,a(),i==="full"||!d||d!==p?c+=s.move(p+"]"):i==="shortcut"?c=c.slice(0,-1):c+=s.move("]"),c}function nxe(){return"["}function Z_(e){const r=e.options.bullet||"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bullet`, expected `*`, `+`, or `-`");return r}function oxe(e){const r=Z_(e),n=e.options.bulletOther;if(!n)return r==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===r)throw new Error("Expected `bullet` (`"+r+"`) and `bulletOther` (`"+n+"`) to be different");return n}function ixe(e){const r=e.options.bulletOrdered||".";if(r!=="."&&r!==")")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOrdered`, expected `.` or `)`");return r}function sI(e){const r=e.options.rule||"*";if(r!=="*"&&r!=="-"&&r!=="_")throw new Error("Cannot serialize rules with `"+r+"` for `options.rule`, expected `*`, `-`, or `_`");return r}function axe(e,r,n,o){const i=n.enter("list"),a=n.bulletCurrent;let l=e.ordered?ixe(n):Z_(n);const s=e.ordered?l==="."?")":".":oxe(n);let c=r&&n.bulletLastUsed?l===n.bulletLastUsed:!1;if(!e.ordered){const u=e.children?e.children[0]:void 0;if((l==="*"||l==="-")&&u&&(!u.children||!u.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),sI(n)===l&&u){let p=-1;for(;++p-1?r.start:1)+(n.options.incrementListMarker===!1?0:r.children.indexOf(e))+a);let l=a.length+1;(i==="tab"||i==="mixed"&&(r&&r.type==="list"&&r.spread||e.spread))&&(l=Math.ceil(l/4)*4);const s=n.createTracker(o);s.move(a+" ".repeat(l-a.length)),s.shift(l);const c=n.enter("listItem"),d=n.indentLines(n.containerFlow(e,s.current()),u);return c(),d;function u(p,f,m){return f?(m?"":" ".repeat(l))+p:(m?a:a+" ".repeat(l-a.length))+p}}function cxe(e,r,n,o){const i=n.enter("paragraph"),a=n.enter("phrasing"),l=n.containerPhrasing(e,o);return a(),i(),l}const dxe=Fb(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function uxe(e,r,n,o){return(e.children.some(function(l){return dxe(l)})?n.containerPhrasing:n.containerFlow).call(n,e,o)}function pxe(e){const r=e.options.strong||"*";if(r!=="*"&&r!=="_")throw new Error("Cannot serialize strong with `"+r+"` for `options.strong`, expected `*`, or `_`");return r}cI.peek=hxe;function cI(e,r,n,o){const i=pxe(n),a=n.enter("strong"),l=n.createTracker(o),s=l.move(i+i);let c=l.move(n.containerPhrasing(e,{after:i,before:s,...l.current()}));const d=c.charCodeAt(0),u=qb(o.before.charCodeAt(o.before.length-1),d,i);u.inside&&(c=l1(d)+c.slice(1));const p=c.charCodeAt(c.length-1),f=qb(o.after.charCodeAt(0),p,i);f.inside&&(c=c.slice(0,-1)+l1(p));const m=l.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+m}function hxe(e,r,n){return n.options.strong||"*"}function fxe(e,r,n,o){return n.safe(e.value,o)}function gxe(e){const r=e.options.ruleRepetition||3;if(r<3)throw new Error("Cannot serialize rules with repetition `"+r+"` for `options.ruleRepetition`, expected `3` or more");return r}function mxe(e,r,n){const o=(sI(n)+(n.options.ruleSpaces?" ":"")).repeat(gxe(n));return n.options.ruleSpaces?o.slice(0,-1):o}const dI={blockquote:Bbe,break:ZB,code:qbe,definition:Ube,emphasis:QB,hardBreak:ZB,heading:Zbe,html:tI,image:rI,imageReference:nI,inlineCode:oI,link:aI,linkReference:lI,list:axe,listItem:sxe,paragraph:cxe,root:uxe,strong:cI,text:fxe,thematicBreak:mxe},uI={AElig:"Æ",AMP:"&",Aacute:"Á",Abreve:"Ă",Acirc:"Â",Acy:"А",Afr:"𝔄",Agrave:"À",Alpha:"Α",Amacr:"Ā",And:"⩓",Aogon:"Ą",Aopf:"𝔸",ApplyFunction:"⁡",Aring:"Å",Ascr:"𝒜",Assign:"≔",Atilde:"Ã",Auml:"Ä",Backslash:"∖",Barv:"⫧",Barwed:"⌆",Bcy:"Б",Because:"∵",Bernoullis:"ℬ",Beta:"Β",Bfr:"𝔅",Bopf:"𝔹",Breve:"˘",Bscr:"ℬ",Bumpeq:"≎",CHcy:"Ч",COPY:"©",Cacute:"Ć",Cap:"⋒",CapitalDifferentialD:"ⅅ",Cayleys:"ℭ",Ccaron:"Č",Ccedil:"Ç",Ccirc:"Ĉ",Cconint:"∰",Cdot:"Ċ",Cedilla:"¸",CenterDot:"·",Cfr:"ℭ",Chi:"Χ",CircleDot:"⊙",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",Colon:"∷",Colone:"⩴",Congruent:"≡",Conint:"∯",ContourIntegral:"∮",Copf:"ℂ",Coproduct:"∐",CounterClockwiseContourIntegral:"∳",Cross:"⨯",Cscr:"𝒞",Cup:"⋓",CupCap:"≍",DD:"ⅅ",DDotrahd:"⤑",DJcy:"Ђ",DScy:"Ѕ",DZcy:"Џ",Dagger:"‡",Darr:"↡",Dashv:"⫤",Dcaron:"Ď",Dcy:"Д",Del:"∇",Delta:"Δ",Dfr:"𝔇",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",Diamond:"⋄",DifferentialD:"ⅆ",Dopf:"𝔻",Dot:"¨",DotDot:"⃜",DotEqual:"≐",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",Downarrow:"⇓",Dscr:"𝒟",Dstrok:"Đ",ENG:"Ŋ",ETH:"Ð",Eacute:"É",Ecaron:"Ě",Ecirc:"Ê",Ecy:"Э",Edot:"Ė",Efr:"𝔈",Egrave:"È",Element:"∈",Emacr:"Ē",EmptySmallSquare:"◻",EmptyVerySmallSquare:"▫",Eogon:"Ę",Eopf:"𝔼",Epsilon:"Ε",Equal:"⩵",EqualTilde:"≂",Equilibrium:"⇌",Escr:"ℰ",Esim:"⩳",Eta:"Η",Euml:"Ë",Exists:"∃",ExponentialE:"ⅇ",Fcy:"Ф",Ffr:"𝔉",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",Fopf:"𝔽",ForAll:"∀",Fouriertrf:"ℱ",Fscr:"ℱ",GJcy:"Ѓ",GT:">",Gamma:"Γ",Gammad:"Ϝ",Gbreve:"Ğ",Gcedil:"Ģ",Gcirc:"Ĝ",Gcy:"Г",Gdot:"Ġ",Gfr:"𝔊",Gg:"⋙",Gopf:"𝔾",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",Gt:"≫",HARDcy:"Ъ",Hacek:"ˇ",Hat:"^",Hcirc:"Ĥ",Hfr:"ℌ",HilbertSpace:"ℋ",Hopf:"ℍ",HorizontalLine:"─",Hscr:"ℋ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",IEcy:"Е",IJlig:"IJ",IOcy:"Ё",Iacute:"Í",Icirc:"Î",Icy:"И",Idot:"İ",Ifr:"ℑ",Igrave:"Ì",Im:"ℑ",Imacr:"Ī",ImaginaryI:"ⅈ",Implies:"⇒",Int:"∬",Integral:"∫",Intersection:"⋂",InvisibleComma:"⁣",InvisibleTimes:"⁢",Iogon:"Į",Iopf:"𝕀",Iota:"Ι",Iscr:"ℐ",Itilde:"Ĩ",Iukcy:"І",Iuml:"Ï",Jcirc:"Ĵ",Jcy:"Й",Jfr:"𝔍",Jopf:"𝕁",Jscr:"𝒥",Jsercy:"Ј",Jukcy:"Є",KHcy:"Х",KJcy:"Ќ",Kappa:"Κ",Kcedil:"Ķ",Kcy:"К",Kfr:"𝔎",Kopf:"𝕂",Kscr:"𝒦",LJcy:"Љ",LT:"<",Lacute:"Ĺ",Lambda:"Λ",Lang:"⟪",Laplacetrf:"ℒ",Larr:"↞",Lcaron:"Ľ",Lcedil:"Ļ",Lcy:"Л",LeftAngleBracket:"⟨",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",LeftRightArrow:"↔",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",Leftarrow:"⇐",Leftrightarrow:"⇔",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",LessLess:"⪡",LessSlantEqual:"⩽",LessTilde:"≲",Lfr:"𝔏",Ll:"⋘",Lleftarrow:"⇚",Lmidot:"Ŀ",LongLeftArrow:"⟵",LongLeftRightArrow:"⟷",LongRightArrow:"⟶",Longleftarrow:"⟸",Longleftrightarrow:"⟺",Longrightarrow:"⟹",Lopf:"𝕃",LowerLeftArrow:"↙",LowerRightArrow:"↘",Lscr:"ℒ",Lsh:"↰",Lstrok:"Ł",Lt:"≪",Map:"⤅",Mcy:"М",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",MinusPlus:"∓",Mopf:"𝕄",Mscr:"ℳ",Mu:"Μ",NJcy:"Њ",Nacute:"Ń",Ncaron:"Ň",Ncedil:"Ņ",Ncy:"Н",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:` -`,Nfr:"𝔑",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",Nscr:"𝒩",Ntilde:"Ñ",Nu:"Ν",OElig:"Œ",Oacute:"Ó",Ocirc:"Ô",Ocy:"О",Odblac:"Ő",Ofr:"𝔒",Ograve:"Ò",Omacr:"Ō",Omega:"Ω",Omicron:"Ο",Oopf:"𝕆",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",Or:"⩔",Oscr:"𝒪",Oslash:"Ø",Otilde:"Õ",Otimes:"⨷",Ouml:"Ö",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",PartialD:"∂",Pcy:"П",Pfr:"𝔓",Phi:"Φ",Pi:"Π",PlusMinus:"±",Poincareplane:"ℌ",Popf:"ℙ",Pr:"⪻",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",Prime:"″",Product:"∏",Proportion:"∷",Proportional:"∝",Pscr:"𝒫",Psi:"Ψ",QUOT:'"',Qfr:"𝔔",Qopf:"ℚ",Qscr:"𝒬",RBarr:"⤐",REG:"®",Racute:"Ŕ",Rang:"⟫",Rarr:"↠",Rarrtl:"⤖",Rcaron:"Ř",Rcedil:"Ŗ",Rcy:"Р",Re:"ℜ",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",Rfr:"ℜ",Rho:"Ρ",RightAngleBracket:"⟩",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",Rightarrow:"⇒",Ropf:"ℝ",RoundImplies:"⥰",Rrightarrow:"⇛",Rscr:"ℛ",Rsh:"↱",RuleDelayed:"⧴",SHCHcy:"Щ",SHcy:"Ш",SOFTcy:"Ь",Sacute:"Ś",Sc:"⪼",Scaron:"Š",Scedil:"Ş",Scirc:"Ŝ",Scy:"С",Sfr:"𝔖",ShortDownArrow:"↓",ShortLeftArrow:"←",ShortRightArrow:"→",ShortUpArrow:"↑",Sigma:"Σ",SmallCircle:"∘",Sopf:"𝕊",Sqrt:"√",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",Sscr:"𝒮",Star:"⋆",Sub:"⋐",Subset:"⋐",SubsetEqual:"⊆",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",SuchThat:"∋",Sum:"∑",Sup:"⋑",Superset:"⊃",SupersetEqual:"⊇",Supset:"⋑",THORN:"Þ",TRADE:"™",TSHcy:"Ћ",TScy:"Ц",Tab:" ",Tau:"Τ",Tcaron:"Ť",Tcedil:"Ţ",Tcy:"Т",Tfr:"𝔗",Therefore:"∴",Theta:"Θ",ThickSpace:"  ",ThinSpace:" ",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",Topf:"𝕋",TripleDot:"⃛",Tscr:"𝒯",Tstrok:"Ŧ",Uacute:"Ú",Uarr:"↟",Uarrocir:"⥉",Ubrcy:"Ў",Ubreve:"Ŭ",Ucirc:"Û",Ucy:"У",Udblac:"Ű",Ufr:"𝔘",Ugrave:"Ù",Umacr:"Ū",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",Uopf:"𝕌",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",UpEquilibrium:"⥮",UpTee:"⊥",UpTeeArrow:"↥",Uparrow:"⇑",Updownarrow:"⇕",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",Upsilon:"Υ",Uring:"Ů",Uscr:"𝒰",Utilde:"Ũ",Uuml:"Ü",VDash:"⊫",Vbar:"⫫",Vcy:"В",Vdash:"⊩",Vdashl:"⫦",Vee:"⋁",Verbar:"‖",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",Vopf:"𝕍",Vscr:"𝒱",Vvdash:"⊪",Wcirc:"Ŵ",Wedge:"⋀",Wfr:"𝔚",Wopf:"𝕎",Wscr:"𝒲",Xfr:"𝔛",Xi:"Ξ",Xopf:"𝕏",Xscr:"𝒳",YAcy:"Я",YIcy:"Ї",YUcy:"Ю",Yacute:"Ý",Ycirc:"Ŷ",Ycy:"Ы",Yfr:"𝔜",Yopf:"𝕐",Yscr:"𝒴",Yuml:"Ÿ",ZHcy:"Ж",Zacute:"Ź",Zcaron:"Ž",Zcy:"З",Zdot:"Ż",ZeroWidthSpace:"​",Zeta:"Ζ",Zfr:"ℨ",Zopf:"ℤ",Zscr:"𝒵",aacute:"á",abreve:"ă",ac:"∾",acE:"∾̳",acd:"∿",acirc:"â",acute:"´",acy:"а",aelig:"æ",af:"⁡",afr:"𝔞",agrave:"à",alefsym:"ℵ",aleph:"ℵ",alpha:"α",amacr:"ā",amalg:"⨿",amp:"&",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",aopf:"𝕒",ap:"≈",apE:"⩰",apacir:"⩯",ape:"≊",apid:"≋",apos:"'",approx:"≈",approxeq:"≊",aring:"å",ascr:"𝒶",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",auml:"ä",awconint:"∳",awint:"⨑",bNot:"⫭",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",barvee:"⊽",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",beta:"β",beth:"ℶ",between:"≬",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxDL:"╗",boxDR:"╔",boxDl:"╖",boxDr:"╓",boxH:"═",boxHD:"╦",boxHU:"╩",boxHd:"╤",boxHu:"╧",boxUL:"╝",boxUR:"╚",boxUl:"╜",boxUr:"╙",boxV:"║",boxVH:"╬",boxVL:"╣",boxVR:"╠",boxVh:"╫",boxVl:"╢",boxVr:"╟",boxbox:"⧉",boxdL:"╕",boxdR:"╒",boxdl:"┐",boxdr:"┌",boxh:"─",boxhD:"╥",boxhU:"╨",boxhd:"┬",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxuL:"╛",boxuR:"╘",boxul:"┘",boxur:"└",boxv:"│",boxvH:"╪",boxvL:"╡",boxvR:"╞",boxvh:"┼",boxvl:"┤",boxvr:"├",bprime:"‵",breve:"˘",brvbar:"¦",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",bumpeq:"≏",cacute:"ć",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",caps:"∩︀",caret:"⁁",caron:"ˇ",ccaps:"⩍",ccaron:"č",ccedil:"ç",ccirc:"ĉ",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",cedil:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",cfr:"𝔠",chcy:"ч",check:"✓",checkmark:"✓",chi:"χ",cir:"○",cirE:"⧃",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledR:"®",circledS:"Ⓢ",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",clubs:"♣",clubsuit:"♣",colon:":",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",conint:"∮",copf:"𝕔",coprod:"∐",copy:"©",copysr:"℗",crarr:"↵",cross:"✗",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",cupbrcap:"⩈",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dArr:"⇓",dHar:"⥥",dagger:"†",daleth:"ℸ",darr:"↓",dash:"‐",dashv:"⊣",dbkarow:"⤏",dblac:"˝",dcaron:"ď",dcy:"д",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",ddotseq:"⩷",deg:"°",delta:"δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",dharl:"⇃",dharr:"⇂",diam:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",dot:"˙",doteq:"≐",doteqdot:"≑",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",downarrow:"↓",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",dscy:"ѕ",dsol:"⧶",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",dzigrarr:"⟿",eDDot:"⩷",eDot:"≑",eacute:"é",easter:"⩮",ecaron:"ě",ecir:"≖",ecirc:"ê",ecolon:"≕",ecy:"э",edot:"ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",eg:"⪚",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",empty:"∅",emptyset:"∅",emptyv:"∅",emsp13:" ",emsp14:" ",emsp:" ",eng:"ŋ",ensp:" ",eogon:"ę",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",equals:"=",equest:"≟",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erDot:"≓",erarr:"⥱",escr:"ℯ",esdot:"≐",esim:"≂",eta:"η",eth:"ð",euml:"ë",euro:"€",excl:"!",exist:"∃",expectation:"ℰ",exponentiale:"ⅇ",fallingdotseq:"≒",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",filig:"fi",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",forall:"∀",fork:"⋔",forkv:"⫙",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",gE:"≧",gEl:"⪌",gacute:"ǵ",gamma:"γ",gammad:"ϝ",gap:"⪆",gbreve:"ğ",gcirc:"ĝ",gcy:"г",gdot:"ġ",ge:"≥",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",gg:"≫",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",gl:"≷",glE:"⪒",gla:"⪥",glj:"⪤",gnE:"≩",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",grave:"`",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",hArr:"⇔",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",harr:"↔",harrcir:"⥈",harrw:"↭",hbar:"ℏ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",horbar:"―",hscr:"𝒽",hslash:"ℏ",hstrok:"ħ",hybull:"⁃",hyphen:"‐",iacute:"í",ic:"⁣",icirc:"î",icy:"и",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",imacr:"ī",image:"ℑ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",intcal:"⊺",integers:"ℤ",intercal:"⊺",intlarhk:"⨗",intprod:"⨼",iocy:"ё",iogon:"į",iopf:"𝕚",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",isin:"∈",isinE:"⋹",isindot:"⋵",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",iukcy:"і",iuml:"ï",jcirc:"ĵ",jcy:"й",jfr:"𝔧",jmath:"ȷ",jopf:"𝕛",jscr:"𝒿",jsercy:"ј",jukcy:"є",kappa:"κ",kappav:"ϰ",kcedil:"ķ",kcy:"к",kfr:"𝔨",kgreen:"ĸ",khcy:"х",kjcy:"ќ",kopf:"𝕜",kscr:"𝓀",lAarr:"⇚",lArr:"⇐",lAtail:"⤛",lBarr:"⤎",lE:"≦",lEg:"⪋",lHar:"⥢",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",laquo:"«",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",late:"⪭",lates:"⪭︀",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",lcedil:"ļ",lceil:"⌈",lcub:"{",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",leftarrow:"←",leftarrowtail:"↢",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",leftthreetimes:"⋋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",lessgtr:"≶",lesssim:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",lg:"≶",lgE:"⪑",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",ll:"≪",llarr:"⇇",llcorner:"⌞",llhard:"⥫",lltri:"◺",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnE:"≨",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",longleftrightarrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltrPar:"⦖",ltri:"◃",ltrie:"⊴",ltrif:"◂",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",mDDot:"∺",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",mdash:"—",measuredangle:"∡",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",mp:"∓",mscr:"𝓂",mstpos:"∾",mu:"μ",multimap:"⊸",mumap:"⊸",nGg:"⋙̸",nGt:"≫⃒",nGtv:"≫̸",nLeftarrow:"⇍",nLeftrightarrow:"⇎",nLl:"⋘̸",nLt:"≪⃒",nLtv:"≪̸",nRightarrow:"⇏",nVDash:"⊯",nVdash:"⊮",nabla:"∇",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",ndash:"–",ne:"≠",neArr:"⇗",nearhk:"⤤",nearr:"↗",nearrow:"↗",nedot:"≐̸",nequiv:"≢",nesear:"⤨",nesim:"≂̸",nexist:"∄",nexists:"∄",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",ngsim:"≵",ngt:"≯",ngtr:"≯",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",nlArr:"⇍",nlE:"≦̸",nlarr:"↚",nldr:"‥",nle:"≰",nleftarrow:"↚",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nlsim:"≴",nlt:"≮",nltri:"⋪",nltrie:"⋬",nmid:"∤",nopf:"𝕟",not:"¬",notin:"∉",notinE:"⋹̸",notindot:"⋵̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",num:"#",numero:"№",numsp:" ",nvDash:"⊭",nvHarr:"⤄",nvap:"≍⃒",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwArr:"⇖",nwarhk:"⤣",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",oS:"Ⓢ",oacute:"ó",oast:"⊛",ocir:"⊚",ocirc:"ô",ocy:"о",odash:"⊝",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",ofcir:"⦿",ofr:"𝔬",ogon:"˛",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",omega:"ω",omicron:"ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",opar:"⦷",operp:"⦹",oplus:"⊕",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oscr:"ℴ",oslash:"ø",osol:"⊘",otilde:"õ",otimes:"⊗",otimesas:"⨶",ouml:"ö",ovbar:"⌽",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",pointint:"⨕",popf:"𝕡",pound:"£",pr:"≺",prE:"⪳",prap:"⪷",prcue:"≼",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",primes:"ℙ",prnE:"⪵",prnap:"⪹",prnsim:"⋨",prod:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",psi:"ψ",puncsp:" ",qfr:"𝔮",qint:"⨌",qopf:"𝕢",qprime:"⁗",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',rAarr:"⇛",rArr:"⇒",rAtail:"⤜",rBarr:"⤏",rHar:"⥤",race:"∽̱",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",rarrw:"↝",ratail:"⤚",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",rcedil:"ŗ",rceil:"⌉",rcub:"}",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",rhov:"ϱ",rightarrow:"→",rightarrowtail:"↣",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",rightthreetimes:"⋌",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",rsaquo:"›",rscr:"𝓇",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",ruluhar:"⥨",rx:"℞",sacute:"ś",sbquo:"‚",sc:"≻",scE:"⪴",scap:"⪸",scaron:"š",sccue:"≽",sce:"⪰",scedil:"ş",scirc:"ŝ",scnE:"⪶",scnap:"⪺",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",seArr:"⇘",searhk:"⤥",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",sfrown:"⌢",sharp:"♯",shchcy:"щ",shcy:"ш",shortmid:"∣",shortparallel:"∥",shy:"­",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",subE:"⫅",subdot:"⪽",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",supE:"⫆",supdot:"⪾",supdsub:"⫘",supe:"⊇",supedot:"⫄",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swArr:"⇙",swarhk:"⤦",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",target:"⌖",tau:"τ",tbrk:"⎴",tcaron:"ť",tcedil:"ţ",tcy:"т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",there4:"∴",therefore:"∴",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",thinsp:" ",thkap:"≈",thksim:"∼",thorn:"þ",tilde:"˜",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",tscy:"ц",tshcy:"ћ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uArr:"⇑",uHar:"⥣",uacute:"ú",uarr:"↑",ubrcy:"ў",ubreve:"ŭ",ucirc:"û",ucy:"у",udarr:"⇅",udblac:"ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",ugrave:"ù",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",uml:"¨",uogon:"ų",uopf:"𝕦",uparrow:"↑",updownarrow:"↕",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",upsi:"υ",upsih:"ϒ",upsilon:"υ",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",urtri:"◹",uscr:"𝓊",utdot:"⋰",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",uwangle:"⦧",vArr:"⇕",vBar:"⫨",vBarv:"⫩",vDash:"⊨",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vcy:"в",vdash:"⊢",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",vert:"|",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",vprop:"∝",vrtri:"⊳",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",vzigzag:"⦚",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",wedgeq:"≙",weierp:"℘",wfr:"𝔴",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",yacy:"я",ycirc:"ŷ",ycy:"ы",yen:"¥",yfr:"𝔶",yicy:"ї",yopf:"𝕪",yscr:"𝓎",yucy:"ю",yuml:"ÿ",zacute:"ź",zcaron:"ž",zcy:"з",zdot:"ż",zeetrf:"ℨ",zeta:"ζ",zfr:"𝔷",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",zscr:"𝓏",zwj:"‍",zwnj:"‌"},yxe={}.hasOwnProperty;function Q_(e){return yxe.call(uI,e)?uI[e]:!1}function pI(e,r){const n=Number.parseInt(e,r);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}const vxe=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function bxe(e){return e.replace(vxe,xxe)}function xxe(e,r,n){if(r)return r;if(n.charCodeAt(0)===35){const i=n.charCodeAt(1),a=i===120||i===88;return pI(n.slice(a?2:1),a?16:10)}return Q_(n)||e}function wxe(){return{enter:{table:kxe,tableData:hI,tableHeader:hI,tableRow:Sxe},exit:{codeText:Exe,table:_xe,tableData:J_,tableHeader:J_,tableRow:J_}}}function kxe(e){const r=e._align;this.enter({type:"table",align:r.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function _xe(e){this.exit(e),this.data.inTable=void 0}function Sxe(e){this.enter({type:"tableRow",children:[]},e)}function J_(e){this.exit(e)}function hI(e){this.enter({type:"tableCell",children:[]},e)}function Exe(e){let r=this.resume();this.data.inTable&&(r=r.replace(/\\([\\|])/g,Cxe));const n=this.stack[this.stack.length-1];n.type,n.value=r,this.exit(e)}function Cxe(e,r){return r==="|"?r:e}function $xe(e){const r=e||{},n=r.tableCellPadding,o=r.tablePipeAlign,i=r.stringLength,a=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:l,tableCell:c,tableRow:s}};function l(m,v,w,x){return d(u(m,w,x),m.align)}function s(m,v,w,x){const k=p(m,w,x),C=d([k]);return C.slice(0,C.indexOf(` -`))}function c(m,v,w,x){const k=w.enter("tableCell"),C=w.enter("phrasing"),_=w.containerPhrasing(m,{...x,before:a,after:a});return C(),k(),_}function d(m,v){return Mbe(m,{align:v,alignDelimiters:o,padding:n,stringLength:i})}function u(m,v,w){const x=m.children;let k=-1;const C=[],_=v.enter("table");for(;++ki?0:i+r:r=r>i?i:r,n=n>0?n:0,o.length<1e4)l=Array.from(o),l.unshift(r,n),e.splice(...l);else for(n&&e.splice(r,n);a0?(xi(e,e.length,0,r),e):r}const gI={}.hasOwnProperty;function mI(e){const r={};let n=-1;for(;++n0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}function Vh(e){const r=[];let n=-1,o=0,i=0;for(;++n55295&&a<57344){const s=e.charCodeAt(n+1);a<56320&&s>56319&&s<57344?(l=String.fromCharCode(a,s),i=1):l="�"}else l=String.fromCharCode(a);l&&(r.push(e.slice(o,n),encodeURIComponent(l)),o=n+i+1,l=""),i&&(n+=i,i=0)}return r.join("")+e.slice(o)}function Ub(e,r,n){const o=[];let i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const p={...e[o][1].end},f={...e[n][1].start};EI(p,-c),EI(f,c),l={type:c>1?"strongSequence":"emphasisSequence",start:p,end:{...e[o][1].end}},s={type:c>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:f},a={type:c>1?"strongText":"emphasisText",start:{...e[o][1].end},end:{...e[n][1].start}},i={type:c>1?"strong":"emphasis",start:{...l.start},end:{...s.end}},e[o][1].end={...l.start},e[n][1].start={...s.end},d=[],e[o][1].end.offset-e[o][1].start.offset&&(d=Qi(d,[["enter",e[o][1],r],["exit",e[o][1],r]])),d=Qi(d,[["enter",i,r],["enter",l,r],["exit",l,r],["enter",a,r]]),d=Qi(d,Ub(r.parser.constructs.insideSpan.null,e.slice(o+1,n),r)),d=Qi(d,[["exit",a,r],["enter",s,r],["exit",s,r],["exit",i,r]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,d=Qi(d,[["enter",e[n][1],r],["exit",e[n][1],r]])):u=0,xi(e,o-1,n-o+3,d),n=o+d.length-u-2;break}}for(n=-1;++n0&&Vt(T)?Zt(e,C,"linePrefix",a+1)(T):C(T)}function C(T){return T===null||mt(T)?e.check(zI,w,$)(T):(e.enter("codeFlowValue"),_(T))}function _(T){return T===null||mt(T)?(e.exit("codeFlowValue"),C(T)):(e.consume(T),_)}function $(T){return e.exit("codeFenced"),r(T)}function R(T,A,z){let j=0;return I;function I(V){return T.enter("lineEnding"),T.consume(V),T.exit("lineEnding"),N}function N(V){return T.enter("codeFencedFence"),Vt(V)?Zt(T,L,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(V):L(V)}function L(V){return V===s?(T.enter("codeFencedFenceSequence"),H(V)):z(V)}function H(V){return V===s?(j++,T.consume(V),H):j>=l?(T.exit("codeFencedFenceSequence"),Vt(V)?Zt(T,P,"whitespace")(V):P(V)):z(V)}function P(V){return V===null||mt(V)?(T.exit("codeFencedFence"),A(V)):z(V)}}}function owe(e,r,n){const o=this;return i;function i(l){return l===null?n(l):(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a)}function a(l){return o.parser.lazy[o.now().line]?n(l):r(l)}}const n8={name:"codeIndented",tokenize:awe},iwe={partial:!0,tokenize:lwe};function awe(e,r,n){const o=this;return i;function i(d){return e.enter("codeIndented"),Zt(e,a,"linePrefix",5)(d)}function a(d){const u=o.events[o.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?l(d):n(d)}function l(d){return d===null?c(d):mt(d)?e.attempt(iwe,l,c)(d):(e.enter("codeFlowValue"),s(d))}function s(d){return d===null||mt(d)?(e.exit("codeFlowValue"),l(d)):(e.consume(d),s)}function c(d){return e.exit("codeIndented"),r(d)}}function lwe(e,r,n){const o=this;return i;function i(l){return o.parser.lazy[o.now().line]?n(l):mt(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),i):Zt(e,a,"linePrefix",5)(l)}function a(l){const s=o.events[o.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?r(l):mt(l)?i(l):n(l)}}const swe={name:"codeText",previous:dwe,resolve:cwe,tokenize:uwe};function cwe(e){let r=e.length-4,n=3,o,i;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[r][1].type==="lineEnding"||e[r][1].type==="space")){for(o=n;++o=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+r+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return rthis.left.length?this.right.slice(this.right.length-o+this.left.length,this.right.length-r+this.left.length).reverse():this.left.slice(r).concat(this.right.slice(this.right.length-o+this.left.length).reverse())}splice(r,n,o){const i=n||0;this.setCursor(Math.trunc(r));const a=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return o&&c1(this.left,o),a.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(r){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(r)}pushMany(r){this.setCursor(Number.POSITIVE_INFINITY),c1(this.left,r)}unshift(r){this.setCursor(0),this.right.push(r)}unshiftMany(r){this.setCursor(0),c1(this.right,r.reverse())}setCursor(r){if(!(r===this.left.length||r>this.left.length&&this.right.length===0||r<0&&this.left.length===0))if(r=4?r(l):e.interrupt(o.parser.constructs.flow,n,r)(l)}}function AI(e,r,n,o,i,a,l,s,c){const d=c||Number.POSITIVE_INFINITY;let u=0;return p;function p(k){return k===60?(e.enter(o),e.enter(i),e.enter(a),e.consume(k),e.exit(a),f):k===null||k===32||k===41||Ob(k)?n(k):(e.enter(o),e.enter(l),e.enter(s),e.enter("chunkString",{contentType:"string"}),w(k))}function f(k){return k===62?(e.enter(a),e.consume(k),e.exit(a),e.exit(i),e.exit(o),r):(e.enter(s),e.enter("chunkString",{contentType:"string"}),m(k))}function m(k){return k===62?(e.exit("chunkString"),e.exit(s),f(k)):k===null||k===60||mt(k)?n(k):(e.consume(k),k===92?v:m)}function v(k){return k===60||k===62||k===92?(e.consume(k),m):m(k)}function w(k){return!u&&(k===null||k===41||Sr(k))?(e.exit("chunkString"),e.exit(s),e.exit(l),e.exit(o),r(k)):u999||m===null||m===91||m===93&&!c||m===94&&!s&&"_hiddenFootnoteSupport"in l.parser.constructs?n(m):m===93?(e.exit(a),e.enter(i),e.consume(m),e.exit(i),e.exit(o),r):mt(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),u):(e.enter("chunkString",{contentType:"string"}),p(m))}function p(m){return m===null||m===91||m===93||mt(m)||s++>999?(e.exit("chunkString"),u(m)):(e.consume(m),c||(c=!Vt(m)),m===92?f:p)}function f(m){return m===91||m===92||m===93?(e.consume(m),s++,p):p(m)}}function PI(e,r,n,o,i,a){let l;return s;function s(f){return f===34||f===39||f===40?(e.enter(o),e.enter(i),e.consume(f),e.exit(i),l=f===40?41:f,c):n(f)}function c(f){return f===l?(e.enter(i),e.consume(f),e.exit(i),e.exit(o),r):(e.enter(a),d(f))}function d(f){return f===l?(e.exit(a),c(l)):f===null?n(f):mt(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),Zt(e,d,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),u(f))}function u(f){return f===l||f===null||mt(f)?(e.exit("chunkString"),d(f)):(e.consume(f),f===92?p:u)}function p(f){return f===l||f===92?(e.consume(f),u):u(f)}}function d1(e,r){let n;return o;function o(i){return mt(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,o):Vt(i)?Zt(e,o,n?"linePrefix":"lineSuffix")(i):r(i)}}const bwe={name:"definition",tokenize:wwe},xwe={partial:!0,tokenize:kwe};function wwe(e,r,n){const o=this;let i;return a;function a(m){return e.enter("definition"),l(m)}function l(m){return DI.call(o,e,s,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(m)}function s(m){return i=Ua(o.sliceSerialize(o.events[o.events.length-1][1]).slice(1,-1)),m===58?(e.enter("definitionMarker"),e.consume(m),e.exit("definitionMarker"),c):n(m)}function c(m){return Sr(m)?d1(e,d)(m):d(m)}function d(m){return AI(e,u,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(m)}function u(m){return e.attempt(xwe,p,p)(m)}function p(m){return Vt(m)?Zt(e,f,"whitespace")(m):f(m)}function f(m){return m===null||mt(m)?(e.exit("definition"),o.parser.defined.push(i),r(m)):n(m)}}function kwe(e,r,n){return o;function o(s){return Sr(s)?d1(e,i)(s):n(s)}function i(s){return PI(e,a,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function a(s){return Vt(s)?Zt(e,l,"whitespace")(s):l(s)}function l(s){return s===null||mt(s)?r(s):n(s)}}const _we={name:"hardBreakEscape",tokenize:Swe};function Swe(e,r,n){return o;function o(a){return e.enter("hardBreakEscape"),e.consume(a),i}function i(a){return mt(a)?(e.exit("hardBreakEscape"),r(a)):n(a)}}const Ewe={name:"headingAtx",resolve:Cwe,tokenize:$we};function Cwe(e,r){let n=e.length-2,o=3,i,a;return e[o][1].type==="whitespace"&&(o+=2),n-2>o&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(o===n-1||n-4>o&&e[n-2][1].type==="whitespace")&&(n-=o+1===n?2:4),n>o&&(i={type:"atxHeadingText",start:e[o][1].start,end:e[n][1].end},a={type:"chunkText",start:e[o][1].start,end:e[n][1].end,contentType:"text"},xi(e,o,n-o+1,[["enter",i,r],["enter",a,r],["exit",a,r],["exit",i,r]])),e}function $we(e,r,n){let o=0;return i;function i(u){return e.enter("atxHeading"),a(u)}function a(u){return e.enter("atxHeadingSequence"),l(u)}function l(u){return u===35&&o++<6?(e.consume(u),l):u===null||Sr(u)?(e.exit("atxHeadingSequence"),s(u)):n(u)}function s(u){return u===35?(e.enter("atxHeadingSequence"),c(u)):u===null||mt(u)?(e.exit("atxHeading"),r(u)):Vt(u)?Zt(e,s,"whitespace")(u):(e.enter("atxHeadingText"),d(u))}function c(u){return u===35?(e.consume(u),c):(e.exit("atxHeadingSequence"),s(u))}function d(u){return u===null||u===35||Sr(u)?(e.exit("atxHeadingText"),s(u)):(e.consume(u),d)}}const Rwe=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],MI=["pre","script","style","textarea"],zwe={concrete:!0,name:"htmlFlow",resolveTo:Awe,tokenize:Dwe},Twe={partial:!0,tokenize:Mwe},jwe={partial:!0,tokenize:Pwe};function Awe(e){let r=e.length;for(;r--&&!(e[r][0]==="enter"&&e[r][1].type==="htmlFlow"););return r>1&&e[r-2][1].type==="linePrefix"&&(e[r][1].start=e[r-2][1].start,e[r+1][1].start=e[r-2][1].start,e.splice(r-2,2)),e}function Dwe(e,r,n){const o=this;let i,a,l,s,c;return d;function d(O){return u(O)}function u(O){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(O),p}function p(O){return O===33?(e.consume(O),f):O===47?(e.consume(O),a=!0,w):O===63?(e.consume(O),i=3,o.interrupt?r:U):Bo(O)?(e.consume(O),l=String.fromCharCode(O),x):n(O)}function f(O){return O===45?(e.consume(O),i=2,m):O===91?(e.consume(O),i=5,s=0,v):Bo(O)?(e.consume(O),i=4,o.interrupt?r:U):n(O)}function m(O){return O===45?(e.consume(O),o.interrupt?r:U):n(O)}function v(O){const W="CDATA[";return O===W.charCodeAt(s++)?(e.consume(O),s===W.length?o.interrupt?r:L:v):n(O)}function w(O){return Bo(O)?(e.consume(O),l=String.fromCharCode(O),x):n(O)}function x(O){if(O===null||O===47||O===62||Sr(O)){const W=O===47,Z=l.toLowerCase();return!W&&!a&&MI.includes(Z)?(i=1,o.interrupt?r(O):L(O)):Rwe.includes(l.toLowerCase())?(i=6,W?(e.consume(O),k):o.interrupt?r(O):L(O)):(i=7,o.interrupt&&!o.parser.lazy[o.now().line]?n(O):a?C(O):_(O))}return O===45||xo(O)?(e.consume(O),l+=String.fromCharCode(O),x):n(O)}function k(O){return O===62?(e.consume(O),o.interrupt?r:L):n(O)}function C(O){return Vt(O)?(e.consume(O),C):I(O)}function _(O){return O===47?(e.consume(O),I):O===58||O===95||Bo(O)?(e.consume(O),$):Vt(O)?(e.consume(O),_):I(O)}function $(O){return O===45||O===46||O===58||O===95||xo(O)?(e.consume(O),$):R(O)}function R(O){return O===61?(e.consume(O),T):Vt(O)?(e.consume(O),R):_(O)}function T(O){return O===null||O===60||O===61||O===62||O===96?n(O):O===34||O===39?(e.consume(O),c=O,A):Vt(O)?(e.consume(O),T):z(O)}function A(O){return O===c?(e.consume(O),c=null,j):O===null||mt(O)?n(O):(e.consume(O),A)}function z(O){return O===null||O===34||O===39||O===47||O===60||O===61||O===62||O===96||Sr(O)?R(O):(e.consume(O),z)}function j(O){return O===47||O===62||Vt(O)?_(O):n(O)}function I(O){return O===62?(e.consume(O),N):n(O)}function N(O){return O===null||mt(O)?L(O):Vt(O)?(e.consume(O),N):n(O)}function L(O){return O===45&&i===2?(e.consume(O),B):O===60&&i===1?(e.consume(O),F):O===62&&i===4?(e.consume(O),Y):O===63&&i===3?(e.consume(O),U):O===93&&i===5?(e.consume(O),G):mt(O)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(Twe,K,H)(O)):O===null||mt(O)?(e.exit("htmlFlowData"),H(O)):(e.consume(O),L)}function H(O){return e.check(jwe,P,K)(O)}function P(O){return e.enter("lineEnding"),e.consume(O),e.exit("lineEnding"),V}function V(O){return O===null||mt(O)?H(O):(e.enter("htmlFlowData"),L(O))}function B(O){return O===45?(e.consume(O),U):L(O)}function F(O){return O===47?(e.consume(O),l="",q):L(O)}function q(O){if(O===62){const W=l.toLowerCase();return MI.includes(W)?(e.consume(O),Y):L(O)}return Bo(O)&&l.length<8?(e.consume(O),l+=String.fromCharCode(O),q):L(O)}function G(O){return O===93?(e.consume(O),U):L(O)}function U(O){return O===62?(e.consume(O),Y):O===45&&i===2?(e.consume(O),U):L(O)}function Y(O){return O===null||mt(O)?(e.exit("htmlFlowData"),K(O)):(e.consume(O),Y)}function K(O){return e.exit("htmlFlow"),r(O)}}function Pwe(e,r,n){const o=this;return i;function i(l){return mt(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a):n(l)}function a(l){return o.parser.lazy[o.now().line]?n(l):r(l)}}function Mwe(e,r,n){return o;function o(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(s1,r,n)}}const Nwe={name:"htmlText",tokenize:Bwe};function Bwe(e,r,n){const o=this;let i,a,l;return s;function s(U){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(U),c}function c(U){return U===33?(e.consume(U),d):U===47?(e.consume(U),R):U===63?(e.consume(U),_):Bo(U)?(e.consume(U),z):n(U)}function d(U){return U===45?(e.consume(U),u):U===91?(e.consume(U),a=0,v):Bo(U)?(e.consume(U),C):n(U)}function u(U){return U===45?(e.consume(U),m):n(U)}function p(U){return U===null?n(U):U===45?(e.consume(U),f):mt(U)?(l=p,F(U)):(e.consume(U),p)}function f(U){return U===45?(e.consume(U),m):p(U)}function m(U){return U===62?B(U):U===45?f(U):p(U)}function v(U){const Y="CDATA[";return U===Y.charCodeAt(a++)?(e.consume(U),a===Y.length?w:v):n(U)}function w(U){return U===null?n(U):U===93?(e.consume(U),x):mt(U)?(l=w,F(U)):(e.consume(U),w)}function x(U){return U===93?(e.consume(U),k):w(U)}function k(U){return U===62?B(U):U===93?(e.consume(U),k):w(U)}function C(U){return U===null||U===62?B(U):mt(U)?(l=C,F(U)):(e.consume(U),C)}function _(U){return U===null?n(U):U===63?(e.consume(U),$):mt(U)?(l=_,F(U)):(e.consume(U),_)}function $(U){return U===62?B(U):_(U)}function R(U){return Bo(U)?(e.consume(U),T):n(U)}function T(U){return U===45||xo(U)?(e.consume(U),T):A(U)}function A(U){return mt(U)?(l=A,F(U)):Vt(U)?(e.consume(U),A):B(U)}function z(U){return U===45||xo(U)?(e.consume(U),z):U===47||U===62||Sr(U)?j(U):n(U)}function j(U){return U===47?(e.consume(U),B):U===58||U===95||Bo(U)?(e.consume(U),I):mt(U)?(l=j,F(U)):Vt(U)?(e.consume(U),j):B(U)}function I(U){return U===45||U===46||U===58||U===95||xo(U)?(e.consume(U),I):N(U)}function N(U){return U===61?(e.consume(U),L):mt(U)?(l=N,F(U)):Vt(U)?(e.consume(U),N):j(U)}function L(U){return U===null||U===60||U===61||U===62||U===96?n(U):U===34||U===39?(e.consume(U),i=U,H):mt(U)?(l=L,F(U)):Vt(U)?(e.consume(U),L):(e.consume(U),P)}function H(U){return U===i?(e.consume(U),i=void 0,V):U===null?n(U):mt(U)?(l=H,F(U)):(e.consume(U),H)}function P(U){return U===null||U===34||U===39||U===60||U===61||U===96?n(U):U===47||U===62||Sr(U)?j(U):(e.consume(U),P)}function V(U){return U===47||U===62||Sr(U)?j(U):n(U)}function B(U){return U===62?(e.consume(U),e.exit("htmlTextData"),e.exit("htmlText"),r):n(U)}function F(U){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(U),e.exit("lineEnding"),q}function q(U){return Vt(U)?Zt(e,G,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(U):G(U)}function G(U){return e.enter("htmlTextData"),l(U)}}const o8={name:"labelEnd",resolveAll:Fwe,resolveTo:Vwe,tokenize:qwe},Iwe={tokenize:Hwe},Owe={tokenize:Uwe},Lwe={tokenize:Wwe};function Fwe(e){let r=-1;const n=[];for(;++r=3&&(d===null||mt(d))?(e.exit("thematicBreak"),r(d)):n(d)}function c(d){return d===i?(e.consume(d),o++,c):(e.exit("thematicBreakSequence"),Vt(d)?Zt(e,s,"whitespace")(d):s(d))}}const ei={continuation:{tokenize:r3e},exit:o3e,name:"list",tokenize:t3e},Jwe={partial:!0,tokenize:i3e},e3e={partial:!0,tokenize:n3e};function t3e(e,r,n){const o=this,i=o.events[o.events.length-1];let a=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,l=0;return s;function s(m){const v=o.containerState.type||(m===42||m===43||m===45?"listUnordered":"listOrdered");if(v==="listUnordered"?!o.containerState.marker||m===o.containerState.marker:H_(m)){if(o.containerState.type||(o.containerState.type=v,e.enter(v,{_container:!0})),v==="listUnordered")return e.enter("listItemPrefix"),m===42||m===45?e.check(Wb,n,d)(m):d(m);if(!o.interrupt||m===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(m)}return n(m)}function c(m){return H_(m)&&++l<10?(e.consume(m),c):(!o.interrupt||l<2)&&(o.containerState.marker?m===o.containerState.marker:m===41||m===46)?(e.exit("listItemValue"),d(m)):n(m)}function d(m){return e.enter("listItemMarker"),e.consume(m),e.exit("listItemMarker"),o.containerState.marker=o.containerState.marker||m,e.check(s1,o.interrupt?n:u,e.attempt(Jwe,f,p))}function u(m){return o.containerState.initialBlankLine=!0,a++,f(m)}function p(m){return Vt(m)?(e.enter("listItemPrefixWhitespace"),e.consume(m),e.exit("listItemPrefixWhitespace"),f):n(m)}function f(m){return o.containerState.size=a+o.sliceSerialize(e.exit("listItemPrefix"),!0).length,r(m)}}function r3e(e,r,n){const o=this;return o.containerState._closeFlow=void 0,e.check(s1,i,a);function i(s){return o.containerState.furtherBlankLines=o.containerState.furtherBlankLines||o.containerState.initialBlankLine,Zt(e,r,"listItemIndent",o.containerState.size+1)(s)}function a(s){return o.containerState.furtherBlankLines||!Vt(s)?(o.containerState.furtherBlankLines=void 0,o.containerState.initialBlankLine=void 0,l(s)):(o.containerState.furtherBlankLines=void 0,o.containerState.initialBlankLine=void 0,e.attempt(e3e,r,l)(s))}function l(s){return o.containerState._closeFlow=!0,o.interrupt=void 0,Zt(e,e.attempt(ei,r,n),"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function n3e(e,r,n){const o=this;return Zt(e,i,"listItemIndent",o.containerState.size+1);function i(a){const l=o.events[o.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===o.containerState.size?r(a):n(a)}}function o3e(e){e.exit(this.containerState.type)}function i3e(e,r,n){const o=this;return Zt(e,i,"listItemPrefixWhitespace",o.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(a){const l=o.events[o.events.length-1];return!Vt(a)&&l&&l[1].type==="listItemPrefixWhitespace"?r(a):n(a)}}const NI={name:"setextUnderline",resolveTo:a3e,tokenize:l3e};function a3e(e,r){let n=e.length,o,i,a;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){o=n;break}e[n][1].type==="paragraph"&&(i=n)}else e[n][1].type==="content"&&e.splice(n,1),!a&&e[n][1].type==="definition"&&(a=n);const l={type:"setextHeading",start:{...e[o][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",a?(e.splice(i,0,["enter",l,r]),e.splice(a+1,0,["exit",e[o][1],r]),e[o][1].end={...e[a][1].end}):e[o][1]=l,e.push(["exit",l,r]),e}function l3e(e,r,n){const o=this;let i;return a;function a(d){let u=o.events.length,p;for(;u--;)if(o.events[u][1].type!=="lineEnding"&&o.events[u][1].type!=="linePrefix"&&o.events[u][1].type!=="content"){p=o.events[u][1].type==="paragraph";break}return!o.parser.lazy[o.now().line]&&(o.interrupt||p)?(e.enter("setextHeadingLine"),i=d,l(d)):n(d)}function l(d){return e.enter("setextHeadingLineSequence"),s(d)}function s(d){return d===i?(e.consume(d),s):(e.exit("setextHeadingLineSequence"),Vt(d)?Zt(e,c,"lineSuffix")(d):c(d))}function c(d){return d===null||mt(d)?(e.exit("setextHeadingLine"),r(d)):n(d)}}const s3e={tokenize:m3e,partial:!0};function c3e(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:h3e,continuation:{tokenize:f3e},exit:g3e}},text:{91:{name:"gfmFootnoteCall",tokenize:p3e},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:d3e,resolveTo:u3e}}}}function d3e(e,r,n){const o=this;let i=o.events.length;const a=o.parser.gfmFootnotes||(o.parser.gfmFootnotes=[]);let l;for(;i--;){const c=o.events[i][1];if(c.type==="labelImage"){l=c;break}if(c.type==="gfmFootnoteCall"||c.type==="labelLink"||c.type==="label"||c.type==="image"||c.type==="link")break}return s;function s(c){if(!l||!l._balanced)return n(c);const d=Ua(o.sliceSerialize({start:l.end,end:o.now()}));return d.codePointAt(0)!==94||!a.includes(d.slice(1))?n(c):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),r(c))}}function u3e(e,r){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const o={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],["enter",o,r],e[n+3],e[n+4],["enter",i,r],["exit",i,r],["enter",a,r],["enter",l,r],["exit",l,r],["exit",a,r],e[e.length-2],e[e.length-1],["exit",o,r]];return e.splice(n,e.length-n+1,...s),e}function p3e(e,r,n){const o=this,i=o.parser.gfmFootnotes||(o.parser.gfmFootnotes=[]);let a=0,l;return s;function s(p){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),c}function c(p){return p!==94?n(p):(e.enter("gfmFootnoteCallMarker"),e.consume(p),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",d)}function d(p){if(a>999||p===93&&!l||p===null||p===91||Sr(p))return n(p);if(p===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return i.includes(Ua(o.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),r):n(p)}return Sr(p)||(l=!0),a++,e.consume(p),p===92?u:d}function u(p){return p===91||p===92||p===93?(e.consume(p),a++,d):d(p)}}function h3e(e,r,n){const o=this,i=o.parser.gfmFootnotes||(o.parser.gfmFootnotes=[]);let a,l=0,s;return c;function c(v){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),d}function d(v){return v===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",u):n(v)}function u(v){if(l>999||v===93&&!s||v===null||v===91||Sr(v))return n(v);if(v===93){e.exit("chunkString");const w=e.exit("gfmFootnoteDefinitionLabelString");return a=Ua(o.sliceSerialize(w)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return Sr(v)||(s=!0),l++,e.consume(v),v===92?p:u}function p(v){return v===91||v===92||v===93?(e.consume(v),l++,u):u(v)}function f(v){return v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),i.includes(a)||i.push(a),Zt(e,m,"gfmFootnoteDefinitionWhitespace")):n(v)}function m(v){return r(v)}}function f3e(e,r,n){return e.check(s1,r,e.attempt(s3e,r,n))}function g3e(e){e.exit("gfmFootnoteDefinition")}function m3e(e,r,n){const o=this;return Zt(e,i,"gfmFootnoteDefinitionIndent",5);function i(a){const l=o.events[o.events.length-1];return l&&l[1].type==="gfmFootnoteDefinitionIndent"&&l[2].sliceSerialize(l[1],!0).length===4?r(a):n(a)}}function y3e(e){let n=(e||{}).singleTilde;const o={name:"strikethrough",tokenize:a,resolveAll:i};return n==null&&(n=!0),{text:{126:o},insideSpan:{null:[o]},attentionMarkers:{null:[126]}};function i(l,s){let c=-1;for(;++c1?c(v):(l.consume(v),p++,m);if(p<2&&!n)return c(v);const x=l.exit("strikethroughSequenceTemporary"),k=Fh(v);return x._open=!k||k===2&&!!w,x._close=!w||w===2&&!!k,s(v)}}}class v3e{constructor(){this.map=[]}add(r,n,o){b3e(this,r,n,o)}consume(r){if(this.map.sort(function(a,l){return a[0]-l[0]}),this.map.length===0)return;let n=this.map.length;const o=[];for(;n>0;)n-=1,o.push(r.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),r.length=this.map[n][0];o.push(r.slice()),r.length=0;let i=o.pop();for(;i;){for(const a of i)r.push(a);i=o.pop()}this.map.length=0}}function b3e(e,r,n,o){let i=0;if(!(n===0&&o.length===0)){for(;i-1;){const P=o.events[N][1].type;if(P==="lineEnding"||P==="linePrefix")N--;else break}const L=N>-1?o.events[N][1].type:null,H=L==="tableHead"||L==="tableRow"?T:c;return H===T&&o.parser.lazy[o.now().line]?n(I):H(I)}function c(I){return e.enter("tableHead"),e.enter("tableRow"),d(I)}function d(I){return I===124||(l=!0,a+=1),u(I)}function u(I){return I===null?n(I):mt(I)?a>1?(a=0,o.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(I),e.exit("lineEnding"),m):n(I):Vt(I)?Zt(e,u,"whitespace")(I):(a+=1,l&&(l=!1,i+=1),I===124?(e.enter("tableCellDivider"),e.consume(I),e.exit("tableCellDivider"),l=!0,u):(e.enter("data"),p(I)))}function p(I){return I===null||I===124||Sr(I)?(e.exit("data"),u(I)):(e.consume(I),I===92?f:p)}function f(I){return I===92||I===124?(e.consume(I),p):p(I)}function m(I){return o.interrupt=!1,o.parser.lazy[o.now().line]?n(I):(e.enter("tableDelimiterRow"),l=!1,Vt(I)?Zt(e,v,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(I):v(I))}function v(I){return I===45||I===58?x(I):I===124?(l=!0,e.enter("tableCellDivider"),e.consume(I),e.exit("tableCellDivider"),w):R(I)}function w(I){return Vt(I)?Zt(e,x,"whitespace")(I):x(I)}function x(I){return I===58?(a+=1,l=!0,e.enter("tableDelimiterMarker"),e.consume(I),e.exit("tableDelimiterMarker"),k):I===45?(a+=1,k(I)):I===null||mt(I)?$(I):R(I)}function k(I){return I===45?(e.enter("tableDelimiterFiller"),C(I)):R(I)}function C(I){return I===45?(e.consume(I),C):I===58?(l=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(I),e.exit("tableDelimiterMarker"),_):(e.exit("tableDelimiterFiller"),_(I))}function _(I){return Vt(I)?Zt(e,$,"whitespace")(I):$(I)}function $(I){return I===124?v(I):I===null||mt(I)?!l||i!==a?R(I):(e.exit("tableDelimiterRow"),e.exit("tableHead"),r(I)):R(I)}function R(I){return n(I)}function T(I){return e.enter("tableRow"),A(I)}function A(I){return I===124?(e.enter("tableCellDivider"),e.consume(I),e.exit("tableCellDivider"),A):I===null||mt(I)?(e.exit("tableRow"),r(I)):Vt(I)?Zt(e,A,"whitespace")(I):(e.enter("data"),z(I))}function z(I){return I===null||I===124||Sr(I)?(e.exit("data"),A(I)):(e.consume(I),I===92?j:z)}function j(I){return I===92||I===124?(e.consume(I),z):z(I)}}function _3e(e,r){let n=-1,o=!0,i=0,a=[0,0,0,0],l=[0,0,0,0],s=!1,c=0,d,u,p;const f=new v3e;for(;++nn[2]+1){const v=n[2]+1,w=n[3]-n[2]-1;e.add(v,w,[])}}e.add(n[3]+1,0,[["exit",p,r]])}return i!==void 0&&(a.end=Object.assign({},qh(r.events,i)),e.add(i,0,[["exit",a,r]]),a=void 0),a}function BI(e,r,n,o,i){const a=[],l=qh(r.events,n);i&&(i.end=Object.assign({},l),a.push(["exit",i,r])),o.end=Object.assign({},l),a.push(["exit",o,r]),e.add(n+1,0,a)}function qh(e,r){const n=e[r],o=n[0]==="enter"?"start":"end";return n[1][o]}const S3e={name:"tasklistCheck",tokenize:C3e};function E3e(){return{text:{91:S3e}}}function C3e(e,r,n){const o=this;return i;function i(c){return o.previous!==null||!o._gfmTasklistFirstContentOfListItem?n(c):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),a)}function a(c){return Sr(c)?(e.enter("taskListCheckValueUnchecked"),e.consume(c),e.exit("taskListCheckValueUnchecked"),l):c===88||c===120?(e.enter("taskListCheckValueChecked"),e.consume(c),e.exit("taskListCheckValueChecked"),l):n(c)}function l(c){return c===93?(e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):n(c)}function s(c){return mt(c)?r(c):Vt(c)?e.check({tokenize:$3e},r,n)(c):n(c)}}function $3e(e,r,n){return Zt(e,o,"whitespace");function o(i){return i===null?n(i):r(i)}}function R3e(e){return mI([Ixe(),c3e(),y3e(e),w3e(),E3e()])}const z3e={};function T3e(e){const r=this,n=e||z3e,o=r.data(),i=o.micromarkExtensions||(o.micromarkExtensions=[]),a=o.fromMarkdownExtensions||(o.fromMarkdownExtensions=[]),l=o.toMarkdownExtensions||(o.toMarkdownExtensions=[]);i.push(R3e(n)),a.push(Axe()),l.push(Dxe(n))}const j3e=/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]/i,A3e=/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)(\/.*)?\]/i,D3e=({legacyTitle:e=!1,tagName:r="div"}={})=>n=>{K_(n,"blockquote",(o,i,a)=>{let l="",s="",c=!0,d=o.children.map(u=>{if(c&&u.type==="paragraph"){const p=u.children[0],f=p.type==="text"?p.value:"",m=e?A3e:j3e,v=f.match(m);if(v&&(c=!1,l=v[1].toLocaleLowerCase(),s=e&&v[2]||l.toLocaleUpperCase(),f.includes(` -`)&&(u.children[0]={type:"text",value:f.replace(m,"").replace(/^\n+/,"")}),!f.includes(` -`))){const w=[];u.children.forEach((x,k)=>{k!=0&&(k==1&&x.type==="break"||w.push(x))}),u.children=[...w]}}return u});l&&(o.data={hName:r,hProperties:{className:["markdown-alert",`markdown-alert-${l}`],dir:"auto"}},d.unshift({type:"paragraph",children:[P3e(l),{type:"text",value:s.replace(/^\//,"")}],data:{hProperties:{className:"markdown-alert-title",dir:"auto"}}})),o.children=[...d]})};function P3e(e){let r=M3e[e]??"";return{type:"emphasis",data:{hName:"svg",hProperties:{className:["octicon"],viewBox:"0 0 16 16",width:"16",height:"16",ariaHidden:"true"}},children:[{type:"emphasis",data:{hName:"path",hProperties:{d:r}},children:[]}]}}const M3e={note:"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z",tip:"M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z",important:"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z",warning:"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z",caution:"M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"},N3e={tokenize:B3e};function B3e(e){const r=e.attempt(this.parser.constructs.contentInitial,o,i);let n;return r;function o(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),Zt(e,r,"linePrefix")}function i(s){return e.enter("paragraph"),a(s)}function a(s){const c=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=c),n=c,l(s)}function l(s){if(s===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(s);return}return mt(s)?(e.consume(s),e.exit("chunkText"),a):(e.consume(s),l)}}const I3e={tokenize:O3e},II={tokenize:L3e};function O3e(e){const r=this,n=[];let o=0,i,a,l;return s;function s(_){if(ol))return;const A=r.events.length;let z=A,j,I;for(;z--;)if(r.events[z][0]==="exit"&&r.events[z][1].type==="chunkFlow"){if(j){I=r.events[z][1].end;break}j=!0}for(k(o),T=A;T_;){const R=n[$];r.containerState=R[1],R[0].exit.call(r,e)}n.length=_}function C(){i.write([null]),a=void 0,i=void 0,r.containerState._closeFlow=void 0}}function L3e(e,r,n){return Zt(e,e.attempt(this.parser.constructs.document,r,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}const F3e={tokenize:V3e};function V3e(e){const r=this,n=e.attempt(s1,o,e.attempt(this.parser.constructs.flowInitial,i,Zt(e,e.attempt(this.parser.constructs.flow,i,e.attempt(fwe,i)),"linePrefix")));return n;function o(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),r.currentConstruct=void 0,n}function i(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r.currentConstruct=void 0,n}}const q3e={resolveAll:LI()},H3e=OI("string"),U3e=OI("text");function OI(e){return{resolveAll:LI(e==="text"?W3e:void 0),tokenize:r};function r(n){const o=this,i=this.parser.constructs[e],a=n.attempt(i,l,s);return l;function l(u){return d(u)?a(u):s(u)}function s(u){if(u===null){n.consume(u);return}return n.enter("data"),n.consume(u),c}function c(u){return d(u)?(n.exit("data"),a(u)):(n.consume(u),c)}function d(u){if(u===null)return!0;const p=i[u];let f=-1;if(p)for(;++f-1){const s=l[0];typeof s=="string"?l[0]=s.slice(o):l.shift()}a>0&&l.push(e[i].slice(0,a))}return l}function K3e(e,r){let n=-1;const o=[];let i;for(;++n0){const Tr=Ye.tokenStack[Ye.tokenStack.length-1];(Tr[1]||GI).call(Ye,void 0,Tr[0])}for(ke.position={start:rd(be.length>0?be[0][1].start:{line:1,column:1,offset:0}),end:rd(be.length>0?be[be.length-2][1].end:{line:1,column:1,offset:0})},xt=-1;++xt1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(r,c);const d={type:"element",tagName:"sup",properties:{},children:[c]};return e.patch(r,d),e.applyData(r,d)}function c2e(e,r){const n={type:"element",tagName:"h"+r.depth,properties:{},children:e.all(r)};return e.patch(r,n),e.applyData(r,n)}function d2e(e,r){if(e.options.allowDangerousHtml){const n={type:"raw",value:r.value};return e.patch(r,n),e.applyData(r,n)}}function YI(e,r){const n=r.referenceType;let o="]";if(n==="collapsed"?o+="[]":n==="full"&&(o+="["+(r.label||r.identifier)+"]"),r.type==="imageReference")return[{type:"text",value:"!["+r.alt+o}];const i=e.all(r),a=i[0];a&&a.type==="text"?a.value="["+a.value:i.unshift({type:"text",value:"["});const l=i[i.length-1];return l&&l.type==="text"?l.value+=o:i.push({type:"text",value:o}),i}function u2e(e,r){const n=String(r.identifier).toUpperCase(),o=e.definitionById.get(n);if(!o)return YI(e,r);const i={src:Vh(o.url||""),alt:r.alt};o.title!==null&&o.title!==void 0&&(i.title=o.title);const a={type:"element",tagName:"img",properties:i,children:[]};return e.patch(r,a),e.applyData(r,a)}function p2e(e,r){const n={src:Vh(r.url)};r.alt!==null&&r.alt!==void 0&&(n.alt=r.alt),r.title!==null&&r.title!==void 0&&(n.title=r.title);const o={type:"element",tagName:"img",properties:n,children:[]};return e.patch(r,o),e.applyData(r,o)}function h2e(e,r){const n={type:"text",value:r.value.replace(/\r?\n|\r/g," ")};e.patch(r,n);const o={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(r,o),e.applyData(r,o)}function f2e(e,r){const n=String(r.identifier).toUpperCase(),o=e.definitionById.get(n);if(!o)return YI(e,r);const i={href:Vh(o.url||"")};o.title!==null&&o.title!==void 0&&(i.title=o.title);const a={type:"element",tagName:"a",properties:i,children:e.all(r)};return e.patch(r,a),e.applyData(r,a)}function g2e(e,r){const n={href:Vh(r.url)};r.title!==null&&r.title!==void 0&&(n.title=r.title);const o={type:"element",tagName:"a",properties:n,children:e.all(r)};return e.patch(r,o),e.applyData(r,o)}function m2e(e,r,n){const o=e.all(r),i=n?y2e(n):XI(r),a={},l=[];if(typeof r.checked=="boolean"){const u=o[0];let p;u&&u.type==="element"&&u.tagName==="p"?p=u:(p={type:"element",tagName:"p",properties:{},children:[]},o.unshift(p)),p.children.length>0&&p.children.unshift({type:"text",value:" "}),p.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:r.checked,disabled:!0},children:[]}),a.className=["task-list-item"]}let s=-1;for(;++s1}function v2e(e,r){const n={},o=e.all(r);let i=-1;for(typeof r.start=="number"&&r.start!==1&&(n.start=r.start);++i0){const l={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},s=fB(r.children[1]),c=hB(r.children[r.children.length-1]);s&&c&&(l.position={start:s,end:c}),i.push(l)}const a={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(r,a),e.applyData(r,a)}function _2e(e,r,n){const o=n?n.children:void 0,a=(o?o.indexOf(r):1)===0?"th":"td",l=n&&n.type==="table"?n.align:void 0,s=l?l.length:r.children.length;let c=-1;const d=[];for(;++c0,!0),o[0]),i=o.index+o[0].length,o=n.exec(r);return a.push(QI(r.slice(i),i>0,!1)),a.join("")}function QI(e,r,n){let o=0,i=e.length;if(r){let a=e.codePointAt(o);for(;a===KI||a===ZI;)o++,a=e.codePointAt(o)}if(n){let a=e.codePointAt(i-1);for(;a===KI||a===ZI;)i--,a=e.codePointAt(i-1)}return i>o?e.slice(o,i):""}function C2e(e,r){const n={type:"text",value:E2e(String(r.value))};return e.patch(r,n),e.applyData(r,n)}function $2e(e,r){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(r,n),e.applyData(r,n)}const R2e={blockquote:n2e,break:o2e,code:i2e,delete:a2e,emphasis:l2e,footnoteReference:s2e,heading:c2e,html:d2e,imageReference:u2e,image:p2e,inlineCode:h2e,linkReference:f2e,link:g2e,listItem:m2e,list:v2e,paragraph:b2e,root:x2e,strong:w2e,table:k2e,tableCell:S2e,tableRow:_2e,text:C2e,thematicBreak:$2e,toml:Yb,yaml:Yb,definition:Yb,footnoteDefinition:Yb};function Yb(){}function z2e(e,r){const n=[{type:"text",value:"↩"}];return r>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(r)}]}),n}function T2e(e,r){return"Back to reference "+(e+1)+(r>1?"-"+r:"")}function j2e(e){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||z2e,o=e.options.footnoteBackLabel||T2e,i=e.options.footnoteLabel||"Footnotes",a=e.options.footnoteLabelTagName||"h2",l=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let c=-1;for(;++c0&&v.push({type:"text",value:" "});let C=typeof n=="string"?n:n(c,m);typeof C=="string"&&(C={type:"text",value:C}),v.push({type:"element",tagName:"a",properties:{href:"#"+r+"fnref-"+f+(m>1?"-"+m:""),dataFootnoteBackref:"",ariaLabel:typeof o=="string"?o:o(c,m),className:["data-footnote-backref"]},children:Array.isArray(C)?C:[C]})}const x=u[u.length-1];if(x&&x.type==="element"&&x.tagName==="p"){const C=x.children[x.children.length-1];C&&C.type==="text"?C.value+=" ":x.children.push({type:"text",value:" "}),x.children.push(...v)}else u.push(...v);const k={type:"element",tagName:"li",properties:{id:r+"fn-"+f},children:e.wrap(u,!0)};e.patch(d,k),s.push(k)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:a,properties:{...o1(l),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` -`}]}}const l8={}.hasOwnProperty,A2e={};function D2e(e,r){const n=r||A2e,o=new Map,i=new Map,a=new Map,l={...R2e,...n.handlers},s={all:d,applyData:M2e,definitionById:o,footnoteById:i,footnoteCounts:a,footnoteOrder:[],handlers:l,one:c,options:n,patch:P2e,wrap:B2e};return K_(e,function(u){if(u.type==="definition"||u.type==="footnoteDefinition"){const p=u.type==="definition"?o:i,f=String(u.identifier).toUpperCase();p.has(f)||p.set(f,u)}}),s;function c(u,p){const f=u.type,m=s.handlers[f];if(l8.call(s.handlers,f)&&m)return m(s,u,p);if(s.options.passThrough&&s.options.passThrough.includes(f)){if("children"in u){const{children:w,...x}=u,k=o1(x);return k.children=s.all(u),k}return o1(u)}return(s.options.unknownHandler||N2e)(s,u,p)}function d(u){const p=[];if("children"in u){const f=u.children;let m=-1;for(;++m0&&n.push({type:"text",value:` -`}),n}function JI(e){let r=0,n=e.charCodeAt(r);for(;n===9||n===32;)r++,n=e.charCodeAt(r);return e.slice(r)}function eO(e,r){const n=D2e(e,r),o=n.one(e,void 0),i=j2e(n),a=Array.isArray(o)?{type:"root",children:o}:o||{type:"root",children:[]};return i&&a.children.push({type:"text",value:` -`},i),a}function I2e(e,r){return e&&"run"in e?async function(n,o){const i=eO(n,{file:o,...r});await e.run(i,o)}:function(n,o){return eO(n,{file:o,...e||r})}}function tO(e){if(e)throw e}var s8,rO;function O2e(){if(rO)return s8;rO=1;var e=Object.prototype.hasOwnProperty,r=Object.prototype.toString,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=function(d){return typeof Array.isArray=="function"?Array.isArray(d):r.call(d)==="[object Array]"},a=function(d){if(!d||r.call(d)!=="[object Object]")return!1;var u=e.call(d,"constructor"),p=d.constructor&&d.constructor.prototype&&e.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!u&&!p)return!1;var f;for(f in d);return typeof f>"u"||e.call(d,f)},l=function(d,u){n&&u.name==="__proto__"?n(d,u.name,{enumerable:!0,configurable:!0,value:u.newValue,writable:!0}):d[u.name]=u.newValue},s=function(d,u){if(u==="__proto__")if(e.call(d,u)){if(o)return o(d,u).value}else return;return d[u]};return s8=function c(){var d,u,p,f,m,v,w=arguments[0],x=1,k=arguments.length,C=!1;for(typeof w=="boolean"&&(C=w,w=arguments[1]||{},x=2),(w==null||typeof w!="object"&&typeof w!="function")&&(w={});xl.length;let c;s&&l.push(i);try{c=e.apply(this,l)}catch(d){const u=d;if(s&&n)throw u;return i(u)}s||(c&&c.then&&typeof c.then=="function"?c.then(a,i):c instanceof Error?i(c):a(c))}function i(l,...s){n||(n=!0,r(l,...s))}function a(l){i(null,l)}}class ti extends Error{constructor(r,n,o){super(),typeof n=="string"&&(o=n,n=void 0);let i="",a={},l=!1;if(n&&("line"in n&&"column"in n?a={place:n}:"start"in n&&"end"in n?a={place:n}:"type"in n?a={ancestors:[n],place:n.position}:a={...n}),typeof r=="string"?i=r:!a.cause&&r&&(l=!0,i=r.message,a.cause=r),!a.ruleId&&!a.source&&typeof o=="string"){const c=o.indexOf(":");c===-1?a.ruleId=o:(a.source=o.slice(0,c),a.ruleId=o.slice(c+1))}if(!a.place&&a.ancestors&&a.ancestors){const c=a.ancestors[a.ancestors.length-1];c&&(a.place=c.position)}const s=a.place&&"start"in a.place?a.place.start:a.place;this.ancestors=a.ancestors||void 0,this.cause=a.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file,this.message=i,this.line=s?s.line:void 0,this.name=u1(a.place)||"1:1",this.place=a.place||void 0,this.reason=this.message,this.ruleId=a.ruleId||void 0,this.source=a.source||void 0,this.stack=l&&a.cause&&typeof a.cause.stack=="string"?a.cause.stack:"",this.actual,this.expected,this.note,this.url}}ti.prototype.file="",ti.prototype.name="",ti.prototype.reason="",ti.prototype.message="",ti.prototype.stack="",ti.prototype.column=void 0,ti.prototype.line=void 0,ti.prototype.ancestors=void 0,ti.prototype.cause=void 0,ti.prototype.fatal=void 0,ti.prototype.place=void 0,ti.prototype.ruleId=void 0,ti.prototype.source=void 0;const ql={basename:q2e,dirname:H2e,extname:U2e,join:W2e,sep:"/"};function q2e(e,r){if(r!==void 0&&typeof r!="string")throw new TypeError('"ext" argument must be a string');p1(e);let n=0,o=-1,i=e.length,a;if(r===void 0||r.length===0||r.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1);return o<0?"":e.slice(n,o)}if(r===e)return"";let l=-1,s=r.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else l<0&&(a=!0,l=i+1),s>-1&&(e.codePointAt(i)===r.codePointAt(s--)?s<0&&(o=i):(s=-1,o=l));return n===o?o=l:o<0&&(o=e.length),e.slice(n,o)}function H2e(e){if(p1(e),e.length===0)return".";let r=-1,n=e.length,o;for(;--n;)if(e.codePointAt(n)===47){if(o){r=n;break}}else o||(o=!0);return r<0?e.codePointAt(0)===47?"/":".":r===1&&e.codePointAt(0)===47?"//":e.slice(0,r)}function U2e(e){p1(e);let r=e.length,n=-1,o=0,i=-1,a=0,l;for(;r--;){const s=e.codePointAt(r);if(s===47){if(l){o=r+1;break}continue}n<0&&(l=!0,n=r+1),s===46?i<0?i=r:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===o+1?"":e.slice(i,n)}function W2e(...e){let r=-1,n;for(;++r0&&e.codePointAt(e.length-1)===47&&(n+="/"),r?"/"+n:n}function Y2e(e,r){let n="",o=0,i=-1,a=0,l=-1,s,c;for(;++l<=e.length;){if(l2){if(c=n.lastIndexOf("/"),c!==n.length-1){c<0?(n="",o=0):(n=n.slice(0,c),o=n.length-1-n.lastIndexOf("/")),i=l,a=0;continue}}else if(n.length>0){n="",o=0,i=l,a=0;continue}}r&&(n=n.length>0?n+"/..":"..",o=2)}else n.length>0?n+="/"+e.slice(i+1,l):n=e.slice(i+1,l),o=l-i-1;i=l,a=0}else s===46&&a>-1?a++:a=-1}return n}function p1(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const X2e={cwd:K2e};function K2e(){return"/"}function u8(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function Z2e(e){if(typeof e=="string")e=new URL(e);else if(!u8(e)){const r=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw r.code="ERR_INVALID_ARG_TYPE",r}if(e.protocol!=="file:"){const r=new TypeError("The URL must be of scheme file");throw r.code="ERR_INVALID_URL_SCHEME",r}return Q2e(e)}function Q2e(e){if(e.hostname!==""){const o=new TypeError('File URL host must be "localhost" or empty on darwin');throw o.code="ERR_INVALID_FILE_URL_HOST",o}const r=e.pathname;let n=-1;for(;++n0){let[m,...v]=u;const w=o[f][1];d8(w)&&d8(m)&&(m=c8(!0,w,m)),o[f]=[d,m,...v]}}}}const n4e=new g8().freeze();function m8(e,r){if(typeof r!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function y8(e,r){if(typeof r!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function v8(e,r){if(r)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function oO(e){if(!d8(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function iO(e,r,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+r+"` instead")}function Xb(e){return o4e(e)?e:new J2e(e)}function o4e(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function i4e(e){return typeof e=="string"||a4e(e)}function a4e(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}function l4e(){return n4e().use(r2e).use(T3e).use(D3e).use(I2e,{allowDangerousHtml:!0}).use(S0e,XM({attributes:{"*":["className"],svg:["width","height","viewBox","fill","ariaHidden"],path:["d","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin"]},tagNames:["svg","g","path","div"]},P_)).use(Fve,{allowDangerousHtml:!0})}function s4e(e){return(""+l4e().processSync(e)).trim()}function c4e(e){return Hb(UI(e),{includeHtml:!1,includeImageAlt:!1})}var b8,aO;function d4e(){if(aO)return b8;aO=1;var e=aB(),r=Ab();function n(){this.clear()}return n.prototype.clear=function(){this.items=[],this.offset=0,this.size=0},n.prototype.enqueue=function(o){return this.items.push(o),++this.size},n.prototype.dequeue=function(){if(this.size){var o=this.items[this.offset];return++this.offset*2>=this.items.length&&(this.items=this.items.slice(this.offset),this.offset=0),this.size--,o}},n.prototype.peek=function(){if(this.size)return this.items[this.offset]},n.prototype.forEach=function(o,i){i=arguments.length>1?i:this;for(var a=this.offset,l=0,s=this.items.length;a=o.length)return{done:!0};var a=o[i];return i++,{value:a,done:!1}})},n.prototype.entries=function(){var o=this.items,i=this.offset,a=0;return new e(function(){if(i>=o.length)return{done:!0};var l=o[i];return i++,{value:[a++,l],done:!1}})},typeof Symbol<"u"&&(n.prototype[Symbol.iterator]=n.prototype.values),n.prototype.toString=function(){return this.toArray().join(",")},n.prototype.toJSON=function(){return this.toArray()},n.prototype.inspect=function(){var o=this.toArray();return Object.defineProperty(o,"constructor",{value:n,enumerable:!1}),o},typeof Symbol<"u"&&(n.prototype[Symbol.for("nodejs.util.inspect.custom")]=n.prototype.inspect),n.from=function(o){var i=new n;return r(o,function(a){i.enqueue(a)}),i},n.of=function(){return n.from(arguments)},b8=n,b8}var u4e=d4e();const x8=Qm(u4e);var w8,lO;function p4e(){if(lO)return w8;lO=1;function e(r){if(typeof r!="function")throw new Error("mnemonist/DefaultMap.constructor: expecting a function.");this.items=new Map,this.factory=r,this.size=0}return e.prototype.clear=function(){this.items.clear(),this.size=0},e.prototype.get=function(r){var n=this.items.get(r);return typeof n>"u"&&(n=this.factory(r,this.size),this.items.set(r,n),this.size++),n},e.prototype.peek=function(r){return this.items.get(r)},e.prototype.set=function(r,n){return this.items.set(r,n),this.size=this.items.size,this},e.prototype.has=function(r){return this.items.has(r)},e.prototype.delete=function(r){var n=this.items.delete(r);return this.size=this.items.size,n},e.prototype.forEach=function(r,n){n=arguments.length>1?n:this,this.items.forEach(r,n)},e.prototype.entries=function(){return this.items.entries()},e.prototype.keys=function(){return this.items.keys()},e.prototype.values=function(){return this.items.values()},typeof Symbol<"u"&&(e.prototype[Symbol.iterator]=e.prototype.entries),e.prototype.inspect=function(){return this.items},typeof Symbol<"u"&&(e.prototype[Symbol.for("nodejs.util.inspect.custom")]=e.prototype.inspect),e.autoIncrement=function(){var r=0;return function(){return r++}},w8=e,w8}var h4e=p4e();const Ln=Qm(h4e);function Ji(e){return!!e}function sO(e){return r=>!e(r)}function f4e(...e){return ao(g4e,e)}const g4e=(e,r)=>r.every(n=>n(e));function m4e(...e){return ao(y4e,e)}const y4e=(e,r)=>r.some(n=>n(e));function Xn(e){return e==null}function cO(e,r){return e[Iu]===r}const Iu="_stage",h1="_type",k8="_layout";function v4e(e){return Ji(e.kind)&&!Ji(e.element)}function b4e(e){return"tag"in e}function x4e(e){return"kind"in e}function w4e(e){return"participant"in e}function k4e(e){return"not"in e}function _4e(e){return"and"in e}function S4e(e){return"or"in e}function Ou(e){switch(!0){case w4e(e):{const r=e.participant,n=Ou(e.operator);return E4e(r,n)}case b4e(e):{if(Qc(e.tag)||"eq"in e.tag){const n=Qc(e.tag)?e.tag:e.tag.eq;return o=>Array.isArray(o.tags)&&o.tags.includes(n)}const r=e.tag.neq;return n=>!Array.isArray(n.tags)||!n.tags.includes(r)}case x4e(e):{if(Qc(e.kind)||"eq"in e.kind){const n=Qc(e.kind)?e.kind:e.kind.eq;return o=>o.kind===n}const r=e.kind.neq;return n=>Xn(n.kind)||n.kind!==r}case k4e(e):{const r=Ou(e.not);return sO(r)}case _4e(e):{const r=e.and.map(Ou);return f4e(r)}case S4e(e):{const r=e.or.map(Ou);return m4e(r)}default:Qo(e)}}function E4e(e,r){return n=>{if(!n.source||!n.target)return!1;switch(e){case"source":return r(n.source);case"target":return r(n.target)}}}function C4e(e){return e._type==="dynamic"}function f1(...e){return ao(Object.entries,e)}function Lu(e,...r){return typeof e=="string"||typeof e=="number"||typeof e=="symbol"?n=>dO(n,e,...r):dO(e,...r)}function dO(e,...r){let n=e;for(let o of r){if(n==null)return;n=n[o]}return n}function Kb(...e){return ao($4e,e,R4e)}const $4e=(e,r)=>e.map(r),R4e=e=>(r,n,o)=>({done:!1,hasNext:!0,next:e(r,n,o)});function z4e(e,r){let n=r.length-e.length;if(n===1){let[o,...i]=r;return Ns(o,{lazy:e,lazyArgs:i})}if(n===0){let o={lazy:e,lazyArgs:r};return Object.assign(i=>Ns(i,o),o)}throw Error("Wrong number of arguments")}function Zb(...e){return z4e(T4e,e)}function T4e(){let e=new Set;return r=>e.has(r)?E_:(e.add(r),{done:!1,hasNext:!0,next:r})}var _8={},uO;function j4e(){return uO||(uO=1,(function(e){e.intersection=function(){if(arguments.length<2)throw new Error("mnemonist/Set.intersection: needs at least two arguments.");var r=new Set,n=1/0,o=null,i,a,l=arguments.length;for(a=0;an.size)return!1;for(;i=o.next(),!i.done;)if(!n.has(i.value))return!1;return!0},e.isSuperset=function(r,n){return e.isSubset(n,r)},e.add=function(r,n){for(var o=n.values(),i;i=o.next(),!i.done;)r.add(i.value)},e.subtract=function(r,n){for(var o=n.values(),i;i=o.next(),!i.done;)r.delete(i.value)},e.intersect=function(r,n){for(var o=r.values(),i;i=o.next(),!i.done;)n.has(i.value)||r.delete(i.value)},e.disjunct=function(r,n){for(var o=r.values(),i,a=[];i=o.next(),!i.done;)n.has(i.value)&&a.push(i.value);for(o=n.values();i=o.next(),!i.done;)r.has(i.value)||r.add(i.value);for(var l=0,s=a.length;ln.size&&(o=r,r=n,n=o),r.size===0)return 0;if(r===n)return r.size;for(var i=r.values(),a,l=0;a=i.next(),!a.done;)n.has(a.value)&&l++;return l},e.unionSize=function(r,n){var o=e.intersectionSize(r,n);return r.size+n.size-o},e.jaccard=function(r,n){var o=e.intersectionSize(r,n);if(o===0)return 0;var i=r.size+n.size-o;return o/i},e.overlap=function(r,n){var o=e.intersectionSize(r,n);return o===0?0:o/Math.min(r.size,n.size)}})(_8)),_8}var pO=j4e();function S8(...e){let r=new Set;for(const n of e)for(const o of n)r.add(o);return r}function Hh(e,...r){let n=new Set;if(e.size===0)return n;let o=Ll(r,2)?pO.intersection(...r):r[0];if(o.size===0)return n;for(const i of e)o.has(i)&&n.add(i);return n}function E8(e,r){if(e.size===0)return new Set;if(r.size===0)return new Set(e);let n=new Set;for(const o of e)r.has(o)||n.add(o);return n}function A4e(e,r){return e.size===r.size&&[...e].every(n=>r.has(n))}function D4e(e,r){return pO.symmetricDifference(e,r)}function g1(e){return e?hO(e):hO}function hO(e){const r=e[Symbol.iterator](),{value:n}=r.next();return n}const Qb=e=>typeof e=="function";function Is(e,r){const n=r??e;He(Qb(n));function*o(i){for(const a of i)n(a)&&(yield a)}return r?o(e):o}const fO={asc:(e,r)=>e>r,desc:(e,r)=>ee(a,i)}function C8(e,r,...n){let o=typeof e=="function"?e:e[0],i=typeof e=="function"?"asc":e[1],{[i]:a}=fO,l=r===void 0?void 0:C8(r,...n);return(s,c)=>{let d=o(s),u=o(c);return a(d,u)?1:a(u,d)?-1:l?.(s,c)??0}}function M4e(e){if(gO(e))return!0;if(typeof e!="object"||!Array.isArray(e))return!1;let[r,n,...o]=e;return gO(r)&&typeof n=="string"&&n in fO&&o.length===0}const gO=e=>typeof e=="function"&&e.length===1;function N4e(...e){return ao(B4e,e,I4e)}const B4e=(e,r)=>e.filter(r),I4e=e=>(r,n,o)=>e(r,n,o)?{done:!1,hasNext:!0,next:r}:E_;function mO(...e){return ao(O4e,e,L4e)}const O4e=(e,r)=>e.flatMap(r),L4e=e=>(r,n,o)=>{let i=e(r,n,o);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}};function $8(...e){return ao(F4e,e)}const F4e=(e,r)=>{let n=Object.create(null);for(let o=0;oNs(r,...e)}function vO(...e){return P4e(U4e,e)}const U4e=(e,r)=>[...e].sort(r);var bO=Symbol.for("immer-nothing"),xO=Symbol.for("immer-draftable"),Io=Symbol.for("immer-state");function Wa(e,...r){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var wi=Object,Uh=wi.getPrototypeOf,Jb="constructor",ex="prototype",T8="configurable",tx="enumerable",rx="writable",m1="value",nd=e=>!!e&&!!e[Io];function Os(e){return e?kO(e)||ox(e)||!!e[xO]||!!e[Jb]?.[xO]||ix(e)||ax(e):!1}var W4e=wi[ex][Jb].toString(),wO=new WeakMap;function kO(e){if(!e||!A8(e))return!1;const r=Uh(e);if(r===null||r===wi[ex])return!0;const n=wi.hasOwnProperty.call(r,Jb)&&r[Jb];if(n===Object)return!0;if(!Wh(n))return!1;let o=wO.get(n);return o===void 0&&(o=Function.toString.call(n),wO.set(n,o)),o===W4e}function y1(e,r,n=!0){v1(e)===0?(n?Reflect.ownKeys(e):wi.keys(e)).forEach(i=>{r(i,e[i],e)}):e.forEach((o,i)=>r(i,o,e))}function v1(e){const r=e[Io];return r?r.type_:ox(e)?1:ix(e)?2:ax(e)?3:0}var _O=(e,r,n=v1(e))=>n===2?e.has(r):wi[ex].hasOwnProperty.call(e,r),j8=(e,r,n=v1(e))=>n===2?e.get(r):e[r],nx=(e,r,n,o=v1(e))=>{o===2?e.set(r,n):o===3?e.add(n):e[r]=n};function G4e(e,r){return e===r?e!==0||1/e===1/r:e!==e&&r!==r}var ox=Array.isArray,ix=e=>e instanceof Map,ax=e=>e instanceof Set,A8=e=>typeof e=="object",Wh=e=>typeof e=="function",D8=e=>typeof e=="boolean",Ls=e=>e.copy_||e.base_,P8=e=>e.modified_?e.copy_:e.base_;function M8(e,r){if(ix(e))return new Map(e);if(ax(e))return new Set(e);if(ox(e))return Array[ex].slice.call(e);const n=kO(e);if(r===!0||r==="class_only"&&!n){const o=wi.getOwnPropertyDescriptors(e);delete o[Io];let i=Reflect.ownKeys(o);for(let a=0;a1&&wi.defineProperties(e,{set:lx,add:lx,clear:lx,delete:lx}),wi.freeze(e),r&&y1(e,(n,o)=>{N8(o,!0)},!1)),e}function Y4e(){Wa(2)}var lx={[m1]:Y4e};function sx(e){return e===null||!A8(e)?!0:wi.isFrozen(e)}var cx="MapSet",B8="Patches",SO={};function Gh(e){const r=SO[e];return r||Wa(0,e),r}var X4e=e=>!!SO[e],b1,EO=()=>b1,K4e=(e,r)=>({drafts_:[],parent_:e,immer_:r,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:X4e(cx)?Gh(cx):void 0});function CO(e,r){r&&(e.patchPlugin_=Gh(B8),e.patches_=[],e.inversePatches_=[],e.patchListener_=r)}function I8(e){O8(e),e.drafts_.forEach(Z4e),e.drafts_=null}function O8(e){e===b1&&(b1=e.parent_)}var $O=e=>b1=K4e(b1,e);function Z4e(e){const r=e[Io];r.type_===0||r.type_===1?r.revoke_():r.revoked_=!0}function RO(e,r){r.unfinalizedDrafts_=r.drafts_.length;const n=r.drafts_[0];if(e!==void 0&&e!==n){n[Io].modified_&&(I8(r),Wa(4)),Os(e)&&(e=zO(r,e));const{patchPlugin_:i}=r;i&&i.generateReplacementPatches_(n[Io].base_,e,r)}else e=zO(r,n);return Q4e(r,e,!0),I8(r),r.patches_&&r.patchListener_(r.patches_,r.inversePatches_),e!==bO?e:void 0}function zO(e,r){if(sx(r))return r;const n=r[Io];if(!n)return L8(r,e.handledSet_,e);if(!dx(n,e))return r;if(!n.modified_)return n.base_;if(!n.finalized_){const{callbacks_:o}=n;if(o)for(;o.length>0;)o.pop()(e);AO(n,e)}return n.copy_}function Q4e(e,r,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&N8(r,n)}function TO(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var dx=(e,r)=>e.scope_===r,J4e=[];function jO(e,r,n,o){const i=Ls(e),a=e.type_;if(o!==void 0&&j8(i,o,a)===r){nx(i,o,n,a);return}if(!e.draftLocations_){const s=e.draftLocations_=new Map;y1(i,(c,d)=>{if(nd(d)){const u=s.get(d)||[];u.push(c),s.set(d,u)}})}const l=e.draftLocations_.get(r)??J4e;for(const s of l)nx(i,s,n,a)}function e5e(e,r,n){e.callbacks_.push(function(i){const a=r;if(!a||!dx(a,i))return;i.mapSetPlugin_?.fixSetContents(a);const l=P8(a);jO(e,a.draft_??a,l,n),AO(a,i)})}function AO(e,r){if(e.modified_&&!e.finalized_&&(e.type_===3||(e.assigned_?.size??0)>0)){const{patchPlugin_:o}=r;if(o){const i=o.getPath(e);i&&o.generatePatches_(e,i,r)}TO(e)}}function t5e(e,r,n){const{scope_:o}=e;if(nd(n)){const i=n[Io];dx(i,o)&&i.callbacks_.push(function(){ux(e);const l=P8(i);jO(e,n,l,r)})}else Os(n)&&e.callbacks_.push(function(){const a=Ls(e);j8(a,r,e.type_)===n&&o.drafts_.length>1&&(e.assigned_.get(r)??!1)===!0&&e.copy_&&L8(j8(e.copy_,r,e.type_),o.handledSet_,o)})}function L8(e,r,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||nd(e)||r.has(e)||!Os(e)||sx(e)||(r.add(e),y1(e,(o,i)=>{if(nd(i)){const a=i[Io];if(dx(a,n)){const l=P8(a);nx(e,o,l,e.type_),TO(a)}}else Os(i)&&L8(i,r,n)})),e}function r5e(e,r){const n=ox(e),o={type_:n?1:0,scope_:r?r.scope_:EO(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:r,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0};let i=o,a=F8;n&&(i=[o],a=x1);const{revoke:l,proxy:s}=Proxy.revocable(i,a);return o.draft_=s,o.revoke_=l,[s,o]}var F8={get(e,r){if(r===Io)return e;const n=Ls(e);if(!_O(n,r,e.type_))return n5e(e,n,r);const o=n[r];if(e.finalized_||!Os(o))return o;if(o===V8(e.base_,r)){ux(e);const i=e.type_===1?+r:r,a=H8(e.scope_,o,e,i);return e.copy_[i]=a}return o},has(e,r){return r in Ls(e)},ownKeys(e){return Reflect.ownKeys(Ls(e))},set(e,r,n){const o=DO(Ls(e),r);if(o?.set)return o.set.call(e.draft_,n),!0;if(!e.modified_){const i=V8(Ls(e),r),a=i?.[Io];if(a&&a.base_===n)return e.copy_[r]=n,e.assigned_.set(r,!1),!0;if(G4e(n,i)&&(n!==void 0||_O(e.base_,r,e.type_)))return!0;ux(e),q8(e)}return e.copy_[r]===n&&(n!==void 0||r in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[r])||(e.copy_[r]=n,e.assigned_.set(r,!0),t5e(e,r,n)),!0},deleteProperty(e,r){return ux(e),V8(e.base_,r)!==void 0||r in e.base_?(e.assigned_.set(r,!1),q8(e)):e.assigned_.delete(r),e.copy_&&delete e.copy_[r],!0},getOwnPropertyDescriptor(e,r){const n=Ls(e),o=Reflect.getOwnPropertyDescriptor(n,r);return o&&{[rx]:!0,[T8]:e.type_!==1||r!=="length",[tx]:o[tx],[m1]:n[r]}},defineProperty(){Wa(11)},getPrototypeOf(e){return Uh(e.base_)},setPrototypeOf(){Wa(12)}},x1={};y1(F8,(e,r)=>{x1[e]=function(){const n=arguments;return n[0]=n[0][0],r.apply(this,n)}}),x1.deleteProperty=function(e,r){return x1.set.call(this,e,r,void 0)},x1.set=function(e,r,n){return F8.set.call(this,e[0],r,n,e[0])};function V8(e,r){const n=e[Io];return(n?Ls(n):e)[r]}function n5e(e,r,n){const o=DO(r,n);return o?m1 in o?o[m1]:o.get?.call(e.draft_):void 0}function DO(e,r){if(!(r in e))return;let n=Uh(e);for(;n;){const o=Object.getOwnPropertyDescriptor(n,r);if(o)return o;n=Uh(n)}}function q8(e){e.modified_||(e.modified_=!0,e.parent_&&q8(e.parent_))}function ux(e){e.copy_||(e.assigned_=new Map,e.copy_=M8(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var o5e=class{constructor(r){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(n,o,i)=>{if(Wh(n)&&!Wh(o)){const l=o;o=n;const s=this;return function(d=l,...u){return s.produce(d,p=>o.call(this,p,...u))}}Wh(o)||Wa(6),i!==void 0&&!Wh(i)&&Wa(7);let a;if(Os(n)){const l=$O(this),s=H8(l,n,void 0);let c=!0;try{a=o(s),c=!1}finally{c?I8(l):O8(l)}return CO(l,i),RO(a,l)}else if(!n||!A8(n)){if(a=o(n),a===void 0&&(a=n),a===bO&&(a=void 0),this.autoFreeze_&&N8(a,!0),i){const l=[],s=[];Gh(B8).generateReplacementPatches_(n,a,{patches_:l,inversePatches_:s}),i(l,s)}return a}else Wa(1,n)},this.produceWithPatches=(n,o)=>{if(Wh(n))return(s,...c)=>this.produceWithPatches(s,d=>n(d,...c));let i,a;return[this.produce(n,o,(s,c)=>{i=s,a=c}),i,a]},D8(r?.autoFreeze)&&this.setAutoFreeze(r.autoFreeze),D8(r?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(r.useStrictShallowCopy),D8(r?.useStrictIteration)&&this.setUseStrictIteration(r.useStrictIteration)}createDraft(r){Os(r)||Wa(8),nd(r)&&(r=i5e(r));const n=$O(this),o=H8(n,r,void 0);return o[Io].isManual_=!0,O8(n),o}finishDraft(r,n){const o=r&&r[Io];(!o||!o.isManual_)&&Wa(9);const{scope_:i}=o;return CO(i,n),RO(void 0,i)}setAutoFreeze(r){this.autoFreeze_=r}setUseStrictShallowCopy(r){this.useStrictShallowCopy_=r}setUseStrictIteration(r){this.useStrictIteration_=r}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(r,n){let o;for(o=n.length-1;o>=0;o--){const a=n[o];if(a.path.length===0&&a.op==="replace"){r=a.value;break}}o>-1&&(n=n.slice(o+1));const i=Gh(B8).applyPatches_;return nd(r)?i(r,n):this.produce(r,a=>i(a,n))}};function H8(e,r,n,o){const[i,a]=ix(r)?Gh(cx).proxyMap_(r,n):ax(r)?Gh(cx).proxySet_(r,n):r5e(r,n);return(n?.scope_??EO()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=o,n&&o!==void 0?e5e(n,a,o):a.callbacks_.push(function(c){c.mapSetPlugin_?.fixSetContents(a);const{patchPlugin_:d}=c;a.modified_&&d&&d.generatePatches_(a,[],c)}),i}function i5e(e){return nd(e)||Wa(10,e),PO(e)}function PO(e){if(!Os(e)||sx(e))return e;const r=e[Io];let n,o=!0;if(r){if(!r.modified_)return r.base_;r.finalized_=!0,n=M8(e,r.scope_.immer_.useStrictShallowCopy_),o=r.scope_.immer_.shouldUseStrictIteration()}else n=M8(e,!0);return y1(n,(i,a)=>{nx(n,i,PO(a))},o),r&&(r.finalized_=!1),n}var a5e=new o5e,Yh=a5e.produce,MO=e=>e;function l5e(e){return Ns(e,N4e(r=>!!r.notation),$8(Lu("notation")),R8(z8($8(Lu("shape")),R8(z8($8(Lu("color")),R8(z8(Kb(Lu("kind")),Zb())),f1(),Kb(([r,n])=>({kinds:n,color:r})))),f1(),mO(([r,n])=>n.map(({color:o,kinds:i})=>({shape:r,color:o,kinds:i}))))),f1(),mO(([r,n])=>n.map(({shape:o,color:i,kinds:a})=>({title:r,shape:o,color:i,kinds:a}))),vO(Lu("shape"),Lu("title"),[r=>r.kinds.length,"desc"]))}const wo=(e,r)=>e===r||Xn(e)&&Xn(r)?!1:!yb(e,r),px=5;function s5e(e,r){e.color=r.color,e.kind=r.kind,e.navigateTo=r.navigateTo??null,e.links=r.links?[...r.links]:null,e.tags=[...r.tags],Xn(r.style.border)?delete e.style.border:e.style.border=r.style.border,V4e(r.style.opacity)?e.style.opacity=r.style.opacity:delete e.style.opacity,Xn(r.style.multiple)?delete e.style.multiple:e.style.multiple=r.style.multiple}function c5e(e,r,n){if(wo(r.icon??"none",e.icon??"none")){const o=Ji(e.icon)&&e.icon!=="none";switch(!0){case(o&&Ji(r.icon)&&r.icon!=="none"):return e.icon=r.icon,!0;case(o&&(Xn(r.icon)||r.icon==="none")):return e.icon="none",!0;case(!o&&Ji(r.icon)&&r.icon!=="none"):return n?(e.icon=r.icon,!0):!1}}return!0}function U8(e,r){return e?"md"in r?(e.md=r.md,delete e.txt,e):("txt"in r&&(e.txt=r.txt,delete e.md),e):r}function d5e(e,r,n){let o=!0;return wo(e.title,r.title)&&(n?e.title=r.title:o=!1),wo(e.description,r.description)&&(Xn(r.description)?delete e.description:n?e.description=U8(e.description,r.description):o=!1),wo(e.technology,r.technology)&&(Xn(r.technology)?delete e.technology:n?e.technology=r.technology:o=!1),o}function u5e(e,r,n){return e.title=r.title,Xn(r.description)?delete e.description:e.description=U8(e.description,r.description),Xn(r.technology)?delete e.technology:e.technology=r.technology,!0}function NO(e,r){He(e.id===r.id,"applyManualLayout: view ids do not match"),He(e._stage==="layouted","applyManualLayout: expected layouted view"),He(r._stage==="layouted","applyManualLayout: expected layouted snapshot"),He(e._layout!=="manual","applyManualLayout: expected auto-layouted view");const n=new Set;e._type!==r._type&&n.add("type-changed");const o=new Map(e.nodes.map(u=>[u.id,u])),i=new Map(e.edges.map(u=>[u.id,u])),a=p5e(r.nodes,o,n),l=h5e(r.edges,i,n),s=l5e(a),c=Object.assign({...r},{title:e.title??r.title,description:e.description??r.description,tags:e.tags?[...e.tags]:null,links:e.links?[...e.links]:null,[k8]:"manual",...s&&s.length>0?{notation:{nodes:s}}:{},nodes:a,edges:l});C4e(e)&&c._type==="dynamic"&&(c.variant=e.variant);const d=[...n];return Ll(d,1)?c.drifts=d:"drifts"in c&&delete c.drifts,c}function p5e(e,r,n){const o=e.map(i=>{const a=r.get(i.id);return a&&r.delete(a.id),Yh(i,l=>{if(!a){l.drifts=["removed"],n.add("nodes-removed");return}s5e(l,a);const s=new Set,c=i.children.length>0,d=a.children.length>0;(wo(l.modelRef,a.modelRef)||wo(l.deploymentRef,a.deploymentRef))&&s.add("modelRef-changed"),d&&!c&&s.add("became-compound"),!d&&c&&s.add("became-leaf"),wo(l.parent,a.parent)&&s.add("parent-changed");const u=l.width+px>=a.width&&l.height+px>=a.height;wo(l.shape,a.shape)&&(u?l.shape=a.shape:s.add("shape-changed")),c5e(l,a,u&&d===c)||s.add("label-changed"),(c?u5e:d5e)(l,a,u)||s.add("label-changed"),wo(i.notation,a.notation)&&(l.notation=a.notation??null),c&&d&&D4e(new Set(i.children),new Set(a.children)).size>0&&s.add("children-changed");const f=[...s];Ll(f,1)?(n.add("nodes-drift"),l.drifts=f):delete l.drifts})});return r.size>0&&n.add("nodes-added"),o}function h5e(e,r,n){const o=e.map(i=>{let a=r.get(i.id)??Ns(r.values(),Is(l=>l.source===i.source&&l.target===i.target),g1());return a&&r.delete(a.id),Yh(i,l=>{if(!a){l.drifts=["removed"],n.add("edges-removed");return}const s=new Set,c=i.id===a.id;switch(!0){case(c&&i.source==a.source&&i.target==a.target):{wo(l.dir??"forward",a.dir??"forward")&&s.add("direction-changed");break}case(c&&i.source==a.target&&i.target==a.source):{i.source!==i.target&&s.add("direction-changed");break}case c:{i.source!=a.source&&s.add("source-changed"),i.target!=a.target&&s.add("target-changed");break}default:{He(i.id!=a.id,"Unexpected case in edge drift detection, ids should not match"),He(i.source==a.source,"Unexpected case in edge drift detection, sources should match"),He(i.target==a.target,"Unexpected case in edge drift detection, targets should match"),wo(l.dir??"forward",a.dir??"forward")&&s.add("direction-changed");break}}l.color=a.color,l.line=a.line,l.navigateTo=a.navigateTo??null,l.tags=a.tags?[...a.tags]:null,wo(i.notes,a.notes)&&(Xn(i.notes)!==Xn(a.notes)&&s.add("notes-changed"),l.notes=a.notes??i.notes),a.astPath?l.astPath=a.astPath:delete l.astPath;const d=yO(i,["label","description","technology","labelBBox"]),u=yO(a,["label","description","technology","labelBBox"]);if(wo(d,u))switch(!0){case(a.labelBBox&&!i.labelBBox):{s.add("label-added");break}case(i.labelBBox&&!a.labelBBox):{s.add("label-removed");break}case(!!i.labelBBox&&!!a.labelBBox):{a.labelBBox.width*a.labelBBox.height>(i.labelBBox.width+px)*(i.labelBBox.height+px)&&(l.labelBBox.width=Math.round(a.labelBBox.width),l.labelBBox.height=Math.round(a.labelBBox.height)),wo(i.label,a.label)&&(Xn(a.label)!==Xn(i.label)&&s.add("label-changed"),l.label=a.label??i.label),wo(i.description,a.description)&&(Xn(a.description)!==Xn(i.description)&&s.add("label-changed"),a.description&&(l.description=U8(i.description,a.description))),wo(i.technology,a.technology)&&(Xn(a.technology)!==Xn(i.technology)&&s.add("label-changed"),l.technology=a.technology??i.technology??null);break}default:He(!i.labelBBox,"Unexpected case in edge labelBBox drift detection"),He(!a.labelBBox,"Unexpected case in next labelBBox drift detection");break}const p=[...s];Ll(p,1)?(n.add("edges-drift"),l.drifts=p):delete l.drifts})});return r.size>0&&n.add("edges-added"),o}function f5e(e,r){const{drifts:n,...o}=NO(e,r);if(n){const i=new Set;n.includes("type-changed")&&i.add("type-changed");const a=new Map(o.nodes.map(u=>[u.id,u])),l=new Map(o.edges.map(u=>[u.id,u])),s=e.nodes.map(u=>{const p=a.get(u.id);return p&&a.delete(p.id),Yh(u,f=>{if(!p){i.add("nodes-added"),f.drifts=["added"];return}p.drifts?(i.add("nodes-drift"),f.drifts=[...p.drifts]):delete f.drifts})});a.size>0&&i.add("nodes-removed");const c=e.edges.map(u=>{const p=l.get(u.id)??Ns(l.values(),Is(f=>f.source===u.source&&f.target===u.target),g1());return p&&l.delete(p.id),Yh(u,f=>{if(!p){i.add("edges-added"),f.drifts=["added"];return}p.drifts?(i.add("edges-drift"),f.drifts=[...p.drifts]):delete f.drifts})});l.size>0&&i.add("edges-removed");const d=[...i];return Yh(e,u=>{Ll(d,1)?u.drifts=d:delete u.drifts,u.nodes=MO(s),u.edges=MO(c),u[k8]="auto"})}return Yh(e,i=>{delete i.drifts,i[k8]="auto"})}function Fs(e){return e.summary??e.description}function Xh(e){return e.description??e.summary}const w1="@group";function g5e(e){return e.kind===w1}function BO(e,r){return He(typeof e=="string"&&e!=""),"@"+e+"."+r}function m5e(e){return e.startsWith("@")}function y5e(e){if(!e.startsWith("@"))return[null,e];const r=e.indexOf(".");if(r<2)throw new Error("Invalid global FQN");const n=e.slice(1,r),o=e.slice(r+1);return[n,o]}function k1(e){return e.startsWith("step-")}function IO(e){if(!k1(e))throw new Error(`Invalid step edge id: ${e}`);return parseFloat(e.slice(5))}function v5e(...e){return ao(b5e,e)}function b5e(e,r){let n={...e};for(let[o,i]of Object.entries(n))r(i,o,e)&&delete n[o];return n}var W8={},OO;function G8(){return OO||(OO=1,(function(e){var r=Math.pow(2,8)-1,n=Math.pow(2,16)-1,o=Math.pow(2,32)-1,i=Math.pow(2,7)-1,a=Math.pow(2,15)-1,l=Math.pow(2,31)-1;e.getPointerArray=function(c){var d=c-1;if(d<=r)return Uint8Array;if(d<=n)return Uint16Array;if(d<=o)return Uint32Array;throw new Error("mnemonist: Pointer Array of size > 4294967295 is not supported.")},e.getSignedPointerArray=function(c){var d=c-1;return d<=i?Int8Array:d<=a?Int16Array:d<=l?Int32Array:Float64Array},e.getNumberType=function(c){return c===(c|0)?Math.sign(c)===-1?c<=127&&c>=-128?Int8Array:c<=32767&&c>=-32768?Int16Array:Int32Array:c<=255?Uint8Array:c<=65535?Uint16Array:Uint32Array:Float64Array};var s={Uint8Array:1,Int8Array:2,Uint16Array:3,Int16Array:4,Uint32Array:5,Int32Array:6,Float32Array:7,Float64Array:8};e.getMinimalRepresentation=function(c,d){var u=null,p=0,f,m,v,w,x;for(w=0,x=c.length;wp&&(p=f,u=m);return u},e.isTypedArray=function(c){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView(c)},e.concat=function(){var c=0,d,u,p;for(d=0,p=arguments.length;d"u"))return this.splayOnTop(l),this.V[l]},i.prototype.peek=function(a){var l=this.items[a];if(!(typeof l>"u"))return this.V[l]},i.prototype.forEach=function(a,l){l=arguments.length>1?l:this;for(var s=0,c=this.size,d=this.head,u=this.K,p=this.V,f=this.forward;s=l)return{done:!0};var u=c[s];return a++,a=l)return{done:!0};var u=c[s];return a++,a=l)return{done:!0};var p=c[s],f=d[s];return a++,a"u"))return this.splayOnTop(l),this.V[l]},i.prototype.peek=function(a){var l=this.items.get(a);if(!(typeof l>"u"))return this.V[l]},i.prototype.splayOnTop=e.prototype.splayOnTop,i.prototype.forEach=e.prototype.forEach,i.prototype.keys=e.prototype.keys,i.prototype.values=e.prototype.values,i.prototype.entries=e.prototype.entries,typeof Symbol<"u"&&(i.prototype[Symbol.iterator]=i.prototype.entries),i.prototype.inspect=e.prototype.inspect,i.from=function(a,l,s,c){if(arguments.length<2){if(c=o.guessLength(a),typeof c!="number")throw new Error("mnemonist/lru-cache.from: could not guess iterable length. Please provide desired capacity as last argument.")}else arguments.length===2&&(c=l,l=null,s=null);var d=new i(l,s,c);return r(a,function(u,p){d.set(p,u)}),d},X8=i,X8}var k5e=w5e();const HO=Qm(k5e);function _1(e){return v5e(e,r=>r===void 0)}const _5e=Symbol.for("text"),S5e=Symbol.for("html"),Vs="",UO=new HO(500),WO=new HO(500);class ur{static getOrCreateFromText(r){if(r.trim()===Vs)return ur.EMPTY;let n=WO.get(r);return n||(n=new ur({txt:r}),WO.set(r,n),n)}static getOrCreateFromMarkdown(r){if(r.trim()===Vs)return ur.EMPTY;let n=UO.get(r);return n||(n=new ur({md:r}),UO.set(r,n),n)}static memoize(r,n,o){return ar(r,n,()=>ur.from(o))}static from(r){return r==null||r===ur.EMPTY?ur.EMPTY:r instanceof ur?r:typeof r=="string"?this.getOrCreateFromText(r):"isEmpty"in r&&r.isEmpty?ur.EMPTY:"md"in r?this.getOrCreateFromMarkdown(r.md):this.getOrCreateFromText(r.txt)}static EMPTY=new class extends ur{isEmpty=!0;nonEmpty=!1;isMarkdown=!1;$source=null;constructor(){super({txt:Vs})}get text(){return null}get md(){return null}get html(){return null}};$source;isEmpty;nonEmpty;isMarkdown;constructor(r){this.isMarkdown=!1,typeof r=="string"?(this.$source={txt:r},this.isEmpty=r.trim()===Vs):(this.$source=r,this.isEmpty=!0,"md"in r?(this.isEmpty=r.md===Vs,this.isMarkdown=!0):this.isEmpty=r.txt===Vs),this.nonEmpty=!this.isEmpty}get text(){if(this.isEmpty||this.$source===null)return Vs;const r=this.$source;return"txt"in r?r.txt:ar(this,_5e,()=>c4e(r.md))}get md(){if(this.isEmpty||this.$source===null)return Vs;const r=this.$source;if("md"in r)return r.md;if("txt"in r)return r.txt;Qo(r)}get html(){if(this.isEmpty||this.$source===null)return Vs;const r=this.$source;return"txt"in r?r.txt:ar(this,S5e,()=>s4e(r.md))}equals(r){return this===r?!0:r instanceof ur?this.isEmpty&&r.isEmpty?!0:this.isEmpty!==r.isEmpty||this.isMarkdown!==r.isMarkdown?!1:this.isMarkdown?this.$source?.md===r.$source?.md:this.$source?.txt===r.$source?.txt:!1}}var S1;(e=>{function r(c){return"model"in c&&!("project"in c)}e.isElementRef=r;function n(c){return"project"in c&&"model"in c}e.isImportRef=n;function o(c){if(Qc(c))throw new Error(`Expected FqnRef, got: "${c}"`);if(n(c))return BO(c.project,c.model);if(r(c))return c.model;throw new Error("Expected FqnRef.ModelRef or FqnRef.ImportRef")}e.flatten=o;function i(c){return r(c)||n(c)}e.isModelRef=i;function a(c){return"deployment"in c&&"element"in c}e.isInsideInstanceRef=a;function l(c){return"deployment"in c&&!("element"in c)}e.isDeploymentElementRef=l;function s(c){return l(c)||a(c)}e.isDeploymentRef=s})(S1||(S1={}));var ko;(e=>{function r({x:u,y:p,width:f,height:m}){return{x:u+f/2,y:p+m/2}}e.center=r;function n({x:u,y:p,width:f,height:m}){return[{x:u,y:p},{x:u+f,y:p},{x:u+f,y:p+m},{x:u,y:p+m}]}e.toPoints=n;function o(u){const{x1:p,y1:f,x2:m,y2:v}=K8.fromPoints(u);return{x:p,y:f,width:m-p,height:v-f}}e.fromPoints=o;function i(...u){if(He(Ll(u,1),"No boxes provided"),u.length===1)return u[0];let p=u[0].x,f=u[0].y,m=u[0].x+u[0].width,v=u[0].y+u[0].height;for(let w=1;w=p.x+p.width&&u.y+u.height>=p.y+p.height}e.includes=d})(ko||(ko={}));var K8;(e=>{function r({x1:l,y1:s,x2:c,y2:d}){return{x:(l+c)/2,y:(s+d)/2}}e.center=r;function n(l){He(l.length>0,"At least one point is required");let s=1/0,c=1/0,d=-1/0,u=-1/0;for(const[p,f]of l)s=Math.min(s,p),c=Math.min(c,f),d=Math.max(d,p),u=Math.max(u,f);return{x1:s,y1:c,x2:d,y2:u}}e.fromPoints=n;function o(...l){He(l.length>0,"No boxes provided");let s=1/0,c=1/0,d=-1/0,u=-1/0;for(const p of l)s=Math.min(s,p.x1),c=Math.min(c,p.y1),d=Math.max(d,p.x2),u=Math.max(u,p.y2);return{x1:s,y1:c,x2:d,y2:u}}e.merge=o;function i(l){return{x:l.x1,y:l.y1,width:l.x2-l.x1,height:l.y2-l.y1}}e.toBBox=i;function a(l,s){return l===s?!0:l.x1<=s.x1&&l.y1<=s.y1&&l.x2>=s.x2&&l.y2>=s.y2}e.includes=a})(K8||(K8={}));class ki{constructor(r,n){this.x=r,this.y=n}static create(...r){return r.length===2?new ki(r[0],r[1]):new ki(r[0].x,r[0].y)}static add(r,n){return{x:r.x+n.x,y:r.y+n.y}}static subtract(r,n){return{x:r.x-n.x,y:r.y-n.y}}static multiply(r,n){return{x:r.x*n,y:r.y*n}}static divide(r,n){return{x:r.x/n,y:r.y/n}}static dot(r,n){return r.x*n.x+r.y*n.y}add(r){return new ki(this.x+r.x,this.y+r.y)}subtract(r){return new ki(this.x-r.x,this.y-r.y)}multiply(r){return new ki(this.x*r,this.y*r)}divide(r){return new ki(this.x/r,this.y/r)}dot(r){return this.x*r.x+this.y*r.y}cross(r){return this.x*r.y-this.y*r.x}length(){return this.x===0&&this.y===0?0:Math.sqrt(this.x**2+this.y**2)}normalize(){const r=this.length();return r===0?new ki(0,0):new ki(this.x/r,this.y/r)}round(){return new ki(Math.round(this.x),Math.round(this.y))}toObject(){return{x:this.x,y:this.y}}}function Qr(...e){return e.length===1&&e[0]instanceof ki?e[0]:e.length===2?new ki(e[0],e[1]):new ki(e[0].x,e[0].y)}function Z8(e){return k1(e)&&e.includes(".")?e.slice(0,e.indexOf(".")+1):null}function GO(e){const r=typeof e=="string"?e:e.color;return r.startsWith("#")||r.startsWith("rgb")}function Q8(...e){return ao(E5e,e)}function E5e(e,r){let n=[...e];return n.sort(r),n}const C5e=["tomato","grass","blue","ruby","orange","indigo","pink","teal","purple","amber","crimson","red","lime","yellow","violet"];function $5e(e,r,n){let o=e.get(r);return o||(o=n(r),e.set(r,o)),o}function R5e(e){let r=5381;const n=e.length;He(n>0,"stringHash: empty string");for(let o=0;o>>0).toString(36)}function E1(e,r){const n=r??e;He(Qb(n));function o(i){for(const a of i)if(n(a))return a}return r?o(e):o}function z5e(e,r){const n=e;He(Qb(n));function*o(i){for(const a of i)yield n(a)}return o}function C1(e){return e?Array.from(e):r=>Array.from(r)}function T5e(e){return e?new Set(e):r=>new Set(r)}function YO(e,r){const n=r??e;He(Qb(n));function o(i){for(const a of i)if(n(a))return!0;return!1}return r?o(e):o}function j5e(e,r){const n=e;He(n>=0,"Count must be a non-negative number");function*o(i){let a=0;for(const l of i){if(a>=n)break;yield l,a++}}return i=>o(i)}function A5e(e,r){let n=Math.ceil(e),o=Math.floor(r);if(o{setTimeout(()=>{n(D5e)},r??100)})}function hx(e){const r=Jc([...e]),n=new Set(r),o=new Map(r.map(l=>[l._literalId,l])),i=new Ln(()=>null),a=r.reduce((l,s,c,d)=>(l.set(s,d.slice(c+1).filter(tB(s)).map(u=>(n.delete(u),u)).reduce((u,p)=>(u.some(Yn(p))||(u.push(p),i.set(p,s)),u),[])),l),new Ln(()=>[]));return{sorted:r,byId:l=>gt(o.get(l),`Element not found by id: ${l}`),root:n,parent:l=>i.get(l),children:l=>a.get(l),flatten:()=>new Set([...n,...r.reduce((l,s)=>{const c=a.get(s);return c.length===0?(l.push(s),l):(c.length>1&&l.push(...c),l)},[])])}}const J8=(e,r)=>e.size>2&&r.size!==e.size?new Set(Jc([...hx(e).flatten(),...r])):e.size>1?new Set(Jc([...e])):e;function KO(e,r,n){const o=c=>r.has(c);let i=new Set([e]);const a={incomers:new Set,subjects:new Set([e]),outgoers:new Set};let l=new Set(n.incoming.flatMap(c=>{if(a.subjects.add(c.target),a.incomers.add(c.source),i.add(c.target),c.target!==e){let p=c.target.parent;for(;p&&p!==e;)i.add(p),p=p.parent}let d=c.source;const u=[];for(;u.push(d),!(o(d)||!d.parent);)d=d.parent;return u})),s=new Set(n.outgoing.flatMap(c=>{if(a.subjects.add(c.source),a.outgoers.add(c.target),i.add(c.source),c.source!==e){let p=c.source.parent;for(;p&&p!==e;)i.add(p),p=p.parent}let d=c.target;const u=[];for(;u.push(d),!(o(d)||!d.parent);)d=d.parent;return u}));return{incomers:J8(l,a.incomers),incoming:new Set(n.incoming),subjects:J8(i,a.subjects),outgoing:new Set(n.outgoing),outgoers:J8(s,a.outgoers)}}function ZO(e,r,n,o="global"){const i=n?r.findView(n):null;if(o==="view")return He(i,'Scope view id is required when scope is "view"'),P5e(e,i,r);const a=r.element(e),l=T5e(a.ascendingSiblings());return KO(a,l,{incoming:[...a.incoming()],outgoing:[...a.outgoing()]})}function P5e(e,r,n){const o=n.element(e);let i={incoming:C1(Is(o.incoming(),s=>r.includesRelation(s.id))),outgoing:C1(Is(o.outgoing(),s=>r.includesRelation(s.id)))};const a=tB(o),l=new Set([...o.ascendingSiblings(),...Ns(r.elements(),z5e(s=>s.element),Is(s=>s!==o&&a(s)))]);return KO(o,l,i)}var QO;(e=>{e.isInside=r=>n=>Yn(r,n.source.id)&&Yn(r,n.target.id),e.isDirectedBetween=(r,n)=>o=>(o.source.id===r||Yn(r,o.source.id))&&(o.target.id===n||Yn(n,o.target.id)),e.isAnyBetween=(r,n)=>{const o=(0,e.isDirectedBetween)(r,n),i=(0,e.isDirectedBetween)(n,r);return a=>o(a)||i(a)},e.isIncoming=r=>n=>(n.target.id===r||Yn(r,n.target.id))&&!Yn(r,n.source.id),e.isOutgoing=r=>n=>(n.source.id===r||Yn(r,n.source.id))&&!Yn(r,n.target.id),e.isAnyInOut=r=>{const n=(0,e.isIncoming)(r),o=(0,e.isOutgoing)(r);return i=>n(i)||o(i)}})(QO||(QO={}));const M5e=Symbol.for("nodejs.util.inspect.custom");function $1(e){return e===""||e===void 0?!0:Array.isArray(e)?e.length===0:Object.keys(e).length===0}function e7(...e){return ao(N5e,e)}function N5e(e,r){if(e===r||Object.is(e,r))return!0;if(typeof e!="object"||!e||typeof r!="object"||!r)return!1;if(e instanceof Map&&r instanceof Map)return B5e(e,r);if(e instanceof Set&&r instanceof Set)return I5e(e,r);let n=Object.keys(e);if(n.length!==Object.keys(r).length)return!1;for(let o of n){if(!Object.hasOwn(r,o))return!1;let{[o]:i}=e,{[o]:a}=r;if(i!==a||!Object.is(i,a))return!1}return!0}function B5e(e,r){if(e.size!==r.size)return!1;for(let[n,o]of e){let i=r.get(n);if(o!==i||!Object.is(o,i))return!1}return!0}function I5e(e,r){if(e.size!==r.size)return!1;for(let n of e)if(!r.has(n))return!1;return!0}class JO{Aux;get style(){return ar(this,"style",()=>_1({shape:this.$model.$styles.defaults.shape,color:this.$model.$styles.defaults.color,border:this.$model.$styles.defaults.border,opacity:this.$model.$styles.defaults.opacity,size:this.$model.$styles.defaults.size,padding:this.$model.$styles.defaults.padding,textSize:this.$model.$styles.defaults.text,...this.$node.style}))}get name(){return Jm(this.id)}get shape(){return this.style.shape}get color(){return this.style.color}get icon(){return this.style.icon??null}get summary(){return ur.memoize(this,"summary",Fs(this.$node))}get description(){return ur.memoize(this,"description",Xh(this.$node))}get technology(){return this.$node.technology??null}get links(){return this.$node.links??[]}ancestors(){return this.$model.ancestors(this)}commonAncestor(r){const n=t1(this.id,r.id);return n?this.$model.node(n):null}siblings(){return this.$model.siblings(this)}isSibling(r){return this.parent===r.parent}*ascendingSiblings(){yield*this.siblings();for(const r of this.ancestors())yield*r.siblings()}*descendingSiblings(){for(const r of[...this.ancestors()].reverse())yield*r.siblings();yield*this.siblings()}incoming(r="all"){return this.$model.incoming(this,r)}outgoing(r="all"){return this.$model.outgoing(this,r)}*incomers(r="all"){const n=new Set;for(const o of this.incoming(r))n.has(o.source.id)||(n.add(o.source.id),yield o.source)}*outgoers(r="all"){const n=new Set;for(const o of this.outgoing(r))n.has(o.target.id)||(n.add(o.target.id),yield o.target)}*views(){for(const r of this.$model.views())r._type==="deployment"&&r.includesDeployment(this.id)&&(yield r)}isDeploymentNode(){return!1}isInstance(){return!1}get allOutgoing(){return ar(this,Symbol.for("allOutgoing"),()=>od.from(new Set(this.outgoingModelRelationships()),new Set(this.outgoing())))}get allIncoming(){return ar(this,Symbol.for("allIncoming"),()=>od.from(new Set(this.incomingModelRelationships()),new Set(this.incoming())))}hasMetadata(){return!!this.$node.metadata&&!$1(this.$node.metadata)}getMetadata(r){return r?this.$node.metadata?.[r]:this.$node.metadata??{}}isTagged(r){return this.tags.includes(r)}}class eL extends JO{constructor(r,n){super(),this.$model=r,this.$node=n,this.id=n.id,this._literalId=n.id,this.title=n.title,this.hierarchyLevel=Tb(n.id)}id;_literalId;title;hierarchyLevel;get parent(){return this.$model.parent(this)}get kind(){return this.$node.kind}get tags(){return ar(this,Symbol.for("tags"),()=>Zb([...this.$node.tags??[],...this.$model.$model.specification.deployments[this.kind]?.tags??[]]))}children(){return this.$model.children(this)}descendants(r="desc"){return this.$model.descendants(this,r)}isDeploymentNode(){return!0}*instances(){for(const r of this.descendants("desc"))r.isInstance()&&(yield r)}onlyOneInstance(){const r=this.children();if(r.size!==1)return null;const n=g1(r);return n?n.isInstance()?n:n.onlyOneInstance():null}_relationshipsFromInstances=null;relationshipsFromInstances(){if(this._relationshipsFromInstances)return this._relationshipsFromInstances;const{outgoing:r,incoming:n}=this._relationshipsFromInstances={outgoing:new Set,incoming:new Set};for(const o of this.instances()){for(const i of o.element.outgoing())r.add(i);for(const i of o.element.incoming())n.add(i)}return this._relationshipsFromInstances}outgoingModelRelationships(){return this.relationshipsFromInstances().outgoing.values()}incomingModelRelationships(){return this.relationshipsFromInstances().incoming.values()}internalModelRelationships(){const{outgoing:r,incoming:n}=this.relationshipsFromInstances();return Hh(n,r)}}class tL extends JO{constructor(r,n,o){super(),this.$model=r,this.$instance=n,this.element=o,this.id=n.id,this._literalId=n.id,this.title=n.title??o.title,this.hierarchyLevel=Tb(n.id)}id;_literalId;title;hierarchyLevel;get $node(){return this.$instance}get parent(){return gt(this.$model.parent(this),`Parent of ${this.id} not found`)}get style(){return ar(this,"style",()=>_1({shape:this.$model.$styles.defaults.shape,color:this.$model.$styles.defaults.color,border:this.$model.$styles.defaults.border,opacity:this.$model.$styles.defaults.opacity,size:this.$model.$styles.defaults.size,padding:this.$model.$styles.defaults.padding,textSize:this.$model.$styles.defaults.text,...this.element.$element.style,...this.$instance.style}))}get tags(){return ar(this,Symbol.for("tags"),()=>Zb([...this.$instance.tags??[],...this.element.tags]))}get kind(){return this.element.kind}get summary(){return ur.memoize(this,"summary",Fs(this.$instance)??Fs(this.element.$element))}get description(){return ur.memoize(this,"description",Xh(this.$instance)??Xh(this.element.$element))}get technology(){return this.$instance.technology??this.element.technology??null}get links(){return this.$instance.links??this.element.links}isInstance(){return!0}outgoingModelRelationships(){return this.element.outgoing()}incomingModelRelationships(){return this.element.incoming()}*views(){for(const r of this.$model.views())if(r._type==="deployment"){if(r.includesDeployment(this.id)){yield r;continue}r.includesDeployment(this.parent.id)&&this.parent.onlyOneInstance()&&(yield r)}}}class O5e{constructor(r,n){this.instance=r,this.element=n}get id(){return this.instance.id}get _literalId(){return this.instance.id}get style(){return ar(this,"style ",()=>({shape:this.element.shape,color:this.element.color,...this.element.$element.style}))}get shape(){return this.element.shape}get color(){return this.element.color}get title(){return this.element.title}get summary(){return this.element.summary}get description(){return this.element.description}get technology(){return this.element.technology}isDeploymentNode(){return!1}isInstance(){return!1}}class L5e{constructor(r,n){this.$model=r,this.$relationship=n,this.source=r.deploymentRef(n.source),this.target=r.deploymentRef(n.target);const o=t1(this.source.id,this.target.id);this.boundary=o?this.$model.node(o):null}boundary;source;target;get id(){return this.$relationship.id}get expression(){return`${this.source.id} -> ${this.target.id}`}get title(){return Ji(this.$relationship.title)?this.$relationship.title:null}get technology(){return this.$relationship.technology??null}get hasSummary(){return!!this.$relationship.summary&&!!this.$relationship.description&&!e7(this.$relationship.summary,this.$relationship.description)}get summary(){return ur.memoize(this,"summary",Fs(this.$relationship))}get description(){return ur.memoize(this,"description",Xh(this.$relationship))}get tags(){return this.$relationship.tags??[]}get kind(){return this.$relationship.kind??null}get navigateTo(){return this.$relationship.navigateTo?this.$model.$model.view(this.$relationship.navigateTo):null}get links(){return this.$relationship.links??[]}get color(){return this.$relationship.color??this.$model.$styles.defaults.relationship.color}get line(){return this.$relationship.line??this.$model.$styles.defaults.relationship.line}get head(){return this.$relationship.head??this.$model.$styles.defaults.relationship.arrow}get tail(){return this.$relationship.tail}*views(){for(const r of this.$model.views())r.includesRelation(this.id)&&(yield r)}isDeploymentRelation(){return!0}isModelRelation(){return!1}hasMetadata(){return!!this.$relationship.metadata&&!$1(this.$relationship.metadata)}getMetadata(r){return r?this.$relationship.metadata?.[r]:this.$relationship.metadata??{}}isTagged(r){return this.tags.includes(r)}}class od{constructor(r=new Set,n=new Set){this.model=r,this.deployment=n}static empty(){return new od}static from(r,n){return new od(new Set(r),new Set(n))}get isEmpty(){return this.model.size===0&&this.deployment.size===0}get nonEmpty(){return this.model.size>0||this.deployment.size>0}get size(){return this.model.size+this.deployment.size}intersect(r){return od.from(Hh(this.model,r.model),Hh(this.deployment,r.deployment))}difference(r){return od.from(E8(this.model,r.model),E8(this.deployment,r.deployment))}union(r){return od.from(S8(this.model,r.model),S8(this.deployment,r.deployment))}}function rL(e,r){return n=>e.source===n.source&&e.target===n.target}function t7(e,r,n="directed"){if(e===r)return[];if(eB(e,r))return[];const o=Hh(e.allOutgoing,r.allIncoming),i=o.size>0?new ea(e,r,o):null;if(n==="directed")return i?[i]:[];const a=Hh(e.allIncoming,r.allOutgoing),l=a.size>0?new ea(r,e,a):null;return i&&l?[i,l]:i?[i]:l?[l]:[]}function nL(e,r,n="both"){if(e.allIncoming.size===0&&e.allOutgoing.size===0)return[];const o=[],i=[];for(const a of r)if(e!==a)for(const l of t7(e,a,n))l.source===e?o.push(l):i.push(l);return[...o,...i]}function F5e(e){return[...e].reduce((r,n,o,i)=>(o===i.length-1||r.push(...nL(n,i.slice(o+1),"both")),r),[])}const V5e={__proto__:null,findConnection:t7,findConnectionsBetween:nL,findConnectionsWithin:F5e};class ea{constructor(r,n,o=new Set){this.source=r,this.target=n,this.relations=o,this.id=R5e(`model:${r.id}:${n.id}`)}id;_boundary;get boundary(){return this._boundary??=this.source.commonAncestor(this.target)}get expression(){return`${this.source.id} -> ${this.target.id}`}get isDirect(){return this.nonEmpty()&&!this.isImplicit}get isImplicit(){return this.nonEmpty()&&YO(this.relations,sO(rL(this)))}get directRelations(){return new Set(Is(this.relations,rL(this)))}nonEmpty(){return this.relations.size>0}mergeWith(r){return He(this.source.id===r.source.id,"Cannot merge connections with different sources"),He(this.target.id===r.target.id,"Cannot merge connections with different targets"),new ea(this.source,this.target,S8(this.relations,r.relations))}difference(r){return new ea(this.source,this.target,E8(this.relations,r.relations))}intersect(r){return He(r instanceof ea,"Cannot intersect connection with different type"),new ea(this.source,this.target,Hh(this.relations,r.relations))}equals(r){He(r instanceof ea,"Cannot merge connection with different type");const n=r;return this.id===n.id&&this.source.id===n.source.id&&this.target.id===n.target.id&&A4e(this.relations,n.relations)}update(r){return new ea(this.source,this.target,r)}[M5e](r,n,o){const i=this.toString();return Object.defineProperty(i,"constructor",{value:ea,enumerable:!1}),i}toString(){return[this.expression,this.relations.size?" relations:":" relations: [ ]",...[...this.relations].map(r=>" "+r.expression)].join(` -`)}reversed(r=!1){if(!r)return new ea(this.target,this.source);const[n]=t7(this.target,this.source,"directed");return n??new ea(this.target,this.source,new Set)}}function q5e(e){if(e==null||e==="")return!0;if(typeof e!="object")return!1;if("length"in e&&typeof e.length=="number")return e.length===0;if("size"in e&&typeof e.size=="number")return e.size===0;for(let r in e)return!1;return Object.getOwnPropertySymbols(e).length===0}function H5e(...e){return ao(U5e,e)}const U5e=e=>e.at(-1);function oL(e,r,n){return typeof r=="number"||r===void 0?o=>o.split(e,r):e.split(r,n)}function fx(...e){return ao(Object.values,e)}class gx{constructor(r,n){this.$model=r,this.$element=n,this.id=this.$element.id,this._literalId=this.$element.id;const[o,i]=y5e(this.id);o?(this.imported={from:o,fqn:i},this.hierarchyLevel=Tb(i)):(this.imported=null,this.hierarchyLevel=Tb(this.id))}Aux;id;_literalId;hierarchyLevel;imported;get name(){return Jm(this.id)}get parent(){return this.$model.parent(this)}get kind(){return this.$element.kind}get shape(){return this.style.shape}get color(){return this.style.color}get icon(){return this.style.icon??null}get tags(){return ar(this,Symbol.for("tags"),()=>Zb([...this.$element.tags??[],...this.$model.specification.elements[this.$element.kind]?.tags??[]]))}get title(){return this.$element.title}get hasSummary(){return!!this.$element.summary&&!!this.$element.description&&!e7(this.$element.summary,this.$element.description)}get summary(){return ur.memoize(this,"summary",Fs(this.$element))}get description(){return ur.memoize(this,"description",Xh(this.$element))}get technology(){return this.$element.technology??null}get links(){return this.$element.links??[]}get defaultView(){return ar(this,Symbol.for("defaultView"),()=>g1(this.scopedViews())??null)}get isRoot(){return this.parent===null}get style(){return ar(this,"style",()=>_1({shape:this.$model.$styles.defaults.shape,color:this.$model.$styles.defaults.color,border:this.$model.$styles.defaults.border,opacity:this.$model.$styles.defaults.opacity,size:this.$model.$styles.defaults.size,padding:this.$model.$styles.defaults.padding,textSize:this.$model.$styles.defaults.text,...this.$element.style}))}isAncestorOf(r){return Yn(this,r)}isDescendantOf(r){return Yn(r,this)}ancestors(){return this.$model.ancestors(this)}commonAncestor(r){const n=t1(this.id,r.id);return n?this.$model.element(n):null}children(){return this.$model.children(this)}descendants(r){return r?rB([...this.$model.descendants(this)],r)[Symbol.iterator]():this.$model.descendants(this)}siblings(){return this.$model.siblings(this)}*ascendingSiblings(){yield*this.siblings();for(const r of this.ancestors())yield*r.siblings()}*descendingSiblings(){for(const r of[...this.ancestors()].reverse())yield*r.siblings();yield*this.siblings()}incoming(r="all"){return this.$model.incoming(this,r)}*incomers(r="all"){const n=new Set;for(const o of this.incoming(r))n.has(o.source.id)||(n.add(o.source.id),yield o.source)}outgoing(r="all"){return this.$model.outgoing(this,r)}*outgoers(r="all"){const n=new Set;for(const o of this.outgoing(r))n.has(o.target.id)||(n.add(o.target.id),yield o.target)}get allOutgoing(){return ar(this,Symbol.for("allOutgoing"),()=>new Set(this.outgoing()))}get allIncoming(){return ar(this,Symbol.for("allIncoming"),()=>new Set(this.incoming()))}views(){return ar(this,Symbol.for("views"),()=>{const r=new Set;for(const n of this.$model.views())n.includesElement(this.id)&&r.add(n);return r})}scopedViews(){return ar(this,Symbol.for("scopedViews"),()=>{const r=new Set;for(const n of this.$model.views())n.isScopedElementView()&&n.viewOf.id===this.id&&r.add(n);return r})}isDeployed(){return Ji(g1(this.deployments()))}deployments(){return this.$model.deployment.instancesOf(this)}hasMetadata(){return!!this.$element.metadata&&!$1(this.$element.metadata)}getMetadata(r){return r?this.$element.metadata?.[r]:this.$element.metadata??{}}isTagged(r){return this.tags.includes(r)}}const yr=e=>typeof e=="string"?e:e.id,_i="/",r7=e=>{if(He(!e.includes(` -`),"View title cannot contain newlines"),e.includes(_i)){const r=e.split(_i).map(n=>n.trim()).filter(n=>n.length>0);return Ll(r,1)?r:[""]}return[e.trim()]},mx=e=>r7(e).join(_i),W5e=e=>{const r=r7(e);return Ll(r,2)?r.slice(0,-1).join(_i):null},n7=e=>e.includes(_i)?r7(e).pop()??e:e.trim();class G5e{constructor(r){this.$model=r;const n=this.$deployments=r.$data.deployments,o=fx(n.elements);for(const i of Jc(o)){const a=this.addElement(i);for(const l of a.tags)this.#c.get(l).add(a);a.isInstance()&&this.#r.get(a.element.id).add(a)}for(const i of fx(n.relations)){const a=this.addRelation(i);for(const l of a.tags)this.#c.get(l).add(a)}}#e=new Map;#a=new Map;#t=new Ln(()=>new Set);#r=new Ln(()=>new Set);#l=new Set;#n=new Map;#s=new Ln(()=>new Set);#i=new Ln(()=>new Set);#o=new Ln(()=>new Set);#c=new Ln(()=>new Set);#d=new Map;$deployments;get $styles(){return this.$model.$styles}element(r){if(r instanceof eL||r instanceof tL)return r;const n=yr(r);return gt(this.#e.get(n),`Element ${n} not found`)}findElement(r){return this.#e.get(r)??null}node(r){const n=this.element(r);return He(n.isDeploymentNode(),`Element ${n.id} is not a deployment node`),n}findNode(r){const n=this.findElement(r);return n?(He(n.isDeploymentNode(),`Element ${n?.id} is not a deployment node`),n):null}instance(r){const n=this.element(r);return He(n.isInstance(),`Element ${n.id} is not a deployed instance`),n}findInstance(r){const n=this.findElement(r);return n?(He(n.isInstance(),`Element ${n?.id} is not a deployed instance`),n):null}roots(){return this.#l.values()}elements(){return this.#e.values()}*nodes(){for(const r of this.#e.values())r.isDeploymentNode()&&(yield r)}*nodesOfKind(r){for(const n of this.#e.values())n.isDeploymentNode()&&n.kind===r&&(yield n)}*instances(){for(const r of this.#e.values())r.isInstance()&&(yield r)}*instancesOf(r){const n=yr(r),o=this.#r.get(n);o&&(yield*o)}deploymentRef(r){if(S1.isInsideInstanceRef(r)){const{deployment:n,element:o}=r;return $5e(this.#d,`${n}@${o}`,()=>new O5e(this.instance(n),this.$model.element(o)))}return this.element(r.deployment)}relationships(){return this.#n.values()}relationship(r){const n=yr(r);return gt(this.#n.get(n),`DeploymentRelationModel ${n} not found`)}findRelationship(r){return this.#n.get(r)??null}*views(){for(const r of this.$model.views())r.isDeploymentView()&&(yield r)}parent(r){const n=yr(r);return this.#a.get(n)||null}children(r){const n=yr(r);return this.#t.get(n)}*siblings(r){const n=yr(r),o=this.parent(r)?.children()??this.roots();for(const i of o)i.id!==n&&(yield i)}*ancestors(r){let n=yr(r),o;for(;o=this.#a.get(n);)yield o,n=o.id}*descendants(r,n="desc"){for(const o of this.children(r))n==="asc"?(yield o,yield*this.descendants(o.id)):(yield*this.descendants(o.id),yield o)}*incoming(r,n="all"){const o=yr(r);for(const i of this.#s.get(o))switch(!0){case n==="all":case(n==="direct"&&i.target.id===o):case(n==="to-descendants"&&i.target.id!==o):yield i;break}}*outgoing(r,n="all"){const o=yr(r);for(const i of this.#i.get(o))switch(!0){case n==="all":case(n==="direct"&&i.source.id===o):case(n==="from-descendants"&&i.source.id!==o):yield i;break}}addElement(r){if(this.#e.has(r.id))throw new Error(`Element ${r.id} already exists`);const n=v4e(r)?new eL(this,Object.freeze(r)):new tL(this,Object.freeze(r),this.$model.element(r.element));this.#e.set(n.id,n);const o=zb(n.id);return o?(He(this.#e.has(o),`Parent ${o} of ${n.id} not found`),this.#a.set(n.id,this.node(o)),this.#t.get(o).add(n)):(He(n.isDeploymentNode(),`Root element ${n.id} is not a deployment node`),this.#l.add(n)),n}addRelation(r){if(this.#n.has(r.id))throw new Error(`Relation ${r.id} already exists`);const n=new L5e(this,Object.freeze(r));this.#n.set(n.id,n),this.#s.get(n.target.id).add(n),this.#i.get(n.source.id).add(n);const o=n.boundary?.id??null;if(o)for(const i of[o,...Du(o)])this.#o.get(i).add(n);for(const i of Du(n.source.id)){if(i===o)break;this.#i.get(i).add(n)}for(const i of Du(n.target.id)){if(i===o)break;this.#s.get(i).add(n)}return n}}class iL{constructor(r,n){this.model=r,this.$relationship=n,this.source=r.element(S1.flatten(n.source)),this.target=r.element(S1.flatten(n.target));const o=t1(this.source.id,this.target.id);this.boundary=o?this.model.element(o):null}source;target;boundary;get id(){return this.$relationship.id}get expression(){return`${this.source.id} -> ${this.target.id}`}get title(){return Ji(this.$relationship.title)?this.$relationship.title:null}get technology(){return Ji(this.$relationship.technology)?this.$relationship.technology:null}get hasSummary(){return!!this.$relationship.summary&&!!this.$relationship.description&&!e7(this.$relationship.summary,this.$relationship.description)}get summary(){return ur.memoize(this,"summary",Fs(this.$relationship))}get description(){return ur.memoize(this,"description",Xh(this.$relationship))}get navigateTo(){return this.$relationship.navigateTo?this.model.view(this.$relationship.navigateTo):null}get tags(){return this.$relationship.tags??[]}get kind(){return this.$relationship.kind??null}get links(){return this.$relationship.links??[]}get color(){return this.$relationship.color??this.model.$styles.defaults.relationship.color}get line(){return this.$relationship.line??this.model.$styles.defaults.relationship.line}get head(){return this.$relationship.head??this.model.$styles.defaults.relationship.arrow}get tail(){return this.$relationship.tail}*views(){for(const r of this.model.views())r.includesRelation(this.id)&&(yield r)}isDeploymentRelation(){return!1}isModelRelation(){return!0}hasMetadata(){return!!this.$relationship.metadata&&!$1(this.$relationship.metadata)}getMetadata(r){return r?this.$relationship.metadata?.[r]:this.$relationship.metadata??{}}isTagged(r){return this.tags.includes(r)}}class Y5e{constructor(r,n,o,i){this.source=o,this.target=i,this.$viewModel=r,this.$view=r.$view,this.$edge=n}Aux;$viewModel;$view;$edge;get id(){return this.$edge.id}get parent(){return this.$edge.parent?this.$viewModel.node(this.$edge.parent):null}get label(){return this.$edge.label??null}get description(){return ur.memoize(this,"description",this.$edge.description)}get technology(){return this.$edge.technology??null}hasParent(){return this.$edge.parent!==null}get tags(){return this.$edge.tags??[]}get stepNumber(){return this.isStep()?IO(this.id):null}get navigateTo(){return this.$edge.navigateTo?this.$viewModel.$model.view(this.$edge.navigateTo):null}get color(){return this.$edge.color}get line(){return this.$edge.line??this.$viewModel.$styles.defaults.relationship.line}get head(){return this.$edge.head??this.$viewModel.$styles.defaults.relationship.arrow}get tail(){return this.$edge.tail}isStep(){return k1(this.id)}*relationships(r){for(const n of this.$edge.relations)if(r){const o=this.$viewModel.$model.findRelationship(n,r);o&&(yield o)}else yield this.$viewModel.$model.relationship(n)}includesRelation(r){const n=typeof r=="string"?r:r.id;return this.$edge.relations.includes(n)}isTagged(r){return this.tags.includes(r)}}class X5e{Aux;$viewModel;$view;$node;constructor(r,n){this.$viewModel=r,this.$view=r.$view,this.$node=n}get id(){return this.$node.id}get title(){return this.$node.title}get kind(){return this.$node.kind}get description(){return ur.memoize(this,"description",this.$node.description)}get technology(){return this.$node.technology??null}get parent(){return this.$node.parent?this.$viewModel.node(this.$node.parent):null}get element(){const r=this.$node.modelRef;return r?this.$viewModel.$model.element(r):null}get deployment(){const r=this.$node.deploymentRef;return r?this.$viewModel.$model.deployment.element(r):null}get shape(){return this.$node.shape}get color(){return this.$node.color}get icon(){return this.$node.icon??null}get tags(){return this.$node.tags}get links(){return this.$node.links??[]}get navigateTo(){return this.$node.navigateTo?this.$viewModel.$model.view(this.$node.navigateTo):null}get style(){return this.$node.style}get x(){return"x"in this.$node?this.$node.x:void 0}get y(){return"y"in this.$node?this.$node.y:void 0}get width(){return"width"in this.$node?this.$node.width:void 0}get height(){return"height"in this.$node?this.$node.height:void 0}children(){return ar(this,"children",()=>new Set(this.$node.children.map(r=>this.$viewModel.node(r))))}*ancestors(){let r=this.parent;for(;r;)yield r,r=r.parent}*siblings(){const r=this.parent?.children()??this.$viewModel.roots();for(const n of r)n.id!==this.id&&(yield n)}*incoming(r="all"){for(const n of this.$node.inEdges){const o=this.$viewModel.edge(n);switch(!0){case r==="all":case(r==="direct"&&o.target.id===this.id):case(r==="to-descendants"&&o.target.id!==this.id):yield o;break}}}*incomers(r="all"){const n=new Set;for(const o of this.incoming(r))n.has(o.source.id)||(n.add(o.source.id),yield o.source)}*outgoing(r="all"){for(const n of this.$node.outEdges){const o=this.$viewModel.edge(n);switch(!0){case r==="all":case(r==="direct"&&o.source.id===this.id):case(r==="from-descendants"&&o.source.id!==this.id):yield o;break}}}*outgoers(r="all"){const n=new Set;for(const o of this.outgoing(r))n.has(o.target.id)||(n.add(o.target.id),yield o.target)}isLayouted(){return"width"in this.$node&&"height"in this.$node}hasChildren(){return this.$node.children.length>0}hasParent(){return this.$node.parent!==null}hasElement(){return Ji(this.$node.modelRef)}hasDeployment(){return Ji(this.$node.deploymentRef)}hasDeployedInstance(){return this.hasElement()&&this.hasDeployment()}isGroup(){return g5e(this.$node)}isTagged(r){return this.tags.includes(r)}}class o7{Aux;#e;#a=new Set;#t=new Map;#r=new Map;#l=new Set;#n=new Set;#s=new Set;#i=new Ln(r=>new Set);#o;id;$model;title;folder;viewPath;constructor(r,n,o,i){this.$model=r,this.#e=o,this.id=o.id,this.folder=n,this.#o=i;for(const a of this.#e.nodes){const l=new X5e(this,Object.freeze(a));this.#t.set(a.id,l),a.parent||this.#a.add(l),a.deploymentRef&&this.#n.add(a.deploymentRef),a.modelRef&&this.#l.add(a.modelRef);for(const s of l.tags)this.#i.get(s).add(l)}for(const a of this.#e.edges){const l=new Y5e(this,Object.freeze(a),this.node(a.source),this.node(a.target));for(const s of l.tags)this.#i.get(s).add(l);for(const s of a.relations)this.#s.add(s);this.#r.set(a.id,l)}this.title=o.title?n7(o.title):null,this.viewPath=o.title?mx(o.title):o.id}get $styles(){return this.$model.$styles}get _type(){return this.#e[h1]}get stage(){return this.#e[Iu]}get bounds(){if("bounds"in this.#e)return this.#e.bounds;if(this.#o)return this.#o.bounds;throw new Error("View is not layouted")}get titleOrId(){return this.title??this.viewOf?.title??this.id}get titleOrUntitled(){return this.title??"Untitled"}get breadcrumbs(){return ar(this,"breadcrumbs",()=>this.folder.isRoot?[this]:[...this.folder.breadcrumbs,this])}get description(){return ur.memoize(this,"description",this.#e.description)}get tags(){return this.#e.tags??[]}get links(){return this.#e.links??[]}get viewOf(){if(this.isElementView()){const r=this.#e.viewOf;return r?this.$model.element(r):null}return null}get mode(){return this.isDynamicView()?this.#e.variant??"diagram":null}get includedTags(){return[...this.#i.keys()]}get $view(){if(!this.isLayouted()||"drifts"in this.#e)return this.#e;const r=this.#o;return r?ar(this,"withDriftReasons",()=>f5e(this.#e,r)):this.#e}get $layouted(){if(!this.isLayouted())throw new Error("View is not layouted");return this.$manual??this.#e}get hasManualLayout(){return this.#o!==void 0}get hasLayoutDrifts(){if(!this.isLayouted())return!1;const r=this.$manual;return!!r?.drifts&&r.drifts.length>0}get $manual(){if(!this.isLayouted())return null;const r=this.#o;return r?ar(this,"snapshotWithManualLayout",()=>NO(this.#e,r)):null}roots(){return this.#a.values()}*compounds(){for(const r of this.#t.values())r.hasChildren()&&(yield r)}node(r){const n=yr(r);return gt(this.#t.get(n),`Node ${n} not found in view ${this.#e.id}`)}findNode(r){return this.#t.get(yr(r))??null}findNodeWithElement(r){const n=yr(r);return this.#l.has(n)?E1(this.#t.values(),o=>o.hasElement()&&o.element.id===n)??null:null}nodes(){return this.#t.values()}edge(r){const n=yr(r);return gt(this.#r.get(n),`Edge ${n} not found in view ${this.#e.id}`)}findEdge(r){return this.#r.get(yr(r))??null}edges(){return this.#r.values()}*edgesWithRelation(r){for(const n of this.#r.values())n.includesRelation(r)&&(yield n)}*elements(){for(const r of this.#t.values())r.hasElement()&&(yield r)}isTagged(r){return this.tags.includes(r)}includesElement(r){return this.#l.has(yr(r))}includesDeployment(r){return this.#n.has(yr(r))}includesRelation(r){return this.#s.has(yr(r))}isComputed(){return this.#e[Iu]==="computed"}isLayouted(){return this.#e[Iu]==="layouted"}isDiagram(){return this.#e[Iu]==="layouted"}isElementView(){return this.#e[h1]==="element"}isScopedElementView(){return this.#e[h1]==="element"&&Ji(this.#e.viewOf)}isDeploymentView(){return this.#e[h1]==="deployment"}isDynamicView(){return this.#e[h1]==="dynamic"}}class yx{$model;path;title;isRoot;parentPath;defaultViewId;constructor(r,n,o){this.$model=r,this.path=n.join("/"),this.isRoot=this.path==="",this.title=H5e(n),this.isRoot?this.parentPath=void 0:this.parentPath=n.slice(0,-1).join("/"),this.defaultViewId=o}get defaultView(){return this.defaultViewId?this.$model.view(this.defaultViewId):null}get breadcrumbs(){return He(!this.isRoot,"Root view folder has no breadcrumbs"),ar(this,"breadcrumbs",()=>{const r=this.parent;return r?r.isRoot?[r,this]:[...r.breadcrumbs,this]:[this]})}get parent(){return He(!this.isRoot,"Root view folder has no parent"),q5e(this.parentPath)?null:this.$model.viewFolder(this.parentPath)}get children(){return this.$model.viewFolderItems(this.path)}get folders(){return ar(this,"folders",()=>{const r=[];for(const n of this.children)n instanceof yx&&r.push(n);return r})}get views(){return ar(this,"views",()=>{const r=[];for(const n of this.children)n instanceof o7&&r.push(n);return r})}}class Fu{Aux;_elements=new Map;_parents=new Map;_children=new Ln(()=>new Set);_rootElements=new Set;_relations=new Map;_incoming=new Ln(()=>new Set);_outgoing=new Ln(()=>new Set);_internal=new Ln(()=>new Set);_views=new Map;_rootViewFolder;_viewFolders=new Map;_viewFolderItems=new Ln(()=>new Set);_allTags=new Ln(()=>new Set);static fromParsed(r){return new Fu(r)}static create(r){return new Fu(r)}static fromDump(r){const{_stage:n="layouted",projectId:o="unknown",project:i,globals:a,imports:l,deployments:s,views:c,relations:d,elements:u,specification:p}=r;return new Fu({[Iu]:n,projectId:o,project:i,globals:{predicates:a?.predicates??{},dynamicPredicates:a?.dynamicPredicates??{},styles:a?.styles??{}},imports:l??{},deployments:{elements:s?.elements??{},relations:s?.relations??{}},views:c??{},relations:d??{},elements:u??{},specification:p})}deployment;$data;constructor(r){this.$data=r;for(const[,n]of f1(r.elements)){const o=this.addElement(n);for(const i of o.tags)this._allTags.get(i).add(o)}for(const[n,o]of f1(r.imports??{}))for(const i of Jc(o)){const a=this.addImportedElement(n,i);for(const l of a.tags)this._allTags.get(l).add(a)}for(const n of fx(r.relations)){const o=this.addRelation(n);for(const i of o.tags)this._allTags.get(i).add(o)}if(this.deployment=new G5e(this),cO(r,"computed")||cO(r,"layouted")){const n=JN(_i),o=Ns(fx(r.views),Kb(a=>({view:a,path:mx(a.title??a.id),folderPath:a.title&&W5e(a.title)||""})),Q8((a,l)=>n(a.folderPath,l.folderPath))),i=a=>{let l=this._viewFolders.get(a);if(!l){const s=oL(a,_i);He(Ll(s,1),`View group path "${a}" must have at least one element`);let c;a===""?c=o.find(d=>d.view.id==="index"):c=o.find(d=>d.path===a),l=new yx(this,s,c?.view.id),this._viewFolders.set(a,l)}return l};this._rootViewFolder=i("");for(const{folderPath:a}of o)this._viewFolders.has(a)||oL(a,_i).reduce((l,s)=>{const c=l.join(_i),d=$1(c)?s:c+_i+s,u=i(d);return this._viewFolderItems.get(c).add(u),l.push(s),l},[]);for(const{view:a,folderPath:l}of o){const s=new o7(this,i(l),a,r.manualLayouts?.[a.id]);this._viewFolderItems.get(l).add(s),this._views.set(a.id,s);for(const c of s.tags)this._allTags.get(c).add(s)}}else this._rootViewFolder=new yx(this,[""],void 0),this._viewFolders.set(this._rootViewFolder.path,this._rootViewFolder)}get asParsed(){return this}get asComputed(){return this}get asLayouted(){return this}get $styles(){return ar(this,"styles",()=>XN.from(this.$data.project.styles,this.$data.specification.customColors?{theme:{colors:this.$data.specification.customColors}}:void 0))}isParsed(){return this.stage==="parsed"}isLayouted(){return this.stage==="layouted"}isComputed(){return this.stage==="computed"}get $model(){return this.$data}get stage(){return this.$data[Iu]}get projectId(){return this.$data.projectId??"default"}get project(){return this.$data.project??ar(this,Symbol.for("project"),()=>({id:this.projectId}))}get specification(){return this.$data.specification}get globals(){return ar(this,Symbol.for("globals"),()=>({predicates:{...this.$data.globals?.predicates},dynamicPredicates:{...this.$data.globals?.dynamicPredicates},styles:{...this.$data.globals?.styles}}))}element(r){if(r instanceof gx)return r;const n=yr(r);return gt(this._elements.get(n),`Element ${n} not found`)}findElement(r){return this._elements.get(yr(r))??null}roots(){return this._rootElements.values()}elements(){return this._elements.values()}relationships(){return this._relations.values()}relationship(r,n){if(n==="deployment")return this.deployment.relationship(r);const o=yr(r);let i=this._relations.get(o)??null;return i||n==="model"?gt(i,`Model relation ${o} not found`):gt(this.deployment.findRelationship(o),`No model/deployment relation ${o} not found`)}findRelationship(r,n){if(n==="deployment")return this.deployment.findRelationship(r);let o=this._relations.get(yr(r))??null;return o||n==="model"?o:this.deployment.findRelationship(r)}views(){return this._views.values()}view(r){const n=yr(r);return gt(this._views.get(n),`View ${n} not found`)}findView(r){return this._views.get(r)??null}findManualLayout(r){return"manualLayouts"in this.$data?this.$data.manualLayouts?.[r]??null:null}viewFolder(r){return gt(this._viewFolders.get(r),`View folder ${r} not found`)}get rootViewFolder(){return this._rootViewFolder}get hasViewFolders(){return this._viewFolders.size>1}viewFolderItems(r){return He(this._viewFolders.has(r),`View folder ${r} not found`),this._viewFolderItems.get(r)}parent(r){const n=yr(r);return this._parents.get(n)||null}children(r){const n=yr(r);return this._children.get(n)}*siblings(r){const n=yr(r),o=this._parents.get(n),i=o?this._children.get(o.id).values():this.roots();for(const a of i)a.id!==n&&(yield a)}*ancestors(r){let n=yr(r),o;for(;o=this._parents.get(n);)yield o,n=o.id}*descendants(r){for(const n of this.children(r))yield n,yield*this.descendants(n.id)}*incoming(r,n="all"){const o=yr(r);for(const i of this._incoming.get(o))switch(!0){case n==="all":case(n==="direct"&&i.target.id===o):case(n==="to-descendants"&&i.target.id!==o):yield i;break}}*outgoing(r,n="all"){const o=yr(r);for(const i of this._outgoing.get(o))switch(!0){case n==="all":case(n==="direct"&&i.source.id===o):case(n==="from-descendants"&&i.source.id!==o):yield i;break}}get tags(){return ar(this,"tags",()=>Q8([...this._allTags.keys()],Rb))}get tagsSortedByUsage(){return ar(this,"tagsSortedByUsage",()=>Ns([...this._allTags.entries()],Kb(([r,n])=>({tag:r,count:n.size,tagged:n})),Q8((r,n)=>Rb(r.tag,n.tag)),vO([Lu("count"),"desc"])))}findByTag(r,n){return Is(this._allTags.get(r),o=>n==="elements"?o instanceof gx:n==="views"?o instanceof o7:n==="relationships"?o instanceof iL:!0)}*elementsOfKind(r){for(const n of this._elements.values())n.kind===r&&(yield n)}*elementsWhere(r){const n=Ou(r);for(const o of this._elements.values())n(o)&&(yield o)}*relationshipsWhere(r){const n=Ou(r);for(const o of this._relations.values())n(o)&&(yield o)}addElement(r){if(this._elements.has(r.id))throw new Error(`Element ${r.id} already exists`);const n=new gx(this,Object.freeze(r));this._elements.set(n.id,n);const o=zb(n.id);return o?(He(this._elements.has(o),`Parent ${o} of ${n.id} not found`),this._parents.set(n.id,this.element(o)),this._children.get(o).add(n)):this._rootElements.add(n),n}addImportedElement(r,n){He(!m5e(n.id),"Imported element already has global FQN");const o=BO(r,n.id);if(this._elements.has(o))throw new Error(`Element ${o} already exists`);const i=new gx(this,Object.freeze({...n,id:o}));this._elements.set(i.id,i);let a=zb(i.id);for(;a;){if(a.includes(".")&&this._elements.has(a))return this._parents.set(i.id,this.element(a)),this._children.get(a).add(i),i;a=zb(a)}return this._rootElements.add(i),i}addRelation(r){if(this._relations.has(r.id))throw new Error(`Relation ${r.id} already exists`);const n=new iL(this,Object.freeze(r)),{source:o,target:i}=n;this._relations.set(n.id,n),this._incoming.get(i.id).add(n),this._outgoing.get(o.id).add(n);const a=t1(o.id,i.id);if(a)for(const l of[a,...Du(a)])this._internal.get(l).add(n);for(const l of Du(o.id)){if(l===a)break;this._outgoing.get(l).add(n)}for(const l of Du(i.id)){if(l===a)break;this._incoming.get(l).add(n)}return n}}(e=>{e.EMPTY=e.create({_stage:"computed",projectId:"default",project:{id:"default"},specification:{elements:{},relationships:{},deployments:{},tags:{}},globals:{predicates:{},dynamicPredicates:{},styles:{}},deployments:{elements:{},relations:{}},elements:{},relations:{},views:{},imports:{}})})(Fu||(Fu={}));function vx(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}var K5e=e=>typeof e=="object"&&e!==null;function Vu(e){return Object.fromEntries(Object.entries(e??{}).filter(([r,n])=>n!==void 0))}var Z5e=e=>e==="base";function Q5e(e){return e.slice().filter(r=>!Z5e(r))}function aL(e){return String.fromCharCode(e+(e>25?39:97))}function J5e(e){let r="",n;for(n=Math.abs(e);n>52;n=n/52|0)r=aL(n%52)+r;return aL(n%52)+r}function eke(e,r){let n=r.length;for(;n;)e=e*33^r.charCodeAt(--n);return e}function tke(e){return J5e(eke(5381,e)>>>0)}var lL=/\s*!(important)?/i;function rke(e){return typeof e=="string"?lL.test(e):!1}function nke(e){return typeof e=="string"?e.replace(lL,"").trim():e}function i7(e){return typeof e=="string"?e.replaceAll(" ","_"):e}var Kn=e=>{const r=new Map;return(...n)=>{const o=JSON.stringify(n);if(r.has(o))return r.get(o);const i=e(...n);return r.set(o,i),i}},oke=new Set(["__proto__","constructor","prototype"]);function a7(...e){return e.reduce((r,n)=>(n&&Object.keys(n).forEach(o=>{if(oke.has(o))return;const i=r[o],a=n[o];vx(i)&&vx(a)?r[o]=a7(i,a):r[o]=a}),r),{})}var ike=e=>e!=null;function l7(e,r,n={}){const{stop:o,getKey:i}=n;function a(l,s=[]){if(K5e(l)){const c={};for(const[d,u]of Object.entries(l)){const p=i?.(d,u)??d,f=[...s,p];if(o?.(l,f))return r(l,s);const m=a(u,f);ike(m)&&(c[p]=m)}return c}return r(l,s)}return a(e)}function ake(e,r){return Array.isArray(e)?e.map(n=>r(n)):vx(e)?l7(e,n=>r(n)):r(e)}function lke(e,r){return e.reduce((n,o,i)=>{const a=r[i];return o!=null&&(n[a]=o),n},{})}function sL(e,r,n=!0){const{utility:o,conditions:i}=r,{hasShorthand:a,resolveShorthand:l}=o;return l7(e,s=>Array.isArray(s)?lke(s,i.breakpoints.keys):s,{stop:s=>Array.isArray(s),getKey:n?s=>a?l(s):s:void 0})}var ske={shift:e=>e,finalize:e=>e,breakpoints:{keys:[]}},cke=e=>typeof e=="string"?e.replaceAll(/[\n\s]+/g," "):e;function cL(e){const{utility:r,hash:n,conditions:o=ske}=e,i=l=>[r.prefix,l].filter(Boolean).join("-"),a=(l,s)=>{let c;if(n){const d=[...o.finalize(l),s];c=i(r.toHash(d,tke))}else c=[...o.finalize(l),i(s)].join(":");return c};return Kn(({base:l,...s}={})=>{const c=Object.assign(s,l),d=sL(c,e),u=new Set;return l7(d,(p,f)=>{if(p==null)return;const m=rke(p),[v,...w]=o.shift(f),x=Q5e(w),k=r.transform(v,nke(cke(p)));let C=a(x,k.className);m&&(C=`${C}!`),u.add(C)}),Array.from(u).join(" ")})}function dke(...e){return e.flat().filter(r=>vx(r)&&Object.keys(Vu(r)).length>0)}function uke(e){function r(i){const a=dke(...i);return a.length===1?a:a.map(l=>sL(l,e))}function n(...i){return a7(...r(i))}function o(...i){return Object.assign({},...r(i))}return{mergeCss:Kn(n),assignCss:o}}var pke=/([A-Z])/g,hke=/^ms-/,fke=Kn(e=>e.startsWith("--")?e:e.replace(pke,"-$1").replace(hke,"-ms-").toLowerCase()),gke=["min","max","clamp","calc"],mke=new RegExp(`^(${gke.join("|")})\\(.*\\)`),yke=e=>typeof e=="string"&&mke.test(e),vke="cm,mm,Q,in,pc,pt,px,em,ex,ch,rem,lh,rlh,vw,vh,vmin,vmax,vb,vi,svw,svh,lvw,lvh,dvw,dvh,cqw,cqh,cqi,cqb,cqmin,cqmax,%",bke=`(?:${vke.split(",").join("|")})`,xke=new RegExp(`^[+-]?[0-9]*.?[0-9]+(?:[eE][+-]?[0-9]+)?${bke}$`),wke=e=>typeof e=="string"&&xke.test(e),kke=e=>typeof e=="string"&&/^var\(--.+\)$/.test(e),R1={map:ake,isCssFunction:yke,isCssVar:kke,isCssUnit:wke},z1=(e,r)=>{if(!e?.defaultValues)return r;const n=typeof e.defaultValues=="function"?e.defaultValues(r):e.defaultValues;return Object.assign({},n,Vu(r))},_ke=(e={})=>{const r=o=>({className:[e.className,o].filter(Boolean).join("__"),base:e.base?.[o]??{},variants:{},defaultVariants:e.defaultVariants??{},compoundVariants:e.compoundVariants?s7(e.compoundVariants,o):[]}),n=(e.slots??[]).map(o=>[o,r(o)]);for(const[o,i]of Object.entries(e.variants??{}))for(const[a,l]of Object.entries(i))n.forEach(([s,c])=>{c.variants[o]??={},c.variants[o][a]=l[s]??{}});return Object.fromEntries(n)},s7=(e,r)=>e.filter(n=>n.css[r]).map(n=>({...n,css:n.css[r]}));function Fn(e,...r){const n=Object.getOwnPropertyDescriptors(e),o=Object.keys(n),i=l=>{const s={};for(let c=0;ci(Array.isArray(l)?l:o.filter(l));return r.map(a).concat(i(o))}var c7=(...e)=>{const r=e.reduce((n,o)=>(o&&o.forEach(i=>n.add(i)),n),new Set([]));return Array.from(r)},dL=["htmlSize","htmlTranslate","htmlWidth","htmlHeight"];function Ske(e){return dL.includes(e)?e.replace("html","").toLowerCase():e}function d7(e){return Object.fromEntries(Object.entries(e).map(([r,n])=>[Ske(r),n]))}d7.keys=dL;const Eke="_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,_shapeSizeXs,_shapeSizeSm,_shapeSizeMd,_shapeSizeLg,_shapeSizeXl,_shapeRectangle,_shapePerson,_shapeBrowser,_shapeMobile,_shapeCylinder,_shapeStorage,_shapeQueue,_notDisabled,_reduceGraphics,_reduceGraphicsOnPan,_noReduceGraphics,_whenPanning,_smallZoom,_compoundTransparent,_edgeActive,_whenHovered,_whenSelectable,_whenSelected,_whenDimmed,_whenFocused,_p3,_srgb,_rec2020,xs,xsOnly,xsDown,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,xsToSm,xsToMd,xsToLg,xsToXl,smToMd,smToLg,smToXl,mdToLg,mdToXl,lgToXl,@/xs,@/sm,@/md,@/lg,@likec4-root/xs,@likec4-root/sm,@likec4-root/md,@likec4-root/lg,@likec4-dialog/xs,@likec4-dialog/sm,@likec4-dialog/md,@likec4-dialog/lg,base",uL=new Set(Eke.split(",")),Cke=/^@|&|&$/;function pL(e){return uL.has(e)||Cke.test(e)}const $ke=/^_/,Rke=/&|@/;function hL(e){return e.map(r=>uL.has(r)?r.replace($ke,""):Rke.test(r)?`[${i7(r.trim())}]`:r)}function fL(e){return e.sort((r,n)=>{const o=pL(r),i=pL(n);return o&&!i?1:!o&&i?-1:0})}const zke="aspectRatio:asp,boxDecorationBreak:bx-db,zIndex:z,boxSizing:bx-s,objectPosition:obj-p,objectFit:obj-f,overscrollBehavior:ovs-b,overscrollBehaviorX:ovs-bx,overscrollBehaviorY:ovs-by,position:pos/1,top:top,left:left,inset:inset,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,insetBlockEnd:inset-be,insetBlockStart:inset-bs,insetInlineEnd:inset-e/insetEnd/end,insetInlineStart:inset-s/insetStart/start,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:flex-b,flex:flex,flexDirection:flex-d/flexDir,flexGrow:flex-g,flexShrink:flex-sh,gridTemplateColumns:grid-tc,gridTemplateRows:grid-tr,gridColumn:grid-c,gridRow:grid-r,gridColumnStart:grid-cs,gridColumnEnd:grid-ce,gridAutoFlow:grid-af,gridAutoColumns:grid-ac,gridAutoRows:grid-ar,gap:gap,gridGap:grid-g,gridRowGap:grid-rg,gridColumnGap:grid-cg,rowGap:rg,columnGap:cg,justifyContent:jc,alignContent:ac,alignItems:ai,alignSelf:as,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pbe,paddingBlockStart:pbs,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mbe,marginBlockStart:mbs,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,spaceX:sx,spaceY:sy,outlineWidth:ring-w/ringWidth,outlineColor:ring-c/ringColor,outline:ring/1,outlineOffset:ring-o/ringOffset,focusRing:focus-ring,focusVisibleRing:focus-v-ring,focusRingColor:focus-ring-c,focusRingOffset:focus-ring-o,focusRingWidth:focus-ring-w,focusRingStyle:focus-ring-s,divideX:dvd-x,divideY:dvd-y,divideColor:dvd-c,divideStyle:dvd-s,width:w/1,inlineSize:w-is,minWidth:min-w/minW,minInlineSize:min-w-is,maxWidth:max-w/maxW,maxInlineSize:max-w-is,height:h/1,blockSize:h-bs,minHeight:min-h/minH,minBlockSize:min-h-bs,maxHeight:max-h/maxH,maxBlockSize:max-b,boxSize:size,color:c,fontFamily:ff,fontSize:fs,fontSizeAdjust:fs-a,fontPalette:fp,fontKerning:fk,fontFeatureSettings:ff-s,fontWeight:fw,fontSmoothing:fsmt,fontVariant:fv,fontVariantAlternates:fv-alt,fontVariantCaps:fv-caps,fontVariationSettings:fv-s,fontVariantNumeric:fv-num,letterSpacing:ls,lineHeight:lh,textAlign:ta,textDecoration:td,textDecorationColor:td-c,textEmphasisColor:te-c,textDecorationStyle:td-s,textDecorationThickness:td-t,textUnderlineOffset:tu-o,textTransform:tt,textIndent:ti,textShadow:tsh,textShadowColor:tsh-c/textShadowColor,WebkitTextFillColor:wktf-c,textOverflow:tov,verticalAlign:va,wordBreak:wb,textWrap:tw,truncate:trunc,lineClamp:lc,listStyleType:li-t,listStylePosition:li-pos,listStyleImage:li-img,listStyle:li-s,backgroundPosition:bg-p/bgPosition,backgroundPositionX:bg-p-x/bgPositionX,backgroundPositionY:bg-p-y/bgPositionY,backgroundAttachment:bg-a/bgAttachment,backgroundClip:bg-cp/bgClip,background:bg/1,backgroundColor:bg-c/bgColor,backgroundOrigin:bg-o/bgOrigin,backgroundImage:bg-i/bgImage,backgroundRepeat:bg-r/bgRepeat,backgroundBlendMode:bg-bm/bgBlendMode,backgroundSize:bg-s/bgSize,backgroundGradient:bg-grad/bgGradient,backgroundLinear:bg-linear/bgLinear,backgroundRadial:bg-radial/bgRadial,backgroundConic:bg-conic/bgConic,textGradient:txt-grad,gradientFromPosition:grad-from-pos,gradientToPosition:grad-to-pos,gradientFrom:grad-from,gradientTo:grad-to,gradientVia:grad-via,gradientViaPosition:grad-via-pos,borderRadius:bdr/rounded,borderTopLeftRadius:bdr-tl/roundedTopLeft,borderTopRightRadius:bdr-tr/roundedTopRight,borderBottomRightRadius:bdr-br/roundedBottomRight,borderBottomLeftRadius:bdr-bl/roundedBottomLeft,borderTopRadius:bdr-t/roundedTop,borderRightRadius:bdr-r/roundedRight,borderBottomRadius:bdr-b/roundedBottom,borderLeftRadius:bdr-l/roundedLeft,borderStartStartRadius:bdr-ss/roundedStartStart,borderStartEndRadius:bdr-se/roundedStartEnd,borderStartRadius:bdr-s/roundedStart,borderEndStartRadius:bdr-es/roundedEndStart,borderEndEndRadius:bdr-ee/roundedEndEnd,borderEndRadius:bdr-e/roundedEnd,border:bd,borderWidth:bd-w,borderTopWidth:bd-t-w,borderLeftWidth:bd-l-w,borderRightWidth:bd-r-w,borderBottomWidth:bd-b-w,borderBlockStartWidth:bd-bs-w,borderBlockEndWidth:bd-be-w,borderColor:bd-c,borderInline:bd-x/borderX,borderInlineWidth:bd-x-w/borderXWidth,borderInlineColor:bd-x-c/borderXColor,borderBlock:bd-y/borderY,borderBlockWidth:bd-y-w/borderYWidth,borderBlockColor:bd-y-c/borderYColor,borderLeft:bd-l,borderLeftColor:bd-l-c,borderInlineStart:bd-s/borderStart,borderInlineStartWidth:bd-s-w/borderStartWidth,borderInlineStartColor:bd-s-c/borderStartColor,borderRight:bd-r,borderRightColor:bd-r-c,borderInlineEnd:bd-e/borderEnd,borderInlineEndWidth:bd-e-w/borderEndWidth,borderInlineEndColor:bd-e-c/borderEndColor,borderTop:bd-t,borderTopColor:bd-t-c,borderBottom:bd-b,borderBottomColor:bd-b-c,borderBlockEnd:bd-be,borderBlockEndColor:bd-be-c,borderBlockStart:bd-bs,borderBlockStartColor:bd-bs-c,opacity:op,boxShadow:bx-sh/shadow,boxShadowColor:bx-sh-c/shadowColor,mixBlendMode:mix-bm,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:bkdp,backdropBlur:bkdp-blur,backdropBrightness:bkdp-brightness,backdropContrast:bkdp-contrast,backdropGrayscale:bkdp-grayscale,backdropHueRotate:bkdp-hue-rotate,backdropInvert:bkdp-invert,backdropOpacity:bkdp-opacity,backdropSaturate:bkdp-saturate,backdropSepia:bkdp-sepia,borderCollapse:bd-cl,borderSpacing:bd-sp,borderSpacingX:bd-sx,borderSpacingY:bd-sy,tableLayout:tbl,transitionTimingFunction:trs-tmf,transitionDelay:trs-dly,transitionDuration:trs-dur,transitionProperty:trs-prop,transition:transition,animation:anim,animationName:anim-n,animationTimingFunction:anim-tmf,animationDuration:anim-dur,animationDelay:anim-dly,animationPlayState:anim-ps,animationComposition:anim-comp,animationFillMode:anim-fm,animationDirection:anim-dir,animationIterationCount:anim-ic,animationRange:anim-r,animationState:anim-s,animationRangeStart:anim-rs,animationRangeEnd:anim-re,animationTimeline:anim-tl,transformOrigin:trf-o,transformBox:trf-b,transformStyle:trf-s,transform:trf,rotate:rotate,rotateX:rotate-x,rotateY:rotate-y,rotateZ:rotate-z,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,translateZ:translate-z/z,accentColor:ac-c,caretColor:ca-c,scrollBehavior:scr-bhv,scrollbar:scr-bar,scrollbarColor:scr-bar-c,scrollbarGutter:scr-bar-g,scrollbarWidth:scr-bar-w,scrollMargin:scr-m,scrollMarginLeft:scr-ml,scrollMarginRight:scr-mr,scrollMarginTop:scr-mt,scrollMarginBottom:scr-mb,scrollMarginBlock:scr-my/scrollMarginY,scrollMarginBlockEnd:scr-mbe,scrollMarginBlockStart:scr-mbt,scrollMarginInline:scr-mx/scrollMarginX,scrollMarginInlineEnd:scr-me,scrollMarginInlineStart:scr-ms,scrollPadding:scr-p,scrollPaddingBlock:scr-py/scrollPaddingY,scrollPaddingBlockStart:scr-pbs,scrollPaddingBlockEnd:scr-pbe,scrollPaddingInline:scr-px/scrollPaddingX,scrollPaddingInlineEnd:scr-pe,scrollPaddingInlineStart:scr-ps,scrollPaddingLeft:scr-pl,scrollPaddingRight:scr-pr,scrollPaddingTop:scr-pt,scrollPaddingBottom:scr-pb,scrollSnapAlign:scr-sa,scrollSnapStop:scrs-s,scrollSnapType:scrs-t,scrollSnapStrictness:scrs-strt,scrollSnapMargin:scrs-m,scrollSnapMarginTop:scrs-mt,scrollSnapMarginBottom:scrs-mb,scrollSnapMarginLeft:scrs-ml,scrollSnapMarginRight:scrs-mr,scrollSnapCoordinate:scrs-c,scrollSnapDestination:scrs-d,scrollSnapPointsX:scrs-px,scrollSnapPointsY:scrs-py,scrollSnapTypeX:scrs-tx,scrollSnapTypeY:scrs-ty,scrollTimeline:scrtl,scrollTimelineAxis:scrtl-a,scrollTimelineName:scrtl-n,touchAction:tch-a,userSelect:us,overflow:ov,overflowWrap:ov-wrap,overflowX:ov-x,overflowY:ov-y,overflowAnchor:ov-a,overflowBlock:ov-b,overflowInline:ov-i,overflowClipBox:ovcp-bx,overflowClipMargin:ovcp-m,overscrollBehaviorBlock:ovs-bb,overscrollBehaviorInline:ovs-bi,fill:fill,stroke:stk,strokeWidth:stk-w,strokeDasharray:stk-dsh,strokeDashoffset:stk-do,strokeLinecap:stk-lc,strokeLinejoin:stk-lj,strokeMiterlimit:stk-ml,strokeOpacity:stk-op,srOnly:sr,debug:debug,appearance:ap,backfaceVisibility:bfv,clipPath:cp-path,hyphens:hy,mask:msk,maskImage:msk-i,maskSize:msk-s,textSizeAdjust:txt-adj,container:cq,containerName:cq-n,containerType:cq-t,cursor:cursor,textStyle:textStyle,layerStyle:layerStyle,animationStyle:animationStyle",gL=new Map,mL=new Map;zke.split(",").forEach(e=>{const[r,n]=e.split(":"),[o,...i]=n.split("/");gL.set(r,o),i.length&&i.forEach(a=>{mL.set(a==="1"?o:a,r)})});const yL=e=>mL.get(e)||e,vL={conditions:{shift:fL,finalize:hL,breakpoints:{keys:["base","xs","sm","md","lg","xl"]}},utility:{transform:(e,r)=>{const n=yL(e);return{className:`${gL.get(n)||fke(n)}_${i7(r)}`}},hasShorthand:!0,toHash:(e,r)=>r(e.join(":")),resolveShorthand:yL}},Tke=cL(vL),fe=(...e)=>Tke(qu(...e));fe.raw=(...e)=>qu(...e);const{mergeCss:qu}=uke(vL);function Ge(){let e="",r=0,n;for(;r({base:{},variants:{},defaultVariants:{},compoundVariants:[],...e});function T1(e){const{base:r,variants:n,defaultVariants:o,compoundVariants:i}=bL(e),a=f=>({...o,...Vu(f)});function l(f={}){const m=a(f);let v={...r};for(const[x,k]of Object.entries(m))n[x]?.[k]&&(v=qu(v,n[x][k]));const w=u7(i,m);return qu(v,w)}function s(f){const m=bL(f.config),v=c7(f.variantKeys,Object.keys(n));return T1({base:qu(r,m.base),variants:Object.fromEntries(v.map(w=>[w,qu(n[w],m.variants[w])])),defaultVariants:a7(o,m.defaultVariants),compoundVariants:[...i,...m.compoundVariants]})}function c(f){return fe(l(f))}const d=Object.keys(n);function u(f){return Fn(f,d)}const p=Object.fromEntries(Object.entries(n).map(([f,m])=>[f,Object.keys(m)]));return Object.assign(Kn(c),{__cva__:!0,variantMap:p,variantKeys:d,raw:l,config:e,merge:s,splitVariantProps:u,getVariantProps:a})}function u7(e,r){let n={};return e.forEach(o=>{Object.entries(o).every(([i,a])=>i==="css"?!0:(Array.isArray(a)?a:[a]).some(l=>r[i]===l))&&(n=qu(n,o.css))}),n}function jke(e,r,n,o){if(r.length>0&&typeof n?.[o]=="object")throw new Error(`[recipe:${e}:${o}] Conditions are not supported when using compound variants.`)}function Ake(e){const r=Object.entries(_ke(e)).map(([p,f])=>[p,T1(f)]),n=e.defaultVariants??{},o=r.reduce((p,[f,m])=>(e.className&&(p[f]=m.config.className),p),{});function i(p){const f=r.map(([m,v])=>[m,Ge(v(p),o[m])]);return Object.fromEntries(f)}function a(p){const f=r.map(([m,v])=>[m,v.raw(p)]);return Object.fromEntries(f)}const l=e.variants??{},s=Object.keys(l);function c(p){return Fn(p,s)}const d=p=>({...n,...Vu(p)}),u=Object.fromEntries(Object.entries(l).map(([p,f])=>[p,Object.keys(f)]));return Object.assign(Kn(i),{__cva__:!1,raw:a,config:e,variantMap:u,variantKeys:s,classNameMap:o,splitVariantProps:c,getVariantProps:d})}var Dke={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};const wt=(e,r,n,o)=>{const i=S.forwardRef(({color:a="currentColor",size:l=24,stroke:s=2,title:c,className:d,children:u,...p},f)=>S.createElement("svg",{ref:f,...Dke[e],width:l,height:l,className:["tabler-icon",`tabler-icon-${r}`,d].join(" "),...e==="filled"?{fill:a}:{strokeWidth:s,stroke:a},...p},[c&&S.createElement("title",{key:"svg-title"},c),...o.map(([m,v])=>S.createElement(m,v)),...Array.isArray(u)?u:[u]]));return i.displayName=`${n}`,i},Pke=[["path",{d:"M12 6m-7 0a7 3 0 1 0 14 0a7 3 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M5 6v12c0 1.657 3.134 3 7 3s7 -1.343 7 -3v-12",key:"svg-1"}]],xL=wt("outline","cylinder","Cylinder",Pke),Mke=[["path",{d:"M21 14.008v-5.018a1.98 1.98 0 0 0 -1 -1.717l-4 -2.008a2.016 2.016 0 0 0 -2 0l-10 5.008c-.619 .355 -1 1.01 -1 1.718v5.018c0 .709 .381 1.363 1 1.717l4 2.008a2.016 2.016 0 0 0 2 0l10 -5.008c.619 -.355 1 -1.01 1 -1.718z",key:"svg-0"}],["path",{d:"M9 21v-7.5",key:"svg-1"}],["path",{d:"M9 13.5l11.5 -5.5",key:"svg-2"}],["path",{d:"M3.5 11l5.5 2.5",key:"svg-3"}]],Nke=wt("outline","rectangular-prism","RectangularPrism",Mke),Bke=[["path",{d:"M3 15m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z",key:"svg-0"}],["path",{d:"M10 15m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z",key:"svg-1"}],["path",{d:"M17 15m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z",key:"svg-2"}],["path",{d:"M5 11v-3a3 3 0 0 1 3 -3h8a3 3 0 0 1 3 3v3",key:"svg-3"}],["path",{d:"M16.5 8.5l2.5 2.5l2.5 -2.5",key:"svg-4"}]],Ike=wt("outline","reorder","Reorder",Bke),Oke=[["path",{d:"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",key:"svg-0"}],["path",{d:"M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2",key:"svg-1"}]],Lke=wt("outline","user","User",Oke),Fke=[["path",{d:"M6 5a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2v-14z",key:"svg-0"}],["path",{d:"M11 4h2",key:"svg-1"}],["path",{d:"M12 17v.01",key:"svg-2"}]],Vke=wt("outline","device-mobile","DeviceMobile",Fke),qke=[["path",{d:"M4 8h16",key:"svg-0"}],["path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z",key:"svg-1"}],["path",{d:"M8 4v4",key:"svg-2"}]],Hke=wt("outline","browser","Browser",qke),p7=S.createContext(null);function Uke({value:e,children:r}){return S.useContext(p7)?y.jsx(y.Fragment,{children:r}):y.jsx(p7.Provider,{value:e,children:r})}function bx({element:e,className:r,style:n}){const o=S.useContext(p7);if(!e||!e.icon||e.icon==="none")return null;let i;return e.icon.startsWith("http://")||e.icon.startsWith("https://")?i=y.jsx("img",{src:e.icon,alt:e.title}):o&&(i=y.jsx(o,{node:e})),i?y.jsx("div",{className:Ge(r,"likec4-element-icon"),"data-likec4-icon":e.icon,style:n,children:i}):null}const Wke={browser:Hke,cylinder:xL,mobile:Vke,person:Lke,queue:Ike,rectangle:Nke,storage:xL};function Gke({element:e,className:r}){const n=y.jsx(bx,{element:e,className:r});if(n)return n;const o=Wke[e.shape];return y.jsx("div",{className:Ge(r,"likec4-shape-icon"),children:y.jsx(o,{})})}function Zh(e){const r=S.useRef(e);return r.current=e,S.useMemo(()=>Object.freeze({get current(){return r.current}}),[])}function wL(e){const r=Zh(e);S.useEffect(()=>()=>{r.current()},[])}function h7(e,r,n,o=0){const i=S.useRef(void 0),a=S.useRef(void 0),l=S.useRef(e),s=S.useRef(void 0),c=()=>{i.current&&(clearTimeout(i.current),i.current=void 0),a.current&&(clearTimeout(a.current),a.current=void 0)};return wL(c),S.useEffect(()=>{l.current=e},r),S.useMemo(()=>{const d=()=>{if(c(),!s.current)return;const p=s.current;s.current=void 0,l.current.apply(p.this,p.args)},u=function(...p){i.current&&clearTimeout(i.current),s.current={args:p,this:this},i.current=setTimeout(d,n),o>0&&!a.current&&(a.current=setTimeout(d,o))};return Object.defineProperties(u,{length:{value:e.length},name:{value:`${e.name||"anonymous"}__debounced__${n}`}}),u},[n,o,...r])}const Yke=()=>{},xx=typeof globalThis<"u"&&typeof navigator<"u"&&typeof document<"u";function Xke(e){const r=Zh(e),n=S.useRef(0),o=S.useCallback(()=>{xx&&n.current&&(cancelAnimationFrame(n.current),n.current=0)},[]);return wL(o),[S.useMemo(()=>{const i=(...a)=>{xx&&(o(),n.current=requestAnimationFrame(()=>{r.current(...a),n.current=0}))};return Object.defineProperties(i,{length:{value:e.length},name:{value:`${e.name||"anonymous"}__raf`}}),i},[]),o]}const Kke=(e,r)=>{if(e===r)return!0;if(e.length!==r.length)return!1;for(const[n,o]of e.entries())if(o!==r[n])return!1;return!0};function Zke(e,r,n=Kke,o=S.useEffect,...i){const a=S.useRef(void 0);(a.current===void 0||xx&&!n(a.current,r))&&(a.current=r),o(e,a.current,...i)}function kL(){const e=S.useRef(!0);return S.useEffect(()=>{e.current=!1},[]),e.current}const f7=xx?S.useLayoutEffect:S.useEffect;function Qke(e){S.useEffect(()=>{e()},[])}function _L(e,r){const[n,o]=Xke(e);S.useEffect(()=>(n(),o),r)}const Jke=e=>(e+1)%Number.MAX_SAFE_INTEGER;function e6e(){const[,e]=S.useState(0);return S.useCallback(()=>{e(Jke)},[])}function t6e(e,r){const n=kL();S.useEffect(n?Yke:e,r)}const r6e=e=>{e&&clearTimeout(e)};function wx(e,r){const n=Zh(e),o=Zh(r),i=S.useRef(null),a=S.useCallback(()=>{r6e(i.current)},[]),l=S.useCallback(()=>{o.current!==void 0&&(a(),i.current=setTimeout(()=>{n.current()},o.current))},[]);return S.useEffect(()=>(l(),a),[r]),[a,l]}const SL=(e,r,n)=>{const o=S.useRef(void 0);return(o.current===void 0||!n(o.current,r))&&(o.current=r),S.useMemo(e,o.current)};function dn(e){if(typeof e=="string"||typeof e=="number")return""+e;let r="";if(Array.isArray(e))for(let n=0,o;n{}};function kx(){for(var e=0,r=arguments.length,n={},o;e=0&&(o=n.slice(i+1),n=n.slice(0,i)),n&&!r.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:o}})}_x.prototype=kx.prototype={constructor:_x,on:function(e,r){var n=this._,o=o6e(e+"",n),i,a=-1,l=o.length;if(arguments.length<2){for(;++a0)for(var n=new Array(i),o=0,i,a;o=0&&(r=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),CL.hasOwnProperty(r)?{space:CL[r],local:e}:e}function a6e(e){return function(){var r=this.ownerDocument,n=this.namespaceURI;return n===g7&&r.documentElement.namespaceURI===g7?r.createElement(e):r.createElementNS(n,e)}}function l6e(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function $L(e){var r=Sx(e);return(r.local?l6e:a6e)(r)}function s6e(){}function m7(e){return e==null?s6e:function(){return this.querySelector(e)}}function c6e(e){typeof e!="function"&&(e=m7(e));for(var r=this._groups,n=r.length,o=new Array(n),i=0;i=_&&(_=C+1);!(R=x[_])&&++_=0;)(l=o[i])&&(a&&l.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(l,a),a=l);return this}function P6e(e){e||(e=M6e);function r(p,f){return p&&f?e(p.__data__,f.__data__):!p-!f}for(var n=this._groups,o=n.length,i=new Array(o),a=0;ar?1:e>=r?0:NaN}function N6e(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function B6e(){return Array.from(this)}function I6e(){for(var e=this._groups,r=0,n=e.length;r1?this.each((r==null?X6e:typeof r=="function"?Z6e:K6e)(e,r,n??"")):Qh(this.node(),e)}function Qh(e,r){return e.style.getPropertyValue(r)||AL(e).getComputedStyle(e,null).getPropertyValue(r)}function J6e(e){return function(){delete this[e]}}function e_e(e,r){return function(){this[e]=r}}function t_e(e,r){return function(){var n=r.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function r_e(e,r){return arguments.length>1?this.each((r==null?J6e:typeof r=="function"?t_e:e_e)(e,r)):this.node()[e]}function DL(e){return e.trim().split(/^|\s+/)}function y7(e){return e.classList||new PL(e)}function PL(e){this._node=e,this._names=DL(e.getAttribute("class")||"")}PL.prototype={add:function(e){var r=this._names.indexOf(e);r<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var r=this._names.indexOf(e);r>=0&&(this._names.splice(r,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function ML(e,r){for(var n=y7(e),o=-1,i=r.length;++o=0&&(n=r.slice(o+1),r=r.slice(0,o)),{type:r,name:n}})}function T_e(e){return function(){var r=this.__on;if(r){for(var n=0,o=-1,i=r.length,a;n()=>e;function b7(e,{sourceEvent:r,subject:n,target:o,identifier:i,active:a,x:l,y:s,dx:c,dy:d,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:l,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:d,enumerable:!0,configurable:!0},_:{value:u}})}b7.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function L_e(e){return!e.ctrlKey&&!e.button}function F_e(){return this.parentNode}function V_e(e,r){return r??{x:e.x,y:e.y}}function q_e(){return navigator.maxTouchPoints||"ontouchstart"in this}function FL(){var e=L_e,r=F_e,n=V_e,o=q_e,i={},a=kx("start","drag","end"),l=0,s,c,d,u,p=0;function f($){$.on("mousedown.drag",m).filter(o).on("touchstart.drag",x).on("touchmove.drag",k,O_e).on("touchend.drag touchcancel.drag",C).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function m($,R){if(!(u||!e.call(this,$,R))){var T=_(this,r.call(this,$,R),$,R,"mouse");T&&(Ei($.view).on("mousemove.drag",v,A1).on("mouseup.drag",w,A1),OL($.view),v7($),d=!1,s=$.clientX,c=$.clientY,T("start",$))}}function v($){if(Jh($),!d){var R=$.clientX-s,T=$.clientY-c;d=R*R+T*T>p}i.mouse("drag",$)}function w($){Ei($.view).on("mousemove.drag mouseup.drag",null),LL($.view,d),Jh($),i.mouse("end",$)}function x($,R){if(e.call(this,$,R)){var T=$.changedTouches,A=r.call(this,$,R),z=T.length,j,I;for(j=0;j>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):n===8?Rx(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):n===4?Rx(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=U_e.exec(e))?new ri(r[1],r[2],r[3],1):(r=W_e.exec(e))?new ri(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=G_e.exec(e))?Rx(r[1],r[2],r[3],r[4]):(r=Y_e.exec(e))?Rx(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=X_e.exec(e))?XL(r[1],r[2]/100,r[3]/100,1):(r=K_e.exec(e))?XL(r[1],r[2]/100,r[3]/100,r[4]):qL.hasOwnProperty(e)?WL(qL[e]):e==="transparent"?new ri(NaN,NaN,NaN,0):null}function WL(e){return new ri(e>>16&255,e>>8&255,e&255,1)}function Rx(e,r,n,o){return o<=0&&(e=r=n=NaN),new ri(e,r,n,o)}function J_e(e){return e instanceof D1||(e=Hu(e)),e?(e=e.rgb(),new ri(e.r,e.g,e.b,e.opacity)):new ri}function w7(e,r,n,o){return arguments.length===1?J_e(e):new ri(e,r,n,o??1)}function ri(e,r,n,o){this.r=+e,this.g=+r,this.b=+n,this.opacity=+o}x7(ri,w7,VL(D1,{brighter(e){return e=e==null?$x:Math.pow($x,e),new ri(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?P1:Math.pow(P1,e),new ri(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new ri(Uu(this.r),Uu(this.g),Uu(this.b),zx(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:GL,formatHex:GL,formatHex8:e8e,formatRgb:YL,toString:YL}));function GL(){return`#${Wu(this.r)}${Wu(this.g)}${Wu(this.b)}`}function e8e(){return`#${Wu(this.r)}${Wu(this.g)}${Wu(this.b)}${Wu((isNaN(this.opacity)?1:this.opacity)*255)}`}function YL(){const e=zx(this.opacity);return`${e===1?"rgb(":"rgba("}${Uu(this.r)}, ${Uu(this.g)}, ${Uu(this.b)}${e===1?")":`, ${e})`}`}function zx(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Uu(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Wu(e){return e=Uu(e),(e<16?"0":"")+e.toString(16)}function XL(e,r,n,o){return o<=0?e=r=n=NaN:n<=0||n>=1?e=r=NaN:r<=0&&(e=NaN),new Ya(e,r,n,o)}function KL(e){if(e instanceof Ya)return new Ya(e.h,e.s,e.l,e.opacity);if(e instanceof D1||(e=Hu(e)),!e)return new Ya;if(e instanceof Ya)return e;e=e.rgb();var r=e.r/255,n=e.g/255,o=e.b/255,i=Math.min(r,n,o),a=Math.max(r,n,o),l=NaN,s=a-i,c=(a+i)/2;return s?(r===a?l=(n-o)/s+(n0&&c<1?0:l,new Ya(l,s,c,e.opacity)}function t8e(e,r,n,o){return arguments.length===1?KL(e):new Ya(e,r,n,o??1)}function Ya(e,r,n,o){this.h=+e,this.s=+r,this.l=+n,this.opacity=+o}x7(Ya,t8e,VL(D1,{brighter(e){return e=e==null?$x:Math.pow($x,e),new Ya(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?P1:Math.pow(P1,e),new Ya(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,r=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*r,i=2*n-o;return new ri(k7(e>=240?e-240:e+120,i,o),k7(e,i,o),k7(e<120?e+240:e-120,i,o),this.opacity)},clamp(){return new Ya(ZL(this.h),Tx(this.s),Tx(this.l),zx(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=zx(this.opacity);return`${e===1?"hsl(":"hsla("}${ZL(this.h)}, ${Tx(this.s)*100}%, ${Tx(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ZL(e){return e=(e||0)%360,e<0?e+360:e}function Tx(e){return Math.max(0,Math.min(1,e||0))}function k7(e,r,n){return(e<60?r+(n-r)*e/60:e<180?n:e<240?r+(n-r)*(240-e)/60:r)*255}const _7=e=>()=>e;function r8e(e,r){return function(n){return e+n*r}}function n8e(e,r,n){return e=Math.pow(e,n),r=Math.pow(r,n)-e,n=1/n,function(o){return Math.pow(e+o*r,n)}}function o8e(e){return(e=+e)==1?QL:function(r,n){return n-r?n8e(r,n,e):_7(isNaN(r)?n:r)}}function QL(e,r){var n=r-e;return n?r8e(e,n):_7(isNaN(e)?r:e)}const jx=(function e(r){var n=o8e(r);function o(i,a){var l=n((i=w7(i)).r,(a=w7(a)).r),s=n(i.g,a.g),c=n(i.b,a.b),d=QL(i.opacity,a.opacity);return function(u){return i.r=l(u),i.g=s(u),i.b=c(u),i.opacity=d(u),i+""}}return o.gamma=e,o})(1);function i8e(e,r){r||(r=[]);var n=e?Math.min(r.length,e.length):0,o=r.slice(),i;return function(a){for(i=0;in&&(a=r.slice(n,a),s[l]?s[l]+=a:s[++l]=a),(o=o[0])===(i=i[0])?s[l]?s[l]+=i:s[++l]=i:(s[++l]=null,c.push({i:l,x:Ul(o,i)})),n=E7.lastIndex;return n180?u+=360:u-d>180&&(d+=360),f.push({i:p.push(i(p)+"rotate(",null,o)-2,x:Ul(d,u)})):u&&p.push(i(p)+"rotate("+u+o)}function s(d,u,p,f){d!==u?f.push({i:p.push(i(p)+"skewX(",null,o)-2,x:Ul(d,u)}):u&&p.push(i(p)+"skewX("+u+o)}function c(d,u,p,f,m,v){if(d!==p||u!==f){var w=m.push(i(m)+"scale(",null,",",null,")");v.push({i:w-4,x:Ul(d,p)},{i:w-2,x:Ul(u,f)})}else(p!==1||f!==1)&&m.push(i(m)+"scale("+p+","+f+")")}return function(d,u){var p=[],f=[];return d=e(d),u=e(u),a(d.translateX,d.translateY,u.translateX,u.translateY,p,f),l(d.rotate,u.rotate,p,f),s(d.skewX,u.skewX,p,f),c(d.scaleX,d.scaleY,u.scaleX,u.scaleY,p,f),d=u=null,function(m){for(var v=-1,w=f.length,x;++v=0&&e._call.call(void 0,r),e=e._next;--tf}function sF(){Gu=(Mx=L1.now())+Nx,tf=B1=0;try{x8e()}finally{tf=0,k8e(),Gu=0}}function w8e(){var e=L1.now(),r=e-Mx;r>iF&&(Nx-=r,Mx=e)}function k8e(){for(var e,r=Px,n,o=1/0;r;)r._call?(o>r._time&&(o=r._time),e=r,r=r._next):(n=r._next,r._next=null,r=e?e._next=n:Px=n);O1=e,$7(o)}function $7(e){if(!tf){B1&&(B1=clearTimeout(B1));var r=e-Gu;r>24?(e<1/0&&(B1=setTimeout(sF,e-L1.now()-Nx)),I1&&(I1=clearInterval(I1))):(I1||(Mx=L1.now(),I1=setInterval(w8e,iF)),tf=1,aF(sF))}}function cF(e,r,n){var o=new Bx;return r=r==null?0:+r,o.restart(i=>{o.stop(),e(i+r)},r,n),o}var _8e=kx("start","end","cancel","interrupt"),S8e=[],dF=0,uF=1,R7=2,Ix=3,pF=4,z7=5,Ox=6;function Lx(e,r,n,o,i,a){var l=e.__transition;if(!l)e.__transition={};else if(n in l)return;E8e(e,n,{name:r,index:o,group:i,on:_8e,tween:S8e,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:dF})}function T7(e,r){var n=Xa(e,r);if(n.state>dF)throw new Error("too late; already scheduled");return n}function Wl(e,r){var n=Xa(e,r);if(n.state>Ix)throw new Error("too late; already running");return n}function Xa(e,r){var n=e.__transition;if(!n||!(n=n[r]))throw new Error("transition not found");return n}function E8e(e,r,n){var o=e.__transition,i;o[r]=n,n.timer=lF(a,0,n.time);function a(d){n.state=uF,n.timer.restart(l,n.delay,n.time),n.delay<=d&&l(d-n.delay)}function l(d){var u,p,f,m;if(n.state!==uF)return c();for(u in o)if(m=o[u],m.name===n.name){if(m.state===Ix)return cF(l);m.state===pF?(m.state=Ox,m.timer.stop(),m.on.call("interrupt",e,e.__data__,m.index,m.group),delete o[u]):+uR7&&o.state=0&&(r=r.slice(0,n)),!r||r==="start"})}function t7e(e,r,n){var o,i,a=e7e(r)?T7:Wl;return function(){var l=a(this,e),s=l.on;s!==o&&(i=(o=s).copy()).on(r,n),l.on=i}}function r7e(e,r){var n=this._id;return arguments.length<2?Xa(this.node(),n).on.on(e):this.each(t7e(n,e,r))}function n7e(e){return function(){var r=this.parentNode;for(var n in this.__transition)if(+n!==e)return;r&&r.removeChild(this)}}function o7e(){return this.on("end.remove",n7e(this._id))}function i7e(e){var r=this._name,n=this._id;typeof e!="function"&&(e=m7(e));for(var o=this._groups,i=o.length,a=new Array(i),l=0;l()=>e;function T7e(e,{sourceEvent:r,target:n,transform:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function Us(e,r,n){this.k=e,this.x=r,this.y=n}Us.prototype={constructor:Us,scale:function(e){return e===1?this:new Us(this.k*e,this.x,this.y)},translate:function(e,r){return e===0&r===0?this:new Us(this.k,this.x+this.k*e,this.y+this.k*r)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var qx=new Us(1,0,0);mF.prototype=Us.prototype;function mF(e){for(;!e.__zoom;)if(!(e=e.parentNode))return qx;return e.__zoom}function A7(e){e.stopImmediatePropagation()}function F1(e){e.preventDefault(),e.stopImmediatePropagation()}function j7e(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function A7e(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function yF(){return this.__zoom||qx}function D7e(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function P7e(){return navigator.maxTouchPoints||"ontouchstart"in this}function M7e(e,r,n){var o=e.invertX(r[0][0])-n[0][0],i=e.invertX(r[1][0])-n[1][0],a=e.invertY(r[0][1])-n[0][1],l=e.invertY(r[1][1])-n[1][1];return e.translate(i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i),l>a?(a+l)/2:Math.min(0,a)||Math.max(0,l))}function vF(){var e=j7e,r=A7e,n=M7e,o=D7e,i=P7e,a=[0,1/0],l=[[-1/0,-1/0],[1/0,1/0]],s=250,c=Dx,d=kx("start","zoom","end"),u,p,f,m=500,v=150,w=0,x=10;function k(P){P.property("__zoom",yF).on("wheel.zoom",z,{passive:!1}).on("mousedown.zoom",j).on("dblclick.zoom",I).filter(i).on("touchstart.zoom",N).on("touchmove.zoom",L).on("touchend.zoom touchcancel.zoom",H).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}k.transform=function(P,V,B,F){var q=P.selection?P.selection():P;q.property("__zoom",yF),P!==q?R(P,V,B,F):q.interrupt().each(function(){T(this,arguments).event(F).start().zoom(null,typeof V=="function"?V.apply(this,arguments):V).end()})},k.scaleBy=function(P,V,B,F){k.scaleTo(P,function(){var q=this.__zoom.k,G=typeof V=="function"?V.apply(this,arguments):V;return q*G},B,F)},k.scaleTo=function(P,V,B,F){k.transform(P,function(){var q=r.apply(this,arguments),G=this.__zoom,U=B==null?$(q):typeof B=="function"?B.apply(this,arguments):B,Y=G.invert(U),K=typeof V=="function"?V.apply(this,arguments):V;return n(_(C(G,K),U,Y),q,l)},B,F)},k.translateBy=function(P,V,B,F){k.transform(P,function(){return n(this.__zoom.translate(typeof V=="function"?V.apply(this,arguments):V,typeof B=="function"?B.apply(this,arguments):B),r.apply(this,arguments),l)},null,F)},k.translateTo=function(P,V,B,F,q){k.transform(P,function(){var G=r.apply(this,arguments),U=this.__zoom,Y=F==null?$(G):typeof F=="function"?F.apply(this,arguments):F;return n(qx.translate(Y[0],Y[1]).scale(U.k).translate(typeof V=="function"?-V.apply(this,arguments):-V,typeof B=="function"?-B.apply(this,arguments):-B),G,l)},F,q)};function C(P,V){return V=Math.max(a[0],Math.min(a[1],V)),V===P.k?P:new Us(V,P.x,P.y)}function _(P,V,B){var F=V[0]-B[0]*P.k,q=V[1]-B[1]*P.k;return F===P.x&&q===P.y?P:new Us(P.k,F,q)}function $(P){return[(+P[0][0]+ +P[1][0])/2,(+P[0][1]+ +P[1][1])/2]}function R(P,V,B,F){P.on("start.zoom",function(){T(this,arguments).event(F).start()}).on("interrupt.zoom end.zoom",function(){T(this,arguments).event(F).end()}).tween("zoom",function(){var q=this,G=arguments,U=T(q,G).event(F),Y=r.apply(q,G),K=B==null?$(Y):typeof B=="function"?B.apply(q,G):B,O=Math.max(Y[1][0]-Y[0][0],Y[1][1]-Y[0][1]),W=q.__zoom,Z=typeof V=="function"?V.apply(q,G):V,Q=c(W.invert(K).concat(O/W.k),Z.invert(K).concat(O/Z.k));return function(ie){if(ie===1)ie=Z;else{var te=Q(ie),re=O/te[2];ie=new Us(re,K[0]-te[0]*re,K[1]-te[1]*re)}U.zoom(null,ie)}})}function T(P,V,B){return!B&&P.__zooming||new A(P,V)}function A(P,V){this.that=P,this.args=V,this.active=0,this.sourceEvent=null,this.extent=r.apply(P,V),this.taps=0}A.prototype={event:function(P){return P&&(this.sourceEvent=P),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(P,V){return this.mouse&&P!=="mouse"&&(this.mouse[1]=V.invert(this.mouse[0])),this.touch0&&P!=="touch"&&(this.touch0[1]=V.invert(this.touch0[0])),this.touch1&&P!=="touch"&&(this.touch1[1]=V.invert(this.touch1[0])),this.that.__zoom=V,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(P){var V=Ei(this.that).datum();d.call(P,this.that,new T7e(P,{sourceEvent:this.sourceEvent,target:k,transform:this.that.__zoom,dispatch:d}),V)}};function z(P,...V){if(!e.apply(this,arguments))return;var B=T(this,V).event(P),F=this.__zoom,q=Math.max(a[0],Math.min(a[1],F.k*Math.pow(2,o.apply(this,arguments)))),G=Ga(P);if(B.wheel)(B.mouse[0][0]!==G[0]||B.mouse[0][1]!==G[1])&&(B.mouse[1]=F.invert(B.mouse[0]=G)),clearTimeout(B.wheel);else{if(F.k===q)return;B.mouse=[G,F.invert(G)],Fx(this),B.start()}F1(P),B.wheel=setTimeout(U,v),B.zoom("mouse",n(_(C(F,q),B.mouse[0],B.mouse[1]),B.extent,l));function U(){B.wheel=null,B.end()}}function j(P,...V){if(f||!e.apply(this,arguments))return;var B=P.currentTarget,F=T(this,V,!0).event(P),q=Ei(P.view).on("mousemove.zoom",K,!0).on("mouseup.zoom",O,!0),G=Ga(P,B),U=P.clientX,Y=P.clientY;OL(P.view),A7(P),F.mouse=[G,this.__zoom.invert(G)],Fx(this),F.start();function K(W){if(F1(W),!F.moved){var Z=W.clientX-U,Q=W.clientY-Y;F.moved=Z*Z+Q*Q>w}F.event(W).zoom("mouse",n(_(F.that.__zoom,F.mouse[0]=Ga(W,B),F.mouse[1]),F.extent,l))}function O(W){q.on("mousemove.zoom mouseup.zoom",null),LL(W.view,F.moved),F1(W),F.event(W).end()}}function I(P,...V){if(e.apply(this,arguments)){var B=this.__zoom,F=Ga(P.changedTouches?P.changedTouches[0]:P,this),q=B.invert(F),G=B.k*(P.shiftKey?.5:2),U=n(_(C(B,G),F,q),r.apply(this,V),l);F1(P),s>0?Ei(this).transition().duration(s).call(R,U,F,P):Ei(this).call(k.transform,U,F,P)}}function N(P,...V){if(e.apply(this,arguments)){var B=P.touches,F=B.length,q=T(this,V,P.changedTouches.length===F).event(P),G,U,Y,K;for(A7(P),U=0;U"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:r,sourceHandle:n,targetHandle:o})=>`Couldn't create edge for ${e} handle id: "${e==="source"?n:o}", edge id: ${r}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs."},V1=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],bF=["Enter"," ","Escape"],xF={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:e,x:r,y:n})=>`Moved selected node ${e}. New position, x: ${r}, y: ${n}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var rf;(function(e){e.Strict="strict",e.Loose="loose"})(rf||(rf={}));var Yu;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Yu||(Yu={}));var q1;(function(e){e.Partial="partial",e.Full="full"})(q1||(q1={}));const wF={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var id;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(id||(id={}));var Hx;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Hx||(Hx={}));var Ue;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(Ue||(Ue={}));const kF={[Ue.Left]:Ue.Right,[Ue.Right]:Ue.Left,[Ue.Top]:Ue.Bottom,[Ue.Bottom]:Ue.Top};function _F(e){return e===null?null:e?"valid":"invalid"}const SF=e=>"id"in e&&"source"in e&&"target"in e,N7e=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),D7=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),H1=(e,r=[0,0])=>{const{width:n,height:o}=_o(e),i=e.origin??r,a=n*i[0],l=o*i[1];return{x:e.position.x-a,y:e.position.y-l}},EF=(e,r={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((o,i)=>{const a=typeof i=="string";let l=!r.nodeLookup&&!a?i:void 0;r.nodeLookup&&(l=a?r.nodeLookup.get(i):D7(i)?i:r.nodeLookup.get(i.id));const s=l?Gx(l,r.nodeOrigin):{x:0,y:0,x2:0,y2:0};return Ux(o,s)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Wx(n)},nf=(e,r={})=>{let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0},o=!1;return e.forEach(i=>{(r.filter===void 0||r.filter(i))&&(n=Ux(n,Gx(i)),o=!0)}),o?Wx(n):{x:0,y:0,width:0,height:0}},P7=(e,r,[n,o,i]=[0,0,1],a=!1,l=!1)=>{const s={...G1(r,[n,o,i]),width:r.width/i,height:r.height/i},c=[];for(const d of e.values()){const{measured:u,selectable:p=!0,hidden:f=!1}=d;if(l&&!p||f)continue;const m=u.width??d.width??d.initialWidth??null,v=u.height??d.height??d.initialHeight??null,w=U1(s,Ku(d)),x=(m??0)*(v??0),k=a&&w>0;(!d.internals.handleBounds||k||w>=x||d.dragging)&&c.push(d)}return c},B7e=(e,r)=>{const n=new Set;return e.forEach(o=>{n.add(o.id)}),r.filter(o=>n.has(o.source)||n.has(o.target))};function I7e(e,r){const n=new Map,o=r?.nodes?new Set(r.nodes.map(i=>i.id)):null;return e.forEach(i=>{i.measured.width&&i.measured.height&&(r?.includeHiddenNodes||!i.hidden)&&(!o||o.has(i.id))&&n.set(i.id,i)}),n}async function O7e({nodes:e,width:r,height:n,panZoom:o,minZoom:i,maxZoom:a},l){if(e.size===0)return Promise.resolve(!0);const s=I7e(e,l),c=nf(s),d=Ws(c,r,n,l?.minZoom??i,l?.maxZoom??a,l?.padding??.1);return await o.setViewport(d,{duration:l?.duration,ease:l?.ease,interpolate:l?.interpolate}),Promise.resolve(!0)}function CF({nodeId:e,nextPosition:r,nodeLookup:n,nodeOrigin:o=[0,0],nodeExtent:i,onError:a}){const l=n.get(e),s=l.parentId?n.get(l.parentId):void 0,{x:c,y:d}=s?s.internals.positionAbsolute:{x:0,y:0},u=l.origin??o;let p=l.extent||i;if(l.extent==="parent"&&!l.expandParent)if(!s)a?.("005",Gl.error005());else{const m=s.measured.width,v=s.measured.height;m&&v&&(p=[[c,d],[c+m,d+v]])}else s&&sf(l.extent)&&(p=[[l.extent[0][0]+c,l.extent[0][1]+d],[l.extent[1][0]+c,l.extent[1][1]+d]]);const f=sf(p)?Xu(r,p,l.measured):r;return(l.measured.width===void 0||l.measured.height===void 0)&&a?.("015",Gl.error015()),{position:{x:f.x-c+(l.measured.width??0)*u[0],y:f.y-d+(l.measured.height??0)*u[1]},positionAbsolute:f}}async function L7e({nodesToRemove:e=[],edgesToRemove:r=[],nodes:n,edges:o,onBeforeDelete:i}){const a=new Set(e.map(p=>p.id)),l=[];for(const p of n){if(p.deletable===!1)continue;const f=a.has(p.id),m=!f&&p.parentId&&l.find(v=>v.id===p.parentId);(f||m)&&l.push(p)}const s=new Set(r.map(p=>p.id)),c=o.filter(p=>p.deletable!==!1),d=B7e(l,c);for(const p of c)s.has(p.id)&&!d.find(f=>f.id===p.id)&&d.push(p);if(!i)return{edges:d,nodes:l};const u=await i({nodes:l,edges:d});return typeof u=="boolean"?u?{edges:d,nodes:l}:{edges:[],nodes:[]}:u}const of=(e,r=0,n=1)=>Math.min(Math.max(e,r),n),Xu=(e={x:0,y:0},r,n)=>({x:of(e.x,r[0][0],r[1][0]-(n?.width??0)),y:of(e.y,r[0][1],r[1][1]-(n?.height??0))});function $F(e,r,n){const{width:o,height:i}=_o(n),{x:a,y:l}=n.internals.positionAbsolute;return Xu(e,[[a,l],[a+o,l+i]],r)}const RF=(e,r,n)=>en?-of(Math.abs(e-n),1,r)/r:0,zF=(e,r,n=15,o=40)=>{const i=RF(e.x,o,r.width-o)*n,a=RF(e.y,o,r.height-o)*n;return[i,a]},Ux=(e,r)=>({x:Math.min(e.x,r.x),y:Math.min(e.y,r.y),x2:Math.max(e.x2,r.x2),y2:Math.max(e.y2,r.y2)}),M7=({x:e,y:r,width:n,height:o})=>({x:e,y:r,x2:e+n,y2:r+o}),Wx=({x:e,y:r,x2:n,y2:o})=>({x:e,y:r,width:n-e,height:o-r}),Ku=(e,r=[0,0])=>{const{x:n,y:o}=D7(e)?e.internals.positionAbsolute:H1(e,r);return{x:n,y:o,width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}},Gx=(e,r=[0,0])=>{const{x:n,y:o}=D7(e)?e.internals.positionAbsolute:H1(e,r);return{x:n,y:o,x2:n+(e.measured?.width??e.width??e.initialWidth??0),y2:o+(e.measured?.height??e.height??e.initialHeight??0)}},TF=(e,r)=>Wx(Ux(M7(e),M7(r))),U1=(e,r)=>{const n=Math.max(0,Math.min(e.x+e.width,r.x+r.width)-Math.max(e.x,r.x)),o=Math.max(0,Math.min(e.y+e.height,r.y+r.height)-Math.max(e.y,r.y));return Math.ceil(n*o)},jF=e=>Ka(e.width)&&Ka(e.height)&&Ka(e.x)&&Ka(e.y),Ka=e=>!isNaN(e)&&isFinite(e),F7e=(e,r)=>{},W1=(e,r=[1,1])=>({x:r[0]*Math.round(e.x/r[0]),y:r[1]*Math.round(e.y/r[1])}),G1=({x:e,y:r},[n,o,i],a=!1,l=[1,1])=>{const s={x:(e-n)/i,y:(r-o)/i};return a?W1(s,l):s},Yx=({x:e,y:r},[n,o,i])=>({x:e*i+n,y:r*i+o});function af(e,r){if(typeof e=="number")return Math.floor((r-r/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(n)}if(typeof e=="string"&&e.endsWith("%")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(r*n*.01)}return console.error(`[React Flow] The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function V7e(e,r,n){if(typeof e=="string"||typeof e=="number"){const o=af(e,n),i=af(e,r);return{top:o,right:i,bottom:o,left:i,x:i*2,y:o*2}}if(typeof e=="object"){const o=af(e.top??e.y??0,n),i=af(e.bottom??e.y??0,n),a=af(e.left??e.x??0,r),l=af(e.right??e.x??0,r);return{top:o,right:l,bottom:i,left:a,x:a+l,y:o+i}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function q7e(e,r,n,o,i,a){const{x:l,y:s}=Yx(e,[r,n,o]),{x:c,y:d}=Yx({x:e.x+e.width,y:e.y+e.height},[r,n,o]),u=i-c,p=a-d;return{left:Math.floor(l),top:Math.floor(s),right:Math.floor(u),bottom:Math.floor(p)}}const Ws=(e,r,n,o,i,a)=>{const l=V7e(a,r,n),s=(r-l.x)/e.width,c=(n-l.y)/e.height,d=Math.min(s,c),u=of(d,o,i),p=e.x+e.width/2,f=e.y+e.height/2,m=r/2-p*u,v=n/2-f*u,w=q7e(e,m,v,u,r,n),x={left:Math.min(w.left-l.left,0),top:Math.min(w.top-l.top,0),right:Math.min(w.right-l.right,0),bottom:Math.min(w.bottom-l.bottom,0)};return{x:m-x.left+x.right,y:v-x.top+x.bottom,zoom:u}},lf=()=>typeof navigator<"u"&&navigator?.userAgent?.indexOf("Mac")>=0;function sf(e){return e!=null&&e!=="parent"}function _o(e){return{width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}}function AF(e){return(e.measured?.width??e.width??e.initialWidth)!==void 0&&(e.measured?.height??e.height??e.initialHeight)!==void 0}function DF(e,r={width:0,height:0},n,o,i){const a={...e},l=o.get(n);if(l){const s=l.origin||i;a.x+=l.internals.positionAbsolute.x-(r.width??0)*s[0],a.y+=l.internals.positionAbsolute.y-(r.height??0)*s[1]}return a}function PF(e,r){if(e.size!==r.size)return!1;for(const n of e)if(!r.has(n))return!1;return!0}function H7e(){let e,r;return{promise:new Promise((n,o)=>{e=n,r=o}),resolve:e,reject:r}}function U7e(e){return{...xF,...e||{}}}function Y1(e,{snapGrid:r=[0,0],snapToGrid:n=!1,transform:o,containerBounds:i}){const{x:a,y:l}=Za(e),s=G1({x:a-(i?.left??0),y:l-(i?.top??0)},o),{x:c,y:d}=n?W1(s,r):s;return{xSnapped:c,ySnapped:d,...s}}const N7=e=>({width:e.offsetWidth,height:e.offsetHeight}),MF=e=>e?.getRootNode?.()||window?.document,W7e=["INPUT","SELECT","TEXTAREA"];function NF(e){const r=e.composedPath?.()?.[0]||e.target;return r?.nodeType!==1?!1:W7e.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const BF=e=>"clientX"in e,Za=(e,r)=>{const n=BF(e),o=n?e.clientX:e.touches?.[0].clientX,i=n?e.clientY:e.touches?.[0].clientY;return{x:o-(r?.left??0),y:i-(r?.top??0)}},IF=(e,r,n,o,i)=>{const a=r.querySelectorAll(`.${e}`);return!a||!a.length?null:Array.from(a).map(l=>{const s=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),type:e,nodeId:i,position:l.getAttribute("data-handlepos"),x:(s.left-n.left)/o,y:(s.top-n.top)/o,...N7(l)}})};function OF({sourceX:e,sourceY:r,targetX:n,targetY:o,sourceControlX:i,sourceControlY:a,targetControlX:l,targetControlY:s}){const c=e*.125+i*.375+l*.375+n*.125,d=r*.125+a*.375+s*.375+o*.125,u=Math.abs(c-e),p=Math.abs(d-r);return[c,d,u,p]}function Xx(e,r){return e>=0?.5*e:r*25*Math.sqrt(-e)}function LF({pos:e,x1:r,y1:n,x2:o,y2:i,c:a}){switch(e){case Ue.Left:return[r-Xx(r-o,a),n];case Ue.Right:return[r+Xx(o-r,a),n];case Ue.Top:return[r,n-Xx(n-i,a)];case Ue.Bottom:return[r,n+Xx(i-n,a)]}}function Kx({sourceX:e,sourceY:r,sourcePosition:n=Ue.Bottom,targetX:o,targetY:i,targetPosition:a=Ue.Top,curvature:l=.25}){const[s,c]=LF({pos:n,x1:e,y1:r,x2:o,y2:i,c:l}),[d,u]=LF({pos:a,x1:o,y1:i,x2:e,y2:r,c:l}),[p,f,m,v]=OF({sourceX:e,sourceY:r,targetX:o,targetY:i,sourceControlX:s,sourceControlY:c,targetControlX:d,targetControlY:u});return[`M${e},${r} C${s},${c} ${d},${u} ${o},${i}`,p,f,m,v]}function FF({sourceX:e,sourceY:r,targetX:n,targetY:o}){const i=Math.abs(n-e)/2,a=n0}const X7e=({source:e,sourceHandle:r,target:n,targetHandle:o})=>`xy-edge__${e}${r||""}-${n}${o||""}`,K7e=(e,r)=>r.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),Z7e=(e,r,n={})=>{if(!e.source||!e.target)return r;const o=n.getEdgeId||X7e;let i;return SF(e)?i={...e}:i={...e,id:o(e)},K7e(i,r)?r:(i.sourceHandle===null&&delete i.sourceHandle,i.targetHandle===null&&delete i.targetHandle,r.concat(i))};function VF({sourceX:e,sourceY:r,targetX:n,targetY:o}){const[i,a,l,s]=FF({sourceX:e,sourceY:r,targetX:n,targetY:o});return[`M ${e},${r}L ${n},${o}`,i,a,l,s]}const qF={[Ue.Left]:{x:-1,y:0},[Ue.Right]:{x:1,y:0},[Ue.Top]:{x:0,y:-1},[Ue.Bottom]:{x:0,y:1}},Q7e=({source:e,sourcePosition:r=Ue.Bottom,target:n})=>r===Ue.Left||r===Ue.Right?e.xMath.sqrt(Math.pow(r.x-e.x,2)+Math.pow(r.y-e.y,2));function J7e({source:e,sourcePosition:r=Ue.Bottom,target:n,targetPosition:o=Ue.Top,center:i,offset:a,stepPosition:l}){const s=qF[r],c=qF[o],d={x:e.x+s.x*a,y:e.y+s.y*a},u={x:n.x+c.x*a,y:n.y+c.y*a},p=Q7e({source:d,sourcePosition:r,target:u}),f=p.x!==0?"x":"y",m=p[f];let v=[],w,x;const k={x:0,y:0},C={x:0,y:0},[,,_,$]=FF({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[f]*c[f]===-1){f==="x"?(w=i.x??d.x+(u.x-d.x)*l,x=i.y??(d.y+u.y)/2):(w=i.x??(d.x+u.x)/2,x=i.y??d.y+(u.y-d.y)*l);const R=[{x:w,y:d.y},{x:w,y:u.y}],T=[{x:d.x,y:x},{x:u.x,y:x}];s[f]===m?v=f==="x"?R:T:v=f==="x"?T:R}else{const R=[{x:d.x,y:u.y}],T=[{x:u.x,y:d.y}];if(f==="x"?v=s.x===m?T:R:v=s.y===m?R:T,r===o){const N=Math.abs(e[f]-n[f]);if(N<=a){const L=Math.min(a-1,a-N);s[f]===m?k[f]=(d[f]>e[f]?-1:1)*L:C[f]=(u[f]>n[f]?-1:1)*L}}if(r!==o){const N=f==="x"?"y":"x",L=s[f]===c[N],H=d[N]>u[N],P=d[N]=I?(w=(A.x+z.x)/2,x=v[0].y):(w=v[0].x,x=(A.y+z.y)/2)}return[[e,{x:d.x+k.x,y:d.y+k.y},...v,{x:u.x+C.x,y:u.y+C.y},n],w,x,_,$]}function e9e(e,r,n,o){const i=Math.min(HF(e,r)/2,HF(r,n)/2,o),{x:a,y:l}=r;if(e.x===a&&a===n.x||e.y===l&&l===n.y)return`L${a} ${l}`;if(e.y===l){const d=e.x{let _="";return C>0&&Cn.id===r):e[0])||null}function B7(e,r){return e?typeof e=="string"?e:`${r?`${r}__`:""}${Object.keys(e).sort().map(n=>`${n}=${e[n]}`).join("&")}`:""}function t9e(e,{id:r,defaultColor:n,defaultMarkerStart:o,defaultMarkerEnd:i}){const a=new Set;return e.reduce((l,s)=>([s.markerStart||o,s.markerEnd||i].forEach(c=>{if(c&&typeof c=="object"){const d=B7(c,r);a.has(d)||(l.push({id:d,color:c.color||n,...c}),a.add(d))}}),l),[]).sort((l,s)=>l.id.localeCompare(s.id))}function r9e(e,r,n,o,i){let a=.5;i==="start"?a=0:i==="end"&&(a=1);let l=[(e.x+e.width*a)*r.zoom+r.x,e.y*r.zoom+r.y-o],s=[-100*a,-100];switch(n){case Ue.Right:l=[(e.x+e.width)*r.zoom+r.x+o,(e.y+e.height*a)*r.zoom+r.y],s=[0,-100*a];break;case Ue.Bottom:l[1]=(e.y+e.height)*r.zoom+r.y+o,s[1]=0;break;case Ue.Left:l=[e.x*r.zoom+r.x-o,(e.y+e.height*a)*r.zoom+r.y],s=[-100,-100*a];break}return`translate(${l[0]}px, ${l[1]}px) translate(${s[0]}%, ${s[1]}%)`}const XF=1e3,n9e=10,I7={nodeOrigin:[0,0],nodeExtent:V1,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},o9e={...I7,checkEquality:!0};function O7(e,r){const n={...e};for(const o in r)r[o]!==void 0&&(n[o]=r[o]);return n}function i9e(e,r,n){const o=O7(I7,n);for(const i of e.values())if(i.parentId)V7(i,e,r,o);else{const a=H1(i,o.nodeOrigin),l=sf(i.extent)?i.extent:o.nodeExtent,s=Xu(a,l,_o(i));i.internals.positionAbsolute=s}}function a9e(e,r){if(!e.handles)return e.measured?r?.internals.handleBounds:void 0;const n=[],o=[];for(const i of e.handles){const a={id:i.id,width:i.width??1,height:i.height??1,nodeId:e.id,x:i.x,y:i.y,position:i.position,type:i.type};i.type==="source"?n.push(a):i.type==="target"&&o.push(a)}return{source:n,target:o}}function L7(e){return e==="manual"}function F7(e,r,n,o={}){const i=O7(o9e,o),a={i:0},l=new Map(r),s=i?.elevateNodesOnSelect&&!L7(i.zIndexMode)?XF:0;let c=e.length>0;r.clear(),n.clear();for(const d of e){let u=l.get(d.id);if(i.checkEquality&&d===u?.internals.userNode)r.set(d.id,u);else{const p=H1(d,i.nodeOrigin),f=sf(d.extent)?d.extent:i.nodeExtent,m=Xu(p,f,_o(d));u={...i.defaults,...d,measured:{width:d.measured?.width,height:d.measured?.height},internals:{positionAbsolute:m,handleBounds:a9e(d,u),z:KF(d,s,i.zIndexMode),userNode:d}},r.set(d.id,u)}(u.measured===void 0||u.measured.width===void 0||u.measured.height===void 0)&&!u.hidden&&(c=!1),d.parentId&&V7(u,r,n,o,a)}return c}function l9e(e,r){if(!e.parentId)return;const n=r.get(e.parentId);n?n.set(e.id,e):r.set(e.parentId,new Map([[e.id,e]]))}function V7(e,r,n,o,i){const{elevateNodesOnSelect:a,nodeOrigin:l,nodeExtent:s,zIndexMode:c}=O7(I7,o),d=e.parentId,u=r.get(d);if(!u){console.warn(`Parent node ${d} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}l9e(e,n),i&&!u.parentId&&u.internals.rootParentIndex===void 0&&c==="auto"&&(u.internals.rootParentIndex=++i.i,u.internals.z=u.internals.z+i.i*n9e),i&&u.internals.rootParentIndex!==void 0&&(i.i=u.internals.rootParentIndex);const p=a&&!L7(c)?XF:0,{x:f,y:m,z:v}=s9e(e,u,l,s,p,c),{positionAbsolute:w}=e.internals,x=f!==w.x||m!==w.y;(x||v!==e.internals.z)&&r.set(e.id,{...e,internals:{...e.internals,positionAbsolute:x?{x:f,y:m}:w,z:v}})}function KF(e,r,n){const o=Ka(e.zIndex)?e.zIndex:0;return L7(n)?o:o+(e.selected?r:0)}function s9e(e,r,n,o,i,a){const{x:l,y:s}=r.internals.positionAbsolute,c=_o(e),d=H1(e,n),u=sf(e.extent)?Xu(d,e.extent,c):d;let p=Xu({x:l+u.x,y:s+u.y},o,c);e.extent==="parent"&&(p=$F(p,c,r));const f=KF(e,i,a),m=r.internals.z??0;return{x:p.x,y:p.y,z:m>=f?m+1:f}}function q7(e,r,n,o=[0,0]){const i=[],a=new Map;for(const l of e){const s=r.get(l.parentId);if(!s)continue;const c=a.get(l.parentId)?.expandedRect??Ku(s),d=TF(c,l.rect);a.set(l.parentId,{expandedRect:d,parent:s})}return a.size>0&&a.forEach(({expandedRect:l,parent:s},c)=>{const d=s.internals.positionAbsolute,u=_o(s),p=s.origin??o,f=l.x0||m>0||x||k)&&(i.push({id:c,type:"position",position:{x:s.position.x-f+x,y:s.position.y-m+k}}),n.get(c)?.forEach(C=>{e.some(_=>_.id===C.id)||i.push({id:C.id,type:"position",position:{x:C.position.x+f,y:C.position.y+m}})})),(u.width0){const m=q7(f,r,n,i);d.push(...m)}return{changes:d,updatedInternals:c}}async function d9e({delta:e,panZoom:r,transform:n,translateExtent:o,width:i,height:a}){if(!r||!e.x&&!e.y)return Promise.resolve(!1);const l=await r.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[i,a]],o),s=!!l&&(l.x!==n[0]||l.y!==n[1]||l.k!==n[2]);return Promise.resolve(s)}function ZF(e,r,n,o,i,a){let l=i;const s=o.get(l)||new Map;o.set(l,s.set(n,r)),l=`${i}-${e}`;const c=o.get(l)||new Map;if(o.set(l,c.set(n,r)),a){l=`${i}-${e}-${a}`;const d=o.get(l)||new Map;o.set(l,d.set(n,r))}}function QF(e,r,n){e.clear(),r.clear();for(const o of n){const{source:i,target:a,sourceHandle:l=null,targetHandle:s=null}=o,c={edgeId:o.id,source:i,target:a,sourceHandle:l,targetHandle:s},d=`${i}-${l}--${a}-${s}`,u=`${a}-${s}--${i}-${l}`;ZF("source",c,u,e,i,l),ZF("target",c,d,e,a,s),r.set(o.id,o)}}function JF(e,r){if(!e.parentId)return!1;const n=r.get(e.parentId);return n?n.selected?!0:JF(n,r):!1}function eV(e,r,n){let o=e;do{if(o?.matches?.(r))return!0;if(o===n)return!1;o=o?.parentElement}while(o);return!1}function u9e(e,r,n,o){const i=new Map;for(const[a,l]of e)if((l.selected||l.id===o)&&(!l.parentId||!JF(l,e))&&(l.draggable||r&&typeof l.draggable>"u")){const s=e.get(a);s&&i.set(a,{id:a,position:s.position||{x:0,y:0},distance:{x:n.x-s.internals.positionAbsolute.x,y:n.y-s.internals.positionAbsolute.y},extent:s.extent,parentId:s.parentId,origin:s.origin,expandParent:s.expandParent,internals:{positionAbsolute:s.internals.positionAbsolute||{x:0,y:0}},measured:{width:s.measured.width??0,height:s.measured.height??0}})}return i}function H7({nodeId:e,dragItems:r,nodeLookup:n,dragging:o=!0}){const i=[];for(const[l,s]of r){const c=n.get(l)?.internals.userNode;c&&i.push({...c,position:s.position,dragging:o})}if(!e)return[i[0],i];const a=n.get(e)?.internals.userNode;return[a?{...a,position:r.get(e)?.position||a.position,dragging:o}:i[0],i]}function p9e({dragItems:e,snapGrid:r,x:n,y:o}){const i=e.values().next().value;if(!i)return null;const a={x:n-i.distance.x,y:o-i.distance.y},l=W1(a,r);return{x:l.x-a.x,y:l.y-a.y}}function h9e({onNodeMouseDown:e,getStoreItems:r,onDragStart:n,onDrag:o,onDragStop:i}){let a={x:null,y:null},l=0,s=new Map,c=!1,d={x:0,y:0},u=null,p=!1,f=null,m=!1,v=!1,w=null;function x({noDragClassName:C,handleSelector:_,domNode:$,isSelectable:R,nodeId:T,nodeClickDistance:A=0}){f=Ei($);function z({x:L,y:H}){const{nodeLookup:P,nodeExtent:V,snapGrid:B,snapToGrid:F,nodeOrigin:q,onNodeDrag:G,onSelectionDrag:U,onError:Y,updateNodePositions:K}=r();a={x:L,y:H};let O=!1;const W=s.size>1,Z=W&&V?M7(nf(s)):null,Q=W&&F?p9e({dragItems:s,snapGrid:B,x:L,y:H}):null;for(const[ie,te]of s){if(!P.has(ie))continue;let re={x:L-te.distance.x,y:H-te.distance.y};F&&(re=Q?{x:Math.round(re.x+Q.x),y:Math.round(re.y+Q.y)}:W1(re,B));let ue=null;if(W&&V&&!te.extent&&Z){const{positionAbsolute:pe}=te.internals,xe=pe.x-Z.x+V[0][0],je=pe.x+te.measured.width-Z.x2+V[1][0],Be=pe.y-Z.y+V[0][1],Je=pe.y+te.measured.height-Z.y2+V[1][1];ue=[[xe,Be],[je,Je]]}const{position:_e,positionAbsolute:ce}=CF({nodeId:ie,nextPosition:re,nodeLookup:P,nodeExtent:ue||V,nodeOrigin:q,onError:Y});O=O||te.position.x!==_e.x||te.position.y!==_e.y,te.position=_e,te.internals.positionAbsolute=ce}if(v=v||O,!!O&&(K(s,!0),w&&(o||G||!T&&U))){const[ie,te]=H7({nodeId:T,dragItems:s,nodeLookup:P});o?.(w,s,ie,te),G?.(w,ie,te),T||U?.(w,te)}}async function j(){if(!u)return;const{transform:L,panBy:H,autoPanSpeed:P,autoPanOnNodeDrag:V}=r();if(!V){c=!1,cancelAnimationFrame(l);return}const[B,F]=zF(d,u,P);(B!==0||F!==0)&&(a.x=(a.x??0)-B/L[2],a.y=(a.y??0)-F/L[2],await H({x:B,y:F})&&z(a)),l=requestAnimationFrame(j)}function I(L){const{nodeLookup:H,multiSelectionActive:P,nodesDraggable:V,transform:B,snapGrid:F,snapToGrid:q,selectNodesOnDrag:G,onNodeDragStart:U,onSelectionDragStart:Y,unselectNodesAndEdges:K}=r();p=!0,(!G||!R)&&!P&&T&&(H.get(T)?.selected||K()),R&&G&&T&&e?.(T);const O=Y1(L.sourceEvent,{transform:B,snapGrid:F,snapToGrid:q,containerBounds:u});if(a=O,s=u9e(H,V,O,T),s.size>0&&(n||U||!T&&Y)){const[W,Z]=H7({nodeId:T,dragItems:s,nodeLookup:H});n?.(L.sourceEvent,s,W,Z),U?.(L.sourceEvent,W,Z),T||Y?.(L.sourceEvent,Z)}}const N=FL().clickDistance(A).on("start",L=>{const{domNode:H,nodeDragThreshold:P,transform:V,snapGrid:B,snapToGrid:F}=r();u=H?.getBoundingClientRect()||null,m=!1,v=!1,w=L.sourceEvent,P===0&&I(L),a=Y1(L.sourceEvent,{transform:V,snapGrid:B,snapToGrid:F,containerBounds:u}),d=Za(L.sourceEvent,u)}).on("drag",L=>{const{autoPanOnNodeDrag:H,transform:P,snapGrid:V,snapToGrid:B,nodeDragThreshold:F,nodeLookup:q}=r(),G=Y1(L.sourceEvent,{transform:P,snapGrid:V,snapToGrid:B,containerBounds:u});if(w=L.sourceEvent,(L.sourceEvent.type==="touchmove"&&L.sourceEvent.touches.length>1||T&&!q.has(T))&&(m=!0),!m){if(!c&&H&&p&&(c=!0,j()),!p){const U=Za(L.sourceEvent,u),Y=U.x-d.x,K=U.y-d.y;Math.sqrt(Y*Y+K*K)>F&&I(L)}(a.x!==G.xSnapped||a.y!==G.ySnapped)&&s&&p&&(d=Za(L.sourceEvent,u),z(G))}}).on("end",L=>{if(!(!p||m)&&(c=!1,p=!1,cancelAnimationFrame(l),s.size>0)){const{nodeLookup:H,updateNodePositions:P,onNodeDragStop:V,onSelectionDragStop:B}=r();if(v&&(P(s,!1),v=!1),i||V||!T&&B){const[F,q]=H7({nodeId:T,dragItems:s,nodeLookup:H,dragging:!1});i?.(L.sourceEvent,s,F,q),V?.(L.sourceEvent,F,q),T||B?.(L.sourceEvent,q)}}}).filter(L=>{const H=L.target;return!L.button&&(!C||!eV(H,`.${C}`,$))&&(!_||eV(H,_,$))});f.call(N)}function k(){f?.on(".drag",null)}return{update:x,destroy:k}}function f9e(e,r,n){const o=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const a of r.values())U1(i,Ku(a))>0&&o.push(a);return o}const g9e=250;function m9e(e,r,n,o){let i=[],a=1/0;const l=f9e(e,n,r+g9e);for(const s of l){const c=[...s.internals.handleBounds?.source??[],...s.internals.handleBounds?.target??[]];for(const d of c){if(o.nodeId===d.nodeId&&o.type===d.type&&o.id===d.id)continue;const{x:u,y:p}=Zu(s,d,d.position,!0),f=Math.sqrt(Math.pow(u-e.x,2)+Math.pow(p-e.y,2));f>r||(f1){const s=o.type==="source"?"target":"source";return i.find(c=>c.type===s)??i[0]}return i[0]}function tV(e,r,n,o,i,a=!1){const l=o.get(e);if(!l)return null;const s=i==="strict"?l.internals.handleBounds?.[r]:[...l.internals.handleBounds?.source??[],...l.internals.handleBounds?.target??[]],c=(n?s?.find(d=>d.id===n):s?.[0])??null;return c&&a?{...c,...Zu(l,c,c.position,!0)}:c}function rV(e,r){return e||(r?.classList.contains("target")?"target":r?.classList.contains("source")?"source":null)}function y9e(e,r){let n=null;return r?n=!0:e&&!r&&(n=!1),n}const nV=()=>!0;function v9e(e,{connectionMode:r,connectionRadius:n,handleId:o,nodeId:i,edgeUpdaterType:a,isTarget:l,domNode:s,nodeLookup:c,lib:d,autoPanOnConnect:u,flowId:p,panBy:f,cancelConnection:m,onConnectStart:v,onConnect:w,onConnectEnd:x,isValidConnection:k=nV,onReconnectEnd:C,updateConnection:_,getTransform:$,getFromHandle:R,autoPanSpeed:T,dragThreshold:A=1,handleDomNode:z}){const j=MF(e.target);let I=0,N;const{x:L,y:H}=Za(e),P=rV(a,z),V=s?.getBoundingClientRect();let B=!1;if(!V||!P)return;const F=tV(i,P,o,c,r);if(!F)return;let q=Za(e,V),G=!1,U=null,Y=!1,K=null;function O(){if(!u||!V)return;const[ue,_e]=zF(q,V,T);f({x:ue,y:_e}),I=requestAnimationFrame(O)}const W={...F,nodeId:i,type:P,position:F.position},Z=c.get(i);let Q={inProgress:!0,isValid:null,from:Zu(Z,W,Ue.Left,!0),fromHandle:W,fromPosition:W.position,fromNode:Z,to:q,toHandle:null,toPosition:kF[W.position],toNode:null,pointer:q};function ie(){B=!0,_(Q),v?.(e,{nodeId:i,handleId:o,handleType:P})}A===0&&ie();function te(ue){if(!B){const{x:Be,y:Je}=Za(ue),st=Be-L,Le=Je-H;if(!(st*st+Le*Le>A*A))return;ie()}if(!R()||!W){re(ue);return}const _e=$();q=Za(ue,V),N=m9e(G1(q,_e,!1,[1,1]),n,c,W),G||(O(),G=!0);const ce=oV(ue,{handle:N,connectionMode:r,fromNodeId:i,fromHandleId:o,fromType:l?"target":"source",isValidConnection:k,doc:j,lib:d,flowId:p,nodeLookup:c});K=ce.handleDomNode,U=ce.connection,Y=y9e(!!N,ce.isValid);const pe=c.get(i),xe=pe?Zu(pe,W,Ue.Left,!0):Q.from,je={...Q,from:xe,isValid:Y,to:ce.toHandle&&Y?Yx({x:ce.toHandle.x,y:ce.toHandle.y},_e):q,toHandle:ce.toHandle,toPosition:Y&&ce.toHandle?ce.toHandle.position:kF[W.position],toNode:ce.toHandle?c.get(ce.toHandle.nodeId):null,pointer:q};_(je),Q=je}function re(ue){if(!("touches"in ue&&ue.touches.length>0)){if(B){(N||K)&&U&&Y&&w?.(U);const{inProgress:_e,...ce}=Q,pe={...ce,toPosition:Q.toHandle?Q.toPosition:null};x?.(ue,pe),a&&C?.(ue,pe)}m(),cancelAnimationFrame(I),G=!1,Y=!1,U=null,K=null,j.removeEventListener("mousemove",te),j.removeEventListener("mouseup",re),j.removeEventListener("touchmove",te),j.removeEventListener("touchend",re)}}j.addEventListener("mousemove",te),j.addEventListener("mouseup",re),j.addEventListener("touchmove",te),j.addEventListener("touchend",re)}function oV(e,{handle:r,connectionMode:n,fromNodeId:o,fromHandleId:i,fromType:a,doc:l,lib:s,flowId:c,isValidConnection:d=nV,nodeLookup:u}){const p=a==="target",f=r?l.querySelector(`.${s}-flow__handle[data-id="${c}-${r?.nodeId}-${r?.id}-${r?.type}"]`):null,{x:m,y:v}=Za(e),w=l.elementFromPoint(m,v),x=w?.classList.contains(`${s}-flow__handle`)?w:f,k={handleDomNode:x,isValid:!1,connection:null,toHandle:null};if(x){const C=rV(void 0,x),_=x.getAttribute("data-nodeid"),$=x.getAttribute("data-handleid"),R=x.classList.contains("connectable"),T=x.classList.contains("connectableend");if(!_||!C)return k;const A={source:p?_:o,sourceHandle:p?$:i,target:p?o:_,targetHandle:p?i:$};k.connection=A;const z=R&&T&&(n===rf.Strict?p&&C==="source"||!p&&C==="target":_!==o||$!==i);k.isValid=z&&d(A),k.toHandle=tV(_,C,$,u,n,!0)}return k}const U7={onPointerDown:v9e,isValid:oV};function b9e({domNode:e,panZoom:r,getTransform:n,getViewScale:o}){const i=Ei(e);function a({translateExtent:s,width:c,height:d,zoomStep:u=1,pannable:p=!0,zoomable:f=!0,inversePan:m=!1}){const v=_=>{if(_.sourceEvent.type!=="wheel"||!r)return;const $=n(),R=_.sourceEvent.ctrlKey&&lf()?10:1,T=-_.sourceEvent.deltaY*(_.sourceEvent.deltaMode===1?.05:_.sourceEvent.deltaMode?1:.002)*u,A=$[2]*Math.pow(2,T*R);r.scaleTo(A)};let w=[0,0];const x=_=>{(_.sourceEvent.type==="mousedown"||_.sourceEvent.type==="touchstart")&&(w=[_.sourceEvent.clientX??_.sourceEvent.touches[0].clientX,_.sourceEvent.clientY??_.sourceEvent.touches[0].clientY])},k=_=>{const $=n();if(_.sourceEvent.type!=="mousemove"&&_.sourceEvent.type!=="touchmove"||!r)return;const R=[_.sourceEvent.clientX??_.sourceEvent.touches[0].clientX,_.sourceEvent.clientY??_.sourceEvent.touches[0].clientY],T=[R[0]-w[0],R[1]-w[1]];w=R;const A=o()*Math.max($[2],Math.log($[2]))*(m?-1:1),z={x:$[0]-T[0]*A,y:$[1]-T[1]*A},j=[[0,0],[c,d]];r.setViewportConstrained({x:z.x,y:z.y,zoom:$[2]},j,s)},C=vF().on("start",x).on("zoom",p?k:null).on("zoom.wheel",f?v:null);i.call(C,{})}function l(){i.on("zoom",null)}return{update:a,destroy:l,pointer:Ga}}const Qx=e=>({x:e.x,y:e.y,zoom:e.k}),W7=({x:e,y:r,zoom:n})=>qx.translate(e,r).scale(n),cf=(e,r)=>e.target.closest(`.${r}`),iV=(e,r)=>r===2&&Array.isArray(e)&&e.includes(2),x9e=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,G7=(e,r=0,n=x9e,o=()=>{})=>{const i=typeof r=="number"&&r>0;return i||o(),i?e.transition().duration(r).ease(n).on("end",o):e},aV=e=>{const r=e.ctrlKey&&lf()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*r};function w9e({zoomPanValues:e,noWheelClassName:r,d3Selection:n,d3Zoom:o,panOnScrollMode:i,panOnScrollSpeed:a,zoomOnPinch:l,onPanZoomStart:s,onPanZoom:c,onPanZoomEnd:d}){return u=>{if(cf(u,r))return u.ctrlKey&&u.preventDefault(),!1;u.preventDefault(),u.stopImmediatePropagation();const p=n.property("__zoom").k||1;if(u.ctrlKey&&l){const x=Ga(u),k=aV(u),C=p*Math.pow(2,k);o.scaleTo(n,C,x,u);return}const f=u.deltaMode===1?20:1;let m=i===Yu.Vertical?0:u.deltaX*f,v=i===Yu.Horizontal?0:u.deltaY*f;!lf()&&u.shiftKey&&i!==Yu.Vertical&&(m=u.deltaY*f,v=0),o.translateBy(n,-(m/p)*a,-(v/p)*a,{internal:!0});const w=Qx(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(c?.(u,w),e.panScrollTimeout=setTimeout(()=>{d?.(u,w),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,s?.(u,w))}}function k9e({noWheelClassName:e,preventScrolling:r,d3ZoomHandler:n}){return function(o,i){const a=o.type==="wheel",l=!r&&a&&!o.ctrlKey,s=cf(o,e);if(o.ctrlKey&&a&&s&&o.preventDefault(),l||s)return null;o.preventDefault(),n.call(this,o,i)}}function _9e({zoomPanValues:e,onDraggingChange:r,onPanZoomStart:n}){return o=>{if(o.sourceEvent?.internal)return;const i=Qx(o.transform);e.mouseButton=o.sourceEvent?.button||0,e.isZoomingOrPanning=!0,e.prevViewport=i,o.sourceEvent?.type==="mousedown"&&r(!0),n&&n?.(o.sourceEvent,i)}}function S9e({zoomPanValues:e,panOnDrag:r,onPaneContextMenu:n,onTransformChange:o,onPanZoom:i}){return a=>{e.usedRightMouseButton=!!(n&&iV(r,e.mouseButton??0)),a.sourceEvent?.sync||o([a.transform.x,a.transform.y,a.transform.k]),i&&!a.sourceEvent?.internal&&i?.(a.sourceEvent,Qx(a.transform))}}function E9e({zoomPanValues:e,panOnDrag:r,panOnScroll:n,onDraggingChange:o,onPanZoomEnd:i,onPaneContextMenu:a}){return l=>{if(!l.sourceEvent?.internal&&(e.isZoomingOrPanning=!1,a&&iV(r,e.mouseButton??0)&&!e.usedRightMouseButton&&l.sourceEvent&&a(l.sourceEvent),e.usedRightMouseButton=!1,o(!1),i)){const s=Qx(l.transform);e.prevViewport=s,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{i?.(l.sourceEvent,s)},n?150:0)}}}function C9e({zoomActivationKeyPressed:e,zoomOnScroll:r,zoomOnPinch:n,panOnDrag:o,panOnScroll:i,zoomOnDoubleClick:a,userSelectionActive:l,noWheelClassName:s,noPanClassName:c,lib:d,connectionInProgress:u}){return p=>{const f=e||r,m=n&&p.ctrlKey,v=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(cf(p,`${d}-flow__node`)||cf(p,`${d}-flow__edge`)))return!0;if(!o&&!f&&!i&&!a&&!n||l||u&&!v||cf(p,s)&&v||cf(p,c)&&(!v||i&&v&&!e)||!n&&p.ctrlKey&&v)return!1;if(!n&&p.type==="touchstart"&&p.touches?.length>1)return p.preventDefault(),!1;if(!f&&!i&&!m&&v||!o&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(o)&&!o.includes(p.button)&&p.type==="mousedown")return!1;const w=Array.isArray(o)&&o.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||v)&&w}}function $9e({domNode:e,minZoom:r,maxZoom:n,translateExtent:o,viewport:i,onPanZoom:a,onPanZoomStart:l,onPanZoomEnd:s,onDraggingChange:c}){const d={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},u=e.getBoundingClientRect(),p=vF().scaleExtent([r,n]).translateExtent(o),f=Ei(e).call(p);C({x:i.x,y:i.y,zoom:of(i.zoom,r,n)},[[0,0],[u.width,u.height]],o);const m=f.on("wheel.zoom"),v=f.on("dblclick.zoom");p.wheelDelta(aV);function w(N,L){return f?new Promise(H=>{p?.interpolate(L?.interpolate==="linear"?N1:Dx).transform(G7(f,L?.duration,L?.ease,()=>H(!0)),N)}):Promise.resolve(!1)}function x({noWheelClassName:N,noPanClassName:L,onPaneContextMenu:H,userSelectionActive:P,panOnScroll:V,panOnDrag:B,panOnScrollMode:F,panOnScrollSpeed:q,preventScrolling:G,zoomOnPinch:U,zoomOnScroll:Y,zoomOnDoubleClick:K,zoomActivationKeyPressed:O,lib:W,onTransformChange:Z,connectionInProgress:Q,paneClickDistance:ie,selectionOnDrag:te}){P&&!d.isZoomingOrPanning&&k();const re=V&&!O&&!P;p.clickDistance(te?1/0:!Ka(ie)||ie<0?0:ie);const ue=re?w9e({zoomPanValues:d,noWheelClassName:N,d3Selection:f,d3Zoom:p,panOnScrollMode:F,panOnScrollSpeed:q,zoomOnPinch:U,onPanZoomStart:l,onPanZoom:a,onPanZoomEnd:s}):k9e({noWheelClassName:N,preventScrolling:G,d3ZoomHandler:m});if(f.on("wheel.zoom",ue,{passive:!1}),!P){const ce=_9e({zoomPanValues:d,onDraggingChange:c,onPanZoomStart:l});p.on("start",ce);const pe=S9e({zoomPanValues:d,panOnDrag:B,onPaneContextMenu:!!H,onPanZoom:a,onTransformChange:Z});p.on("zoom",pe);const xe=E9e({zoomPanValues:d,panOnDrag:B,panOnScroll:V,onPaneContextMenu:H,onPanZoomEnd:s,onDraggingChange:c});p.on("end",xe)}const _e=C9e({zoomActivationKeyPressed:O,panOnDrag:B,zoomOnScroll:Y,panOnScroll:V,zoomOnDoubleClick:K,zoomOnPinch:U,userSelectionActive:P,noPanClassName:L,noWheelClassName:N,lib:W,connectionInProgress:Q});p.filter(_e),K?f.on("dblclick.zoom",v):f.on("dblclick.zoom",null)}function k(){p.on("zoom",null)}async function C(N,L,H){const P=W7(N),V=p?.constrain()(P,L,H);return V&&await w(V),new Promise(B=>B(V))}async function _(N,L){const H=W7(N);return await w(H,L),new Promise(P=>P(H))}function $(N){if(f){const L=W7(N),H=f.property("__zoom");(H.k!==N.zoom||H.x!==N.x||H.y!==N.y)&&p?.transform(f,L,null,{sync:!0})}}function R(){const N=f?mF(f.node()):{x:0,y:0,k:1};return{x:N.x,y:N.y,zoom:N.k}}function T(N,L){return f?new Promise(H=>{p?.interpolate(L?.interpolate==="linear"?N1:Dx).scaleTo(G7(f,L?.duration,L?.ease,()=>H(!0)),N)}):Promise.resolve(!1)}function A(N,L){return f?new Promise(H=>{p?.interpolate(L?.interpolate==="linear"?N1:Dx).scaleBy(G7(f,L?.duration,L?.ease,()=>H(!0)),N)}):Promise.resolve(!1)}function z(N){p?.scaleExtent(N)}function j(N){p?.translateExtent(N)}function I(N){const L=!Ka(N)||N<0?0:N;p?.clickDistance(L)}return{update:x,destroy:k,setViewport:_,setViewportConstrained:C,getViewport:R,scaleTo:T,scaleBy:A,setScaleExtent:z,setTranslateExtent:j,syncViewport:$,setClickDistance:I}}var df;(function(e){e.Line="line",e.Handle="handle"})(df||(df={}));function R9e({width:e,prevWidth:r,height:n,prevHeight:o,affectsX:i,affectsY:a}){const l=e-r,s=n-o,c=[l>0?1:l<0?-1:0,s>0?1:s<0?-1:0];return l&&i&&(c[0]=c[0]*-1),s&&a&&(c[1]=c[1]*-1),c}function lV(e){const r=e.includes("right")||e.includes("left"),n=e.includes("bottom")||e.includes("top"),o=e.includes("left"),i=e.includes("top");return{isHorizontal:r,isVertical:n,affectsX:o,affectsY:i}}function ad(e,r){return Math.max(0,r-e)}function ld(e,r){return Math.max(0,e-r)}function Jx(e,r,n){return Math.max(0,r-e,e-n)}function sV(e,r){return e?!r:r}function z9e(e,r,n,o,i,a,l,s){let{affectsX:c,affectsY:d}=r;const{isHorizontal:u,isVertical:p}=r,f=u&&p,{xSnapped:m,ySnapped:v}=n,{minWidth:w,maxWidth:x,minHeight:k,maxHeight:C}=o,{x:_,y:$,width:R,height:T,aspectRatio:A}=e;let z=Math.floor(u?m-e.pointerX:0),j=Math.floor(p?v-e.pointerY:0);const I=R+(c?-z:z),N=T+(d?-j:j),L=-a[0]*R,H=-a[1]*T;let P=Jx(I,w,x),V=Jx(N,k,C);if(l){let q=0,G=0;c&&z<0?q=ad(_+z+L,l[0][0]):!c&&z>0&&(q=ld(_+I+L,l[1][0])),d&&j<0?G=ad($+j+H,l[0][1]):!d&&j>0&&(G=ld($+N+H,l[1][1])),P=Math.max(P,q),V=Math.max(V,G)}if(s){let q=0,G=0;c&&z>0?q=ld(_+z,s[0][0]):!c&&z<0&&(q=ad(_+I,s[1][0])),d&&j>0?G=ld($+j,s[0][1]):!d&&j<0&&(G=ad($+N,s[1][1])),P=Math.max(P,q),V=Math.max(V,G)}if(i){if(u){const q=Jx(I/A,k,C)*A;if(P=Math.max(P,q),l){let G=0;!c&&!d||c&&!d&&f?G=ld($+H+I/A,l[1][1])*A:G=ad($+H+(c?z:-z)/A,l[0][1])*A,P=Math.max(P,G)}if(s){let G=0;!c&&!d||c&&!d&&f?G=ad($+I/A,s[1][1])*A:G=ld($+(c?z:-z)/A,s[0][1])*A,P=Math.max(P,G)}}if(p){const q=Jx(N*A,w,x)/A;if(V=Math.max(V,q),l){let G=0;!c&&!d||d&&!c&&f?G=ld(_+N*A+L,l[1][0])/A:G=ad(_+(d?j:-j)*A+L,l[0][0])/A,V=Math.max(V,G)}if(s){let G=0;!c&&!d||d&&!c&&f?G=ad(_+N*A,s[1][0])/A:G=ld(_+(d?j:-j)*A,s[0][0])/A,V=Math.max(V,G)}}}j=j+(j<0?V:-V),z=z+(z<0?P:-P),i&&(f?I>N*A?j=(sV(c,d)?-z:z)/A:z=(sV(c,d)?-j:j)*A:u?(j=z/A,d=c):(z=j*A,c=d));const B=c?_+z:_,F=d?$+j:$;return{width:R+(c?-z:z),height:T+(d?-j:j),x:a[0]*z*(c?-1:1)+B,y:a[1]*j*(d?-1:1)+F}}const cV={width:0,height:0,x:0,y:0},T9e={...cV,pointerX:0,pointerY:0,aspectRatio:1};function j9e(e){return[[0,0],[e.measured.width,e.measured.height]]}function A9e(e,r,n){const o=r.position.x+e.position.x,i=r.position.y+e.position.y,a=e.measured.width??0,l=e.measured.height??0,s=n[0]*a,c=n[1]*l;return[[o-s,i-c],[o+a-s,i+l-c]]}function D9e({domNode:e,nodeId:r,getStoreItems:n,onChange:o,onEnd:i}){const a=Ei(e);let l={controlDirection:lV("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function s({controlPosition:d,boundaries:u,keepAspectRatio:p,resizeDirection:f,onResizeStart:m,onResize:v,onResizeEnd:w,shouldResize:x}){let k={...cV},C={...T9e};l={boundaries:u,resizeDirection:f,keepAspectRatio:p,controlDirection:lV(d)};let _,$=null,R=[],T,A,z,j=!1;const I=FL().on("start",N=>{const{nodeLookup:L,transform:H,snapGrid:P,snapToGrid:V,nodeOrigin:B,paneDomNode:F}=n();if(_=L.get(r),!_)return;$=F?.getBoundingClientRect()??null;const{xSnapped:q,ySnapped:G}=Y1(N.sourceEvent,{transform:H,snapGrid:P,snapToGrid:V,containerBounds:$});k={width:_.measured.width??0,height:_.measured.height??0,x:_.position.x??0,y:_.position.y??0},C={...k,pointerX:q,pointerY:G,aspectRatio:k.width/k.height},T=void 0,_.parentId&&(_.extent==="parent"||_.expandParent)&&(T=L.get(_.parentId),A=T&&_.extent==="parent"?j9e(T):void 0),R=[],z=void 0;for(const[U,Y]of L)if(Y.parentId===r&&(R.push({id:U,position:{...Y.position},extent:Y.extent}),Y.extent==="parent"||Y.expandParent)){const K=A9e(Y,_,Y.origin??B);z?z=[[Math.min(K[0][0],z[0][0]),Math.min(K[0][1],z[0][1])],[Math.max(K[1][0],z[1][0]),Math.max(K[1][1],z[1][1])]]:z=K}m?.(N,{...k})}).on("drag",N=>{const{transform:L,snapGrid:H,snapToGrid:P,nodeOrigin:V}=n(),B=Y1(N.sourceEvent,{transform:L,snapGrid:H,snapToGrid:P,containerBounds:$}),F=[];if(!_)return;const{x:q,y:G,width:U,height:Y}=k,K={},O=_.origin??V,{width:W,height:Z,x:Q,y:ie}=z9e(C,l.controlDirection,B,l.boundaries,l.keepAspectRatio,O,A,z),te=W!==U,re=Z!==Y,ue=Q!==q&&te,_e=ie!==G&&re;if(!ue&&!_e&&!te&&!re)return;if((ue||_e||O[0]===1||O[1]===1)&&(K.x=ue?Q:k.x,K.y=_e?ie:k.y,k.x=K.x,k.y=K.y,R.length>0)){const xe=Q-q,je=ie-G;for(const Be of R)Be.position={x:Be.position.x-xe+O[0]*(W-U),y:Be.position.y-je+O[1]*(Z-Y)},F.push(Be)}if((te||re)&&(K.width=te&&(!l.resizeDirection||l.resizeDirection==="horizontal")?W:k.width,K.height=re&&(!l.resizeDirection||l.resizeDirection==="vertical")?Z:k.height,k.width=K.width,k.height=K.height),T&&_.expandParent){const xe=O[0]*(K.width??0);K.x&&K.x{j&&(w?.(N,{...k}),i?.({...k}),j=!1)});a.call(I)}function c(){a.on(".drag",null)}return{update:s,destroy:c}}function Y7(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var dV={exports:{}},X7={},uV={exports:{}},K7={},pV;function P9e(){if(pV)return K7;pV=1;var e=Zr;function r(p,f){return p===f&&(p!==0||1/p===1/f)||p!==p&&f!==f}var n=typeof Object.is=="function"?Object.is:r,o=e.useState,i=e.useEffect,a=e.useLayoutEffect,l=e.useDebugValue;function s(p,f){var m=f(),v=o({inst:{value:m,getSnapshot:f}}),w=v[0].inst,x=v[1];return a(function(){w.value=m,w.getSnapshot=f,c(w)&&x({inst:w})},[p,m,f]),i(function(){return c(w)&&x({inst:w}),p(function(){c(w)&&x({inst:w})})},[p]),l(m),m}function c(p){var f=p.getSnapshot;p=p.value;try{var m=f();return!n(p,m)}catch{return!0}}function d(p,f){return f()}var u=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:s;return K7.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:u,K7}var hV;function fV(){return hV||(hV=1,uV.exports=P9e()),uV.exports}var gV;function M9e(){if(gV)return X7;gV=1;var e=Zr,r=fV();function n(d,u){return d===u&&(d!==0||1/d===1/u)||d!==d&&u!==u}var o=typeof Object.is=="function"?Object.is:n,i=r.useSyncExternalStore,a=e.useRef,l=e.useEffect,s=e.useMemo,c=e.useDebugValue;return X7.useSyncExternalStoreWithSelector=function(d,u,p,f,m){var v=a(null);if(v.current===null){var w={hasValue:!1,value:null};v.current=w}else w=v.current;v=s(function(){function k(T){if(!C){if(C=!0,_=T,T=f(T),m!==void 0&&w.hasValue){var A=w.value;if(m(A,T))return $=A}return $=T}if(A=$,o(_,T))return A;var z=f(T);return m!==void 0&&m(A,z)?(_=T,A):(_=T,$=z)}var C=!1,_,$,R=p===void 0?null:p;return[function(){return k(u())},R===null?void 0:function(){return k(R())}]},[u,p,f,m]);var x=i(d,v[0],v[1]);return l(function(){w.hasValue=!0,w.value=x},[x]),c(x),x},X7}var mV;function N9e(){return mV||(mV=1,dV.exports=M9e()),dV.exports}var yV=N9e();const B9e=Y7(yV),I9e={},vV=e=>{let r;const n=new Set,o=(s,c)=>{const d=typeof s=="function"?s(r):s;if(!Object.is(d,r)){const u=r;r=c??(typeof d!="object"||d===null)?d:Object.assign({},r,d),n.forEach(p=>p(r,u))}},i=()=>r,a={setState:o,getState:i,getInitialState:()=>l,subscribe:s=>(n.add(s),()=>n.delete(s)),destroy:()=>{(I9e?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},l=r=e(o,i,a);return a},O9e=e=>e?vV(e):vV,{useDebugValue:L9e}=Zr,{useSyncExternalStoreWithSelector:F9e}=B9e,V9e=e=>e;function bV(e,r=V9e,n){const o=F9e(e.subscribe,e.getState,e.getServerState||e.getInitialState,r,n);return L9e(o),o}const xV=(e,r)=>{const n=O9e(e),o=(i,a=r)=>bV(n,i,a);return Object.assign(o,n),o},q9e=(e,r)=>e?xV(e,r):xV;function jr(e,r){if(Object.is(e,r))return!0;if(typeof e!="object"||e===null||typeof r!="object"||r===null)return!1;if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(const[o,i]of e)if(!Object.is(i,r.get(o)))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(const o of e)if(!r.has(o))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(r).length)return!1;for(const o of n)if(!Object.prototype.hasOwnProperty.call(r,o)||!Object.is(e[o],r[o]))return!1;return!0}const ew=S.createContext(null),H9e=ew.Provider,wV=Gl.error001();function Dt(e,r){const n=S.useContext(ew);if(n===null)throw new Error(wV);return bV(n,e,r)}function vr(){const e=S.useContext(ew);if(e===null)throw new Error(wV);return S.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const kV={display:"none"},U9e={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},_V="react-flow__node-desc",SV="react-flow__edge-desc",W9e="react-flow__aria-live",G9e=e=>e.ariaLiveMessage,Y9e=e=>e.ariaLabelConfig;function X9e({rfId:e}){const r=Dt(G9e);return y.jsx("div",{id:`${W9e}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:U9e,children:r})}function K9e({rfId:e,disableKeyboardA11y:r}){const n=Dt(Y9e);return y.jsxs(y.Fragment,{children:[y.jsx("div",{id:`${_V}-${e}`,style:kV,children:r?n["node.a11yDescription.default"]:n["node.a11yDescription.keyboardDisabled"]}),y.jsx("div",{id:`${SV}-${e}`,style:kV,children:n["edge.a11yDescription.default"]}),!r&&y.jsx(X9e,{rfId:e})]})}const sd=S.forwardRef(({position:e="top-left",children:r,className:n,style:o,...i},a)=>{const l=`${e}`.split("-");return y.jsx("div",{className:dn(["react-flow__panel",n,...l]),style:o,ref:a,...i,children:r})});sd.displayName="Panel";function Z9e({proOptions:e,position:r="bottom-right"}){return e?.hideAttribution?null:y.jsx(sd,{position:r,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:y.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const Q9e=e=>{const r=[],n=[];for(const[,o]of e.nodeLookup)o.selected&&r.push(o.internals.userNode);for(const[,o]of e.edgeLookup)o.selected&&n.push(o);return{selectedNodes:r,selectedEdges:n}},tw=e=>e.id;function J9e(e,r){return jr(e.selectedNodes.map(tw),r.selectedNodes.map(tw))&&jr(e.selectedEdges.map(tw),r.selectedEdges.map(tw))}function eSe({onSelectionChange:e}){const r=vr(),{selectedNodes:n,selectedEdges:o}=Dt(Q9e,J9e);return S.useEffect(()=>{const i={nodes:n,edges:o};e?.(i),r.getState().onSelectionChangeHandlers.forEach(a=>a(i))},[n,o,e]),null}const tSe=e=>!!e.onSelectionChangeHandlers;function rSe({onSelectionChange:e}){const r=Dt(tSe);return e||r?y.jsx(eSe,{onSelectionChange:e}):null}const EV=[0,0],nSe={x:0,y:0,zoom:1},oSe=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],CV=[...oSe,"rfId"],iSe=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),$V={translateExtent:V1,nodeOrigin:EV,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function aSe(e){const{setNodes:r,setEdges:n,setMinZoom:o,setMaxZoom:i,setTranslateExtent:a,setNodeExtent:l,reset:s,setDefaultNodesAndEdges:c}=Dt(iSe,jr),d=vr();S.useEffect(()=>(c(e.defaultNodes,e.defaultEdges),()=>{u.current=$V,s()}),[]);const u=S.useRef($V);return S.useEffect(()=>{for(const p of CV){const f=e[p],m=u.current[p];f!==m&&(typeof e[p]>"u"||(p==="nodes"?r(f):p==="edges"?n(f):p==="minZoom"?o(f):p==="maxZoom"?i(f):p==="translateExtent"?a(f):p==="nodeExtent"?l(f):p==="ariaLabelConfig"?d.setState({ariaLabelConfig:U7e(f)}):p==="fitView"?d.setState({fitViewQueued:f}):p==="fitViewOptions"?d.setState({fitViewOptions:f}):d.setState({[p]:f})))}u.current=e},CV.map(p=>e[p])),null}function RV(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function lSe(e){const[r,n]=S.useState(e==="system"?null:e);return S.useEffect(()=>{if(e!=="system"){n(e);return}const o=RV(),i=()=>n(o?.matches?"dark":"light");return i(),o?.addEventListener("change",i),()=>{o?.removeEventListener("change",i)}},[e]),r!==null?r:RV()?.matches?"dark":"light"}const zV=typeof document<"u"?document:null;function X1(e=null,r={target:zV,actInsideInputWithModifier:!0}){const[n,o]=S.useState(!1),i=S.useRef(!1),a=S.useRef(new Set([])),[l,s]=S.useMemo(()=>{if(e!==null){const c=(Array.isArray(e)?e:[e]).filter(u=>typeof u=="string").map(u=>u.replace("+",` -`).replace(` - -`,` -+`).split(` -`)),d=c.reduce((u,p)=>u.concat(...p),[]);return[c,d]}return[[],[]]},[e]);return S.useEffect(()=>{const c=r?.target??zV,d=r?.actInsideInputWithModifier??!0;if(e!==null){const u=m=>{if(i.current=m.ctrlKey||m.metaKey||m.shiftKey||m.altKey,(!i.current||i.current&&!d)&&NF(m))return!1;const v=jV(m.code,s);if(a.current.add(m[v]),TV(l,a.current,!1)){const w=m.composedPath?.()?.[0]||m.target,x=w?.nodeName==="BUTTON"||w?.nodeName==="A";r.preventDefault!==!1&&(i.current||!x)&&m.preventDefault(),o(!0)}},p=m=>{const v=jV(m.code,s);TV(l,a.current,!0)?(o(!1),a.current.clear()):a.current.delete(m[v]),m.key==="Meta"&&a.current.clear(),i.current=!1},f=()=>{a.current.clear(),o(!1)};return c?.addEventListener("keydown",u),c?.addEventListener("keyup",p),window.addEventListener("blur",f),window.addEventListener("contextmenu",f),()=>{c?.removeEventListener("keydown",u),c?.removeEventListener("keyup",p),window.removeEventListener("blur",f),window.removeEventListener("contextmenu",f)}}},[e,o]),n}function TV(e,r,n){return e.filter(o=>n||o.length===r.size).some(o=>o.every(i=>r.has(i)))}function jV(e,r){return r.includes(e)?"code":"key"}const sSe=()=>{const e=vr();return S.useMemo(()=>({zoomIn:r=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,{duration:r?.duration}):Promise.resolve(!1)},zoomOut:r=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,{duration:r?.duration}):Promise.resolve(!1)},zoomTo:(r,n)=>{const{panZoom:o}=e.getState();return o?o.scaleTo(r,{duration:n?.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(r,n)=>{const{transform:[o,i,a],panZoom:l}=e.getState();return l?(await l.setViewport({x:r.x??o,y:r.y??i,zoom:r.zoom??a},n),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[r,n,o]=e.getState().transform;return{x:r,y:n,zoom:o}},setCenter:async(r,n,o)=>e.getState().setCenter(r,n,o),fitBounds:async(r,n)=>{const{width:o,height:i,minZoom:a,maxZoom:l,panZoom:s}=e.getState(),c=Ws(r,o,i,a,l,n?.padding??.1);return s?(await s.setViewport(c,{duration:n?.duration,ease:n?.ease,interpolate:n?.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(r,n={})=>{const{transform:o,snapGrid:i,snapToGrid:a,domNode:l}=e.getState();if(!l)return r;const{x:s,y:c}=l.getBoundingClientRect(),d={x:r.x-s,y:r.y-c},u=n.snapGrid??i,p=n.snapToGrid??a;return G1(d,o,p,u)},flowToScreenPosition:r=>{const{transform:n,domNode:o}=e.getState();if(!o)return r;const{x:i,y:a}=o.getBoundingClientRect(),l=Yx(r,n);return{x:l.x+i,y:l.y+a}}}),[])};function AV(e,r){const n=[],o=new Map,i=[];for(const a of e)if(a.type==="add"){i.push(a);continue}else if(a.type==="remove"||a.type==="replace")o.set(a.id,[a]);else{const l=o.get(a.id);l?l.push(a):o.set(a.id,[a])}for(const a of r){const l=o.get(a.id);if(!l){n.push(a);continue}if(l[0].type==="remove")continue;if(l[0].type==="replace"){n.push({...l[0].item});continue}const s={...a};for(const c of l)cSe(c,s);n.push(s)}return i.length&&i.forEach(a=>{a.index!==void 0?n.splice(a.index,0,{...a.item}):n.push({...a.item})}),n}function cSe(e,r){switch(e.type){case"select":{r.selected=e.selected;break}case"position":{typeof e.position<"u"&&(r.position=e.position),typeof e.dragging<"u"&&(r.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(r.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(r.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(r.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(r.resizing=e.resizing);break}}}function rw(e,r){return AV(e,r)}function nw(e,r){return AV(e,r)}function Qu(e,r){return{id:e,type:"select",selected:r}}function uf(e,r=new Set,n=!1){const o=[];for(const[i,a]of e){const l=r.has(i);!(a.selected===void 0&&!l)&&a.selected!==l&&(n&&(a.selected=l),o.push(Qu(a.id,l)))}return o}function DV({items:e=[],lookup:r}){const n=[],o=new Map(e.map(i=>[i.id,i]));for(const[i,a]of e.entries()){const l=r.get(a.id),s=l?.internals?.userNode??l;s!==void 0&&s!==a&&n.push({id:a.id,item:a,type:"replace"}),s===void 0&&n.push({item:a,type:"add",index:i})}for(const[i]of r)o.get(i)===void 0&&n.push({id:i,type:"remove"});return n}function PV(e){return{id:e.id,type:"remove"}}const MV=e=>N7e(e),dSe=e=>SF(e);function NV(e){return S.forwardRef(e)}const uSe=typeof window<"u"?S.useLayoutEffect:S.useEffect;function BV(e){const[r,n]=S.useState(BigInt(0)),[o]=S.useState(()=>pSe(()=>n(i=>i+BigInt(1))));return uSe(()=>{const i=o.get();i.length&&(e(i),o.reset())},[r]),o}function pSe(e){let r=[];return{get:()=>r,reset:()=>{r=[]},push:n=>{r.push(n),e()}}}const IV=S.createContext(null);function hSe({children:e}){const r=vr(),n=S.useCallback(s=>{const{nodes:c=[],setNodes:d,hasDefaultNodes:u,onNodesChange:p,nodeLookup:f,fitViewQueued:m,onNodesChangeMiddlewareMap:v}=r.getState();let w=c;for(const k of s)w=typeof k=="function"?k(w):k;let x=DV({items:w,lookup:f});for(const k of v.values())x=k(x);u&&d(w),x.length>0?p?.(x):m&&window.requestAnimationFrame(()=>{const{fitViewQueued:k,nodes:C,setNodes:_}=r.getState();k&&_(C)})},[]),o=BV(n),i=S.useCallback(s=>{const{edges:c=[],setEdges:d,hasDefaultEdges:u,onEdgesChange:p,edgeLookup:f}=r.getState();let m=c;for(const v of s)m=typeof v=="function"?v(m):v;u?d(m):p&&p(DV({items:m,lookup:f}))},[]),a=BV(i),l=S.useMemo(()=>({nodeQueue:o,edgeQueue:a}),[]);return y.jsx(IV.Provider,{value:l,children:e})}function fSe(){const e=S.useContext(IV);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const gSe=e=>!!e.panZoom;function pf(){const e=sSe(),r=vr(),n=fSe(),o=Dt(gSe),i=S.useMemo(()=>{const a=p=>r.getState().nodeLookup.get(p),l=p=>{n.nodeQueue.push(p)},s=p=>{n.edgeQueue.push(p)},c=p=>{const{nodeLookup:f,nodeOrigin:m}=r.getState(),v=MV(p)?p:f.get(p.id),w=v.parentId?DF(v.position,v.measured,v.parentId,f,m):v.position,x={...v,position:w,width:v.measured?.width??v.width,height:v.measured?.height??v.height};return Ku(x)},d=(p,f,m={replace:!1})=>{l(v=>v.map(w=>{if(w.id===p){const x=typeof f=="function"?f(w):f;return m.replace&&MV(x)?x:{...w,...x}}return w}))},u=(p,f,m={replace:!1})=>{s(v=>v.map(w=>{if(w.id===p){const x=typeof f=="function"?f(w):f;return m.replace&&dSe(x)?x:{...w,...x}}return w}))};return{getNodes:()=>r.getState().nodes.map(p=>({...p})),getNode:p=>a(p)?.internals.userNode,getInternalNode:a,getEdges:()=>{const{edges:p=[]}=r.getState();return p.map(f=>({...f}))},getEdge:p=>r.getState().edgeLookup.get(p),setNodes:l,setEdges:s,addNodes:p=>{const f=Array.isArray(p)?p:[p];n.nodeQueue.push(m=>[...m,...f])},addEdges:p=>{const f=Array.isArray(p)?p:[p];n.edgeQueue.push(m=>[...m,...f])},toObject:()=>{const{nodes:p=[],edges:f=[],transform:m}=r.getState(),[v,w,x]=m;return{nodes:p.map(k=>({...k})),edges:f.map(k=>({...k})),viewport:{x:v,y:w,zoom:x}}},deleteElements:async({nodes:p=[],edges:f=[]})=>{const{nodes:m,edges:v,onNodesDelete:w,onEdgesDelete:x,triggerNodeChanges:k,triggerEdgeChanges:C,onDelete:_,onBeforeDelete:$}=r.getState(),{nodes:R,edges:T}=await L7e({nodesToRemove:p,edgesToRemove:f,nodes:m,edges:v,onBeforeDelete:$}),A=T.length>0,z=R.length>0;if(A){const j=T.map(PV);x?.(T),C(j)}if(z){const j=R.map(PV);w?.(R),k(j)}return(z||A)&&_?.({nodes:R,edges:T}),{deletedNodes:R,deletedEdges:T}},getIntersectingNodes:(p,f=!0,m)=>{const v=jF(p),w=v?p:c(p),x=m!==void 0;return w?(m||r.getState().nodes).filter(k=>{const C=r.getState().nodeLookup.get(k.id);if(C&&!v&&(k.id===p.id||!C.internals.positionAbsolute))return!1;const _=Ku(x?k:C),$=U1(_,w);return f&&$>0||$>=_.width*_.height||$>=w.width*w.height}):[]},isNodeIntersecting:(p,f,m=!0)=>{const v=jF(p)?p:c(p);if(!v)return!1;const w=U1(v,f);return m&&w>0||w>=f.width*f.height||w>=v.width*v.height},updateNode:d,updateNodeData:(p,f,m={replace:!1})=>{d(p,v=>{const w=typeof f=="function"?f(v):f;return m.replace?{...v,data:w}:{...v,data:{...v.data,...w}}},m)},updateEdge:u,updateEdgeData:(p,f,m={replace:!1})=>{u(p,v=>{const w=typeof f=="function"?f(v):f;return m.replace?{...v,data:w}:{...v,data:{...v.data,...w}}},m)},getNodesBounds:p=>{const{nodeLookup:f,nodeOrigin:m}=r.getState();return EF(p,{nodeLookup:f,nodeOrigin:m})},getHandleConnections:({type:p,id:f,nodeId:m})=>Array.from(r.getState().connectionLookup.get(`${m}-${p}${f?`-${f}`:""}`)?.values()??[]),getNodeConnections:({type:p,handleId:f,nodeId:m})=>Array.from(r.getState().connectionLookup.get(`${m}${p?f?`-${p}-${f}`:`-${p}`:""}`)?.values()??[]),fitView:async p=>{const f=r.getState().fitViewResolver??H7e();return r.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:f}),n.nodeQueue.push(m=>[...m]),f.promise}}},[]);return S.useMemo(()=>({...i,...e,viewportInitialized:o}),[o])}const OV=e=>e.selected,mSe=typeof window<"u"?window:void 0;function ySe({deleteKeyCode:e,multiSelectionKeyCode:r}){const n=vr(),{deleteElements:o}=pf(),i=X1(e,{actInsideInputWithModifier:!1}),a=X1(r,{target:mSe});S.useEffect(()=>{if(i){const{edges:l,nodes:s}=n.getState();o({nodes:s.filter(OV),edges:l.filter(OV)}),n.setState({nodesSelectionActive:!1})}},[i]),S.useEffect(()=>{n.setState({multiSelectionActive:a})},[a])}function vSe(e){const r=vr();S.useEffect(()=>{const n=()=>{if(!e.current||!(e.current.checkVisibility?.()??!0))return!1;const o=N7(e.current);(o.height===0||o.width===0)&&r.getState().onError?.("004",Gl.error004()),r.setState({width:o.width||500,height:o.height||500})};if(e.current){n(),window.addEventListener("resize",n);const o=new ResizeObserver(()=>n());return o.observe(e.current),()=>{window.removeEventListener("resize",n),o&&e.current&&o.unobserve(e.current)}}},[])}const ow={position:"absolute",width:"100%",height:"100%",top:0,left:0},bSe=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function xSe({onPaneContextMenu:e,zoomOnScroll:r=!0,zoomOnPinch:n=!0,panOnScroll:o=!1,panOnScrollSpeed:i=.5,panOnScrollMode:a=Yu.Free,zoomOnDoubleClick:l=!0,panOnDrag:s=!0,defaultViewport:c,translateExtent:d,minZoom:u,maxZoom:p,zoomActivationKeyCode:f,preventScrolling:m=!0,children:v,noWheelClassName:w,noPanClassName:x,onViewportChange:k,isControlledViewport:C,paneClickDistance:_,selectionOnDrag:$}){const R=vr(),T=S.useRef(null),{userSelectionActive:A,lib:z,connectionInProgress:j}=Dt(bSe,jr),I=X1(f),N=S.useRef();vSe(T);const L=S.useCallback(H=>{k?.({x:H[0],y:H[1],zoom:H[2]}),C||R.setState({transform:H})},[k,C]);return S.useEffect(()=>{if(T.current){N.current=$9e({domNode:T.current,minZoom:u,maxZoom:p,translateExtent:d,viewport:c,onDraggingChange:B=>R.setState({paneDragging:B}),onPanZoomStart:(B,F)=>{const{onViewportChangeStart:q,onMoveStart:G}=R.getState();G?.(B,F),q?.(F)},onPanZoom:(B,F)=>{const{onViewportChange:q,onMove:G}=R.getState();G?.(B,F),q?.(F)},onPanZoomEnd:(B,F)=>{const{onViewportChangeEnd:q,onMoveEnd:G}=R.getState();G?.(B,F),q?.(F)}});const{x:H,y:P,zoom:V}=N.current.getViewport();return R.setState({panZoom:N.current,transform:[H,P,V],domNode:T.current.closest(".react-flow")}),()=>{N.current?.destroy()}}},[]),S.useEffect(()=>{N.current?.update({onPaneContextMenu:e,zoomOnScroll:r,zoomOnPinch:n,panOnScroll:o,panOnScrollSpeed:i,panOnScrollMode:a,zoomOnDoubleClick:l,panOnDrag:s,zoomActivationKeyPressed:I,preventScrolling:m,noPanClassName:x,userSelectionActive:A,noWheelClassName:w,lib:z,onTransformChange:L,connectionInProgress:j,selectionOnDrag:$,paneClickDistance:_})},[e,r,n,o,i,a,l,s,I,m,x,A,w,z,L,j,$,_]),y.jsx("div",{className:"react-flow__renderer",ref:T,style:ow,children:v})}const wSe=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function kSe(){const{userSelectionActive:e,userSelectionRect:r}=Dt(wSe,jr);return e&&r?y.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:r.width,height:r.height,transform:`translate(${r.x}px, ${r.y}px)`}}):null}const Z7=(e,r)=>n=>{n.target===r.current&&e?.(n)},_Se=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function SSe({isSelecting:e,selectionKeyPressed:r,selectionMode:n=q1.Full,panOnDrag:o,paneClickDistance:i,selectionOnDrag:a,onSelectionStart:l,onSelectionEnd:s,onPaneClick:c,onPaneContextMenu:d,onPaneScroll:u,onPaneMouseEnter:p,onPaneMouseMove:f,onPaneMouseLeave:m,children:v}){const w=vr(),{userSelectionActive:x,elementsSelectable:k,dragging:C,connectionInProgress:_}=Dt(_Se,jr),$=k&&(e||x),R=S.useRef(null),T=S.useRef(),A=S.useRef(new Set),z=S.useRef(new Set),j=S.useRef(!1),I=q=>{if(j.current||_){j.current=!1;return}c?.(q),w.getState().resetSelectedElements(),w.setState({nodesSelectionActive:!1})},N=q=>{if(Array.isArray(o)&&o?.includes(2)){q.preventDefault();return}d?.(q)},L=u?q=>u(q):void 0,H=q=>{j.current&&(q.stopPropagation(),j.current=!1)},P=q=>{const{domNode:G}=w.getState();if(T.current=G?.getBoundingClientRect(),!T.current)return;const U=q.target===R.current;if(!U&&q.target.closest(".nokey")||!e||!(a&&U||r)||q.button!==0||!q.isPrimary)return;q.target?.setPointerCapture?.(q.pointerId),j.current=!1;const{x:Y,y:K}=Za(q.nativeEvent,T.current);w.setState({userSelectionRect:{width:0,height:0,startX:Y,startY:K,x:Y,y:K}}),U||(q.stopPropagation(),q.preventDefault())},V=q=>{const{userSelectionRect:G,transform:U,nodeLookup:Y,edgeLookup:K,connectionLookup:O,triggerNodeChanges:W,triggerEdgeChanges:Z,defaultEdgeOptions:Q,resetSelectedElements:ie}=w.getState();if(!T.current||!G)return;const{x:te,y:re}=Za(q.nativeEvent,T.current),{startX:ue,startY:_e}=G;if(!j.current){const Be=r?0:i;if(Math.hypot(te-ue,re-_e)<=Be)return;ie(),l?.(q)}j.current=!0;const ce={startX:ue,startY:_e,x:teBe.id)),z.current=new Set;const je=Q?.selectable??!0;for(const Be of A.current){const Je=O.get(Be);if(Je)for(const{edgeId:st}of Je.values()){const Le=K.get(st);Le&&(Le.selectable??je)&&z.current.add(st)}}if(!PF(pe,A.current)){const Be=uf(Y,A.current,!0);W(Be)}if(!PF(xe,z.current)){const Be=uf(K,z.current);Z(Be)}w.setState({userSelectionRect:ce,userSelectionActive:!0,nodesSelectionActive:!1})},B=q=>{q.button===0&&(q.target?.releasePointerCapture?.(q.pointerId),!x&&q.target===R.current&&w.getState().userSelectionRect&&I?.(q),w.setState({userSelectionActive:!1,userSelectionRect:null}),j.current&&(s?.(q),w.setState({nodesSelectionActive:A.current.size>0})))},F=o===!0||Array.isArray(o)&&o.includes(0);return y.jsxs("div",{className:dn(["react-flow__pane",{draggable:F,dragging:C,selection:e}]),onClick:$?void 0:Z7(I,R),onContextMenu:Z7(N,R),onWheel:Z7(L,R),onPointerEnter:$?void 0:p,onPointerMove:$?V:f,onPointerUp:$?B:void 0,onPointerDownCapture:$?P:void 0,onClickCapture:$?H:void 0,onPointerLeave:m,ref:R,style:ow,children:[v,y.jsx(kSe,{})]})}function Q7({id:e,store:r,unselect:n=!1,nodeRef:o}){const{addSelectedNodes:i,unselectNodesAndEdges:a,multiSelectionActive:l,nodeLookup:s,onError:c}=r.getState(),d=s.get(e);if(!d){c?.("012",Gl.error012(e));return}r.setState({nodesSelectionActive:!1}),d.selected?(n||d.selected&&l)&&(a({nodes:[d],edges:[]}),requestAnimationFrame(()=>o?.current?.blur())):i([e])}function LV({nodeRef:e,disabled:r=!1,noDragClassName:n,handleSelector:o,nodeId:i,isSelectable:a,nodeClickDistance:l}){const s=vr(),[c,d]=S.useState(!1),u=S.useRef();return S.useEffect(()=>{u.current=h9e({getStoreItems:()=>s.getState(),onNodeMouseDown:p=>{Q7({id:p,store:s,nodeRef:e})},onDragStart:()=>{d(!0)},onDragStop:()=>{d(!1)}})},[]),S.useEffect(()=>{if(r)u.current?.destroy();else if(e.current)return u.current?.update({noDragClassName:n,handleSelector:o,domNode:e.current,isSelectable:a,nodeId:i,nodeClickDistance:l}),()=>{u.current?.destroy()}},[n,o,r,a,e,i]),c}const ESe=e=>r=>r.selected&&(r.draggable||e&&typeof r.draggable>"u");function FV(){const e=vr();return S.useCallback(r=>{const{nodeExtent:n,snapToGrid:o,snapGrid:i,nodesDraggable:a,onError:l,updateNodePositions:s,nodeLookup:c,nodeOrigin:d}=e.getState(),u=new Map,p=ESe(a),f=o?i[0]:5,m=o?i[1]:5,v=r.direction.x*f*r.factor,w=r.direction.y*m*r.factor;for(const[,x]of c){if(!p(x))continue;let k={x:x.internals.positionAbsolute.x+v,y:x.internals.positionAbsolute.y+w};o&&(k=W1(k,i));const{position:C,positionAbsolute:_}=CF({nodeId:x.id,nextPosition:k,nodeLookup:c,nodeExtent:n,nodeOrigin:d,onError:l});x.position=C,x.internals.positionAbsolute=_,u.set(x.id,x)}s(u)},[])}const J7=S.createContext(null),CSe=J7.Provider;J7.Consumer;const e9=()=>S.useContext(J7),$Se=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),RSe=(e,r,n)=>o=>{const{connectionClickStartHandle:i,connectionMode:a,connection:l}=o,{fromHandle:s,toHandle:c,isValid:d}=l,u=c?.nodeId===e&&c?.id===r&&c?.type===n;return{connectingFrom:s?.nodeId===e&&s?.id===r&&s?.type===n,connectingTo:u,clickConnecting:i?.nodeId===e&&i?.id===r&&i?.type===n,isPossibleEndHandle:a===rf.Strict?s?.type!==n:e!==s?.nodeId||r!==s?.id,connectionInProcess:!!s,clickConnectionInProcess:!!i,valid:u&&d}};function zSe({type:e="source",position:r=Ue.Top,isValidConnection:n,isConnectable:o=!0,isConnectableStart:i=!0,isConnectableEnd:a=!0,id:l,onConnect:s,children:c,className:d,onMouseDown:u,onTouchStart:p,...f},m){const v=l||null,w=e==="target",x=vr(),k=e9(),{connectOnClick:C,noPanClassName:_,rfId:$}=Dt($Se,jr),{connectingFrom:R,connectingTo:T,clickConnecting:A,isPossibleEndHandle:z,connectionInProcess:j,clickConnectionInProcess:I,valid:N}=Dt(RSe(k,v,e),jr);k||x.getState().onError?.("010",Gl.error010());const L=V=>{const{defaultEdgeOptions:B,onConnect:F,hasDefaultEdges:q}=x.getState(),G={...B,...V};if(q){const{edges:U,setEdges:Y}=x.getState();Y(Z7e(G,U))}F?.(G),s?.(G)},H=V=>{if(!k)return;const B=BF(V.nativeEvent);if(i&&(B&&V.button===0||!B)){const F=x.getState();U7.onPointerDown(V.nativeEvent,{handleDomNode:V.currentTarget,autoPanOnConnect:F.autoPanOnConnect,connectionMode:F.connectionMode,connectionRadius:F.connectionRadius,domNode:F.domNode,nodeLookup:F.nodeLookup,lib:F.lib,isTarget:w,handleId:v,nodeId:k,flowId:F.rfId,panBy:F.panBy,cancelConnection:F.cancelConnection,onConnectStart:F.onConnectStart,onConnectEnd:F.onConnectEnd,updateConnection:F.updateConnection,onConnect:L,isValidConnection:n||F.isValidConnection,getTransform:()=>x.getState().transform,getFromHandle:()=>x.getState().connection.fromHandle,autoPanSpeed:F.autoPanSpeed,dragThreshold:F.connectionDragThreshold})}B?u?.(V):p?.(V)},P=V=>{const{onClickConnectStart:B,onClickConnectEnd:F,connectionClickStartHandle:q,connectionMode:G,isValidConnection:U,lib:Y,rfId:K,nodeLookup:O,connection:W}=x.getState();if(!k||!q&&!i)return;if(!q){B?.(V.nativeEvent,{nodeId:k,handleId:v,handleType:e}),x.setState({connectionClickStartHandle:{nodeId:k,type:e,id:v}});return}const Z=MF(V.target),Q=n||U,{connection:ie,isValid:te}=U7.isValid(V.nativeEvent,{handle:{nodeId:k,id:v,type:e},connectionMode:G,fromNodeId:q.nodeId,fromHandleId:q.id||null,fromType:q.type,isValidConnection:Q,flowId:K,doc:Z,lib:Y,nodeLookup:O});te&&ie&&L(ie);const re=structuredClone(W);delete re.inProgress,re.toPosition=re.toHandle?re.toHandle.position:null,F?.(V,re),x.setState({connectionClickStartHandle:null})};return y.jsx("div",{"data-handleid":v,"data-nodeid":k,"data-handlepos":r,"data-id":`${$}-${k}-${v}-${e}`,className:dn(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",_,d,{source:!w,target:w,connectable:o,connectablestart:i,connectableend:a,clickconnecting:A,connectingfrom:R,connectingto:T,valid:N,connectionindicator:o&&(!j||z)&&(j||I?a:i)}]),onMouseDown:H,onTouchStart:H,onClick:C?P:void 0,ref:m,...f,children:c})}const Oo=S.memo(NV(zSe));function TSe({data:e,isConnectable:r,sourcePosition:n=Ue.Bottom}){return y.jsxs(y.Fragment,{children:[e?.label,y.jsx(Oo,{type:"source",position:n,isConnectable:r})]})}function jSe({data:e,isConnectable:r,targetPosition:n=Ue.Top,sourcePosition:o=Ue.Bottom}){return y.jsxs(y.Fragment,{children:[y.jsx(Oo,{type:"target",position:n,isConnectable:r}),e?.label,y.jsx(Oo,{type:"source",position:o,isConnectable:r})]})}function ASe(){return null}function DSe({data:e,isConnectable:r,targetPosition:n=Ue.Top}){return y.jsxs(y.Fragment,{children:[y.jsx(Oo,{type:"target",position:n,isConnectable:r}),e?.label]})}const iw={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},VV={input:TSe,default:jSe,output:DSe,group:ASe};function PSe(e){return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??e.style?.width,height:e.height??e.initialHeight??e.style?.height}:{width:e.width??e.style?.width,height:e.height??e.style?.height}}const MSe=e=>{const{width:r,height:n,x:o,y:i}=nf(e.nodeLookup,{filter:a=>!!a.selected});return{width:Ka(r)?r:null,height:Ka(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${o}px,${i}px)`}};function NSe({onSelectionContextMenu:e,noPanClassName:r,disableKeyboardA11y:n}){const o=vr(),{width:i,height:a,transformString:l,userSelectionActive:s}=Dt(MSe,jr),c=FV(),d=S.useRef(null);if(S.useEffect(()=>{n||d.current?.focus({preventScroll:!0})},[n]),LV({nodeRef:d}),s||!i||!a)return null;const u=e?f=>{const m=o.getState().nodes.filter(v=>v.selected);e(f,m)}:void 0,p=f=>{Object.prototype.hasOwnProperty.call(iw,f.key)&&(f.preventDefault(),c({direction:iw[f.key],factor:f.shiftKey?4:1}))};return y.jsx("div",{className:dn(["react-flow__nodesselection","react-flow__container",r]),style:{transform:l},children:y.jsx("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:u,tabIndex:n?void 0:-1,onKeyDown:n?void 0:p,style:{width:i,height:a}})})}const qV=typeof window<"u"?window:void 0,BSe=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function HV({children:e,onPaneClick:r,onPaneMouseEnter:n,onPaneMouseMove:o,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:l,paneClickDistance:s,deleteKeyCode:c,selectionKeyCode:d,selectionOnDrag:u,selectionMode:p,onSelectionStart:f,onSelectionEnd:m,multiSelectionKeyCode:v,panActivationKeyCode:w,zoomActivationKeyCode:x,elementsSelectable:k,zoomOnScroll:C,zoomOnPinch:_,panOnScroll:$,panOnScrollSpeed:R,panOnScrollMode:T,zoomOnDoubleClick:A,panOnDrag:z,defaultViewport:j,translateExtent:I,minZoom:N,maxZoom:L,preventScrolling:H,onSelectionContextMenu:P,noWheelClassName:V,noPanClassName:B,disableKeyboardA11y:F,onViewportChange:q,isControlledViewport:G}){const{nodesSelectionActive:U,userSelectionActive:Y}=Dt(BSe,jr),K=X1(d,{target:qV}),O=X1(w,{target:qV}),W=O||z,Z=O||$,Q=u&&W!==!0,ie=K||Y||Q;return ySe({deleteKeyCode:c,multiSelectionKeyCode:v}),y.jsx(xSe,{onPaneContextMenu:a,elementsSelectable:k,zoomOnScroll:C,zoomOnPinch:_,panOnScroll:Z,panOnScrollSpeed:R,panOnScrollMode:T,zoomOnDoubleClick:A,panOnDrag:!K&&W,defaultViewport:j,translateExtent:I,minZoom:N,maxZoom:L,zoomActivationKeyCode:x,preventScrolling:H,noWheelClassName:V,noPanClassName:B,onViewportChange:q,isControlledViewport:G,paneClickDistance:s,selectionOnDrag:Q,children:y.jsxs(SSe,{onSelectionStart:f,onSelectionEnd:m,onPaneClick:r,onPaneMouseEnter:n,onPaneMouseMove:o,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:l,panOnDrag:W,isSelecting:!!ie,selectionMode:p,selectionKeyPressed:K,paneClickDistance:s,selectionOnDrag:Q,children:[e,U&&y.jsx(NSe,{onSelectionContextMenu:P,noPanClassName:B,disableKeyboardA11y:F})]})})}HV.displayName="FlowRenderer";const ISe=S.memo(HV),OSe=e=>r=>e?P7(r.nodeLookup,{x:0,y:0,width:r.width,height:r.height},r.transform,!0).map(n=>n.id):Array.from(r.nodeLookup.keys());function LSe(e){return Dt(S.useCallback(OSe(e),[e]),jr)}const FSe=e=>e.updateNodeInternals;function VSe(){const e=Dt(FSe),[r]=S.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const o=new Map;n.forEach(i=>{const a=i.target.getAttribute("data-id");o.set(a,{id:a,nodeElement:i.target,force:!0})}),e(o)}));return S.useEffect(()=>()=>{r?.disconnect()},[r]),r}function qSe({node:e,nodeType:r,hasDimensions:n,resizeObserver:o}){const i=vr(),a=S.useRef(null),l=S.useRef(null),s=S.useRef(e.sourcePosition),c=S.useRef(e.targetPosition),d=S.useRef(r),u=n&&!!e.internals.handleBounds;return S.useEffect(()=>{a.current&&!e.hidden&&(!u||l.current!==a.current)&&(l.current&&o?.unobserve(l.current),o?.observe(a.current),l.current=a.current)},[u,e.hidden]),S.useEffect(()=>()=>{l.current&&(o?.unobserve(l.current),l.current=null)},[]),S.useEffect(()=>{if(a.current){const p=d.current!==r,f=s.current!==e.sourcePosition,m=c.current!==e.targetPosition;(p||f||m)&&(d.current=r,s.current=e.sourcePosition,c.current=e.targetPosition,i.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:a.current,force:!0}]])))}},[e.id,r,e.sourcePosition,e.targetPosition]),a}function HSe({id:e,onClick:r,onMouseEnter:n,onMouseMove:o,onMouseLeave:i,onContextMenu:a,onDoubleClick:l,nodesDraggable:s,elementsSelectable:c,nodesConnectable:d,nodesFocusable:u,resizeObserver:p,noDragClassName:f,noPanClassName:m,disableKeyboardA11y:v,rfId:w,nodeTypes:x,nodeClickDistance:k,onError:C}){const{node:_,internals:$,isParent:R}=Dt(te=>{const re=te.nodeLookup.get(e),ue=te.parentLookup.has(e);return{node:re,internals:re.internals,isParent:ue}},jr);let T=_.type||"default",A=x?.[T]||VV[T];A===void 0&&(C?.("003",Gl.error003(T)),T="default",A=x?.default||VV.default);const z=!!(_.draggable||s&&typeof _.draggable>"u"),j=!!(_.selectable||c&&typeof _.selectable>"u"),I=!!(_.connectable||d&&typeof _.connectable>"u"),N=!!(_.focusable||u&&typeof _.focusable>"u"),L=vr(),H=AF(_),P=qSe({node:_,nodeType:T,hasDimensions:H,resizeObserver:p}),V=LV({nodeRef:P,disabled:_.hidden||!z,noDragClassName:f,handleSelector:_.dragHandle,nodeId:e,isSelectable:j,nodeClickDistance:k}),B=FV();if(_.hidden)return null;const F=_o(_),q=PSe(_),G=j||z||r||n||o||i,U=n?te=>n(te,{...$.userNode}):void 0,Y=o?te=>o(te,{...$.userNode}):void 0,K=i?te=>i(te,{...$.userNode}):void 0,O=a?te=>a(te,{...$.userNode}):void 0,W=l?te=>l(te,{...$.userNode}):void 0,Z=te=>{const{selectNodesOnDrag:re,nodeDragThreshold:ue}=L.getState();j&&(!re||!z||ue>0)&&Q7({id:e,store:L,nodeRef:P}),r&&r(te,{...$.userNode})},Q=te=>{if(!(NF(te.nativeEvent)||v)){if(bF.includes(te.key)&&j){const re=te.key==="Escape";Q7({id:e,store:L,unselect:re,nodeRef:P})}else if(z&&_.selected&&Object.prototype.hasOwnProperty.call(iw,te.key)){te.preventDefault();const{ariaLabelConfig:re}=L.getState();L.setState({ariaLiveMessage:re["node.a11yDescription.ariaLiveMessage"]({direction:te.key.replace("Arrow","").toLowerCase(),x:~~$.positionAbsolute.x,y:~~$.positionAbsolute.y})}),B({direction:iw[te.key],factor:te.shiftKey?4:1})}}},ie=()=>{if(v||!P.current?.matches(":focus-visible"))return;const{transform:te,width:re,height:ue,autoPanOnNodeFocus:_e,setCenter:ce}=L.getState();_e&&(P7(new Map([[e,_]]),{x:0,y:0,width:re,height:ue},te,!0).length>0||ce(_.position.x+F.width/2,_.position.y+F.height/2,{zoom:te[2]}))};return y.jsx("div",{className:dn(["react-flow__node",`react-flow__node-${T}`,{[m]:z},_.className,{selected:_.selected,selectable:j,parent:R,draggable:z,dragging:V}]),ref:P,style:{zIndex:$.z,transform:`translate(${$.positionAbsolute.x}px,${$.positionAbsolute.y}px)`,pointerEvents:G?"all":"none",visibility:H?"visible":"hidden",..._.style,...q},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:U,onMouseMove:Y,onMouseLeave:K,onContextMenu:O,onClick:Z,onDoubleClick:W,onKeyDown:N?Q:void 0,tabIndex:N?0:void 0,onFocus:N?ie:void 0,role:_.ariaRole??(N?"group":void 0),"aria-roledescription":"node","aria-describedby":v?void 0:`${_V}-${w}`,"aria-label":_.ariaLabel,..._.domAttributes,children:y.jsx(CSe,{value:e,children:y.jsx(A,{id:e,data:_.data,type:T,positionAbsoluteX:$.positionAbsolute.x,positionAbsoluteY:$.positionAbsolute.y,selected:_.selected??!1,selectable:j,draggable:z,deletable:_.deletable??!0,isConnectable:I,sourcePosition:_.sourcePosition,targetPosition:_.targetPosition,dragging:V,dragHandle:_.dragHandle,zIndex:$.z,parentId:_.parentId,...F})})})}var USe=S.memo(HSe);const WSe=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function UV(e){const{nodesDraggable:r,nodesConnectable:n,nodesFocusable:o,elementsSelectable:i,onError:a}=Dt(WSe,jr),l=LSe(e.onlyRenderVisibleElements),s=VSe();return y.jsx("div",{className:"react-flow__nodes",style:ow,children:l.map(c=>y.jsx(USe,{id:c,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:s,nodesDraggable:r,nodesConnectable:n,nodesFocusable:o,elementsSelectable:i,nodeClickDistance:e.nodeClickDistance,onError:a},c))})}UV.displayName="NodeRenderer";const GSe=S.memo(UV);function YSe(e){return Dt(S.useCallback(r=>{if(!e)return r.edges.map(o=>o.id);const n=[];if(r.width&&r.height)for(const o of r.edges){const i=r.nodeLookup.get(o.source),a=r.nodeLookup.get(o.target);i&&a&&Y7e({sourceNode:i,targetNode:a,width:r.width,height:r.height,transform:r.transform})&&n.push(o.id)}return n},[e]),jr)}const XSe=({color:e="none",strokeWidth:r=1})=>{const n={strokeWidth:r,...e&&{stroke:e}};return y.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},KSe=({color:e="none",strokeWidth:r=1})=>{const n={strokeWidth:r,...e&&{stroke:e,fill:e}};return y.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},WV={[Hx.Arrow]:XSe,[Hx.ArrowClosed]:KSe};function ZSe(e){const r=vr();return S.useMemo(()=>Object.prototype.hasOwnProperty.call(WV,e)?WV[e]:(r.getState().onError?.("009",Gl.error009(e)),null),[e])}const QSe=({id:e,type:r,color:n,width:o=12.5,height:i=12.5,markerUnits:a="strokeWidth",strokeWidth:l,orient:s="auto-start-reverse"})=>{const c=ZSe(r);return c?y.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${o}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:a,orient:s,refX:"0",refY:"0",children:y.jsx(c,{color:n,strokeWidth:l})}):null},GV=({defaultColor:e,rfId:r})=>{const n=Dt(a=>a.edges),o=Dt(a=>a.defaultEdgeOptions),i=S.useMemo(()=>t9e(n,{id:r,defaultColor:e,defaultMarkerStart:o?.markerStart,defaultMarkerEnd:o?.markerEnd}),[n,o,r,e]);return i.length?y.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:y.jsx("defs",{children:i.map(a=>y.jsx(QSe,{id:a.id,type:a.type,color:a.color,width:a.width,height:a.height,markerUnits:a.markerUnits,strokeWidth:a.strokeWidth,orient:a.orient},a.id))})}):null};GV.displayName="MarkerDefinitions";var JSe=S.memo(GV);function YV({x:e,y:r,label:n,labelStyle:o,labelShowBg:i=!0,labelBgStyle:a,labelBgPadding:l=[2,4],labelBgBorderRadius:s=2,children:c,className:d,...u}){const[p,f]=S.useState({x:1,y:0,width:0,height:0}),m=dn(["react-flow__edge-textwrapper",d]),v=S.useRef(null);return S.useEffect(()=>{if(v.current){const w=v.current.getBBox();f({x:w.x,y:w.y,width:w.width,height:w.height})}},[n]),n?y.jsxs("g",{transform:`translate(${e-p.width/2} ${r-p.height/2})`,className:m,visibility:p.width?"visible":"hidden",...u,children:[i&&y.jsx("rect",{width:p.width+2*l[0],x:-l[0],y:-l[1],height:p.height+2*l[1],className:"react-flow__edge-textbg",style:a,rx:s,ry:s}),y.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:v,style:o,children:n}),c]}):null}YV.displayName="EdgeText";const eEe=S.memo(YV);function aw({path:e,labelX:r,labelY:n,label:o,labelStyle:i,labelShowBg:a,labelBgStyle:l,labelBgPadding:s,labelBgBorderRadius:c,interactionWidth:d=20,...u}){return y.jsxs(y.Fragment,{children:[y.jsx("path",{...u,d:e,fill:"none",className:dn(["react-flow__edge-path",u.className])}),d?y.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:d,className:"react-flow__edge-interaction"}):null,o&&Ka(r)&&Ka(n)?y.jsx(eEe,{x:r,y:n,label:o,labelStyle:i,labelShowBg:a,labelBgStyle:l,labelBgPadding:s,labelBgBorderRadius:c}):null]})}function XV({pos:e,x1:r,y1:n,x2:o,y2:i}){return e===Ue.Left||e===Ue.Right?[.5*(r+o),n]:[r,.5*(n+i)]}function KV({sourceX:e,sourceY:r,sourcePosition:n=Ue.Bottom,targetX:o,targetY:i,targetPosition:a=Ue.Top}){const[l,s]=XV({pos:n,x1:e,y1:r,x2:o,y2:i}),[c,d]=XV({pos:a,x1:o,y1:i,x2:e,y2:r}),[u,p,f,m]=OF({sourceX:e,sourceY:r,targetX:o,targetY:i,sourceControlX:l,sourceControlY:s,targetControlX:c,targetControlY:d});return[`M${e},${r} C${l},${s} ${c},${d} ${o},${i}`,u,p,f,m]}function ZV(e){return S.memo(({id:r,sourceX:n,sourceY:o,targetX:i,targetY:a,sourcePosition:l,targetPosition:s,label:c,labelStyle:d,labelShowBg:u,labelBgStyle:p,labelBgPadding:f,labelBgBorderRadius:m,style:v,markerEnd:w,markerStart:x,interactionWidth:k})=>{const[C,_,$]=KV({sourceX:n,sourceY:o,sourcePosition:l,targetX:i,targetY:a,targetPosition:s}),R=e.isInternal?void 0:r;return y.jsx(aw,{id:R,path:C,labelX:_,labelY:$,label:c,labelStyle:d,labelShowBg:u,labelBgStyle:p,labelBgPadding:f,labelBgBorderRadius:m,style:v,markerEnd:w,markerStart:x,interactionWidth:k})})}const tEe=ZV({isInternal:!1}),QV=ZV({isInternal:!0});tEe.displayName="SimpleBezierEdge",QV.displayName="SimpleBezierEdgeInternal";function JV(e){return S.memo(({id:r,sourceX:n,sourceY:o,targetX:i,targetY:a,label:l,labelStyle:s,labelShowBg:c,labelBgStyle:d,labelBgPadding:u,labelBgBorderRadius:p,style:f,sourcePosition:m=Ue.Bottom,targetPosition:v=Ue.Top,markerEnd:w,markerStart:x,pathOptions:k,interactionWidth:C})=>{const[_,$,R]=Zx({sourceX:n,sourceY:o,sourcePosition:m,targetX:i,targetY:a,targetPosition:v,borderRadius:k?.borderRadius,offset:k?.offset,stepPosition:k?.stepPosition}),T=e.isInternal?void 0:r;return y.jsx(aw,{id:T,path:_,labelX:$,labelY:R,label:l,labelStyle:s,labelShowBg:c,labelBgStyle:d,labelBgPadding:u,labelBgBorderRadius:p,style:f,markerEnd:w,markerStart:x,interactionWidth:C})})}const eq=JV({isInternal:!1}),tq=JV({isInternal:!0});eq.displayName="SmoothStepEdge",tq.displayName="SmoothStepEdgeInternal";function rq(e){return S.memo(({id:r,...n})=>{const o=e.isInternal?void 0:r;return y.jsx(eq,{...n,id:o,pathOptions:S.useMemo(()=>({borderRadius:0,offset:n.pathOptions?.offset}),[n.pathOptions?.offset])})})}const rEe=rq({isInternal:!1}),nq=rq({isInternal:!0});rEe.displayName="StepEdge",nq.displayName="StepEdgeInternal";function oq(e){return S.memo(({id:r,sourceX:n,sourceY:o,targetX:i,targetY:a,label:l,labelStyle:s,labelShowBg:c,labelBgStyle:d,labelBgPadding:u,labelBgBorderRadius:p,style:f,markerEnd:m,markerStart:v,interactionWidth:w})=>{const[x,k,C]=VF({sourceX:n,sourceY:o,targetX:i,targetY:a}),_=e.isInternal?void 0:r;return y.jsx(aw,{id:_,path:x,labelX:k,labelY:C,label:l,labelStyle:s,labelShowBg:c,labelBgStyle:d,labelBgPadding:u,labelBgBorderRadius:p,style:f,markerEnd:m,markerStart:v,interactionWidth:w})})}const nEe=oq({isInternal:!1}),iq=oq({isInternal:!0});nEe.displayName="StraightEdge",iq.displayName="StraightEdgeInternal";function aq(e){return S.memo(({id:r,sourceX:n,sourceY:o,targetX:i,targetY:a,sourcePosition:l=Ue.Bottom,targetPosition:s=Ue.Top,label:c,labelStyle:d,labelShowBg:u,labelBgStyle:p,labelBgPadding:f,labelBgBorderRadius:m,style:v,markerEnd:w,markerStart:x,pathOptions:k,interactionWidth:C})=>{const[_,$,R]=Kx({sourceX:n,sourceY:o,sourcePosition:l,targetX:i,targetY:a,targetPosition:s,curvature:k?.curvature}),T=e.isInternal?void 0:r;return y.jsx(aw,{id:T,path:_,labelX:$,labelY:R,label:c,labelStyle:d,labelShowBg:u,labelBgStyle:p,labelBgPadding:f,labelBgBorderRadius:m,style:v,markerEnd:w,markerStart:x,interactionWidth:C})})}const oEe=aq({isInternal:!1}),lq=aq({isInternal:!0});oEe.displayName="BezierEdge",lq.displayName="BezierEdgeInternal";const sq={default:lq,straight:iq,step:nq,smoothstep:tq,simplebezier:QV},cq={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},iEe=(e,r,n)=>n===Ue.Left?e-r:n===Ue.Right?e+r:e,aEe=(e,r,n)=>n===Ue.Top?e-r:n===Ue.Bottom?e+r:e,dq="react-flow__edgeupdater";function uq({position:e,centerX:r,centerY:n,radius:o=10,onMouseDown:i,onMouseEnter:a,onMouseOut:l,type:s}){return y.jsx("circle",{onMouseDown:i,onMouseEnter:a,onMouseOut:l,className:dn([dq,`${dq}-${s}`]),cx:iEe(r,o,e),cy:aEe(n,o,e),r:o,stroke:"transparent",fill:"transparent"})}function lEe({isReconnectable:e,reconnectRadius:r,edge:n,sourceX:o,sourceY:i,targetX:a,targetY:l,sourcePosition:s,targetPosition:c,onReconnect:d,onReconnectStart:u,onReconnectEnd:p,setReconnecting:f,setUpdateHover:m}){const v=vr(),w=($,R)=>{if($.button!==0)return;const{autoPanOnConnect:T,domNode:A,isValidConnection:z,connectionMode:j,connectionRadius:I,lib:N,onConnectStart:L,onConnectEnd:H,cancelConnection:P,nodeLookup:V,rfId:B,panBy:F,updateConnection:q}=v.getState(),G=R.type==="target",U=(O,W)=>{f(!1),p?.(O,n,R.type,W)},Y=O=>d?.(n,O),K=(O,W)=>{f(!0),u?.($,n,R.type),L?.(O,W)};U7.onPointerDown($.nativeEvent,{autoPanOnConnect:T,connectionMode:j,connectionRadius:I,domNode:A,handleId:R.id,nodeId:R.nodeId,nodeLookup:V,isTarget:G,edgeUpdaterType:R.type,lib:N,flowId:B,cancelConnection:P,panBy:F,isValidConnection:z,onConnect:Y,onConnectStart:K,onConnectEnd:H,onReconnectEnd:U,updateConnection:q,getTransform:()=>v.getState().transform,getFromHandle:()=>v.getState().connection.fromHandle,dragThreshold:v.getState().connectionDragThreshold,handleDomNode:$.currentTarget})},x=$=>w($,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),k=$=>w($,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),C=()=>m(!0),_=()=>m(!1);return y.jsxs(y.Fragment,{children:[(e===!0||e==="source")&&y.jsx(uq,{position:s,centerX:o,centerY:i,radius:r,onMouseDown:x,onMouseEnter:C,onMouseOut:_,type:"source"}),(e===!0||e==="target")&&y.jsx(uq,{position:c,centerX:a,centerY:l,radius:r,onMouseDown:k,onMouseEnter:C,onMouseOut:_,type:"target"})]})}function sEe({id:e,edgesFocusable:r,edgesReconnectable:n,elementsSelectable:o,onClick:i,onDoubleClick:a,onContextMenu:l,onMouseEnter:s,onMouseMove:c,onMouseLeave:d,reconnectRadius:u,onReconnect:p,onReconnectStart:f,onReconnectEnd:m,rfId:v,edgeTypes:w,noPanClassName:x,onError:k,disableKeyboardA11y:C}){let _=Dt(ce=>ce.edgeLookup.get(e));const $=Dt(ce=>ce.defaultEdgeOptions);_=$?{...$,..._}:_;let R=_.type||"default",T=w?.[R]||sq[R];T===void 0&&(k?.("011",Gl.error011(R)),R="default",T=w?.default||sq.default);const A=!!(_.focusable||r&&typeof _.focusable>"u"),z=typeof p<"u"&&(_.reconnectable||n&&typeof _.reconnectable>"u"),j=!!(_.selectable||o&&typeof _.selectable>"u"),I=S.useRef(null),[N,L]=S.useState(!1),[H,P]=S.useState(!1),V=vr(),{zIndex:B,sourceX:F,sourceY:q,targetX:G,targetY:U,sourcePosition:Y,targetPosition:K}=Dt(S.useCallback(ce=>{const pe=ce.nodeLookup.get(_.source),xe=ce.nodeLookup.get(_.target);if(!pe||!xe)return{zIndex:_.zIndex,...cq};const je=WF({id:e,sourceNode:pe,targetNode:xe,sourceHandle:_.sourceHandle||null,targetHandle:_.targetHandle||null,connectionMode:ce.connectionMode,onError:k});return{zIndex:G7e({selected:_.selected,zIndex:_.zIndex,sourceNode:pe,targetNode:xe,elevateOnSelect:ce.elevateEdgesOnSelect,zIndexMode:ce.zIndexMode}),...je||cq}},[_.source,_.target,_.sourceHandle,_.targetHandle,_.selected,_.zIndex]),jr),O=S.useMemo(()=>_.markerStart?`url('#${B7(_.markerStart,v)}')`:void 0,[_.markerStart,v]),W=S.useMemo(()=>_.markerEnd?`url('#${B7(_.markerEnd,v)}')`:void 0,[_.markerEnd,v]);if(_.hidden||F===null||q===null||G===null||U===null)return null;const Z=ce=>{const{addSelectedEdges:pe,unselectNodesAndEdges:xe,multiSelectionActive:je}=V.getState();j&&(V.setState({nodesSelectionActive:!1}),_.selected&&je?(xe({nodes:[],edges:[_]}),I.current?.blur()):pe([e])),i&&i(ce,_)},Q=a?ce=>{a(ce,{..._})}:void 0,ie=l?ce=>{l(ce,{..._})}:void 0,te=s?ce=>{s(ce,{..._})}:void 0,re=c?ce=>{c(ce,{..._})}:void 0,ue=d?ce=>{d(ce,{..._})}:void 0,_e=ce=>{if(!C&&bF.includes(ce.key)&&j){const{unselectNodesAndEdges:pe,addSelectedEdges:xe}=V.getState();ce.key==="Escape"?(I.current?.blur(),pe({edges:[_]})):xe([e])}};return y.jsx("svg",{style:{zIndex:B},children:y.jsxs("g",{className:dn(["react-flow__edge",`react-flow__edge-${R}`,_.className,x,{selected:_.selected,animated:_.animated,inactive:!j&&!i,updating:N,selectable:j}]),onClick:Z,onDoubleClick:Q,onContextMenu:ie,onMouseEnter:te,onMouseMove:re,onMouseLeave:ue,onKeyDown:A?_e:void 0,tabIndex:A?0:void 0,role:_.ariaRole??(A?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":_.ariaLabel===null?void 0:_.ariaLabel||`Edge from ${_.source} to ${_.target}`,"aria-describedby":A?`${SV}-${v}`:void 0,ref:I,..._.domAttributes,children:[!H&&y.jsx(T,{id:e,source:_.source,target:_.target,type:_.type,selected:_.selected,animated:_.animated,selectable:j,deletable:_.deletable??!0,label:_.label,labelStyle:_.labelStyle,labelShowBg:_.labelShowBg,labelBgStyle:_.labelBgStyle,labelBgPadding:_.labelBgPadding,labelBgBorderRadius:_.labelBgBorderRadius,sourceX:F,sourceY:q,targetX:G,targetY:U,sourcePosition:Y,targetPosition:K,data:_.data,style:_.style,sourceHandleId:_.sourceHandle,targetHandleId:_.targetHandle,markerStart:O,markerEnd:W,pathOptions:"pathOptions"in _?_.pathOptions:void 0,interactionWidth:_.interactionWidth}),z&&y.jsx(lEe,{edge:_,isReconnectable:z,reconnectRadius:u,onReconnect:p,onReconnectStart:f,onReconnectEnd:m,sourceX:F,sourceY:q,targetX:G,targetY:U,sourcePosition:Y,targetPosition:K,setUpdateHover:L,setReconnecting:P})]})})}var cEe=S.memo(sEe);const dEe=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function pq({defaultMarkerColor:e,onlyRenderVisibleElements:r,rfId:n,edgeTypes:o,noPanClassName:i,onReconnect:a,onEdgeContextMenu:l,onEdgeMouseEnter:s,onEdgeMouseMove:c,onEdgeMouseLeave:d,onEdgeClick:u,reconnectRadius:p,onEdgeDoubleClick:f,onReconnectStart:m,onReconnectEnd:v,disableKeyboardA11y:w}){const{edgesFocusable:x,edgesReconnectable:k,elementsSelectable:C,onError:_}=Dt(dEe,jr),$=YSe(r);return y.jsxs("div",{className:"react-flow__edges",children:[y.jsx(JSe,{defaultColor:e,rfId:n}),$.map(R=>y.jsx(cEe,{id:R,edgesFocusable:x,edgesReconnectable:k,elementsSelectable:C,noPanClassName:i,onReconnect:a,onContextMenu:l,onMouseEnter:s,onMouseMove:c,onMouseLeave:d,onClick:u,reconnectRadius:p,onDoubleClick:f,onReconnectStart:m,onReconnectEnd:v,rfId:n,onError:_,edgeTypes:o,disableKeyboardA11y:w},R))]})}pq.displayName="EdgeRenderer";const uEe=S.memo(pq),pEe=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function hEe({children:e}){const r=Dt(pEe);return y.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:r},children:e})}function fEe(e){const r=pf(),n=S.useRef(!1);S.useEffect(()=>{!n.current&&r.viewportInitialized&&e&&(setTimeout(()=>e(r),1),n.current=!0)},[e,r.viewportInitialized])}const gEe=e=>e.panZoom?.syncViewport;function mEe(e){const r=Dt(gEe),n=vr();return S.useEffect(()=>{e&&(r?.(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,r]),null}function yEe(e){return e.connection.inProgress?{...e.connection,to:G1(e.connection.to,e.transform)}:{...e.connection}}function vEe(e){return yEe}function bEe(e){const r=vEe();return Dt(r,jr)}const xEe=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function wEe({containerStyle:e,style:r,type:n,component:o}){const{nodesConnectable:i,width:a,height:l,isValid:s,inProgress:c}=Dt(xEe,jr);return a&&i&&c?y.jsx("svg",{style:e,width:a,height:l,className:"react-flow__connectionline react-flow__container",children:y.jsx("g",{className:dn(["react-flow__connection",_F(s)]),children:y.jsx(hq,{style:r,type:n,CustomComponent:o,isValid:s})})}):null}const hq=({style:e,type:r=id.Bezier,CustomComponent:n,isValid:o})=>{const{inProgress:i,from:a,fromNode:l,fromHandle:s,fromPosition:c,to:d,toNode:u,toHandle:p,toPosition:f,pointer:m}=bEe();if(!i)return;if(n)return y.jsx(n,{connectionLineType:r,connectionLineStyle:e,fromNode:l,fromHandle:s,fromX:a.x,fromY:a.y,toX:d.x,toY:d.y,fromPosition:c,toPosition:f,connectionStatus:_F(o),toNode:u,toHandle:p,pointer:m});let v="";const w={sourceX:a.x,sourceY:a.y,sourcePosition:c,targetX:d.x,targetY:d.y,targetPosition:f};switch(r){case id.Bezier:[v]=Kx(w);break;case id.SimpleBezier:[v]=KV(w);break;case id.Step:[v]=Zx({...w,borderRadius:0});break;case id.SmoothStep:[v]=Zx(w);break;default:[v]=VF(w)}return y.jsx("path",{d:v,fill:"none",className:"react-flow__connection-path",style:e})};hq.displayName="ConnectionLine";const kEe={};function fq(e=kEe){S.useRef(e),vr(),S.useEffect(()=>{},[e])}function _Ee(){vr(),S.useRef(!1),S.useEffect(()=>{},[])}function gq({nodeTypes:e,edgeTypes:r,onInit:n,onNodeClick:o,onEdgeClick:i,onNodeDoubleClick:a,onEdgeDoubleClick:l,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:d,onNodeContextMenu:u,onSelectionContextMenu:p,onSelectionStart:f,onSelectionEnd:m,connectionLineType:v,connectionLineStyle:w,connectionLineComponent:x,connectionLineContainerStyle:k,selectionKeyCode:C,selectionOnDrag:_,selectionMode:$,multiSelectionKeyCode:R,panActivationKeyCode:T,zoomActivationKeyCode:A,deleteKeyCode:z,onlyRenderVisibleElements:j,elementsSelectable:I,defaultViewport:N,translateExtent:L,minZoom:H,maxZoom:P,preventScrolling:V,defaultMarkerColor:B,zoomOnScroll:F,zoomOnPinch:q,panOnScroll:G,panOnScrollSpeed:U,panOnScrollMode:Y,zoomOnDoubleClick:K,panOnDrag:O,onPaneClick:W,onPaneMouseEnter:Z,onPaneMouseMove:Q,onPaneMouseLeave:ie,onPaneScroll:te,onPaneContextMenu:re,paneClickDistance:ue,nodeClickDistance:_e,onEdgeContextMenu:ce,onEdgeMouseEnter:pe,onEdgeMouseMove:xe,onEdgeMouseLeave:je,reconnectRadius:Be,onReconnect:Je,onReconnectStart:st,onReconnectEnd:Le,noDragClassName:St,noWheelClassName:Ve,noPanClassName:qe,disableKeyboardA11y:Xe,nodeExtent:It,rfId:Et,viewport:be,onViewportChange:ke}){return fq(e),fq(r),_Ee(),fEe(n),mEe(be),y.jsx(ISe,{onPaneClick:W,onPaneMouseEnter:Z,onPaneMouseMove:Q,onPaneMouseLeave:ie,onPaneContextMenu:re,onPaneScroll:te,paneClickDistance:ue,deleteKeyCode:z,selectionKeyCode:C,selectionOnDrag:_,selectionMode:$,onSelectionStart:f,onSelectionEnd:m,multiSelectionKeyCode:R,panActivationKeyCode:T,zoomActivationKeyCode:A,elementsSelectable:I,zoomOnScroll:F,zoomOnPinch:q,zoomOnDoubleClick:K,panOnScroll:G,panOnScrollSpeed:U,panOnScrollMode:Y,panOnDrag:O,defaultViewport:N,translateExtent:L,minZoom:H,maxZoom:P,onSelectionContextMenu:p,preventScrolling:V,noDragClassName:St,noWheelClassName:Ve,noPanClassName:qe,disableKeyboardA11y:Xe,onViewportChange:ke,isControlledViewport:!!be,children:y.jsxs(hEe,{children:[y.jsx(uEe,{edgeTypes:r,onEdgeClick:i,onEdgeDoubleClick:l,onReconnect:Je,onReconnectStart:st,onReconnectEnd:Le,onlyRenderVisibleElements:j,onEdgeContextMenu:ce,onEdgeMouseEnter:pe,onEdgeMouseMove:xe,onEdgeMouseLeave:je,reconnectRadius:Be,defaultMarkerColor:B,noPanClassName:qe,disableKeyboardA11y:Xe,rfId:Et}),y.jsx(wEe,{style:w,type:v,component:x,containerStyle:k}),y.jsx("div",{className:"react-flow__edgelabel-renderer"}),y.jsx(GSe,{nodeTypes:e,onNodeClick:o,onNodeDoubleClick:a,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:d,onNodeContextMenu:u,nodeClickDistance:_e,onlyRenderVisibleElements:j,noPanClassName:qe,noDragClassName:St,disableKeyboardA11y:Xe,nodeExtent:It,rfId:Et}),y.jsx("div",{className:"react-flow__viewport-portal"})]})})}gq.displayName="GraphView";const SEe=S.memo(gq),mq=({nodes:e,edges:r,defaultNodes:n,defaultEdges:o,width:i,height:a,fitView:l,fitViewOptions:s,minZoom:c=.5,maxZoom:d=2,nodeOrigin:u,nodeExtent:p,zIndexMode:f="basic"}={})=>{const m=new Map,v=new Map,w=new Map,x=new Map,k=o??r??[],C=n??e??[],_=u??[0,0],$=p??V1;QF(w,x,k);const R=F7(C,m,v,{nodeOrigin:_,nodeExtent:$,zIndexMode:f});let T=[0,0,1];if(l&&i&&a){const A=nf(m,{filter:N=>!!((N.width||N.initialWidth)&&(N.height||N.initialHeight))}),{x:z,y:j,zoom:I}=Ws(A,i,a,c,d,s?.padding??.1);T=[z,j,I]}return{rfId:"1",width:i??0,height:a??0,transform:T,nodes:C,nodesInitialized:R,nodeLookup:m,parentLookup:v,edges:k,edgeLookup:x,connectionLookup:w,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:o!==void 0,panZoom:null,minZoom:c,maxZoom:d,translateExtent:V1,nodeExtent:$,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:rf.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:_,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:l??!1,fitViewOptions:s,fitViewResolver:null,connection:{...wF},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:F7e,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:xF,zIndexMode:f,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},EEe=({nodes:e,edges:r,defaultNodes:n,defaultEdges:o,width:i,height:a,fitView:l,fitViewOptions:s,minZoom:c,maxZoom:d,nodeOrigin:u,nodeExtent:p,zIndexMode:f})=>q9e((m,v)=>{async function w(){const{nodeLookup:x,panZoom:k,fitViewOptions:C,fitViewResolver:_,width:$,height:R,minZoom:T,maxZoom:A}=v();k&&(await O7e({nodes:x,width:$,height:R,panZoom:k,minZoom:T,maxZoom:A},C),_?.resolve(!0),m({fitViewResolver:null}))}return{...mq({nodes:e,edges:r,width:i,height:a,fitView:l,fitViewOptions:s,minZoom:c,maxZoom:d,nodeOrigin:u,nodeExtent:p,defaultNodes:n,defaultEdges:o,zIndexMode:f}),setNodes:x=>{const{nodeLookup:k,parentLookup:C,nodeOrigin:_,elevateNodesOnSelect:$,fitViewQueued:R,zIndexMode:T}=v(),A=F7(x,k,C,{nodeOrigin:_,nodeExtent:p,elevateNodesOnSelect:$,checkEquality:!0,zIndexMode:T});R&&A?(w(),m({nodes:x,nodesInitialized:A,fitViewQueued:!1,fitViewOptions:void 0})):m({nodes:x,nodesInitialized:A})},setEdges:x=>{const{connectionLookup:k,edgeLookup:C}=v();QF(k,C,x),m({edges:x})},setDefaultNodesAndEdges:(x,k)=>{if(x){const{setNodes:C}=v();C(x),m({hasDefaultNodes:!0})}if(k){const{setEdges:C}=v();C(k),m({hasDefaultEdges:!0})}},updateNodeInternals:x=>{const{triggerNodeChanges:k,nodeLookup:C,parentLookup:_,domNode:$,nodeOrigin:R,nodeExtent:T,debug:A,fitViewQueued:z,zIndexMode:j}=v(),{changes:I,updatedInternals:N}=c9e(x,C,_,$,R,T,j);N&&(i9e(C,_,{nodeOrigin:R,nodeExtent:T,zIndexMode:j}),z?(w(),m({fitViewQueued:!1,fitViewOptions:void 0})):m({}),I?.length>0&&(A&&console.log("React Flow: trigger node changes",I),k?.(I)))},updateNodePositions:(x,k=!1)=>{const C=[];let _=[];const{nodeLookup:$,triggerNodeChanges:R,connection:T,updateConnection:A,onNodesChangeMiddlewareMap:z}=v();for(const[j,I]of x){const N=$.get(j),L=!!(N?.expandParent&&N?.parentId&&I?.position),H={id:j,type:"position",position:L?{x:Math.max(0,I.position.x),y:Math.max(0,I.position.y)}:I.position,dragging:k};if(N&&T.inProgress&&T.fromNode.id===N.id){const P=Zu(N,T.fromHandle,Ue.Left,!0);A({...T,from:P})}L&&N.parentId&&C.push({id:j,parentId:N.parentId,rect:{...I.internals.positionAbsolute,width:I.measured.width??0,height:I.measured.height??0}}),_.push(H)}if(C.length>0){const{parentLookup:j,nodeOrigin:I}=v(),N=q7(C,$,j,I);_.push(...N)}for(const j of z.values())_=j(_);R(_)},triggerNodeChanges:x=>{const{onNodesChange:k,setNodes:C,nodes:_,hasDefaultNodes:$,debug:R}=v();if(x?.length){if($){const T=rw(x,_);C(T)}R&&console.log("React Flow: trigger node changes",x),k?.(x)}},triggerEdgeChanges:x=>{const{onEdgesChange:k,setEdges:C,edges:_,hasDefaultEdges:$,debug:R}=v();if(x?.length){if($){const T=nw(x,_);C(T)}R&&console.log("React Flow: trigger edge changes",x),k?.(x)}},addSelectedNodes:x=>{const{multiSelectionActive:k,edgeLookup:C,nodeLookup:_,triggerNodeChanges:$,triggerEdgeChanges:R}=v();if(k){const T=x.map(A=>Qu(A,!0));$(T);return}$(uf(_,new Set([...x]),!0)),R(uf(C))},addSelectedEdges:x=>{const{multiSelectionActive:k,edgeLookup:C,nodeLookup:_,triggerNodeChanges:$,triggerEdgeChanges:R}=v();if(k){const T=x.map(A=>Qu(A,!0));R(T);return}R(uf(C,new Set([...x]))),$(uf(_,new Set,!0))},unselectNodesAndEdges:({nodes:x,edges:k}={})=>{const{edges:C,nodes:_,nodeLookup:$,triggerNodeChanges:R,triggerEdgeChanges:T}=v(),A=x||_,z=k||C,j=A.map(N=>{const L=$.get(N.id);return L&&(L.selected=!1),Qu(N.id,!1)}),I=z.map(N=>Qu(N.id,!1));R(j),T(I)},setMinZoom:x=>{const{panZoom:k,maxZoom:C}=v();k?.setScaleExtent([x,C]),m({minZoom:x})},setMaxZoom:x=>{const{panZoom:k,minZoom:C}=v();k?.setScaleExtent([C,x]),m({maxZoom:x})},setTranslateExtent:x=>{v().panZoom?.setTranslateExtent(x),m({translateExtent:x})},resetSelectedElements:()=>{const{edges:x,nodes:k,triggerNodeChanges:C,triggerEdgeChanges:_,elementsSelectable:$}=v();if(!$)return;const R=k.reduce((A,z)=>z.selected?[...A,Qu(z.id,!1)]:A,[]),T=x.reduce((A,z)=>z.selected?[...A,Qu(z.id,!1)]:A,[]);C(R),_(T)},setNodeExtent:x=>{const{nodes:k,nodeLookup:C,parentLookup:_,nodeOrigin:$,elevateNodesOnSelect:R,nodeExtent:T,zIndexMode:A}=v();x[0][0]===T[0][0]&&x[0][1]===T[0][1]&&x[1][0]===T[1][0]&&x[1][1]===T[1][1]||(F7(k,C,_,{nodeOrigin:$,nodeExtent:x,elevateNodesOnSelect:R,checkEquality:!1,zIndexMode:A}),m({nodeExtent:x}))},panBy:x=>{const{transform:k,width:C,height:_,panZoom:$,translateExtent:R}=v();return d9e({delta:x,panZoom:$,transform:k,translateExtent:R,width:C,height:_})},setCenter:async(x,k,C)=>{const{width:_,height:$,maxZoom:R,panZoom:T}=v();if(!T)return Promise.resolve(!1);const A=typeof C?.zoom<"u"?C.zoom:R;return await T.setViewport({x:_/2-x*A,y:$/2-k*A,zoom:A},{duration:C?.duration,ease:C?.ease,interpolate:C?.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{m({connection:{...wF}})},updateConnection:x=>{m({connection:x})},reset:()=>m({...mq()})}},Object.is);function lw({initialNodes:e,initialEdges:r,defaultNodes:n,defaultEdges:o,initialWidth:i,initialHeight:a,initialMinZoom:l,initialMaxZoom:s,initialFitViewOptions:c,fitView:d,nodeOrigin:u,nodeExtent:p,zIndexMode:f,children:m}){const[v]=S.useState(()=>EEe({nodes:e,edges:r,defaultNodes:n,defaultEdges:o,width:i,height:a,fitView:d,minZoom:l,maxZoom:s,fitViewOptions:c,nodeOrigin:u,nodeExtent:p,zIndexMode:f}));return y.jsx(H9e,{value:v,children:y.jsx(hSe,{children:m})})}function CEe({children:e,nodes:r,edges:n,defaultNodes:o,defaultEdges:i,width:a,height:l,fitView:s,fitViewOptions:c,minZoom:d,maxZoom:u,nodeOrigin:p,nodeExtent:f,zIndexMode:m}){return S.useContext(ew)?y.jsx(y.Fragment,{children:e}):y.jsx(lw,{initialNodes:r,initialEdges:n,defaultNodes:o,defaultEdges:i,initialWidth:a,initialHeight:l,fitView:s,initialFitViewOptions:c,initialMinZoom:d,initialMaxZoom:u,nodeOrigin:p,nodeExtent:f,zIndexMode:m,children:e})}const $Ee={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function REe({nodes:e,edges:r,defaultNodes:n,defaultEdges:o,className:i,nodeTypes:a,edgeTypes:l,onNodeClick:s,onEdgeClick:c,onInit:d,onMove:u,onMoveStart:p,onMoveEnd:f,onConnect:m,onConnectStart:v,onConnectEnd:w,onClickConnectStart:x,onClickConnectEnd:k,onNodeMouseEnter:C,onNodeMouseMove:_,onNodeMouseLeave:$,onNodeContextMenu:R,onNodeDoubleClick:T,onNodeDragStart:A,onNodeDrag:z,onNodeDragStop:j,onNodesDelete:I,onEdgesDelete:N,onDelete:L,onSelectionChange:H,onSelectionDragStart:P,onSelectionDrag:V,onSelectionDragStop:B,onSelectionContextMenu:F,onSelectionStart:q,onSelectionEnd:G,onBeforeDelete:U,connectionMode:Y,connectionLineType:K=id.Bezier,connectionLineStyle:O,connectionLineComponent:W,connectionLineContainerStyle:Z,deleteKeyCode:Q="Backspace",selectionKeyCode:ie="Shift",selectionOnDrag:te=!1,selectionMode:re=q1.Full,panActivationKeyCode:ue="Space",multiSelectionKeyCode:_e=lf()?"Meta":"Control",zoomActivationKeyCode:ce=lf()?"Meta":"Control",snapToGrid:pe,snapGrid:xe,onlyRenderVisibleElements:je=!1,selectNodesOnDrag:Be,nodesDraggable:Je,autoPanOnNodeFocus:st,nodesConnectable:Le,nodesFocusable:St,nodeOrigin:Ve=EV,edgesFocusable:qe,edgesReconnectable:Xe,elementsSelectable:It=!0,defaultViewport:Et=nSe,minZoom:be=.5,maxZoom:ke=2,translateExtent:Ye=V1,preventScrolling:yt=!0,nodeExtent:xt,defaultMarkerColor:Tr="#b1b1b7",zoomOnScroll:er=!0,zoomOnPinch:qt=!0,panOnScroll:Ht=!1,panOnScrollSpeed:Kr=.5,panOnScrollMode:Gt=Yu.Free,zoomOnDoubleClick:ln=!0,panOnDrag:Wn=!0,onPaneClick:fn,onPaneMouseEnter:oo,onPaneMouseMove:Yo,onPaneMouseLeave:jo,onPaneScroll:ui,onPaneContextMenu:Dl,paneClickDistance:Ao=1,nodeClickDistance:xs=0,children:ws,onReconnect:zc,onReconnectStart:Pl,onReconnectEnd:lh,onEdgeContextMenu:ks,onEdgeDoubleClick:tu,onEdgeMouseEnter:Xo,onEdgeMouseMove:Tc,onEdgeMouseLeave:_s,reconnectRadius:ru=10,onNodesChange:Ss,onEdgesChange:Ko,noDragClassName:Mr="nodrag",noWheelClassName:Pn="nowheel",noPanClassName:Do="nopan",fitView:Ml,fitViewOptions:jc,connectOnClick:sh,attributionPosition:Li,proOptions:Ra,defaultEdgeOptions:Nl,elevateNodesOnSelect:za=!0,elevateEdgesOnSelect:Ta=!1,disableKeyboardA11y:pi=!1,autoPanOnConnect:ho,autoPanOnNodeDrag:Wr,autoPanSpeed:Ac,connectionRadius:Dc,isValidConnection:Fi,onError:ja,style:nu,id:Es,nodeDragThreshold:ou,connectionDragThreshold:ch,viewport:Cs,onViewportChange:$s,width:Po,height:Gr,colorMode:iu="light",debug:dh,onScroll:Aa,ariaLabelConfig:au,zIndexMode:Da="basic",...lu},J){const ee=Es||"1",oe=lSe(iu),ae=S.useCallback(le=>{le.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Aa?.(le)},[Aa]);return y.jsx("div",{"data-testid":"rf__wrapper",...lu,onScroll:ae,style:{...nu,...$Ee},ref:J,className:dn(["react-flow",i,oe]),id:Es,role:"application",children:y.jsxs(CEe,{nodes:e,edges:r,width:Po,height:Gr,fitView:Ml,fitViewOptions:jc,minZoom:be,maxZoom:ke,nodeOrigin:Ve,nodeExtent:xt,zIndexMode:Da,children:[y.jsx(SEe,{onInit:d,onNodeClick:s,onEdgeClick:c,onNodeMouseEnter:C,onNodeMouseMove:_,onNodeMouseLeave:$,onNodeContextMenu:R,onNodeDoubleClick:T,nodeTypes:a,edgeTypes:l,connectionLineType:K,connectionLineStyle:O,connectionLineComponent:W,connectionLineContainerStyle:Z,selectionKeyCode:ie,selectionOnDrag:te,selectionMode:re,deleteKeyCode:Q,multiSelectionKeyCode:_e,panActivationKeyCode:ue,zoomActivationKeyCode:ce,onlyRenderVisibleElements:je,defaultViewport:Et,translateExtent:Ye,minZoom:be,maxZoom:ke,preventScrolling:yt,zoomOnScroll:er,zoomOnPinch:qt,zoomOnDoubleClick:ln,panOnScroll:Ht,panOnScrollSpeed:Kr,panOnScrollMode:Gt,panOnDrag:Wn,onPaneClick:fn,onPaneMouseEnter:oo,onPaneMouseMove:Yo,onPaneMouseLeave:jo,onPaneScroll:ui,onPaneContextMenu:Dl,paneClickDistance:Ao,nodeClickDistance:xs,onSelectionContextMenu:F,onSelectionStart:q,onSelectionEnd:G,onReconnect:zc,onReconnectStart:Pl,onReconnectEnd:lh,onEdgeContextMenu:ks,onEdgeDoubleClick:tu,onEdgeMouseEnter:Xo,onEdgeMouseMove:Tc,onEdgeMouseLeave:_s,reconnectRadius:ru,defaultMarkerColor:Tr,noDragClassName:Mr,noWheelClassName:Pn,noPanClassName:Do,rfId:ee,disableKeyboardA11y:pi,nodeExtent:xt,viewport:Cs,onViewportChange:$s}),y.jsx(aSe,{nodes:e,edges:r,defaultNodes:n,defaultEdges:o,onConnect:m,onConnectStart:v,onConnectEnd:w,onClickConnectStart:x,onClickConnectEnd:k,nodesDraggable:Je,autoPanOnNodeFocus:st,nodesConnectable:Le,nodesFocusable:St,edgesFocusable:qe,edgesReconnectable:Xe,elementsSelectable:It,elevateNodesOnSelect:za,elevateEdgesOnSelect:Ta,minZoom:be,maxZoom:ke,nodeExtent:xt,onNodesChange:Ss,onEdgesChange:Ko,snapToGrid:pe,snapGrid:xe,connectionMode:Y,translateExtent:Ye,connectOnClick:sh,defaultEdgeOptions:Nl,fitView:Ml,fitViewOptions:jc,onNodesDelete:I,onEdgesDelete:N,onDelete:L,onNodeDragStart:A,onNodeDrag:z,onNodeDragStop:j,onSelectionDrag:V,onSelectionDragStart:P,onSelectionDragStop:B,onMove:u,onMoveStart:p,onMoveEnd:f,noPanClassName:Do,nodeOrigin:Ve,rfId:ee,autoPanOnConnect:ho,autoPanOnNodeDrag:Wr,autoPanSpeed:Ac,onError:ja,connectionRadius:Dc,isValidConnection:Fi,selectNodesOnDrag:Be,nodeDragThreshold:ou,connectionDragThreshold:ch,onBeforeDelete:U,debug:dh,ariaLabelConfig:au,zIndexMode:Da}),y.jsx(rSe,{onSelectionChange:H}),ws,y.jsx(Z9e,{proOptions:Ra,position:Li}),y.jsx(K9e,{rfId:ee,disableKeyboardA11y:pi})]})})}var zEe=NV(REe);const TEe=e=>e.domNode?.querySelector(".react-flow__edgelabel-renderer");function yq({children:e}){const r=Dt(TEe);return r?Va.createPortal(e,r):null}function jEe({dimensions:e,lineWidth:r,variant:n,className:o}){return y.jsx("path",{strokeWidth:r,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:dn(["react-flow__background-pattern",n,o])})}function AEe({radius:e,className:r}){return y.jsx("circle",{cx:e,cy:e,r:e,className:dn(["react-flow__background-pattern","dots",r])})}var Qa;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Qa||(Qa={}));const DEe={[Qa.Dots]:1,[Qa.Lines]:1,[Qa.Cross]:6},PEe=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function vq({id:e,variant:r=Qa.Dots,gap:n=20,size:o,lineWidth:i=1,offset:a=0,color:l,bgColor:s,style:c,className:d,patternClassName:u}){const p=S.useRef(null),{transform:f,patternId:m}=Dt(PEe,jr),v=o||DEe[r],w=r===Qa.Dots,x=r===Qa.Cross,k=Array.isArray(n)?n:[n,n],C=[k[0]*f[2]||1,k[1]*f[2]||1],_=v*f[2],$=Array.isArray(a)?a:[a,a],R=x?[_,_]:C,T=[$[0]*f[2]||1+R[0]/2,$[1]*f[2]||1+R[1]/2],A=`${m}${e||""}`;return y.jsxs("svg",{className:dn(["react-flow__background",d]),style:{...c,...ow,"--xy-background-color-props":s,"--xy-background-pattern-color-props":l},ref:p,"data-testid":"rf__background",children:[y.jsx("pattern",{id:A,x:f[0]%C[0],y:f[1]%C[1],width:C[0],height:C[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${T[0]},-${T[1]})`,children:w?y.jsx(AEe,{radius:_/2,className:u}):y.jsx(jEe,{dimensions:R,lineWidth:i,variant:r,className:u})}),y.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${A})`})]})}vq.displayName="Background";const bq=S.memo(vq);function MEe(){return y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:y.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function NEe(){return y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:y.jsx("path",{d:"M0 0h32v4.2H0z"})})}function BEe(){return y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:y.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function IEe(){return y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:y.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function OEe(){return y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:y.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function sw({children:e,className:r,...n}){return y.jsx("button",{type:"button",className:dn(["react-flow__controls-button",r]),...n,children:e})}const LEe=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function xq({style:e,showZoom:r=!0,showFitView:n=!0,showInteractive:o=!0,fitViewOptions:i,onZoomIn:a,onZoomOut:l,onFitView:s,onInteractiveChange:c,className:d,children:u,position:p="bottom-left",orientation:f="vertical","aria-label":m}){const v=vr(),{isInteractive:w,minZoomReached:x,maxZoomReached:k,ariaLabelConfig:C}=Dt(LEe,jr),{zoomIn:_,zoomOut:$,fitView:R}=pf(),T=()=>{_(),a?.()},A=()=>{$(),l?.()},z=()=>{R(i),s?.()},j=()=>{v.setState({nodesDraggable:!w,nodesConnectable:!w,elementsSelectable:!w}),c?.(!w)};return y.jsxs(sd,{className:dn(["react-flow__controls",f==="horizontal"?"horizontal":"vertical",d]),position:p,style:e,"data-testid":"rf__controls","aria-label":m??C["controls.ariaLabel"],children:[r&&y.jsxs(y.Fragment,{children:[y.jsx(sw,{onClick:T,className:"react-flow__controls-zoomin",title:C["controls.zoomIn.ariaLabel"],"aria-label":C["controls.zoomIn.ariaLabel"],disabled:k,children:y.jsx(MEe,{})}),y.jsx(sw,{onClick:A,className:"react-flow__controls-zoomout",title:C["controls.zoomOut.ariaLabel"],"aria-label":C["controls.zoomOut.ariaLabel"],disabled:x,children:y.jsx(NEe,{})})]}),n&&y.jsx(sw,{className:"react-flow__controls-fitview",onClick:z,title:C["controls.fitView.ariaLabel"],"aria-label":C["controls.fitView.ariaLabel"],children:y.jsx(BEe,{})}),o&&y.jsx(sw,{className:"react-flow__controls-interactive",onClick:j,title:C["controls.interactive.ariaLabel"],"aria-label":C["controls.interactive.ariaLabel"],children:w?y.jsx(OEe,{}):y.jsx(IEe,{})}),u]})}xq.displayName="Controls",S.memo(xq);function FEe({id:e,x:r,y:n,width:o,height:i,style:a,color:l,strokeColor:s,strokeWidth:c,className:d,borderRadius:u,shapeRendering:p,selected:f,onClick:m}){const{background:v,backgroundColor:w}=a||{},x=l||v||w;return y.jsx("rect",{className:dn(["react-flow__minimap-node",{selected:f},d]),x:r,y:n,rx:u,ry:u,width:o,height:i,style:{fill:x,stroke:s,strokeWidth:c},shapeRendering:p,onClick:m?k=>m(k,e):void 0})}const VEe=S.memo(FEe),qEe=e=>e.nodes.map(r=>r.id),t9=e=>e instanceof Function?e:()=>e;function HEe({nodeStrokeColor:e,nodeColor:r,nodeClassName:n="",nodeBorderRadius:o=5,nodeStrokeWidth:i,nodeComponent:a=VEe,onClick:l}){const s=Dt(qEe,jr),c=t9(r),d=t9(e),u=t9(n),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return y.jsx(y.Fragment,{children:s.map(f=>y.jsx(WEe,{id:f,nodeColorFunc:c,nodeStrokeColorFunc:d,nodeClassNameFunc:u,nodeBorderRadius:o,nodeStrokeWidth:i,NodeComponent:a,onClick:l,shapeRendering:p},f))})}function UEe({id:e,nodeColorFunc:r,nodeStrokeColorFunc:n,nodeClassNameFunc:o,nodeBorderRadius:i,nodeStrokeWidth:a,shapeRendering:l,NodeComponent:s,onClick:c}){const{node:d,x:u,y:p,width:f,height:m}=Dt(v=>{const{internals:w}=v.nodeLookup.get(e),x=w.userNode,{x:k,y:C}=w.positionAbsolute,{width:_,height:$}=_o(x);return{node:x,x:k,y:C,width:_,height:$}},jr);return!d||d.hidden||!AF(d)?null:y.jsx(s,{x:u,y:p,width:f,height:m,style:d.style,selected:!!d.selected,className:o(d),color:r(d),borderRadius:i,strokeColor:n(d),strokeWidth:a,shapeRendering:l,onClick:c,id:d.id})}const WEe=S.memo(UEe);var GEe=S.memo(HEe);const YEe=200,XEe=150,KEe=e=>!e.hidden,ZEe=e=>{const r={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:r,boundingRect:e.nodeLookup.size>0?TF(nf(e.nodeLookup,{filter:KEe}),r):r,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},QEe="react-flow__minimap-desc";function wq({style:e,className:r,nodeStrokeColor:n,nodeColor:o,nodeClassName:i="",nodeBorderRadius:a=5,nodeStrokeWidth:l,nodeComponent:s,bgColor:c,maskColor:d,maskStrokeColor:u,maskStrokeWidth:p,position:f="bottom-right",onClick:m,onNodeClick:v,pannable:w=!1,zoomable:x=!1,ariaLabel:k,inversePan:C,zoomStep:_=1,offsetScale:$=5}){const R=vr(),T=S.useRef(null),{boundingRect:A,viewBB:z,rfId:j,panZoom:I,translateExtent:N,flowWidth:L,flowHeight:H,ariaLabelConfig:P}=Dt(ZEe,jr),V=e?.width??YEe,B=e?.height??XEe,F=A.width/V,q=A.height/B,G=Math.max(F,q),U=G*V,Y=G*B,K=$*G,O=A.x-(U-A.width)/2-K,W=A.y-(Y-A.height)/2-K,Z=U+K*2,Q=Y+K*2,ie=`${QEe}-${j}`,te=S.useRef(0),re=S.useRef();te.current=G,S.useEffect(()=>{if(T.current&&I)return re.current=b9e({domNode:T.current,panZoom:I,getTransform:()=>R.getState().transform,getViewScale:()=>te.current}),()=>{re.current?.destroy()}},[I]),S.useEffect(()=>{re.current?.update({translateExtent:N,width:L,height:H,inversePan:C,pannable:w,zoomStep:_,zoomable:x})},[w,x,C,_,N,L,H]);const ue=m?pe=>{const[xe,je]=re.current?.pointer(pe)||[0,0];m(pe,{x:xe,y:je})}:void 0,_e=v?S.useCallback((pe,xe)=>{const je=R.getState().nodeLookup.get(xe).internals.userNode;v(pe,je)},[]):void 0,ce=k??P["minimap.ariaLabel"];return y.jsx(sd,{position:f,style:{...e,"--xy-minimap-background-color-props":typeof c=="string"?c:void 0,"--xy-minimap-mask-background-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-stroke-color-props":typeof u=="string"?u:void 0,"--xy-minimap-mask-stroke-width-props":typeof p=="number"?p*G:void 0,"--xy-minimap-node-background-color-props":typeof o=="string"?o:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof l=="number"?l:void 0},className:dn(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:y.jsxs("svg",{width:V,height:B,viewBox:`${O} ${W} ${Z} ${Q}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ie,ref:T,onClick:ue,children:[ce&&y.jsx("title",{id:ie,children:ce}),y.jsx(GEe,{onClick:_e,nodeColor:o,nodeStrokeColor:n,nodeBorderRadius:a,nodeClassName:i,nodeStrokeWidth:l,nodeComponent:s}),y.jsx("path",{className:"react-flow__minimap-mask",d:`M${O-K},${W-K}h${Z+K*2}v${Q+K*2}h${-Z-K*2}z - M${z.x},${z.y}h${z.width}v${z.height}h${-z.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}wq.displayName="MiniMap",S.memo(wq);const JEe=e=>r=>e?`${Math.max(1/r.transform[2],1)}`:void 0,eCe={[df.Line]:"right",[df.Handle]:"bottom-right"};function tCe({nodeId:e,position:r,variant:n=df.Handle,className:o,style:i=void 0,children:a,color:l,minWidth:s=10,minHeight:c=10,maxWidth:d=Number.MAX_VALUE,maxHeight:u=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:f,autoScale:m=!0,shouldResize:v,onResizeStart:w,onResize:x,onResizeEnd:k}){const C=e9(),_=typeof e=="string"?e:C,$=vr(),R=S.useRef(null),T=n===df.Handle,A=Dt(S.useCallback(JEe(T&&m),[T,m]),jr),z=S.useRef(null),j=r??eCe[n];S.useEffect(()=>{if(!(!R.current||!_))return z.current||(z.current=D9e({domNode:R.current,nodeId:_,getStoreItems:()=>{const{nodeLookup:N,transform:L,snapGrid:H,snapToGrid:P,nodeOrigin:V,domNode:B}=$.getState();return{nodeLookup:N,transform:L,snapGrid:H,snapToGrid:P,nodeOrigin:V,paneDomNode:B}},onChange:(N,L)=>{const{triggerNodeChanges:H,nodeLookup:P,parentLookup:V,nodeOrigin:B}=$.getState(),F=[],q={x:N.x,y:N.y},G=P.get(_);if(G&&G.expandParent&&G.parentId){const U=G.origin??B,Y=N.width??G.measured.width??0,K=N.height??G.measured.height??0,O={id:G.id,parentId:G.parentId,rect:{width:Y,height:K,...DF({x:N.x??G.position.x,y:N.y??G.position.y},{width:Y,height:K},G.parentId,P,U)}},W=q7([O],P,V,B);F.push(...W),q.x=N.x?Math.max(U[0]*Y,N.x):void 0,q.y=N.y?Math.max(U[1]*K,N.y):void 0}if(q.x!==void 0&&q.y!==void 0){const U={id:_,type:"position",position:{...q}};F.push(U)}if(N.width!==void 0&&N.height!==void 0){const U={id:_,type:"dimensions",resizing:!0,setAttributes:f?f==="horizontal"?"width":"height":!0,dimensions:{width:N.width,height:N.height}};F.push(U)}for(const U of L){const Y={...U,type:"position"};F.push(Y)}H(F)},onEnd:({width:N,height:L})=>{const H={id:_,type:"dimensions",resizing:!1,dimensions:{width:N,height:L}};$.getState().triggerNodeChanges([H])}})),z.current.update({controlPosition:j,boundaries:{minWidth:s,minHeight:c,maxWidth:d,maxHeight:u},keepAspectRatio:p,resizeDirection:f,onResizeStart:w,onResize:x,onResizeEnd:k,shouldResize:v}),()=>{z.current?.destroy()}},[j,s,c,d,u,p,w,x,k,v]);const I=j.split("-");return y.jsx("div",{className:dn(["react-flow__resize-control","nodrag",...I,n,o]),ref:R,style:{...i,scale:A,...l&&{[T?"backgroundColor":"borderColor"]:l}},children:a})}S.memo(tCe);const rCe=e=>e.domNode?.querySelector(".react-flow__renderer");function nCe({children:e}){const r=Dt(rCe);return r?Va.createPortal(e,r):null}const oCe=(e,r)=>e?.internals.positionAbsolute.x!==r?.internals.positionAbsolute.x||e?.internals.positionAbsolute.y!==r?.internals.positionAbsolute.y||e?.measured.width!==r?.measured.width||e?.measured.height!==r?.measured.height||e?.selected!==r?.selected||e?.internals.z!==r?.internals.z,iCe=(e,r)=>{if(e.size!==r.size)return!1;for(const[n,o]of e)if(oCe(o,r.get(n)))return!1;return!0},aCe=e=>({x:e.transform[0],y:e.transform[1],zoom:e.transform[2],selectedNodesCount:e.nodes.filter(r=>r.selected).length});function r9({nodeId:e,children:r,className:n,style:o,isVisible:i,position:a=Ue.Top,offset:l=10,align:s="center",...c}){const d=e9(),u=S.useCallback($=>(Array.isArray(e)?e:[e||d||""]).reduce((R,T)=>{const A=$.nodeLookup.get(T);return A&&R.set(A.id,A),R},new Map),[e,d]),p=Dt(u,iCe),{x:f,y:m,zoom:v,selectedNodesCount:w}=Dt(aCe,jr);if(!(typeof i=="boolean"?i:p.size===1&&p.values().next().value?.selected&&w===1)||!p.size)return null;const x=nf(p),k=Array.from(p.values()),C=Math.max(...k.map($=>$.internals.z+1)),_={position:"absolute",transform:r9e(x,{x:f,y:m,zoom:v},a,l,s),zIndex:C,...o};return y.jsx(nCe,{children:y.jsx("div",{style:_,className:dn(["react-flow__node-toolbar",n]),...c,"data-id":k.reduce(($,R)=>`${$}${R.id} `,"").trim(),children:r})})}const{getOwnPropertyNames:lCe,getOwnPropertySymbols:sCe}=Object,{hasOwnProperty:cCe}=Object.prototype;function n9(e,r){return function(n,o,i){return e(n,o,i)&&r(n,o,i)}}function cw(e){return function(r,n,o){if(!r||!n||typeof r!="object"||typeof n!="object")return e(r,n,o);const{cache:i}=o,a=i.get(r),l=i.get(n);if(a&&l)return a===n&&l===r;i.set(r,n),i.set(n,r);const s=e(r,n,o);return i.delete(r),i.delete(n),s}}function dCe(e){return e?.[Symbol.toStringTag]}function kq(e){return lCe(e).concat(sCe(e))}const uCe=Object.hasOwn||((e,r)=>cCe.call(e,r));function Ju(e,r){return e===r||!e&&!r&&e!==e&&r!==r}const pCe="__v",hCe="__o",fCe="_owner",{getOwnPropertyDescriptor:_q,keys:Sq}=Object;function gCe(e,r){return e.byteLength===r.byteLength&&dw(new Uint8Array(e),new Uint8Array(r))}function mCe(e,r,n){let o=e.length;if(r.length!==o)return!1;for(;o-- >0;)if(!n.equals(e[o],r[o],o,o,e,r,n))return!1;return!0}function yCe(e,r){return e.byteLength===r.byteLength&&dw(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function vCe(e,r){return Ju(e.getTime(),r.getTime())}function bCe(e,r){return e.name===r.name&&e.message===r.message&&e.cause===r.cause&&e.stack===r.stack}function xCe(e,r){return e===r}function Eq(e,r,n){const o=e.size;if(o!==r.size)return!1;if(!o)return!0;const i=new Array(o),a=e.entries();let l,s,c=0;for(;(l=a.next())&&!l.done;){const d=r.entries();let u=!1,p=0;for(;(s=d.next())&&!s.done;){if(i[p]){p++;continue}const f=l.value,m=s.value;if(n.equals(f[0],m[0],c,p,e,r,n)&&n.equals(f[1],m[1],f[0],m[0],e,r,n)){u=i[p]=!0;break}p++}if(!u)return!1;c++}return!0}const wCe=Ju;function kCe(e,r,n){const o=Sq(e);let i=o.length;if(Sq(r).length!==i)return!1;for(;i-- >0;)if(!$q(e,r,n,o[i]))return!1;return!0}function K1(e,r,n){const o=kq(e);let i=o.length;if(kq(r).length!==i)return!1;let a,l,s;for(;i-- >0;)if(a=o[i],!$q(e,r,n,a)||(l=_q(e,a),s=_q(r,a),(l||s)&&(!l||!s||l.configurable!==s.configurable||l.enumerable!==s.enumerable||l.writable!==s.writable)))return!1;return!0}function _Ce(e,r){return Ju(e.valueOf(),r.valueOf())}function SCe(e,r){return e.source===r.source&&e.flags===r.flags}function Cq(e,r,n){const o=e.size;if(o!==r.size)return!1;if(!o)return!0;const i=new Array(o),a=e.values();let l,s;for(;(l=a.next())&&!l.done;){const c=r.values();let d=!1,u=0;for(;(s=c.next())&&!s.done;){if(!i[u]&&n.equals(l.value,s.value,l.value,s.value,e,r,n)){d=i[u]=!0;break}u++}if(!d)return!1}return!0}function dw(e,r){let n=e.byteLength;if(r.byteLength!==n||e.byteOffset!==r.byteOffset)return!1;for(;n-- >0;)if(e[n]!==r[n])return!1;return!0}function ECe(e,r){return e.hostname===r.hostname&&e.pathname===r.pathname&&e.protocol===r.protocol&&e.port===r.port&&e.hash===r.hash&&e.username===r.username&&e.password===r.password}function $q(e,r,n,o){return(o===fCe||o===hCe||o===pCe)&&(e.$$typeof||r.$$typeof)?!0:uCe(r,o)&&n.equals(e[o],r[o],o,o,e,r,n)}const CCe="[object ArrayBuffer]",$Ce="[object Arguments]",RCe="[object Boolean]",zCe="[object DataView]",TCe="[object Date]",jCe="[object Error]",ACe="[object Map]",DCe="[object Number]",PCe="[object Object]",MCe="[object RegExp]",NCe="[object Set]",BCe="[object String]",ICe={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},OCe="[object URL]",LCe=Object.prototype.toString;function FCe({areArrayBuffersEqual:e,areArraysEqual:r,areDataViewsEqual:n,areDatesEqual:o,areErrorsEqual:i,areFunctionsEqual:a,areMapsEqual:l,areNumbersEqual:s,areObjectsEqual:c,arePrimitiveWrappersEqual:d,areRegExpsEqual:u,areSetsEqual:p,areTypedArraysEqual:f,areUrlsEqual:m,unknownTagComparators:v}){return function(w,x,k){if(w===x)return!0;if(w==null||x==null)return!1;const C=typeof w;if(C!==typeof x)return!1;if(C!=="object")return C==="number"?s(w,x,k):C==="function"?a(w,x,k):!1;const _=w.constructor;if(_!==x.constructor)return!1;if(_===Object)return c(w,x,k);if(Array.isArray(w))return r(w,x,k);if(_===Date)return o(w,x,k);if(_===RegExp)return u(w,x,k);if(_===Map)return l(w,x,k);if(_===Set)return p(w,x,k);const $=LCe.call(w);if($===TCe)return o(w,x,k);if($===MCe)return u(w,x,k);if($===ACe)return l(w,x,k);if($===NCe)return p(w,x,k);if($===PCe)return typeof w.then!="function"&&typeof x.then!="function"&&c(w,x,k);if($===OCe)return m(w,x,k);if($===jCe)return i(w,x,k);if($===$Ce)return c(w,x,k);if(ICe[$])return f(w,x,k);if($===CCe)return e(w,x,k);if($===zCe)return n(w,x,k);if($===RCe||$===DCe||$===BCe)return d(w,x,k);if(v){let R=v[$];if(!R){const T=dCe(w);T&&(R=v[T])}if(R)return R(w,x,k)}return!1}}function VCe({circular:e,createCustomConfig:r,strict:n}){let o={areArrayBuffersEqual:gCe,areArraysEqual:n?K1:mCe,areDataViewsEqual:yCe,areDatesEqual:vCe,areErrorsEqual:bCe,areFunctionsEqual:xCe,areMapsEqual:n?n9(Eq,K1):Eq,areNumbersEqual:wCe,areObjectsEqual:n?K1:kCe,arePrimitiveWrappersEqual:_Ce,areRegExpsEqual:SCe,areSetsEqual:n?n9(Cq,K1):Cq,areTypedArraysEqual:n?n9(dw,K1):dw,areUrlsEqual:ECe,unknownTagComparators:void 0};if(r&&(o=Object.assign({},o,r(o))),e){const i=cw(o.areArraysEqual),a=cw(o.areMapsEqual),l=cw(o.areObjectsEqual),s=cw(o.areSetsEqual);o=Object.assign({},o,{areArraysEqual:i,areMapsEqual:a,areObjectsEqual:l,areSetsEqual:s})}return o}function qCe(e){return function(r,n,o,i,a,l,s){return e(r,n,s)}}function HCe({circular:e,comparator:r,createState:n,equals:o,strict:i}){if(n)return function(l,s){const{cache:c=e?new WeakMap:void 0,meta:d}=n();return r(l,s,{cache:c,equals:o,meta:d,strict:i})};if(e)return function(l,s){return r(l,s,{cache:new WeakMap,equals:o,meta:void 0,strict:i})};const a={cache:void 0,equals:o,meta:void 0,strict:i};return function(l,s){return r(l,s,a)}}const tt=cd();cd({strict:!0}),cd({circular:!0}),cd({circular:!0,strict:!0});const Ir=cd({createInternalComparator:()=>Ju});cd({strict:!0,createInternalComparator:()=>Ju}),cd({circular:!0,createInternalComparator:()=>Ju}),cd({circular:!0,createInternalComparator:()=>Ju,strict:!0});function cd(e={}){const{circular:r=!1,createInternalComparator:n,createState:o,strict:i=!1}=e,a=VCe(e),l=FCe(a),s=n?n(l):qCe(l);return HCe({circular:r,comparator:l,createState:o,equals:s,strict:i})}function UCe(e,r,n){let o=i=>e(i,...r);return n===void 0?o:Object.assign(o,{lazy:n,lazyArgs:r})}function nr(e,r,n){let o=e.length-r.length;if(o===0)return e(...r);if(o===1)return UCe(e,r,n);throw Error("Wrong number of arguments")}const WCe=e=>(r,n)=>{if(n===0)return e(r);if(!Number.isInteger(n))throw TypeError(`precision must be an integer: ${n.toString()}`);if(n>15||n<-15)throw RangeError("precision must be between -15 and 15");if(Number.isNaN(r)||!Number.isFinite(r))return e(r);let o=Rq(r,n),i=e(o);return Rq(i,-n)};function Rq(e,r){let[n,o]=e.toString().split("e"),i=(o===void 0?0:Number.parseInt(o,10))+r,a=`${n}e${i.toString()}`;return Number.parseFloat(a)}function GCe(...e){return nr(WCe(Math.ceil),e)}function ta(...e){return nr(YCe,e)}const YCe=(e,{min:r,max:n})=>r!==void 0&&en?n:e;function XCe(...e){return nr(KCe,e)}const KCe=(e,r)=>[...e,...r],Z1={done:!1,hasNext:!1},ZCe=e=>({hasNext:!0,next:e,done:!1});function Jr(e,...r){let n=e,o=r.map(a=>"lazy"in a?QCe(a):void 0),i=0;for(;iJr(i,o),o)}throw Error("Wrong number of arguments")}function e$e(...e){return Tq(t$e,e)}function t$e(e){if(e.length===0)return ZCe;let r=new Map;for(let n of e)r.set(n,(r.get(n)??0)+1);return n=>{let o=r.get(n);return o===void 0||o===0?{done:!1,hasNext:!0,next:n}:(r.set(n,o-1),Z1)}}function xn(...e){return nr(r$e,e)}const r$e=(e,r)=>e.length>=r,jq={asc:(e,r)=>e>r,desc:(e,r)=>ee(a,i)}function o9(e,r,...n){let o=typeof e=="function"?e:e[0],i=typeof e=="function"?"asc":e[1],{[i]:a}=jq,l=r===void 0?void 0:o9(r,...n);return(s,c)=>{let d=o(s),u=o(c);return a(d,u)?1:a(u,d)?-1:l?.(s,c)??0}}function o$e(e){if(Aq(e))return!0;if(typeof e!="object"||!Array.isArray(e))return!1;let[r,n,...o]=e;return Aq(r)&&typeof n=="string"&&n in jq&&o.length===0}const Aq=e=>typeof e=="function"&&e.length===1;function uw(...e){return nr(Object.entries,e)}function ep(...e){return nr(i$e,e,a$e)}const i$e=(e,r)=>e.filter(r),a$e=e=>(r,n,o)=>e(r,n,o)?{done:!1,hasNext:!0,next:r}:Z1,Dq=e=>Object.assign(e,{single:!0});function Q1(...e){return nr(l$e,e,Dq(s$e))}const l$e=(e,r)=>e.find(r),s$e=e=>(r,n,o)=>e(r,n,o)?{done:!0,hasNext:!0,next:r}:Z1;function hf(...e){return nr(c$e,e,Dq(d$e))}const c$e=([e])=>e,d$e=()=>u$e,u$e=e=>({hasNext:!0,next:e,done:!0});function Pq(...e){return nr(p$e,e,h$e)}const p$e=(e,r)=>e.flatMap(r),h$e=e=>(r,n,o)=>{let i=e(r,n,o);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}};function f$e(...e){return nr(g$e,e)}function g$e(e,r){for(let[n,o]of Object.entries(e))r(o,n,e);return e}function m$e(...e){return nr(y$e,e)}const y$e=(e,r)=>{let n=Object.create(null);for(let o=0;otypeof e=="function";function _$e(e){return e!==null}function Bq(e){return e!=null}function S$e(e){return r=>!e(r)}function ty(e){return e==null}function Iq(e){return typeof e=="number"&&!Number.isNaN(e)}function a9(e){if(typeof e!="object"||!e)return!1;let r=Object.getPrototypeOf(e);return r===null||r===Object.prototype}function Oq(...e){return nr(E$e,e)}function E$e(e,r){if(e===r||Object.is(e,r))return!0;if(typeof e!="object"||!e||typeof r!="object"||!r)return!1;if(e instanceof Map&&r instanceof Map)return C$e(e,r);if(e instanceof Set&&r instanceof Set)return $$e(e,r);let n=Object.keys(e);if(n.length!==Object.keys(r).length)return!1;for(let o of n){if(!Object.hasOwn(r,o))return!1;let{[o]:i}=e,{[o]:a}=r;if(i!==a||!Object.is(i,a))return!1}return!0}function C$e(e,r){if(e.size!==r.size)return!1;for(let[n,o]of e){let i=r.get(n);if(o!==i||!Object.is(o,i))return!1}return!0}function $$e(e,r){if(e.size!==r.size)return!1;for(let n of e)if(!r.has(n))return!1;return!0}function pw(e){return typeof e=="string"}function Zn(e){return!!e}function Lq(...e){return nr(R$e,e)}const R$e=(e,r)=>e.join(r);function l9(...e){return nr(Object.keys,e)}function dd(...e){return nr(z$e,e)}const z$e=e=>e.at(-1);function un(...e){return nr(T$e,e,j$e)}const T$e=(e,r)=>e.map(r),j$e=e=>(r,n,o)=>({done:!1,hasNext:!0,next:e(r,n,o)});function hw(...e){return nr(A$e,e)}function A$e(e,r){let n={};for(let[o,i]of e.entries()){let[a,l]=r(i,o,e);n[a]=l}return n}function D$e(...e){return nr(P$e,e)}function P$e(e,r){let n={};for(let[o,i]of Object.entries(e))n[o]=r(i,o,e);return n}function Fq(...e){return nr(Vq,e)}function Vq(e,r){let n={...e,...r};for(let o in r){if(!(o in e))continue;let{[o]:i}=e;if(!a9(i))continue;let{[o]:a}=r;a9(a)&&(n[o]=Vq(i,a))}return n}function ud(...e){return nr(M$e,e)}function M$e(e,r){if(!xn(r,1))return{...e};if(!xn(r,2)){let{[r[0]]:o,...i}=e;return i}let n={...e};for(let o of r)delete n[o];return n}function N$e(...e){return nr(B$e,e)}function B$e(e,r){let n={...e};for(let[o,i]of Object.entries(n))r(i,o,e)&&delete n[o];return n}function fw(...e){return nr(I$e,e)}const I$e=e=>e.length===1?e[0]:void 0;function qq(...e){return nr(O$e,e)}const O$e=(e,r)=>{let n=[[],[]];for(let[o,i]of e.entries())r(i,o,e)?n[0].push(i):n[1].push(i);return n};function Hq(...e){return nr(L$e,e)}function L$e(e,r){let n={};for(let o of r)o in e&&(n[o]=e[o]);return n}function ry(...e){return nr(F$e,e)}function F$e(e,r){let n={};for(let[o,i]of Object.entries(e))r(i,o,e)&&(n[o]=i);return n}function rp(e,...r){return typeof e=="string"||typeof e=="number"||typeof e=="symbol"?n=>Uq(n,e,...r):Uq(e,...r)}function Uq(e,...r){let n=e;for(let o of r){if(n==null)return;n=n[o]}return n}function V$e(...e){return nr(q$e,e)}function q$e(e,r){let n=[];for(let o=e;oe.reduce(r,n);function U$e(...e){return nr(W$e,e)}function W$e(e){return[...e].reverse()}function G$e(...e){return nr(Y$e,e)}function Y$e(e,r){let n=[...e];return n.sort(r),n}function mw(...e){return n$e(X$e,e)}const X$e=(e,r)=>[...e].sort(r);function Wq(...e){return nr(K$e,e)}function K$e(e,r){return r(e),e}function yw(...e){return Tq(Z$e,e)}function Z$e(){let e=new Set;return r=>e.has(r)?Z1:(e.add(r),{done:!1,hasNext:!0,next:r})}let Ja=[],pd=0;const vw=4,Q$e=e=>{let r=[],n={get(){return n.lc||n.listen(()=>{})(),n.value},lc:0,listen(o){return n.lc=r.push(o),()=>{for(let a=pd+vw;a"u")return gRe;var r=mRe(e),n=document.documentElement.clientWidth,o=window.innerWidth;return{left:r[0],top:r[1],right:r[2],gap:Math.max(0,o-n+r[2]-r[0])}},vRe=Zq(),ff="data-scroll-locked",bRe=function(e,r,n,o){var i=e.left,a=e.top,l=e.right,s=e.gap;return n===void 0&&(n="margin"),` - .`.concat(eRe,` { - overflow: hidden `).concat(o,`; - padding-right: `).concat(s,"px ").concat(o,`; - } - body[`).concat(ff,`] { - overflow: hidden `).concat(o,`; - overscroll-behavior: contain; - `).concat([r&&"position: relative ".concat(o,";"),n==="margin"&&` - padding-left: `.concat(i,`px; - padding-top: `).concat(a,`px; - padding-right: `).concat(l,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(s,"px ").concat(o,`; - `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(o,";")].filter(Boolean).join(""),` - } - - .`).concat(bw,` { - right: `).concat(s,"px ").concat(o,`; - } - - .`).concat(xw,` { - margin-right: `).concat(s,"px ").concat(o,`; - } - - .`).concat(bw," .").concat(bw,` { - right: 0 `).concat(o,`; - } - - .`).concat(xw," .").concat(xw,` { - margin-right: 0 `).concat(o,`; - } - - body[`).concat(ff,`] { - `).concat(tRe,": ").concat(s,`px; - } -`)},Qq=function(){var e=parseInt(document.body.getAttribute(ff)||"0",10);return isFinite(e)?e:0},xRe=function(){S.useEffect(function(){return document.body.setAttribute(ff,(Qq()+1).toString()),function(){var e=Qq()-1;e<=0?document.body.removeAttribute(ff):document.body.setAttribute(ff,e.toString())}},[])},wRe=function(e){var r=e.noRelative,n=e.noImportant,o=e.gapMode,i=o===void 0?"margin":o;xRe();var a=S.useMemo(function(){return yRe(i)},[i]);return S.createElement(vRe,{styles:bRe(a,!r,i,n?"":"!important")})},u9=!1;if(typeof window<"u")try{var kw=Object.defineProperty({},"passive",{get:function(){return u9=!0,!0}});window.addEventListener("test",kw,kw),window.removeEventListener("test",kw,kw)}catch{u9=!1}var gf=u9?{passive:!1}:!1,kRe=function(e){return e.tagName==="TEXTAREA"},Jq=function(e,r){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[r]!=="hidden"&&!(n.overflowY===n.overflowX&&!kRe(e)&&n[r]==="visible")},_Re=function(e){return Jq(e,"overflowY")},SRe=function(e){return Jq(e,"overflowX")},eH=function(e,r){var n=r.ownerDocument,o=r;do{typeof ShadowRoot<"u"&&o instanceof ShadowRoot&&(o=o.host);var i=tH(e,o);if(i){var a=rH(e,o),l=a[1],s=a[2];if(l>s)return!0}o=o.parentNode}while(o&&o!==n.body);return!1},ERe=function(e){var r=e.scrollTop,n=e.scrollHeight,o=e.clientHeight;return[r,n,o]},CRe=function(e){var r=e.scrollLeft,n=e.scrollWidth,o=e.clientWidth;return[r,n,o]},tH=function(e,r){return e==="v"?_Re(r):SRe(r)},rH=function(e,r){return e==="v"?ERe(r):CRe(r)},$Re=function(e,r){return e==="h"&&r==="rtl"?-1:1},RRe=function(e,r,n,o,i){var a=$Re(e,window.getComputedStyle(r).direction),l=a*o,s=n.target,c=r.contains(s),d=!1,u=l>0,p=0,f=0;do{if(!s)break;var m=rH(e,s),v=m[0],w=m[1],x=m[2],k=w-x-a*v;(v||k)&&tH(e,s)&&(p+=k,f+=v);var C=s.parentNode;s=C&&C.nodeType===Node.DOCUMENT_FRAGMENT_NODE?C.host:C}while(!c&&s!==document.body||c&&(r.contains(s)||r===s));return(u&&Math.abs(p)<1||!u&&Math.abs(f)<1)&&(d=!0),d},_w=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},nH=function(e){return[e.deltaX,e.deltaY]},oH=function(e){return e&&"current"in e?e.current:e},zRe=function(e,r){return e[0]===r[0]&&e[1]===r[1]},TRe=function(e){return` - .block-interactivity-`.concat(e,` {pointer-events: none;} - .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},jRe=0,mf=[];function ARe(e){var r=S.useRef([]),n=S.useRef([0,0]),o=S.useRef(),i=S.useState(jRe++)[0],a=S.useState(Zq)[0],l=S.useRef(e);S.useEffect(function(){l.current=e},[e]),S.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var w=J$e([e.lockRef.current],(e.shards||[]).map(oH)).filter(Boolean);return w.forEach(function(x){return x.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),w.forEach(function(x){return x.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var s=S.useCallback(function(w,x){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!l.current.allowPinchZoom;var k=_w(w),C=n.current,_="deltaX"in w?w.deltaX:C[0]-k[0],$="deltaY"in w?w.deltaY:C[1]-k[1],R,T=w.target,A=Math.abs(_)>Math.abs($)?"h":"v";if("touches"in w&&A==="h"&&T.type==="range")return!1;var z=eH(A,T);if(!z)return!0;if(z?R=A:(R=A==="v"?"h":"v",z=eH(A,T)),!z)return!1;if(!o.current&&"changedTouches"in w&&(_||$)&&(o.current=R),!R)return!0;var j=o.current||R;return RRe(j,x,w,j==="h"?_:$)},[]),c=S.useCallback(function(w){var x=w;if(!(!mf.length||mf[mf.length-1]!==a)){var k="deltaY"in x?nH(x):_w(x),C=r.current.filter(function(R){return R.name===x.type&&(R.target===x.target||x.target===R.shadowParent)&&zRe(R.delta,k)})[0];if(C&&C.should){x.cancelable&&x.preventDefault();return}if(!C){var _=(l.current.shards||[]).map(oH).filter(Boolean).filter(function(R){return R.contains(x.target)}),$=_.length>0?s(x,_[0]):!l.current.noIsolation;$&&x.cancelable&&x.preventDefault()}}},[]),d=S.useCallback(function(w,x,k,C){var _={name:w,delta:x,target:k,should:C,shadowParent:DRe(k)};r.current.push(_),setTimeout(function(){r.current=r.current.filter(function($){return $!==_})},1)},[]),u=S.useCallback(function(w){n.current=_w(w),o.current=void 0},[]),p=S.useCallback(function(w){d(w.type,nH(w),w.target,s(w,e.lockRef.current))},[]),f=S.useCallback(function(w){d(w.type,_w(w),w.target,s(w,e.lockRef.current))},[]);S.useEffect(function(){return mf.push(a),e.setCallbacks({onScrollCapture:p,onWheelCapture:p,onTouchMoveCapture:f}),document.addEventListener("wheel",c,gf),document.addEventListener("touchmove",c,gf),document.addEventListener("touchstart",u,gf),function(){mf=mf.filter(function(w){return w!==a}),document.removeEventListener("wheel",c,gf),document.removeEventListener("touchmove",c,gf),document.removeEventListener("touchstart",u,gf)}},[]);var m=e.removeScrollBar,v=e.inert;return S.createElement(S.Fragment,null,v?S.createElement(a,{styles:TRe(i)}):null,m?S.createElement(wRe,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function DRe(e){for(var r=null;e!==null;)e instanceof ShadowRoot&&(r=e.host,e=e.host),e=e.parentNode;return r}const PRe=sRe(Kq,ARe);var ny=S.forwardRef(function(e,r){return S.createElement(ww,Yl({},e,{ref:r,sideCar:PRe}))});ny.classNames=ww.classNames;function So(e){return Object.keys(e)}function p9(e){return e&&typeof e=="object"&&!Array.isArray(e)}function h9(e,r){const n={...e},o=r;return p9(e)&&p9(r)&&Object.keys(r).forEach(i=>{p9(o[i])&&i in e?n[i]=h9(n[i],o[i]):n[i]=o[i]}),n}function MRe(e){return e.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}function NRe(e){return typeof e!="string"||!e.includes("var(--mantine-scale)")?e:e.match(/^calc\((.*?)\)$/)?.[1].split("*")[0].trim()}function f9(e){const r=NRe(e);return typeof r=="number"?r:typeof r=="string"?r.includes("calc")||r.includes("var")?r:r.includes("px")?Number(r.replace("px","")):r.includes("rem")?Number(r.replace("rem",""))*16:r.includes("em")?Number(r.replace("em",""))*16:Number(r):NaN}function iH(e){return e==="0rem"?"0rem":`calc(${e} * var(--mantine-scale))`}function aH(e,{shouldScale:r=!1}={}){function n(o){if(o===0||o==="0")return`0${e}`;if(typeof o=="number"){const i=`${o/16}${e}`;return r?iH(i):i}if(typeof o=="string"){if(o===""||o.startsWith("calc(")||o.startsWith("clamp(")||o.includes("rgba("))return o;if(o.includes(","))return o.split(",").map(a=>n(a)).join(",");if(o.includes(" "))return o.split(" ").map(a=>n(a)).join(" ");const i=o.replace("px","");if(!Number.isNaN(Number(i))){const a=`${Number(i)/16}${e}`;return r?iH(a):a}}return o}return n}const $e=aH("rem",{shouldScale:!0}),lH=aH("em");function yf(e){return Object.keys(e).reduce((r,n)=>(e[n]!==void 0&&(r[n]=e[n]),r),{})}function sH(e){if(typeof e=="number")return!0;if(typeof e=="string"){if(e.startsWith("calc(")||e.startsWith("var(")||e.includes(" ")&&e.trim()!=="")return!0;const r=/^[+-]?[0-9]+(\.[0-9]+)?(px|em|rem|ex|ch|lh|rlh|vw|vh|vmin|vmax|vb|vi|svw|svh|lvw|lvh|dvw|dvh|cm|mm|in|pt|pc|q|cqw|cqh|cqi|cqb|cqmin|cqmax|%)?$/;return e.trim().split(/\s+/).every(n=>r.test(n))}return!1}function Sw(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==S.Fragment:!1}function na(e){const r=S.createContext(null);return[({children:n,value:o})=>y.jsx(r.Provider,{value:o,children:n}),()=>{const n=S.useContext(r);if(n===null)throw new Error(e);return n}]}function oy(e=null){const r=S.createContext(e);return[({children:n,value:o})=>y.jsx(r.Provider,{value:o,children:n}),()=>S.useContext(r)]}function cH(e,r){return n=>{if(typeof n!="string"||n.trim().length===0)throw new Error(r);return`${e}-${n}`}}function vf(e,r){let n=e;for(;(n=n.parentElement)&&!n.matches(r););return n}function BRe(e,r,n){for(let o=e-1;o>=0;o-=1)if(!r[o].disabled)return o;if(n){for(let o=r.length-1;o>-1;o-=1)if(!r[o].disabled)return o}return e}function IRe(e,r,n){for(let o=e+1;o{n?.(s);const c=Array.from(vf(s.currentTarget,e)?.querySelectorAll(r)||[]).filter(v=>ORe(s.currentTarget,v,e)),d=c.findIndex(v=>s.currentTarget===v),u=IRe(d,c,o),p=BRe(d,c,o),f=a==="rtl"?p:u,m=a==="rtl"?u:p;switch(s.key){case"ArrowRight":{l==="horizontal"&&(s.stopPropagation(),s.preventDefault(),c[f].focus(),i&&c[f].click());break}case"ArrowLeft":{l==="horizontal"&&(s.stopPropagation(),s.preventDefault(),c[m].focus(),i&&c[m].click());break}case"ArrowUp":{l==="vertical"&&(s.stopPropagation(),s.preventDefault(),c[p].focus(),i&&c[p].click());break}case"ArrowDown":{l==="vertical"&&(s.stopPropagation(),s.preventDefault(),c[u].focus(),i&&c[u].click());break}case"Home":{s.stopPropagation(),s.preventDefault(),!c[0].disabled&&c[0].focus();break}case"End":{s.stopPropagation(),s.preventDefault();const v=c.length-1;!c[v].disabled&&c[v].focus();break}}}}const LRe={app:100,modal:200,popover:300,overlay:400,max:9999};function Ew(e){return LRe[e]}const dH=()=>{};function FRe(e,r={active:!0}){return typeof e!="function"||!r.active?r.onKeyDown||dH:n=>{n.key==="Escape"&&(e(n),r.onTrigger?.())}}function dr(e,r="size",n=!0){if(e!==void 0)return sH(e)?n?$e(e):e:`var(--${r}-${e})`}function Gs(e){return dr(e,"mantine-spacing")}function wn(e){return e===void 0?"var(--mantine-radius-default)":dr(e,"mantine-radius")}function Eo(e){return dr(e,"mantine-font-size")}function VRe(e){return dr(e,"mantine-line-height",!1)}function uH(e){if(e)return dr(e,"mantine-shadow",!1)}function kn(e,r){return n=>{e?.(n),r?.(n)}}function qRe(e,r){return e in r?f9(r[e]):f9(e)}function pH(e,r){const n=e.map(o=>({value:o,px:qRe(o,r)}));return n.sort((o,i)=>o.px-i.px),n}function ay(e){return typeof e=="object"&&e!==null?"base"in e?e.base:void 0:e}function HRe(e,r,n){return n?Array.from(vf(n,r)?.querySelectorAll(e)||[]).findIndex(o=>o===n):null}function hd(e,r,n){return r===void 0&&n===void 0?e:r!==void 0&&n===void 0?Math.max(e,r):Math.min(r===void 0&&n!==void 0?e:Math.max(e,r),n)}function g9(e="mantine-"){return`${e}${Math.random().toString(36).slice(2,11)}`}function URe(e,r){if(e===r||Number.isNaN(e)&&Number.isNaN(r))return!0;if(!(e instanceof Object)||!(r instanceof Object))return!1;const n=Object.keys(e),{length:o}=n;if(o!==Object.keys(r).length)return!1;for(let i=0;i{r.current=e}),S.useMemo(()=>((...n)=>r.current?.(...n)),[])}function bf(e,r){const{delay:n,flushOnUnmount:o,leading:i}=typeof r=="number"?{delay:r,flushOnUnmount:!1,leading:!1}:r,a=Qn(e),l=S.useRef(0),s=S.useMemo(()=>{const c=Object.assign((...d)=>{window.clearTimeout(l.current);const u=c._isFirstCall;c._isFirstCall=!1;function p(){window.clearTimeout(l.current),l.current=0,c._isFirstCall=!0}if(i&&u){a(...d);const v=()=>{p()},w=()=>{l.current!==0&&(p(),a(...d))},x=()=>{p()};c.flush=w,c.cancel=x,l.current=window.setTimeout(v,n);return}if(i&&!u){const v=()=>{l.current!==0&&(p(),a(...d))},w=()=>{p()};c.flush=v,c.cancel=w;const x=()=>{p()};l.current=window.setTimeout(x,n);return}const f=()=>{l.current!==0&&(p(),a(...d))},m=()=>{p()};c.flush=f,c.cancel=m,l.current=window.setTimeout(f,n)},{flush:()=>{},cancel:()=>{},_isFirstCall:!0});return c},[a,n,i]);return S.useEffect(()=>()=>{o?s.flush():s.cancel()},[s,o]),s}const WRe=["mousedown","touchstart"];function hH(e,r,n){const o=S.useRef(null),i=r||WRe;return S.useEffect(()=>{const a=l=>{const{target:s}=l??{};if(Array.isArray(n)){const c=!document.body.contains(s)&&s?.tagName!=="HTML";n.every(d=>!!d&&!l.composedPath().includes(d))&&!c&&e(l)}else o.current&&!o.current.contains(s)&&e(l)};return i.forEach(l=>document.addEventListener(l,a)),()=>{i.forEach(l=>document.removeEventListener(l,a))}},[o,e,n]),o}function GRe(e={timeout:2e3}){const[r,n]=S.useState(null),[o,i]=S.useState(!1),[a,l]=S.useState(null),s=c=>{window.clearTimeout(a),l(window.setTimeout(()=>i(!1),e.timeout)),i(c)};return{copy:c=>{"clipboard"in navigator?navigator.clipboard.writeText(c).then(()=>s(!0)).catch(d=>n(d)):n(new Error("useClipboard: navigator.clipboard is not supported"))},reset:()=>{i(!1),n(null),window.clearTimeout(a)},error:r,copied:o}}function YRe(e,r){try{return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}catch{return e.addListener(r),()=>e.removeListener(r)}}function XRe(e,r){return typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function fH(e,r,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[o,i]=S.useState(n?r:XRe(e));return S.useEffect(()=>{try{const a=window.matchMedia(e);return i(a.matches),YRe(a,l=>i(l.matches))}catch{return}},[e]),o||!1}function gH(e,r){return fH("(prefers-color-scheme: dark)",e==="dark",r)?"dark":"light"}function KRe(e,r,n={leading:!1}){const[o,i]=S.useState(e),a=S.useRef(null),l=S.useRef(!0),s=()=>window.clearTimeout(a.current);S.useEffect(()=>s,[]);const c=S.useCallback(d=>{s(),l.current&&n.leading?i(d):a.current=window.setTimeout(()=>{l.current=!0,i(d)},r),l.current=!1},[n.leading]);return[o,c]}function m9(e,r,n={leading:!1}){const[o,i]=S.useState(e),a=S.useRef(!1),l=S.useRef(null),s=S.useRef(!1),c=S.useCallback(()=>window.clearTimeout(l.current),[]);return S.useEffect(()=>{a.current&&(!s.current&&n.leading?(s.current=!0,i(e)):(c(),l.current=window.setTimeout(()=>{s.current=!1,i(e)},r)))},[e,n.leading,r]),S.useEffect(()=>(a.current=!0,c),[]),[o,c]}const xf=typeof document<"u"?S.useLayoutEffect:S.useEffect;function wf(e,r){const n=S.useRef(!1);S.useEffect(()=>()=>{n.current=!1},[]),S.useEffect(()=>{if(n.current)return e();n.current=!0},r)}function ZRe({opened:e,shouldReturnFocus:r=!0}){const n=S.useRef(null),o=()=>{n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&n.current?.focus({preventScroll:!0})};return wf(()=>{let i=-1;const a=l=>{l.key==="Tab"&&window.clearTimeout(i)};return document.addEventListener("keydown",a),e?n.current=document.activeElement:r&&(i=window.setTimeout(o,10)),()=>{window.clearTimeout(i),document.removeEventListener("keydown",a)}},[e,r]),o}const QRe=/input|select|textarea|button|object/,mH="a, input, select, textarea, button, object, [tabindex]";function JRe(e){return e.style.display==="none"}function eze(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let r=e;for(;r&&!(r===document.body||r.nodeType===11);){if(JRe(r))return!1;r=r.parentNode}return!0}function yH(e){let r=e.getAttribute("tabindex");return r===null&&(r=void 0),parseInt(r,10)}function y9(e){const r=e.nodeName.toLowerCase(),n=!Number.isNaN(yH(e));return(QRe.test(r)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&eze(e)}function vH(e){const r=yH(e);return(Number.isNaN(r)||r>=0)&&y9(e)}function tze(e){return Array.from(e.querySelectorAll(mH)).filter(vH)}function rze(e,r){const n=tze(e);if(!n.length){r.preventDefault();return}const o=n[r.shiftKey?0:n.length-1],i=e.getRootNode();let a=o===i.activeElement||e===i.activeElement;const l=i.activeElement;if(l.tagName==="INPUT"&&l.getAttribute("type")==="radio"&&(a=n.filter(c=>c.getAttribute("type")==="radio"&&c.getAttribute("name")===l.getAttribute("name")).includes(o)),!a)return;r.preventDefault();const s=n[r.shiftKey?n.length-1:0];s&&s.focus()}function bH(e=!0){const r=S.useRef(null),n=i=>{let a=i.querySelector("[data-autofocus]");if(!a){const l=Array.from(i.querySelectorAll(mH));a=l.find(vH)||l.find(y9)||null,!a&&y9(i)&&(a=i)}a&&a.focus({preventScroll:!0})},o=S.useCallback(i=>{e&&i!==null&&r.current!==i&&(i?(setTimeout(()=>{i.getRootNode()&&n(i)}),r.current=i):r.current=null)},[e]);return S.useEffect(()=>{if(!e)return;r.current&&setTimeout(()=>n(r.current));const i=a=>{a.key==="Tab"&&r.current&&rze(r.current,a)};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[e]),o}const nze=Zr.useId||(()=>{});function oze(){const e=nze();return e?`mantine-${e.replace(/:/g,"")}`:""}function oa(e){const r=oze(),[n,o]=S.useState(r);return xf(()=>{o(g9())},[]),typeof e=="string"?e:typeof window>"u"?r:n}function kf(e,r,n){S.useEffect(()=>(window.addEventListener(e,r,n),()=>window.removeEventListener(e,r,n)),[e,r])}function ize(e,r="use-local-storage"){try{return JSON.stringify(e)}catch{throw new Error(`@mantine/hooks ${r}: Failed to serialize the value`)}}function aze(e){try{return e&&JSON.parse(e)}catch{return e}}function lze(e){return{getItem:r=>{try{return window[e].getItem(r)}catch{return console.warn("use-local-storage: Failed to get value from storage, localStorage is blocked"),null}},setItem:(r,n)=>{try{window[e].setItem(r,n)}catch{console.warn("use-local-storage: Failed to set value to storage, localStorage is blocked")}},removeItem:r=>{try{window[e].removeItem(r)}catch{console.warn("use-local-storage: Failed to remove value from storage, localStorage is blocked")}}}}function xH(e,r){const n=e==="localStorage"?"mantine-local-storage":"mantine-session-storage",{getItem:o,setItem:i,removeItem:a}=lze(e);return function({key:l,defaultValue:s,getInitialValueInEffect:c=!0,sync:d=!0,deserialize:u=aze,serialize:p=f=>ize(f,r)}){const f=S.useCallback(k=>{let C;try{C=typeof window>"u"||!(e in window)||window[e]===null||!!k}catch{C=!0}if(C)return s;const _=o(l);return _!==null?u(_):s},[l,s]),[m,v]=S.useState(f(c)),w=S.useCallback(k=>{k instanceof Function?v(C=>{const _=k(C);return i(l,p(_)),queueMicrotask(()=>{window.dispatchEvent(new CustomEvent(n,{detail:{key:l,value:k(C)}}))}),_}):(i(l,p(k)),window.dispatchEvent(new CustomEvent(n,{detail:{key:l,value:k}})),v(k))},[l]),x=S.useCallback(()=>{a(l),v(s),window.dispatchEvent(new CustomEvent(n,{detail:{key:l,value:s}}))},[l,s]);return kf("storage",k=>{d&&k.storageArea===window[e]&&k.key===l&&v(u(k.newValue??void 0))}),kf(n,k=>{d&&k.detail.key===l&&v(k.detail.value)}),S.useEffect(()=>{s!==void 0&&m===void 0&&w(s)},[s,m,w]),S.useEffect(()=>{const k=f();k!==void 0&&w(k)},[l]),[m===void 0?s:m,w,x]}}function sze(e){return xH("localStorage","use-local-storage")(e)}function cze(e){return xH("sessionStorage","use-session-storage")(e)}function v9(e,r){if(typeof e=="function")return e(r);typeof e=="object"&&e!==null&&"current"in e&&(e.current=r)}function wH(...e){const r=new Map;return n=>{if(e.forEach(o=>{const i=v9(o,n);i&&r.set(o,i)}),r.size>0)return()=>{e.forEach(o=>{const i=r.get(o);i&&typeof i=="function"?i():v9(o,null)}),r.clear()}}}function $r(...e){return S.useCallback(wH(...e),e)}function dze(e){return{x:hd(e.x,0,1),y:hd(e.y,0,1)}}function kH(e,r,n="ltr"){const o=S.useRef(!1),i=S.useRef(!1),a=S.useRef(0),[l,s]=S.useState(!1),c=S.useRef(null);return S.useEffect(()=>{o.current=!0},[]),{ref:S.useCallback(d=>{if(c.current&&(c.current(),c.current=null),!d)return;const u=({x:_,y:$})=>{cancelAnimationFrame(a.current),a.current=requestAnimationFrame(()=>{if(o.current&&d){d.style.userSelect="none";const R=d.getBoundingClientRect();if(R.width&&R.height){const T=hd((_-R.left)/R.width,0,1);e({x:n==="ltr"?T:1-T,y:hd(($-R.top)/R.height,0,1)})}}})},p=()=>{document.addEventListener("mousemove",x),document.addEventListener("mouseup",v),document.addEventListener("touchmove",C,{passive:!1}),document.addEventListener("touchend",v)},f=()=>{document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",v),document.removeEventListener("touchmove",C),document.removeEventListener("touchend",v)},m=()=>{!i.current&&o.current&&(i.current=!0,typeof r?.onScrubStart=="function"&&r.onScrubStart(),s(!0),p())},v=()=>{i.current&&o.current&&(i.current=!1,s(!1),f(),setTimeout(()=>{typeof r?.onScrubEnd=="function"&&r.onScrubEnd()},0))},w=_=>{m(),_.preventDefault(),x(_)},x=_=>u({x:_.clientX,y:_.clientY}),k=_=>{_.cancelable&&_.preventDefault(),m(),C(_)},C=_=>{_.cancelable&&_.preventDefault(),u({x:_.changedTouches[0].clientX,y:_.changedTouches[0].clientY})};d.addEventListener("mousedown",w),d.addEventListener("touchstart",k,{passive:!1}),c.current=()=>{d.removeEventListener("mousedown",w),d.removeEventListener("touchstart",k)}},[n,e]),active:l}}function Ys({value:e,defaultValue:r,finalValue:n,onChange:o=()=>{}}){const[i,a]=S.useState(r!==void 0?r:n);return e!==void 0?[e,o,!0]:[i,(s,...c)=>{a(s),o?.(s,...c)},!1]}function _H(e,r){return fH("(prefers-reduced-motion: reduce)",e,r)}function uze(e,r){if(!e||!r)return!1;if(e===r)return!0;if(e.length!==r.length)return!1;for(let n=0;n{r({width:window.innerWidth||0,height:window.innerHeight||0})},[]);return kf("resize",n,SH),kf("orientationchange",n,SH),S.useEffect(n,[]),e}const gze={" ":"space",ArrowLeft:"arrowleft",ArrowRight:"arrowright",ArrowUp:"arrowup",ArrowDown:"arrowdown",Escape:"escape",Esc:"escape",esc:"escape",Enter:"enter",Tab:"tab",Backspace:"backspace",Delete:"delete",Insert:"insert",Home:"home",End:"end",PageUp:"pageup",PageDown:"pagedown","+":"plus","-":"minus","*":"asterisk","/":"slash"};function Cw(e){const r=e.replace("Key","").toLowerCase();return gze[e]||r}function mze(e){const r=e.toLowerCase().split("+").map(a=>a.trim()),n={alt:r.includes("alt"),ctrl:r.includes("ctrl"),meta:r.includes("meta"),mod:r.includes("mod"),shift:r.includes("shift"),plus:r.includes("[plus]")},o=["alt","ctrl","meta","shift","mod"],i=r.find(a=>!o.includes(a));return{...n,key:i==="[plus]"?"+":i}}function yze(e,r,n){const{alt:o,ctrl:i,meta:a,mod:l,shift:s,key:c}=e,{altKey:d,ctrlKey:u,metaKey:p,shiftKey:f,key:m,code:v}=r;if(o!==d)return!1;if(l){if(!u&&!p)return!1}else if(i!==u||a!==p)return!1;return s!==f?!1:!!(c&&(n?Cw(v)===Cw(c):Cw(m??v)===Cw(c)))}function EH(e,r){return n=>yze(mze(e),n,r)}function $w(e){return r=>{const n="nativeEvent"in r?r.nativeEvent:r;e.forEach(([o,i,a={preventDefault:!0,usePhysicalKeys:!1}])=>{EH(o,a.usePhysicalKeys)(n)&&(a.preventDefault&&r.preventDefault(),i(n))})}}function vze(e,r,n=!1){return e.target instanceof HTMLElement?(n||!e.target.isContentEditable)&&!r.includes(e.target.tagName):!0}function bze(e,r=["INPUT","TEXTAREA","SELECT"],n=!1){S.useEffect(()=>{const o=i=>{e.forEach(([a,l,s={preventDefault:!0,usePhysicalKeys:!1}])=>{EH(a,s.usePhysicalKeys)(i)&&vze(i,r,n)&&(s.preventDefault&&i.preventDefault(),l(i))})};return document.documentElement.addEventListener("keydown",o),()=>document.documentElement.removeEventListener("keydown",o)},[e])}function b9(){const[e,r]=S.useState(!1),n=S.useRef(null),o=S.useCallback(()=>{r(!0)},[]),i=S.useCallback(()=>{r(!1)},[]);return{ref:S.useCallback(a=>{n.current&&(n.current.removeEventListener("mouseenter",o),n.current.removeEventListener("mouseleave",i)),a&&(a.addEventListener("mouseenter",o),a.addEventListener("mouseleave",i)),n.current=a},[o,i]),hovered:e}}function xze(e=!1,r={}){const[n,o]=S.useState(e),i=S.useCallback(()=>{o(s=>s||(r.onOpen?.(),!0))},[r.onOpen]),a=S.useCallback(()=>{o(s=>s&&(r.onClose?.(),!1))},[r.onClose]),l=S.useCallback(()=>{n?a():i()},[a,i,n]);return[n,{open:i,close:a,toggle:l}]}function wze(e){return e.currentTarget instanceof HTMLElement&&e.relatedTarget instanceof HTMLElement?e.currentTarget.contains(e.relatedTarget):!1}function kze({onBlur:e,onFocus:r}={}){const[n,o]=S.useState(!1),i=S.useRef(!1),a=S.useRef(null),l=S.useCallback(u=>{o(u),i.current=u},[]),s=S.useCallback(u=>{i.current||(l(!0),r?.(u))},[r]),c=S.useCallback(u=>{i.current&&!wze(u)&&(l(!1),e?.(u))},[e]),d=S.useCallback(u=>{u&&(a.current&&(a.current.removeEventListener("focusin",s),a.current.removeEventListener("focusout",c)),u.addEventListener("focusin",s),u.addEventListener("focusout",c),a.current=u)},[s,c]);return S.useEffect(()=>()=>{a.current&&(a.current.removeEventListener("focusin",s),a.current.removeEventListener("focusout",c))},[]),{ref:d,focused:n}}function CH(e,r,n={autoInvoke:!1}){const o=S.useRef(null),i=S.useCallback((...l)=>{o.current||(o.current=window.setTimeout(()=>{e(l),o.current=null},r))},[r]),a=S.useCallback(()=>{o.current&&(window.clearTimeout(o.current),o.current=null)},[]);return S.useEffect(()=>(n.autoInvoke&&i(),a),[a,i]),{start:i,clear:a}}function $H(e,r,n){const o=S.useRef(null),i=S.useRef(null);return S.useEffect(()=>{const a=typeof n=="function"?n():n;return(a||i.current)&&(o.current=new MutationObserver(e),o.current.observe(a||i.current,r)),()=>{o.current?.disconnect()}},[e,r]),i}function _ze(){const[e,r]=S.useState(!1);return S.useEffect(()=>r(!0),[]),e}function RH(e){const[r,n]=S.useState({history:[e],current:0}),o=S.useCallback(c=>n(d=>{const u=[...d.history.slice(0,d.current+1),c];return{history:u,current:u.length-1}}),[]),i=S.useCallback((c=1)=>n(d=>({history:d.history,current:Math.max(0,d.current-c)})),[]),a=S.useCallback((c=1)=>n(d=>({history:d.history,current:Math.min(d.history.length-1,d.current+c)})),[]),l=S.useCallback(()=>{n({history:[e],current:0})},[e]),s=S.useMemo(()=>({back:i,forward:a,reset:l,set:o}),[i,a,l,o]);return[r.history[r.current],s,r]}function Sze(e,r){const n=Qn(e),o=S.useRef(null),i=S.useRef(null),a=S.useRef(!0),l=S.useRef(r),s=S.useRef(-1),c=()=>window.clearTimeout(s.current),d=S.useCallback((...f)=>{n(...f),o.current=f,i.current=f,a.current=!1},[n]),u=S.useCallback(()=>{o.current&&o.current!==i.current?(d(...o.current),s.current=window.setTimeout(u,l.current)):a.current=!0},[d]),p=S.useCallback((...f)=>{a.current?(d(...f),s.current=window.setTimeout(u,l.current)):o.current=f},[d,u]);return S.useEffect(()=>{l.current=r},[r]),[p,c]}function Eze(e,r){return Sze(e,r)[0]}function Cze(){return typeof process<"u"&&process.env?"production":"development"}function zH(e){const r=new Map;return(...n)=>{const o=JSON.stringify(n);if(r.has(o))return r.get(o);const i=e(...n);return r.set(o,i),i}}function TH(e,r){return r.length===0?e:r.reduce((n,o)=>Math.abs(o-e){Object.entries(n).forEach(([o,i])=>{r[o]?r[o]=el(r[o],i):r[o]=i})}),r}function Tw({theme:e,classNames:r,props:n,stylesCtx:o}){const i=(Array.isArray(r)?r:[r]).map(a=>typeof a=="function"?a(e,n,o):a||$ze);return Rze(i)}function jw({theme:e,styles:r,props:n,stylesCtx:o}){return(Array.isArray(r)?r:[r]).reduce((i,a)=>typeof a=="function"?{...i,...a(e,n,o)}:{...i,...a},{})}const Aw=S.createContext(null);function yd(){const e=S.useContext(Aw);if(!e)throw new Error("[@mantine/core] MantineProvider was not found in tree");return e}function zze(){return yd().cssVariablesResolver}function Tze(){return yd().classNamesPrefix}function np(){return yd().getStyleNonce}function jze(){return yd().withStaticClasses}function Aze(){return yd().headless}function Dze(){return yd().stylesTransform?.sx}function Pze(){return yd().stylesTransform?.styles}function Dw(){return yd().env||"default"}function Mze(e){return/^#?([0-9A-F]{3}){1,2}([0-9A-F]{2})?$/i.test(e)}function Nze(e){let r=e.replace("#","");if(r.length===3){const l=r.split("");r=[l[0],l[0],l[1],l[1],l[2],l[2]].join("")}if(r.length===8){const l=parseInt(r.slice(6,8),16)/255;return{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:l}}const n=parseInt(r,16),o=n>>16&255,i=n>>8&255,a=n&255;return{r:o,g:i,b:a,a:1}}function Bze(e){const[r,n,o,i]=e.replace(/[^0-9,./]/g,"").split(/[/,]/).map(Number);return{r,g:n,b:o,a:i===void 0?1:i}}function Ize(e){const r=/^hsla?\(\s*(\d+)\s*,\s*(\d+%)\s*,\s*(\d+%)\s*(,\s*(0?\.\d+|\d+(\.\d+)?))?\s*\)$/i,n=e.match(r);if(!n)return{r:0,g:0,b:0,a:1};const o=parseInt(n[1],10),i=parseInt(n[2],10)/100,a=parseInt(n[3],10)/100,l=n[5]?parseFloat(n[5]):void 0,s=(1-Math.abs(2*a-1))*i,c=o/60,d=s*(1-Math.abs(c%2-1)),u=a-s/2;let p,f,m;return c>=0&&c<1?(p=s,f=d,m=0):c>=1&&c<2?(p=d,f=s,m=0):c>=2&&c<3?(p=0,f=s,m=d):c>=3&&c<4?(p=0,f=d,m=s):c>=4&&c<5?(p=d,f=0,m=s):(p=s,f=0,m=d),{r:Math.round((p+u)*255),g:Math.round((f+u)*255),b:Math.round((m+u)*255),a:l||1}}function x9(e){return Mze(e)?Nze(e):e.startsWith("rgb")?Bze(e):e.startsWith("hsl")?Ize(e):{r:0,g:0,b:0,a:1}}function Pw(e,r){if(e.startsWith("var("))return`color-mix(in srgb, ${e}, black ${r*100}%)`;const{r:n,g:o,b:i,a}=x9(e),l=1-r,s=c=>Math.round(c*l);return`rgba(${s(n)}, ${s(o)}, ${s(i)}, ${a})`}function ly(e,r){return typeof e.primaryShade=="number"?e.primaryShade:r==="dark"?e.primaryShade.dark:e.primaryShade.light}function w9(e){return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function Oze(e){const r=e.match(/oklch\((.*?)%\s/);return r?parseFloat(r[1]):null}function Lze(e){if(e.startsWith("oklch("))return(Oze(e)||0)/100;const{r,g:n,b:o}=x9(e),i=r/255,a=n/255,l=o/255,s=w9(i),c=w9(a),d=w9(l);return .2126*s+.7152*c+.0722*d}function sy(e,r=.179){return e.startsWith("var(")?!1:Lze(e)>r}function vd({color:e,theme:r,colorScheme:n}){if(typeof e!="string")throw new Error(`[@mantine/core] Failed to parse color. Expected color to be a string, instead got ${typeof e}`);if(e==="bright")return{color:e,value:n==="dark"?r.white:r.black,shade:void 0,isThemeColor:!1,isLight:sy(n==="dark"?r.white:r.black,r.luminanceThreshold),variable:"--mantine-color-bright"};if(e==="dimmed")return{color:e,value:n==="dark"?r.colors.dark[2]:r.colors.gray[7],shade:void 0,isThemeColor:!1,isLight:sy(n==="dark"?r.colors.dark[2]:r.colors.gray[6],r.luminanceThreshold),variable:"--mantine-color-dimmed"};if(e==="white"||e==="black")return{color:e,value:e==="white"?r.white:r.black,shade:void 0,isThemeColor:!1,isLight:sy(e==="white"?r.white:r.black,r.luminanceThreshold),variable:`--mantine-color-${e}`};const[o,i]=e.split("."),a=i?Number(i):void 0,l=o in r.colors;if(l){const s=a!==void 0?r.colors[o][a]:r.colors[o][ly(r,n||"light")];return{color:o,value:s,shade:a,isThemeColor:l,isLight:sy(s,r.luminanceThreshold),variable:i?`--mantine-color-${o}-${a}`:`--mantine-color-${o}-filled`}}return{color:e,value:e,isThemeColor:l,isLight:sy(e,r.luminanceThreshold),shade:a,variable:void 0}}function Ci(e,r){const n=vd({color:e||r.primaryColor,theme:r});return n.variable?`var(${n.variable})`:e}function k9(e,r){const n={from:e?.from||r.defaultGradient.from,to:e?.to||r.defaultGradient.to,deg:e?.deg??r.defaultGradient.deg??0},o=Ci(n.from,r),i=Ci(n.to,r);return`linear-gradient(${n.deg}deg, ${o} 0%, ${i} 100%)`}function Xl(e,r){if(typeof e!="string"||r>1||r<0)return"rgba(0, 0, 0, 1)";if(e.startsWith("var(")){const a=(1-r)*100;return`color-mix(in srgb, ${e}, transparent ${a}%)`}if(e.startsWith("oklch"))return e.includes("/")?e.replace(/\/\s*[\d.]+\s*\)/,`/ ${r})`):e.replace(")",` / ${r})`);const{r:n,g:o,b:i}=x9(e);return`rgba(${n}, ${o}, ${i}, ${r})`}const _f=Xl,Fze=({color:e,theme:r,variant:n,gradient:o,autoContrast:i})=>{const a=vd({color:e,theme:r}),l=typeof i=="boolean"?i:r.autoContrast;if(n==="none")return{background:"transparent",hover:"transparent",color:"inherit",border:"none"};if(n==="filled"){const s=l&&a.isLight?"var(--mantine-color-black)":"var(--mantine-color-white)";return a.isThemeColor?a.shade===void 0?{background:`var(--mantine-color-${e}-filled)`,hover:`var(--mantine-color-${e}-filled-hover)`,color:s,border:`${$e(1)} solid transparent`}:{background:`var(--mantine-color-${a.color}-${a.shade})`,hover:`var(--mantine-color-${a.color}-${a.shade===9?8:a.shade+1})`,color:s,border:`${$e(1)} solid transparent`}:{background:e,hover:Pw(e,.1),color:s,border:`${$e(1)} solid transparent`}}if(n==="light"){if(a.isThemeColor){if(a.shade===void 0)return{background:`var(--mantine-color-${e}-light)`,hover:`var(--mantine-color-${e}-light-hover)`,color:`var(--mantine-color-${e}-light-color)`,border:`${$e(1)} solid transparent`};const s=r.colors[a.color][a.shade];return{background:Xl(s,.1),hover:Xl(s,.12),color:`var(--mantine-color-${a.color}-${Math.min(a.shade,6)})`,border:`${$e(1)} solid transparent`}}return{background:Xl(e,.1),hover:Xl(e,.12),color:e,border:`${$e(1)} solid transparent`}}if(n==="outline")return a.isThemeColor?a.shade===void 0?{background:"transparent",hover:`var(--mantine-color-${e}-outline-hover)`,color:`var(--mantine-color-${e}-outline)`,border:`${$e(1)} solid var(--mantine-color-${e}-outline)`}:{background:"transparent",hover:Xl(r.colors[a.color][a.shade],.05),color:`var(--mantine-color-${a.color}-${a.shade})`,border:`${$e(1)} solid var(--mantine-color-${a.color}-${a.shade})`}:{background:"transparent",hover:Xl(e,.05),color:e,border:`${$e(1)} solid ${e}`};if(n==="subtle"){if(a.isThemeColor){if(a.shade===void 0)return{background:"transparent",hover:`var(--mantine-color-${e}-light-hover)`,color:`var(--mantine-color-${e}-light-color)`,border:`${$e(1)} solid transparent`};const s=r.colors[a.color][a.shade];return{background:"transparent",hover:Xl(s,.12),color:`var(--mantine-color-${a.color}-${Math.min(a.shade,6)})`,border:`${$e(1)} solid transparent`}}return{background:"transparent",hover:Xl(e,.12),color:e,border:`${$e(1)} solid transparent`}}return n==="transparent"?a.isThemeColor?a.shade===void 0?{background:"transparent",hover:"transparent",color:`var(--mantine-color-${e}-light-color)`,border:`${$e(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:`var(--mantine-color-${a.color}-${Math.min(a.shade,6)})`,border:`${$e(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:e,border:`${$e(1)} solid transparent`}:n==="white"?a.isThemeColor?a.shade===void 0?{background:"var(--mantine-color-white)",hover:Pw(r.white,.01),color:`var(--mantine-color-${e}-filled)`,border:`${$e(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:Pw(r.white,.01),color:`var(--mantine-color-${a.color}-${a.shade})`,border:`${$e(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:Pw(r.white,.01),color:e,border:`${$e(1)} solid transparent`}:n==="gradient"?{background:k9(o,r),hover:k9(o,r),color:"var(--mantine-color-white)",border:"none"}:n==="default"?{background:"var(--mantine-color-default)",hover:"var(--mantine-color-default-hover)",color:"var(--mantine-color-default-color)",border:`${$e(1)} solid var(--mantine-color-default-border)`}:{}},Vze={dark:["#C9C9C9","#b8b8b8","#828282","#696969","#424242","#3b3b3b","#2e2e2e","#242424","#1f1f1f","#141414"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]},AH="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",_9={scale:1,fontSmoothing:!0,focusRing:"auto",white:"#fff",black:"#000",colors:Vze,primaryShade:{light:6,dark:8},primaryColor:"blue",variantColorResolver:Fze,autoContrast:!1,luminanceThreshold:.3,fontFamily:AH,fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",respectReducedMotion:!1,cursorType:"default",defaultGradient:{from:"blue",to:"cyan",deg:45},defaultRadius:"sm",activeClassName:"mantine-active",focusClassName:"",headings:{fontFamily:AH,fontWeight:"700",textWrap:"wrap",sizes:{h1:{fontSize:$e(34),lineHeight:"1.3"},h2:{fontSize:$e(26),lineHeight:"1.35"},h3:{fontSize:$e(22),lineHeight:"1.4"},h4:{fontSize:$e(18),lineHeight:"1.45"},h5:{fontSize:$e(16),lineHeight:"1.5"},h6:{fontSize:$e(14),lineHeight:"1.5"}}},fontSizes:{xs:$e(12),sm:$e(14),md:$e(16),lg:$e(18),xl:$e(20)},lineHeights:{xs:"1.4",sm:"1.45",md:"1.55",lg:"1.6",xl:"1.65"},radius:{xs:$e(2),sm:$e(4),md:$e(8),lg:$e(16),xl:$e(32)},spacing:{xs:$e(10),sm:$e(12),md:$e(16),lg:$e(20),xl:$e(32)},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},shadows:{xs:`0 ${$e(1)} ${$e(3)} rgba(0, 0, 0, 0.05), 0 ${$e(1)} ${$e(2)} rgba(0, 0, 0, 0.1)`,sm:`0 ${$e(1)} ${$e(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${$e(10)} ${$e(15)} ${$e(-5)}, rgba(0, 0, 0, 0.04) 0 ${$e(7)} ${$e(7)} ${$e(-5)}`,md:`0 ${$e(1)} ${$e(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${$e(20)} ${$e(25)} ${$e(-5)}, rgba(0, 0, 0, 0.04) 0 ${$e(10)} ${$e(10)} ${$e(-5)}`,lg:`0 ${$e(1)} ${$e(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${$e(28)} ${$e(23)} ${$e(-7)}, rgba(0, 0, 0, 0.04) 0 ${$e(12)} ${$e(12)} ${$e(-7)}`,xl:`0 ${$e(1)} ${$e(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${$e(36)} ${$e(28)} ${$e(-7)}, rgba(0, 0, 0, 0.04) 0 ${$e(17)} ${$e(17)} ${$e(-7)}`},other:{},components:{}};function DH(e){return e==="auto"||e==="dark"||e==="light"}function qze({key:e="mantine-color-scheme-value"}={}){let r;return{get:n=>{if(typeof window>"u")return n;try{const o=window.localStorage.getItem(e);return DH(o)?o:n}catch{return n}},set:n=>{try{window.localStorage.setItem(e,n)}catch(o){console.warn("[@mantine/core] Local storage color scheme manager was unable to save color scheme.",o)}},subscribe:n=>{r=o=>{o.storageArea===window.localStorage&&o.key===e&&DH(o.newValue)&&n(o.newValue)},window.addEventListener("storage",r)},unsubscribe:()=>{window.removeEventListener("storage",r)},clear:()=>{window.localStorage.removeItem(e)}}}const Hze="[@mantine/core] MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color",PH="[@mantine/core] MantineProvider: Invalid theme.primaryShade, it accepts only 0-9 integers or an object { light: 0-9, dark: 0-9 }";function S9(e){return e<0||e>9?!1:parseInt(e.toString(),10)===e}function MH(e){if(!(e.primaryColor in e.colors))throw new Error(Hze);if(typeof e.primaryShade=="object"&&(!S9(e.primaryShade.dark)||!S9(e.primaryShade.light)))throw new Error(PH);if(typeof e.primaryShade=="number"&&!S9(e.primaryShade))throw new Error(PH)}function Uze(e,r){if(!r)return MH(e),e;const n=h9(e,r);return r.fontFamily&&!r.headings?.fontFamily&&(n.headings.fontFamily=r.fontFamily),MH(n),n}const E9=S.createContext(null),Wze=()=>S.useContext(E9)||_9;function lo(){const e=S.useContext(E9);if(!e)throw new Error("@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app");return e}function NH({theme:e,children:r,inherit:n=!0}){const o=Wze(),i=S.useMemo(()=>Uze(n?o:_9,e),[e,o,n]);return y.jsx(E9.Provider,{value:i,children:r})}NH.displayName="@mantine/core/MantineThemeProvider";function Gze(){const e=lo(),r=np(),n=So(e.breakpoints).reduce((o,i)=>{const a=e.breakpoints[i].includes("px"),l=f9(e.breakpoints[i]),s=a?`${l-.1}px`:lH(l-.1),c=a?`${l}px`:lH(l);return`${o}@media (max-width: ${s}) {.mantine-visible-from-${i} {display: none !important;}}@media (min-width: ${c}) {.mantine-hidden-from-${i} {display: none !important;}}`},"");return y.jsx("style",{"data-mantine-styles":"classes",nonce:r?.(),dangerouslySetInnerHTML:{__html:n}})}function C9(e){return Object.entries(e).map(([r,n])=>`${r}: ${n};`).join("")}function BH(e,r){const n=r?[r]:[":root",":host"],o=C9(e.variables),i=o?`${n.join(", ")}{${o}}`:"",a=C9(e.dark),l=C9(e.light),s=u=>n.map(p=>p===":host"?`${p}([data-mantine-color-scheme="${u}"])`:`${p}[data-mantine-color-scheme="${u}"]`).join(", "),c=a?`${s("dark")}{${a}}`:"",d=l?`${s("light")}{${l}}`:"";return`${i} - -${c} - -${d}`}function $9({color:e,theme:r,autoContrast:n}){return(typeof n=="boolean"?n:r.autoContrast)&&vd({color:e||r.primaryColor,theme:r}).isLight?"var(--mantine-color-black)":"var(--mantine-color-white)"}function IH(e,r){return $9({color:e.colors[e.primaryColor][ly(e,r)],theme:e,autoContrast:null})}function Mw({theme:e,color:r,colorScheme:n,name:o=r,withColorValues:i=!0}){if(!e.colors[r])return{};if(n==="light"){const s=ly(e,"light"),c={[`--mantine-color-${o}-text`]:`var(--mantine-color-${o}-filled)`,[`--mantine-color-${o}-filled`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-filled-hover`]:`var(--mantine-color-${o}-${s===9?8:s+1})`,[`--mantine-color-${o}-light`]:_f(e.colors[r][s],.1),[`--mantine-color-${o}-light-hover`]:_f(e.colors[r][s],.12),[`--mantine-color-${o}-light-color`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-outline`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-outline-hover`]:_f(e.colors[r][s],.05)};return i?{[`--mantine-color-${o}-0`]:e.colors[r][0],[`--mantine-color-${o}-1`]:e.colors[r][1],[`--mantine-color-${o}-2`]:e.colors[r][2],[`--mantine-color-${o}-3`]:e.colors[r][3],[`--mantine-color-${o}-4`]:e.colors[r][4],[`--mantine-color-${o}-5`]:e.colors[r][5],[`--mantine-color-${o}-6`]:e.colors[r][6],[`--mantine-color-${o}-7`]:e.colors[r][7],[`--mantine-color-${o}-8`]:e.colors[r][8],[`--mantine-color-${o}-9`]:e.colors[r][9],...c}:c}const a=ly(e,"dark"),l={[`--mantine-color-${o}-text`]:`var(--mantine-color-${o}-4)`,[`--mantine-color-${o}-filled`]:`var(--mantine-color-${o}-${a})`,[`--mantine-color-${o}-filled-hover`]:`var(--mantine-color-${o}-${a===9?8:a+1})`,[`--mantine-color-${o}-light`]:_f(e.colors[r][Math.max(0,a-2)],.15),[`--mantine-color-${o}-light-hover`]:_f(e.colors[r][Math.max(0,a-2)],.2),[`--mantine-color-${o}-light-color`]:`var(--mantine-color-${o}-${Math.max(a-5,0)})`,[`--mantine-color-${o}-outline`]:`var(--mantine-color-${o}-${Math.max(a-4,0)})`,[`--mantine-color-${o}-outline-hover`]:_f(e.colors[r][Math.max(a-4,0)],.05)};return i?{[`--mantine-color-${o}-0`]:e.colors[r][0],[`--mantine-color-${o}-1`]:e.colors[r][1],[`--mantine-color-${o}-2`]:e.colors[r][2],[`--mantine-color-${o}-3`]:e.colors[r][3],[`--mantine-color-${o}-4`]:e.colors[r][4],[`--mantine-color-${o}-5`]:e.colors[r][5],[`--mantine-color-${o}-6`]:e.colors[r][6],[`--mantine-color-${o}-7`]:e.colors[r][7],[`--mantine-color-${o}-8`]:e.colors[r][8],[`--mantine-color-${o}-9`]:e.colors[r][9],...l}:l}function Yze(e){return!!e&&typeof e=="object"&&"mantine-virtual-color"in e}function Sf(e,r,n){So(r).forEach(o=>Object.assign(e,{[`--mantine-${n}-${o}`]:r[o]}))}const OH=e=>{const r=ly(e,"light"),n=e.defaultRadius in e.radius?e.radius[e.defaultRadius]:$e(e.defaultRadius),o={variables:{"--mantine-z-index-app":"100","--mantine-z-index-modal":"200","--mantine-z-index-popover":"300","--mantine-z-index-overlay":"400","--mantine-z-index-max":"9999","--mantine-scale":e.scale.toString(),"--mantine-cursor-type":e.cursorType,"--mantine-webkit-font-smoothing":e.fontSmoothing?"antialiased":"unset","--mantine-moz-font-smoothing":e.fontSmoothing?"grayscale":"unset","--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-line-height":e.lineHeights.md,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":e.headings.fontWeight,"--mantine-heading-text-wrap":e.headings.textWrap,"--mantine-radius-default":n,"--mantine-primary-color-filled":`var(--mantine-color-${e.primaryColor}-filled)`,"--mantine-primary-color-filled-hover":`var(--mantine-color-${e.primaryColor}-filled-hover)`,"--mantine-primary-color-light":`var(--mantine-color-${e.primaryColor}-light)`,"--mantine-primary-color-light-hover":`var(--mantine-color-${e.primaryColor}-light-hover)`,"--mantine-primary-color-light-color":`var(--mantine-color-${e.primaryColor}-light-color)`},light:{"--mantine-color-scheme":"light","--mantine-primary-color-contrast":IH(e,"light"),"--mantine-color-bright":"var(--mantine-color-black)","--mantine-color-text":e.black,"--mantine-color-body":e.white,"--mantine-color-error":"var(--mantine-color-red-6)","--mantine-color-placeholder":"var(--mantine-color-gray-5)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-${r})`,"--mantine-color-default":"var(--mantine-color-white)","--mantine-color-default-hover":"var(--mantine-color-gray-0)","--mantine-color-default-color":"var(--mantine-color-black)","--mantine-color-default-border":"var(--mantine-color-gray-4)","--mantine-color-dimmed":"var(--mantine-color-gray-6)","--mantine-color-disabled":"var(--mantine-color-gray-2)","--mantine-color-disabled-color":"var(--mantine-color-gray-5)","--mantine-color-disabled-border":"var(--mantine-color-gray-3)"},dark:{"--mantine-color-scheme":"dark","--mantine-primary-color-contrast":IH(e,"dark"),"--mantine-color-bright":"var(--mantine-color-white)","--mantine-color-text":"var(--mantine-color-dark-0)","--mantine-color-body":"var(--mantine-color-dark-7)","--mantine-color-error":"var(--mantine-color-red-8)","--mantine-color-placeholder":"var(--mantine-color-dark-3)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-4)`,"--mantine-color-default":"var(--mantine-color-dark-6)","--mantine-color-default-hover":"var(--mantine-color-dark-5)","--mantine-color-default-color":"var(--mantine-color-white)","--mantine-color-default-border":"var(--mantine-color-dark-4)","--mantine-color-dimmed":"var(--mantine-color-dark-2)","--mantine-color-disabled":"var(--mantine-color-dark-6)","--mantine-color-disabled-color":"var(--mantine-color-dark-3)","--mantine-color-disabled-border":"var(--mantine-color-dark-4)"}};Sf(o.variables,e.breakpoints,"breakpoint"),Sf(o.variables,e.spacing,"spacing"),Sf(o.variables,e.fontSizes,"font-size"),Sf(o.variables,e.lineHeights,"line-height"),Sf(o.variables,e.shadows,"shadow"),Sf(o.variables,e.radius,"radius"),e.colors[e.primaryColor].forEach((a,l)=>{o.variables[`--mantine-primary-color-${l}`]=`var(--mantine-color-${e.primaryColor}-${l})`}),So(e.colors).forEach(a=>{const l=e.colors[a];if(Yze(l)){Object.assign(o.light,Mw({theme:e,name:l.name,color:l.light,colorScheme:"light",withColorValues:!0})),Object.assign(o.dark,Mw({theme:e,name:l.name,color:l.dark,colorScheme:"dark",withColorValues:!0}));return}l.forEach((s,c)=>{o.variables[`--mantine-color-${a}-${c}`]=s}),Object.assign(o.light,Mw({theme:e,color:a,colorScheme:"light",withColorValues:!1})),Object.assign(o.dark,Mw({theme:e,color:a,colorScheme:"dark",withColorValues:!1}))});const i=e.headings.sizes;return So(i).forEach(a=>{o.variables[`--mantine-${a}-font-size`]=i[a].fontSize,o.variables[`--mantine-${a}-line-height`]=i[a].lineHeight,o.variables[`--mantine-${a}-font-weight`]=i[a].fontWeight||e.headings.fontWeight}),o};function Xze({theme:e,generator:r}){const n=OH(e),o=r?.(e);return o?h9(n,o):n}const R9=OH(_9);function Kze(e){const r={variables:{},light:{},dark:{}};return So(e.variables).forEach(n=>{R9.variables[n]!==e.variables[n]&&(r.variables[n]=e.variables[n])}),So(e.light).forEach(n=>{R9.light[n]!==e.light[n]&&(r.light[n]=e.light[n])}),So(e.dark).forEach(n=>{R9.dark[n]!==e.dark[n]&&(r.dark[n]=e.dark[n])}),r}function Zze(e){return BH({variables:{},dark:{"--mantine-color-scheme":"dark"},light:{"--mantine-color-scheme":"light"}},e)}function LH({cssVariablesSelector:e,deduplicateCssVariables:r}){const n=lo(),o=np(),i=zze(),a=Xze({theme:n,generator:i}),l=(e===void 0||e===":root"||e===":host")&&r,s=l?Kze(a):a,c=BH(s,e);return c?y.jsx("style",{"data-mantine-styles":!0,nonce:o?.(),dangerouslySetInnerHTML:{__html:`${c}${l?"":Zze(e)}`}}):null}LH.displayName="@mantine/CssVariables";function Ef(e,r){const n=typeof window<"u"&&"matchMedia"in window&&window.matchMedia("(prefers-color-scheme: dark)")?.matches,o=e!=="auto"?e:n?"dark":"light";r()?.setAttribute("data-mantine-color-scheme",o)}function Qze({manager:e,defaultColorScheme:r,getRootElement:n,forceColorScheme:o}){const i=S.useRef(null),[a,l]=S.useState(()=>e.get(r)),s=o||a,c=S.useCallback(u=>{o||(Ef(u,n),l(u),e.set(u))},[e.set,s,o]),d=S.useCallback(()=>{l(r),Ef(r,n),e.clear()},[e.clear,r]);return S.useEffect(()=>(e.subscribe(c),e.unsubscribe),[e.subscribe,e.unsubscribe]),xf(()=>{Ef(e.get(r),n)},[]),S.useEffect(()=>{if(o)return Ef(o,n),()=>{};o===void 0&&Ef(a,n),typeof window<"u"&&"matchMedia"in window&&(i.current=window.matchMedia("(prefers-color-scheme: dark)"));const u=p=>{a==="auto"&&Ef(p.matches?"dark":"light",n)};return i.current?.addEventListener("change",u),()=>i.current?.removeEventListener("change",u)},[a,o]),{colorScheme:s,setColorScheme:c,clearColorScheme:d}}function Jze({respectReducedMotion:e,getRootElement:r}){xf(()=>{e&&r()?.setAttribute("data-respect-reduced-motion","true")},[e])}function z9({theme:e,children:r,getStyleNonce:n,withStaticClasses:o=!0,withGlobalClasses:i=!0,deduplicateCssVariables:a=!0,withCssVariables:l=!0,cssVariablesSelector:s,classNamesPrefix:c="mantine",colorSchemeManager:d=qze(),defaultColorScheme:u="light",getRootElement:p=()=>document.documentElement,cssVariablesResolver:f,forceColorScheme:m,stylesTransform:v,env:w}){const{colorScheme:x,setColorScheme:k,clearColorScheme:C}=Qze({defaultColorScheme:u,forceColorScheme:m,manager:d,getRootElement:p});return Jze({respectReducedMotion:e?.respectReducedMotion||!1,getRootElement:p}),y.jsx(Aw.Provider,{value:{colorScheme:x,setColorScheme:k,clearColorScheme:C,getRootElement:p,classNamesPrefix:c,getStyleNonce:n,cssVariablesResolver:f,cssVariablesSelector:s??":root",withStaticClasses:o,stylesTransform:v,env:w},children:y.jsxs(NH,{theme:e,children:[l&&y.jsx(LH,{cssVariablesSelector:s,deduplicateCssVariables:a}),i&&y.jsx(Gze,{}),r]})})}z9.displayName="@mantine/core/MantineProvider";function T9({classNames:e,styles:r,props:n,stylesCtx:o}){const i=lo();return{resolvedClassNames:Tw({theme:i,classNames:e,props:n,stylesCtx:o||void 0}),resolvedStyles:jw({theme:i,styles:r,props:n,stylesCtx:o||void 0})}}const eTe={always:"mantine-focus-always",auto:"mantine-focus-auto",never:"mantine-focus-never"};function tTe({theme:e,options:r,unstyled:n}){return el(r?.focusable&&!n&&(e.focusClassName||eTe[e.focusRing]),r?.active&&!n&&e.activeClassName)}function rTe({selector:e,stylesCtx:r,options:n,props:o,theme:i}){return Tw({theme:i,classNames:n?.classNames,props:n?.props||o,stylesCtx:r})[e]}function FH({selector:e,stylesCtx:r,theme:n,classNames:o,props:i}){return Tw({theme:n,classNames:o,props:i,stylesCtx:r})[e]}function nTe({rootSelector:e,selector:r,className:n}){return e===r?n:void 0}function oTe({selector:e,classes:r,unstyled:n}){return n?void 0:r[e]}function iTe({themeName:e,classNamesPrefix:r,selector:n,withStaticClass:o}){return o===!1?[]:e.map(i=>`${r}-${i}-${n}`)}function aTe({themeName:e,theme:r,selector:n,props:o,stylesCtx:i}){return e.map(a=>Tw({theme:r,classNames:r.components[a]?.classNames,props:o,stylesCtx:i})?.[n])}function lTe({options:e,classes:r,selector:n,unstyled:o}){return e?.variant&&!o?r[`${n}--${e.variant}`]:void 0}function sTe({theme:e,options:r,themeName:n,selector:o,classNamesPrefix:i,classNames:a,classes:l,unstyled:s,className:c,rootSelector:d,props:u,stylesCtx:p,withStaticClasses:f,headless:m,transformedStyles:v}){return el(tTe({theme:e,options:r,unstyled:s||m}),aTe({theme:e,themeName:n,selector:o,props:u,stylesCtx:p}),lTe({options:r,classes:l,selector:o,unstyled:s}),FH({selector:o,stylesCtx:p,theme:e,classNames:a,props:u}),FH({selector:o,stylesCtx:p,theme:e,classNames:v,props:u}),rTe({selector:o,stylesCtx:p,options:r,props:u,theme:e}),nTe({rootSelector:d,selector:o,className:c}),oTe({selector:o,classes:l,unstyled:s||m}),f&&!m&&iTe({themeName:n,classNamesPrefix:i,selector:o,withStaticClass:r?.withStaticClass}),r?.className)}function cTe({theme:e,themeName:r,props:n,stylesCtx:o,selector:i}){return r.map(a=>jw({theme:e,styles:e.components[a]?.styles,props:n,stylesCtx:o})[i]).reduce((a,l)=>({...a,...l}),{})}function j9({style:e,theme:r}){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...j9({style:o,theme:r})}),{}):typeof e=="function"?e(r):e??{}}function dTe(e){return e.reduce((r,n)=>(n&&Object.keys(n).forEach(o=>{r[o]={...r[o],...yf(n[o])}}),r),{})}function uTe({vars:e,varsResolver:r,theme:n,props:o,stylesCtx:i,selector:a,themeName:l,headless:s}){return dTe([s?{}:r?.(n,o,i),...l.map(c=>n.components?.[c]?.vars?.(n,o,i)),e?.(n,o,i)])?.[a]}function pTe({theme:e,themeName:r,selector:n,options:o,props:i,stylesCtx:a,rootSelector:l,styles:s,style:c,vars:d,varsResolver:u,headless:p,withStylesTransform:f}){return{...!f&&cTe({theme:e,themeName:r,props:i,stylesCtx:a,selector:n}),...!f&&jw({theme:e,styles:s,props:i,stylesCtx:a})[n],...!f&&jw({theme:e,styles:o?.styles,props:o?.props||i,stylesCtx:a})[n],...uTe({theme:e,props:i,stylesCtx:a,vars:d,varsResolver:u,selector:n,themeName:r,headless:p}),...l===n?j9({style:c,theme:e}):null,...j9({style:o?.style,theme:e})}}function hTe({props:e,stylesCtx:r,themeName:n}){const o=lo(),i=Pze()?.();return{getTransformedStyles:a=>i?[...a.map(l=>i(l,{props:e,theme:o,ctx:r})),...n.map(l=>i(o.components[l]?.styles,{props:e,theme:o,ctx:r}))].filter(Boolean):[],withStylesTransform:!!i}}function kt({name:e,classes:r,props:n,stylesCtx:o,className:i,style:a,rootSelector:l="root",unstyled:s,classNames:c,styles:d,vars:u,varsResolver:p,attributes:f}){const m=lo(),v=Tze(),w=jze(),x=Aze(),k=(Array.isArray(e)?e:[e]).filter($=>$),{withStylesTransform:C,getTransformedStyles:_}=hTe({props:n,stylesCtx:o,themeName:k});return($,R)=>({className:sTe({theme:m,options:R,themeName:k,selector:$,classNamesPrefix:v,classNames:c,classes:r,unstyled:s,className:i,rootSelector:l,props:n,stylesCtx:o,withStaticClasses:w,headless:x,transformedStyles:_([R?.styles,d])}),style:pTe({theme:m,themeName:k,selector:$,options:R,props:n,stylesCtx:o,rootSelector:l,styles:d,style:a,vars:u,varsResolver:p,headless:x,withStylesTransform:C}),...f?.[$]})}function fTe(e,r){return typeof e=="boolean"?e:r.autoContrast}function VH(e){const r=document.createElement("style");return r.setAttribute("data-mantine-styles","inline"),r.innerHTML="*, *::before, *::after {transition: none !important;}",r.setAttribute("data-mantine-disable-transition","true"),e&&r.setAttribute("nonce",e),document.head.appendChild(r),()=>document.querySelectorAll("[data-mantine-disable-transition]").forEach(n=>n.remove())}function gTe({keepTransitions:e}={}){const r=S.useRef(dH),n=S.useRef(-1),o=S.useContext(Aw),i=np(),a=S.useRef(i?.());if(!o)throw new Error("[@mantine/core] MantineProvider was not found in tree");const l=p=>{o.setColorScheme(p),r.current=e?()=>{}:VH(a.current),window.clearTimeout(n.current),n.current=window.setTimeout(()=>{r.current?.()},10)},s=()=>{o.clearColorScheme(),r.current=e?()=>{}:VH(a.current),window.clearTimeout(n.current),n.current=window.setTimeout(()=>{r.current?.()},10)},c=gH("light",{getInitialValueInEffect:!1}),d=o.colorScheme==="auto"?c:o.colorScheme,u=S.useCallback(()=>l(d==="light"?"dark":"light"),[l,d]);return S.useEffect(()=>()=>{r.current?.(),window.clearTimeout(n.current)},[]),{colorScheme:o.colorScheme,setColorScheme:l,clearColorScheme:s,toggleColorScheme:u}}function Pe(e,r,n){const o=lo(),i=o.components[e]?.defaultProps,a=typeof i=="function"?i(o):i;return{...r,...a,...yf(n)}}function A9(e){return So(e).reduce((r,n)=>e[n]!==void 0?`${r}${MRe(n)}:${e[n]};`:r,"").trim()}function mTe({selector:e,styles:r,media:n,container:o}){const i=r?A9(r):"",a=Array.isArray(n)?n.map(s=>`@media${s.query}{${e}{${A9(s.styles)}}}`):[],l=Array.isArray(o)?o.map(s=>`@container ${s.query}{${e}{${A9(s.styles)}}}`):[];return`${i?`${e}{${i}}`:""}${a.join("")}${l.join("")}`.trim()}function Nw(e){const r=np();return y.jsx("style",{"data-mantine-styles":"inline",nonce:r?.(),dangerouslySetInnerHTML:{__html:mTe(e)}})}function qH(e){const{m:r,mx:n,my:o,mt:i,mb:a,ml:l,mr:s,me:c,ms:d,p:u,px:p,py:f,pt:m,pb:v,pl:w,pr:x,pe:k,ps:C,bd:_,bdrs:$,bg:R,c:T,opacity:A,ff:z,fz:j,fw:I,lts:N,ta:L,lh:H,fs:P,tt:V,td:B,w:F,miw:q,maw:G,h:U,mih:Y,mah:K,bgsz:O,bgp:W,bgr:Z,bga:Q,pos:ie,top:te,left:re,bottom:ue,right:_e,inset:ce,display:pe,flex:xe,hiddenFrom:je,visibleFrom:Be,lightHidden:Je,darkHidden:st,sx:Le,...St}=e;return{styleProps:yf({m:r,mx:n,my:o,mt:i,mb:a,ml:l,mr:s,me:c,ms:d,p:u,px:p,py:f,pt:m,pb:v,pl:w,pr:x,pe:k,ps:C,bd:_,bg:R,c:T,opacity:A,ff:z,fz:j,fw:I,lts:N,ta:L,lh:H,fs:P,tt:V,td:B,w:F,miw:q,maw:G,h:U,mih:Y,mah:K,bgsz:O,bgp:W,bgr:Z,bga:Q,pos:ie,top:te,left:re,bottom:ue,right:_e,inset:ce,display:pe,flex:xe,bdrs:$,hiddenFrom:je,visibleFrom:Be,lightHidden:Je,darkHidden:st,sx:Le}),rest:St}}const yTe={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},ms:{type:"spacing",property:"marginInlineStart"},me:{type:"spacing",property:"marginInlineEnd"},mx:{type:"spacing",property:"marginInline"},my:{type:"spacing",property:"marginBlock"},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},ps:{type:"spacing",property:"paddingInlineStart"},pe:{type:"spacing",property:"paddingInlineEnd"},px:{type:"spacing",property:"paddingInline"},py:{type:"spacing",property:"paddingBlock"},bd:{type:"border",property:"border"},bdrs:{type:"radius",property:"borderRadius"},bg:{type:"color",property:"background"},c:{type:"textColor",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"fontFamily",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"lineHeight",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"size",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"},flex:{type:"identity",property:"flex"}};function D9(e,r){const n=vd({color:e,theme:r});return n.color==="dimmed"?"var(--mantine-color-dimmed)":n.color==="bright"?"var(--mantine-color-bright)":n.variable?`var(${n.variable})`:n.color}function vTe(e,r){const n=vd({color:e,theme:r});return n.isThemeColor&&n.shade===void 0?`var(--mantine-color-${n.color}-text)`:D9(e,r)}function bTe(e,r){if(typeof e=="number")return $e(e);if(typeof e=="string"){const[n,o,...i]=e.split(" ").filter(l=>l.trim()!=="");let a=`${$e(n)}`;return o&&(a+=` ${o}`),i.length>0&&(a+=` ${D9(i.join(" "),r)}`),a.trim()}return e}const HH={text:"var(--mantine-font-family)",mono:"var(--mantine-font-family-monospace)",monospace:"var(--mantine-font-family-monospace)",heading:"var(--mantine-font-family-headings)",headings:"var(--mantine-font-family-headings)"};function xTe(e){return typeof e=="string"&&e in HH?HH[e]:e}const wTe=["h1","h2","h3","h4","h5","h6"];function kTe(e,r){return typeof e=="string"&&e in r.fontSizes?`var(--mantine-font-size-${e})`:typeof e=="string"&&wTe.includes(e)?`var(--mantine-${e}-font-size)`:typeof e=="number"||typeof e=="string"?$e(e):e}function _Te(e){return e}const STe=["h1","h2","h3","h4","h5","h6"];function ETe(e,r){return typeof e=="string"&&e in r.lineHeights?`var(--mantine-line-height-${e})`:typeof e=="string"&&STe.includes(e)?`var(--mantine-${e}-line-height)`:e}function CTe(e,r){return typeof e=="string"&&e in r.radius?`var(--mantine-radius-${e})`:typeof e=="number"||typeof e=="string"?$e(e):e}function $Te(e){return typeof e=="number"?$e(e):e}function RTe(e,r){if(typeof e=="number")return $e(e);if(typeof e=="string"){const n=e.replace("-","");if(!(n in r.spacing))return $e(e);const o=`--mantine-spacing-${n}`;return e.startsWith("-")?`calc(var(${o}) * -1)`:`var(${o})`}return e}const P9={color:D9,textColor:vTe,fontSize:kTe,spacing:RTe,radius:CTe,identity:_Te,size:$Te,lineHeight:ETe,fontFamily:xTe,border:bTe};function UH(e){return e.replace("(min-width: ","").replace("em)","")}function zTe({media:e,...r}){const n=Object.keys(e).sort((o,i)=>Number(UH(o))-Number(UH(i))).map(o=>({query:o,styles:e[o]}));return{...r,media:n}}function TTe(e){if(typeof e!="object"||e===null)return!1;const r=Object.keys(e);return!(r.length===1&&r[0]==="base")}function jTe(e){return typeof e=="object"&&e!==null?"base"in e?e.base:void 0:e}function ATe(e){return typeof e=="object"&&e!==null?So(e).filter(r=>r!=="base"):[]}function DTe(e,r){return typeof e=="object"&&e!==null&&r in e?e[r]:e}function WH({styleProps:e,data:r,theme:n}){return zTe(So(e).reduce((o,i)=>{if(i==="hiddenFrom"||i==="visibleFrom"||i==="sx")return o;const a=r[i],l=Array.isArray(a.property)?a.property:[a.property],s=jTe(e[i]);if(!TTe(e[i]))return l.forEach(d=>{o.inlineStyles[d]=P9[a.type](s,n)}),o;o.hasResponsiveStyles=!0;const c=ATe(e[i]);return l.forEach(d=>{s!=null&&(o.styles[d]=P9[a.type](s,n)),c.forEach(u=>{const p=`(min-width: ${n.breakpoints[u]})`;o.media[p]={...o.media[p],[d]:P9[a.type](DTe(e[i],u),n)}})}),o},{hasResponsiveStyles:!1,styles:{},inlineStyles:{},media:{}}))}function Bw(){return`__m__-${S.useId().replace(/[:«»]/g,"")}`}function M9(e,r){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...M9(o,r)}),{}):typeof e=="function"?e(r):e??{}}function GH(e){return e.startsWith("data-")?e:`data-${e}`}function PTe(e){return Object.keys(e).reduce((r,n)=>{const o=e[n];return o===void 0||o===""||o===!1||o===null||(r[GH(n)]=e[n]),r},{})}function YH(e){return e?typeof e=="string"?{[GH(e)]:!0}:Array.isArray(e)?[...e].reduce((r,n)=>({...r,...YH(n)}),{}):PTe(e):null}function N9(e,r){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...N9(o,r)}),{}):typeof e=="function"?e(r):e??{}}function MTe({theme:e,style:r,vars:n,styleProps:o}){const i=N9(r,e),a=N9(n,e);return{...i,...a,...o}}const XH=S.forwardRef(({component:e,style:r,__vars:n,className:o,variant:i,mod:a,size:l,hiddenFrom:s,visibleFrom:c,lightHidden:d,darkHidden:u,renderRoot:p,__size:f,...m},v)=>{const w=lo(),x=e||"div",{styleProps:k,rest:C}=qH(m),_=Dze()?.()?.(k.sx),$=Bw(),R=WH({styleProps:k,theme:w,data:yTe}),T={ref:v,style:MTe({theme:w,style:r,vars:n,styleProps:R.inlineStyles}),className:el(o,_,{[$]:R.hasResponsiveStyles,"mantine-light-hidden":d,"mantine-dark-hidden":u,[`mantine-hidden-from-${s}`]:s,[`mantine-visible-from-${c}`]:c}),"data-variant":i,"data-size":sH(l)?void 0:l||void 0,size:f,...YH(a),...C};return y.jsxs(y.Fragment,{children:[R.hasResponsiveStyles&&y.jsx(Nw,{selector:`.${$}`,styles:R.styles,media:R.media}),typeof p=="function"?p(T):y.jsx(x,{...T})]})});XH.displayName="@mantine/core/Box";const Se=XH;function KH(e){return e}function NTe(e){const r=e;return n=>{const o=S.forwardRef((i,a)=>y.jsx(r,{...n,...i,ref:a}));return o.extend=r.extend,o.displayName=`WithProps(${r.displayName})`,o}}function ot(e){const r=S.forwardRef(e);return r.extend=KH,r.withProps=n=>{const o=S.forwardRef((i,a)=>y.jsx(r,{...n,...i,ref:a}));return o.extend=r.extend,o.displayName=`WithProps(${r.displayName})`,o},r}function Jn(e){const r=S.forwardRef(e);return r.withProps=n=>{const o=S.forwardRef((i,a)=>y.jsx(r,{...n,...i,ref:a}));return o.extend=r.extend,o.displayName=`WithProps(${r.displayName})`,o},r.extend=KH,r}const BTe=S.createContext({dir:"ltr",toggleDirection:()=>{},setDirection:()=>{}});function bd(){return S.useContext(BTe)}function ITe(e){if(!e||typeof e=="string")return 0;const r=e/36;return Math.round((4+15*r**.25+r/5)*10)}function B9(e){return e?.current?e.current.scrollHeight:"auto"}const Iw=typeof window<"u"&&window.requestAnimationFrame,ZH=0,OTe=e=>({height:0,overflow:"hidden",...e?{}:{display:"none"}});function LTe({transitionDuration:e,transitionTimingFunction:r="ease",onTransitionEnd:n=()=>{},opened:o,keepMounted:i=!1}){const a=S.useRef(null),l=OTe(i),[s,c]=S.useState(o?{}:l),d=v=>{Va.flushSync(()=>c(v))},u=v=>{d(w=>({...w,...v}))};function p(v){const w=e||ITe(v);return{transition:`height ${w}ms ${r}, opacity ${w}ms ${r}`}}wf(()=>{typeof Iw=="function"&&Iw(o?()=>{u({willChange:"height",display:"block",overflow:"hidden"}),Iw(()=>{const v=B9(a);u({...p(v),height:v})})}:()=>{const v=B9(a);u({...p(v),willChange:"height",height:v}),Iw(()=>u({height:ZH,overflow:"hidden"}))})},[o]);const f=v=>{if(!(v.target!==a.current||v.propertyName!=="height"))if(o){const w=B9(a);w===s.height?d({}):u({height:w}),n()}else s.height===ZH&&(d(l),n())};function m({style:v={},refKey:w="ref",...x}={}){const k=x[w],C={"aria-hidden":!o,...x,[w]:wH(a,k),onTransitionEnd:f,style:{boxSizing:"border-box",...v,...s}};return Zr.version.startsWith("18")?o||(C.inert=""):C.inert=!o,C}return m}const FTe={transitionDuration:200,transitionTimingFunction:"ease",animateOpacity:!0},QH=ot((e,r)=>{const{children:n,in:o,transitionDuration:i,transitionTimingFunction:a,style:l,onTransitionEnd:s,animateOpacity:c,keepMounted:d,...u}=Pe("Collapse",FTe,e),p=lo(),f=_H(),m=p.respectReducedMotion&&f?0:i,v=LTe({opened:o,transitionDuration:m,transitionTimingFunction:a,onTransitionEnd:s,keepMounted:d});return m===0?o?y.jsx(Se,{...u,children:n}):null:y.jsx(Se,{...v({style:{opacity:o||!c?1:0,transition:c?`opacity ${m}ms ${a}`:"none",...M9(l,p)},ref:r,...u}),children:n})});QH.displayName="@mantine/core/Collapse";function Ow(){return typeof window<"u"}function Cf(e){return JH(e)?(e.nodeName||"").toLowerCase():"#document"}function ni(e){var r;return(e==null||(r=e.ownerDocument)==null?void 0:r.defaultView)||window}function Kl(e){var r;return(r=(JH(e)?e.ownerDocument:e.document)||window.document)==null?void 0:r.documentElement}function JH(e){return Ow()?e instanceof Node||e instanceof ni(e).Node:!1}function Ar(e){return Ow()?e instanceof Element||e instanceof ni(e).Element:!1}function $i(e){return Ow()?e instanceof HTMLElement||e instanceof ni(e).HTMLElement:!1}function I9(e){return!Ow()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof ni(e).ShadowRoot}const VTe=new Set(["inline","contents"]);function cy(e){const{overflow:r,overflowX:n,overflowY:o,display:i}=ia(e);return/auto|scroll|overlay|hidden|clip/.test(r+o+n)&&!VTe.has(i)}const qTe=new Set(["table","td","th"]);function HTe(e){return qTe.has(Cf(e))}const UTe=[":popover-open",":modal"];function Lw(e){return UTe.some(r=>{try{return e.matches(r)}catch{return!1}})}const WTe=["transform","translate","scale","rotate","perspective"],GTe=["transform","translate","scale","rotate","perspective","filter"],YTe=["paint","layout","strict","content"];function O9(e){const r=Fw(),n=Ar(e)?ia(e):e;return WTe.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!r&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!r&&(n.filter?n.filter!=="none":!1)||GTe.some(o=>(n.willChange||"").includes(o))||YTe.some(o=>(n.contain||"").includes(o))}function XTe(e){let r=Ks(e);for(;$i(r)&&!Xs(r);){if(O9(r))return r;if(Lw(r))return null;r=Ks(r)}return null}function Fw(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const KTe=new Set(["html","body","#document"]);function Xs(e){return KTe.has(Cf(e))}function ia(e){return ni(e).getComputedStyle(e)}function Vw(e){return Ar(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ks(e){if(Cf(e)==="html")return e;const r=e.assignedSlot||e.parentNode||I9(e)&&e.host||Kl(e);return I9(r)?r.host:r}function eU(e){const r=Ks(e);return Xs(r)?e.ownerDocument?e.ownerDocument.body:e.body:$i(r)&&cy(r)?r:eU(r)}function Zs(e,r,n){var o;r===void 0&&(r=[]),n===void 0&&(n=!0);const i=eU(e),a=i===((o=e.ownerDocument)==null?void 0:o.body),l=ni(i);if(a){const s=L9(l);return r.concat(l,l.visualViewport||[],cy(i)?i:[],s&&n?Zs(s):[])}return r.concat(i,Zs(i,[],n))}function L9(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const tU=["top","right","bottom","left"],rU=["start","end"],nU=tU.reduce((e,r)=>e.concat(r,r+"-"+rU[0],r+"-"+rU[1]),[]),tl=Math.min,Co=Math.max,qw=Math.round,Hw=Math.floor,Zl=e=>({x:e,y:e}),ZTe={left:"right",right:"left",bottom:"top",top:"bottom"},QTe={start:"end",end:"start"};function F9(e,r,n){return Co(e,tl(r,n))}function rl(e,r){return typeof e=="function"?e(r):e}function Ri(e){return e.split("-")[0]}function nl(e){return e.split("-")[1]}function V9(e){return e==="x"?"y":"x"}function q9(e){return e==="y"?"height":"width"}const JTe=new Set(["top","bottom"]);function ol(e){return JTe.has(Ri(e))?"y":"x"}function H9(e){return V9(ol(e))}function oU(e,r,n){n===void 0&&(n=!1);const o=nl(e),i=H9(e),a=q9(i);let l=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return r.reference[a]>r.floating[a]&&(l=Ww(l)),[l,Ww(l)]}function eje(e){const r=Ww(e);return[Uw(e),r,Uw(r)]}function Uw(e){return e.replace(/start|end/g,r=>QTe[r])}const iU=["left","right"],aU=["right","left"],tje=["top","bottom"],rje=["bottom","top"];function nje(e,r,n){switch(e){case"top":case"bottom":return n?r?aU:iU:r?iU:aU;case"left":case"right":return r?tje:rje;default:return[]}}function oje(e,r,n,o){const i=nl(e);let a=nje(Ri(e),n==="start",o);return i&&(a=a.map(l=>l+"-"+i),r&&(a=a.concat(a.map(Uw)))),a}function Ww(e){return e.replace(/left|right|bottom|top/g,r=>ZTe[r])}function ije(e){return{top:0,right:0,bottom:0,left:0,...e}}function U9(e){return typeof e!="number"?ije(e):{top:e,right:e,bottom:e,left:e}}function $f(e){const{x:r,y:n,width:o,height:i}=e;return{width:o,height:i,top:n,left:r,right:r+o,bottom:n+i,x:r,y:n}}function aje(){const e=navigator.userAgentData;return e!=null&&e.platform?e.platform:navigator.platform}function lje(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(r=>{let{brand:n,version:o}=r;return n+"/"+o}).join(" "):navigator.userAgent}function sje(){return/apple/i.test(navigator.vendor)}function cje(){return aje().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function dje(){return lje().includes("jsdom/")}const lU="data-floating-ui-focusable",uje="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";function sU(e){let r=e.activeElement;for(;((n=r)==null||(n=n.shadowRoot)==null?void 0:n.activeElement)!=null;){var n;r=r.shadowRoot.activeElement}return r}function dy(e,r){if(!e||!r)return!1;const n=r.getRootNode==null?void 0:r.getRootNode();if(e.contains(r))return!0;if(n&&I9(n)){let o=r;for(;o;){if(e===o)return!0;o=o.parentNode||o.host}}return!1}function Rf(e){return"composedPath"in e?e.composedPath()[0]:e.target}function W9(e,r){if(r==null)return!1;if("composedPath"in e)return e.composedPath().includes(r);const n=e;return n.target!=null&&r.contains(n.target)}function pje(e){return e.matches("html,body")}function op(e){return e?.ownerDocument||document}function hje(e){return $i(e)&&e.matches(uje)}function fje(e){if(!e||dje())return!0;try{return e.matches(":focus-visible")}catch{return!0}}function gje(e){return e?e.hasAttribute(lU)?e:e.querySelector("["+lU+"]")||e:null}function Gw(e,r,n){return n===void 0&&(n=!0),e.filter(o=>{var i;return o.parentId===r&&(!n||((i=o.context)==null?void 0:i.open))}).flatMap(o=>[o,...Gw(e,o.id,n)])}function mje(e){return"nativeEvent"in e}function G9(e,r){const n=["mouse","pen"];return n.push("",void 0),n.includes(e)}var yje=typeof document<"u",vje=function(){},Ql=yje?S.useLayoutEffect:vje;const bje={...mb};function Yw(e){const r=S.useRef(e);return Ql(()=>{r.current=e}),r}const xje=bje.useInsertionEffect,wje=xje||(e=>e());function Jl(e){const r=S.useRef(()=>{});return wje(()=>{r.current=e}),S.useCallback(function(){for(var n=arguments.length,o=new Array(n),i=0;i{const{placement:o="bottom",strategy:i="absolute",middleware:a=[],platform:l}=n,s=a.filter(Boolean),c=await(l.isRTL==null?void 0:l.isRTL(r));let d=await l.getElementRects({reference:e,floating:r,strategy:i}),{x:u,y:p}=cU(d,o,c),f=o,m={},v=0;for(let w=0;w({name:"arrow",options:e,async fn(r){const{x:n,y:o,placement:i,rects:a,platform:l,elements:s,middlewareData:c}=r,{element:d,padding:u=0}=rl(e,r)||{};if(d==null)return{};const p=U9(u),f={x:n,y:o},m=H9(i),v=q9(m),w=await l.getDimensions(d),x=m==="y",k=x?"top":"left",C=x?"bottom":"right",_=x?"clientHeight":"clientWidth",$=a.reference[v]+a.reference[m]-f[m]-a.floating[v],R=f[m]-a.reference[m],T=await(l.getOffsetParent==null?void 0:l.getOffsetParent(d));let A=T?T[_]:0;(!A||!await(l.isElement==null?void 0:l.isElement(T)))&&(A=s.floating[_]||a.floating[v]);const z=$/2-R/2,j=A/2-w[v]/2-1,I=tl(p[k],j),N=tl(p[C],j),L=I,H=A-w[v]-N,P=A/2-w[v]/2+z,V=F9(L,P,H),B=!c.arrow&&nl(i)!=null&&P!==V&&a.reference[v]/2-(Pnl(o)===e),...n.filter(o=>nl(o)!==e)]:n.filter(o=>Ri(o)===o)).filter(o=>e?nl(o)===e||(r?Uw(o)!==o:!1):!0)}const Eje=function(e){return e===void 0&&(e={}),{name:"autoPlacement",options:e,async fn(r){var n,o,i;const{rects:a,middlewareData:l,placement:s,platform:c,elements:d}=r,{crossAxis:u=!1,alignment:p,allowedPlacements:f=nU,autoAlignment:m=!0,...v}=rl(e,r),w=p!==void 0||f===nU?Sje(p||null,m,f):f,x=await zf(r,v),k=((n=l.autoPlacement)==null?void 0:n.index)||0,C=w[k];if(C==null)return{};const _=oU(C,a,await(c.isRTL==null?void 0:c.isRTL(d.floating)));if(s!==C)return{reset:{placement:w[0]}};const $=[x[Ri(C)],x[_[0]],x[_[1]]],R=[...((o=l.autoPlacement)==null?void 0:o.overflows)||[],{placement:C,overflows:$}],T=w[k+1];if(T)return{data:{index:k+1,overflows:R},reset:{placement:T}};const A=R.map(j=>{const I=nl(j.placement);return[j.placement,I&&u?j.overflows.slice(0,2).reduce((N,L)=>N+L,0):j.overflows[0],j.overflows]}).sort((j,I)=>j[1]-I[1]),z=((i=A.filter(j=>j[2].slice(0,nl(j[0])?2:3).every(I=>I<=0))[0])==null?void 0:i[0])||A[0][0];return z!==s?{data:{index:k+1,overflows:R},reset:{placement:z}}:{}}}},Cje=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(r){var n,o;const{placement:i,middlewareData:a,rects:l,initialPlacement:s,platform:c,elements:d}=r,{mainAxis:u=!0,crossAxis:p=!0,fallbackPlacements:f,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:w=!0,...x}=rl(e,r);if((n=a.arrow)!=null&&n.alignmentOffset)return{};const k=Ri(i),C=ol(s),_=Ri(s)===s,$=await(c.isRTL==null?void 0:c.isRTL(d.floating)),R=f||(_||!w?[Ww(s)]:eje(s)),T=v!=="none";!f&&T&&R.push(...oje(s,w,v,$));const A=[s,...R],z=await zf(r,x),j=[];let I=((o=a.flip)==null?void 0:o.overflows)||[];if(u&&j.push(z[k]),p){const P=oU(i,l,$);j.push(z[P[0]],z[P[1]])}if(I=[...I,{placement:i,overflows:j}],!j.every(P=>P<=0)){var N,L;const P=(((N=a.flip)==null?void 0:N.index)||0)+1,V=A[P];if(V&&(!(p==="alignment"&&C!==ol(V))||I.every(F=>ol(F.placement)===C?F.overflows[0]>0:!0)))return{data:{index:P,overflows:I},reset:{placement:V}};let B=(L=I.filter(F=>F.overflows[0]<=0).sort((F,q)=>F.overflows[1]-q.overflows[1])[0])==null?void 0:L.placement;if(!B)switch(m){case"bestFit":{var H;const F=(H=I.filter(q=>{if(T){const G=ol(q.placement);return G===C||G==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(G=>G>0).reduce((G,U)=>G+U,0)]).sort((q,G)=>q[1]-G[1])[0])==null?void 0:H[0];F&&(B=F);break}case"initialPlacement":B=s;break}if(i!==B)return{reset:{placement:B}}}return{}}}};function dU(e,r){return{top:e.top-r.height,right:e.right-r.width,bottom:e.bottom-r.height,left:e.left-r.width}}function uU(e){return tU.some(r=>e[r]>=0)}const $je=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(r){const{rects:n}=r,{strategy:o="referenceHidden",...i}=rl(e,r);switch(o){case"referenceHidden":{const a=await zf(r,{...i,elementContext:"reference"}),l=dU(a,n.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:uU(l)}}}case"escaped":{const a=await zf(r,{...i,altBoundary:!0}),l=dU(a,n.floating);return{data:{escapedOffsets:l,escaped:uU(l)}}}default:return{}}}}};function pU(e){const r=tl(...e.map(a=>a.left)),n=tl(...e.map(a=>a.top)),o=Co(...e.map(a=>a.right)),i=Co(...e.map(a=>a.bottom));return{x:r,y:n,width:o-r,height:i-n}}function Rje(e){const r=e.slice().sort((i,a)=>i.y-a.y),n=[];let o=null;for(let i=0;io.height/2?n.push([a]):n[n.length-1].push(a),o=a}return n.map(i=>$f(pU(i)))}const zje=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(r){const{placement:n,elements:o,rects:i,platform:a,strategy:l}=r,{padding:s=2,x:c,y:d}=rl(e,r),u=Array.from(await(a.getClientRects==null?void 0:a.getClientRects(o.reference))||[]),p=Rje(u),f=$f(pU(u)),m=U9(s);function v(){if(p.length===2&&p[0].left>p[1].right&&c!=null&&d!=null)return p.find(x=>c>x.left-m.left&&cx.top-m.top&&d=2){if(ol(n)==="y"){const I=p[0],N=p[p.length-1],L=Ri(n)==="top",H=I.top,P=N.bottom,V=L?I.left:N.left,B=L?I.right:N.right,F=B-V,q=P-H;return{top:H,bottom:P,left:V,right:B,width:F,height:q,x:V,y:H}}const x=Ri(n)==="left",k=Co(...p.map(I=>I.right)),C=tl(...p.map(I=>I.left)),_=p.filter(I=>x?I.left===C:I.right===k),$=_[0].top,R=_[_.length-1].bottom,T=C,A=k,z=A-T,j=R-$;return{top:$,bottom:R,left:T,right:A,width:z,height:j,x:T,y:$}}return f}const w=await a.getElementRects({reference:{getBoundingClientRect:v},floating:o.floating,strategy:l});return i.reference.x!==w.reference.x||i.reference.y!==w.reference.y||i.reference.width!==w.reference.width||i.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},hU=new Set(["left","top"]);async function Tje(e,r){const{placement:n,platform:o,elements:i}=e,a=await(o.isRTL==null?void 0:o.isRTL(i.floating)),l=Ri(n),s=nl(n),c=ol(n)==="y",d=hU.has(l)?-1:1,u=a&&c?-1:1,p=rl(r,e);let{mainAxis:f,crossAxis:m,alignmentAxis:v}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return s&&typeof v=="number"&&(m=s==="end"?v*-1:v),c?{x:m*u,y:f*d}:{x:f*d,y:m*u}}const jje=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(r){var n,o;const{x:i,y:a,placement:l,middlewareData:s}=r,c=await Tje(r,e);return l===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:i+c.x,y:a+c.y,data:{...c,placement:l}}}}},Aje=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(r){const{x:n,y:o,placement:i}=r,{mainAxis:a=!0,crossAxis:l=!1,limiter:s={fn:x=>{let{x:k,y:C}=x;return{x:k,y:C}}},...c}=rl(e,r),d={x:n,y:o},u=await zf(r,c),p=ol(Ri(i)),f=V9(p);let m=d[f],v=d[p];if(a){const x=f==="y"?"top":"left",k=f==="y"?"bottom":"right",C=m+u[x],_=m-u[k];m=F9(C,m,_)}if(l){const x=p==="y"?"top":"left",k=p==="y"?"bottom":"right",C=v+u[x],_=v-u[k];v=F9(C,v,_)}const w=s.fn({...r,[f]:m,[p]:v});return{...w,data:{x:w.x-n,y:w.y-o,enabled:{[f]:a,[p]:l}}}}}},Dje=function(e){return e===void 0&&(e={}),{options:e,fn(r){const{x:n,y:o,placement:i,rects:a,middlewareData:l}=r,{offset:s=0,mainAxis:c=!0,crossAxis:d=!0}=rl(e,r),u={x:n,y:o},p=ol(i),f=V9(p);let m=u[f],v=u[p];const w=rl(s,r),x=typeof w=="number"?{mainAxis:w,crossAxis:0}:{mainAxis:0,crossAxis:0,...w};if(c){const _=f==="y"?"height":"width",$=a.reference[f]-a.floating[_]+x.mainAxis,R=a.reference[f]+a.reference[_]-x.mainAxis;m<$?m=$:m>R&&(m=R)}if(d){var k,C;const _=f==="y"?"width":"height",$=hU.has(Ri(i)),R=a.reference[p]-a.floating[_]+($&&((k=l.offset)==null?void 0:k[p])||0)+($?0:x.crossAxis),T=a.reference[p]+a.reference[_]+($?0:((C=l.offset)==null?void 0:C[p])||0)-($?x.crossAxis:0);vT&&(v=T)}return{[f]:m,[p]:v}}}},Pje=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(r){var n,o;const{placement:i,rects:a,platform:l,elements:s}=r,{apply:c=()=>{},...d}=rl(e,r),u=await zf(r,d),p=Ri(i),f=nl(i),m=ol(i)==="y",{width:v,height:w}=a.floating;let x,k;p==="top"||p==="bottom"?(x=p,k=f===(await(l.isRTL==null?void 0:l.isRTL(s.floating))?"start":"end")?"left":"right"):(k=p,x=f==="end"?"top":"bottom");const C=w-u.top-u.bottom,_=v-u.left-u.right,$=tl(w-u[x],C),R=tl(v-u[k],_),T=!r.middlewareData.shift;let A=$,z=R;if((n=r.middlewareData.shift)!=null&&n.enabled.x&&(z=_),(o=r.middlewareData.shift)!=null&&o.enabled.y&&(A=C),T&&!f){const I=Co(u.left,0),N=Co(u.right,0),L=Co(u.top,0),H=Co(u.bottom,0);m?z=v-2*(I!==0||N!==0?I+N:Co(u.left,u.right)):A=w-2*(L!==0||H!==0?L+H:Co(u.top,u.bottom))}await c({...r,availableWidth:z,availableHeight:A});const j=await l.getDimensions(s.floating);return v!==j.width||w!==j.height?{reset:{rects:!0}}:{}}}};function fU(e){const r=ia(e);let n=parseFloat(r.width)||0,o=parseFloat(r.height)||0;const i=$i(e),a=i?e.offsetWidth:n,l=i?e.offsetHeight:o,s=qw(n)!==a||qw(o)!==l;return s&&(n=a,o=l),{width:n,height:o,$:s}}function Y9(e){return Ar(e)?e:e.contextElement}function Tf(e){const r=Y9(e);if(!$i(r))return Zl(1);const n=r.getBoundingClientRect(),{width:o,height:i,$:a}=fU(r);let l=(a?qw(n.width):n.width)/o,s=(a?qw(n.height):n.height)/i;return(!l||!Number.isFinite(l))&&(l=1),(!s||!Number.isFinite(s))&&(s=1),{x:l,y:s}}const Mje=Zl(0);function gU(e){const r=ni(e);return!Fw()||!r.visualViewport?Mje:{x:r.visualViewport.offsetLeft,y:r.visualViewport.offsetTop}}function Nje(e,r,n){return r===void 0&&(r=!1),!n||r&&n!==ni(e)?!1:r}function ip(e,r,n,o){r===void 0&&(r=!1),n===void 0&&(n=!1);const i=e.getBoundingClientRect(),a=Y9(e);let l=Zl(1);r&&(o?Ar(o)&&(l=Tf(o)):l=Tf(e));const s=Nje(a,n,o)?gU(a):Zl(0);let c=(i.left+s.x)/l.x,d=(i.top+s.y)/l.y,u=i.width/l.x,p=i.height/l.y;if(a){const f=ni(a),m=o&&Ar(o)?ni(o):o;let v=f,w=L9(v);for(;w&&o&&m!==v;){const x=Tf(w),k=w.getBoundingClientRect(),C=ia(w),_=k.left+(w.clientLeft+parseFloat(C.paddingLeft))*x.x,$=k.top+(w.clientTop+parseFloat(C.paddingTop))*x.y;c*=x.x,d*=x.y,u*=x.x,p*=x.y,c+=_,d+=$,v=ni(w),w=L9(v)}}return $f({width:u,height:p,x:c,y:d})}function Xw(e,r){const n=Vw(e).scrollLeft;return r?r.left+n:ip(Kl(e)).left+n}function mU(e,r){const n=e.getBoundingClientRect(),o=n.left+r.scrollLeft-Xw(e,n),i=n.top+r.scrollTop;return{x:o,y:i}}function Bje(e){let{elements:r,rect:n,offsetParent:o,strategy:i}=e;const a=i==="fixed",l=Kl(o),s=r?Lw(r.floating):!1;if(o===l||s&&a)return n;let c={scrollLeft:0,scrollTop:0},d=Zl(1);const u=Zl(0),p=$i(o);if((p||!p&&!a)&&((Cf(o)!=="body"||cy(l))&&(c=Vw(o)),$i(o))){const m=ip(o);d=Tf(o),u.x=m.x+o.clientLeft,u.y=m.y+o.clientTop}const f=l&&!p&&!a?mU(l,c):Zl(0);return{width:n.width*d.x,height:n.height*d.y,x:n.x*d.x-c.scrollLeft*d.x+u.x+f.x,y:n.y*d.y-c.scrollTop*d.y+u.y+f.y}}function Ije(e){return Array.from(e.getClientRects())}function Oje(e){const r=Kl(e),n=Vw(e),o=e.ownerDocument.body,i=Co(r.scrollWidth,r.clientWidth,o.scrollWidth,o.clientWidth),a=Co(r.scrollHeight,r.clientHeight,o.scrollHeight,o.clientHeight);let l=-n.scrollLeft+Xw(e);const s=-n.scrollTop;return ia(o).direction==="rtl"&&(l+=Co(r.clientWidth,o.clientWidth)-i),{width:i,height:a,x:l,y:s}}const yU=25;function Lje(e,r){const n=ni(e),o=Kl(e),i=n.visualViewport;let a=o.clientWidth,l=o.clientHeight,s=0,c=0;if(i){a=i.width,l=i.height;const u=Fw();(!u||u&&r==="fixed")&&(s=i.offsetLeft,c=i.offsetTop)}const d=Xw(o);if(d<=0){const u=o.ownerDocument,p=u.body,f=getComputedStyle(p),m=u.compatMode==="CSS1Compat"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,v=Math.abs(o.clientWidth-p.clientWidth-m);v<=yU&&(a-=v)}else d<=yU&&(a+=d);return{width:a,height:l,x:s,y:c}}const Fje=new Set(["absolute","fixed"]);function Vje(e,r){const n=ip(e,!0,r==="fixed"),o=n.top+e.clientTop,i=n.left+e.clientLeft,a=$i(e)?Tf(e):Zl(1),l=e.clientWidth*a.x,s=e.clientHeight*a.y,c=i*a.x,d=o*a.y;return{width:l,height:s,x:c,y:d}}function vU(e,r,n){let o;if(r==="viewport")o=Lje(e,n);else if(r==="document")o=Oje(Kl(e));else if(Ar(r))o=Vje(r,n);else{const i=gU(e);o={x:r.x-i.x,y:r.y-i.y,width:r.width,height:r.height}}return $f(o)}function bU(e,r){const n=Ks(e);return n===r||!Ar(n)||Xs(n)?!1:ia(n).position==="fixed"||bU(n,r)}function qje(e,r){const n=r.get(e);if(n)return n;let o=Zs(e,[],!1).filter(s=>Ar(s)&&Cf(s)!=="body"),i=null;const a=ia(e).position==="fixed";let l=a?Ks(e):e;for(;Ar(l)&&!Xs(l);){const s=ia(l),c=O9(l);!c&&s.position==="fixed"&&(i=null),(a?!c&&!i:!c&&s.position==="static"&&i&&Fje.has(i.position)||cy(l)&&!c&&bU(e,l))?o=o.filter(d=>d!==l):i=s,l=Ks(l)}return r.set(e,o),o}function Hje(e){let{element:r,boundary:n,rootBoundary:o,strategy:i}=e;const a=[...n==="clippingAncestors"?Lw(r)?[]:qje(r,this._c):[].concat(n),o],l=a[0],s=a.reduce((c,d)=>{const u=vU(r,d,i);return c.top=Co(u.top,c.top),c.right=tl(u.right,c.right),c.bottom=tl(u.bottom,c.bottom),c.left=Co(u.left,c.left),c},vU(r,l,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}}function Uje(e){const{width:r,height:n}=fU(e);return{width:r,height:n}}function Wje(e,r,n){const o=$i(r),i=Kl(r),a=n==="fixed",l=ip(e,!0,a,r);let s={scrollLeft:0,scrollTop:0};const c=Zl(0);function d(){c.x=Xw(i)}if(o||!o&&!a)if((Cf(r)!=="body"||cy(i))&&(s=Vw(r)),o){const m=ip(r,!0,a,r);c.x=m.x+r.clientLeft,c.y=m.y+r.clientTop}else i&&d();a&&!o&&i&&d();const u=i&&!o&&!a?mU(i,s):Zl(0),p=l.left+s.scrollLeft-c.x-u.x,f=l.top+s.scrollTop-c.y-u.y;return{x:p,y:f,width:l.width,height:l.height}}function X9(e){return ia(e).position==="static"}function xU(e,r){if(!$i(e)||ia(e).position==="fixed")return null;if(r)return r(e);let n=e.offsetParent;return Kl(e)===n&&(n=n.ownerDocument.body),n}function wU(e,r){const n=ni(e);if(Lw(e))return n;if(!$i(e)){let i=Ks(e);for(;i&&!Xs(i);){if(Ar(i)&&!X9(i))return i;i=Ks(i)}return n}let o=xU(e,r);for(;o&&HTe(o)&&X9(o);)o=xU(o,r);return o&&Xs(o)&&X9(o)&&!O9(o)?n:o||XTe(e)||n}const Gje=async function(e){const r=this.getOffsetParent||wU,n=this.getDimensions,o=await n(e.floating);return{reference:Wje(e.reference,await r(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Yje(e){return ia(e).direction==="rtl"}const Xje={convertOffsetParentRelativeRectToViewportRelativeRect:Bje,getDocumentElement:Kl,getClippingRect:Hje,getOffsetParent:wU,getElementRects:Gje,getClientRects:Ije,getDimensions:Uje,getScale:Tf,isElement:Ar,isRTL:Yje};function kU(e,r){return e.x===r.x&&e.y===r.y&&e.width===r.width&&e.height===r.height}function Kje(e,r){let n=null,o;const i=Kl(e);function a(){var s;clearTimeout(o),(s=n)==null||s.disconnect(),n=null}function l(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();const d=e.getBoundingClientRect(),{left:u,top:p,width:f,height:m}=d;if(s||r(),!f||!m)return;const v=Hw(p),w=Hw(i.clientWidth-(u+f)),x=Hw(i.clientHeight-(p+m)),k=Hw(u),C={rootMargin:-v+"px "+-w+"px "+-x+"px "+-k+"px",threshold:Co(0,tl(1,c))||1};let _=!0;function $(R){const T=R[0].intersectionRatio;if(T!==c){if(!_)return l();T?l(!1,T):o=setTimeout(()=>{l(!1,1e-7)},1e3)}T===1&&!kU(d,e.getBoundingClientRect())&&l(),_=!1}try{n=new IntersectionObserver($,{...C,root:i.ownerDocument})}catch{n=new IntersectionObserver($,C)}n.observe(e)}return l(!0),a}function Kw(e,r,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,d=Y9(e),u=i||a?[...d?Zs(d):[],...Zs(r)]:[];u.forEach(k=>{i&&k.addEventListener("scroll",n,{passive:!0}),a&&k.addEventListener("resize",n)});const p=d&&s?Kje(d,n):null;let f=-1,m=null;l&&(m=new ResizeObserver(k=>{let[C]=k;C&&C.target===d&&m&&(m.unobserve(r),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var _;(_=m)==null||_.observe(r)})),n()}),d&&!c&&m.observe(d),m.observe(r));let v,w=c?ip(e):null;c&&x();function x(){const k=ip(e);w&&!kU(w,k)&&n(),w=k,v=requestAnimationFrame(x)}return n(),()=>{var k;u.forEach(C=>{i&&C.removeEventListener("scroll",n),a&&C.removeEventListener("resize",n)}),p?.(),(k=m)==null||k.disconnect(),m=null,c&&cancelAnimationFrame(v)}}const _U=jje,Zje=Eje,Qje=Aje,Jje=Cje,SU=Pje,EU=$je,CU=_je,eAe=zje,tAe=Dje,$U=(e,r,n)=>{const o=new Map,i={platform:Xje,...n},a={...i.platform,_c:o};return kje(e,r,{...i,platform:a})};var rAe=typeof document<"u",nAe=function(){},Zw=rAe?S.useLayoutEffect:nAe;function Qw(e,r){if(e===r)return!0;if(typeof e!=typeof r)return!1;if(typeof e=="function"&&e.toString()===r.toString())return!0;let n,o,i;if(e&&r&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==r.length)return!1;for(o=n;o--!==0;)if(!Qw(e[o],r[o]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(r,i[o]))return!1;for(o=n;o--!==0;){const a=i[o];if(!(a==="_owner"&&e.$$typeof)&&!Qw(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}function RU(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function zU(e,r){const n=RU(e);return Math.round(r*n)/n}function K9(e){const r=S.useRef(e);return Zw(()=>{r.current=e}),r}function oAe(e){e===void 0&&(e={});const{placement:r="bottom",strategy:n="absolute",middleware:o=[],platform:i,elements:{reference:a,floating:l}={},transform:s=!0,whileElementsMounted:c,open:d}=e,[u,p]=S.useState({x:0,y:0,strategy:n,placement:r,middlewareData:{},isPositioned:!1}),[f,m]=S.useState(o);Qw(f,o)||m(o);const[v,w]=S.useState(null),[x,k]=S.useState(null),C=S.useCallback(q=>{q!==T.current&&(T.current=q,w(q))},[]),_=S.useCallback(q=>{q!==A.current&&(A.current=q,k(q))},[]),$=a||v,R=l||x,T=S.useRef(null),A=S.useRef(null),z=S.useRef(u),j=c!=null,I=K9(c),N=K9(i),L=K9(d),H=S.useCallback(()=>{if(!T.current||!A.current)return;const q={placement:r,strategy:n,middleware:f};N.current&&(q.platform=N.current),$U(T.current,A.current,q).then(G=>{const U={...G,isPositioned:L.current!==!1};P.current&&!Qw(z.current,U)&&(z.current=U,Va.flushSync(()=>{p(U)}))})},[f,r,n,N,L]);Zw(()=>{d===!1&&z.current.isPositioned&&(z.current.isPositioned=!1,p(q=>({...q,isPositioned:!1})))},[d]);const P=S.useRef(!1);Zw(()=>(P.current=!0,()=>{P.current=!1}),[]),Zw(()=>{if($&&(T.current=$),R&&(A.current=R),$&&R){if(I.current)return I.current($,R,H);H()}},[$,R,H,I,j]);const V=S.useMemo(()=>({reference:T,floating:A,setReference:C,setFloating:_}),[C,_]),B=S.useMemo(()=>({reference:$,floating:R}),[$,R]),F=S.useMemo(()=>{const q={position:n,left:0,top:0};if(!B.floating)return q;const G=zU(B.floating,u.x),U=zU(B.floating,u.y);return s?{...q,transform:"translate("+G+"px, "+U+"px)",...RU(B.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:G,top:U}},[n,s,B.floating,u.x,u.y]);return S.useMemo(()=>({...u,update:H,refs:V,elements:B,floatingStyles:F}),[u,H,V,B,F])}const iAe=e=>{function r(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:o,padding:i}=typeof e=="function"?e(n):e;return o&&r(o)?o.current!=null?CU({element:o.current,padding:i}).fn(n):{}:o?CU({element:o,padding:i}).fn(n):{}}}},TU=(e,r)=>({..._U(e),options:[e,r]}),Z9=(e,r)=>({...Qje(e),options:[e,r]}),jU=(e,r)=>({...tAe(e),options:[e,r]}),Jw=(e,r)=>({...Jje(e),options:[e,r]}),aAe=(e,r)=>({...SU(e),options:[e,r]}),lAe=(e,r)=>({...EU(e),options:[e,r]}),uy=(e,r)=>({...eAe(e),options:[e,r]}),AU=(e,r)=>({...iAe(e),options:[e,r]});function DU(e){const r=S.useRef(void 0),n=S.useCallback(o=>{const i=e.map(a=>{if(a!=null){if(typeof a=="function"){const l=a,s=l(o);return typeof s=="function"?s:()=>{l(null)}}return a.current=o,()=>{a.current=null}}});return()=>{i.forEach(a=>a?.())}},e);return S.useMemo(()=>e.every(o=>o==null)?null:o=>{r.current&&(r.current(),r.current=void 0),o!=null&&(r.current=n(o))},e)}const sAe="data-floating-ui-focusable",PU="active",MU="selected",cAe={...mb};let NU=!1,dAe=0;const BU=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+dAe++;function uAe(){const[e,r]=S.useState(()=>NU?BU():void 0);return Ql(()=>{e==null&&r(BU())},[]),S.useEffect(()=>{NU=!0},[]),e}const pAe=cAe.useId,IU=pAe||uAe;function hAe(){const e=new Map;return{emit(r,n){var o;(o=e.get(r))==null||o.forEach(i=>i(n))},on(r,n){e.has(r)||e.set(r,new Set),e.get(r).add(n)},off(r,n){var o;(o=e.get(r))==null||o.delete(n)}}}const fAe=S.createContext(null),gAe=S.createContext(null),Q9=()=>{var e;return((e=S.useContext(fAe))==null?void 0:e.id)||null},J9=()=>S.useContext(gAe);function eS(e){return"data-floating-ui-"+e}function aa(e){e.current!==-1&&(clearTimeout(e.current),e.current=-1)}const OU=eS("safe-polygon");function e3(e,r,n){if(n&&!G9(n))return 0;if(typeof e=="number")return e;if(typeof e=="function"){const o=e();return typeof o=="number"?o:o?.[r]}return e?.[r]}function tS(e){return typeof e=="function"?e():e}function LU(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,dataRef:i,events:a,elements:l}=e,{enabled:s=!0,delay:c=0,handleClose:d=null,mouseOnly:u=!1,restMs:p=0,move:f=!0}=r,m=J9(),v=Q9(),w=Yw(d),x=Yw(c),k=Yw(n),C=Yw(p),_=S.useRef(),$=S.useRef(-1),R=S.useRef(),T=S.useRef(-1),A=S.useRef(!0),z=S.useRef(!1),j=S.useRef(()=>{}),I=S.useRef(!1),N=Jl(()=>{var F;const q=(F=i.current.openEvent)==null?void 0:F.type;return q?.includes("mouse")&&q!=="mousedown"});S.useEffect(()=>{if(!s)return;function F(q){let{open:G}=q;G||(aa($),aa(T),A.current=!0,I.current=!1)}return a.on("openchange",F),()=>{a.off("openchange",F)}},[s,a]),S.useEffect(()=>{if(!s||!w.current||!n)return;function F(G){N()&&o(!1,G,"hover")}const q=op(l.floating).documentElement;return q.addEventListener("mouseleave",F),()=>{q.removeEventListener("mouseleave",F)}},[l.floating,n,o,s,w,N]);const L=S.useCallback(function(F,q,G){q===void 0&&(q=!0),G===void 0&&(G="hover");const U=e3(x.current,"close",_.current);U&&!R.current?(aa($),$.current=window.setTimeout(()=>o(!1,F,G),U)):q&&(aa($),o(!1,F,G))},[x,o]),H=Jl(()=>{j.current(),R.current=void 0}),P=Jl(()=>{if(z.current){const F=op(l.floating).body;F.style.pointerEvents="",F.removeAttribute(OU),z.current=!1}}),V=Jl(()=>i.current.openEvent?["click","mousedown"].includes(i.current.openEvent.type):!1);S.useEffect(()=>{if(!s)return;function F(K){if(aa($),A.current=!1,u&&!G9(_.current)||tS(C.current)>0&&!e3(x.current,"open"))return;const O=e3(x.current,"open",_.current);O?$.current=window.setTimeout(()=>{k.current||o(!0,K,"hover")},O):n||o(!0,K,"hover")}function q(K){if(V()){P();return}j.current();const O=op(l.floating);if(aa(T),I.current=!1,w.current&&i.current.floatingContext){n||aa($),R.current=w.current({...i.current.floatingContext,tree:m,x:K.clientX,y:K.clientY,onClose(){P(),H(),V()||L(K,!0,"safe-polygon")}});const W=R.current;O.addEventListener("mousemove",W),j.current=()=>{O.removeEventListener("mousemove",W)};return}(_.current!=="touch"||!dy(l.floating,K.relatedTarget))&&L(K)}function G(K){V()||i.current.floatingContext&&(w.current==null||w.current({...i.current.floatingContext,tree:m,x:K.clientX,y:K.clientY,onClose(){P(),H(),V()||L(K)}})(K))}function U(){aa($)}function Y(K){V()||L(K,!1)}if(Ar(l.domReference)){const K=l.domReference,O=l.floating;return n&&K.addEventListener("mouseleave",G),f&&K.addEventListener("mousemove",F,{once:!0}),K.addEventListener("mouseenter",F),K.addEventListener("mouseleave",q),O&&(O.addEventListener("mouseleave",G),O.addEventListener("mouseenter",U),O.addEventListener("mouseleave",Y)),()=>{n&&K.removeEventListener("mouseleave",G),f&&K.removeEventListener("mousemove",F),K.removeEventListener("mouseenter",F),K.removeEventListener("mouseleave",q),O&&(O.removeEventListener("mouseleave",G),O.removeEventListener("mouseenter",U),O.removeEventListener("mouseleave",Y))}}},[l,s,e,u,f,L,H,P,o,n,k,m,x,w,i,V,C]),Ql(()=>{var F;if(s&&n&&(F=w.current)!=null&&(F=F.__options)!=null&&F.blockPointerEvents&&N()){z.current=!0;const G=l.floating;if(Ar(l.domReference)&&G){var q;const U=op(l.floating).body;U.setAttribute(OU,"");const Y=l.domReference,K=m==null||(q=m.nodesRef.current.find(O=>O.id===v))==null||(q=q.context)==null?void 0:q.elements.floating;return K&&(K.style.pointerEvents=""),U.style.pointerEvents="none",Y.style.pointerEvents="auto",G.style.pointerEvents="auto",()=>{U.style.pointerEvents="",Y.style.pointerEvents="",G.style.pointerEvents=""}}}},[s,n,v,l,m,w,N]),Ql(()=>{n||(_.current=void 0,I.current=!1,H(),P())},[n,H,P]),S.useEffect(()=>()=>{H(),aa($),aa(T),P()},[s,l.domReference,H,P]);const B=S.useMemo(()=>{function F(q){_.current=q.pointerType}return{onPointerDown:F,onPointerEnter:F,onMouseMove(q){const{nativeEvent:G}=q;function U(){!A.current&&!k.current&&o(!0,G,"hover")}u&&!G9(_.current)||n||tS(C.current)===0||I.current&&q.movementX**2+q.movementY**2<2||(aa(T),_.current==="touch"?U():(I.current=!0,T.current=window.setTimeout(U,tS(C.current))))}}},[u,o,n,k,C]);return S.useMemo(()=>s?{reference:B}:{},[s,B])}const rS=()=>{},FU=S.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:rS,setState:rS,isInstantPhase:!1}),mAe=()=>S.useContext(FU);function VU(e){const{children:r,delay:n,timeoutMs:o=0}=e,[i,a]=S.useReducer((c,d)=>({...c,...d}),{delay:n,timeoutMs:o,initialDelay:n,currentId:null,isInstantPhase:!1}),l=S.useRef(null),s=S.useCallback(c=>{a({currentId:c})},[]);return Ql(()=>{i.currentId?l.current===null?l.current=i.currentId:i.isInstantPhase||a({isInstantPhase:!0}):(i.isInstantPhase&&a({isInstantPhase:!1}),l.current=null)},[i.currentId,i.isInstantPhase]),y.jsx(FU.Provider,{value:S.useMemo(()=>({...i,setState:a,setCurrentId:s}),[i,s]),children:r})}function qU(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,floatingId:i}=e,{id:a,enabled:l=!0}=r,s=a??i,c=mAe(),{currentId:d,setCurrentId:u,initialDelay:p,setState:f,timeoutMs:m}=c;return Ql(()=>{l&&d&&(f({delay:{open:1,close:e3(p,"close")}}),d!==s&&o(!1))},[l,s,o,f,d,p]),Ql(()=>{function v(){o(!1),f({delay:p,currentId:null})}if(l&&d&&!n&&d===s){if(m){const w=window.setTimeout(v,m);return()=>{clearTimeout(w)}}v()}},[l,n,f,d,s,o,p,m]),Ql(()=>{l&&(u===rS||!n||u(s))},[l,n,u,s]),c}const yAe={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},vAe={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},HU=e=>{var r,n;return{escapeKey:typeof e=="boolean"?e:(r=e?.escapeKey)!=null?r:!1,outsidePress:typeof e=="boolean"?e:(n=e?.outsidePress)!=null?n:!0}};function UU(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,elements:i,dataRef:a}=e,{enabled:l=!0,escapeKey:s=!0,outsidePress:c=!0,outsidePressEvent:d="pointerdown",referencePress:u=!1,referencePressEvent:p="pointerdown",ancestorScroll:f=!1,bubbles:m,capture:v}=r,w=J9(),x=Jl(typeof c=="function"?c:()=>!1),k=typeof c=="function"?x:c,C=S.useRef(!1),{escapeKey:_,outsidePress:$}=HU(m),{escapeKey:R,outsidePress:T}=HU(v),A=S.useRef(!1),z=Jl(P=>{var V;if(!n||!l||!s||P.key!=="Escape"||A.current)return;const B=(V=a.current.floatingContext)==null?void 0:V.nodeId,F=w?Gw(w.nodesRef.current,B):[];if(!_&&(P.stopPropagation(),F.length>0)){let q=!0;if(F.forEach(G=>{var U;if((U=G.context)!=null&&U.open&&!G.context.dataRef.current.__escapeKeyBubbles){q=!1;return}}),!q)return}o(!1,mje(P)?P.nativeEvent:P,"escape-key")}),j=Jl(P=>{var V;const B=()=>{var F;z(P),(F=Rf(P))==null||F.removeEventListener("keydown",B)};(V=Rf(P))==null||V.addEventListener("keydown",B)}),I=Jl(P=>{var V;const B=a.current.insideReactTree;a.current.insideReactTree=!1;const F=C.current;if(C.current=!1,d==="click"&&F||B||typeof k=="function"&&!k(P))return;const q=Rf(P),G="["+eS("inert")+"]",U=op(i.floating).querySelectorAll(G);let Y=Ar(q)?q:null;for(;Y&&!Xs(Y);){const Z=Ks(Y);if(Xs(Z)||!Ar(Z))break;Y=Z}if(U.length&&Ar(q)&&!pje(q)&&!dy(q,i.floating)&&Array.from(U).every(Z=>!dy(Y,Z)))return;if($i(q)&&H){const Z=Xs(q),Q=ia(q),ie=/auto|scroll/,te=Z||ie.test(Q.overflowX),re=Z||ie.test(Q.overflowY),ue=te&&q.clientWidth>0&&q.scrollWidth>q.clientWidth,_e=re&&q.clientHeight>0&&q.scrollHeight>q.clientHeight,ce=Q.direction==="rtl",pe=_e&&(ce?P.offsetX<=q.offsetWidth-q.clientWidth:P.offsetX>q.clientWidth),xe=ue&&P.offsetY>q.clientHeight;if(pe||xe)return}const K=(V=a.current.floatingContext)==null?void 0:V.nodeId,O=w&&Gw(w.nodesRef.current,K).some(Z=>{var Q;return W9(P,(Q=Z.context)==null?void 0:Q.elements.floating)});if(W9(P,i.floating)||W9(P,i.domReference)||O)return;const W=w?Gw(w.nodesRef.current,K):[];if(W.length>0){let Z=!0;if(W.forEach(Q=>{var ie;if((ie=Q.context)!=null&&ie.open&&!Q.context.dataRef.current.__outsidePressBubbles){Z=!1;return}}),!Z)return}o(!1,P,"outside-press")}),N=Jl(P=>{var V;const B=()=>{var F;I(P),(F=Rf(P))==null||F.removeEventListener(d,B)};(V=Rf(P))==null||V.addEventListener(d,B)});S.useEffect(()=>{if(!n||!l)return;a.current.__escapeKeyBubbles=_,a.current.__outsidePressBubbles=$;let P=-1;function V(U){o(!1,U,"ancestor-scroll")}function B(){window.clearTimeout(P),A.current=!0}function F(){P=window.setTimeout(()=>{A.current=!1},Fw()?5:0)}const q=op(i.floating);s&&(q.addEventListener("keydown",R?j:z,R),q.addEventListener("compositionstart",B),q.addEventListener("compositionend",F)),k&&q.addEventListener(d,T?N:I,T);let G=[];return f&&(Ar(i.domReference)&&(G=Zs(i.domReference)),Ar(i.floating)&&(G=G.concat(Zs(i.floating))),!Ar(i.reference)&&i.reference&&i.reference.contextElement&&(G=G.concat(Zs(i.reference.contextElement)))),G=G.filter(U=>{var Y;return U!==((Y=q.defaultView)==null?void 0:Y.visualViewport)}),G.forEach(U=>{U.addEventListener("scroll",V,{passive:!0})}),()=>{s&&(q.removeEventListener("keydown",R?j:z,R),q.removeEventListener("compositionstart",B),q.removeEventListener("compositionend",F)),k&&q.removeEventListener(d,T?N:I,T),G.forEach(U=>{U.removeEventListener("scroll",V)}),window.clearTimeout(P)}},[a,i,s,k,d,n,o,f,l,_,$,z,R,j,I,T,N]),S.useEffect(()=>{a.current.insideReactTree=!1},[a,k,d]);const L=S.useMemo(()=>({onKeyDown:z,...u&&{[yAe[p]]:P=>{o(!1,P.nativeEvent,"reference-press")},...p!=="click"&&{onClick(P){o(!1,P.nativeEvent,"reference-press")}}}}),[z,o,u,p]),H=S.useMemo(()=>({onKeyDown:z,onMouseDown(){C.current=!0},onMouseUp(){C.current=!0},[vAe[d]]:()=>{a.current.insideReactTree=!0}}),[z,d,a]);return S.useMemo(()=>l?{reference:L,floating:H}:{},[l,L,H])}function bAe(e){const{open:r=!1,onOpenChange:n,elements:o}=e,i=IU(),a=S.useRef({}),[l]=S.useState(()=>hAe()),s=Q9()!=null,[c,d]=S.useState(o.reference),u=Jl((m,v,w)=>{a.current.openEvent=m?v:void 0,l.emit("openchange",{open:m,event:v,reason:w,nested:s}),n?.(m,v,w)}),p=S.useMemo(()=>({setPositionReference:d}),[]),f=S.useMemo(()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference}),[c,o.reference,o.floating]);return S.useMemo(()=>({dataRef:a,open:r,onOpenChange:u,elements:f,events:l,floatingId:i,refs:p}),[r,u,f,l,i,p])}function t3(e){e===void 0&&(e={});const{nodeId:r}=e,n=bAe({...e,elements:{reference:null,floating:null,...e.elements}}),o=e.rootContext||n,i=o.elements,[a,l]=S.useState(null),[s,c]=S.useState(null),d=i?.domReference||a,u=S.useRef(null),p=J9();Ql(()=>{d&&(u.current=d)},[d]);const f=oAe({...e,elements:{...i,...s&&{reference:s}}}),m=S.useCallback(C=>{const _=Ar(C)?{getBoundingClientRect:()=>C.getBoundingClientRect(),getClientRects:()=>C.getClientRects(),contextElement:C}:C;c(_),f.refs.setReference(_)},[f.refs]),v=S.useCallback(C=>{(Ar(C)||C===null)&&(u.current=C,l(C)),(Ar(f.refs.reference.current)||f.refs.reference.current===null||C!==null&&!Ar(C))&&f.refs.setReference(C)},[f.refs]),w=S.useMemo(()=>({...f.refs,setReference:v,setPositionReference:m,domReference:u}),[f.refs,v,m]),x=S.useMemo(()=>({...f.elements,domReference:d}),[f.elements,d]),k=S.useMemo(()=>({...f,...o,refs:w,elements:x,nodeId:r}),[f,w,x,r,o]);return Ql(()=>{o.dataRef.current.floatingContext=k;const C=p?.nodesRef.current.find(_=>_.id===r);C&&(C.context=k)}),S.useMemo(()=>({...f,context:k,refs:w,elements:x}),[f,w,x,k])}function nS(){return cje()&&sje()}function xAe(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,events:i,dataRef:a,elements:l}=e,{enabled:s=!0,visibleOnly:c=!0}=r,d=S.useRef(!1),u=S.useRef(-1),p=S.useRef(!0);S.useEffect(()=>{if(!s)return;const m=ni(l.domReference);function v(){!n&&$i(l.domReference)&&l.domReference===sU(op(l.domReference))&&(d.current=!0)}function w(){p.current=!0}function x(){p.current=!1}return m.addEventListener("blur",v),nS()&&(m.addEventListener("keydown",w,!0),m.addEventListener("pointerdown",x,!0)),()=>{m.removeEventListener("blur",v),nS()&&(m.removeEventListener("keydown",w,!0),m.removeEventListener("pointerdown",x,!0))}},[l.domReference,n,s]),S.useEffect(()=>{if(!s)return;function m(v){let{reason:w}=v;(w==="reference-press"||w==="escape-key")&&(d.current=!0)}return i.on("openchange",m),()=>{i.off("openchange",m)}},[i,s]),S.useEffect(()=>()=>{aa(u)},[]);const f=S.useMemo(()=>({onMouseLeave(){d.current=!1},onFocus(m){if(d.current)return;const v=Rf(m.nativeEvent);if(c&&Ar(v)){if(nS()&&!m.relatedTarget){if(!p.current&&!hje(v))return}else if(!fje(v))return}o(!0,m.nativeEvent,"focus")},onBlur(m){d.current=!1;const v=m.relatedTarget,w=m.nativeEvent,x=Ar(v)&&v.hasAttribute(eS("focus-guard"))&&v.getAttribute("data-type")==="outside";u.current=window.setTimeout(()=>{var k;const C=sU(l.domReference?l.domReference.ownerDocument:document);!v&&C===l.domReference||dy((k=a.current.floatingContext)==null?void 0:k.refs.floating.current,C)||dy(l.domReference,C)||x||o(!1,w,"focus")})}}),[a,l.domReference,o,c]);return S.useMemo(()=>s?{reference:f}:{},[s,f])}function oS(e,r,n){const o=new Map,i=n==="item";let a=e;if(i&&e){const{[PU]:l,[MU]:s,...c}=e;a=c}return{...n==="floating"&&{tabIndex:-1,[sAe]:""},...a,...r.map(l=>{const s=l?l[n]:null;return typeof s=="function"?e?s(e):null:s}).concat(e).reduce((l,s)=>(s&&Object.entries(s).forEach(c=>{let[d,u]=c;if(!(i&&[PU,MU].includes(d)))if(d.indexOf("on")===0){if(o.has(d)||o.set(d,[]),typeof u=="function"){var p;(p=o.get(d))==null||p.push(u),l[d]=function(){for(var f,m=arguments.length,v=new Array(m),w=0;wx(...v)).find(x=>x!==void 0)}}}else l[d]=u}),l),{})}}function WU(e){e===void 0&&(e=[]);const r=e.map(s=>s?.reference),n=e.map(s=>s?.floating),o=e.map(s=>s?.item),i=S.useCallback(s=>oS(s,e,"reference"),r),a=S.useCallback(s=>oS(s,e,"floating"),n),l=S.useCallback(s=>oS(s,e,"item"),o);return S.useMemo(()=>({getReferenceProps:i,getFloatingProps:a,getItemProps:l}),[i,a,l])}const wAe=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function GU(e,r){var n,o;r===void 0&&(r={});const{open:i,elements:a,floatingId:l}=e,{enabled:s=!0,role:c="dialog"}=r,d=IU(),u=((n=a.domReference)==null?void 0:n.id)||d,p=S.useMemo(()=>{var k;return((k=gje(a.floating))==null?void 0:k.id)||l},[a.floating,l]),f=(o=wAe.get(c))!=null?o:c,m=Q9()!=null,v=S.useMemo(()=>f==="tooltip"||c==="label"?{["aria-"+(c==="label"?"labelledby":"describedby")]:i?p:void 0}:{"aria-expanded":i?"true":"false","aria-haspopup":f==="alertdialog"?"dialog":f,"aria-controls":i?p:void 0,...f==="listbox"&&{role:"combobox"},...f==="menu"&&{id:u},...f==="menu"&&m&&{role:"menuitem"},...c==="select"&&{"aria-autocomplete":"none"},...c==="combobox"&&{"aria-autocomplete":"list"}},[f,p,m,i,u,c]),w=S.useMemo(()=>{const k={id:p,...f&&{role:f}};return f==="tooltip"||c==="label"?k:{...k,...f==="menu"&&{"aria-labelledby":u}}},[f,p,u,c]),x=S.useCallback(k=>{let{active:C,selected:_}=k;const $={role:"option",...C&&{id:p+"-fui-option"}};switch(c){case"select":case"combobox":return{...$,"aria-selected":_}}return{}},[p,c]);return S.useMemo(()=>s?{reference:v,floating:w,item:x}:{},[s,v,w,x])}const[kAe,la]=na("ScrollArea.Root component was not found in tree");function jf(e,r){const n=Qn(r);xf(()=>{let o=0;if(e){const i=new ResizeObserver(()=>{cancelAnimationFrame(o),o=window.requestAnimationFrame(n)});return i.observe(e),()=>{window.cancelAnimationFrame(o),i.unobserve(e)}}},[e,n])}const _Ae=S.forwardRef((e,r)=>{const{style:n,...o}=e,i=la(),[a,l]=S.useState(0),[s,c]=S.useState(0),d=!!(a&&s);return jf(i.scrollbarX,()=>{const u=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(u),c(u)}),jf(i.scrollbarY,()=>{const u=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(u),l(u)}),d?y.jsx("div",{...o,ref:r,style:{...n,width:a,height:s}}):null}),SAe=S.forwardRef((e,r)=>{const n=la(),o=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&o?y.jsx(_Ae,{...e,ref:r}):null}),EAe={scrollHideDelay:1e3,type:"hover"},YU=S.forwardRef((e,r)=>{const{type:n,scrollHideDelay:o,scrollbars:i,getStyles:a,...l}=Pe("ScrollAreaRoot",EAe,e),[s,c]=S.useState(null),[d,u]=S.useState(null),[p,f]=S.useState(null),[m,v]=S.useState(null),[w,x]=S.useState(null),[k,C]=S.useState(0),[_,$]=S.useState(0),[R,T]=S.useState(!1),[A,z]=S.useState(!1),j=$r(r,I=>c(I));return y.jsx(kAe,{value:{type:n,scrollHideDelay:o,scrollArea:s,viewport:d,onViewportChange:u,content:p,onContentChange:f,scrollbarX:m,onScrollbarXChange:v,scrollbarXEnabled:R,onScrollbarXEnabledChange:T,scrollbarY:w,onScrollbarYChange:x,scrollbarYEnabled:A,onScrollbarYEnabledChange:z,onCornerWidthChange:C,onCornerHeightChange:$,getStyles:a},children:y.jsx(Se,{...l,ref:j,__vars:{"--sa-corner-width":i!=="xy"?"0px":`${k}px`,"--sa-corner-height":i!=="xy"?"0px":`${_}px`}})})});YU.displayName="@mantine/core/ScrollAreaRoot";function XU(e,r){const n=e/r;return Number.isNaN(n)?0:n}function r3(e){const r=XU(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,o=(e.scrollbar.size-n)*r;return Math.max(o,18)}function KU(e,r){return n=>{if(e[0]===e[1]||r[0]===r[1])return r[0];const o=(r[1]-r[0])/(e[1]-e[0]);return r[0]+o*(n-e[0])}}function CAe(e,[r,n]){return Math.min(n,Math.max(r,e))}function ZU(e,r,n="ltr"){const o=r3(r),i=r.scrollbar.paddingStart+r.scrollbar.paddingEnd,a=r.scrollbar.size-i,l=r.content-r.viewport,s=a-o,c=n==="ltr"?[0,l]:[l*-1,0],d=CAe(e,c);return KU([0,l],[0,s])(d)}function $Ae(e,r,n,o="ltr"){const i=r3(n),a=i/2,l=r||a,s=i-l,c=n.scrollbar.paddingStart+l,d=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,p=o==="ltr"?[0,u]:[u*-1,0];return KU([c,d],p)(e)}function QU(e,r){return e>0&&e{e?.(o),(n===!1||!o.defaultPrevented)&&r?.(o)}}const[RAe,JU]=na("ScrollAreaScrollbar was not found in tree"),eW=S.forwardRef((e,r)=>{const{sizes:n,hasThumb:o,onThumbChange:i,onThumbPointerUp:a,onThumbPointerDown:l,onThumbPositionChange:s,onDragScroll:c,onWheelScroll:d,onResize:u,...p}=e,f=la(),[m,v]=S.useState(null),w=$r(r,z=>v(z)),x=S.useRef(null),k=S.useRef(""),{viewport:C}=f,_=n.content-n.viewport,$=Qn(d),R=Qn(s),T=bf(u,10),A=z=>{if(x.current){const j=z.clientX-x.current.left,I=z.clientY-x.current.top;c({x:j,y:I})}};return S.useEffect(()=>{const z=j=>{const I=j.target;m?.contains(I)&&$(j,_)};return document.addEventListener("wheel",z,{passive:!1}),()=>document.removeEventListener("wheel",z,{passive:!1})},[C,m,_,$]),S.useEffect(R,[n,R]),jf(m,T),jf(f.content,T),y.jsx(RAe,{value:{scrollbar:m,hasThumb:o,onThumbChange:Qn(i),onThumbPointerUp:Qn(a),onThumbPositionChange:R,onThumbPointerDown:Qn(l)},children:y.jsx("div",{...p,ref:w,"data-mantine-scrollbar":!0,style:{position:"absolute",...p.style},onPointerDown:ap(e.onPointerDown,z=>{z.preventDefault(),z.button===0&&(z.target.setPointerCapture(z.pointerId),x.current=m.getBoundingClientRect(),k.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",A(z))}),onPointerMove:ap(e.onPointerMove,A),onPointerUp:ap(e.onPointerUp,z=>{const j=z.target;j.hasPointerCapture(z.pointerId)&&(z.preventDefault(),j.releasePointerCapture(z.pointerId))}),onLostPointerCapture:()=>{document.body.style.webkitUserSelect=k.current,x.current=null}})})}),tW=S.forwardRef((e,r)=>{const{sizes:n,onSizesChange:o,style:i,...a}=e,l=la(),[s,c]=S.useState(),d=S.useRef(null),u=$r(r,d,l.onScrollbarXChange);return S.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),y.jsx(eW,{"data-orientation":"horizontal",...a,ref:u,sizes:n,style:{...i,"--sa-thumb-width":`${r3(n)}px`},onThumbPointerDown:p=>e.onThumbPointerDown(p.x),onDragScroll:p=>e.onDragScroll(p.x),onWheelScroll:(p,f)=>{if(l.viewport){const m=l.viewport.scrollLeft+p.deltaX;e.onWheelScroll(m),QU(m,f)&&p.preventDefault()}},onResize:()=>{d.current&&l.viewport&&s&&o({content:l.viewport.scrollWidth,viewport:l.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:xd(s.paddingLeft),paddingEnd:xd(s.paddingRight)}})}})});tW.displayName="@mantine/core/ScrollAreaScrollbarX";const rW=S.forwardRef((e,r)=>{const{sizes:n,onSizesChange:o,style:i,...a}=e,l=la(),[s,c]=S.useState(),d=S.useRef(null),u=$r(r,d,l.onScrollbarYChange);return S.useEffect(()=>{d.current&&c(window.getComputedStyle(d.current))},[]),y.jsx(eW,{...a,"data-orientation":"vertical",ref:u,sizes:n,style:{"--sa-thumb-height":`${r3(n)}px`,...i},onThumbPointerDown:p=>e.onThumbPointerDown(p.y),onDragScroll:p=>e.onDragScroll(p.y),onWheelScroll:(p,f)=>{if(l.viewport){const m=l.viewport.scrollTop+p.deltaY;e.onWheelScroll(m),QU(m,f)&&p.preventDefault()}},onResize:()=>{d.current&&l.viewport&&s&&o({content:l.viewport.scrollHeight,viewport:l.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:xd(s.paddingTop),paddingEnd:xd(s.paddingBottom)}})}})});rW.displayName="@mantine/core/ScrollAreaScrollbarY";const n3=S.forwardRef((e,r)=>{const{orientation:n="vertical",...o}=e,{dir:i}=bd(),a=la(),l=S.useRef(null),s=S.useRef(0),[c,d]=S.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=XU(c.viewport,c.content),p={...o,sizes:c,onSizesChange:d,hasThumb:u>0&&u<1,onThumbChange:m=>{l.current=m},onThumbPointerUp:()=>{s.current=0},onThumbPointerDown:m=>{s.current=m}},f=(m,v)=>$Ae(m,s.current,c,v);return n==="horizontal"?y.jsx(tW,{...p,ref:r,onThumbPositionChange:()=>{if(a.viewport&&l.current){const m=a.viewport.scrollLeft,v=ZU(m,c,i);l.current.style.transform=`translate3d(${v}px, 0, 0)`}},onWheelScroll:m=>{a.viewport&&(a.viewport.scrollLeft=m)},onDragScroll:m=>{a.viewport&&(a.viewport.scrollLeft=f(m,i))}}):n==="vertical"?y.jsx(rW,{...p,ref:r,onThumbPositionChange:()=>{if(a.viewport&&l.current){const m=a.viewport.scrollTop,v=ZU(m,c);c.scrollbar.size===0?l.current.style.setProperty("--thumb-opacity","0"):l.current.style.setProperty("--thumb-opacity","1"),l.current.style.transform=`translate3d(0, ${v}px, 0)`}},onWheelScroll:m=>{a.viewport&&(a.viewport.scrollTop=m)},onDragScroll:m=>{a.viewport&&(a.viewport.scrollTop=f(m))}}):null});n3.displayName="@mantine/core/ScrollAreaScrollbarVisible";const iS=S.forwardRef((e,r)=>{const n=la(),{forceMount:o,...i}=e,[a,l]=S.useState(!1),s=e.orientation==="horizontal",c=bf(()=>{if(n.viewport){const d=n.viewport.offsetWidth{const{forceMount:n,...o}=e,i=la(),[a,l]=S.useState(!1);return S.useEffect(()=>{const{scrollArea:s}=i;let c=0;if(s){const d=()=>{window.clearTimeout(c),l(!0)},u=()=>{c=window.setTimeout(()=>l(!1),i.scrollHideDelay)};return s.addEventListener("pointerenter",d),s.addEventListener("pointerleave",u),()=>{window.clearTimeout(c),s.removeEventListener("pointerenter",d),s.removeEventListener("pointerleave",u)}}},[i.scrollArea,i.scrollHideDelay]),n||a?y.jsx(iS,{"data-state":a?"visible":"hidden",...o,ref:r}):null});nW.displayName="@mantine/core/ScrollAreaScrollbarHover";const zAe=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=la(),a=e.orientation==="horizontal",[l,s]=S.useState("hidden"),c=bf(()=>s("idle"),100);return S.useEffect(()=>{if(l==="idle"){const d=window.setTimeout(()=>s("hidden"),i.scrollHideDelay);return()=>window.clearTimeout(d)}},[l,i.scrollHideDelay]),S.useEffect(()=>{const{viewport:d}=i,u=a?"scrollLeft":"scrollTop";if(d){let p=d[u];const f=()=>{const m=d[u];p!==m&&(s("scrolling"),c()),p=m};return d.addEventListener("scroll",f),()=>d.removeEventListener("scroll",f)}},[i.viewport,a,c]),n||l!=="hidden"?y.jsx(n3,{"data-state":l==="hidden"?"hidden":"visible",...o,ref:r,onPointerEnter:ap(e.onPointerEnter,()=>s("interacting")),onPointerLeave:ap(e.onPointerLeave,()=>s("idle"))}):null}),aS=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=la(),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:l}=i,s=e.orientation==="horizontal";return S.useEffect(()=>(s?a(!0):l(!0),()=>{s?a(!1):l(!1)}),[s,a,l]),i.type==="hover"?y.jsx(nW,{...o,ref:r,forceMount:n}):i.type==="scroll"?y.jsx(zAe,{...o,ref:r,forceMount:n}):i.type==="auto"?y.jsx(iS,{...o,ref:r,forceMount:n}):i.type==="always"?y.jsx(n3,{...o,ref:r}):null});aS.displayName="@mantine/core/ScrollAreaScrollbar";function TAe(e,r=()=>{}){let n={left:e.scrollLeft,top:e.scrollTop},o=0;return(function i(){const a={left:e.scrollLeft,top:e.scrollTop},l=n.left!==a.left,s=n.top!==a.top;(l||s)&&r(),n=a,o=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(o)}const oW=S.forwardRef((e,r)=>{const{style:n,...o}=e,i=la(),a=JU(),{onThumbPositionChange:l}=a,s=$r(r,u=>a.onThumbChange(u)),c=S.useRef(void 0),d=bf(()=>{c.current&&(c.current(),c.current=void 0)},100);return S.useEffect(()=>{const{viewport:u}=i;if(u){const p=()=>{if(d(),!c.current){const f=TAe(u,l);c.current=f,l()}};return l(),u.addEventListener("scroll",p),()=>u.removeEventListener("scroll",p)}},[i.viewport,d,l]),y.jsx("div",{"data-state":a.hasThumb?"visible":"hidden",...o,ref:s,style:{width:"var(--sa-thumb-width)",height:"var(--sa-thumb-height)",...n},onPointerDownCapture:ap(e.onPointerDownCapture,u=>{const p=u.target.getBoundingClientRect(),f=u.clientX-p.left,m=u.clientY-p.top;a.onThumbPointerDown({x:f,y:m})}),onPointerUp:ap(e.onPointerUp,a.onThumbPointerUp)})});oW.displayName="@mantine/core/ScrollAreaThumb";const lS=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=JU();return n||i.hasThumb?y.jsx(oW,{ref:r,...o}):null});lS.displayName="@mantine/core/ScrollAreaThumb";const iW=S.forwardRef(({children:e,style:r,...n},o)=>{const i=la(),a=$r(o,i.onViewportChange);return y.jsx(Se,{...n,ref:a,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...r},children:y.jsx("div",{...i.getStyles("content"),ref:i.onContentChange,children:e})})});iW.displayName="@mantine/core/ScrollAreaViewport";var sS={root:"m_d57069b5",content:"m_b1336c6",viewport:"m_c0783ff9",viewportInner:"m_f8f631dd",scrollbar:"m_c44ba933",thumb:"m_d8b5e363",corner:"m_21657268"};const aW={scrollHideDelay:1e3,type:"hover",scrollbars:"xy"},jAe=(e,{scrollbarSize:r,overscrollBehavior:n})=>({root:{"--scrollarea-scrollbar-size":$e(r),"--scrollarea-over-scroll-behavior":n}}),es=ot((e,r)=>{const n=Pe("ScrollArea",aW,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,scrollbarSize:c,vars:d,type:u,scrollHideDelay:p,viewportProps:f,viewportRef:m,onScrollPositionChange:v,children:w,offsetScrollbars:x,scrollbars:k,onBottomReached:C,onTopReached:_,overscrollBehavior:$,attributes:R,...T}=n,[A,z]=S.useState(!1),[j,I]=S.useState(!1),[N,L]=S.useState(!1),H=kt({name:"ScrollArea",props:n,classes:sS,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:R,vars:d,varsResolver:jAe}),P=S.useRef(null),V=DU([m,P]);return S.useEffect(()=>{if(!P.current||x!=="present")return;const B=P.current,F=new ResizeObserver(()=>{const{scrollHeight:q,clientHeight:G,scrollWidth:U,clientWidth:Y}=B;I(q>G),L(U>Y)});return F.observe(B),()=>F.disconnect()},[P,x]),y.jsxs(YU,{getStyles:H,type:u==="never"?"always":u,scrollHideDelay:p,ref:r,scrollbars:k,...H("root"),...T,children:[y.jsx(iW,{...f,...H("viewport",{style:f?.style}),ref:V,"data-offset-scrollbars":x===!0?"xy":x||void 0,"data-scrollbars":k||void 0,"data-horizontal-hidden":x==="present"&&!N?"true":void 0,"data-vertical-hidden":x==="present"&&!j?"true":void 0,onScroll:B=>{f?.onScroll?.(B),v?.({x:B.currentTarget.scrollLeft,y:B.currentTarget.scrollTop});const{scrollTop:F,scrollHeight:q,clientHeight:G}=B.currentTarget;F-(q-G)>=-.6&&C?.(),F===0&&_?.()},children:w}),(k==="xy"||k==="x")&&y.jsx(aS,{...H("scrollbar"),orientation:"horizontal","data-hidden":u==="never"||x==="present"&&!N?!0:void 0,forceMount:!0,onMouseEnter:()=>z(!0),onMouseLeave:()=>z(!1),children:y.jsx(lS,{...H("thumb")})}),(k==="xy"||k==="y")&&y.jsx(aS,{...H("scrollbar"),orientation:"vertical","data-hidden":u==="never"||x==="present"&&!j?!0:void 0,forceMount:!0,onMouseEnter:()=>z(!0),onMouseLeave:()=>z(!1),children:y.jsx(lS,{...H("thumb")})}),y.jsx(SAe,{...H("corner"),"data-hovered":A||void 0,"data-hidden":u==="never"||void 0})]})});es.displayName="@mantine/core/ScrollArea";const oi=ot((e,r)=>{const{children:n,classNames:o,styles:i,scrollbarSize:a,scrollHideDelay:l,type:s,dir:c,offsetScrollbars:d,viewportRef:u,onScrollPositionChange:p,unstyled:f,variant:m,viewportProps:v,scrollbars:w,style:x,vars:k,onBottomReached:C,onTopReached:_,onOverflowChange:$,...R}=Pe("ScrollAreaAutosize",aW,e),T=S.useRef(null),A=DU([u,T]),[z,j]=S.useState(!1),I=S.useRef(!1);return S.useEffect(()=>{if(!$)return;const N=T.current;if(!N)return;const L=()=>{const P=N.scrollHeight>N.clientHeight;P!==z&&(I.current?$?.(P):(I.current=!0,P&&$?.(!0)),j(P))};L();const H=new ResizeObserver(L);return H.observe(N),()=>H.disconnect()},[$,z]),y.jsx(Se,{...R,ref:r,style:[{display:"flex",overflow:"hidden"},x],children:y.jsx(Se,{style:{display:"flex",flexDirection:"column",flex:1,overflow:"hidden",...w==="y"&&{minWidth:0},...w==="x"&&{minHeight:0},...w==="xy"&&{minWidth:0,minHeight:0},...w===!1&&{minWidth:0,minHeight:0}},children:y.jsx(es,{classNames:o,styles:i,scrollHideDelay:l,scrollbarSize:a,type:s,dir:c,offsetScrollbars:d,viewportRef:A,onScrollPositionChange:p,unstyled:f,variant:m,viewportProps:v,vars:k,scrollbars:w,onBottomReached:C,onTopReached:_,"data-autosize":"true",children:n})})})});es.classes=sS,oi.displayName="@mantine/core/ScrollAreaAutosize",oi.classes=sS,es.Autosize=oi;var lW={root:"m_87cf2631"};const AAe={__staticSelector:"UnstyledButton"},pr=Jn((e,r)=>{const n=Pe("UnstyledButton",AAe,e),{className:o,component:i="button",__staticSelector:a,unstyled:l,classNames:s,styles:c,style:d,attributes:u,...p}=n,f=kt({name:a,props:n,classes:lW,className:o,style:d,classNames:s,styles:c,unstyled:l,attributes:u});return y.jsx(Se,{...f("root",{focusable:!0}),component:i,ref:r,type:i==="button"?"button":void 0,...p})});pr.classes=lW,pr.displayName="@mantine/core/UnstyledButton";var sW={root:"m_515a97f8"};const o3=ot((e,r)=>{const n=Pe("VisuallyHidden",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,attributes:d,...u}=n,p=kt({name:"VisuallyHidden",classes:sW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:d});return y.jsx(Se,{component:"span",ref:r,...p("root"),...u})});o3.classes=sW,o3.displayName="@mantine/core/VisuallyHidden";var cW={root:"m_1b7284a3"};const DAe=(e,{radius:r,shadow:n})=>({root:{"--paper-radius":r===void 0?void 0:wn(r),"--paper-shadow":uH(n)}}),Af=Jn((e,r)=>{const n=Pe("Paper",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,withBorder:c,vars:d,radius:u,shadow:p,variant:f,mod:m,attributes:v,...w}=n,x=kt({name:"Paper",props:n,classes:cW,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:d,varsResolver:DAe});return y.jsx(Se,{ref:r,mod:[{"data-with-border":c},m],...x("root"),variant:f,...w})});Af.classes=cW,Af.displayName="@mantine/core/Paper";function dW(e,r,n,o){return e==="center"||o==="center"?{top:r}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function uW(e,r,n,o,i){return e==="center"||o==="center"?{left:r}:e==="end"?{[i==="ltr"?"right":"left"]:n}:e==="start"?{[i==="ltr"?"left":"right"]:n}:{}}const PAe={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function MAe({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,arrowX:a,arrowY:l,dir:s}){const[c,d="center"]=e.split("-"),u={width:r,height:r,transform:"rotate(45deg)",position:"absolute",[PAe[c]]:o},p=-r/2;return c==="left"?{...u,...dW(d,l,n,i),right:p,borderLeftColor:"transparent",borderBottomColor:"transparent",clipPath:"polygon(100% 0, 0 0, 100% 100%)"}:c==="right"?{...u,...dW(d,l,n,i),left:p,borderRightColor:"transparent",borderTopColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 100%)"}:c==="top"?{...u,...uW(d,a,n,i,s),bottom:p,borderTopColor:"transparent",borderLeftColor:"transparent",clipPath:"polygon(0 100%, 100% 100%, 100% 0)"}:c==="bottom"?{...u,...uW(d,a,n,i,s),top:p,borderBottomColor:"transparent",borderRightColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 0)"}:{}}const i3=S.forwardRef(({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,visible:a,arrowX:l,arrowY:s,style:c,...d},u)=>{const{dir:p}=bd();return a?y.jsx("div",{...d,ref:u,style:{...c,...MAe({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,dir:p,arrowX:l,arrowY:s})}}):null});i3.displayName="@mantine/core/FloatingArrow";function pW(e,r){if(e==="rtl"&&(r.includes("right")||r.includes("left"))){const[n,o]=r.split("-"),i=n==="right"?"left":"right";return o===void 0?i:`${i}-${o}`}return r}var hW={root:"m_9814e45f"};const NAe={zIndex:Ew("modal")},BAe=(e,{gradient:r,color:n,backgroundOpacity:o,blur:i,radius:a,zIndex:l})=>({root:{"--overlay-bg":r||(n!==void 0||o!==void 0)&&Xl(n||"#000",o??.6)||void 0,"--overlay-filter":i?`blur(${$e(i)})`:void 0,"--overlay-radius":a===void 0?void 0:wn(a),"--overlay-z-index":l?.toString()}}),cS=Jn((e,r)=>{const n=Pe("Overlay",NAe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,fixed:d,center:u,children:p,radius:f,zIndex:m,gradient:v,blur:w,color:x,backgroundOpacity:k,mod:C,attributes:_,...$}=n,R=kt({name:"Overlay",props:n,classes:hW,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:_,vars:c,varsResolver:BAe});return y.jsx(Se,{ref:r,...R("root"),mod:[{center:u,fixed:d},C],...$,children:p})});cS.classes=hW,cS.displayName="@mantine/core/Overlay";function dS(e){const r=document.createElement("div");return r.setAttribute("data-portal","true"),typeof e.className=="string"&&r.classList.add(...e.className.split(" ").filter(Boolean)),typeof e.style=="object"&&Object.assign(r.style,e.style),typeof e.id=="string"&&r.setAttribute("id",e.id),r}function IAe({target:e,reuseTargetNode:r,...n}){if(e)return typeof e=="string"?document.querySelector(e)||dS(n):e;if(r){const o=document.querySelector("[data-mantine-shared-portal-node]");if(o)return o;const i=dS(n);return i.setAttribute("data-mantine-shared-portal-node","true"),document.body.appendChild(i),i}return dS(n)}const OAe={reuseTargetNode:!0},py=ot((e,r)=>{const{children:n,target:o,reuseTargetNode:i,...a}=Pe("Portal",OAe,e),[l,s]=S.useState(!1),c=S.useRef(null);return xf(()=>(s(!0),c.current=IAe({target:o,reuseTargetNode:i,...a}),v9(r,c.current),!o&&!i&&c.current&&document.body.appendChild(c.current),()=>{!o&&!i&&c.current&&document.body.removeChild(c.current)}),[o]),!l||!c.current?null:Va.createPortal(y.jsx(y.Fragment,{children:n}),c.current)});py.displayName="@mantine/core/Portal";const Df=ot(({withinPortal:e=!0,children:r,...n},o)=>Dw()==="test"||!e?y.jsx(y.Fragment,{children:r}):y.jsx(py,{ref:o,...n,children:r}));Df.displayName="@mantine/core/OptionalPortal";const hy=e=>({in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${e==="bottom"?10:-10}px)`},transitionProperty:"transform, opacity"}),a3={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},"fade-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(30px)"},transitionProperty:"opacity, transform"},"fade-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-30px)"},transitionProperty:"opacity, transform"},"fade-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(30px)"},transitionProperty:"opacity, transform"},"fade-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-30px)"},transitionProperty:"opacity, transform"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(-20px) skew(-10deg, -5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(20px) skew(-10deg, -5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(-5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:{...hy("bottom"),common:{transformOrigin:"center center"}},"pop-bottom-left":{...hy("bottom"),common:{transformOrigin:"bottom left"}},"pop-bottom-right":{...hy("bottom"),common:{transformOrigin:"bottom right"}},"pop-top-left":{...hy("top"),common:{transformOrigin:"top left"}},"pop-top-right":{...hy("top"),common:{transformOrigin:"top right"}}},fW={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function LAe({transition:e,state:r,duration:n,timingFunction:o}){const i={WebkitBackfaceVisibility:"hidden",transitionDuration:`${n}ms`,transitionTimingFunction:o};return typeof e=="string"?e in a3?{transitionProperty:a3[e].transitionProperty,...i,...a3[e].common,...a3[e][fW[r]]}:{}:{transitionProperty:e.transitionProperty,...i,...e.common,...e[fW[r]]}}function FAe({duration:e,exitDuration:r,timingFunction:n,mounted:o,onEnter:i,onExit:a,onEntered:l,onExited:s,enterDelay:c,exitDelay:d}){const u=lo(),p=_H(),f=u.respectReducedMotion?p:!1,[m,v]=S.useState(f?0:e),[w,x]=S.useState(o?"entered":"exited"),k=S.useRef(-1),C=S.useRef(-1),_=S.useRef(-1);function $(){window.clearTimeout(k.current),window.clearTimeout(C.current),cancelAnimationFrame(_.current)}const R=A=>{$();const z=A?i:a,j=A?l:s,I=f?0:A?e:r;v(I),I===0?(typeof z=="function"&&z(),typeof j=="function"&&j(),x(A?"entered":"exited")):_.current=requestAnimationFrame(()=>{YM.flushSync(()=>{x(A?"pre-entering":"pre-exiting")}),_.current=requestAnimationFrame(()=>{typeof z=="function"&&z(),x(A?"entering":"exiting"),k.current=window.setTimeout(()=>{typeof j=="function"&&j(),x(A?"entered":"exited")},I)})})},T=A=>{if($(),typeof(A?c:d)!="number"){R(A);return}C.current=window.setTimeout(()=>{R(A)},A?c:d)};return wf(()=>{T(o)},[o]),S.useEffect(()=>()=>{$()},[]),{transitionDuration:m,transitionStatus:w,transitionTimingFunction:n||"ease"}}function wd({keepMounted:e,transition:r="fade",duration:n=250,exitDuration:o=n,mounted:i,children:a,timingFunction:l="ease",onExit:s,onEntered:c,onEnter:d,onExited:u,enterDelay:p,exitDelay:f}){const m=Dw(),{transitionDuration:v,transitionStatus:w,transitionTimingFunction:x}=FAe({mounted:i,exitDuration:o,duration:n,timingFunction:l,onExit:s,onEntered:c,onEnter:d,onExited:u,enterDelay:p,exitDelay:f});return v===0||m==="test"?i?y.jsx(y.Fragment,{children:a({})}):e?a({display:"none"}):null:w==="exited"?e?a({display:"none"}):null:y.jsx(y.Fragment,{children:a(LAe({transition:r,duration:v,state:w,timingFunction:x}))})}wd.displayName="@mantine/core/Transition";const[VAe,gW]=na("Popover component was not found in the tree");function l3({children:e,active:r=!0,refProp:n="ref",innerRef:o}){const i=bH(r),a=$r(i,o),l=md(e);return l?S.cloneElement(l,{[n]:a}):e}function mW(e){return y.jsx(o3,{tabIndex:-1,"data-autofocus":!0,...e})}l3.displayName="@mantine/core/FocusTrap",mW.displayName="@mantine/core/FocusTrapInitialFocus",l3.InitialFocus=mW;var yW={dropdown:"m_38a85659",arrow:"m_a31dc6c1",overlay:"m_3d7bc908"};const Qs=ot((e,r)=>{const n=Pe("PopoverDropdown",null,e),{className:o,style:i,vars:a,children:l,onKeyDownCapture:s,variant:c,classNames:d,styles:u,...p}=n,f=gW(),m=ZRe({opened:f.opened,shouldReturnFocus:f.returnFocus}),v=f.withRoles?{"aria-labelledby":f.getTargetId(),id:f.getDropdownId(),role:"dialog",tabIndex:-1}:{},w=$r(r,f.floating);return f.disabled?null:y.jsx(Df,{...f.portalProps,withinPortal:f.withinPortal,children:y.jsx(wd,{mounted:f.opened,...f.transitionProps,transition:f.transitionProps?.transition||"fade",duration:f.transitionProps?.duration??150,keepMounted:f.keepMounted,exitDuration:typeof f.transitionProps?.exitDuration=="number"?f.transitionProps.exitDuration:f.transitionProps?.duration,children:x=>y.jsx(l3,{active:f.trapFocus&&f.opened,innerRef:w,children:y.jsxs(Se,{...v,...p,variant:c,onKeyDownCapture:FRe(()=>{f.onClose?.(),f.onDismiss?.()},{active:f.closeOnEscape,onTrigger:m,onKeyDown:s}),"data-position":f.placement,"data-fixed":f.floatingStrategy==="fixed"||void 0,...f.getStyles("dropdown",{className:o,props:n,classNames:d,styles:u,style:[{...x,zIndex:f.zIndex,top:f.y??0,left:f.x??0,width:f.width==="target"?void 0:$e(f.width),...f.referenceHidden?{display:"none"}:null},f.resolvedStyles.dropdown,u?.dropdown,i]}),children:[l,y.jsx(i3,{ref:f.arrowRef,arrowX:f.arrowX,arrowY:f.arrowY,visible:f.withArrow,position:f.placement,arrowSize:f.arrowSize,arrowRadius:f.arrowRadius,arrowOffset:f.arrowOffset,arrowPosition:f.arrowPosition,...f.getStyles("arrow",{props:n,classNames:d,styles:u})})]})})})})});Qs.classes=yW,Qs.displayName="@mantine/core/PopoverDropdown";const qAe={refProp:"ref",popupType:"dialog"},kd=ot((e,r)=>{const{children:n,refProp:o,popupType:i,...a}=Pe("PopoverTarget",qAe,e),l=md(n);if(!l)throw new Error("Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const s=a,c=gW(),d=$r(c.reference,Rw(l),r),u=c.withRoles?{"aria-haspopup":i,"aria-expanded":c.opened,"aria-controls":c.getDropdownId(),id:c.getTargetId()}:{},p=l.props;return S.cloneElement(l,{...s,...u,...c.targetProps,className:el(c.targetProps.className,s.className,p.className),[o]:d,...c.controlled?null:{onClick:()=>{c.onToggle(),p.onClick?.()}}})});kd.displayName="@mantine/core/PopoverTarget";function HAe(e){if(e===void 0)return{shift:!0,flip:!0};const r={...e};return e.shift===void 0&&(r.shift=!0),e.flip===void 0&&(r.flip=!0),r}function UAe(e,r,n){const o=HAe(e.middlewares),i=[TU(e.offset),lAe()];return e.dropdownVisible&&n!=="test"&&e.preventPositionChangeWhenVisible&&(o.flip=!1),o.shift&&i.push(Z9(typeof o.shift=="boolean"?{limiter:jU(),padding:5}:{limiter:jU(),padding:5,...o.shift})),o.flip&&i.push(typeof o.flip=="boolean"?Jw():Jw(o.flip)),o.inline&&i.push(typeof o.inline=="boolean"?uy():uy(o.inline)),i.push(AU({element:e.arrowRef,padding:e.arrowOffset})),(o.size||e.width==="target")&&i.push(aAe({...typeof o.size=="boolean"?{}:o.size,apply({rects:a,availableWidth:l,availableHeight:s,...c}){const d=r().refs.floating.current?.style??{};o.size&&(typeof o.size=="object"&&o.size.apply?o.size.apply({rects:a,availableWidth:l,availableHeight:s,...c}):Object.assign(d,{maxWidth:`${l}px`,maxHeight:`${s}px`})),e.width==="target"&&Object.assign(d,{width:`${a.reference.width}px`})}})),i}function WAe(e){const r=Dw(),[n,o]=Ys({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),i=S.useRef(n),a=()=>{n&&!e.disabled&&o(!1)},l=()=>{e.disabled||o(!n)},s=t3({strategy:e.strategy,placement:e.preventPositionChangeWhenVisible?e.positionRef.current:e.position,middleware:UAe(e,()=>s,r),whileElementsMounted:e.keepMounted?void 0:Kw});return S.useEffect(()=>{if(!(!s.refs.reference.current||!s.refs.floating.current)&&n)return Kw(s.refs.reference.current,s.refs.floating.current,s.update)},[n,s.update]),wf(()=>{e.onPositionChange?.(s.placement),e.positionRef.current=s.placement},[s.placement,e.preventPositionChangeWhenVisible]),wf(()=>{n!==i.current&&(n?e.onOpen?.():e.onClose?.()),i.current=n},[n,e.onClose,e.onOpen]),xf(()=>{let c=-1;return n&&(c=window.setTimeout(()=>e.setDropdownVisible(!0),4)),()=>{window.clearTimeout(c)}},[n,e.position]),{floating:s,controlled:typeof e.opened=="boolean",opened:n,onClose:a,onToggle:l}}const GAe={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!0,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,withOverlay:!1,hideDetached:!0,clickOutsideEvents:["mousedown","touchstart"],zIndex:Ew("popover"),__staticSelector:"Popover",width:"max-content"},YAe=(e,{radius:r,shadow:n})=>({dropdown:{"--popover-radius":r===void 0?void 0:wn(r),"--popover-shadow":uH(n)}});function br(e){const r=Pe("Popover",GAe,e),{children:n,position:o,offset:i,onPositionChange:a,positionDependencies:l,opened:s,transitionProps:c,onExitTransitionEnd:d,onEnterTransitionEnd:u,width:p,middlewares:f,withArrow:m,arrowSize:v,arrowOffset:w,arrowRadius:x,arrowPosition:k,unstyled:C,classNames:_,styles:$,closeOnClickOutside:R,withinPortal:T,portalProps:A,closeOnEscape:z,clickOutsideEvents:j,trapFocus:I,onClose:N,onDismiss:L,onOpen:H,onChange:P,zIndex:V,radius:B,shadow:F,id:q,defaultOpened:G,__staticSelector:U,withRoles:Y,disabled:K,returnFocus:O,variant:W,keepMounted:Z,vars:Q,floatingStrategy:ie,withOverlay:te,overlayProps:re,hideDetached:ue,attributes:_e,preventPositionChangeWhenVisible:ce,...pe}=r,xe=kt({name:U,props:r,classes:yW,classNames:_,styles:$,unstyled:C,attributes:_e,rootSelector:"dropdown",vars:Q,varsResolver:YAe}),{resolvedStyles:je}=T9({classNames:_,styles:$,props:r}),[Be,Je]=S.useState(s??G??!1),st=S.useRef(o),Le=S.useRef(null),[St,Ve]=S.useState(null),[qe,Xe]=S.useState(null),{dir:It}=bd(),Et=Dw(),be=oa(q),ke=WAe({middlewares:f,width:p,position:pW(It,o),offset:typeof i=="number"?i+(m?v/2:0):i,arrowRef:Le,arrowOffset:w,onPositionChange:a,positionDependencies:l,opened:s,defaultOpened:G,onChange:P,onOpen:H,onClose:N,onDismiss:L,strategy:ie,dropdownVisible:Be,setDropdownVisible:Je,positionRef:st,disabled:K,preventPositionChangeWhenVisible:ce,keepMounted:Z});hH(()=>{R&&(ke.onClose(),L?.())},j,[St,qe]);const Ye=S.useCallback(er=>{Ve(er),ke.floating.refs.setReference(er)},[ke.floating.refs.setReference]),yt=S.useCallback(er=>{Xe(er),ke.floating.refs.setFloating(er)},[ke.floating.refs.setFloating]),xt=S.useCallback(()=>{c?.onExited?.(),d?.(),Je(!1),ce||(st.current=o)},[c?.onExited,d,ce,o]),Tr=S.useCallback(()=>{c?.onEntered?.(),u?.()},[c?.onEntered,u]);return y.jsxs(VAe,{value:{returnFocus:O,disabled:K,controlled:ke.controlled,reference:Ye,floating:yt,x:ke.floating.x,y:ke.floating.y,arrowX:ke.floating?.middlewareData?.arrow?.x,arrowY:ke.floating?.middlewareData?.arrow?.y,opened:ke.opened,arrowRef:Le,transitionProps:{...c,onExited:xt,onEntered:Tr},width:p,withArrow:m,arrowSize:v,arrowOffset:w,arrowRadius:x,arrowPosition:k,placement:ke.floating.placement,trapFocus:I,withinPortal:T,portalProps:A,zIndex:V,radius:B,shadow:F,closeOnEscape:z,onDismiss:L,onClose:ke.onClose,onToggle:ke.onToggle,getTargetId:()=>`${be}-target`,getDropdownId:()=>`${be}-dropdown`,withRoles:Y,targetProps:pe,__staticSelector:U,classNames:_,styles:$,unstyled:C,variant:W,keepMounted:Z,getStyles:xe,resolvedStyles:je,floatingStrategy:ie,referenceHidden:ue&&Et!=="test"?ke.floating.middlewareData.hide?.referenceHidden:!1},children:[n,te&&y.jsx(wd,{transition:"fade",mounted:ke.opened,duration:c?.duration||250,exitDuration:c?.exitDuration||250,children:er=>y.jsx(Df,{withinPortal:T,children:y.jsx(cS,{...re,...xe("overlay",{className:re?.className,style:[er,re?.style]})})})})]})}br.Target=kd,br.Dropdown=Qs,br.displayName="@mantine/core/Popover",br.extend=e=>e;var il={root:"m_5ae2e3c",barsLoader:"m_7a2bd4cd",bar:"m_870bb79","bars-loader-animation":"m_5d2b3b9d",dotsLoader:"m_4e3f22d7",dot:"m_870c4af","loader-dots-animation":"m_aac34a1",ovalLoader:"m_b34414df","oval-loader-animation":"m_f8e89c4b"};const vW=S.forwardRef(({className:e,...r},n)=>y.jsxs(Se,{component:"span",className:el(il.barsLoader,e),...r,ref:n,children:[y.jsx("span",{className:il.bar}),y.jsx("span",{className:il.bar}),y.jsx("span",{className:il.bar})]}));vW.displayName="@mantine/core/Bars";const bW=S.forwardRef(({className:e,...r},n)=>y.jsxs(Se,{component:"span",className:el(il.dotsLoader,e),...r,ref:n,children:[y.jsx("span",{className:il.dot}),y.jsx("span",{className:il.dot}),y.jsx("span",{className:il.dot})]}));bW.displayName="@mantine/core/Dots";const xW=S.forwardRef(({className:e,...r},n)=>y.jsx(Se,{component:"span",className:el(il.ovalLoader,e),...r,ref:n}));xW.displayName="@mantine/core/Oval";const wW={bars:vW,oval:xW,dots:bW},XAe={loaders:wW,type:"oval"},KAe=(e,{size:r,color:n})=>({root:{"--loader-size":dr(r,"loader-size"),"--loader-color":n?Ci(n,e):void 0}}),Pf=ot((e,r)=>{const n=Pe("Loader",XAe,e),{size:o,color:i,type:a,vars:l,className:s,style:c,classNames:d,styles:u,unstyled:p,loaders:f,variant:m,children:v,attributes:w,...x}=n,k=kt({name:"Loader",props:n,classes:il,className:s,style:c,classNames:d,styles:u,unstyled:p,attributes:w,vars:l,varsResolver:KAe});return v?y.jsx(Se,{...k("root"),ref:r,...x,children:v}):y.jsx(Se,{...k("root"),ref:r,component:f[a],variant:m,size:o,...x})});Pf.defaultLoaders=wW,Pf.classes=il,Pf.displayName="@mantine/core/Loader";var Mf={root:"m_8d3f4000",icon:"m_8d3afb97",loader:"m_302b9fb1",group:"m_1a0f1b21",groupSection:"m_437b6484"};const kW={orientation:"horizontal"},ZAe=(e,{borderWidth:r})=>({group:{"--ai-border-width":$e(r)}}),s3=ot((e,r)=>{const n=Pe("ActionIconGroup",kW,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,orientation:c,vars:d,borderWidth:u,variant:p,mod:f,attributes:m,...v}=Pe("ActionIconGroup",kW,e),w=kt({name:"ActionIconGroup",props:n,classes:Mf,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:d,varsResolver:ZAe,rootSelector:"group"});return y.jsx(Se,{...w("group"),ref:r,variant:p,mod:[{"data-orientation":c},f],role:"group",...v})});s3.classes=Mf,s3.displayName="@mantine/core/ActionIconGroup";const QAe=(e,{radius:r,color:n,gradient:o,variant:i,autoContrast:a,size:l})=>{const s=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:a});return{groupSection:{"--section-height":dr(l,"section-height"),"--section-padding-x":dr(l,"section-padding-x"),"--section-fz":Eo(l),"--section-radius":r===void 0?void 0:wn(r),"--section-bg":n||i?s.background:void 0,"--section-color":s.color,"--section-bd":n||i?s.border:void 0}}},uS=ot((e,r)=>{const n=Pe("ActionIconGroupSection",null,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,vars:c,variant:d,gradient:u,radius:p,autoContrast:f,attributes:m,...v}=n,w=kt({name:"ActionIconGroupSection",props:n,classes:Mf,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:QAe,rootSelector:"groupSection"});return y.jsx(Se,{...w("groupSection"),ref:r,variant:d,...v})});uS.classes=Mf,uS.displayName="@mantine/core/ActionIconGroupSection";const JAe=(e,{size:r,radius:n,variant:o,gradient:i,color:a,autoContrast:l})=>{const s=e.variantColorResolver({color:a||e.primaryColor,theme:e,gradient:i,variant:o||"filled",autoContrast:l});return{root:{"--ai-size":dr(r,"ai-size"),"--ai-radius":n===void 0?void 0:wn(n),"--ai-bg":a||o?s.background:void 0,"--ai-hover":a||o?s.hover:void 0,"--ai-hover-color":a||o?s.hoverColor:void 0,"--ai-color":s.color,"--ai-bd":a||o?s.border:void 0}}},lr=Jn((e,r)=>{const n=Pe("ActionIcon",null,e),{className:o,unstyled:i,variant:a,classNames:l,styles:s,style:c,loading:d,loaderProps:u,size:p,color:f,radius:m,__staticSelector:v,gradient:w,vars:x,children:k,disabled:C,"data-disabled":_,autoContrast:$,mod:R,attributes:T,...A}=n,z=kt({name:["ActionIcon",v],props:n,className:o,style:c,classes:Mf,classNames:l,styles:s,unstyled:i,attributes:T,vars:x,varsResolver:JAe});return y.jsxs(pr,{...z("root",{active:!C&&!d&&!_}),...A,unstyled:i,variant:a,size:p,disabled:C||d,ref:r,mod:[{loading:d,disabled:C||_},R],children:[typeof d=="boolean"&&y.jsx(wd,{mounted:d,transition:"slide-down",duration:150,children:j=>y.jsx(Se,{component:"span",...z("loader",{style:j}),"aria-hidden":!0,children:y.jsx(Pf,{color:"var(--ai-color)",size:"calc(var(--ai-size) * 0.55)",...u})})}),y.jsx(Se,{component:"span",mod:{loading:d},...z("icon"),children:k})]})});lr.classes=Mf,lr.displayName="@mantine/core/ActionIcon",lr.Group=s3,lr.GroupSection=uS;const _W=S.forwardRef(({size:e="var(--cb-icon-size, 70%)",style:r,...n},o)=>y.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...r,width:e,height:e},ref:o,...n,children:y.jsx("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})}));_W.displayName="@mantine/core/CloseIcon";var SW={root:"m_86a44da5","root--subtle":"m_220c80f2"};const eDe={variant:"subtle"},tDe=(e,{size:r,radius:n,iconSize:o})=>({root:{"--cb-size":dr(r,"cb-size"),"--cb-radius":n===void 0?void 0:wn(n),"--cb-icon-size":$e(o)}}),lp=Jn((e,r)=>{const n=Pe("CloseButton",eDe,e),{iconSize:o,children:i,vars:a,radius:l,className:s,classNames:c,style:d,styles:u,unstyled:p,"data-disabled":f,disabled:m,variant:v,icon:w,mod:x,attributes:k,__staticSelector:C,..._}=n,$=kt({name:C||"CloseButton",props:n,className:s,style:d,classes:SW,classNames:c,styles:u,unstyled:p,attributes:k,vars:a,varsResolver:tDe});return y.jsxs(pr,{ref:r,..._,unstyled:p,variant:v,disabled:m,mod:[{disabled:m||f},x],...$("root",{variant:v,active:!m&&!f}),children:[w||y.jsx(_W,{}),i]})});lp.classes=SW,lp.displayName="@mantine/core/CloseButton";function rDe(e){return S.Children.toArray(e).filter(Boolean)}var EW={root:"m_4081bf90"};const nDe={preventGrowOverflow:!0,gap:"md",align:"center",justify:"flex-start",wrap:"wrap"},oDe=(e,{grow:r,preventGrowOverflow:n,gap:o,align:i,justify:a,wrap:l},{childWidth:s})=>({root:{"--group-child-width":r&&n?s:void 0,"--group-gap":Gs(o),"--group-align":i,"--group-justify":a,"--group-wrap":l}}),en=ot((e,r)=>{const n=Pe("Group",nDe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,children:c,gap:d,align:u,justify:p,wrap:f,grow:m,preventGrowOverflow:v,vars:w,variant:x,__size:k,mod:C,attributes:_,...$}=n,R=rDe(c),T=R.length,A=Gs(d??"md"),z={childWidth:`calc(${100/T}% - (${A} - ${A} / ${T}))`},j=kt({name:"Group",props:n,stylesCtx:z,className:i,style:a,classes:EW,classNames:o,styles:l,unstyled:s,attributes:_,vars:w,varsResolver:oDe});return y.jsx(Se,{...j("root"),ref:r,variant:x,mod:[{grow:m},C],size:k,...$,children:R})});en.classes=EW,en.displayName="@mantine/core/Group";const[iDe,aDe]=oy({size:"sm"}),CW=ot((e,r)=>{const n=Pe("InputClearButton",null,e),{size:o,variant:i,vars:a,classNames:l,styles:s,...c}=n,d=aDe(),{resolvedClassNames:u,resolvedStyles:p}=T9({classNames:l,styles:s,props:n});return y.jsx(lp,{variant:i||"transparent",ref:r,size:o||d?.size||"sm",classNames:u,styles:p,__staticSelector:"InputClearButton",style:{pointerEvents:"all",background:"var(--input-bg)",...c.style},...c})});CW.displayName="@mantine/core/InputClearButton";const lDe={xs:7,sm:8,md:10,lg:12,xl:15};function sDe({__clearable:e,__clearSection:r,rightSection:n,__defaultRightSection:o,size:i="sm"}){const a=e&&r;return a&&(n||o)?y.jsxs("div",{"data-combined-clear-section":!0,style:{display:"flex",gap:2,alignItems:"center",paddingInlineEnd:lDe[i]},children:[a,n||o]}):n===null?null:n||a||o}const[cDe,c3]=oy({offsetBottom:!1,offsetTop:!1,describedBy:void 0,getStyles:null,inputId:void 0,labelId:void 0});var sa={wrapper:"m_6c018570",input:"m_8fb7ebe7",section:"m_82577fc2",placeholder:"m_88bacfd0",root:"m_46b77525",label:"m_8fdc1311",required:"m_78a94662",error:"m_8f816625",description:"m_fe47ce59"};const dDe=(e,{size:r})=>({description:{"--input-description-size":r===void 0?void 0:`calc(${Eo(r)} - ${$e(2)})`}}),d3=ot((e,r)=>{const n=Pe("InputDescription",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,__staticSelector:u,__inheritStyles:p=!0,attributes:f,variant:m,...v}=Pe("InputDescription",null,n),w=c3(),x=kt({name:["InputWrapper",u],props:n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:f,rootSelector:"description",vars:c,varsResolver:dDe}),k=p&&w?.getStyles||x;return y.jsx(Se,{component:"p",ref:r,variant:m,size:d,...k("description",w?.getStyles?{className:i,style:a}:void 0),...v})});d3.classes=sa,d3.displayName="@mantine/core/InputDescription";const uDe=(e,{size:r})=>({error:{"--input-error-size":r===void 0?void 0:`calc(${Eo(r)} - ${$e(2)})`}}),u3=ot((e,r)=>{const n=Pe("InputError",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,attributes:u,__staticSelector:p,__inheritStyles:f=!0,variant:m,...v}=n,w=kt({name:["InputWrapper",p],props:n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:u,rootSelector:"error",vars:c,varsResolver:uDe}),x=c3(),k=f&&x?.getStyles||w;return y.jsx(Se,{component:"p",ref:r,variant:m,size:d,...k("error",x?.getStyles?{className:i,style:a}:void 0),...v})});u3.classes=sa,u3.displayName="@mantine/core/InputError";const $W={labelElement:"label"},pDe=(e,{size:r})=>({label:{"--input-label-size":Eo(r),"--input-asterisk-color":void 0}}),p3=ot((e,r)=>{const n=Pe("InputLabel",$W,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,labelElement:d,size:u,required:p,htmlFor:f,onMouseDown:m,children:v,__staticSelector:w,variant:x,mod:k,attributes:C,..._}=Pe("InputLabel",$W,n),$=kt({name:["InputWrapper",w],props:n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:C,rootSelector:"label",vars:c,varsResolver:pDe}),R=c3(),T=R?.getStyles||$;return y.jsxs(Se,{...T("label",R?.getStyles?{className:i,style:a}:void 0),component:d,variant:x,size:u,ref:r,htmlFor:d==="label"?f:void 0,mod:[{required:p},k],onMouseDown:A=>{m?.(A),!A.defaultPrevented&&A.detail>1&&A.preventDefault()},..._,children:[v,p&&y.jsx("span",{...T("required"),"aria-hidden":!0,children:" *"})]})});p3.classes=sa,p3.displayName="@mantine/core/InputLabel";const pS=ot((e,r)=>{const n=Pe("InputPlaceholder",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,__staticSelector:d,variant:u,error:p,mod:f,attributes:m,...v}=n,w=kt({name:["InputPlaceholder",d],props:n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,rootSelector:"placeholder"});return y.jsx(Se,{...w("placeholder"),mod:[{error:!!p},f],component:"span",variant:u,ref:r,...v})});pS.classes=sa,pS.displayName="@mantine/core/InputPlaceholder";function hDe(e,{hasDescription:r,hasError:n}){const o=e.findIndex(s=>s==="input"),i=e.slice(0,o),a=e.slice(o+1),l=r&&i.includes("description")||n&&i.includes("error");return{offsetBottom:r&&a.includes("description")||n&&a.includes("error"),offsetTop:l}}const fDe={labelElement:"label",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},gDe=(e,{size:r})=>({label:{"--input-label-size":Eo(r),"--input-asterisk-color":void 0},error:{"--input-error-size":r===void 0?void 0:`calc(${Eo(r)} - ${$e(2)})`},description:{"--input-description-size":r===void 0?void 0:`calc(${Eo(r)} - ${$e(2)})`}}),hS=ot((e,r)=>{const n=Pe("InputWrapper",fDe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,variant:u,__staticSelector:p,inputContainer:f,inputWrapperOrder:m,label:v,error:w,description:x,labelProps:k,descriptionProps:C,errorProps:_,labelElement:$,children:R,withAsterisk:T,id:A,required:z,__stylesApiProps:j,mod:I,attributes:N,...L}=n,H=kt({name:["InputWrapper",p],props:j||n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:N,vars:c,varsResolver:gDe}),P={size:d,variant:u,__staticSelector:p},V=oa(A),B=typeof T=="boolean"?T:z,F=_?.id||`${V}-error`,q=C?.id||`${V}-description`,G=V,U=!!w&&typeof w!="boolean",Y=!!x,K=`${U?F:""} ${Y?q:""}`,O=K.trim().length>0?K.trim():void 0,W=k?.id||`${V}-label`,Z=v&&y.jsx(p3,{labelElement:$,id:W,htmlFor:G,required:B,...P,...k,children:v},"label"),Q=Y&&y.jsx(d3,{...C,...P,size:C?.size||P.size,id:C?.id||q,children:x},"description"),ie=y.jsx(S.Fragment,{children:f(R)},"input"),te=U&&S.createElement(u3,{..._,...P,size:_?.size||P.size,key:"error",id:_?.id||F},w),re=m.map(ue=>{switch(ue){case"label":return Z;case"input":return ie;case"description":return Q;case"error":return te;default:return null}});return y.jsx(cDe,{value:{getStyles:H,describedBy:O,inputId:G,labelId:W,...hDe(m,{hasDescription:Y,hasError:U})},children:y.jsx(Se,{ref:r,variant:u,size:d,mod:[{error:!!w},I],...H("root"),...L,children:re})})});hS.classes=sa,hS.displayName="@mantine/core/InputWrapper";const mDe={variant:"default",leftSectionPointerEvents:"none",rightSectionPointerEvents:"none",withAria:!0,withErrorStyles:!0,size:"sm"},yDe=(e,r,n)=>({wrapper:{"--input-margin-top":n.offsetTop?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-margin-bottom":n.offsetBottom?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-height":dr(r.size,"input-height"),"--input-fz":Eo(r.size),"--input-radius":r.radius===void 0?void 0:wn(r.radius),"--input-left-section-width":r.leftSectionWidth!==void 0?$e(r.leftSectionWidth):void 0,"--input-right-section-width":r.rightSectionWidth!==void 0?$e(r.rightSectionWidth):void 0,"--input-padding-y":r.multiline?dr(r.size,"input-padding-y"):void 0,"--input-left-section-pointer-events":r.leftSectionPointerEvents,"--input-right-section-pointer-events":r.rightSectionPointerEvents}}),zi=Jn((e,r)=>{const n=Pe("Input",mDe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,required:c,__staticSelector:d,__stylesApiProps:u,size:p,wrapperProps:f,error:m,disabled:v,leftSection:w,leftSectionProps:x,leftSectionWidth:k,rightSection:C,rightSectionProps:_,rightSectionWidth:$,rightSectionPointerEvents:R,leftSectionPointerEvents:T,variant:A,vars:z,pointer:j,multiline:I,radius:N,id:L,withAria:H,withErrorStyles:P,mod:V,inputSize:B,attributes:F,__clearSection:q,__clearable:G,__defaultRightSection:U,...Y}=n,{styleProps:K,rest:O}=qH(Y),W=c3(),Z={offsetBottom:W?.offsetBottom,offsetTop:W?.offsetTop},Q=kt({name:["Input",d],props:u||n,classes:sa,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:F,stylesCtx:Z,rootSelector:"wrapper",vars:z,varsResolver:yDe}),ie=H?{required:c,disabled:v,"aria-invalid":!!m,"aria-describedby":W?.describedBy,id:W?.inputId||L}:{},te=sDe({__clearable:G,__clearSection:q,rightSection:C,__defaultRightSection:U,size:p});return y.jsx(iDe,{value:{size:p||"sm"},children:y.jsxs(Se,{...Q("wrapper"),...K,...f,mod:[{error:!!m&&P,pointer:j,disabled:v,multiline:I,"data-with-right-section":!!te,"data-with-left-section":!!w},V],variant:A,size:p,children:[w&&y.jsx("div",{...x,"data-position":"left",...Q("section",{className:x?.className,style:x?.style}),children:w}),y.jsx(Se,{component:"input",...O,...ie,ref:r,required:c,mod:{disabled:v,error:!!m&&P},variant:A,__size:B,...Q("input")}),te&&y.jsx("div",{..._,"data-position":"right",...Q("section",{className:_?.className,style:_?.style}),children:te})]})})});zi.classes=sa,zi.Wrapper=hS,zi.Label=p3,zi.Error=u3,zi.Description=d3,zi.Placeholder=pS,zi.ClearButton=CW,zi.displayName="@mantine/core/Input";const vDe={gap:{type:"spacing",property:"gap"},rowGap:{type:"spacing",property:"rowGap"},columnGap:{type:"spacing",property:"columnGap"},align:{type:"identity",property:"alignItems"},justify:{type:"identity",property:"justifyContent"},wrap:{type:"identity",property:"flexWrap"},direction:{type:"identity",property:"flexDirection"}};var RW={root:"m_8bffd616"};const Js=Jn((e,r)=>{const n=Pe("Flex",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,gap:d,rowGap:u,columnGap:p,align:f,justify:m,wrap:v,direction:w,attributes:x,...k}=n,C=kt({name:"Flex",classes:RW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:x,vars:c}),_=lo(),$=Bw(),R=WH({styleProps:{gap:d,rowGap:u,columnGap:p,align:f,justify:m,wrap:v,direction:w},theme:_,data:vDe});return y.jsxs(y.Fragment,{children:[R.hasResponsiveStyles&&y.jsx(Nw,{selector:`.${$}`,styles:R.styles,media:R.media}),y.jsx(Se,{ref:r,...C("root",{className:$,style:yf(R.inlineStyles)}),...k})]})});Js.classes=RW,Js.displayName="@mantine/core/Flex";function bDe(e,r){if(!r||!e)return!1;let n=r.parentNode;for(;n!=null;){if(n===e)return!0;n=n.parentNode}return!1}function xDe({target:e,parent:r,ref:n,displayAfterTransitionEnd:o}){const i=S.useRef(-1),[a,l]=S.useState(!1),[s,c]=S.useState(typeof o=="boolean"?o:!1),d=()=>{if(!e||!r||!n.current)return;const m=e.getBoundingClientRect(),v=r.getBoundingClientRect(),w=window.getComputedStyle(e),x=window.getComputedStyle(r),k=xd(w.borderTopWidth)+xd(x.borderTopWidth),C=xd(w.borderLeftWidth)+xd(x.borderLeftWidth),_={top:m.top-v.top-k,left:m.left-v.left-C,width:m.width,height:m.height};n.current.style.transform=`translateY(${_.top}px) translateX(${_.left}px)`,n.current.style.width=`${_.width}px`,n.current.style.height=`${_.height}px`},u=()=>{window.clearTimeout(i.current),n.current&&(n.current.style.transitionDuration="0ms"),d(),i.current=window.setTimeout(()=>{n.current&&(n.current.style.transitionDuration="")},30)},p=S.useRef(null),f=S.useRef(null);return S.useEffect(()=>{if(d(),e)return p.current=new ResizeObserver(u),p.current.observe(e),r&&(f.current=new ResizeObserver(u),f.current.observe(r)),()=>{p.current?.disconnect(),f.current?.disconnect()}},[r,e]),S.useEffect(()=>{if(r){const m=v=>{bDe(v.target,r)&&(u(),c(!1))};return r.addEventListener("transitionend",m),()=>{r.removeEventListener("transitionend",m)}}},[r]),CH(()=>{Cze()!=="test"&&l(!0)},20,{autoInvoke:!0}),$H(m=>{m.forEach(v=>{v.type==="attributes"&&v.attributeName==="dir"&&u()})},{attributes:!0,attributeFilter:["dir"]},()=>document.documentElement),{initialized:a,hidden:s}}var zW={root:"m_96b553a6"};const wDe=(e,{transitionDuration:r})=>({root:{"--transition-duration":typeof r=="number"?`${r}ms`:r}}),h3=ot((e,r)=>{const n=Pe("FloatingIndicator",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,target:d,parent:u,transitionDuration:p,mod:f,displayAfterTransitionEnd:m,attributes:v,...w}=n,x=kt({name:"FloatingIndicator",classes:zW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:wDe}),k=S.useRef(null),{initialized:C,hidden:_}=xDe({target:d,parent:u,ref:k,displayAfterTransitionEnd:m}),$=$r(r,k);return!d||!u?null:y.jsx(Se,{ref:$,mod:[{initialized:C,hidden:_},f],...x("root"),...w})});h3.displayName="@mantine/core/FloatingIndicator",h3.classes=zW;function TW({open:e,close:r,openDelay:n,closeDelay:o}){const i=S.useRef(-1),a=S.useRef(-1),l=()=>{window.clearTimeout(i.current),window.clearTimeout(a.current)},s=()=>{l(),n===0||n===void 0?e():i.current=window.setTimeout(e,n)},c=()=>{l(),o===0||o===void 0?r():a.current=window.setTimeout(r,o)};return S.useEffect(()=>l,[]),{openDropdown:s,closeDropdown:c}}function fS({style:e,size:r=16,...n}){return y.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...e,width:$e(r),height:$e(r),display:"block"},...n,children:y.jsx("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}fS.displayName="@mantine/core/AccordionChevron";var jW={root:"m_66836ed3",wrapper:"m_a5d60502",body:"m_667c2793",title:"m_6a03f287",label:"m_698f4f23",icon:"m_667f2a6a",message:"m_7fa78076",closeButton:"m_87f54839"};const kDe=(e,{radius:r,color:n,variant:o,autoContrast:i})=>{const a=e.variantColorResolver({color:n||e.primaryColor,theme:e,variant:o||"light",autoContrast:i});return{root:{"--alert-radius":r===void 0?void 0:wn(r),"--alert-bg":n||o?a.background:void 0,"--alert-color":a.color,"--alert-bd":n||o?a.border:void 0}}},f3=ot((e,r)=>{const n=Pe("Alert",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,radius:d,color:u,title:p,children:f,id:m,icon:v,withCloseButton:w,onClose:x,closeButtonLabel:k,variant:C,autoContrast:_,role:$,attributes:R,...T}=n,A=kt({name:"Alert",classes:jW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:R,vars:c,varsResolver:kDe}),z=oa(m),j=p&&`${z}-title`||void 0,I=`${z}-body`;return y.jsx(Se,{id:z,...A("root",{variant:C}),variant:C,ref:r,role:$||"alert",...T,"aria-describedby":f?I:void 0,"aria-labelledby":p?j:void 0,children:y.jsxs("div",{...A("wrapper"),children:[v&&y.jsx("div",{...A("icon"),children:v}),y.jsxs("div",{...A("body"),children:[p&&y.jsx("div",{...A("title"),"data-with-close-button":w||void 0,children:y.jsx("span",{id:j,...A("label"),children:p})}),f&&y.jsx("div",{id:I,...A("message"),"data-variant":C,children:f})]}),w&&y.jsx(lp,{...A("closeButton"),onClick:x,variant:"transparent",size:16,iconSize:16,"aria-label":k,unstyled:s})]})})});f3.classes=jW,f3.displayName="@mantine/core/Alert";var AW={root:"m_b6d8b162"};function _De(e){if(e==="start")return"start";if(e==="end"||e)return"end"}const SDe={inherit:!1},EDe=(e,{variant:r,lineClamp:n,gradient:o,size:i,color:a})=>({root:{"--text-fz":Eo(i),"--text-lh":VRe(i),"--text-gradient":r==="gradient"?k9(o,e):void 0,"--text-line-clamp":typeof n=="number"?n.toString():void 0,"--text-color":a?Ci(a,e):void 0}}),it=Jn((e,r)=>{const n=Pe("Text",SDe,e),{lineClamp:o,truncate:i,inline:a,inherit:l,gradient:s,span:c,__staticSelector:d,vars:u,className:p,style:f,classNames:m,styles:v,unstyled:w,variant:x,mod:k,size:C,attributes:_,...$}=n,R=kt({name:["Text",d],props:n,classes:AW,className:p,style:f,classNames:m,styles:v,unstyled:w,attributes:_,vars:u,varsResolver:EDe});return y.jsx(Se,{...R("root",{focusable:!0}),ref:r,component:c?"span":"p",variant:x,mod:[{"data-truncate":_De(i),"data-line-clamp":typeof o=="number","data-inline":a,"data-inherit":l},k],size:C,...$})});it.classes=AW,it.displayName="@mantine/core/Text";var DW={root:"m_849cf0da"};const CDe={underline:"hover"},gS=Jn((e,r)=>{const{underline:n,className:o,unstyled:i,mod:a,...l}=Pe("Anchor",CDe,e);return y.jsx(it,{component:"a",ref:r,className:el({[DW.root]:!i},o),...l,mod:[{underline:n},a],__staticSelector:"Anchor",unstyled:i})});gS.classes=DW,gS.displayName="@mantine/core/Anchor";var ca={dropdown:"m_88b62a41",search:"m_985517d8",options:"m_b2821a6e",option:"m_92253aa5",empty:"m_2530cd1d",header:"m_858f94bd",footer:"m_82b967cb",group:"m_254f3e4f",groupLabel:"m_2bb2e9e5",chevron:"m_2943220b",optionsDropdownOption:"m_390b5f4",optionsDropdownCheckIcon:"m_8ee53fc2",optionsDropdownCheckPlaceholder:"m_a530ee0a"};const $De={error:null},RDe=(e,{size:r,color:n})=>({chevron:{"--combobox-chevron-size":dr(r,"combobox-chevron-size"),"--combobox-chevron-color":n?Ci(n,e):void 0}}),mS=ot((e,r)=>{const n=Pe("ComboboxChevron",$De,e),{size:o,error:i,style:a,className:l,classNames:s,styles:c,unstyled:d,vars:u,mod:p,...f}=n,m=kt({name:"ComboboxChevron",classes:ca,props:n,style:a,className:l,classNames:s,styles:c,unstyled:d,vars:u,varsResolver:RDe,rootSelector:"chevron"});return y.jsx(Se,{component:"svg",...f,...m("chevron"),size:o,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",mod:["combobox-chevron",{error:i},p],ref:r,children:y.jsx("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})});mS.classes=ca,mS.displayName="@mantine/core/ComboboxChevron";const[zDe,da]=na("Combobox component was not found in tree"),PW=S.forwardRef(({size:e,onMouseDown:r,onClick:n,onClear:o,...i},a)=>y.jsx(zi.ClearButton,{ref:a,tabIndex:-1,"aria-hidden":!0,...i,onMouseDown:l=>{l.preventDefault(),r?.(l)},onClick:l=>{o(),n?.(l)}}));PW.displayName="@mantine/core/ComboboxClearButton";const g3=ot((e,r)=>{const{classNames:n,styles:o,className:i,style:a,hidden:l,...s}=Pe("ComboboxDropdown",null,e),c=da();return y.jsx(br.Dropdown,{...s,ref:r,role:"presentation","data-hidden":l||void 0,...c.getStyles("dropdown",{className:i,style:a,classNames:n,styles:o})})});g3.classes=ca,g3.displayName="@mantine/core/ComboboxDropdown";const TDe={refProp:"ref"},MW=ot((e,r)=>{const{children:n,refProp:o}=Pe("ComboboxDropdownTarget",TDe,e);if(da(),!Sw(n))throw new Error("Combobox.DropdownTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return y.jsx(br.Target,{ref:r,refProp:o,children:n})});MW.displayName="@mantine/core/ComboboxDropdownTarget";const fy=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=Pe("ComboboxEmpty",null,e),c=da();return y.jsx(Se,{ref:r,...c.getStyles("empty",{className:o,classNames:n,styles:a,style:i}),...s})});fy.classes=ca,fy.displayName="@mantine/core/ComboboxEmpty";function yS({onKeyDown:e,withKeyboardNavigation:r,withAriaAttributes:n,withExpandedAttribute:o,targetType:i,autoComplete:a}){const l=da(),[s,c]=S.useState(null),d=u=>{if(e?.(u),!l.readOnly&&r){if(u.nativeEvent.isComposing)return;if(u.nativeEvent.code==="ArrowDown"&&(u.preventDefault(),l.store.dropdownOpened?c(l.store.selectNextOption()):(l.store.openDropdown("keyboard"),c(l.store.selectActiveOption()),l.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),u.nativeEvent.code==="ArrowUp"&&(u.preventDefault(),l.store.dropdownOpened?c(l.store.selectPreviousOption()):(l.store.openDropdown("keyboard"),c(l.store.selectActiveOption()),l.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),u.nativeEvent.code==="Enter"||u.nativeEvent.code==="NumpadEnter"){if(u.nativeEvent.keyCode===229)return;const p=l.store.getSelectedOptionIndex();l.store.dropdownOpened&&p!==-1?(u.preventDefault(),l.store.clickSelectedOption()):i==="button"&&(u.preventDefault(),l.store.openDropdown("keyboard"))}u.key==="Escape"&&l.store.closeDropdown("keyboard"),u.nativeEvent.code==="Space"&&i==="button"&&(u.preventDefault(),l.store.toggleDropdown("keyboard"))}};return{...n?{"aria-haspopup":"listbox","aria-expanded":o?!!(l.store.listId&&l.store.dropdownOpened):void 0,"aria-controls":l.store.dropdownOpened&&l.store.listId?l.store.listId:void 0,"aria-activedescendant":l.store.dropdownOpened&&s||void 0,autoComplete:a,"data-expanded":l.store.dropdownOpened||void 0,"data-mantine-stop-propagation":l.store.dropdownOpened||void 0}:{},onKeyDown:d}}const jDe={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},NW=ot((e,r)=>{const{children:n,refProp:o,withKeyboardNavigation:i,withAriaAttributes:a,withExpandedAttribute:l,targetType:s,autoComplete:c,...d}=Pe("ComboboxEventsTarget",jDe,e),u=md(n);if(!u)throw new Error("Combobox.EventsTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const p=da(),f=yS({targetType:s,withAriaAttributes:a,withKeyboardNavigation:i,withExpandedAttribute:l,onKeyDown:u.props.onKeyDown,autoComplete:c});return S.cloneElement(u,{...f,...d,[o]:$r(r,p.store.targetRef,Rw(u))})});NW.displayName="@mantine/core/ComboboxEventsTarget";const vS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=Pe("ComboboxFooter",null,e),c=da();return y.jsx(Se,{ref:r,...c.getStyles("footer",{className:o,classNames:n,style:i,styles:a}),...s,onMouseDown:d=>{d.preventDefault()}})});vS.classes=ca,vS.displayName="@mantine/core/ComboboxFooter";const bS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,children:s,label:c,id:d,...u}=Pe("ComboboxGroup",null,e),p=da(),f=oa(d);return y.jsxs(Se,{ref:r,role:"group","aria-labelledby":c?f:void 0,...p.getStyles("group",{className:o,classNames:n,style:i,styles:a}),...u,children:[c&&y.jsx("div",{id:f,...p.getStyles("groupLabel",{classNames:n,styles:a}),children:c}),s]})});bS.classes=ca,bS.displayName="@mantine/core/ComboboxGroup";const xS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=Pe("ComboboxHeader",null,e),c=da();return y.jsx(Se,{ref:r,...c.getStyles("header",{className:o,classNames:n,style:i,styles:a}),...s,onMouseDown:d=>{d.preventDefault()}})});xS.classes=ca,xS.displayName="@mantine/core/ComboboxHeader";function BW({value:e,valuesDivider:r=",",...n}){return y.jsx("input",{type:"hidden",value:Array.isArray(e)?e.join(r):e||"",...n})}BW.displayName="@mantine/core/ComboboxHiddenInput";const gy=ot((e,r)=>{const n=Pe("ComboboxOption",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,onClick:c,id:d,active:u,onMouseDown:p,onMouseOver:f,disabled:m,selected:v,mod:w,...x}=n,k=da(),C=S.useId(),_=d||C;return y.jsx(Se,{...k.getStyles("option",{className:i,classNames:o,styles:l,style:a}),...x,ref:r,id:_,mod:["combobox-option",{"combobox-active":u,"combobox-disabled":m,"combobox-selected":v},w],role:"option",onClick:$=>{m?$.preventDefault():(k.onOptionSubmit?.(n.value,n),c?.($))},onMouseDown:$=>{$.preventDefault(),p?.($)},onMouseOver:$=>{k.resetSelectionOnOptionHover&&k.store.resetSelectedOption(),f?.($)}})});gy.classes=ca,gy.displayName="@mantine/core/ComboboxOption";const m3=ot((e,r)=>{const n=Pe("ComboboxOptions",null,e),{classNames:o,className:i,style:a,styles:l,id:s,onMouseDown:c,labelledBy:d,...u}=n,p=da(),f=oa(s);return S.useEffect(()=>{p.store.setListId(f)},[f]),y.jsx(Se,{ref:r,...p.getStyles("options",{className:i,style:a,classNames:o,styles:l}),...u,id:f,role:"listbox","aria-labelledby":d,onMouseDown:m=>{m.preventDefault(),c?.(m)}})});m3.classes=ca,m3.displayName="@mantine/core/ComboboxOptions";const ADe={withAriaAttributes:!0,withKeyboardNavigation:!0},wS=ot((e,r)=>{const n=Pe("ComboboxSearch",ADe,e),{classNames:o,styles:i,unstyled:a,vars:l,withAriaAttributes:s,onKeyDown:c,withKeyboardNavigation:d,size:u,...p}=n,f=da(),m=f.getStyles("search"),v=yS({targetType:"input",withAriaAttributes:s,withKeyboardNavigation:d,withExpandedAttribute:!1,onKeyDown:c,autoComplete:"off"});return y.jsx(zi,{ref:$r(r,f.store.searchRef),classNames:[{input:m.className},o],styles:[{input:m.style},i],size:u||f.size,...v,...p,__staticSelector:"Combobox"})});wS.classes=ca,wS.displayName="@mantine/core/ComboboxSearch";const DDe={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},kS=ot((e,r)=>{const{children:n,refProp:o,withKeyboardNavigation:i,withAriaAttributes:a,withExpandedAttribute:l,targetType:s,autoComplete:c,...d}=Pe("ComboboxTarget",DDe,e),u=md(n);if(!u)throw new Error("Combobox.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const p=da(),f=yS({targetType:s,withAriaAttributes:a,withKeyboardNavigation:i,withExpandedAttribute:l,onKeyDown:u.props.onKeyDown,autoComplete:c}),m=S.cloneElement(u,{...f,...d});return y.jsx(br.Target,{ref:$r(r,p.store.targetRef),children:m})});kS.displayName="@mantine/core/ComboboxTarget";function PDe(e,r,n){for(let o=e-1;o>=0;o-=1)if(!r[o].hasAttribute("data-combobox-disabled"))return o;if(n){for(let o=r.length-1;o>-1;o-=1)if(!r[o].hasAttribute("data-combobox-disabled"))return o}return e}function MDe(e,r,n){for(let o=e+1;o{s||(c(!0),i?.(B))},[c,i,s]),k=S.useCallback((B="unknown")=>{s&&(c(!1),o?.(B))},[c,o,s]),C=S.useCallback((B="unknown")=>{s?k(B):x(B)},[k,x,s]),_=S.useCallback(()=>{const B=gd(f.current),F=zw(`#${d.current} [data-combobox-selected]`,B);F?.removeAttribute("data-combobox-selected"),F?.removeAttribute("aria-selected")},[]),$=S.useCallback(B=>{const F=gd(f.current),q=zw(`#${d.current}`,F),G=q?fd("[data-combobox-option]",q):null;if(!G)return null;const U=B>=G.length?0:B<0?G.length-1:B;return u.current=U,G?.[U]&&!G[U].hasAttribute("data-combobox-disabled")?(_(),G[U].setAttribute("data-combobox-selected","true"),G[U].setAttribute("aria-selected","true"),G[U].scrollIntoView({block:"nearest",behavior:l}),G[U].id):null},[l,_]),R=S.useCallback(()=>{const B=gd(f.current),F=zw(`#${d.current} [data-combobox-active]`,B);if(F){const q=fd(`#${d.current} [data-combobox-option]`,B).findIndex(G=>G===F);return $(q)}return $(0)},[$]),T=S.useCallback(()=>{const B=gd(f.current),F=fd(`#${d.current} [data-combobox-option]`,B);return $(MDe(u.current,F,a))},[$,a]),A=S.useCallback(()=>{const B=gd(f.current),F=fd(`#${d.current} [data-combobox-option]`,B);return $(PDe(u.current,F,a))},[$,a]),z=S.useCallback(()=>{const B=gd(f.current),F=fd(`#${d.current} [data-combobox-option]`,B);return $(NDe(F))},[$]),j=S.useCallback((B="selected",F)=>{w.current=window.setTimeout(()=>{const q=gd(f.current),G=fd(`#${d.current} [data-combobox-option]`,q),U=G.findIndex(Y=>Y.hasAttribute(`data-combobox-${B}`));u.current=U,F?.scrollIntoView&&G[U]?.scrollIntoView({block:"nearest",behavior:l})},0)},[]),I=S.useCallback(()=>{u.current=-1,_()},[_]),N=S.useCallback(()=>{const B=gd(f.current);fd(`#${d.current} [data-combobox-option]`,B)?.[u.current]?.click()},[]),L=S.useCallback(B=>{d.current=B},[]),H=S.useCallback(()=>{m.current=window.setTimeout(()=>p.current?.focus(),0)},[]),P=S.useCallback(()=>{v.current=window.setTimeout(()=>f.current?.focus(),0)},[]),V=S.useCallback(()=>u.current,[]);return S.useEffect(()=>()=>{window.clearTimeout(m.current),window.clearTimeout(v.current),window.clearTimeout(w.current)},[]),{dropdownOpened:s,openDropdown:x,closeDropdown:k,toggleDropdown:C,selectedOptionIndex:u.current,getSelectedOptionIndex:V,selectOption:$,selectFirstOption:z,selectActiveOption:R,selectNextOption:T,selectPreviousOption:A,resetSelectedOption:I,updateSelectedOptionIndex:j,listId:d.current,setListId:L,clickSelectedOption:N,searchRef:p,focusSearchInput:H,targetRef:f,focusTarget:P}}const BDe={keepMounted:!0,withinPortal:!0,resetSelectionOnOptionHover:!1,width:"target",transitionProps:{transition:"fade",duration:0},size:"sm"},IDe=(e,{size:r,dropdownPadding:n})=>({options:{"--combobox-option-fz":Eo(r),"--combobox-option-padding":dr(r,"combobox-option-padding")},dropdown:{"--combobox-padding":n===void 0?void 0:$e(n),"--combobox-option-fz":Eo(r),"--combobox-option-padding":dr(r,"combobox-option-padding")}});function eo(e){const r=Pe("Combobox",BDe,e),{classNames:n,styles:o,unstyled:i,children:a,store:l,vars:s,onOptionSubmit:c,onClose:d,size:u,dropdownPadding:p,resetSelectionOnOptionHover:f,__staticSelector:m,readOnly:v,attributes:w,...x}=r,k=IW(),C=l||k,_=kt({name:m||"Combobox",classes:ca,props:r,classNames:n,styles:o,unstyled:i,attributes:w,vars:s,varsResolver:IDe}),$=()=>{d?.(),C.closeDropdown()};return y.jsx(zDe,{value:{getStyles:_,store:C,onOptionSubmit:c,size:u,resetSelectionOnOptionHover:f,readOnly:v},children:y.jsx(br,{opened:C.dropdownOpened,preventPositionChangeWhenVisible:!0,...x,onChange:R=>!R&&$(),withRoles:!1,unstyled:i,children:a})})}const ODe=e=>e;eo.extend=ODe,eo.classes=ca,eo.displayName="@mantine/core/Combobox",eo.Target=kS,eo.Dropdown=g3,eo.Options=m3,eo.Option=gy,eo.Search=wS,eo.Empty=fy,eo.Chevron=mS,eo.Footer=vS,eo.Header=xS,eo.EventsTarget=NW,eo.DropdownTarget=MW,eo.Group=bS,eo.ClearButton=PW,eo.HiddenInput=BW;function OW({size:e,style:r,...n}){const o=e!==void 0?{width:$e(e),height:$e(e),...r}:r;return y.jsx("svg",{viewBox:"0 0 10 7",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:o,"aria-hidden":!0,...n,children:y.jsx("path",{d:"M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}var LW={root:"m_347db0ec","root--dot":"m_fbd81e3d",label:"m_5add502a",section:"m_91fdda9b"};const LDe=(e,{radius:r,color:n,gradient:o,variant:i,size:a,autoContrast:l,circle:s})=>{const c=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:l});return{root:{"--badge-height":dr(a,"badge-height"),"--badge-padding-x":dr(a,"badge-padding-x"),"--badge-fz":dr(a,"badge-fz"),"--badge-radius":s||r===void 0?void 0:wn(r),"--badge-bg":n||i?c.background:void 0,"--badge-color":n||i?c.color:void 0,"--badge-bd":n||i?c.border:void 0,"--badge-dot-color":i==="dot"?Ci(n,e):void 0}}},ec=Jn((e,r)=>{const n=Pe("Badge",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,radius:d,color:u,gradient:p,leftSection:f,rightSection:m,children:v,variant:w,fullWidth:x,autoContrast:k,circle:C,mod:_,attributes:$,...R}=n,T=kt({name:"Badge",props:n,classes:LW,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:$,vars:c,varsResolver:LDe});return y.jsxs(Se,{variant:w,mod:[{block:x,circle:C,"with-right-section":!!m,"with-left-section":!!f},_],...T("root",{variant:w}),ref:r,...R,children:[f&&y.jsx("span",{...T("section"),"data-position":"left",children:f}),y.jsx("span",{...T("label"),children:v}),m&&y.jsx("span",{...T("section"),"data-position":"right",children:m})]})});ec.classes=LW,ec.displayName="@mantine/core/Badge";var FW={root:"m_8b3717df",breadcrumb:"m_f678d540",separator:"m_3b8f2208"};const FDe={separator:"/"},VDe=(e,{separatorMargin:r})=>({root:{"--bc-separator-margin":Gs(r)}}),y3=ot((e,r)=>{const n=Pe("Breadcrumbs",FDe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,children:d,separator:u,separatorMargin:p,attributes:f,...m}=n,v=kt({name:"Breadcrumbs",classes:FW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:f,vars:c,varsResolver:VDe}),w=S.Children.toArray(d).reduce((x,k,C,_)=>{const $=Sw(k)?S.cloneElement(k,{...v("breadcrumb",{className:k.props?.className}),key:C}):S.createElement("div",{...v("breadcrumb"),key:C},k);return x.push($),C!==_.length-1&&x.push(S.createElement(Se,{...v("separator"),key:`separator-${C}`},u)),x},[]);return y.jsx(Se,{ref:r,...v("root"),...m,children:w})});y3.classes=FW,y3.displayName="@mantine/core/Breadcrumbs";var Nf={root:"m_77c9d27d",inner:"m_80f1301b",label:"m_811560b9",section:"m_a74036a",loader:"m_a25b86ee",group:"m_80d6d844",groupSection:"m_70be2a01"};const VW={orientation:"horizontal"},qDe=(e,{borderWidth:r})=>({group:{"--button-border-width":$e(r)}}),_S=ot((e,r)=>{const n=Pe("ButtonGroup",VW,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,orientation:c,vars:d,borderWidth:u,variant:p,mod:f,attributes:m,...v}=Pe("ButtonGroup",VW,e),w=kt({name:"ButtonGroup",props:n,classes:Nf,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:d,varsResolver:qDe,rootSelector:"group"});return y.jsx(Se,{...w("group"),ref:r,variant:p,mod:[{"data-orientation":c},f],role:"group",...v})});_S.classes=Nf,_S.displayName="@mantine/core/ButtonGroup";const HDe=(e,{radius:r,color:n,gradient:o,variant:i,autoContrast:a,size:l})=>{const s=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:a});return{groupSection:{"--section-height":dr(l,"section-height"),"--section-padding-x":dr(l,"section-padding-x"),"--section-fz":l?.includes("compact")?Eo(l.replace("compact-","")):Eo(l),"--section-radius":r===void 0?void 0:wn(r),"--section-bg":n||i?s.background:void 0,"--section-color":s.color,"--section-bd":n||i?s.border:void 0}}},SS=ot((e,r)=>{const n=Pe("ButtonGroupSection",null,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,vars:c,variant:d,gradient:u,radius:p,autoContrast:f,attributes:m,...v}=n,w=kt({name:"ButtonGroupSection",props:n,classes:Nf,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:HDe,rootSelector:"groupSection"});return y.jsx(Se,{...w("groupSection"),ref:r,variant:d,...v})});SS.classes=Nf,SS.displayName="@mantine/core/ButtonGroupSection";const UDe={in:{opacity:1,transform:`translate(-50%, calc(-50% + ${$e(1)}))`},out:{opacity:0,transform:"translate(-50%, -200%)"},common:{transformOrigin:"center"},transitionProperty:"transform, opacity"},WDe=(e,{radius:r,color:n,gradient:o,variant:i,size:a,justify:l,autoContrast:s})=>{const c=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:s});return{root:{"--button-justify":l,"--button-height":dr(a,"button-height"),"--button-padding-x":dr(a,"button-padding-x"),"--button-fz":a?.includes("compact")?Eo(a.replace("compact-","")):Eo(a),"--button-radius":r===void 0?void 0:wn(r),"--button-bg":n||i?c.background:void 0,"--button-hover":n||i?c.hover:void 0,"--button-color":c.color,"--button-bd":n||i?c.border:void 0,"--button-hover-color":n||i?c.hoverColor:void 0}}},Vn=Jn((e,r)=>{const n=Pe("Button",null,e),{style:o,vars:i,className:a,color:l,disabled:s,children:c,leftSection:d,rightSection:u,fullWidth:p,variant:f,radius:m,loading:v,loaderProps:w,gradient:x,classNames:k,styles:C,unstyled:_,"data-disabled":$,autoContrast:R,mod:T,attributes:A,...z}=n,j=kt({name:"Button",props:n,classes:Nf,className:a,style:o,classNames:k,styles:C,unstyled:_,attributes:A,vars:i,varsResolver:WDe}),I=!!d,N=!!u;return y.jsxs(pr,{ref:r,...j("root",{active:!s&&!v&&!$}),unstyled:_,variant:f,disabled:s||v,mod:[{disabled:s||$,loading:v,block:p,"with-left-section":I,"with-right-section":N},T],...z,children:[typeof v=="boolean"&&y.jsx(wd,{mounted:v,transition:UDe,duration:150,children:L=>y.jsx(Se,{component:"span",...j("loader",{style:L}),"aria-hidden":!0,children:y.jsx(Pf,{color:"var(--button-color)",size:"calc(var(--button-height) / 1.8)",...w})})}),y.jsxs("span",{...j("inner"),children:[d&&y.jsx(Se,{component:"span",...j("section"),mod:{position:"left"},children:d}),y.jsx(Se,{component:"span",mod:{loading:v},...j("label"),children:c}),u&&y.jsx(Se,{component:"span",...j("section"),mod:{position:"right"},children:u})]})]})});Vn.classes=Nf,Vn.displayName="@mantine/core/Button",Vn.Group=_S,Vn.GroupSection=SS;const[GDe,YDe]=na("Card component was not found in tree");var ES={root:"m_e615b15f",section:"m_599a2148"};const v3=Jn((e,r)=>{const n=Pe("CardSection",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,withBorder:c,inheritPadding:d,mod:u,...p}=n,f=YDe();return y.jsx(Se,{ref:r,mod:[{"with-border":c,"inherit-padding":d},u],...f.getStyles("section",{className:i,style:a,styles:l,classNames:o}),...p})});v3.classes=ES,v3.displayName="@mantine/core/CardSection";const XDe=(e,{padding:r})=>({root:{"--card-padding":Gs(r)}}),b3=Jn((e,r)=>{const n=Pe("Card",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,children:d,padding:u,attributes:p,...f}=n,m=kt({name:"Card",props:n,classes:ES,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:XDe}),v=S.Children.toArray(d),w=v.map((x,k)=>typeof x=="object"&&x&&"type"in x&&x.type===v3?S.cloneElement(x,{"data-first-section":k===0||void 0,"data-last-section":k===v.length-1||void 0}):x);return y.jsx(GDe,{value:{getStyles:m},children:y.jsx(Af,{ref:r,unstyled:s,...m("root"),...f,children:w})})});b3.classes=ES,b3.displayName="@mantine/core/Card",b3.Section=v3;var qW={root:"m_de3d2490",colorOverlay:"m_862f3d1b",shadowOverlay:"m_98ae7f22",alphaOverlay:"m_95709ac0",childrenOverlay:"m_93e74e3"};const HW={withShadow:!0},KDe=(e,{radius:r,size:n})=>({root:{"--cs-radius":r===void 0?void 0:wn(r),"--cs-size":$e(n)}}),my=Jn((e,r)=>{const n=Pe("ColorSwatch",HW,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,size:u,radius:p,withShadow:f,children:m,variant:v,attributes:w,...x}=Pe("ColorSwatch",HW,n),k=kt({name:"ColorSwatch",props:n,classes:qW,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:w,vars:c,varsResolver:KDe});return y.jsxs(Se,{ref:r,variant:v,size:u,...k("root",{focusable:!0}),...x,children:[y.jsx("span",{...k("alphaOverlay")}),f&&y.jsx("span",{...k("shadowOverlay")}),y.jsx("span",{...k("colorOverlay",{style:{backgroundColor:d}})}),y.jsx("span",{...k("childrenOverlay"),children:m})]})});my.classes=qW,my.displayName="@mantine/core/ColorSwatch";const ZDe={timeout:1e3};function UW(e){const{children:r,timeout:n,value:o,...i}=Pe("CopyButton",ZDe,e),a=GRe({timeout:n});return y.jsx(y.Fragment,{children:r({copy:()=>a.copy(o),copied:a.copied,...i})})}UW.displayName="@mantine/core/CopyButton";var WW={root:"m_3eebeb36",label:"m_9e365f20"};const QDe={orientation:"horizontal"},JDe=(e,{color:r,variant:n,size:o})=>({root:{"--divider-color":r?Ci(r,e):void 0,"--divider-border-style":n,"--divider-size":dr(o,"divider-size")}}),sp=ot((e,r)=>{const n=Pe("Divider",QDe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,orientation:u,label:p,labelPosition:f,mod:m,attributes:v,...w}=n,x=kt({name:"Divider",classes:WW,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:JDe});return y.jsx(Se,{ref:r,mod:[{orientation:u,"with-label":!!p},m],...x("root"),...w,role:"separator",children:p&&y.jsx(Se,{component:"span",mod:{position:f},...x("label"),children:p})})});sp.classes=WW,sp.displayName="@mantine/core/Divider";const[GW,YW]=na("Grid component was not found in tree"),CS=(e,r)=>e==="content"?"auto":e==="auto"?"0rem":e?`${100/(r/e)}%`:void 0,XW=(e,r,n)=>n||e==="auto"?"100%":e==="content"?"unset":CS(e,r),KW=(e,r)=>{if(e)return e==="auto"||r?"1":"auto"},ZW=(e,r)=>e===0?"0":e?`${100/(r/e)}%`:void 0;function ePe({span:e,order:r,offset:n,selector:o}){const i=lo(),a=YW(),l=a.breakpoints||i.breakpoints,s=ay(e)===void 0?12:ay(e),c=yf({"--col-order":ay(r)?.toString(),"--col-flex-grow":KW(s,a.grow),"--col-flex-basis":CS(s,a.columns),"--col-width":s==="content"?"auto":void 0,"--col-max-width":XW(s,a.columns,a.grow),"--col-offset":ZW(ay(n),a.columns)}),d=So(l).reduce((p,f)=>(p[f]||(p[f]={}),typeof r=="object"&&r[f]!==void 0&&(p[f]["--col-order"]=r[f]?.toString()),typeof e=="object"&&e[f]!==void 0&&(p[f]["--col-flex-grow"]=KW(e[f],a.grow),p[f]["--col-flex-basis"]=CS(e[f],a.columns),p[f]["--col-width"]=e[f]==="content"?"auto":void 0,p[f]["--col-max-width"]=XW(e[f],a.columns,a.grow)),typeof n=="object"&&n[f]!==void 0&&(p[f]["--col-offset"]=ZW(n[f],a.columns)),p),{}),u=pH(So(d),l).filter(p=>So(d[p.value]).length>0).map(p=>({query:a.type==="container"?`mantine-grid (min-width: ${l[p.value]})`:`(min-width: ${l[p.value]})`,styles:d[p.value]}));return y.jsx(Nw,{styles:c,media:a.type==="container"?void 0:u,container:a.type==="container"?u:void 0,selector:o})}var $S={container:"m_8478a6da",root:"m_410352e9",inner:"m_dee7bd2f",col:"m_96bdd299"};const tPe={span:12},cp=ot((e,r)=>{const n=Pe("GridCol",tPe,e),{classNames:o,className:i,style:a,styles:l,vars:s,span:c,order:d,offset:u,...p}=n,f=YW(),m=Bw();return y.jsxs(y.Fragment,{children:[y.jsx(ePe,{selector:`.${m}`,span:c,order:d,offset:u}),y.jsx(Se,{ref:r,...f.getStyles("col",{className:el(i,m),style:a,classNames:o,styles:l}),...p})]})});cp.classes=$S,cp.displayName="@mantine/core/GridCol";function QW({gutter:e,selector:r,breakpoints:n,type:o}){const i=lo(),a=n||i.breakpoints,l=yf({"--grid-gutter":Gs(ay(e))}),s=So(a).reduce((d,u)=>(d[u]||(d[u]={}),typeof e=="object"&&e[u]!==void 0&&(d[u]["--grid-gutter"]=Gs(e[u])),d),{}),c=pH(So(s),a).filter(d=>So(s[d.value]).length>0).map(d=>({query:o==="container"?`mantine-grid (min-width: ${a[d.value]})`:`(min-width: ${a[d.value]})`,styles:s[d.value]}));return y.jsx(Nw,{styles:l,media:o==="container"?void 0:c,container:o==="container"?c:void 0,selector:r})}const rPe={gutter:"md",grow:!1,columns:12},nPe=(e,{justify:r,align:n,overflow:o})=>({root:{"--grid-justify":r,"--grid-align":n,"--grid-overflow":o}}),yy=ot((e,r)=>{const n=Pe("Grid",rPe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,grow:d,gutter:u,columns:p,align:f,justify:m,children:v,breakpoints:w,type:x,attributes:k,...C}=n,_=kt({name:"Grid",classes:$S,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:k,vars:c,varsResolver:nPe}),$=Bw();return x==="container"&&w?y.jsxs(GW,{value:{getStyles:_,grow:d,columns:p,breakpoints:w,type:x},children:[y.jsx(QW,{selector:`.${$}`,...n}),y.jsx("div",{..._("container"),children:y.jsx(Se,{ref:r,..._("root",{className:$}),...C,children:y.jsx("div",{..._("inner"),children:v})})})]}):y.jsxs(GW,{value:{getStyles:_,grow:d,columns:p,breakpoints:w,type:x},children:[y.jsx(QW,{selector:`.${$}`,...n}),y.jsx(Se,{ref:r,..._("root",{className:$}),...C,children:y.jsx("div",{..._("inner"),children:v})})]})});yy.classes=$S,yy.displayName="@mantine/core/Grid",yy.Col=cp;function JW({color:e,theme:r,defaultShade:n}){const o=vd({color:e,theme:r});return o.isThemeColor?o.shade===void 0?`var(--mantine-color-${o.color}-${n})`:`var(${o.variable})`:e}var eG={root:"m_bcb3f3c2"};const oPe={color:"yellow"},iPe=(e,{color:r})=>({root:{"--mark-bg-dark":JW({color:r,theme:e,defaultShade:5}),"--mark-bg-light":JW({color:r,theme:e,defaultShade:2})}}),RS=ot((e,r)=>{const n=Pe("Mark",oPe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,variant:u,attributes:p,...f}=n,m=kt({name:"Mark",props:n,className:i,style:a,classes:eG,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:iPe});return y.jsx(Se,{component:"mark",ref:r,variant:u,...m("root"),...f})});RS.classes=eG,RS.displayName="@mantine/core/Mark";function tG(e){return e.replace(/[-[\]{}()*+?.,\\^$|#]/g,"\\$&")}function aPe(e,r){if(r==null)return[{chunk:e,highlighted:!1}];const n=Array.isArray(r)?r.map(tG):tG(r);if(!(Array.isArray(n)?n.filter(a=>a.trim().length>0).length>0:n.trim()!==""))return[{chunk:e,highlighted:!1}];const o=typeof n=="string"?n.trim():n.filter(a=>a.trim().length!==0).map(a=>a.trim()).sort((a,l)=>l.length-a.length).join("|"),i=new RegExp(`(${o})`,"gi");return e.split(i).map(a=>({chunk:a,highlighted:i.test(a)})).filter(({chunk:a})=>a)}const tc=Jn((e,r)=>{const{unstyled:n,children:o,highlight:i,highlightStyles:a,color:l,...s}=Pe("Highlight",null,e),c=aPe(o,i);return y.jsx(it,{unstyled:n,ref:r,...s,__staticSelector:"Highlight",children:c.map(({chunk:d,highlighted:u},p)=>u?y.jsx(RS,{unstyled:n,color:l,style:a,"data-highlight":d,children:d},p):y.jsx("span",{children:d},p))})});tc.classes=it.classes,tc.displayName="@mantine/core/Highlight";const[lPe,rG]=na("HoverCard component was not found in the tree"),nG=S.createContext(!1),sPe=nG.Provider,zS=()=>S.useContext(nG);function TS(e){const{children:r,onMouseEnter:n,onMouseLeave:o,...i}=Pe("HoverCardDropdown",null,e),a=rG();if(zS()&&a.getFloatingProps&&a.floating){const c=a.getFloatingProps();return y.jsx(br.Dropdown,{ref:a.floating,...c,onMouseEnter:kn(n,c.onMouseEnter),onMouseLeave:kn(o,c.onMouseLeave),...i,children:r})}const l=kn(n,a.openDropdown),s=kn(o,a.closeDropdown);return y.jsx(br.Dropdown,{onMouseEnter:l,onMouseLeave:s,...i,children:r})}TS.displayName="@mantine/core/HoverCardDropdown";const cPe={openDelay:0,closeDelay:0};function jS(e){const{openDelay:r,closeDelay:n,children:o}=Pe("HoverCardGroup",cPe,e);return y.jsx(sPe,{value:!0,children:y.jsx(VU,{delay:{open:r,close:n},children:o})})}jS.displayName="@mantine/core/HoverCardGroup",jS.extend=e=>e;const dPe={refProp:"ref"},AS=S.forwardRef((e,r)=>{const{children:n,refProp:o,eventPropsWrapperName:i,...a}=Pe("HoverCardTarget",dPe,e),l=md(n);if(!l)throw new Error("HoverCard.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const s=rG();if(zS()&&s.getReferenceProps&&s.reference){const p=s.getReferenceProps();return y.jsx(br.Target,{refProp:o,ref:r,...a,children:S.cloneElement(l,i?{[i]:{...p,ref:s.reference}}:{...p,ref:s.reference})})}const c=kn(l.props.onMouseEnter,s.openDropdown),d=kn(l.props.onMouseLeave,s.closeDropdown),u={onMouseEnter:c,onMouseLeave:d};return y.jsx(br.Target,{refProp:o,ref:r,...a,children:S.cloneElement(l,i?{[i]:u}:u)})});AS.displayName="@mantine/core/HoverCardTarget";function uPe(e){const[r,n]=S.useState(e.defaultOpened),o=typeof e.opened=="boolean"?e.opened:r,i=zS(),a=oa(),l=S.useRef(-1),s=S.useRef(-1),c=S.useCallback(()=>{window.clearTimeout(l.current),window.clearTimeout(s.current)},[]),d=S.useCallback(C=>{n(C),C?(m(a),e.onOpen?.()):e.onClose?.()},[a,e.onOpen,e.onClose]),{context:u,refs:p}=t3({open:o,onOpenChange:d}),{delay:f,setCurrentId:m}=qU(u,{id:a}),{getReferenceProps:v,getFloatingProps:w}=WU([LU(u,{enabled:!0,delay:i?f:{open:e.openDelay,close:e.closeDelay}}),GU(u,{role:"dialog"}),UU(u,{enabled:i})]),x=S.useCallback(()=>{i||(c(),e.openDelay===0||e.openDelay===void 0?d(!0):l.current=window.setTimeout(()=>d(!0),e.openDelay))},[i,c,e.openDelay,d]),k=S.useCallback(()=>{i||(c(),e.closeDelay===0||e.closeDelay===void 0?d(!1):s.current=window.setTimeout(()=>d(!1),e.closeDelay))},[i,c,e.closeDelay,d]);return S.useEffect(()=>()=>c(),[c]),{opened:o,reference:p.setReference,floating:p.setFloating,getReferenceProps:v,getFloatingProps:w,openDropdown:x,closeDropdown:k}}const pPe={openDelay:0,closeDelay:150,initiallyOpened:!1};function Bf(e){const{children:r,onOpen:n,onClose:o,openDelay:i,closeDelay:a,initiallyOpened:l,...s}=Pe("HoverCard",pPe,e),c=uPe({openDelay:i,closeDelay:a,defaultOpened:l,onOpen:n,onClose:o});return y.jsx(lPe,{value:{openDropdown:c.openDropdown,closeDropdown:c.closeDropdown,getReferenceProps:c.getReferenceProps,getFloatingProps:c.getFloatingProps,reference:c.reference,floating:c.floating},children:y.jsx(br,{...s,opened:c.opened,__staticSelector:"HoverCard",children:r})})}Bf.displayName="@mantine/core/HoverCard",Bf.Target=AS,Bf.Dropdown=TS,Bf.Group=jS,Bf.extend=e=>e;var hPe=S.useLayoutEffect;const[fPe,_d]=na("Menu component was not found in the tree");var Sd={dropdown:"m_dc9b7c9f",label:"m_9bfac126",divider:"m_efdf90cb",item:"m_99ac2aa1",itemLabel:"m_5476e0d3",itemSection:"m_8b75e504",chevron:"m_b85b0bed"};const DS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=Pe("MenuDivider",null,e),c=_d();return y.jsx(Se,{ref:r,...c.getStyles("divider",{className:o,style:i,styles:a,classNames:n}),...s})});DS.classes=Sd,DS.displayName="@mantine/core/MenuDivider";const vy=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,onMouseEnter:s,onMouseLeave:c,onKeyDown:d,children:u,...p}=Pe("MenuDropdown",null,e),f=S.useRef(null),m=_d(),v=kn(d,k=>{(k.key==="ArrowUp"||k.key==="ArrowDown")&&(k.preventDefault(),f.current?.querySelectorAll("[data-menu-item]:not(:disabled)")[0]?.focus())}),w=kn(s,()=>(m.trigger==="hover"||m.trigger==="click-hover")&&m.openDropdown()),x=kn(c,()=>(m.trigger==="hover"||m.trigger==="click-hover")&&m.closeDropdown());return y.jsxs(br.Dropdown,{...p,onMouseEnter:w,onMouseLeave:x,role:"menu","aria-orientation":"vertical",ref:$r(r,f),...m.getStyles("dropdown",{className:o,style:i,styles:a,classNames:n,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,onKeyDown:v,children:[m.withInitialFocusPlaceholder&&y.jsx("div",{tabIndex:-1,"data-autofocus":!0,"data-mantine-stop-propagation":!0,style:{outline:0}}),u]})});vy.classes=Sd,vy.displayName="@mantine/core/MenuDropdown";const[gPe,x3]=oy(),by=Jn((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,color:s,closeMenuOnClick:c,leftSection:d,rightSection:u,children:p,disabled:f,"data-disabled":m,...v}=Pe("MenuItem",null,e),w=_d(),x=x3(),k=lo(),{dir:C}=bd(),_=S.useRef(null),$=v,R=kn($.onClick,()=>{m||(typeof c=="boolean"?c&&w.closeDropdownImmediately():w.closeOnItemClick&&w.closeDropdownImmediately())}),T=s?k.variantColorResolver({color:s,theme:k,variant:"light"}):void 0,A=s?vd({color:s,theme:k}):null,z=kn($.onKeyDown,j=>{j.key==="ArrowLeft"&&x&&(x.close(),x.focusParentItem())});return y.jsxs(pr,{onMouseDown:j=>j.preventDefault(),...v,unstyled:w.unstyled,tabIndex:w.menuItemTabIndex,...w.getStyles("item",{className:o,style:i,styles:a,classNames:n}),ref:$r(_,r),role:"menuitem",disabled:f,"data-menu-item":!0,"data-disabled":f||m||void 0,"data-mantine-stop-propagation":!0,onClick:R,onKeyDown:iy({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:w.loop,dir:C,orientation:"vertical",onKeyDown:z}),__vars:{"--menu-item-color":A?.isThemeColor&&A?.shade===void 0?`var(--mantine-color-${A.color}-6)`:T?.color,"--menu-item-hover":T?.hover},children:[d&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"left",children:d}),p&&y.jsx("div",{...w.getStyles("itemLabel",{styles:a,classNames:n}),children:p}),u&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"right",children:u})]})});by.classes=Sd,by.displayName="@mantine/core/MenuItem";const PS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=Pe("MenuLabel",null,e),c=_d();return y.jsx(Se,{ref:r,...c.getStyles("label",{className:o,style:i,styles:a,classNames:n}),...s})});PS.classes=Sd,PS.displayName="@mantine/core/MenuLabel";const MS=ot((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,onMouseEnter:s,onMouseLeave:c,onKeyDown:d,children:u,...p}=Pe("MenuSubDropdown",null,e),f=S.useRef(null),m=_d(),v=x3(),w=kn(s,v?.open),x=kn(c,v?.close);return y.jsx(br.Dropdown,{...p,onMouseEnter:w,onMouseLeave:x,role:"menu","aria-orientation":"vertical",ref:$r(r,f),...m.getStyles("dropdown",{className:o,style:i,styles:a,classNames:n,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,children:u})});MS.classes=Sd,MS.displayName="@mantine/core/MenuSubDropdown";const NS=Jn((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,color:s,leftSection:c,rightSection:d,children:u,disabled:p,"data-disabled":f,closeMenuOnClick:m,...v}=Pe("MenuSubItem",null,e),w=_d(),x=x3(),k=lo(),{dir:C}=bd(),_=S.useRef(null),$=v,R=s?k.variantColorResolver({color:s,theme:k,variant:"light"}):void 0,T=s?vd({color:s,theme:k}):null,A=kn($.onKeyDown,N=>{N.key==="ArrowRight"&&(x?.open(),x?.focusFirstItem()),N.key==="ArrowLeft"&&x?.parentContext&&(x.parentContext.close(),x.parentContext.focusParentItem())}),z=kn($.onClick,()=>{!f&&m&&w.closeDropdownImmediately()}),j=kn($.onMouseEnter,x?.open),I=kn($.onMouseLeave,x?.close);return y.jsxs(pr,{onMouseDown:N=>N.preventDefault(),...v,unstyled:w.unstyled,tabIndex:w.menuItemTabIndex,...w.getStyles("item",{className:o,style:i,styles:a,classNames:n}),ref:$r(_,r),role:"menuitem",disabled:p,"data-menu-item":!0,"data-sub-menu-item":!0,"data-disabled":p||f||void 0,"data-mantine-stop-propagation":!0,onMouseEnter:j,onMouseLeave:I,onClick:z,onKeyDown:iy({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:w.loop,dir:C,orientation:"vertical",onKeyDown:A}),__vars:{"--menu-item-color":T?.isThemeColor&&T?.shade===void 0?`var(--mantine-color-${T.color}-6)`:R?.color,"--menu-item-hover":R?.hover},children:[c&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"left",children:c}),u&&y.jsx("div",{...w.getStyles("itemLabel",{styles:a,classNames:n}),children:u}),y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"right",children:d||y.jsx(fS,{...w.getStyles("chevron"),size:14})})]})});NS.classes=Sd,NS.displayName="@mantine/core/MenuSubItem";function oG({children:e,refProp:r}){if(!Sw(e))throw new Error("Menu.Sub.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return _d(),y.jsx(br.Target,{refProp:r,popupType:"menu",children:e})}oG.displayName="@mantine/core/MenuSubTarget";const mPe={offset:0,position:"right-start",transitionProps:{duration:0},openDelay:0,middlewares:{shift:{crossAxis:!0}}};function If(e){const{children:r,closeDelay:n,openDelay:o,...i}=Pe("MenuSub",mPe,e),a=oa(),[l,{open:s,close:c}]=xze(!1),d=x3(),{openDropdown:u,closeDropdown:p}=TW({open:s,close:c,closeDelay:n,openDelay:o});return y.jsx(gPe,{value:{opened:l,close:p,open:u,focusFirstItem:()=>window.setTimeout(()=>{document.getElementById(`${a}-dropdown`)?.querySelectorAll("[data-menu-item]:not([data-disabled])")[0]?.focus()},16),focusParentItem:()=>window.setTimeout(()=>{document.getElementById(`${a}-target`)?.focus()},16),parentContext:d},children:y.jsx(br,{opened:l,withinPortal:!1,withArrow:!1,id:a,...i,children:r})})}If.extend=e=>e,If.displayName="@mantine/core/MenuSub",If.Target=oG,If.Dropdown=MS,If.Item=NS;const yPe={refProp:"ref"},w3=S.forwardRef((e,r)=>{const{children:n,refProp:o,...i}=Pe("MenuTarget",yPe,e),a=md(n);if(!a)throw new Error("Menu.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const l=_d(),s=a.props,c=kn(s.onClick,()=>{l.trigger==="click"?l.toggleDropdown():l.trigger==="click-hover"&&(l.setOpenedViaClick(!0),l.opened||l.openDropdown())}),d=kn(s.onMouseEnter,()=>(l.trigger==="hover"||l.trigger==="click-hover")&&l.openDropdown()),u=kn(s.onMouseLeave,()=>{(l.trigger==="hover"||l.trigger==="click-hover"&&!l.openedViaClick)&&l.closeDropdown()});return y.jsx(br.Target,{refProp:o,popupType:"menu",ref:r,...i,children:S.cloneElement(a,{onClick:c,onMouseEnter:d,onMouseLeave:u,"data-expanded":l.opened?!0:void 0})})});w3.displayName="@mantine/core/MenuTarget";const vPe={trapFocus:!0,closeOnItemClick:!0,withInitialFocusPlaceholder:!0,clickOutsideEvents:["mousedown","touchstart","keydown"],loop:!0,trigger:"click",openDelay:0,closeDelay:100,menuItemTabIndex:-1};function tn(e){const r=Pe("Menu",vPe,e),{children:n,onOpen:o,onClose:i,opened:a,defaultOpened:l,trapFocus:s,onChange:c,closeOnItemClick:d,loop:u,closeOnEscape:p,trigger:f,openDelay:m,closeDelay:v,classNames:w,styles:x,unstyled:k,variant:C,vars:_,menuItemTabIndex:$,keepMounted:R,withInitialFocusPlaceholder:T,attributes:A,...z}=r,j=kt({name:"Menu",classes:Sd,props:r,classNames:w,styles:x,unstyled:k,attributes:A}),[I,N]=Ys({value:a,defaultValue:l,finalValue:!1,onChange:c}),[L,H]=S.useState(!1),P=()=>{N(!1),H(!1),I&&i?.()},V=()=>{N(!0),!I&&o?.()},B=()=>{I?P():V()},{openDropdown:F,closeDropdown:q}=TW({open:V,close:P,closeDelay:v,openDelay:m}),G=K=>HRe("[data-menu-item]","[data-menu-dropdown]",K),{resolvedClassNames:U,resolvedStyles:Y}=T9({classNames:w,styles:x,props:r});return y.jsx(fPe,{value:{getStyles:j,opened:I,toggleDropdown:B,getItemIndex:G,openedViaClick:L,setOpenedViaClick:H,closeOnItemClick:d,closeDropdown:f==="click"?P:q,openDropdown:f==="click"?V:F,closeDropdownImmediately:P,loop:u,trigger:f,unstyled:k,menuItemTabIndex:$,withInitialFocusPlaceholder:T},children:y.jsx(br,{returnFocus:!0,...z,opened:I,onChange:B,defaultOpened:l,trapFocus:R?!1:s,closeOnEscape:p,__staticSelector:"Menu",classNames:U,styles:Y,unstyled:k,variant:C,keepMounted:R,children:n})})}tn.extend=e=>e,tn.withProps=NTe(tn),tn.classes=Sd,tn.displayName="@mantine/core/Menu",tn.Item=by,tn.Label=PS,tn.Dropdown=vy,tn.Target=w3,tn.Divider=DS,tn.Sub=If;const[Ywt,iG]=oy(),[bPe,xPe]=oy();var k3={root:"m_7cda1cd6","root--default":"m_44da308b","root--contrast":"m_e3a01f8",label:"m_1e0e6180",remove:"m_ae386778",group:"m_1dcfd90b"};const wPe=(e,{gap:r},{size:n})=>({group:{"--pg-gap":r!==void 0?dr(r):dr(n,"pg-gap")}}),BS=ot((e,r)=>{const n=Pe("PillGroup",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,disabled:u,attributes:p,...f}=n,m=iG()?.size||d||void 0,v=kt({name:"PillGroup",classes:k3,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:wPe,stylesCtx:{size:m},rootSelector:"group"});return y.jsx(bPe,{value:{size:m,disabled:u},children:y.jsx(Se,{ref:r,size:m,...v("group"),...f})})});BS.classes=k3,BS.displayName="@mantine/core/PillGroup";const kPe={variant:"default"},_Pe=(e,{radius:r},{size:n})=>({root:{"--pill-fz":dr(n,"pill-fz"),"--pill-height":dr(n,"pill-height"),"--pill-radius":r===void 0?void 0:wn(r)}}),_3=ot((e,r)=>{const n=Pe("Pill",kPe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,variant:d,children:u,withRemoveButton:p,onRemove:f,removeButtonProps:m,radius:v,size:w,disabled:x,mod:k,attributes:C,..._}=n,$=xPe(),R=iG(),T=w||$?.size||void 0,A=R?.variant==="filled"?"contrast":d||"default",z=kt({name:"Pill",classes:k3,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:C,vars:c,varsResolver:_Pe,stylesCtx:{size:T}});return y.jsxs(Se,{component:"span",ref:r,variant:A,size:T,...z("root",{variant:A}),mod:[{"with-remove":p&&!x,disabled:x||$?.disabled},k],..._,children:[y.jsx("span",{...z("label"),children:u}),p&&y.jsx(lp,{variant:"transparent",radius:v,tabIndex:-1,"aria-hidden":!0,unstyled:s,...m,...z("remove",{className:m?.className,style:m?.style}),onMouseDown:j=>{j.preventDefault(),j.stopPropagation(),m?.onMouseDown?.(j)},onClick:j=>{j.stopPropagation(),f?.(),m?.onClick?.(j)}})]})});_3.classes=k3,_3.displayName="@mantine/core/Pill",_3.Group=BS;var aG={root:"m_f0824112",description:"m_57492dcc",section:"m_690090b5",label:"m_1f6ac4c4",body:"m_f07af9d2",children:"m_e17b862f",chevron:"m_1fd8a00b"};const SPe=(e,{variant:r,color:n,childrenOffset:o,autoContrast:i})=>{const a=e.variantColorResolver({color:n||e.primaryColor,theme:e,variant:r||"light",autoContrast:i});return{root:{"--nl-bg":n||r?a.background:void 0,"--nl-hover":n||r?a.hover:void 0,"--nl-color":n||r?a.color:void 0},children:{"--nl-offset":Gs(o)}}},IS=Jn((e,r)=>{const n=Pe("NavLink",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,opened:d,defaultOpened:u,onChange:p,children:f,active:m,disabled:v,leftSection:w,rightSection:x,label:k,description:C,disableRightSectionRotation:_,noWrap:$,childrenOffset:R,autoContrast:T,mod:A,attributes:z,onClick:j,onKeyDown:I,...N}=n,L=kt({name:"NavLink",props:n,classes:aG,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:z,vars:c,varsResolver:SPe}),[H,P]=Ys({value:d,defaultValue:u,finalValue:!1,onChange:p}),V=!!f,B=F=>{j?.(F),V&&(F.preventDefault(),P(!H))};return y.jsxs(y.Fragment,{children:[y.jsxs(pr,{...L("root"),component:"a",ref:r,onClick:B,onKeyDown:F=>{I?.(F),F.nativeEvent.code==="Space"&&V&&(F.preventDefault(),P(!H))},unstyled:s,mod:[{disabled:v,active:m,expanded:H},A],...N,children:[w&&y.jsx(Se,{component:"span",...L("section"),mod:{position:"left"},children:w}),y.jsxs(Se,{...L("body"),mod:{"no-wrap":$},children:[y.jsx(Se,{component:"span",...L("label"),children:k}),y.jsx(Se,{component:"span",mod:{active:m},...L("description"),children:C})]}),(V||x!==void 0)&&y.jsx(Se,{...L("section"),component:"span",mod:{rotate:H&&!_,position:"right"},children:V?x!==void 0?x:y.jsx(fS,{...L("chevron")}):x})]}),V&&y.jsx(QH,{in:H,...L("collapse"),children:y.jsx("div",{...L("children"),children:f})})]})});IS.classes=aG,IS.displayName="@mantine/core/NavLink";var lG={root:"m_a513464",icon:"m_a4ceffb",loader:"m_b0920b15",body:"m_a49ed24",title:"m_3feedf16",description:"m_3d733a3a",closeButton:"m_919a4d88"};const EPe={withCloseButton:!0},CPe=(e,{radius:r,color:n})=>({root:{"--notification-radius":r===void 0?void 0:wn(r),"--notification-color":n?Ci(n,e):void 0}}),xy=ot((e,r)=>{const n=Pe("Notification",EPe,e),{className:o,color:i,radius:a,loading:l,withCloseButton:s,withBorder:c,title:d,icon:u,children:p,onClose:f,closeButtonProps:m,classNames:v,style:w,styles:x,unstyled:k,variant:C,vars:_,mod:$,loaderProps:R,role:T,attributes:A,...z}=n,j=kt({name:"Notification",classes:lG,props:n,className:o,style:w,classNames:v,styles:x,unstyled:k,attributes:A,vars:_,varsResolver:CPe});return y.jsxs(Se,{...j("root"),mod:[{"data-with-icon":!!u||l,"data-with-border":c},$],ref:r,variant:C,role:T||"alert",...z,children:[u&&!l&&y.jsx("div",{...j("icon"),children:u}),l&&y.jsx(Pf,{size:28,color:i,...R,...j("loader")}),y.jsxs("div",{...j("body"),children:[d&&y.jsx("div",{...j("title"),children:d}),y.jsx(Se,{...j("description"),mod:{"data-with-title":!!d},children:p})]}),s&&y.jsx(lp,{iconSize:16,color:"gray",...m,unstyled:k,onClick:f,...j("closeButton")})]})});xy.classes=lG,xy.displayName="@mantine/core/Notification";const $Pe={duration:100,transition:"fade"};function sG(e,r){return{...$Pe,...r,...e}}function RPe({offset:e,position:r,defaultOpened:n}){const[o,i]=S.useState(n),a=S.useRef(null),{x:l,y:s,elements:c,refs:d,update:u,placement:p}=t3({placement:r,middleware:[Z9({crossAxis:!0,padding:5,rootBoundary:"document"})]}),f=p.includes("right")?e:r.includes("left")?e*-1:0,m=p.includes("bottom")?e:r.includes("top")?e*-1:0,v=S.useCallback(({clientX:w,clientY:x})=>{d.setPositionReference({getBoundingClientRect(){return{width:0,height:0,x:w,y:x,left:w+f,top:x+m,right:w,bottom:x}}})},[c.reference]);return S.useEffect(()=>{if(d.floating.current){const w=a.current;w.addEventListener("mousemove",v);const x=Zs(d.floating.current);return x.forEach(k=>{k.addEventListener("scroll",u)}),()=>{w.removeEventListener("mousemove",v),x.forEach(k=>{k.removeEventListener("scroll",u)})}}},[c.reference,d.floating.current,u,v,o]),{handleMouseMove:v,x:l,y:s,opened:o,setOpened:i,boundaryRef:a,floating:d.setFloating}}var S3={tooltip:"m_1b3c8819",arrow:"m_f898399f"};const zPe={refProp:"ref",withinPortal:!0,offset:10,position:"right",zIndex:Ew("popover")},TPe=(e,{radius:r,color:n})=>({tooltip:{"--tooltip-radius":r===void 0?void 0:wn(r),"--tooltip-bg":n?Ci(n,e):void 0,"--tooltip-color":n?"var(--mantine-color-white)":void 0}}),OS=ot((e,r)=>{const n=Pe("TooltipFloating",zPe,e),{children:o,refProp:i,withinPortal:a,style:l,className:s,classNames:c,styles:d,unstyled:u,radius:p,color:f,label:m,offset:v,position:w,multiline:x,zIndex:k,disabled:C,defaultOpened:_,variant:$,vars:R,portalProps:T,attributes:A,...z}=n,j=lo(),I=kt({name:"TooltipFloating",props:n,classes:S3,className:s,style:l,classNames:c,styles:d,unstyled:u,attributes:A,rootSelector:"tooltip",vars:R,varsResolver:TPe}),{handleMouseMove:N,x:L,y:H,opened:P,boundaryRef:V,floating:B,setOpened:F}=RPe({offset:v,position:w,defaultOpened:_}),q=md(o);if(!q)throw new Error("[@mantine/core] Tooltip.Floating component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported");const G=$r(V,Rw(q),r),U=q.props,Y=O=>{U.onMouseEnter?.(O),N(O),F(!0)},K=O=>{U.onMouseLeave?.(O),F(!1)};return y.jsxs(y.Fragment,{children:[y.jsx(Df,{...T,withinPortal:a,children:y.jsx(Se,{...z,...I("tooltip",{style:{...M9(l,j),zIndex:k,display:!C&&P?"block":"none",top:(H&&Math.round(H))??"",left:(L&&Math.round(L))??""}}),variant:$,ref:B,mod:{multiline:x},children:m})}),S.cloneElement(q,{...U,[i]:G,onMouseEnter:Y,onMouseLeave:K})]})});OS.classes=S3,OS.displayName="@mantine/core/TooltipFloating";const cG=S.createContext(!1),jPe=cG.Provider,APe=()=>S.useContext(cG),DPe={openDelay:0,closeDelay:0};function dp(e){const{openDelay:r,closeDelay:n,children:o}=Pe("TooltipGroup",DPe,e);return y.jsx(jPe,{value:!0,children:y.jsx(VU,{delay:{open:r,close:n},children:o})})}dp.displayName="@mantine/core/TooltipGroup",dp.extend=e=>e;function PPe(e){if(e===void 0)return{shift:!0,flip:!0};const r={...e};return e.shift===void 0&&(r.shift=!0),e.flip===void 0&&(r.flip=!0),r}function MPe(e){const r=PPe(e.middlewares),n=[TU(e.offset)];return r.shift&&n.push(Z9(typeof r.shift=="boolean"?{padding:8}:{padding:8,...r.shift})),r.flip&&n.push(typeof r.flip=="boolean"?Jw():Jw(r.flip)),n.push(AU({element:e.arrowRef,padding:e.arrowOffset})),r.inline?n.push(typeof r.inline=="boolean"?uy():uy(r.inline)):e.inline&&n.push(uy()),n}function NPe(e){const[r,n]=S.useState(e.defaultOpened),o=typeof e.opened=="boolean"?e.opened:r,i=APe(),a=oa(),l=S.useCallback($=>{n($),$&&x(a)},[a]),{x:s,y:c,context:d,refs:u,placement:p,middlewareData:{arrow:{x:f,y:m}={}}}=t3({strategy:e.strategy,placement:e.position,open:o,onOpenChange:l,middleware:MPe(e),whileElementsMounted:Kw}),{delay:v,currentId:w,setCurrentId:x}=qU(d,{id:a}),{getReferenceProps:k,getFloatingProps:C}=WU([LU(d,{enabled:e.events?.hover,delay:i?v:{open:e.openDelay,close:e.closeDelay},mouseOnly:!e.events?.touch}),xAe(d,{enabled:e.events?.focus,visibleOnly:!0}),GU(d,{role:"tooltip"}),UU(d,{enabled:typeof e.opened>"u"})]);wf(()=>{e.onPositionChange?.(p)},[p]);const _=o&&w&&w!==a;return{x:s,y:c,arrowX:f,arrowY:m,reference:u.setReference,floating:u.setFloating,getFloatingProps:C,getReferenceProps:k,isGroupPhase:_,opened:o,placement:p}}const dG={position:"top",refProp:"ref",withinPortal:!0,arrowSize:4,arrowOffset:5,arrowRadius:0,arrowPosition:"side",offset:5,transitionProps:{duration:100,transition:"fade"},events:{hover:!0,focus:!1,touch:!1},zIndex:Ew("popover"),positionDependencies:[],middlewares:{flip:!0,shift:!0,inline:!1}},BPe=(e,{radius:r,color:n,variant:o,autoContrast:i})=>{const a=e.variantColorResolver({theme:e,color:n||e.primaryColor,autoContrast:i,variant:o||"filled"});return{tooltip:{"--tooltip-radius":r===void 0?void 0:wn(r),"--tooltip-bg":n?a.background:void 0,"--tooltip-color":n?a.color:void 0}}},_n=ot((e,r)=>{const n=Pe("Tooltip",dG,e),{children:o,position:i,refProp:a,label:l,openDelay:s,closeDelay:c,onPositionChange:d,opened:u,defaultOpened:p,withinPortal:f,radius:m,color:v,classNames:w,styles:x,unstyled:k,style:C,className:_,withArrow:$,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,offset:j,transitionProps:I,multiline:N,events:L,zIndex:H,disabled:P,positionDependencies:V,onClick:B,onMouseEnter:F,onMouseLeave:q,inline:G,variant:U,keepMounted:Y,vars:K,portalProps:O,mod:W,floatingStrategy:Z,middlewares:Q,autoContrast:ie,attributes:te,target:re,...ue}=Pe("Tooltip",dG,n),{dir:_e}=bd(),ce=S.useRef(null),pe=NPe({position:pW(_e,i),closeDelay:c,openDelay:s,onPositionChange:d,opened:u,defaultOpened:p,events:L,arrowRef:ce,arrowOffset:T,offset:typeof j=="number"?j+($?R/2:0):j,positionDependencies:[...V,re??o],inline:G,strategy:Z,middlewares:Q});S.useEffect(()=>{const Le=re instanceof HTMLElement?re:typeof re=="string"?document.querySelector(re):re?.current||null;Le&&pe.reference(Le)},[re,pe]);const xe=kt({name:"Tooltip",props:n,classes:S3,className:_,style:C,classNames:w,styles:x,unstyled:k,attributes:te,rootSelector:"tooltip",vars:K,varsResolver:BPe}),je=md(o);if(!re&&!je)return null;if(re){const Le=sG(I,{duration:100,transition:"fade"});return y.jsx(y.Fragment,{children:y.jsx(Df,{...O,withinPortal:f,children:y.jsx(wd,{...Le,keepMounted:Y,mounted:!P&&!!pe.opened,duration:pe.isGroupPhase?10:Le.duration,children:St=>y.jsxs(Se,{...ue,"data-fixed":Z==="fixed"||void 0,variant:U,mod:[{multiline:N},W],...pe.getFloatingProps({ref:pe.floating,className:xe("tooltip").className,style:{...xe("tooltip").style,...St,zIndex:H,top:pe.y??0,left:pe.x??0}}),children:[l,y.jsx(i3,{ref:ce,arrowX:pe.arrowX,arrowY:pe.arrowY,visible:$,position:pe.placement,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,...xe("arrow")})]})})})})}const Be=je.props,Je=$r(pe.reference,Rw(je),r),st=sG(I,{duration:100,transition:"fade"});return y.jsxs(y.Fragment,{children:[y.jsx(Df,{...O,withinPortal:f,children:y.jsx(wd,{...st,keepMounted:Y,mounted:!P&&!!pe.opened,duration:pe.isGroupPhase?10:st.duration,children:Le=>y.jsxs(Se,{...ue,"data-fixed":Z==="fixed"||void 0,variant:U,mod:[{multiline:N},W],...pe.getFloatingProps({ref:pe.floating,className:xe("tooltip").className,style:{...xe("tooltip").style,...Le,zIndex:H,top:pe.y??0,left:pe.x??0}}),children:[l,y.jsx(i3,{ref:ce,arrowX:pe.arrowX,arrowY:pe.arrowY,visible:$,position:pe.placement,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,...xe("arrow")})]})})}),S.cloneElement(je,pe.getReferenceProps({onClick:B,onMouseEnter:F,onMouseLeave:q,onMouseMove:n.onMouseMove,onPointerDown:n.onPointerDown,onPointerEnter:n.onPointerEnter,...Be,className:el(_,Be.className),[a]:Je}))]})});_n.classes=S3,_n.displayName="@mantine/core/Tooltip",_n.Floating=OS,_n.Group=dp;var uG={root:"m_cf365364",indicator:"m_9e182ccd",label:"m_1738fcb2",input:"m_1714d588",control:"m_69686b9b",innerLabel:"m_78882f40"};const IPe={withItemsBorders:!0},OPe=(e,{radius:r,color:n,transitionDuration:o,size:i,transitionTimingFunction:a})=>({root:{"--sc-radius":r===void 0?void 0:wn(r),"--sc-color":n?Ci(n,e):void 0,"--sc-shadow":n?void 0:"var(--mantine-shadow-xs)","--sc-transition-duration":o===void 0?void 0:`${o}ms`,"--sc-transition-timing-function":a,"--sc-padding":dr(i,"sc-padding"),"--sc-font-size":Eo(i)}}),Of=ot((e,r)=>{const n=Pe("SegmentedControl",IPe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,data:d,value:u,defaultValue:p,onChange:f,size:m,name:v,disabled:w,readOnly:x,fullWidth:k,orientation:C,radius:_,color:$,transitionDuration:R,transitionTimingFunction:T,variant:A,autoContrast:z,withItemsBorders:j,mod:I,attributes:N,...L}=n,H=kt({name:"SegmentedControl",props:n,classes:uG,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:N,vars:c,varsResolver:OPe}),P=lo(),V=d.map(re=>typeof re=="string"?{label:re,value:re}:re),B=_ze(),[F,q]=S.useState(g9()),[G,U]=S.useState(null),[Y,K]=S.useState({}),O=(re,ue)=>{Y[ue]=re,K(Y)},[W,Z]=Ys({value:u,defaultValue:p,finalValue:Array.isArray(d)?V.find(re=>!re.disabled)?.value??d[0]?.value??null:null,onChange:f}),Q=oa(v),ie=V.map(re=>S.createElement(Se,{...H("control"),mod:{active:W===re.value,orientation:C},key:re.value},S.createElement("input",{...H("input"),disabled:w||re.disabled,type:"radio",name:Q,value:re.value,id:`${Q}-${re.value}`,checked:W===re.value,onChange:()=>!x&&Z(re.value),"data-focus-ring":P.focusRing,key:`${re.value}-input`}),S.createElement(Se,{component:"label",...H("label"),mod:{active:W===re.value&&!(w||re.disabled),disabled:w||re.disabled,"read-only":x},htmlFor:`${Q}-${re.value}`,ref:ue=>O(ue,re.value),__vars:{"--sc-label-color":$!==void 0?$9({color:$,theme:P,autoContrast:z}):void 0},key:`${re.value}-label`},y.jsx("span",{...H("innerLabel"),children:re.label})))),te=$r(r,re=>U(re));return hze(()=>{q(g9())},[d.length]),d.length===0?null:y.jsxs(Se,{...H("root"),variant:A,size:m,ref:te,mod:[{"full-width":k,orientation:C,initialized:B,"with-items-borders":j},I],...L,role:"radiogroup","data-disabled":w,children:[typeof W=="string"&&y.jsx(h3,{target:Y[W],parent:G,component:"span",transitionDuration:"var(--sc-transition-duration)",...H("indicator")},F),ie]})});Of.classes=uG,Of.displayName="@mantine/core/SegmentedControl";const[LPe,E3]=na("SliderProvider was not found in tree"),pG=S.forwardRef(({size:e,disabled:r,variant:n,color:o,thumbSize:i,radius:a,...l},s)=>{const{getStyles:c}=E3();return y.jsx(Se,{tabIndex:-1,variant:n,size:e,ref:s,...c("root"),...l})});pG.displayName="@mantine/core/SliderRoot";const hG=S.forwardRef(({max:e,min:r,value:n,position:o,label:i,dragging:a,onMouseDown:l,onKeyDownCapture:s,labelTransitionProps:c,labelAlwaysOn:d,thumbLabel:u,onFocus:p,onBlur:f,showLabelOnHover:m,isHovered:v,children:w=null,disabled:x},k)=>{const{getStyles:C}=E3(),[_,$]=S.useState(!1),R=d||a||_||m&&v;return y.jsxs(Se,{tabIndex:0,role:"slider","aria-label":u,"aria-valuemax":e,"aria-valuemin":r,"aria-valuenow":n,ref:k,__vars:{"--slider-thumb-offset":`${o}%`},...C("thumb",{focusable:!0}),mod:{dragging:a,disabled:x},onFocus:T=>{$(!0),typeof p=="function"&&p(T)},onBlur:T=>{$(!1),typeof f=="function"&&f(T)},onTouchStart:l,onMouseDown:l,onKeyDownCapture:s,onClick:T=>T.stopPropagation(),children:[w,y.jsx(wd,{mounted:i!=null&&!!R,transition:"fade",duration:0,...c,children:T=>y.jsx("div",{...C("label",{style:T}),children:i})})]})});hG.displayName="@mantine/core/SliderThumb";function fG({value:e,min:r,max:n}){const o=(e-r)/(n-r)*100;return Math.min(Math.max(o,0),100)}function FPe({mark:e,offset:r,value:n,inverted:o=!1}){return o?typeof r=="number"&&e.value<=r||e.value>=n:typeof r=="number"?e.value>=r&&e.value<=n:e.value<=n}function gG({marks:e,min:r,max:n,disabled:o,value:i,offset:a,inverted:l}){const{getStyles:s}=E3();if(!e)return null;const c=e.map((d,u)=>S.createElement(Se,{...s("markWrapper"),__vars:{"--mark-offset":`${fG({value:d.value,min:r,max:n})}%`},key:u},y.jsx(Se,{...s("mark"),mod:{filled:FPe({mark:d,value:i,offset:a,inverted:l}),disabled:o}}),d.label&&y.jsx("div",{...s("markLabel"),children:d.label})));return y.jsx("div",{children:c})}gG.displayName="@mantine/core/SliderMarks";function mG({filled:e,children:r,offset:n,disabled:o,marksOffset:i,inverted:a,containerProps:l,...s}){const{getStyles:c}=E3();return y.jsx(Se,{...c("trackContainer"),mod:{disabled:o},...l,children:y.jsxs(Se,{...c("track"),mod:{inverted:a,disabled:o},children:[y.jsx(Se,{mod:{inverted:a,disabled:o},__vars:{"--slider-bar-width":`calc(${e}% + 2 * var(--slider-size))`,"--slider-bar-offset":`calc(${n}% - var(--slider-size))`},...c("bar")}),r,y.jsx(gG,{...s,offset:i,disabled:o,inverted:a})]})})}mG.displayName="@mantine/core/SliderTrack";function VPe({value:e,containerWidth:r,min:n,max:o,step:i,precision:a}){const l=(r?Math.min(Math.max(e,0),r)/r:e)*(o-n),s=(l!==0?Math.round(l/i)*i:0)+n,c=Math.max(s,n);return a!==void 0?Number(c.toFixed(a)):c}function C3(e,r){return parseFloat(e.toFixed(r))}function qPe(e){if(!e)return 0;const r=e.toString().split(".");return r.length>1?r[1].length:0}function LS(e,r){const n=[...r].sort((o,i)=>o.value-i.value).find(o=>o.value>e);return n?n.value:e}function FS(e,r){const n=[...r].sort((o,i)=>i.value-o.value).find(o=>o.valuen.value-o.value);return r.length>0?r[0].value:0}function vG(e){const r=[...e].sort((n,o)=>n.value-o.value);return r.length>0?r[r.length-1].value:100}var bG={root:"m_dd36362e",label:"m_c9357328",thumb:"m_c9a9a60a",trackContainer:"m_a8645c2",track:"m_c9ade57f",bar:"m_38aeed47",markWrapper:"m_b7b0423a",mark:"m_dd33bc19",markLabel:"m_68c77a5b"};const HPe={radius:"xl",min:0,max:100,step:1,marks:[],label:e=>e,labelTransitionProps:{transition:"fade",duration:0},thumbLabel:"",showLabelOnHover:!0,scale:e=>e,size:"md"},UPe=(e,{size:r,color:n,thumbSize:o,radius:i})=>({root:{"--slider-size":dr(r,"slider-size"),"--slider-color":n?Ci(n,e):void 0,"--slider-radius":i===void 0?void 0:wn(i),"--slider-thumb-size":o!==void 0?$e(o):"calc(var(--slider-size) * 2)"}}),VS=ot((e,r)=>{const n=Pe("Slider",HPe,e),{classNames:o,styles:i,value:a,onChange:l,onChangeEnd:s,size:c,min:d,max:u,domain:p,step:f,precision:m,defaultValue:v,name:w,marks:x,label:k,labelTransitionProps:C,labelAlwaysOn:_,thumbLabel:$,showLabelOnHover:R,thumbChildren:T,disabled:A,unstyled:z,scale:j,inverted:I,className:N,style:L,vars:H,hiddenInputProps:P,restrictToMarks:V,thumbProps:B,attributes:F,...q}=n,G=kt({name:"Slider",props:n,classes:bG,classNames:o,className:N,styles:i,style:L,attributes:F,vars:H,varsResolver:UPe,unstyled:z}),{dir:U}=bd(),[Y,K]=S.useState(!1),[O,W]=Ys({value:typeof a=="number"?hd(a,d,u):a,defaultValue:typeof v=="number"?hd(v,d,u):v,finalValue:hd(0,d,u),onChange:l}),Z=S.useRef(O),Q=S.useRef(s);S.useEffect(()=>{Q.current=s},[s]);const ie=S.useRef(null),te=S.useRef(null),[re,ue]=p||[d,u],_e=fG({value:O,min:re,max:ue}),ce=j(O),pe=typeof k=="function"?k(ce):k,xe=m??qPe(f),je=S.useCallback(({x:Ve})=>{if(!A){const qe=VPe({value:Ve,min:re,max:ue,step:f,precision:xe}),Xe=hd(qe,d,u);W(V&&x?.length?TH(Xe,x.map(It=>It.value)):Xe),Z.current=Xe}},[A,d,u,re,ue,f,xe,W,x,V]),Be=S.useCallback(()=>{if(!A&&Q.current){const Ve=V&&x?.length?TH(Z.current,x.map(qe=>qe.value)):Z.current;Q.current(Ve)}},[A,x,V]),{ref:Je,active:st}=kH(je,{onScrubEnd:Be},U),Le=S.useCallback(Ve=>{!A&&Q.current&&Q.current(Ve)},[A]),St=Ve=>{if(!A)switch(Ve.key){case"ArrowUp":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=LS(O,x);W(Xe),Le(Xe);break}const qe=C3(Math.min(Math.max(O+f,d),u),xe);W(qe),Le(qe);break}case"ArrowRight":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=U==="rtl"?FS(O,x):LS(O,x);W(Xe),Le(Xe);break}const qe=C3(Math.min(Math.max(U==="rtl"?O-f:O+f,d),u),xe);W(qe),Le(qe);break}case"ArrowDown":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=FS(O,x);W(Xe),Le(Xe);break}const qe=C3(Math.min(Math.max(O-f,d),u),xe);W(qe),Le(qe);break}case"ArrowLeft":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=U==="rtl"?LS(O,x):FS(O,x);W(Xe),Le(Xe);break}const qe=C3(Math.min(Math.max(U==="rtl"?O+f:O-f,d),u),xe);W(qe),Le(qe);break}case"Home":{if(Ve.preventDefault(),te.current?.focus(),V&&x){W(yG(x)),Le(yG(x));break}W(d),Le(d);break}case"End":{if(Ve.preventDefault(),te.current?.focus(),V&&x){W(vG(x)),Le(vG(x));break}W(u),Le(u);break}}};return y.jsx(LPe,{value:{getStyles:G},children:y.jsxs(pG,{...q,ref:$r(r,ie),onKeyDownCapture:St,onMouseDownCapture:()=>ie.current?.focus(),size:c,disabled:A,children:[y.jsx(mG,{inverted:I,offset:0,filled:_e,marks:x,min:re,max:ue,value:ce,disabled:A,containerProps:{ref:Je,onMouseEnter:R?()=>K(!0):void 0,onMouseLeave:R?()=>K(!1):void 0},children:y.jsx(hG,{max:ue,min:re,value:ce,position:_e,dragging:st,label:pe,ref:te,labelTransitionProps:C,labelAlwaysOn:_,thumbLabel:$,showLabelOnHover:R,isHovered:Y,disabled:A,...B,children:T})}),y.jsx("input",{type:"hidden",name:w,value:ce,...P})]})})});VS.classes=bG,VS.displayName="@mantine/core/Slider";const qS=ot((e,r)=>{const{w:n,h:o,miw:i,mih:a,...l}=Pe("Space",null,e);return y.jsx(Se,{ref:r,...l,w:n,miw:i??n,h:o,mih:a??o})});qS.displayName="@mantine/core/Space";var xG={root:"m_6d731127"};const WPe={gap:"md",align:"stretch",justify:"flex-start"},GPe=(e,{gap:r,align:n,justify:o})=>({root:{"--stack-gap":Gs(r),"--stack-align":n,"--stack-justify":o}}),Lo=ot((e,r)=>{const n=Pe("Stack",WPe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,align:d,justify:u,gap:p,variant:f,attributes:m,...v}=n,w=kt({name:"Stack",props:n,classes:xG,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:GPe});return y.jsx(Se,{ref:r,...w("root"),variant:f,...v})});Lo.classes=xG,Lo.displayName="@mantine/core/Stack";const[YPe,HS]=na("Tabs component was not found in the tree");var wy={root:"m_89d60db1","list--default":"m_576c9d4",list:"m_89d33d6d",tab:"m_4ec4dce6",panel:"m_b0c91715",tabSection:"m_fc420b1f",tabLabel:"m_42bbd1ae","tab--default":"m_539e827b","list--outline":"m_6772fbd5","tab--outline":"m_b59ab47c","tab--pills":"m_c3381914"};const ky=ot((e,r)=>{const n=Pe("TabsList",null,e),{children:o,className:i,grow:a,justify:l,classNames:s,styles:c,style:d,mod:u,...p}=n,f=HS();return y.jsx(Se,{...p,...f.getStyles("list",{className:i,style:d,classNames:s,styles:c,props:n,variant:f.variant}),ref:r,role:"tablist",variant:f.variant,mod:[{grow:a,orientation:f.orientation,placement:f.orientation==="vertical"&&f.placement,inverted:f.inverted},u],"aria-orientation":f.orientation,__vars:{"--tabs-justify":l},children:o})});ky.classes=wy,ky.displayName="@mantine/core/TabsList";const rc=ot((e,r)=>{const n=Pe("TabsPanel",null,e),{children:o,className:i,value:a,classNames:l,styles:s,style:c,mod:d,keepMounted:u,...p}=n,f=HS(),m=f.value===a,v=f.keepMounted||u||m?o:null;return y.jsx(Se,{...f.getStyles("panel",{className:i,classNames:l,styles:s,style:[c,m?void 0:{display:"none"}],props:n}),ref:r,mod:[{orientation:f.orientation},d],role:"tabpanel",id:f.getPanelId(a),"aria-labelledby":f.getTabId(a),...p,children:v})});rc.classes=wy,rc.displayName="@mantine/core/TabsPanel";const Lf=ot((e,r)=>{const n=Pe("TabsTab",null,e),{className:o,children:i,rightSection:a,leftSection:l,value:s,onClick:c,onKeyDown:d,disabled:u,color:p,style:f,classNames:m,styles:v,vars:w,mod:x,tabIndex:k,...C}=n,_=lo(),{dir:$}=bd(),R=HS(),T=s===R.value,A=j=>{R.onChange(R.allowTabDeactivation&&s===R.value?null:s),c?.(j)},z={classNames:m,styles:v,props:n};return y.jsxs(pr,{...R.getStyles("tab",{className:o,style:f,variant:R.variant,...z}),disabled:u,unstyled:R.unstyled,variant:R.variant,mod:[{active:T,disabled:u,orientation:R.orientation,inverted:R.inverted,placement:R.orientation==="vertical"&&R.placement},x],ref:r,role:"tab",id:R.getTabId(s),"aria-selected":T,tabIndex:k!==void 0?k:T||R.value===null?0:-1,"aria-controls":R.getPanelId(s),onClick:A,__vars:{"--tabs-color":p?Ci(p,_):void 0},onKeyDown:iy({siblingSelector:'[role="tab"]',parentSelector:'[role="tablist"]',activateOnFocus:R.activateTabWithKeyboard,loop:R.loop,orientation:R.orientation||"horizontal",dir:$,onKeyDown:d}),...C,children:[l&&y.jsx("span",{...R.getStyles("tabSection",z),"data-position":"left",children:l}),i&&y.jsx("span",{...R.getStyles("tabLabel",z),children:i}),a&&y.jsx("span",{...R.getStyles("tabSection",z),"data-position":"right",children:a})]})});Lf.classes=wy,Lf.displayName="@mantine/core/TabsTab";const wG="Tabs.Tab or Tabs.Panel component was rendered with invalid value or without value",XPe={keepMounted:!0,orientation:"horizontal",loop:!0,activateTabWithKeyboard:!0,variant:"default",placement:"left"},KPe=(e,{radius:r,color:n,autoContrast:o})=>({root:{"--tabs-radius":wn(r),"--tabs-color":Ci(n,e),"--tabs-text-color":fTe(o,e)?$9({color:n,theme:e,autoContrast:o}):void 0}}),up=ot((e,r)=>{const n=Pe("Tabs",XPe,e),{defaultValue:o,value:i,onChange:a,orientation:l,children:s,loop:c,id:d,activateTabWithKeyboard:u,allowTabDeactivation:p,variant:f,color:m,radius:v,inverted:w,placement:x,keepMounted:k,classNames:C,styles:_,unstyled:$,className:R,style:T,vars:A,autoContrast:z,mod:j,attributes:I,...N}=n,L=oa(d),[H,P]=Ys({value:i,defaultValue:o,finalValue:null,onChange:a}),V=kt({name:"Tabs",props:n,classes:wy,className:R,style:T,classNames:C,styles:_,unstyled:$,attributes:I,vars:A,varsResolver:KPe});return y.jsx(YPe,{value:{placement:x,value:H,orientation:l,id:L,loop:c,activateTabWithKeyboard:u,getTabId:cH(`${L}-tab`,wG),getPanelId:cH(`${L}-panel`,wG),onChange:P,allowTabDeactivation:p,variant:f,color:m,radius:v,inverted:w,keepMounted:k,unstyled:$,getStyles:V},children:y.jsx(Se,{ref:r,id:L,variant:f,mod:[{orientation:l,inverted:l==="horizontal"&&w,placement:l==="vertical"&&x},j],...V("root"),...N,children:s})})});up.classes=wy,up.displayName="@mantine/core/Tabs",up.Tab=Lf,up.Panel=rc,up.List=ky;var kG={root:"m_7341320d"};const ZPe=(e,{size:r,radius:n,variant:o,gradient:i,color:a,autoContrast:l})=>{const s=e.variantColorResolver({color:a||e.primaryColor,theme:e,gradient:i,variant:o||"filled",autoContrast:l});return{root:{"--ti-size":dr(r,"ti-size"),"--ti-radius":n===void 0?void 0:wn(n),"--ti-bg":a||o?s.background:void 0,"--ti-color":a||o?s.color:void 0,"--ti-bd":a||o?s.border:void 0}}},Ti=ot((e,r)=>{const n=Pe("ThemeIcon",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,autoContrast:d,attributes:u,...p}=n,f=kt({name:"ThemeIcon",classes:kG,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:u,vars:c,varsResolver:ZPe});return y.jsx(Se,{ref:r,...f("root"),...p})});Ti.classes=kG,Ti.displayName="@mantine/core/ThemeIcon";const QPe=["h1","h2","h3","h4","h5","h6"],JPe=["xs","sm","md","lg","xl"];function eMe(e,r){const n=r!==void 0?r:`h${e}`;return QPe.includes(n)?{fontSize:`var(--mantine-${n}-font-size)`,fontWeight:`var(--mantine-${n}-font-weight)`,lineHeight:`var(--mantine-${n}-line-height)`}:JPe.includes(n)?{fontSize:`var(--mantine-font-size-${n})`,fontWeight:`var(--mantine-h${e}-font-weight)`,lineHeight:`var(--mantine-h${e}-line-height)`}:{fontSize:$e(n),fontWeight:`var(--mantine-h${e}-font-weight)`,lineHeight:`var(--mantine-h${e}-line-height)`}}var _G={root:"m_8a5d1357"};const tMe={order:1},rMe=(e,{order:r,size:n,lineClamp:o,textWrap:i})=>{const a=eMe(r||1,n);return{root:{"--title-fw":a.fontWeight,"--title-lh":a.lineHeight,"--title-fz":a.fontSize,"--title-line-clamp":typeof o=="number"?o.toString():void 0,"--title-text-wrap":i}}},pp=ot((e,r)=>{const n=Pe("Title",tMe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,order:c,vars:d,size:u,variant:p,lineClamp:f,textWrap:m,mod:v,attributes:w,...x}=n,k=kt({name:"Title",props:n,classes:_G,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:w,vars:d,varsResolver:rMe});return[1,2,3,4,5,6].includes(c)?y.jsx(Se,{...k("root"),component:`h${c}`,variant:p,ref:r,mod:[{order:c,"data-line-clamp":typeof f=="number"},v],size:u,...x}):null});pp.classes=_G,pp.displayName="@mantine/core/Title";function SG(e,r,n){if(!e||!r)return[];const o=n.indexOf(e),i=n.indexOf(r),a=Math.min(o,i),l=Math.max(o,i);return n.slice(a,l+1)}function US({node:e,getStyles:r,rootIndex:n,controller:o,expandOnClick:i,selectOnClick:a,isSubtree:l,level:s=1,renderNode:c,flatValues:d,allowRangeSelection:u,expandOnSpace:p,checkOnSpace:f}){const m=S.useRef(null),v=(e.children||[]).map(_=>y.jsx(US,{node:_,flatValues:d,getStyles:r,rootIndex:void 0,level:s+1,controller:o,expandOnClick:i,isSubtree:!0,renderNode:c,selectOnClick:a,allowRangeSelection:u,expandOnSpace:p,checkOnSpace:f},_.value)),w=_=>{if(_.nativeEvent.code==="ArrowRight"&&(_.stopPropagation(),_.preventDefault(),o.expandedState[e.value]?_.currentTarget.querySelector("[role=treeitem]")?.focus():o.expand(e.value)),_.nativeEvent.code==="ArrowLeft"&&(_.stopPropagation(),_.preventDefault(),o.expandedState[e.value]&&(e.children||[]).length>0?o.collapse(e.value):l&&vf(_.currentTarget,"[role=treeitem]")?.focus()),_.nativeEvent.code==="ArrowDown"||_.nativeEvent.code==="ArrowUp"){const $=vf(_.currentTarget,"[data-tree-root]");if(!$)return;_.stopPropagation(),_.preventDefault();const R=Array.from($.querySelectorAll("[role=treeitem]")),T=R.indexOf(_.currentTarget);if(T===-1)return;const A=_.nativeEvent.code==="ArrowDown"?T+1:T-1;if(R[A]?.focus(),_.shiftKey){const z=R[A];z&&o.setSelectedState(SG(o.anchorNode,z.dataset.value,d))}}_.nativeEvent.code==="Space"&&(p&&(_.stopPropagation(),_.preventDefault(),o.toggleExpanded(e.value)),f&&(_.stopPropagation(),_.preventDefault(),o.isNodeChecked(e.value)?o.uncheckNode(e.value):o.checkNode(e.value)))},x=_=>{_.stopPropagation(),u&&_.shiftKey&&o.anchorNode?(o.setSelectedState(SG(o.anchorNode,e.value,d)),m.current?.focus()):(i&&o.toggleExpanded(e.value),a&&o.select(e.value),m.current?.focus())},k=o.selectedState.includes(e.value),C={...r("label"),onClick:x,"data-selected":k||void 0,"data-value":e.value,"data-hovered":o.hoveredNode===e.value||void 0};return y.jsxs("li",{...r("node",{style:{"--label-offset":`calc(var(--level-offset) * ${s-1})`}}),role:"treeitem","aria-selected":k,"data-value":e.value,"data-selected":k||void 0,"data-hovered":o.hoveredNode===e.value||void 0,"data-level":s,tabIndex:n===0?0:-1,onKeyDown:w,ref:m,onMouseOver:_=>{_.stopPropagation(),o.setHoveredNode(e.value)},onMouseLeave:_=>{_.stopPropagation(),o.setHoveredNode(null)},children:[typeof c=="function"?c({node:e,level:s,selected:k,tree:o,expanded:o.expandedState[e.value]||!1,hasChildren:Array.isArray(e.children)&&e.children.length>0,elementProps:C}):y.jsx("div",{...C,children:e.label}),o.expandedState[e.value]&&v.length>0&&y.jsx(Se,{component:"ul",role:"group",...r("subtree"),"data-level":s,children:v})]})}US.displayName="@mantine/core/TreeNode";function $3(e,r,n=[]){const o=[];for(const i of e)if(Array.isArray(i.children)&&i.children.length>0){const a=$3(i.children,r,n);if(a.currentTreeChecked.length===i.children.length){const l=a.currentTreeChecked.every(c=>c.checked),s={checked:l,indeterminate:!l,value:i.value,hasChildren:!0};o.push(s),n.push(s)}else if(a.currentTreeChecked.length>0){const l={checked:!1,indeterminate:!0,value:i.value,hasChildren:!0};o.push(l),n.push(l)}}else if(r.includes(i.value)){const a={checked:!0,indeterminate:!1,value:i.value,hasChildren:!1};o.push(a),n.push(a)}return{result:n,currentTreeChecked:o}}function EG(e,r){for(const n of r){if(n.value===e)return n;if(Array.isArray(n.children)){const o=EG(e,n.children);if(o)return o}}return null}function R3(e,r,n=[]){const o=EG(e,r);return o?!Array.isArray(o.children)||o.children.length===0?[o.value]:(o.children.forEach(i=>{Array.isArray(i.children)&&i.children.length>0?R3(i.value,r,n):n.push(i.value)}),n):n}function CG(e){return e.reduce((r,n)=>(Array.isArray(n.children)&&n.children.length>0?r.push(...CG(n.children)):r.push(n.value),r),[])}function nMe(e,r,n){return n.length===0?!1:n.includes(e)?!0:$3(r,n).result.some(o=>o.value===e&&o.checked)}const oMe=zH(nMe);function iMe(e,r,n){return n.length===0?!1:$3(r,n).result.some(o=>o.value===e&&o.indeterminate)}const aMe=zH(iMe);function $G(e,r,n,o={}){return r.forEach(i=>{o[i.value]=i.value in e?e[i.value]:i.value===n,Array.isArray(i.children)&&$G(e,i.children,n,o)}),o}function lMe(e,r){const n=[];return e.forEach(o=>n.push(...R3(o,r))),Array.from(new Set(n))}function _y({initialSelectedState:e=[],initialCheckedState:r=[],initialExpandedState:n={},multiple:o=!1,onNodeCollapse:i,onNodeExpand:a}={}){const[l,s]=S.useState([]),[c,d]=S.useState(n),[u,p]=S.useState(e),[f,m]=S.useState(r),[v,w]=S.useState(null),[x,k]=S.useState(null),C=S.useCallback(B=>{d(F=>$G(F,B,u)),m(F=>lMe(F,B)),s(B)},[u,f]),_=S.useCallback(B=>{d(F=>{const q={...F,[B]:!F[B]};return q[B]?a?.(B):i?.(B),q})},[i,a]),$=S.useCallback(B=>{d(F=>(F[B]!==!1&&i?.(B),{...F,[B]:!1}))},[i]),R=S.useCallback(B=>{d(F=>(F[B]!==!0&&a?.(B),{...F,[B]:!0}))},[a]),T=S.useCallback(()=>{d(B=>{const F={...B};return Object.keys(F).forEach(q=>{F[q]=!0}),F})},[]),A=S.useCallback(()=>{d(B=>{const F={...B};return Object.keys(F).forEach(q=>{F[q]=!1}),F})},[]),z=S.useCallback(B=>p(F=>o?F.includes(B)?(w(null),F.filter(q=>q!==B)):(w(B),[...F,B]):F.includes(B)?(w(null),[]):(w(B),[B])),[]),j=S.useCallback(B=>{w(B),p(F=>o?F.includes(B)?F:[...F,B]:[B])},[]),I=S.useCallback(B=>{v===B&&w(null),p(F=>F.filter(q=>q!==B))},[]),N=S.useCallback(()=>{p([]),w(null)},[]),L=S.useCallback(B=>{const F=R3(B,l);m(q=>Array.from(new Set([...q,...F])))},[l]),H=S.useCallback(B=>{const F=R3(B,l);m(q=>q.filter(G=>!F.includes(G)))},[l]),P=S.useCallback(()=>{m(()=>CG(l))},[l]),V=S.useCallback(()=>{m([])},[]);return{multiple:o,expandedState:c,selectedState:u,checkedState:f,anchorNode:v,initialize:C,toggleExpanded:_,collapse:$,expand:R,expandAllNodes:T,collapseAllNodes:A,setExpandedState:d,checkNode:L,uncheckNode:H,checkAllNodes:P,uncheckAllNodes:V,setCheckedState:m,toggleSelected:z,select:j,deselect:I,clearSelected:N,setSelectedState:p,hoveredNode:x,setHoveredNode:k,getCheckedNodes:()=>$3(l,f).result,isNodeChecked:B=>oMe(B,l,f),isNodeIndeterminate:B=>aMe(B,l,f)}}var RG={root:"m_f698e191",subtree:"m_75f3ecf",node:"m_f6970eb1",label:"m_dc283425"};function zG(e){return e.reduce((r,n)=>(r.push(n.value),n.children&&r.push(...zG(n.children)),r),[])}const sMe={expandOnClick:!0,allowRangeSelection:!0,expandOnSpace:!0},cMe=(e,{levelOffset:r})=>({root:{"--level-offset":Gs(r)}}),Ff=ot((e,r)=>{const n=Pe("Tree",sMe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,data:d,expandOnClick:u,tree:p,renderNode:f,selectOnClick:m,clearSelectionOnOutsideClick:v,allowRangeSelection:w,expandOnSpace:x,levelOffset:k,checkOnSpace:C,attributes:_,...$}=n,R=_y(),T=p||R,A=kt({name:"Tree",classes:RG,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:_,vars:c,varsResolver:cMe}),z=hH(()=>v&&T.clearSelected()),j=$r(r,z),I=S.useMemo(()=>zG(d),[d]);S.useEffect(()=>{T.initialize(d)},[d]);const N=d.map((L,H)=>y.jsx(US,{node:L,getStyles:A,rootIndex:H,expandOnClick:u,selectOnClick:m,controller:T,renderNode:f,flatValues:I,allowRangeSelection:w,expandOnSpace:x,checkOnSpace:C},L.value));return y.jsx(Se,{component:"ul",ref:j,...A("root"),...$,role:"tree","aria-multiselectable":T.multiple,"data-tree-root":!0,children:N})});Ff.displayName="@mantine/core/Tree",Ff.classes=RG;const WS=S.createContext(null);function TG(){const e=S.useContext(WS);if(!e)throw new Error("useRootContainer must be used within a RootContainer");return e}function dMe(){return TG().ref}function uMe(){return TG().ref.current}const jG=S.createContext(null);function pMe(){const e=S.useContext(jG);return e===null&&console.warn("ReduceGraphicsMode is not provided"),e??!1}const[hMe,fMe]=na("PanningAtomSafeCtx is not provided");function gMe({id:e,className:r,reduceGraphics:n=!1,children:o}){const[i,a]=S.useState(!1),l=S.useRef(null),s=S.useRef(null);s.current||(s.current=Q$e(!1)),f7(()=>{a(!0)},[]),S.useEffect(()=>s.current?.subscribe(d=>{l.current?.setAttribute("data-likec4-diagram-panning",d?"true":"false")}),[]);const c=S.useMemo(()=>({id:e,ref:l}),[e,l]);return y.jsx(hMe,{value:s.current,children:y.jsx(jG.Provider,{value:n,children:y.jsx("div",{id:e,className:Ge("likec4-root",r),ref:l,...n&&{"data-likec4-reduced-graphics":!0},children:i&&!!c.ref.current&&y.jsx(WS.Provider,{value:c,children:o})})})})}const Sy=S.createContext(null),GS=S.createContext(null);function mMe(){return S.useContext(Sy)}function Fo(){const e=S.useContext(Sy);if(!e)throw new Error("LikeC4Model not found. Make sure you have LikeC4ModelProvider.");return e}function yMe(){const e=Fo(),[r,n]=S.useState(e.$data.specification);return S.useEffect(()=>{n(o=>tt(o,e.$data.specification)?o:e.$data.specification)},[e]),r}const AG=S.createContext({}),vMe=C5e,bMe=e=>{const r=e.color;if(GO(e))return` - --colors-likec4-tag-bg: ${r}; - --colors-likec4-tag-bg-hover: color-mix(in oklab, ${r}, var(--colors-likec4-mix-color) 20%); - `;if(!vMe.includes(r))return"";let n="12";return["mint","grass","lime","yellow","amber"].includes(r)&&(n="dark-2"),` - --colors-likec4-tag-border: var(--colors-${r}-8); - --colors-likec4-tag-bg: var(--colors-${r}-9); - --colors-likec4-tag-bg-hover: var(--colors-${r}-10); - --colors-likec4-tag-text: var(--colors-${r}-${n}); - `};function xMe(e,r){return!e||tp(e)?"":Jr(uw(e),Pq(([n,o])=>[`:is(${r} [data-likec4-tag="${n}"]) {`,bMe(o),"}"]),Lq(` -`))}function wMe({children:e,rootSelector:r}){const n=yMe().tags,o=xMe(n,r);return y.jsxs(AG.Provider,{value:n,children:[o!==""&&y.jsx(kMe,{stylesheet:o}),e]})}const kMe=S.memo(({stylesheet:e})=>{const r=np()?.();return y.jsx("style",{"data-likec4-tags":!0,type:"text/css",dangerouslySetInnerHTML:{__html:e},nonce:r})});function _Me(e){return S.useContext(AG)[e]??{color:"tomato"}}function DG(){return oa().replace("mantine-","likec4-")}var SMe="css,pos,insetX,insetY,insetEnd,end,insetStart,start,flexDir,p,pl,pr,pt,pb,py,paddingY,paddingX,px,pe,paddingEnd,ps,paddingStart,ml,mr,mt,mb,m,my,marginY,mx,marginX,me,marginEnd,ms,marginStart,ringWidth,ringColor,ring,ringOffset,w,minW,maxW,h,minH,maxH,textShadowColor,bgPosition,bgPositionX,bgPositionY,bgAttachment,bgClip,bg,bgColor,bgOrigin,bgImage,bgRepeat,bgBlendMode,bgSize,bgGradient,bgLinear,bgRadial,bgConic,rounded,roundedTopLeft,roundedTopRight,roundedBottomRight,roundedBottomLeft,roundedTop,roundedRight,roundedBottom,roundedLeft,roundedStartStart,roundedStartEnd,roundedStart,roundedEndStart,roundedEndEnd,roundedEnd,borderX,borderXWidth,borderXColor,borderY,borderYWidth,borderYColor,borderStart,borderStartWidth,borderStartColor,borderEnd,borderEndWidth,borderEndColor,shadow,shadowColor,x,y,z,scrollMarginY,scrollMarginX,scrollPaddingY,scrollPaddingX,aspectRatio,boxDecorationBreak,zIndex,boxSizing,objectPosition,objectFit,overscrollBehavior,overscrollBehaviorX,overscrollBehaviorY,position,top,left,inset,insetInline,insetBlock,insetBlockEnd,insetBlockStart,insetInlineEnd,insetInlineStart,right,bottom,float,visibility,display,hideFrom,hideBelow,flexBasis,flex,flexDirection,flexGrow,flexShrink,gridTemplateColumns,gridTemplateRows,gridColumn,gridRow,gridColumnStart,gridColumnEnd,gridAutoFlow,gridAutoColumns,gridAutoRows,gap,gridGap,gridRowGap,gridColumnGap,rowGap,columnGap,justifyContent,alignContent,alignItems,alignSelf,padding,paddingLeft,paddingRight,paddingTop,paddingBottom,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingInline,paddingInlineEnd,paddingInlineStart,marginLeft,marginRight,marginTop,marginBottom,margin,marginBlock,marginBlockEnd,marginBlockStart,marginInline,marginInlineEnd,marginInlineStart,spaceX,spaceY,outlineWidth,outlineColor,outline,outlineOffset,focusRing,focusVisibleRing,focusRingColor,focusRingOffset,focusRingWidth,focusRingStyle,divideX,divideY,divideColor,divideStyle,width,inlineSize,minWidth,minInlineSize,maxWidth,maxInlineSize,height,blockSize,minHeight,minBlockSize,maxHeight,maxBlockSize,boxSize,color,fontFamily,fontSize,fontSizeAdjust,fontPalette,fontKerning,fontFeatureSettings,fontWeight,fontSmoothing,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariationSettings,fontVariantNumeric,letterSpacing,lineHeight,textAlign,textDecoration,textDecorationColor,textEmphasisColor,textDecorationStyle,textDecorationThickness,textUnderlineOffset,textTransform,textIndent,textShadow,WebkitTextFillColor,textOverflow,verticalAlign,wordBreak,textWrap,truncate,lineClamp,listStyleType,listStylePosition,listStyleImage,listStyle,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundAttachment,backgroundClip,background,backgroundColor,backgroundOrigin,backgroundImage,backgroundRepeat,backgroundBlendMode,backgroundSize,backgroundGradient,backgroundLinear,backgroundRadial,backgroundConic,textGradient,gradientFromPosition,gradientToPosition,gradientFrom,gradientTo,gradientVia,gradientViaPosition,borderRadius,borderTopLeftRadius,borderTopRightRadius,borderBottomRightRadius,borderBottomLeftRadius,borderTopRadius,borderRightRadius,borderBottomRadius,borderLeftRadius,borderStartStartRadius,borderStartEndRadius,borderStartRadius,borderEndStartRadius,borderEndEndRadius,borderEndRadius,border,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,borderBlockStartWidth,borderBlockEndWidth,borderColor,borderInline,borderInlineWidth,borderInlineColor,borderBlock,borderBlockWidth,borderBlockColor,borderLeft,borderLeftColor,borderInlineStart,borderInlineStartWidth,borderInlineStartColor,borderRight,borderRightColor,borderInlineEnd,borderInlineEndWidth,borderInlineEndColor,borderTop,borderTopColor,borderBottom,borderBottomColor,borderBlockEnd,borderBlockEndColor,borderBlockStart,borderBlockStartColor,opacity,boxShadow,boxShadowColor,mixBlendMode,filter,brightness,contrast,grayscale,hueRotate,invert,saturate,sepia,dropShadow,blur,backdropFilter,backdropBlur,backdropBrightness,backdropContrast,backdropGrayscale,backdropHueRotate,backdropInvert,backdropOpacity,backdropSaturate,backdropSepia,borderCollapse,borderSpacing,borderSpacingX,borderSpacingY,tableLayout,transitionTimingFunction,transitionDelay,transitionDuration,transitionProperty,transition,animation,animationName,animationTimingFunction,animationDuration,animationDelay,animationPlayState,animationComposition,animationFillMode,animationDirection,animationIterationCount,animationRange,animationState,animationRangeStart,animationRangeEnd,animationTimeline,transformOrigin,transformBox,transformStyle,transform,rotate,rotateX,rotateY,rotateZ,scale,scaleX,scaleY,translate,translateX,translateY,translateZ,accentColor,caretColor,scrollBehavior,scrollbar,scrollbarColor,scrollbarGutter,scrollbarWidth,scrollMargin,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollMarginBottom,scrollMarginBlock,scrollMarginBlockEnd,scrollMarginBlockStart,scrollMarginInline,scrollMarginInlineEnd,scrollMarginInlineStart,scrollPadding,scrollPaddingBlock,scrollPaddingBlockStart,scrollPaddingBlockEnd,scrollPaddingInline,scrollPaddingInlineEnd,scrollPaddingInlineStart,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollPaddingBottom,scrollSnapAlign,scrollSnapStop,scrollSnapType,scrollSnapStrictness,scrollSnapMargin,scrollSnapMarginTop,scrollSnapMarginBottom,scrollSnapMarginLeft,scrollSnapMarginRight,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,touchAction,userSelect,overflow,overflowWrap,overflowX,overflowY,overflowAnchor,overflowBlock,overflowInline,overflowClipBox,overflowClipMargin,overscrollBehaviorBlock,overscrollBehaviorInline,fill,stroke,strokeWidth,strokeDasharray,strokeDashoffset,strokeLinecap,strokeLinejoin,strokeMiterlimit,strokeOpacity,srOnly,debug,appearance,backfaceVisibility,clipPath,hyphens,mask,maskImage,maskSize,textSizeAdjust,container,containerName,containerType,cursor,colorPalette,_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,_shapeSizeXs,_shapeSizeSm,_shapeSizeMd,_shapeSizeLg,_shapeSizeXl,_shapeRectangle,_shapePerson,_shapeBrowser,_shapeMobile,_shapeCylinder,_shapeStorage,_shapeQueue,_notDisabled,_reduceGraphics,_reduceGraphicsOnPan,_noReduceGraphics,_whenPanning,_smallZoom,_compoundTransparent,_edgeActive,_whenHovered,_whenSelectable,_whenSelected,_whenDimmed,_whenFocused,_p3,_srgb,_rec2020,xs,xsOnly,xsDown,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,xsToSm,xsToMd,xsToLg,xsToXl,smToMd,smToLg,smToXl,mdToLg,mdToXl,lgToXl,@/xs,@/sm,@/md,@/lg,@likec4-root/xs,@likec4-root/sm,@likec4-root/md,@likec4-root/lg,@likec4-dialog/xs,@likec4-dialog/sm,@likec4-dialog/md,@likec4-dialog/lg,textStyle,layerStyle,animationStyle",EMe=SMe.split(","),CMe="WebkitAppearance,WebkitBorderBefore,WebkitBorderBeforeColor,WebkitBorderBeforeStyle,WebkitBorderBeforeWidth,WebkitBoxReflect,WebkitLineClamp,WebkitMask,WebkitMaskAttachment,WebkitMaskClip,WebkitMaskComposite,WebkitMaskImage,WebkitMaskOrigin,WebkitMaskPosition,WebkitMaskPositionX,WebkitMaskPositionY,WebkitMaskRepeat,WebkitMaskRepeatX,WebkitMaskRepeatY,WebkitMaskSize,WebkitOverflowScrolling,WebkitTapHighlightColor,WebkitTextFillColor,WebkitTextStroke,WebkitTextStrokeColor,WebkitTextStrokeWidth,WebkitTouchCallout,WebkitUserModify,WebkitUserSelect,accentColor,alignContent,alignItems,alignSelf,alignTracks,all,anchorName,anchorScope,animation,animationComposition,animationDelay,animationDirection,animationDuration,animationFillMode,animationIterationCount,animationName,animationPlayState,animationRange,animationRangeEnd,animationRangeStart,animationTimeline,animationTimingFunction,appearance,aspectRatio,backdropFilter,backfaceVisibility,background,backgroundAttachment,backgroundBlendMode,backgroundClip,backgroundColor,backgroundImage,backgroundOrigin,backgroundPosition,backgroundPositionX,backgroundPositionY,backgroundRepeat,backgroundSize,blockSize,border,borderBlock,borderBlockColor,borderBlockEnd,borderBlockEndColor,borderBlockEndStyle,borderBlockEndWidth,borderBlockStart,borderBlockStartColor,borderBlockStartStyle,borderBlockStartWidth,borderBlockStyle,borderBlockWidth,borderBottom,borderBottomColor,borderBottomLeftRadius,borderBottomRightRadius,borderBottomStyle,borderBottomWidth,borderCollapse,borderColor,borderEndEndRadius,borderEndStartRadius,borderImage,borderImageOutset,borderImageRepeat,borderImageSlice,borderImageSource,borderImageWidth,borderInline,borderInlineColor,borderInlineEnd,borderInlineEndColor,borderInlineEndStyle,borderInlineEndWidth,borderInlineStart,borderInlineStartColor,borderInlineStartStyle,borderInlineStartWidth,borderInlineStyle,borderInlineWidth,borderLeft,borderLeftColor,borderLeftStyle,borderLeftWidth,borderRadius,borderRight,borderRightColor,borderRightStyle,borderRightWidth,borderSpacing,borderStartEndRadius,borderStartStartRadius,borderStyle,borderTop,borderTopColor,borderTopLeftRadius,borderTopRightRadius,borderTopStyle,borderTopWidth,borderWidth,bottom,boxAlign,boxDecorationBreak,boxDirection,boxFlex,boxFlexGroup,boxLines,boxOrdinalGroup,boxOrient,boxPack,boxShadow,boxSizing,breakAfter,breakBefore,breakInside,captionSide,caret,caretColor,caretShape,clear,clip,clipPath,clipRule,color,colorInterpolationFilters,colorScheme,columnCount,columnFill,columnGap,columnRule,columnRuleColor,columnRuleStyle,columnRuleWidth,columnSpan,columnWidth,columns,contain,containIntrinsicBlockSize,containIntrinsicHeight,containIntrinsicInlineSize,containIntrinsicSize,containIntrinsicWidth,container,containerName,containerType,content,contentVisibility,counterIncrement,counterReset,counterSet,cursor,cx,cy,d,direction,display,dominantBaseline,emptyCells,fieldSizing,fill,fillOpacity,fillRule,filter,flex,flexBasis,flexDirection,flexFlow,flexGrow,flexShrink,flexWrap,float,floodColor,floodOpacity,font,fontFamily,fontFeatureSettings,fontKerning,fontLanguageOverride,fontOpticalSizing,fontPalette,fontSize,fontSizeAdjust,fontSmooth,fontStretch,fontStyle,fontSynthesis,fontSynthesisPosition,fontSynthesisSmallCaps,fontSynthesisStyle,fontSynthesisWeight,fontVariant,fontVariantAlternates,fontVariantCaps,fontVariantEastAsian,fontVariantEmoji,fontVariantLigatures,fontVariantNumeric,fontVariantPosition,fontVariationSettings,fontWeight,forcedColorAdjust,gap,grid,gridArea,gridAutoColumns,gridAutoFlow,gridAutoRows,gridColumn,gridColumnEnd,gridColumnGap,gridColumnStart,gridGap,gridRow,gridRowEnd,gridRowGap,gridRowStart,gridTemplate,gridTemplateAreas,gridTemplateColumns,gridTemplateRows,hangingPunctuation,height,hyphenateCharacter,hyphenateLimitChars,hyphens,imageOrientation,imageRendering,imageResolution,imeMode,initialLetter,initialLetterAlign,inlineSize,inset,insetBlock,insetBlockEnd,insetBlockStart,insetInline,insetInlineEnd,insetInlineStart,interpolateSize,isolation,justifyContent,justifyItems,justifySelf,justifyTracks,left,letterSpacing,lightingColor,lineBreak,lineClamp,lineHeight,lineHeightStep,listStyle,listStyleImage,listStylePosition,listStyleType,margin,marginBlock,marginBlockEnd,marginBlockStart,marginBottom,marginInline,marginInlineEnd,marginInlineStart,marginLeft,marginRight,marginTop,marginTrim,marker,markerEnd,markerMid,markerStart,mask,maskBorder,maskBorderMode,maskBorderOutset,maskBorderRepeat,maskBorderSlice,maskBorderSource,maskBorderWidth,maskClip,maskComposite,maskImage,maskMode,maskOrigin,maskPosition,maskRepeat,maskSize,maskType,masonryAutoFlow,mathDepth,mathShift,mathStyle,maxBlockSize,maxHeight,maxInlineSize,maxLines,maxWidth,minBlockSize,minHeight,minInlineSize,minWidth,mixBlendMode,objectFit,objectPosition,offset,offsetAnchor,offsetDistance,offsetPath,offsetPosition,offsetRotate,opacity,order,orphans,outline,outlineColor,outlineOffset,outlineStyle,outlineWidth,overflow,overflowAnchor,overflowBlock,overflowClipBox,overflowClipMargin,overflowInline,overflowWrap,overflowX,overflowY,overlay,overscrollBehavior,overscrollBehaviorBlock,overscrollBehaviorInline,overscrollBehaviorX,overscrollBehaviorY,padding,paddingBlock,paddingBlockEnd,paddingBlockStart,paddingBottom,paddingInline,paddingInlineEnd,paddingInlineStart,paddingLeft,paddingRight,paddingTop,page,pageBreakAfter,pageBreakBefore,pageBreakInside,paintOrder,perspective,perspectiveOrigin,placeContent,placeItems,placeSelf,pointerEvents,position,positionAnchor,positionArea,positionTry,positionTryFallbacks,positionTryOrder,positionVisibility,printColorAdjust,quotes,r,resize,right,rotate,rowGap,rubyAlign,rubyMerge,rubyPosition,rx,ry,scale,scrollBehavior,scrollMargin,scrollMarginBlock,scrollMarginBlockEnd,scrollMarginBlockStart,scrollMarginBottom,scrollMarginInline,scrollMarginInlineEnd,scrollMarginInlineStart,scrollMarginLeft,scrollMarginRight,scrollMarginTop,scrollPadding,scrollPaddingBlock,scrollPaddingBlockEnd,scrollPaddingBlockStart,scrollPaddingBottom,scrollPaddingInline,scrollPaddingInlineEnd,scrollPaddingInlineStart,scrollPaddingLeft,scrollPaddingRight,scrollPaddingTop,scrollSnapAlign,scrollSnapCoordinate,scrollSnapDestination,scrollSnapPointsX,scrollSnapPointsY,scrollSnapStop,scrollSnapType,scrollSnapTypeX,scrollSnapTypeY,scrollTimeline,scrollTimelineAxis,scrollTimelineName,scrollbarColor,scrollbarGutter,scrollbarWidth,shapeImageThreshold,shapeMargin,shapeOutside,shapeRendering,stopColor,stopOpacity,stroke,strokeDasharray,strokeDashoffset,strokeLinecap,strokeLinejoin,strokeMiterlimit,strokeOpacity,strokeWidth,tabSize,tableLayout,textAlign,textAlignLast,textAnchor,textBox,textBoxEdge,textBoxTrim,textCombineUpright,textDecoration,textDecorationColor,textDecorationLine,textDecorationSkip,textDecorationSkipInk,textDecorationStyle,textDecorationThickness,textEmphasis,textEmphasisColor,textEmphasisPosition,textEmphasisStyle,textIndent,textJustify,textOrientation,textOverflow,textRendering,textShadow,textSizeAdjust,textSpacingTrim,textTransform,textUnderlineOffset,textUnderlinePosition,textWrap,textWrapMode,textWrapStyle,timelineScope,top,touchAction,transform,transformBox,transformOrigin,transformStyle,transition,transitionBehavior,transitionDelay,transitionDuration,transitionProperty,transitionTimingFunction,translate,unicodeBidi,userSelect,vectorEffect,verticalAlign,viewTimeline,viewTimelineAxis,viewTimelineInset,viewTimelineName,viewTransitionName,visibility,whiteSpace,whiteSpaceCollapse,widows,width,willChange,wordBreak,wordSpacing,wordWrap,writingMode,x,y,zIndex,zoom,alignmentBaseline,baselineShift,colorInterpolation,colorRendering,glyphOrientationVertical",$Me=CMe.split(",").concat(EMe),RMe=new Map($Me.map(e=>[e,!0])),zMe=/&|@/,PG=Kn(e=>RMe.has(e)||e.startsWith("--")||zMe.test(e));const TMe=(e,r)=>!r.includes(e)&&!PG(e),jMe=(e,r)=>e.__shouldForwardProps__&&r?n=>e.__shouldForwardProps__(n)&&r(n):r,AMe=(e,r)=>{if(e&&!r)return e;if(!e&&r)return r;if(e.__cva__&&r.__cva__||e.__recipe__&&r.__recipe__)return e.merge(r);const n=new TypeError("Cannot merge cva with recipe. Please use either cva or recipe.");throw TypeError.captureStackTrace?.(n),n},DMe=e=>typeof e=="string"?e:e?.displayName||e?.name||"Component";function YS(e,r={},n={}){const o=r.__cva__||r.__recipe__?r:T1(r),i=n.shouldForwardProp||TMe,a=f=>n.forwardProps?.includes(f)?!0:i(f,o.variantKeys),l=Object.assign(n.dataAttr&&r.__name__?{"data-recipe":r.__name__}:{},n.defaultProps),s=AMe(e.__cva__,o),c=jMe(e,a),d=e.__base__||e,u=S.forwardRef(function(f,m){const{as:v=d,unstyled:w,children:x,...k}=f,C=S.useMemo(()=>Object.assign({},l,k),[k]),[_,$,R,T,A]=S.useMemo(()=>Fn(C,d7.keys,c,s.variantKeys,PG),[C]);function z(){const{css:N,...L}=T,H=s.__getCompoundVariantCss__?.(R);return Ge(s(R,!1),fe(H,L,N),C.className)}function j(){const{css:N,...L}=T,H=s.raw(R);return Ge(fe(H,L,N),C.className)}const I=()=>{if(w){const{css:N,...L}=T;return Ge(fe(L,N),C.className)}return r.__recipe__?z():j()};return S.createElement(v,{ref:m,...$,...A,...d7(_),className:I()},x??C.children)}),p=DMe(d);return u.displayName=`styled.${p}`,u.__cva__=s,u.__base__=d,u.__shouldForwardProps__=a,u}function PMe(){const e=new Map;return new Proxy(YS,{apply(r,n,o){return YS(...o)},get(r,n){return e.has(n)||e.set(n,YS(n)),e.get(n)}})}const Ed=PMe(),MG={transform(e){return e}},MMe=(e={})=>{const r=z1(MG,e);return MG.transform(r,R1)},hr=S.forwardRef(function(e,r){const[n,o]=Fn(e,[]),i=MMe(n),a={ref:r,...i,...o};return S.createElement(Ed.div,a)}),NG={transform(e){const{justify:r,gap:n,...o}=e;return{display:"flex",alignItems:"center",justifyContent:r,gap:n,flexDirection:"column",...o}},defaultValues:{alignItems:"stretch",gap:"sm"}},XS=(e={})=>{const r=z1(NG,e);return NG.transform(r,R1)},Ey=e=>fe(XS(e));Ey.raw=XS;const hp=S.forwardRef(function(e,r){const[n,o]=Fn(e,["justify","gap"]),i=XS(n),a={ref:r,...i,...o};return S.createElement(Ed.div,a)}),BG={transform(e){const{justify:r,gap:n,...o}=e;return{display:"flex",alignItems:"center",justifyContent:r,gap:n,flexDirection:"row",...o}},defaultValues:{gap:"sm"}},KS=(e={})=>{const r=z1(BG,e);return BG.transform(r,R1)},qn=e=>fe(KS(e));qn.raw=KS;const Or=S.forwardRef(function(e,r){const[n,o]=Fn(e,["justify","gap"]),i=KS(n),a={ref:r,...i,...o};return S.createElement(Ed.div,a)}),IG={transform(e){return{position:"relative",maxWidth:"8xl",mx:"auto",px:{base:"4",md:"6",lg:"8"},...e}}},OG=(e={})=>{const r=z1(IG,e);return IG.transform(r,R1)},LG=e=>fe(OG(e));LG.raw=OG;const FG={transform(e,{map:r,isCssUnit:n,isCssVar:o}){const{inline:i,block:a,...l}=e,s=c=>n(c)||o(c)?c:`token(spacing.${c}, ${c})`;return{"--bleed-x":r(i,s),"--bleed-y":r(a,s),marginInline:"calc(var(--bleed-x, 0) * -1)",marginBlock:"calc(var(--bleed-y, 0) * -1)",...l}},defaultValues:{inline:"0",block:"0"}},VG=(e={})=>{const r=z1(FG,e);return FG.transform(r,R1)},qG=e=>fe(VG(e));qG.raw=VG;const NMe=S.createContext(null),ZS={didCatch:!1,error:null};let HG=class extends S.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=ZS}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){const{error:e}=this.state;if(e!==null){for(var r,n,o=arguments.length,i=new Array(o),a=0;a0&&arguments[0]!==void 0?arguments[0]:[],r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return e.length!==r.length||e.some((n,o)=>!Object.is(n,r[o]))}const IMe=[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]],fp=wt("outline","x","X",IMe);function UG({error:e,resetErrorBoundary:r}){const n=e instanceof Error?e.message:"Unknown error",o=S.useRef(null);return S.useEffect(()=>{o.current?.showModal()},[]),y.jsx("dialog",{ref:o,className:fe({margin:"0",padding:"0",position:"fixed",top:"10",left:"10",width:"[calc(100vw - ({spacing.10} * 2))]",height:"max-content",maxHeight:"[calc(100vh - ({spacing.10} * 3))]",background:"likec4.overlay.body",rounded:"sm",borderWidth:3,borderColor:"likec4.overlay.border",shadow:"xl",outline:"none",_backdrop:{cursor:"zoom-out",backdropFilter:"blur(18px)",bg:"[color-mix(in oklab, {colors.likec4.overlay.backdrop} 60%, transparent)]"}}),onClick:i=>{if(i.stopPropagation(),i.target?.nodeName?.toUpperCase()==="DIALOG"){o.current?.close();return}},onClose:i=>{i.stopPropagation(),r()},children:y.jsxs(Or,{p:"xl",gap:"lg",alignItems:"flex-start",flexWrap:"nowrap",children:[y.jsx(Ti,{size:"md",radius:"xl",color:"red",children:y.jsx(fp,{style:{width:20,height:20}})}),y.jsxs(hp,{flex:"1",children:[y.jsx(it,{fz:"md",children:"Oops, something went wrong"}),y.jsx(oi,{maw:"100%",mah:400,type:"auto",children:y.jsx(it,{fz:"md",c:"red",style:{whiteSpace:"pre-wrap",userSelect:"all"},children:n})}),y.jsxs(Or,{gap:"md",mt:"md",children:[y.jsx(Vn,{size:"sm",variant:"default",onClick:()=>r(),children:"Reset"}),y.jsx(it,{fz:"sm",c:"dimmed",children:"See console for more details and report the issue if it persists."})]})]})]})})}function QS(e){return y.jsx(HG,{FallbackComponent:UG,onError:(r,n)=>{console.error(r,n)},...e})}const WG={enableEditor:!1,enableReadOnly:!0,enableCompareWithLatest:!1,enableControls:!1,enableDynamicViewWalkthrough:!1,enableElementDetails:!1,enableFocusMode:!1,enableNavigateTo:!1,enableNotations:!1,enableRelationshipBrowser:!1,enableRelationshipDetails:!1,enableSearch:!1,enableNavigationButtons:!1,enableFitView:!1,enableVscode:!1,enableElementTags:!1},JS=S.createContext(WG);function gp({children:e,features:r,overrides:n}){const o=S.useContext(JS),[i,a]=S.useState(o);return S.useEffect(()=>{a(l=>{const s={...o,...r,...n};return Ir(l,s)?l:s})},[o,r,n]),y.jsx(JS.Provider,{value:i,children:e})}const OMe={enableControls:!1,enableReadOnly:!0,enableCompareWithLatest:!1};gp.Overlays=({children:e})=>y.jsx(gp,{overrides:OMe,children:e});function sr(){return S.useContext(JS)}function LMe({feature:e,children:r,and:n=!0}){return sr()[`enable${e}`]===!0&&n?y.jsx(y.Fragment,{children:r}):null}function FMe(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global}function VMe(){const e=FMe();if(e.__xstate__)return e.__xstate__}const qMe=e=>{if(typeof window>"u")return;const r=VMe();r&&r.register(e)};class GG{constructor(r){this._process=r,this._active=!1,this._current=null,this._last=null}start(){this._active=!0,this.flush()}clear(){this._current&&(this._current.next=null,this._last=this._current)}enqueue(r){const n={value:r,next:null};if(this._current){this._last.next=n,this._last=n;return}this._current=n,this._last=n,this._active&&this.flush()}flush(){for(;this._current;){const r=this._current;this._process(r.value),this._current=r.next}this._last=null}}const YG=".",HMe="",XG="",UMe="#",WMe="*",KG="xstate.init",GMe="xstate.error",Cy="xstate.stop";function YMe(e,r){return{type:`xstate.after.${e}.${r}`}}function eE(e,r){return{type:`xstate.done.state.${e}`,output:r}}function XMe(e,r){return{type:`xstate.done.actor.${e}`,output:r,actorId:e}}function ZG(e,r){return{type:`xstate.error.actor.${e}`,error:r,actorId:e}}function QG(e){return{type:KG,input:e}}function ts(e){setTimeout(()=>{throw e})}const KMe=typeof Symbol=="function"&&Symbol.observable||"@@observable";function JG(e,r){const n=eY(e),o=eY(r);return typeof o=="string"?typeof n=="string"?o===n:!1:typeof n=="string"?n in o:Object.keys(n).every(i=>i in o?JG(n[i],o[i]):!1)}function tE(e){if(nY(e))return e;const r=[];let n="";for(let o=0;otypeof r>"u"||typeof r=="string"?{target:r}:r)}function oY(e){if(!(e===void 0||e===HMe))return nc(e)}function z3(e,r,n){const o=typeof e=="object",i=o?e:void 0;return{next:(o?e.next:e)?.bind(i),error:(o?e.error:r)?.bind(i),complete:(o?e.complete:n)?.bind(i)}}function iY(e,r){return`${r}.${e}`}function nE(e,r){const n=r.match(/^xstate\.invoke\.(\d+)\.(.*)/);if(!n)return e.implementations.actors[r];const[,o,i]=n,a=e.getStateNodeById(i).config.invoke;return(Array.isArray(a)?a[o]:a).src}function aY(e,r){return`${e.sessionId}.${r}`}let JMe=0;function eNe(e,r){const n=new Map,o=new Map,i=new WeakMap,a=new Set,l={},{clock:s,logger:c}=r,d={schedule:(f,m,v,w,x=Math.random().toString(36).slice(2))=>{const k={source:f,target:m,event:v,delay:w,id:x,startedAt:Date.now()},C=aY(f,x);p._snapshot._scheduledEvents[C]=k;const _=s.setTimeout(()=>{delete l[C],delete p._snapshot._scheduledEvents[C],p._relay(f,m,v)},w);l[C]=_},cancel:(f,m)=>{const v=aY(f,m),w=l[v];delete l[v],delete p._snapshot._scheduledEvents[v],w!==void 0&&s.clearTimeout(w)},cancelAll:f=>{for(const m in p._snapshot._scheduledEvents){const v=p._snapshot._scheduledEvents[m];v.source===f&&d.cancel(f,v.id)}}},u=f=>{if(!a.size)return;const m={...f,rootId:e.sessionId};a.forEach(v=>v.next?.(m))},p={_snapshot:{_scheduledEvents:(r?.snapshot&&r.snapshot.scheduler)??{}},_bookId:()=>`x:${JMe++}`,_register:(f,m)=>(n.set(f,m),f),_unregister:f=>{n.delete(f.sessionId);const m=i.get(f);m!==void 0&&(o.delete(m),i.delete(f))},get:f=>o.get(f),getAll:()=>Object.fromEntries(o.entries()),_set:(f,m)=>{const v=o.get(f);if(v&&v!==m)throw new Error(`Actor with system ID '${f}' already exists.`);o.set(f,m),i.set(m,f)},inspect:f=>{const m=z3(f);return a.add(m),{unsubscribe(){a.delete(m)}}},_sendInspectionEvent:u,_relay:(f,m,v)=>{p._sendInspectionEvent({type:"@xstate.event",sourceRef:f,actorRef:m,event:v}),m._send(v)},scheduler:d,getSnapshot:()=>({_scheduledEvents:{...p._snapshot._scheduledEvents}}),start:()=>{const f=p._snapshot._scheduledEvents;p._snapshot._scheduledEvents={};for(const m in f){const{source:v,target:w,event:x,delay:k,id:C}=f[m];d.schedule(v,w,x,k,C)}},_clock:s,_logger:c};return p}let oE=!1;const iE=1;let ii=(function(e){return e[e.NotStarted=0]="NotStarted",e[e.Running=1]="Running",e[e.Stopped=2]="Stopped",e})({});const tNe={clock:{setTimeout:(e,r)=>setTimeout(e,r),clearTimeout:e=>clearTimeout(e)},logger:console.log.bind(console),devTools:!1};class rNe{constructor(r,n){this.logic=r,this._snapshot=void 0,this.clock=void 0,this.options=void 0,this.id=void 0,this.mailbox=new GG(this._process.bind(this)),this.observers=new Set,this.eventListeners=new Map,this.logger=void 0,this._processingStatus=ii.NotStarted,this._parent=void 0,this._syncSnapshot=void 0,this.ref=void 0,this._actorScope=void 0,this.systemId=void 0,this.sessionId=void 0,this.system=void 0,this._doneEvent=void 0,this.src=void 0,this._deferred=[];const o={...tNe,...n},{clock:i,logger:a,parent:l,syncSnapshot:s,id:c,systemId:d,inspect:u}=o;this.system=l?l.system:eNe(this,{clock:i,logger:a}),u&&!l&&this.system.inspect(z3(u)),this.sessionId=this.system._bookId(),this.id=c??this.sessionId,this.logger=n?.logger??this.system._logger,this.clock=n?.clock??this.system._clock,this._parent=l,this._syncSnapshot=s,this.options=o,this.src=o.src??r,this.ref=this,this._actorScope={self:this,id:this.id,sessionId:this.sessionId,logger:this.logger,defer:p=>{this._deferred.push(p)},system:this.system,stopChild:p=>{if(p._parent!==this)throw new Error(`Cannot stop child actor ${p.id} of ${this.id} because it is not a child`);p._stop()},emit:p=>{const f=this.eventListeners.get(p.type),m=this.eventListeners.get("*");if(!f&&!m)return;const v=[...f?f.values():[],...m?m.values():[]];for(const w of v)try{w(p)}catch(x){ts(x)}},actionExecutor:p=>{const f=()=>{if(this._actorScope.system._sendInspectionEvent({type:"@xstate.action",actorRef:this,action:{type:p.type,params:p.params}}),!p.exec)return;const m=oE;try{oE=!0,p.exec(p.info,p.params)}finally{oE=m}};this._processingStatus===ii.Running?f():this._deferred.push(f)}},this.send=this.send.bind(this),this.system._sendInspectionEvent({type:"@xstate.actor",actorRef:this}),d&&(this.systemId=d,this.system._set(d,this)),this._initState(n?.snapshot??n?.state),d&&this._snapshot.status!=="active"&&this.system._unregister(this)}_initState(r){try{this._snapshot=r?this.logic.restoreSnapshot?this.logic.restoreSnapshot(r,this._actorScope):r:this.logic.getInitialSnapshot(this._actorScope,this.options?.input)}catch(n){this._snapshot={status:"error",output:void 0,error:n}}}update(r,n){this._snapshot=r;let o;for(;o=this._deferred.shift();)try{o()}catch(i){this._deferred.length=0,this._snapshot={...r,status:"error",error:i}}switch(this._snapshot.status){case"active":for(const i of this.observers)try{i.next?.(r)}catch(a){ts(a)}break;case"done":for(const i of this.observers)try{i.next?.(r)}catch(a){ts(a)}this._stopProcedure(),this._complete(),this._doneEvent=XMe(this.id,this._snapshot.output),this._parent&&this.system._relay(this,this._parent,this._doneEvent);break;case"error":this._error(this._snapshot.error);break}this.system._sendInspectionEvent({type:"@xstate.snapshot",actorRef:this,event:n,snapshot:r})}subscribe(r,n,o){const i=z3(r,n,o);if(this._processingStatus!==ii.Stopped)this.observers.add(i);else switch(this._snapshot.status){case"done":try{i.complete?.()}catch(a){ts(a)}break;case"error":{const a=this._snapshot.error;if(!i.error)ts(a);else try{i.error(a)}catch(l){ts(l)}break}}return{unsubscribe:()=>{this.observers.delete(i)}}}on(r,n){let o=this.eventListeners.get(r);o||(o=new Set,this.eventListeners.set(r,o));const i=n.bind(void 0);return o.add(i),{unsubscribe:()=>{o.delete(i)}}}start(){if(this._processingStatus===ii.Running)return this;this._syncSnapshot&&this.subscribe({next:n=>{n.status==="active"&&this.system._relay(this,this._parent,{type:`xstate.snapshot.${this.id}`,snapshot:n})},error:()=>{}}),this.system._register(this.sessionId,this),this.systemId&&this.system._set(this.systemId,this),this._processingStatus=ii.Running;const r=QG(this.options.input);switch(this.system._sendInspectionEvent({type:"@xstate.event",sourceRef:this._parent,actorRef:this,event:r}),this._snapshot.status){case"done":return this.update(this._snapshot,r),this;case"error":return this._error(this._snapshot.error),this}if(this._parent||this.system.start(),this.logic.start)try{this.logic.start(this._snapshot,this._actorScope)}catch(n){return this._snapshot={...this._snapshot,status:"error",error:n},this._error(n),this}return this.update(this._snapshot,r),this.options.devTools&&this.attachDevTools(),this.mailbox.start(),this}_process(r){let n,o;try{n=this.logic.transition(this._snapshot,r,this._actorScope)}catch(i){o={err:i}}if(o){const{err:i}=o;this._snapshot={...this._snapshot,status:"error",error:i},this._error(i);return}this.update(n,r),r.type===Cy&&(this._stopProcedure(),this._complete())}_stop(){return this._processingStatus===ii.Stopped?this:(this.mailbox.clear(),this._processingStatus===ii.NotStarted?(this._processingStatus=ii.Stopped,this):(this.mailbox.enqueue({type:Cy}),this))}stop(){if(this._parent)throw new Error("A non-root actor cannot be stopped directly.");return this._stop()}_complete(){for(const r of this.observers)try{r.complete?.()}catch(n){ts(n)}this.observers.clear()}_reportError(r){if(!this.observers.size){this._parent||ts(r);return}let n=!1;for(const o of this.observers){const i=o.error;n||=!i;try{i?.(r)}catch(a){ts(a)}}this.observers.clear(),n&&ts(r)}_error(r){this._stopProcedure(),this._reportError(r),this._parent&&this.system._relay(this,this._parent,ZG(this.id,r))}_stopProcedure(){return this._processingStatus!==ii.Running?this:(this.system.scheduler.cancelAll(this),this.mailbox.clear(),this.mailbox=new GG(this._process.bind(this)),this._processingStatus=ii.Stopped,this.system._unregister(this),this)}_send(r){this._processingStatus!==ii.Stopped&&this.mailbox.enqueue(r)}send(r){this.system._relay(void 0,this,r)}attachDevTools(){const{devTools:r}=this.options;r&&(typeof r=="function"?r:qMe)(this)}toJSON(){return{xstate$$type:iE,id:this.id}}getPersistedSnapshot(r){return this.logic.getPersistedSnapshot(this._snapshot,r)}[KMe](){return this}getSnapshot(){return this._snapshot}}function qf(e,...[r]){return new rNe(e,r)}function nNe(e,r,n,o,{sendId:i}){const a=typeof i=="function"?i(n,o):i;return[r,{sendId:a},void 0]}function oNe(e,r){e.defer(()=>{e.system.scheduler.cancel(e.self,r.sendId)})}function ua(e){function r(n,o){}return r.type="xstate.cancel",r.sendId=e,r.resolve=nNe,r.execute=oNe,r}function iNe(e,r,n,o,{id:i,systemId:a,src:l,input:s,syncSnapshot:c}){const d=typeof l=="string"?nE(r.machine,l):l,u=typeof i=="function"?i(n):i;let p,f;return d&&(f=typeof s=="function"?s({context:r.context,event:n.event,self:e.self}):s,p=qf(d,{id:u,src:l,parent:e.self,syncSnapshot:c,systemId:a,input:f})),[vp(r,{children:{...r.children,[u]:p}}),{id:i,systemId:a,actorRef:p,src:l,input:f},void 0]}function aNe(e,{actorRef:r}){r&&e.defer(()=>{r._processingStatus!==ii.Stopped&&r.start()})}function T3(...[e,{id:r,systemId:n,input:o,syncSnapshot:i=!1}={}]){function a(l,s){}return a.type="xstate.spawnChild",a.id=r,a.systemId=n,a.src=e,a.input=o,a.syncSnapshot=i,a.resolve=iNe,a.execute=aNe,a}function lNe(e,r,n,o,{actorRef:i}){const a=typeof i=="function"?i(n,o):i,l=typeof a=="string"?r.children[a]:a;let s=r.children;return l&&(s={...s},delete s[l.id]),[vp(r,{children:s}),l,void 0]}function sNe(e,r){if(r){if(e.system._unregister(r),r._processingStatus!==ii.Running){e.stopChild(r);return}e.defer(()=>{e.stopChild(r)})}}function $y(e){function r(n,o){}return r.type="xstate.stopChild",r.actorRef=e,r.resolve=lNe,r.execute=sNe,r}function j3(e,r,n,o){const{machine:i}=o,a=typeof e=="function",l=a?e:i.implementations.guards[typeof e=="string"?e:e.type];if(!a&&!l)throw new Error(`Guard '${typeof e=="string"?e:e.type}' is not implemented.'.`);if(typeof l!="function")return j3(l,r,n,o);const s={context:r,event:n},c=a||typeof e=="string"?void 0:"params"in e?typeof e.params=="function"?e.params({context:r,event:n}):e.params:void 0;return"check"in l?l.check(o,s,l):l(s,c)}const aE=e=>e.type==="atomic"||e.type==="final";function Hf(e){return Object.values(e.states).filter(r=>r.type!=="history")}function Ry(e,r){const n=[];if(r===e)return n;let o=e.parent;for(;o&&o!==r;)n.push(o),o=o.parent;return n}function A3(e){const r=new Set(e),n=sY(r);for(const o of r)if(o.type==="compound"&&(!n.get(o)||!n.get(o).length))uY(o).forEach(i=>r.add(i));else if(o.type==="parallel"){for(const i of Hf(o))if(i.type!=="history"&&!r.has(i)){const a=uY(i);for(const l of a)r.add(l)}}for(const o of r){let i=o.parent;for(;i;)r.add(i),i=i.parent}return r}function lY(e,r){const n=r.get(e);if(!n)return{};if(e.type==="compound"){const i=n[0];if(i){if(aE(i))return i.key}else return{}}const o={};for(const i of n)o[i.key]=lY(i,r);return o}function sY(e){const r=new Map;for(const n of e)r.has(n)||r.set(n,[]),n.parent&&(r.has(n.parent)||r.set(n.parent,[]),r.get(n.parent).push(n));return r}function cY(e,r){const n=A3(r);return lY(e,sY(n))}function lE(e,r){return r.type==="compound"?Hf(r).some(n=>n.type==="final"&&e.has(n)):r.type==="parallel"?Hf(r).every(n=>lE(e,n)):r.type==="final"}const D3=e=>e[0]===UMe;function cNe(e,r){return e.transitions.get(r)||[...e.transitions.keys()].filter(n=>{if(n===WMe)return!0;if(!n.endsWith(".*"))return!1;const o=n.split("."),i=r.split(".");for(let a=0;ao.length-n.length).flatMap(n=>e.transitions.get(n))}function dNe(e){const r=e.config.after;if(!r)return[];const n=o=>{const i=YMe(o,e.id),a=i.type;return e.entry.push(ai(i,{id:a,delay:o})),e.exit.push(ua(a)),a};return Object.keys(r).flatMap(o=>{const i=r[o],a=typeof i=="string"?{target:i}:i,l=Number.isNaN(+o)?o:+o,s=n(l);return nc(a).map(c=>({...c,event:s,delay:l}))}).map(o=>{const{delay:i}=o;return{...mp(e,o.event,o),delay:i}})}function mp(e,r,n){const o=oY(n.target),i=n.reenter??!1,a=hNe(e,o),l={...n,actions:nc(n.actions),guard:n.guard,target:a,source:e,reenter:i,eventType:r,toJSON:()=>({...l,source:`#${e.id}`,target:a?a.map(s=>`#${s.id}`):void 0})};return l}function uNe(e){const r=new Map;if(e.config.on)for(const n of Object.keys(e.config.on)){if(n===XG)throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');const o=e.config.on[n];r.set(n,Vf(o).map(i=>mp(e,n,i)))}if(e.config.onDone){const n=`xstate.done.state.${e.id}`;r.set(n,Vf(e.config.onDone).map(o=>mp(e,n,o)))}for(const n of e.invoke){if(n.onDone){const o=`xstate.done.actor.${n.id}`;r.set(o,Vf(n.onDone).map(i=>mp(e,o,i)))}if(n.onError){const o=`xstate.error.actor.${n.id}`;r.set(o,Vf(n.onError).map(i=>mp(e,o,i)))}if(n.onSnapshot){const o=`xstate.snapshot.${n.id}`;r.set(o,Vf(n.onSnapshot).map(i=>mp(e,o,i)))}}for(const n of e.after){let o=r.get(n.eventType);o||(o=[],r.set(n.eventType,o)),o.push(n)}return r}function pNe(e,r){const n=typeof r=="string"?e.states[r]:r?e.states[r.target]:void 0;if(!n&&r)throw new Error(`Initial state node "${r}" not found on parent state node #${e.id}`);const o={source:e,actions:!r||typeof r=="string"?[]:nc(r.actions),eventType:null,reenter:!1,target:n?[n]:[],toJSON:()=>({...o,source:`#${e.id}`,target:n?[`#${n.id}`]:[]})};return o}function hNe(e,r){if(r!==void 0)return r.map(n=>{if(typeof n!="string")return n;if(D3(n))return e.machine.getStateNodeById(n);const o=n[0]===YG;if(o&&!e.parent)return P3(e,n.slice(1));const i=o?e.key+n:n;if(e.parent)try{return P3(e.parent,i)}catch(a){throw new Error(`Invalid transition definition for state node '${e.id}': -${a.message}`)}else throw new Error(`Invalid target: "${n}" is not a valid target from the root node. Did you mean ".${n}"?`)})}function dY(e){const r=oY(e.config.target);return r?{target:r.map(n=>typeof n=="string"?P3(e.parent,n):n)}:e.parent.initial}function yp(e){return e.type==="history"}function uY(e){const r=pY(e);for(const n of r)for(const o of Ry(n,e))r.add(o);return r}function pY(e){const r=new Set;function n(o){if(!r.has(o)){if(r.add(o),o.type==="compound")n(o.initial.target[0]);else if(o.type==="parallel")for(const i of Hf(o))n(i)}}return n(e),r}function Uf(e,r){if(D3(r))return e.machine.getStateNodeById(r);if(!e.states)throw new Error(`Unable to retrieve child state '${r}' from '${e.id}'; no child states exist.`);const n=e.states[r];if(!n)throw new Error(`Child state '${r}' does not exist on '${e.id}'`);return n}function P3(e,r){if(typeof r=="string"&&D3(r))try{return e.machine.getStateNodeById(r)}catch{}const n=tE(r).slice();let o=e;for(;n.length;){const i=n.shift();if(!i.length)break;o=Uf(o,i)}return o}function M3(e,r){if(typeof r=="string"){const i=e.states[r];if(!i)throw new Error(`State '${r}' does not exist on '${e.id}'`);return[e,i]}const n=Object.keys(r),o=n.map(i=>Uf(e,i)).filter(Boolean);return[e.machine.root,e].concat(o,n.reduce((i,a)=>{const l=Uf(e,a);if(!l)return i;const s=M3(l,r[a]);return i.concat(s)},[]))}function fNe(e,r,n,o){const i=Uf(e,r).next(n,o);return!i||!i.length?e.next(n,o):i}function gNe(e,r,n,o){const i=Object.keys(r),a=Uf(e,i[0]),l=sE(a,r[i[0]],n,o);return!l||!l.length?e.next(n,o):l}function mNe(e,r,n,o){const i=[];for(const a of Object.keys(r)){const l=r[a];if(!l)continue;const s=Uf(e,a),c=sE(s,l,n,o);c&&i.push(...c)}return i.length?i:e.next(n,o)}function sE(e,r,n,o){return typeof r=="string"?fNe(e,r,n,o):Object.keys(r).length===1?gNe(e,r,n,o):mNe(e,r,n,o)}function yNe(e){return Object.keys(e.states).map(r=>e.states[r]).filter(r=>r.type==="history")}function Cd(e,r){let n=e;for(;n.parent&&n.parent!==r;)n=n.parent;return n.parent===r}function vNe(e,r){const n=new Set(e),o=new Set(r);for(const i of n)if(o.has(i))return!0;for(const i of o)if(n.has(i))return!0;return!1}function hY(e,r,n){const o=new Set;for(const i of e){let a=!1;const l=new Set;for(const s of o)if(vNe(dE([i],r,n),dE([s],r,n)))if(Cd(i.source,s.source))l.add(s);else{a=!0;break}if(!a){for(const s of l)o.delete(s);o.add(i)}}return Array.from(o)}function bNe(e){const[r,...n]=e;for(const o of Ry(r,void 0))if(n.every(i=>Cd(i,o)))return o}function cE(e,r){if(!e.target)return[];const n=new Set;for(const o of e.target)if(yp(o))if(r[o.id])for(const i of r[o.id])n.add(i);else for(const i of cE(dY(o),r))n.add(i);else n.add(o);return[...n]}function fY(e,r){const n=cE(e,r);if(!n)return;if(!e.reenter&&n.every(i=>i===e.source||Cd(i,e.source)))return e.source;const o=bNe(n.concat(e.source));if(o)return o;if(!e.reenter)return e.source.machine.root}function dE(e,r,n){const o=new Set;for(const i of e)if(i.target?.length){const a=fY(i,n);i.reenter&&i.source===a&&o.add(a);for(const l of r)Cd(l,a)&&o.add(l)}return[...o]}function xNe(e,r){if(e.length!==r.size)return!1;for(const n of e)if(!r.has(n))return!1;return!0}function uE(e,r,n,o,i,a){if(!e.length)return r;const l=new Set(r._nodes);let s=r.historyValue;const c=hY(e,l,s);let d=r;i||([d,s]=SNe(d,o,n,c,l,s,a,n.actionExecutor)),d=Gf(d,o,n,c.flatMap(p=>p.actions),a,void 0),d=kNe(d,o,n,c,l,a,s,i);const u=[...l];d.status==="done"&&(d=Gf(d,o,n,u.sort((p,f)=>f.order-p.order).flatMap(p=>p.exit),a,void 0));try{return s===r.historyValue&&xNe(r._nodes,l)?d:vp(d,{_nodes:u,historyValue:s})}catch(p){throw p}}function wNe(e,r,n,o,i){if(o.output===void 0)return;const a=eE(i.id,i.output!==void 0&&i.parent?rE(i.output,e.context,r,n.self):void 0);return rE(o.output,e.context,a,n.self)}function kNe(e,r,n,o,i,a,l,s){let c=e;const d=new Set,u=new Set;_Ne(o,l,u,d),s&&u.add(e.machine.root);const p=new Set;for(const f of[...d].sort((m,v)=>m.order-v.order)){i.add(f);const m=[];m.push(...f.entry);for(const v of f.invoke)m.push(T3(v.src,{...v,syncSnapshot:!!v.onSnapshot}));if(u.has(f)){const v=f.initial.actions;m.push(...v)}if(c=Gf(c,r,n,m,a,f.invoke.map(v=>v.id)),f.type==="final"){const v=f.parent;let w=v?.type==="parallel"?v:v?.parent,x=w||f;for(v?.type==="compound"&&a.push(eE(v.id,f.output!==void 0?rE(f.output,c.context,r,n.self):void 0));w?.type==="parallel"&&!p.has(w)&&lE(i,w);)p.add(w),a.push(eE(w.id)),x=w,w=w.parent;if(w)continue;c=vp(c,{status:"done",output:wNe(c,r,n,c.machine.root,x)})}}return c}function _Ne(e,r,n,o){for(const i of e){const a=fY(i,r);for(const s of i.target||[])!yp(s)&&(i.source!==s||i.source!==a||i.reenter)&&(o.add(s),n.add(s)),Wf(s,r,n,o);const l=cE(i,r);for(const s of l){const c=Ry(s,a);a?.type==="parallel"&&c.push(a),gY(o,r,n,c,!i.source.parent&&i.reenter?void 0:a)}}}function Wf(e,r,n,o){if(yp(e))if(r[e.id]){const i=r[e.id];for(const a of i)o.add(a),Wf(a,r,n,o);for(const a of i)pE(a,e.parent,o,r,n)}else{const i=dY(e);for(const a of i.target)o.add(a),i===e.parent?.initial&&n.add(e.parent),Wf(a,r,n,o);for(const a of i.target)pE(a,e.parent,o,r,n)}else if(e.type==="compound"){const[i]=e.initial.target;yp(i)||(o.add(i),n.add(i)),Wf(i,r,n,o),pE(i,e,o,r,n)}else if(e.type==="parallel")for(const i of Hf(e).filter(a=>!yp(a)))[...o].some(a=>Cd(a,i))||(yp(i)||(o.add(i),n.add(i)),Wf(i,r,n,o))}function gY(e,r,n,o,i){for(const a of o)if((!i||Cd(a,i))&&e.add(a),a.type==="parallel")for(const l of Hf(a).filter(s=>!yp(s)))[...e].some(s=>Cd(s,l))||(e.add(l),Wf(l,r,n,e))}function pE(e,r,n,o,i){gY(n,o,i,Ry(e,r))}function SNe(e,r,n,o,i,a,l,s){let c=e;const d=dE(o,i,a);d.sort((p,f)=>f.order-p.order);let u;for(const p of d)for(const f of yNe(p)){let m;f.history==="deep"?m=v=>aE(v)&&Cd(v,p):m=v=>v.parent===p,u??={...a},u[f.id]=Array.from(i).filter(m)}for(const p of d)c=Gf(c,r,n,[...p.exit,...p.invoke.map(f=>$y(f.id))],l,void 0),i.delete(p);return[c,u||a]}function ENe(e,r){return e.implementations.actions[r]}function mY(e,r,n,o,i,a){const{machine:l}=e;let s=e;for(const c of o){const d=typeof c=="function",u=d?c:ENe(l,typeof c=="string"?c:c.type),p={context:s.context,event:r,self:n.self,system:n.system},f=d||typeof c=="string"?void 0:"params"in c?typeof c.params=="function"?c.params({context:s.context,event:r}):c.params:void 0;if(!u||!("resolve"in u)){n.actionExecutor({type:typeof c=="string"?c:typeof c=="object"?c.type:c.name||"(anonymous)",info:p,params:f,exec:u});continue}const m=u,[v,w,x]=m.resolve(n,s,p,f,u,i);s=v,"retryResolve"in m&&a?.push([m,w]),"execute"in m&&n.actionExecutor({type:m.type,info:p,params:w,exec:m.execute.bind(null,n,w)}),x&&(s=mY(s,r,n,x,i,a))}return s}function Gf(e,r,n,o,i,a){const l=a?[]:void 0,s=mY(e,r,n,o,{internalQueue:i,deferredActorIds:a},l);return l?.forEach(([c,d])=>{c.retryResolve(n,s,d)}),s}function hE(e,r,n,o){let i=e;const a=[];function l(d,u,p){n.system._sendInspectionEvent({type:"@xstate.microstep",actorRef:n.self,event:u,snapshot:d,_transitions:p}),a.push(d)}if(r.type===Cy)return i=vp(yY(i,r,n),{status:"stopped"}),l(i,r,[]),{snapshot:i,microstates:a};let s=r;if(s.type!==KG){const d=s,u=QMe(d),p=vY(d,i);if(u&&!p.length)return i=vp(e,{status:"error",error:d.error}),l(i,d,[]),{snapshot:i,microstates:a};i=uE(p,e,n,s,!1,o),l(i,d,p)}let c=!0;for(;i.status==="active";){let d=c?CNe(i,s):[];const u=d.length?i:void 0;if(!d.length){if(!o.length)break;s=o.shift(),d=vY(s,i)}i=uE(d,i,n,s,!1,o),c=i!==u,l(i,s,d)}return i.status!=="active"&&yY(i,s,n),{snapshot:i,microstates:a}}function yY(e,r,n){return Gf(e,r,n,Object.values(e.children).map(o=>$y(o)),[],void 0)}function vY(e,r){return r.machine.getTransitionData(r,e)}function CNe(e,r){const n=new Set,o=e._nodes.filter(aE);for(const i of o)e:for(const a of[i].concat(Ry(i,void 0)))if(a.always){for(const l of a.always)if(l.guard===void 0||j3(l.guard,e.context,r,e)){n.add(l);break e}}return hY(Array.from(n),new Set(e._nodes),e.historyValue)}function $Ne(e,r){const n=A3(M3(e,r));return cY(e,[...n])}function RNe(e){return!!e&&typeof e=="object"&&"machine"in e&&"value"in e}const zNe=function(e){return JG(e,this.value)},TNe=function(e){return this.tags.has(e)},jNe=function(e){const r=this.machine.getTransitionData(this,e);return!!r?.length&&r.some(n=>n.target!==void 0||n.actions.length)},ANe=function(){const{_nodes:e,tags:r,machine:n,getMeta:o,toJSON:i,can:a,hasTag:l,matches:s,...c}=this;return{...c,tags:Array.from(r)}},DNe=function(){return this._nodes.reduce((e,r)=>(r.meta!==void 0&&(e[r.id]=r.meta),e),{})};function N3(e,r){return{status:e.status,output:e.output,error:e.error,machine:r,context:e.context,_nodes:e._nodes,value:cY(r.root,e._nodes),tags:new Set(e._nodes.flatMap(n=>n.tags)),children:e.children,historyValue:e.historyValue||{},matches:zNe,hasTag:TNe,can:jNe,getMeta:DNe,toJSON:ANe}}function vp(e,r={}){return N3({...e,...r},e.machine)}function PNe(e){if(typeof e!="object"||e===null)return{};const r={};for(const n in e){const o=e[n];Array.isArray(o)&&(r[n]=o.map(i=>({id:i.id})))}return r}function MNe(e,r){const{_nodes:n,tags:o,machine:i,children:a,context:l,can:s,hasTag:c,matches:d,getMeta:u,toJSON:p,...f}=e,m={};for(const v in a){const w=a[v];m[v]={snapshot:w.getPersistedSnapshot(r),src:w.src,systemId:w.systemId,syncSnapshot:w._syncSnapshot}}return{...f,context:bY(l),children:m,historyValue:PNe(f.historyValue)}}function bY(e){let r;for(const n in e){const o=e[n];if(o&&typeof o=="object")if("sessionId"in o&&"send"in o&&"ref"in o)r??=Array.isArray(e)?e.slice():{...e},r[n]={xstate$$type:iE,id:o.id};else{const i=bY(o);i!==o&&(r??=Array.isArray(e)?e.slice():{...e},r[n]=i)}}return r??e}function NNe(e,r,n,o,{event:i,id:a,delay:l},{internalQueue:s}){const c=r.machine.implementations.delays;if(typeof i=="string")throw new Error(`Only event objects may be used with raise; use raise({ type: "${i}" }) instead`);const d=typeof i=="function"?i(n,o):i;let u;if(typeof l=="string"){const p=c&&c[l];u=typeof p=="function"?p(n,o):p}else u=typeof l=="function"?l(n,o):l;return typeof u!="number"&&s.push(d),[r,{event:d,id:a,delay:u},void 0]}function BNe(e,r){const{event:n,delay:o,id:i}=r;if(typeof o=="number"){e.defer(()=>{const a=e.self;e.system.scheduler.schedule(a,a,n,o,i)});return}}function ai(e,r){function n(o,i){}return n.type="xstate.raise",n.event=e,n.id=r?.id,n.delay=r?.delay,n.resolve=NNe,n.execute=BNe,n}const xY=new WeakMap;function B3(e){return{config:e,start:(r,n)=>{const{self:o,system:i,emit:a}=n,l={receivers:void 0,dispose:void 0};xY.set(o,l),l.dispose=e({input:r.input,system:i,self:o,sendBack:s=>{o.getSnapshot().status!=="stopped"&&o._parent&&i._relay(o,o._parent,s)},receive:s=>{l.receivers??=new Set,l.receivers.add(s)},emit:a})},transition:(r,n,o)=>{const i=xY.get(o.self);return n.type===Cy?(r={...r,status:"stopped",error:void 0},i.dispose?.(),r):(i.receivers?.forEach(a=>a(n)),r)},getInitialSnapshot:(r,n)=>({status:"active",output:void 0,error:void 0,input:n}),getPersistedSnapshot:r=>r,restoreSnapshot:r=>r}}const wY="xstate.promise.resolve",kY="xstate.promise.reject",I3=new WeakMap;function zy(e){return{config:e,transition:(r,n,o)=>{if(r.status!=="active")return r;switch(n.type){case wY:{const i=n.data;return{...r,status:"done",output:i,input:void 0}}case kY:return{...r,status:"error",error:n.data,input:void 0};case Cy:return I3.get(o.self)?.abort(),{...r,status:"stopped",input:void 0};default:return r}},start:(r,{self:n,system:o,emit:i})=>{if(r.status!=="active")return;const a=new AbortController;I3.set(n,a),Promise.resolve(e({input:r.input,system:o,self:n,signal:a.signal,emit:i})).then(l=>{n.getSnapshot().status==="active"&&(I3.delete(n),o._relay(n,n,{type:wY,data:l}))},l=>{n.getSnapshot().status==="active"&&(I3.delete(n),o._relay(n,n,{type:kY,data:l}))})},getInitialSnapshot:(r,n)=>({status:"active",output:void 0,error:void 0,input:n}),getPersistedSnapshot:r=>r,restoreSnapshot:r=>r}}function INe(e,{machine:r,context:n},o,i){const a=(l,s)=>{if(typeof l=="string"){const c=nE(r,l);if(!c)throw new Error(`Actor logic '${l}' not implemented in machine '${r.id}'`);const d=qf(c,{id:s?.id,parent:e.self,syncSnapshot:s?.syncSnapshot,input:typeof s?.input=="function"?s.input({context:n,event:o,self:e.self}):s?.input,src:l,systemId:s?.systemId});return i[d.id]=d,d}else return qf(l,{id:s?.id,parent:e.self,syncSnapshot:s?.syncSnapshot,input:s?.input,src:l,systemId:s?.systemId})};return(l,s)=>{const c=a(l,s);return i[c.id]=c,e.defer(()=>{c._processingStatus!==ii.Stopped&&c.start()}),c}}function ONe(e,r,n,o,{assignment:i}){if(!r.context)throw new Error("Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.");const a={},l={context:r.context,event:n.event,spawn:INe(e,r,n.event,a),self:e.self,system:e.system};let s={};if(typeof i=="function")s=i(l,o);else for(const d of Object.keys(i)){const u=i[d];s[d]=typeof u=="function"?u(l,o):u}const c=Object.assign({},r.context,s);return[vp(r,{context:c,children:Object.keys(a).length?{...r.children,...a}:r.children}),void 0,void 0]}function Bt(e){function r(n,o){}return r.type="xstate.assign",r.assignment=e,r.resolve=ONe,r}const _Y=new WeakMap;function Yf(e,r,n){let o=_Y.get(e);return o?r in o||(o[r]=n()):(o={[r]:n()},_Y.set(e,o)),o[r]}const LNe={},Ty=e=>typeof e=="string"?{type:e}:typeof e=="function"?"resolve"in e?{type:e.type}:{type:e.name}:e;class O3{constructor(r,n){if(this.config=r,this.key=void 0,this.id=void 0,this.type=void 0,this.path=void 0,this.states=void 0,this.history=void 0,this.entry=void 0,this.exit=void 0,this.parent=void 0,this.machine=void 0,this.meta=void 0,this.output=void 0,this.order=-1,this.description=void 0,this.tags=[],this.transitions=void 0,this.always=void 0,this.parent=n._parent,this.key=n._key,this.machine=n._machine,this.path=this.parent?this.parent.path.concat(this.key):[],this.id=this.config.id||[this.machine.id,...this.path].join(YG),this.type=this.config.type||(this.config.states&&Object.keys(this.config.states).length?"compound":this.config.history?"history":"atomic"),this.description=this.config.description,this.order=this.machine.idMap.size,this.machine.idMap.set(this.id,this),this.states=this.config.states?tY(this.config.states,(o,i)=>new O3(o,{_parent:this,_key:i,_machine:this.machine})):LNe,this.type==="compound"&&!this.config.initial)throw new Error(`No initial state specified for compound state node "#${this.id}". Try adding { initial: "${Object.keys(this.states)[0]}" } to the state config.`);this.history=this.config.history===!0?"shallow":this.config.history||!1,this.entry=nc(this.config.entry).slice(),this.exit=nc(this.config.exit).slice(),this.meta=this.config.meta,this.output=this.type==="final"||!this.parent?this.config.output:void 0,this.tags=nc(r.tags).slice()}_initialize(){this.transitions=uNe(this),this.config.always&&(this.always=Vf(this.config.always).map(r=>mp(this,XG,r))),Object.keys(this.states).forEach(r=>{this.states[r]._initialize()})}get definition(){return{id:this.id,key:this.key,version:this.machine.version,type:this.type,initial:this.initial?{target:this.initial.target,source:this,actions:this.initial.actions.map(Ty),eventType:null,reenter:!1,toJSON:()=>({target:this.initial.target.map(r=>`#${r.id}`),source:`#${this.id}`,actions:this.initial.actions.map(Ty),eventType:null})}:void 0,history:this.history,states:tY(this.states,r=>r.definition),on:this.on,transitions:[...this.transitions.values()].flat().map(r=>({...r,actions:r.actions.map(Ty)})),entry:this.entry.map(Ty),exit:this.exit.map(Ty),meta:this.meta,order:this.order||-1,output:this.output,invoke:this.invoke,description:this.description,tags:this.tags}}toJSON(){return this.definition}get invoke(){return Yf(this,"invoke",()=>nc(this.config.invoke).map((r,n)=>{const{src:o,systemId:i}=r,a=r.id??iY(this.id,n),l=typeof o=="string"?o:`xstate.invoke.${iY(this.id,n)}`;return{...r,src:l,id:a,systemId:i,toJSON(){const{onDone:s,onError:c,...d}=r;return{...d,type:"xstate.invoke",src:l,id:a}}}}))}get on(){return Yf(this,"on",()=>[...this.transitions].flatMap(([r,n])=>n.map(o=>[r,o])).reduce((r,[n,o])=>(r[n]=r[n]||[],r[n].push(o),r),{}))}get after(){return Yf(this,"delayedTransitions",()=>dNe(this))}get initial(){return Yf(this,"initial",()=>pNe(this,this.config.initial))}next(r,n){const o=n.type,i=[];let a;const l=Yf(this,`candidates-${o}`,()=>cNe(this,o));for(const s of l){const{guard:c}=s,d=r.context;let u=!1;try{u=!c||j3(c,d,n,r)}catch(p){const f=typeof c=="string"?c:typeof c=="object"?c.type:void 0;throw new Error(`Unable to evaluate guard ${f?`'${f}' `:""}in transition for event '${o}' in state node '${this.id}': -${p.message}`)}if(u){i.push(...s.actions),a=s;break}}return a?[a]:void 0}get events(){return Yf(this,"events",()=>{const{states:r}=this,n=new Set(this.ownEvents);if(r)for(const o of Object.keys(r)){const i=r[o];if(i.states)for(const a of i.events)n.add(`${a}`)}return Array.from(n)})}get ownEvents(){const r=new Set([...this.transitions.keys()].filter(n=>this.transitions.get(n).some(o=>!(!o.target&&!o.actions.length&&!o.reenter))));return Array.from(r)}}const FNe="#";class fE{constructor(r,n){this.config=r,this.version=void 0,this.schemas=void 0,this.implementations=void 0,this.__xstatenode=!0,this.idMap=new Map,this.root=void 0,this.id=void 0,this.states=void 0,this.events=void 0,this.id=r.id||"(machine)",this.implementations={actors:n?.actors??{},actions:n?.actions??{},delays:n?.delays??{},guards:n?.guards??{}},this.version=this.config.version,this.schemas=this.config.schemas,this.transition=this.transition.bind(this),this.getInitialSnapshot=this.getInitialSnapshot.bind(this),this.getPersistedSnapshot=this.getPersistedSnapshot.bind(this),this.restoreSnapshot=this.restoreSnapshot.bind(this),this.start=this.start.bind(this),this.root=new O3(r,{_key:this.id,_machine:this}),this.root._initialize(),this.states=this.root.states,this.events=this.root.events}provide(r){const{actions:n,guards:o,actors:i,delays:a}=this.implementations;return new fE(this.config,{actions:{...n,...r.actions},guards:{...o,...r.guards},actors:{...i,...r.actors},delays:{...a,...r.delays}})}resolveState(r){const n=$Ne(this.root,r.value),o=A3(M3(this.root,n));return N3({_nodes:[...o],context:r.context||{},children:{},status:lE(o,this.root)?"done":r.status||"active",output:r.output,error:r.error,historyValue:r.historyValue},this)}transition(r,n,o){return hE(r,n,o,[]).snapshot}microstep(r,n,o){return hE(r,n,o,[]).microstates}getTransitionData(r,n){return sE(this.root,r.value,r,n)||[]}getPreInitialState(r,n,o){const{context:i}=this.config,a=N3({context:typeof i!="function"&&i?i:{},_nodes:[this.root],children:{},status:"active"},this);return typeof i=="function"?Gf(a,n,r,[Bt(({spawn:l,event:s,self:c})=>i({spawn:l,input:s.input,self:c}))],o,void 0):a}getInitialSnapshot(r,n){const o=QG(n),i=[],a=this.getPreInitialState(r,o,i),l=uE([{target:[...pY(this.root)],source:this.root,reenter:!0,actions:[],eventType:null,toJSON:null}],a,r,o,!0,i),{snapshot:s}=hE(l,o,r,i);return s}start(r){Object.values(r.children).forEach(n=>{n.getSnapshot().status==="active"&&n.start()})}getStateNodeById(r){const n=tE(r),o=n.slice(1),i=D3(n[0])?n[0].slice(FNe.length):n[0],a=this.idMap.get(i);if(!a)throw new Error(`Child state node '#${i}' does not exist on machine '${this.id}'`);return P3(a,o)}get definition(){return this.root.definition}toJSON(){return this.definition}getPersistedSnapshot(r,n){return MNe(r,n)}restoreSnapshot(r,n){const o={},i=r.children;Object.keys(i).forEach(p=>{const f=i[p],m=f.snapshot,v=f.src,w=typeof v=="string"?nE(this,v):v;if(!w)return;const x=qf(w,{id:p,parent:n.self,syncSnapshot:f.syncSnapshot,snapshot:m,src:v,systemId:f.systemId});o[p]=x});function a(p,f){if(f instanceof O3)return f;try{return p.machine.getStateNodeById(f.id)}catch{}}function l(p,f){if(!f||typeof f!="object")return{};const m={};for(const v in f){const w=f[v];for(const x of w){const k=a(p,x);k&&(m[v]??=[],m[v].push(k))}}return m}const s=l(this.root,r.historyValue),c=N3({...r,children:o,_nodes:Array.from(A3(M3(this.root,r.value))),historyValue:s},this),d=new Set;function u(p,f){if(!d.has(p)){d.add(p);for(const m in p){const v=p[m];if(v&&typeof v=="object"){if("xstate$$type"in v&&v.xstate$$type===iE){p[m]=f[v.id];continue}u(v,f)}}}}return u(c.context,o),c}}function VNe(e,r,n,o,{event:i}){const a=typeof i=="function"?i(n,o):i;return[r,{event:a},void 0]}function qNe(e,{event:r}){e.defer(()=>e.emit(r))}function gE(e){function r(n,o){}return r.type="xstate.emit",r.event=e,r.resolve=VNe,r.execute=qNe,r}let mE=(function(e){return e.Parent="#_parent",e.Internal="#_internal",e})({});function HNe(e,r,n,o,{to:i,event:a,id:l,delay:s},c){const d=r.machine.implementations.delays;if(typeof a=="string")throw new Error(`Only event objects may be used with sendTo; use sendTo({ type: "${a}" }) instead`);const u=typeof a=="function"?a(n,o):a;let p;if(typeof s=="string"){const v=d&&d[s];p=typeof v=="function"?v(n,o):v}else p=typeof s=="function"?s(n,o):s;const f=typeof i=="function"?i(n,o):i;let m;if(typeof f=="string"){if(f===mE.Parent?m=e.self._parent:f===mE.Internal?m=e.self:f.startsWith("#_")?m=r.children[f.slice(2)]:m=c.deferredActorIds?.includes(f)?f:r.children[f],!m)throw new Error(`Unable to send event to actor '${f}' from machine '${r.machine.id}'.`)}else m=f||e.self;return[r,{to:m,targetId:typeof f=="string"?f:void 0,event:u,id:l,delay:p},void 0]}function UNe(e,r,n){typeof n.to=="string"&&(n.to=r.children[n.to])}function WNe(e,r){e.defer(()=>{const{to:n,event:o,delay:i,id:a}=r;if(typeof i=="number"){e.system.scheduler.schedule(e.self,n,o,i,a);return}e.system._relay(e.self,n,o.type===GMe?ZG(e.self.id,o.data):o)})}function jy(e,r,n){function o(i,a){}return o.type="xstate.sendTo",o.to=e,o.event=r,o.id=n?.id,o.delay=n?.delay,o.resolve=HNe,o.retryResolve=UNe,o.execute=WNe,o}function GNe(e,r){return jy(mE.Parent,e,r)}function YNe(e,r,n,o,{collect:i}){const a=[],l=function(s){a.push(s)};return l.assign=(...s)=>{a.push(Bt(...s))},l.cancel=(...s)=>{a.push(ua(...s))},l.raise=(...s)=>{a.push(ai(...s))},l.sendTo=(...s)=>{a.push(jy(...s))},l.sendParent=(...s)=>{a.push(GNe(...s))},l.spawnChild=(...s)=>{a.push(T3(...s))},l.stopChild=(...s)=>{a.push($y(...s))},l.emit=(...s)=>{a.push(gE(...s))},i({context:n.context,event:n.event,enqueue:l,check:s=>j3(s,r.context,n.event,r),self:e.self,system:e.system},o),[r,void 0,a]}function rs(e){function r(n,o){}return r.type="xstate.enqueueActions",r.collect=e,r.resolve=YNe,r}function XNe(e,r,n,o,{value:i,label:a}){return[r,{value:typeof i=="function"?i(n,o):i,label:a},void 0]}function KNe({logger:e},{value:r,label:n}){n?e(n,r):e(r)}function yE(e=({context:n,event:o})=>({context:n,event:o}),r){function n(o,i){}return n.type="xstate.log",n.value=e,n.label=r,n.resolve=XNe,n.execute=KNe,n}function ht(e,r){const n=nc(r);if(!n.includes(e.type)){const o=n.length===1?`type "${n[0]}"`:`one of types "${n.join('", "')}"`;throw new Error(`Expected event ${JSON.stringify(e)} to have ${o}`)}}function ZNe(e,r){return new fE(e,r)}function ns({schemas:e,actors:r,actions:n,guards:o,delays:i}){return{assign:Bt,sendTo:jy,raise:ai,log:yE,cancel:ua,stopChild:$y,enqueueActions:rs,emit:gE,spawnChild:T3,createStateConfig:a=>a,createAction:a=>a,createMachine:a=>ZNe({...a,schemas:e},{actors:r,actions:n,guards:o,delays:i}),extend:a=>ns({schemas:e,actors:r,actions:{...n,...a.actions},guards:{...o,...a.guards},delays:{...i,...a.delays}})}}fV();const SY=(e,r)=>{r(e);const n=e.getSnapshot().children;n&&Object.values(n).forEach(o=>{SY(o,r)})};function QNe(e){const r=[];SY(e,o=>{r.push([o,o.getSnapshot()]),o.observers=new Set});const n=e.system.getSnapshot?.();e.stop(),e.system._snapshot=n,r.forEach(([o,i])=>{o._processingStatus=0,o._snapshot=i})}function JNe(e,...[r]){let[[n,o],i]=S.useState(()=>{const a=qf(e,r);return[e.config,a]});if(e.config!==n){const a=qf(e,{...r,snapshot:o.getPersistedSnapshot({__unsafeAllowInlineActors:!0})});i([e.config,a]),o=a}return hPe(()=>{o.logic.implementations=e.implementations}),o}function vE(e,...[r,n]){const o=JNe(e,r);return S.useEffect(()=>{if(!n)return;const i=o.subscribe(z3(n));return()=>{i.unsubscribe()}},[n]),S.useEffect(()=>(o.start(),()=>{QNe(o)}),[o]),o}function eBe(e,r){return e===r}function pn(e,r,n=eBe){const o=S.useCallback(a=>{if(!e)return()=>{};const{unsubscribe:l}=e.subscribe(a);return l},[e]),i=S.useCallback(()=>e?.getSnapshot(),[e]);return yV.useSyncExternalStoreWithSelector(o,i,i,r,n)}const bE=S.createContext(null);bE.displayName="DiagramActorSafeContext";const xE=S.createContext(null);xE.displayName="DiagramApiSafeContext";const tBe=bE.Provider,rBe=xE.Provider;function Xf(){const e=S.useContext(bE);if(e===null)throw new Error("DiagramActorRef is not provided");return e}function Mt(){const e=S.useContext(xE);if(e===null)throw new Error("DiagramApi is not provided");return e}function at(e){const r=S.useRef(e);r.current=e;const n=S.useRef(null);return n.current==null&&(n.current=((...o)=>r.current?.(...o))),n.current}function wE(e,r=Ir){const n=Xf();return pn(n,e,r)}function pa(e,r=Ir,n){const o=Xf(),i=at(e),a=S.useCallback(l=>i(l.context),n??[]);return pn(o,a,r)}function ji(e,r,n){const o=Xf(),i=at(r),a=S.useRef(!1),l=n?.once??!1;S.useEffect(()=>{if(l&&a.current)return;let s=o.on(e,c=>{i(c),a.current=!0,l&&(s?.unsubscribe(),s=null)});return()=>{s?.unsubscribe()}},[o,e,l])}const nBe=e=>e.children.overlays;function oBe(){return wE(nBe,Object.is)}const iBe=e=>e.children.search??null;function aBe(){return wE(iBe,Object.is)}function kE(e,r){e.indexOf(r)===-1&&e.push(r)}function L3(e,r){const n=e.indexOf(r);n>-1&&e.splice(n,1)}const oc=(e,r,n)=>n>r?r:n{};const ic={},EY=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e);function CY(e){return typeof e=="object"&&e!==null}const $Y=e=>/^0[^.\s]+$/u.test(e);function SE(e){let r;return()=>(r===void 0&&(r=e()),r)}const ha=e=>e,lBe=(e,r)=>n=>r(e(n)),Ay=(...e)=>e.reduce(lBe),Kf=(e,r,n)=>{const o=r-e;return o===0?1:(n-e)/o};class EE{constructor(){this.subscriptions=[]}add(r){return kE(this.subscriptions,r),()=>L3(this.subscriptions,r)}notify(r,n,o){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](r,n,o);else for(let a=0;ae*1e3,fa=e=>e/1e3;function RY(e,r){return r?e*(1e3/r):0}const sBe=(e,r,n)=>{const o=r-e;return((n-e)%o+o)%o+e},zY=(e,r,n)=>(((1-3*n+3*r)*e+(3*n-6*r))*e+3*r)*e,cBe=1e-7,dBe=12;function uBe(e,r,n,o,i){let a,l,s=0;do l=r+(n-r)/2,a=zY(l,o,i)-e,a>0?n=l:r=l;while(Math.abs(a)>cBe&&++suBe(a,0,1,e,n);return a=>a===0||a===1?a:zY(i(a),r,o)}const TY=e=>r=>r<=.5?e(2*r)/2:(2-e(2*(1-r)))/2,jY=e=>r=>1-e(1-r),AY=Dy(.33,1.53,.69,.99),CE=jY(AY),DY=TY(CE),PY=e=>(e*=2)<1?.5*CE(e):.5*(2-Math.pow(2,-10*(e-1))),$E=e=>1-Math.sin(Math.acos(e)),MY=jY($E),NY=TY($E),pBe=Dy(.42,0,1,1),hBe=Dy(0,0,.58,1),BY=Dy(.42,0,.58,1),IY=e=>Array.isArray(e)&&typeof e[0]!="number";function OY(e,r){return IY(e)?e[sBe(0,e.length,r)]:e}const LY=e=>Array.isArray(e)&&typeof e[0]=="number",fBe={linear:ha,easeIn:pBe,easeInOut:BY,easeOut:hBe,circIn:$E,circInOut:NY,circOut:MY,backIn:CE,backInOut:DY,backOut:AY,anticipate:PY},gBe=e=>typeof e=="string",FY=e=>{if(LY(e)){_E(e.length===4);const[r,n,o,i]=e;return Dy(r,n,o,i)}else if(gBe(e))return fBe[e];return e},F3=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function mBe(e,r){let n=new Set,o=new Set,i=!1,a=!1;const l=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function c(u){l.has(u)&&(d.schedule(u),e()),u(s)}const d={schedule:(u,p=!1,f=!1)=>{const m=f&&i?n:o;return p&&l.add(u),m.has(u)||m.add(u),u},cancel:u=>{o.delete(u),l.delete(u)},process:u=>{if(s=u,i){a=!0;return}i=!0,[n,o]=[o,n],n.forEach(c),n.clear(),i=!1,a&&(a=!1,d.process(u))}};return d}const yBe=40;function VY(e,r){let n=!1,o=!0;const i={delta:0,timestamp:0,isProcessing:!1},a=()=>n=!0,l=F3.reduce((k,C)=>(k[C]=mBe(a),k),{}),{setup:s,read:c,resolveKeyframes:d,preUpdate:u,update:p,preRender:f,render:m,postRender:v}=l,w=()=>{const k=ic.useManualTiming?i.timestamp:performance.now();n=!1,ic.useManualTiming||(i.delta=o?1e3/60:Math.max(Math.min(k-i.timestamp,yBe),1)),i.timestamp=k,i.isProcessing=!0,s.process(i),c.process(i),d.process(i),u.process(i),p.process(i),f.process(i),m.process(i),v.process(i),i.isProcessing=!1,n&&r&&(o=!1,e(w))},x=()=>{n=!0,o=!0,i.isProcessing||e(w)};return{schedule:F3.reduce((k,C)=>{const _=l[C];return k[C]=($,R=!1,T=!1)=>(n||x(),_.schedule($,R,T)),k},{}),cancel:k=>{for(let C=0;C(V3===void 0&&li.set(so.isProcessing||ic.useManualTiming?so.timestamp:performance.now()),V3),set:e=>{V3=e,queueMicrotask(vBe)}},qY=e=>r=>typeof r=="string"&&r.startsWith(e),HY=qY("--"),bBe=qY("var(--"),zE=e=>bBe(e)?xBe.test(e.split("/*")[0].trim()):!1,xBe=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,Zf={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Py={...Zf,transform:e=>oc(0,1,e)},q3={...Zf,default:1},My=e=>Math.round(e*1e5)/1e5,TE=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function wBe(e){return e==null}const kBe=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,jE=(e,r)=>n=>!!(typeof n=="string"&&kBe.test(n)&&n.startsWith(e)||r&&!wBe(n)&&Object.prototype.hasOwnProperty.call(n,r)),UY=(e,r,n)=>o=>{if(typeof o!="string")return o;const[i,a,l,s]=o.match(TE);return{[e]:parseFloat(i),[r]:parseFloat(a),[n]:parseFloat(l),alpha:s!==void 0?parseFloat(s):1}},_Be=e=>oc(0,255,e),AE={...Zf,transform:e=>Math.round(_Be(e))},bp={test:jE("rgb","red"),parse:UY("red","green","blue"),transform:({red:e,green:r,blue:n,alpha:o=1})=>"rgba("+AE.transform(e)+", "+AE.transform(r)+", "+AE.transform(n)+", "+My(Py.transform(o))+")"};function SBe(e){let r="",n="",o="",i="";return e.length>5?(r=e.substring(1,3),n=e.substring(3,5),o=e.substring(5,7),i=e.substring(7,9)):(r=e.substring(1,2),n=e.substring(2,3),o=e.substring(3,4),i=e.substring(4,5),r+=r,n+=n,o+=o,i+=i),{red:parseInt(r,16),green:parseInt(n,16),blue:parseInt(o,16),alpha:i?parseInt(i,16)/255:1}}const DE={test:jE("#"),parse:SBe,transform:bp.transform},Ny=e=>({test:r=>typeof r=="string"&&r.endsWith(e)&&r.split(" ").length===1,parse:parseFloat,transform:r=>`${r}${e}`}),Rd=Ny("deg"),os=Ny("%"),_t=Ny("px"),EBe=Ny("vh"),CBe=Ny("vw"),WY={...os,parse:e=>os.parse(e)/100,transform:e=>os.transform(e*100)},Qf={test:jE("hsl","hue"),parse:UY("hue","saturation","lightness"),transform:({hue:e,saturation:r,lightness:n,alpha:o=1})=>"hsla("+Math.round(e)+", "+os.transform(My(r))+", "+os.transform(My(n))+", "+My(Py.transform(o))+")"},Sn={test:e=>bp.test(e)||DE.test(e)||Qf.test(e),parse:e=>bp.test(e)?bp.parse(e):Qf.test(e)?Qf.parse(e):DE.parse(e),transform:e=>typeof e=="string"?e:e.hasOwnProperty("red")?bp.transform(e):Qf.transform(e),getAnimatableNone:e=>{const r=Sn.parse(e);return r.alpha=0,Sn.transform(r)}},$Be=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function RBe(e){return isNaN(e)&&typeof e=="string"&&(e.match(TE)?.length||0)+(e.match($Be)?.length||0)>0}const GY="number",YY="color",zBe="var",TBe="var(",XY="${}",jBe=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function By(e){const r=e.toString(),n=[],o={color:[],number:[],var:[]},i=[];let a=0;const l=r.replace(jBe,s=>(Sn.test(s)?(o.color.push(a),i.push(YY),n.push(Sn.parse(s))):s.startsWith(TBe)?(o.var.push(a),i.push(zBe),n.push(s)):(o.number.push(a),i.push(GY),n.push(parseFloat(s))),++a,XY)).split(XY);return{values:n,split:l,indexes:o,types:i}}function KY(e){return By(e).values}function ZY(e){const{split:r,types:n}=By(e),o=r.length;return i=>{let a="";for(let l=0;ltypeof e=="number"?0:Sn.test(e)?Sn.getAnimatableNone(e):e;function DBe(e){const r=KY(e);return ZY(e)(r.map(ABe))}const zd={test:RBe,parse:KY,createTransformer:ZY,getAnimatableNone:DBe};function PE(e,r,n){return n<0&&(n+=1),n>1&&(n-=1),n<.16666666666666666?e+(r-e)*6*n:n<.5?r:n<.6666666666666666?e+(r-e)*(.6666666666666666-n)*6:e}function PBe({hue:e,saturation:r,lightness:n,alpha:o}){e/=360,r/=100,n/=100;let i=0,a=0,l=0;if(!r)i=a=l=n;else{const s=n<.5?n*(1+r):n+r-n*r,c=2*n-s;i=PE(c,s,e+.3333333333333333),a=PE(c,s,e),l=PE(c,s,e-.3333333333333333)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(l*255),alpha:o}}function H3(e,r){return n=>n>0?r:e}const Lr=(e,r,n)=>e+(r-e)*n,ME=(e,r,n)=>{const o=e*e,i=n*(r*r-o)+o;return i<0?0:Math.sqrt(i)},MBe=[DE,bp,Qf],NBe=e=>MBe.find(r=>r.test(e));function QY(e){const r=NBe(e);if(!r)return!1;let n=r.parse(e);return r===Qf&&(n=PBe(n)),n}const JY=(e,r)=>{const n=QY(e),o=QY(r);if(!n||!o)return H3(e,r);const i={...n};return a=>(i.red=ME(n.red,o.red,a),i.green=ME(n.green,o.green,a),i.blue=ME(n.blue,o.blue,a),i.alpha=Lr(n.alpha,o.alpha,a),bp.transform(i))},NE=new Set(["none","hidden"]);function BBe(e,r){return NE.has(e)?n=>n<=0?e:r:n=>n>=1?r:e}function IBe(e,r){return n=>Lr(e,r,n)}function BE(e){return typeof e=="number"?IBe:typeof e=="string"?zE(e)?H3:Sn.test(e)?JY:FBe:Array.isArray(e)?eX:typeof e=="object"?Sn.test(e)?JY:OBe:H3}function eX(e,r){const n=[...e],o=n.length,i=e.map((a,l)=>BE(a)(a,r[l]));return a=>{for(let l=0;l{for(const a in o)n[a]=o[a](i);return n}}function LBe(e,r){const n=[],o={color:0,var:0,number:0};for(let i=0;i{const n=zd.createTransformer(r),o=By(e),i=By(r);return o.indexes.var.length===i.indexes.var.length&&o.indexes.color.length===i.indexes.color.length&&o.indexes.number.length>=i.indexes.number.length?NE.has(e)&&!i.values.length||NE.has(r)&&!o.values.length?BBe(e,r):Ay(eX(LBe(o,i),i.values),n):H3(e,r)};function tX(e,r,n){return typeof e=="number"&&typeof r=="number"&&typeof n=="number"?Lr(e,r,n):BE(e)(e,r)}const VBe=e=>{const r=({timestamp:n})=>e(n);return{start:(n=!0)=>Dr.update(r,n),stop:()=>$d(r),now:()=>so.isProcessing?so.timestamp:li.now()}},rX=(e,r,n=10)=>{let o="";const i=Math.max(Math.round(r/n),2);for(let a=0;a=U3?1/0:r}function nX(e,r=100,n){const o=n({...e,keyframes:[0,r]}),i=Math.min(IE(o),U3);return{type:"keyframes",ease:a=>o.next(i*a).value/r,duration:fa(i)}}const qBe=5;function oX(e,r,n){const o=Math.max(r-qBe,0);return RY(n-e(o),r-o)}const rn={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},OE=.001;function HBe({duration:e=rn.duration,bounce:r=rn.bounce,velocity:n=rn.velocity,mass:o=rn.mass}){let i,a,l=1-r;l=oc(rn.minDamping,rn.maxDamping,l),e=oc(rn.minDuration,rn.maxDuration,fa(e)),l<1?(i=d=>{const u=d*l,p=u*e,f=u-n,m=LE(d,l),v=Math.exp(-p);return OE-f/m*v},a=d=>{const u=d*l*e,p=u*n+n,f=Math.pow(l,2)*Math.pow(d,2)*e,m=Math.exp(-u),v=LE(Math.pow(d,2),l);return(-i(d)+OE>0?-1:1)*((p-f)*m)/v}):(i=d=>{const u=Math.exp(-d*e),p=(d-n)*e+1;return-OE+u*p},a=d=>{const u=Math.exp(-d*e),p=(n-d)*(e*e);return u*p});const s=5/e,c=WBe(i,a,s);if(e=al(e),isNaN(c))return{stiffness:rn.stiffness,damping:rn.damping,duration:e};{const d=Math.pow(c,2)*o;return{stiffness:d,damping:l*2*Math.sqrt(o*d),duration:e}}}const UBe=12;function WBe(e,r,n){let o=n;for(let i=1;ie[n]!==void 0)}function XBe(e){let r={velocity:rn.velocity,stiffness:rn.stiffness,damping:rn.damping,mass:rn.mass,isResolvedFromDuration:!1,...e};if(!iX(e,YBe)&&iX(e,GBe))if(e.visualDuration){const n=e.visualDuration,o=2*Math.PI/(n*1.2),i=o*o,a=2*oc(.05,1,1-(e.bounce||0))*Math.sqrt(i);r={...r,mass:rn.mass,stiffness:i,damping:a}}else{const n=HBe(e);r={...r,...n,mass:rn.mass},r.isResolvedFromDuration=!0}return r}function Iy(e=rn.visualDuration,r=rn.bounce){const n=typeof e!="object"?{visualDuration:e,keyframes:[0,1],bounce:r}:e;let{restSpeed:o,restDelta:i}=n;const a=n.keyframes[0],l=n.keyframes[n.keyframes.length-1],s={done:!1,value:a},{stiffness:c,damping:d,mass:u,duration:p,velocity:f,isResolvedFromDuration:m}=XBe({...n,velocity:-fa(n.velocity||0)}),v=f||0,w=d/(2*Math.sqrt(c*u)),x=l-a,k=fa(Math.sqrt(c/u)),C=Math.abs(x)<5;o||(o=C?rn.restSpeed.granular:rn.restSpeed.default),i||(i=C?rn.restDelta.granular:rn.restDelta.default);let _;if(w<1){const R=LE(k,w);_=T=>{const A=Math.exp(-w*k*T);return l-A*((v+w*k*x)/R*Math.sin(R*T)+x*Math.cos(R*T))}}else if(w===1)_=R=>l-Math.exp(-k*R)*(x+(v+k*x)*R);else{const R=k*Math.sqrt(w*w-1);_=T=>{const A=Math.exp(-w*k*T),z=Math.min(R*T,300);return l-A*((v+w*k*x)*Math.sinh(z)+R*x*Math.cosh(z))/R}}const $={calculatedDuration:m&&p||null,next:R=>{const T=_(R);if(m)s.done=R>=p;else{let A=R===0?v:0;w<1&&(A=R===0?al(v):oX(_,R,T));const z=Math.abs(A)<=o,j=Math.abs(l-T)<=i;s.done=z&&j}return s.value=s.done?l:T,s},toString:()=>{const R=Math.min(IE($),U3),T=rX(A=>$.next(R*A).value,R,30);return R+"ms "+T},toTransition:()=>{}};return $}Iy.applyToOptions=e=>{const r=nX(e,100,Iy);return e.ease=r.ease,e.duration=al(r.duration),e.type="keyframes",e};function FE({keyframes:e,velocity:r=0,power:n=.8,timeConstant:o=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:l,min:s,max:c,restDelta:d=.5,restSpeed:u}){const p=e[0],f={done:!1,value:p},m=z=>s!==void 0&&zc,v=z=>s===void 0?c:c===void 0||Math.abs(s-z)-w*Math.exp(-z/o),_=z=>k+C(z),$=z=>{const j=C(z),I=_(z);f.done=Math.abs(j)<=d,f.value=f.done?k:I};let R,T;const A=z=>{m(f.value)&&(R=z,T=Iy({keyframes:[f.value,v(f.value)],velocity:oX(_,z,f.value),damping:i,stiffness:a,restDelta:d,restSpeed:u}))};return A(0),{calculatedDuration:null,next:z=>{let j=!1;return!T&&R===void 0&&(j=!0,$(z),A(z)),R!==void 0&&z>=R?T.next(z-R):(!j&&$(z),f)}}}function KBe(e,r,n){const o=[],i=n||ic.mix||tX,a=e.length-1;for(let l=0;lr[0];if(a===2&&r[0]===r[1])return()=>r[1];const l=e[0]===e[1];e[0]>e[a-1]&&(e=[...e].reverse(),r=[...r].reverse());const s=KBe(r,o,i),c=s.length,d=u=>{if(l&&u1)for(;pd(oc(e[0],e[a-1],u)):d}function aX(e,r){const n=e[e.length-1];for(let o=1;o<=r;o++){const i=Kf(0,r,o);e.push(Lr(n,1,i))}}function lX(e){const r=[0];return aX(r,e.length-1),r}function QBe(e,r){return e.map(n=>n*r)}function JBe(e,r){return e.map(()=>r||BY).splice(0,e.length-1)}function Oy({duration:e=300,keyframes:r,times:n,ease:o="easeInOut"}){const i=IY(o)?o.map(FY):FY(o),a={done:!1,value:r[0]},l=QBe(n&&n.length===r.length?n:lX(r),e),s=ZBe(l,r,{ease:Array.isArray(i)?i:JBe(r,i)});return{calculatedDuration:e,next:c=>(a.value=s(c),a.done=c>=e,a)}}const eIe=e=>e!==null;function VE(e,{repeat:r,repeatType:n="loop"},o,i=1){const a=e.filter(eIe),l=i<0||r&&n!=="loop"&&r%2===1?0:a.length-1;return!l||o===void 0?a[l]:o}const tIe={decay:FE,inertia:FE,tween:Oy,keyframes:Oy,spring:Iy};function sX(e){typeof e.type=="string"&&(e.type=tIe[e.type])}class qE{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(r=>{this.resolve=r})}notifyFinished(){this.resolve()}then(r,n){return this.finished.then(r,n)}}const rIe=e=>e/100;class HE extends qE{constructor(r){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{const{motionValue:n}=this.options;n&&n.updatedAt!==li.now()&&this.tick(li.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),this.options.onStop?.())},this.options=r,this.initAnimation(),this.play(),r.autoplay===!1&&this.pause()}initAnimation(){const{options:r}=this;sX(r);const{type:n=Oy,repeat:o=0,repeatDelay:i=0,repeatType:a,velocity:l=0}=r;let{keyframes:s}=r;const c=n||Oy;c!==Oy&&typeof s[0]!="number"&&(this.mixKeyframes=Ay(rIe,tX(s[0],s[1])),s=[0,100]);const d=c({...r,keyframes:s});a==="mirror"&&(this.mirroredGenerator=c({...r,keyframes:[...s].reverse(),velocity:-l})),d.calculatedDuration===null&&(d.calculatedDuration=IE(d));const{calculatedDuration:u}=d;this.calculatedDuration=u,this.resolvedDuration=u+i,this.totalDuration=this.resolvedDuration*(o+1)-i,this.generator=d}updateTime(r){const n=Math.round(r-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=n}tick(r,n=!1){const{generator:o,totalDuration:i,mixKeyframes:a,mirroredGenerator:l,resolvedDuration:s,calculatedDuration:c}=this;if(this.startTime===null)return o.next(0);const{delay:d=0,keyframes:u,repeat:p,repeatType:f,repeatDelay:m,type:v,onUpdate:w,finalKeyframe:x}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,r):this.speed<0&&(this.startTime=Math.min(r-i/this.speed,this.startTime)),n?this.currentTime=r:this.updateTime(r);const k=this.currentTime-d*(this.playbackSpeed>=0?1:-1),C=this.playbackSpeed>=0?k<0:k>i;this.currentTime=Math.max(k,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=i);let _=this.currentTime,$=o;if(p){const z=Math.min(this.currentTime,i)/s;let j=Math.floor(z),I=z%1;!I&&z>=1&&(I=1),I===1&&j--,j=Math.min(j,p+1),j%2&&(f==="reverse"?(I=1-I,m&&(I-=m/s)):f==="mirror"&&($=l)),_=oc(0,1,I)*s}const R=C?{done:!1,value:u[0]}:$.next(_);a&&(R.value=a(R.value));let{done:T}=R;!C&&c!==null&&(T=this.playbackSpeed>=0?this.currentTime>=i:this.currentTime<=0);const A=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&T);return A&&v!==FE&&(R.value=VE(u,this.options,x,this.speed)),w&&w(R.value),A&&this.finish(),R}then(r,n){return this.finished.then(r,n)}get duration(){return fa(this.calculatedDuration)}get iterationDuration(){const{delay:r=0}=this.options||{};return this.duration+fa(r)}get time(){return fa(this.currentTime)}set time(r){r=al(r),this.currentTime=r,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=r:this.driver&&(this.startTime=this.driver.now()-r/this.playbackSpeed),this.driver?.start(!1)}get speed(){return this.playbackSpeed}set speed(r){this.updateTime(li.now());const n=this.playbackSpeed!==r;this.playbackSpeed=r,n&&(this.time=fa(this.currentTime))}play(){if(this.isStopped)return;const{driver:r=VBe,startTime:n}=this.options;this.driver||(this.driver=r(i=>this.tick(i))),this.options.onPlay?.();const o=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=o):this.holdTime!==null?this.startTime=o-this.holdTime:this.startTime||(this.startTime=n??o),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(li.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(r){return this.startTime=0,this.tick(r,!0)}attachTimeline(r){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),r.observe(this)}}function nIe(e){for(let r=1;re*180/Math.PI,UE=e=>{const r=xp(Math.atan2(e[1],e[0]));return WE(r)},oIe={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:UE,rotateZ:UE,skewX:e=>xp(Math.atan(e[1])),skewY:e=>xp(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},WE=e=>(e=e%360,e<0&&(e+=360),e),cX=UE,dX=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),uX=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),iIe={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:dX,scaleY:uX,scale:e=>(dX(e)+uX(e))/2,rotateX:e=>WE(xp(Math.atan2(e[6],e[5]))),rotateY:e=>WE(xp(Math.atan2(-e[2],e[0]))),rotateZ:cX,rotate:cX,skewX:e=>xp(Math.atan(e[4])),skewY:e=>xp(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function GE(e){return e.includes("scale")?1:0}function YE(e,r){if(!e||e==="none")return GE(r);const n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let o,i;if(n)o=iIe,i=n;else{const s=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);o=oIe,i=s}if(!i)return GE(r);const a=o[r],l=i[1].split(",").map(lIe);return typeof a=="function"?a(l):l[a]}const aIe=(e,r)=>{const{transform:n="none"}=getComputedStyle(e);return YE(n,r)};function lIe(e){return parseFloat(e.trim())}const Jf=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],eg=new Set(Jf),pX=e=>e===Zf||e===_t,sIe=new Set(["x","y","z"]),cIe=Jf.filter(e=>!sIe.has(e));function dIe(e){const r=[];return cIe.forEach(n=>{const o=e.getValue(n);o!==void 0&&(r.push([n,o.get()]),o.set(n.startsWith("scale")?1:0))}),r}const wp={width:({x:e},{paddingLeft:r="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(r)-parseFloat(n),height:({y:e},{paddingTop:r="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(r)-parseFloat(n),top:(e,{top:r})=>parseFloat(r),left:(e,{left:r})=>parseFloat(r),bottom:({y:e},{top:r})=>parseFloat(r)+(e.max-e.min),right:({x:e},{left:r})=>parseFloat(r)+(e.max-e.min),x:(e,{transform:r})=>YE(r,"x"),y:(e,{transform:r})=>YE(r,"y")};wp.translateX=wp.x,wp.translateY=wp.y;const kp=new Set;let XE=!1,KE=!1,ZE=!1;function hX(){if(KE){const e=Array.from(kp).filter(o=>o.needsMeasurement),r=new Set(e.map(o=>o.element)),n=new Map;r.forEach(o=>{const i=dIe(o);i.length&&(n.set(o,i),o.render())}),e.forEach(o=>o.measureInitialState()),r.forEach(o=>{o.render();const i=n.get(o);i&&i.forEach(([a,l])=>{o.getValue(a)?.set(l)})}),e.forEach(o=>o.measureEndState()),e.forEach(o=>{o.suspendedScrollY!==void 0&&window.scrollTo(0,o.suspendedScrollY)})}KE=!1,XE=!1,kp.forEach(e=>e.complete(ZE)),kp.clear()}function fX(){kp.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(KE=!0)})}function uIe(){ZE=!0,fX(),hX(),ZE=!1}class QE{constructor(r,n,o,i,a,l=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...r],this.onComplete=n,this.name=o,this.motionValue=i,this.element=a,this.isAsync=l}scheduleResolve(){this.state="scheduled",this.isAsync?(kp.add(this),XE||(XE=!0,Dr.read(fX),Dr.resolveKeyframes(hX))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:r,name:n,element:o,motionValue:i}=this;if(r[0]===null){const a=i?.get(),l=r[r.length-1];if(a!==void 0)r[0]=a;else if(o&&n){const s=o.readValue(n,l);s!=null&&(r[0]=s)}r[0]===void 0&&(r[0]=l),i&&a===void 0&&i.set(r[0])}nIe(r)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(r=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,r),kp.delete(this)}cancel(){this.state==="scheduled"&&(kp.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const pIe=e=>e.startsWith("--");function hIe(e,r,n){pIe(r)?e.style.setProperty(r,n):e.style[r]=n}const fIe=SE(()=>window.ScrollTimeline!==void 0),gIe={};function mIe(e,r){const n=SE(e);return()=>gIe[r]??n()}const gX=mIe(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),Ly=([e,r,n,o])=>`cubic-bezier(${e}, ${r}, ${n}, ${o})`,mX={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Ly([0,.65,.55,1]),circOut:Ly([.55,0,1,.45]),backIn:Ly([.31,.01,.66,-.59]),backOut:Ly([.33,1.53,.69,.99])};function yX(e,r){if(e)return typeof e=="function"?gX()?rX(e,r):"ease-out":LY(e)?Ly(e):Array.isArray(e)?e.map(n=>yX(n,r)||mX.easeOut):mX[e]}function yIe(e,r,n,{delay:o=0,duration:i=300,repeat:a=0,repeatType:l="loop",ease:s="easeOut",times:c}={},d=void 0){const u={[r]:n};c&&(u.offset=c);const p=yX(s,i);Array.isArray(p)&&(u.easing=p);const f={delay:o,duration:i,easing:Array.isArray(p)?"linear":p,fill:"both",iterations:a+1,direction:l==="reverse"?"alternate":"normal"};return d&&(f.pseudoElement=d),e.animate(u,f)}function JE(e){return typeof e=="function"&&"applyToOptions"in e}function vIe({type:e,...r}){return JE(e)&&gX()?e.applyToOptions(r):(r.duration??(r.duration=300),r.ease??(r.ease="easeOut"),r)}class bIe extends qE{constructor(r){if(super(),this.finishedTime=null,this.isStopped=!1,!r)return;const{element:n,name:o,keyframes:i,pseudoElement:a,allowFlatten:l=!1,finalKeyframe:s,onComplete:c}=r;this.isPseudoElement=!!a,this.allowFlatten=l,this.options=r,_E(typeof r.type!="string");const d=vIe(r);this.animation=yIe(n,o,i,d,a),d.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!a){const u=VE(i,this.options,s,this.speed);this.updateMotionValue?this.updateMotionValue(u):hIe(n,o,u),this.animation.cancel()}c?.(),this.notifyFinished()}}play(){this.isStopped||(this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:r}=this;r==="idle"||r==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){this.isPseudoElement||this.animation.commitStyles?.()}get duration(){const r=this.animation.effect?.getComputedTiming?.().duration||0;return fa(Number(r))}get iterationDuration(){const{delay:r=0}=this.options||{};return this.duration+fa(r)}get time(){return fa(Number(this.animation.currentTime)||0)}set time(r){this.finishedTime=null,this.animation.currentTime=al(r)}get speed(){return this.animation.playbackRate}set speed(r){r<0&&(this.finishedTime=null),this.animation.playbackRate=r}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return Number(this.animation.startTime)}set startTime(r){this.animation.startTime=r}attachTimeline({timeline:r,observe:n}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,r&&fIe()?(this.animation.timeline=r,ha):n(this)}}const vX={anticipate:PY,backInOut:DY,circInOut:NY};function xIe(e){return e in vX}function wIe(e){typeof e.ease=="string"&&xIe(e.ease)&&(e.ease=vX[e.ease])}const bX=10;class kIe extends bIe{constructor(r){wIe(r),sX(r),super(r),r.startTime&&(this.startTime=r.startTime),this.options=r}updateMotionValue(r){const{motionValue:n,onUpdate:o,onComplete:i,element:a,...l}=this.options;if(!n)return;if(r!==void 0){n.set(r);return}const s=new HE({...l,autoplay:!1}),c=al(this.finishedTime??this.time);n.setWithVelocity(s.sample(c-bX).value,s.sample(c).value,bX),s.stop()}}const xX=(e,r)=>r==="zIndex"?!1:!!(typeof e=="number"||Array.isArray(e)||typeof e=="string"&&(zd.test(e)||e==="0")&&!e.startsWith("url("));function _Ie(e){const r=e[0];if(e.length===1)return!0;for(let n=0;nObject.hasOwnProperty.call(Element.prototype,"animate"));function $Ie(e){const{motionValue:r,name:n,repeatDelay:o,repeatType:i,damping:a,type:l}=e;if(!(r?.owner?.current instanceof HTMLElement))return!1;const{onUpdate:s,transformTemplate:c}=r.owner.getProps();return CIe()&&n&&EIe.has(n)&&(n!=="transform"||!c)&&!s&&!o&&i!=="mirror"&&a!==0&&l!=="inertia"}const RIe=40;class zIe extends qE{constructor({autoplay:r=!0,delay:n=0,type:o="keyframes",repeat:i=0,repeatDelay:a=0,repeatType:l="loop",keyframes:s,name:c,motionValue:d,element:u,...p}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=li.now();const f={autoplay:r,delay:n,type:o,repeat:i,repeatDelay:a,repeatType:l,name:c,motionValue:d,element:u,...p},m=u?.KeyframeResolver||QE;this.keyframeResolver=new m(s,(v,w,x)=>this.onKeyframesResolved(v,w,f,!x),c,d,u),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(r,n,o,i){this.keyframeResolver=void 0;const{name:a,type:l,velocity:s,delay:c,isHandoff:d,onUpdate:u}=o;this.resolvedAt=li.now(),SIe(r,a,l,s)||((ic.instantAnimations||!c)&&u?.(VE(r,o,n)),r[0]=r[r.length-1],eC(o),o.repeat=0);const p={startTime:i?this.resolvedAt?this.resolvedAt-this.createdAt>RIe?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:n,...o,keyframes:r},f=!d&&$Ie(p)?new kIe({...p,element:p.motionValue.owner.current}):new HE(p);f.finished.then(()=>this.notifyFinished()).catch(ha),this.pendingTimeline&&(this.stopTimeline=f.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=f}get finished(){return this._animation?this.animation.finished:this._finished}then(r,n){return this.finished.finally(r).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),uIe()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(r){this.animation.time=r}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(r){this.animation.speed=r}get startTime(){return this.animation.startTime}attachTimeline(r){return this._animation?this.stopTimeline=this.animation.attachTimeline(r):this.pendingTimeline=r,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}class TIe{constructor(r){this.stop=()=>this.runAll("stop"),this.animations=r.filter(Boolean)}get finished(){return Promise.all(this.animations.map(r=>r.finished))}getAll(r){return this.animations[0][r]}setAll(r,n){for(let o=0;oo.attachTimeline(r));return()=>{n.forEach((o,i)=>{o&&o(),this.animations[i].stop()})}}get time(){return this.getAll("time")}set time(r){this.setAll("time",r)}get speed(){return this.getAll("speed")}set speed(r){this.setAll("speed",r)}get state(){return this.getAll("state")}get startTime(){return this.getAll("startTime")}get duration(){return wX(this.animations,"duration")}get iterationDuration(){return wX(this.animations,"iterationDuration")}runAll(r){this.animations.forEach(n=>n[r]())}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}function wX(e,r){let n=0;for(let o=0;on&&(n=i)}return n}class jIe extends TIe{then(r,n){return this.finished.finally(r).then(()=>{})}}const AIe=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function DIe(e){const r=AIe.exec(e);if(!r)return[,];const[,n,o,i]=r;return[`--${n??o}`,i]}function kX(e,r,n=1){const[o,i]=DIe(e);if(!o)return;const a=window.getComputedStyle(r).getPropertyValue(o);if(a){const l=a.trim();return EY(l)?parseFloat(l):l}return zE(i)?kX(i,r,n+1):i}function tC(e,r){return e?.[r]??e?.default??e}const _X=new Set(["width","height","top","left","right","bottom",...Jf]),PIe={test:e=>e==="auto",parse:e=>e},SX=e=>r=>r.test(e),EX=[Zf,_t,os,Rd,CBe,EBe,PIe],CX=e=>EX.find(SX(e));function MIe(e){return typeof e=="number"?e===0:e!==null?e==="none"||e==="0"||$Y(e):!0}const NIe=new Set(["brightness","contrast","saturate","opacity"]);function BIe(e){const[r,n]=e.slice(0,-1).split("(");if(r==="drop-shadow")return e;const[o]=n.match(TE)||[];if(!o)return e;const i=n.replace(o,"");let a=NIe.has(r)?1:0;return o!==n&&(a*=100),r+"("+a+i+")"}const IIe=/\b([a-z-]*)\(.*?\)/gu,rC={...zd,getAnimatableNone:e=>{const r=e.match(IIe);return r?r.map(BIe).join(" "):e}},$X={...Zf,transform:Math.round},OIe={rotate:Rd,rotateX:Rd,rotateY:Rd,rotateZ:Rd,scale:q3,scaleX:q3,scaleY:q3,scaleZ:q3,skew:Rd,skewX:Rd,skewY:Rd,distance:_t,translateX:_t,translateY:_t,translateZ:_t,x:_t,y:_t,z:_t,perspective:_t,transformPerspective:_t,opacity:Py,originX:WY,originY:WY,originZ:_t},nC={borderWidth:_t,borderTopWidth:_t,borderRightWidth:_t,borderBottomWidth:_t,borderLeftWidth:_t,borderRadius:_t,radius:_t,borderTopLeftRadius:_t,borderTopRightRadius:_t,borderBottomRightRadius:_t,borderBottomLeftRadius:_t,width:_t,maxWidth:_t,height:_t,maxHeight:_t,top:_t,right:_t,bottom:_t,left:_t,padding:_t,paddingTop:_t,paddingRight:_t,paddingBottom:_t,paddingLeft:_t,margin:_t,marginTop:_t,marginRight:_t,marginBottom:_t,marginLeft:_t,backgroundPositionX:_t,backgroundPositionY:_t,...OIe,zIndex:$X,fillOpacity:Py,strokeOpacity:Py,numOctaves:$X},LIe={...nC,color:Sn,backgroundColor:Sn,outlineColor:Sn,fill:Sn,stroke:Sn,borderColor:Sn,borderTopColor:Sn,borderRightColor:Sn,borderBottomColor:Sn,borderLeftColor:Sn,filter:rC,WebkitFilter:rC},RX=e=>LIe[e];function zX(e,r){let n=RX(e);return n!==rC&&(n=zd),n.getAnimatableNone?n.getAnimatableNone(r):void 0}const FIe=new Set(["auto","none","0"]);function VIe(e,r,n){let o=0,i;for(;o{r.getValue(s).set(c)}),this.resolveNoneKeyframes()}}function TX(e,r,n){if(e instanceof EventTarget)return[e];if(typeof e=="string"){let o=document;const i=n?.[e]??o.querySelectorAll(e);return i?Array.from(i):[]}return Array.from(e)}const jX=(e,r)=>r&&typeof e=="number"?r.transform(e):e;function AX(e){return CY(e)&&"offsetHeight"in e}const DX=30,HIe=e=>!isNaN(parseFloat(e));class UIe{constructor(r,n={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=o=>{const i=li.now();if(this.updatedAt!==i&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(o),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const a of this.dependents)a.dirty()},this.hasAnimated=!1,this.setCurrent(r),this.owner=n.owner}setCurrent(r){this.current=r,this.updatedAt=li.now(),this.canTrackVelocity===null&&r!==void 0&&(this.canTrackVelocity=HIe(this.current))}setPrevFrameValue(r=this.current){this.prevFrameValue=r,this.prevUpdatedAt=this.updatedAt}onChange(r){return this.on("change",r)}on(r,n){this.events[r]||(this.events[r]=new EE);const o=this.events[r].add(n);return r==="change"?()=>{o(),Dr.read(()=>{this.events.change.getSize()||this.stop()})}:o}clearListeners(){for(const r in this.events)this.events[r].clear()}attach(r,n){this.passiveEffect=r,this.stopPassiveEffect=n}set(r){this.passiveEffect?this.passiveEffect(r,this.updateAndNotify):this.updateAndNotify(r)}setWithVelocity(r,n,o){this.set(n),this.prev=void 0,this.prevFrameValue=r,this.prevUpdatedAt=this.updatedAt-o}jump(r,n=!0){this.updateAndNotify(r),this.prev=r,this.prevUpdatedAt=this.prevFrameValue=void 0,n&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(r){this.dependents||(this.dependents=new Set),this.dependents.add(r)}removeDependent(r){this.dependents&&this.dependents.delete(r)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const r=li.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||r-this.updatedAt>DX)return 0;const n=Math.min(this.updatedAt-this.prevUpdatedAt,DX);return RY(parseFloat(this.current)-parseFloat(this.prevFrameValue),n)}start(r){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=r(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function _p(e,r){return new UIe(e,r)}const{schedule:oC}=VY(queueMicrotask,!1),ll={x:!1,y:!1};function PX(){return ll.x||ll.y}function WIe(e){return e==="x"||e==="y"?ll[e]?null:(ll[e]=!0,()=>{ll[e]=!1}):ll.x||ll.y?null:(ll.x=ll.y=!0,()=>{ll.x=ll.y=!1})}function MX(e,r){const n=TX(e),o=new AbortController,i={passive:!0,...r,signal:o.signal};return[n,i,()=>o.abort()]}function NX(e){return!(e.pointerType==="touch"||PX())}function GIe(e,r,n={}){const[o,i,a]=MX(e,n),l=s=>{if(!NX(s))return;const{target:c}=s,d=r(c,s);if(typeof d!="function"||!c)return;const u=p=>{NX(p)&&(d(p),c.removeEventListener("pointerleave",u))};c.addEventListener("pointerleave",u,i)};return o.forEach(s=>{s.addEventListener("pointerenter",l,i)}),a}const BX=(e,r)=>r?e===r?!0:BX(e,r.parentElement):!1,iC=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1,YIe=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function XIe(e){return YIe.has(e.tagName)||e.tabIndex!==-1}const W3=new WeakSet;function IX(e){return r=>{r.key==="Enter"&&e(r)}}function aC(e,r){e.dispatchEvent(new PointerEvent("pointer"+r,{isPrimary:!0,bubbles:!0}))}const KIe=(e,r)=>{const n=e.currentTarget;if(!n)return;const o=IX(()=>{if(W3.has(n))return;aC(n,"down");const i=IX(()=>{aC(n,"up")}),a=()=>aC(n,"cancel");n.addEventListener("keyup",i,r),n.addEventListener("blur",a,r)});n.addEventListener("keydown",o,r),n.addEventListener("blur",()=>n.removeEventListener("keydown",o),r)};function OX(e){return iC(e)&&!PX()}function ZIe(e,r,n={}){const[o,i,a]=MX(e,n),l=s=>{const c=s.currentTarget;if(!OX(s))return;W3.add(c);const d=r(c,s),u=(m,v)=>{window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",f),W3.has(c)&&W3.delete(c),OX(m)&&typeof d=="function"&&d(m,{success:v})},p=m=>{u(m,c===window||c===document||n.useGlobalTarget||BX(c,m.target))},f=m=>{u(m,!1)};window.addEventListener("pointerup",p,i),window.addEventListener("pointercancel",f,i)};return o.forEach(s=>{(n.useGlobalTarget?window:s).addEventListener("pointerdown",l,i),AX(s)&&(s.addEventListener("focus",c=>KIe(c,i)),!XIe(s)&&!s.hasAttribute("tabindex")&&(s.tabIndex=0))}),a}function lC(e){return CY(e)&&"ownerSVGElement"in e}function LX(e){return lC(e)&&e.tagName==="svg"}const to=e=>!!(e&&e.getVelocity),QIe=[...EX,Sn,zd],JIe=e=>QIe.find(SX(e));function sC(e){return typeof e=="object"&&!Array.isArray(e)}function FX(e,r,n,o){return typeof e=="string"&&sC(r)?TX(e,n,o):e instanceof NodeList?Array.from(e):Array.isArray(e)?e:[e]}function eOe(e,r,n){return e*(r+1)}function VX(e,r,n,o){return typeof r=="number"?r:r.startsWith("-")||r.startsWith("+")?Math.max(0,e+parseFloat(r)):r==="<"?n:r.startsWith("<")?Math.max(0,n+parseFloat(r.slice(1))):o.get(r)??e}function tOe(e,r,n){for(let o=0;or&&i.at{const j=lOe($),{delay:I=0,times:N=lX(j),type:L="keyframes",repeat:H,repeatType:P,repeatDelay:V=0,...B}=R;let{ease:F=r.ease||"easeOut",duration:q}=R;const G=typeof I=="function"?I(A,z):I,U=j.length,Y=JE(L)?L:i?.[L||"keyframes"];if(U<=2&&Y){let Z=100;if(U===2&&dOe(j)){const te=j[1]-j[0];Z=Math.abs(te)}const Q={...B};q!==void 0&&(Q.duration=al(q));const ie=nX(Q,Z,Y);F=ie.ease,q=ie.duration}q??(q=a);const K=p+G;N.length===1&&N[0]===0&&(N[1]=1);const O=N.length-j.length;if(O>0&&aX(N,O),j.length===1&&j.unshift(null),H){q=eOe(q,H);const Z=[...j],Q=[...N];F=Array.isArray(F)?[...F]:[F];const ie=[...F];for(let te=0;te{for(const w in m){const x=m[w];x.sort(oOe);const k=[],C=[],_=[];for(let R=0;Rtypeof e=="number",dOe=e=>e.every(cOe),Fy=new WeakMap,cC=e=>Array.isArray(e);function UX(e){const r=[{},{}];return e?.values.forEach((n,o)=>{r[0][o]=n.get(),r[1][o]=n.getVelocity()}),r}function dC(e,r,n,o){if(typeof r=="function"){const[i,a]=UX(o);r=r(n!==void 0?n:e.custom,i,a)}if(typeof r=="string"&&(r=e.variants&&e.variants[r]),typeof r=="function"){const[i,a]=UX(o);r=r(n!==void 0?n:e.custom,i,a)}return r}function tg(e,r,n){const o=e.getProps();return dC(o,r,n!==void 0?n:o.custom,e)}function uOe(e,r,n){e.hasValue(r)?e.getValue(r).set(n):e.addValue(r,_p(n))}function pOe(e){return cC(e)?e[e.length-1]||0:e}function hOe(e,r){const n=tg(e,r);let{transitionEnd:o={},transition:i={},...a}=n||{};a={...a,...o};for(const l in a){const s=pOe(a[l]);uOe(e,l,s)}}function fOe(e){return!!(to(e)&&e.add)}function uC(e,r){const n=e.getValue("willChange");if(fOe(n))return n.add(r);if(!n&&ic.WillChange){const o=new ic.WillChange("auto");e.addValue("willChange",o),o.add(r)}}const pC=e=>e.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),gOe="framerAppearId",WX="data-"+pC(gOe);function GX(e){return e.props[WX]}const mOe=e=>e!==null;function yOe(e,{repeat:r,repeatType:n="loop"},o){const i=e.filter(mOe),a=r&&n!=="loop"&&r%2===1?0:i.length-1;return i[a]}const vOe={type:"spring",stiffness:500,damping:25,restSpeed:10},bOe=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),xOe={type:"keyframes",duration:.8},wOe={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},kOe=(e,{keyframes:r})=>r.length>2?xOe:eg.has(e)?e.startsWith("scale")?bOe(r[1]):vOe:wOe;function _Oe({when:e,delay:r,delayChildren:n,staggerChildren:o,staggerDirection:i,repeat:a,repeatType:l,repeatDelay:s,from:c,elapsed:d,...u}){return!!Object.keys(u).length}const hC=(e,r,n,o={},i,a)=>l=>{const s=tC(o,e)||{},c=s.delay||o.delay||0;let{elapsed:d=0}=o;d=d-al(c);const u={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:r.getVelocity(),...s,delay:-d,onUpdate:f=>{r.set(f),s.onUpdate&&s.onUpdate(f)},onComplete:()=>{l(),s.onComplete&&s.onComplete()},name:e,motionValue:r,element:a?void 0:i};_Oe(s)||Object.assign(u,kOe(e,u)),u.duration&&(u.duration=al(u.duration)),u.repeatDelay&&(u.repeatDelay=al(u.repeatDelay)),u.from!==void 0&&(u.keyframes[0]=u.from);let p=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(eC(u),u.delay===0&&(p=!0)),(ic.instantAnimations||ic.skipAnimations)&&(p=!0,eC(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,p&&!a&&r.get()!==void 0){const f=yOe(u.keyframes,s);if(f!==void 0){Dr.update(()=>{u.onUpdate(f),u.onComplete()});return}}return s.isSync?new HE(u):new zIe(u)};function SOe({protectedKeys:e,needsAnimating:r},n){const o=e.hasOwnProperty(n)&&r[n]!==!0;return r[n]=!1,o}function fC(e,r,{delay:n=0,transitionOverride:o,type:i}={}){let{transition:a=e.getDefaultTransition(),transitionEnd:l,...s}=r;o&&(a=o);const c=[],d=i&&e.animationState&&e.animationState.getState()[i];for(const u in s){const p=e.getValue(u,e.latestValues[u]??null),f=s[u];if(f===void 0||d&&SOe(d,u))continue;const m={delay:n,...tC(a||{},u)},v=p.get();if(v!==void 0&&!p.isAnimating&&!Array.isArray(f)&&f===v&&!m.velocity)continue;let w=!1;if(window.MotionHandoffAnimation){const k=GX(e);if(k){const C=window.MotionHandoffAnimation(k,u,Dr);C!==null&&(m.startTime=C,w=!0)}}uC(e,u),p.start(hC(u,p,f,e.shouldReduceMotion&&_X.has(u)?{type:!1}:m,e,w));const x=p.animation;x&&c.push(x)}return l&&Promise.all(c).then(()=>{Dr.update(()=>{l&&hOe(e,l)})}),c}function YX({top:e,left:r,right:n,bottom:o}){return{x:{min:r,max:n},y:{min:e,max:o}}}function EOe({x:e,y:r}){return{top:r.min,right:e.max,bottom:r.max,left:e.min}}function COe(e,r){if(!r)return e;const n=r({x:e.left,y:e.top}),o=r({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:o.y,right:o.x}}function gC(e){return e===void 0||e===1}function mC({scale:e,scaleX:r,scaleY:n}){return!gC(e)||!gC(r)||!gC(n)}function Sp(e){return mC(e)||XX(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function XX(e){return KX(e.x)||KX(e.y)}function KX(e){return e&&e!=="0%"}function G3(e,r,n){const o=e-n,i=r*o;return n+i}function ZX(e,r,n,o,i){return i!==void 0&&(e=G3(e,i,o)),G3(e,n,o)+r}function yC(e,r=0,n=1,o,i){e.min=ZX(e.min,r,n,o,i),e.max=ZX(e.max,r,n,o,i)}function QX(e,{x:r,y:n}){yC(e.x,r.translate,r.scale,r.originPoint),yC(e.y,n.translate,n.scale,n.originPoint)}const JX=.999999999999,eK=1.0000000000001;function $Oe(e,r,n,o=!1){const i=n.length;if(!i)return;r.x=r.y=1;let a,l;for(let s=0;sJX&&(r.x=1),r.yJX&&(r.y=1)}function rg(e,r){e.min=e.min+r,e.max=e.max+r}function tK(e,r,n,o,i=.5){const a=Lr(e.min,e.max,i);yC(e,r,n,a,o)}function ng(e,r){tK(e.x,r.x,r.scaleX,r.scale,r.originX),tK(e.y,r.y,r.scaleY,r.scale,r.originY)}function rK(e,r){return YX(COe(e.getBoundingClientRect(),r))}function ROe(e,r,n){const o=rK(e,n),{scroll:i}=r;return i&&(rg(o.x,i.offset.x),rg(o.y,i.offset.y)),o}const nK={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},og={};for(const e in nK)og[e]={isEnabled:r=>nK[e].some(n=>!!r[n])};const oK=()=>({translate:0,scale:1,origin:0,originPoint:0}),ig=()=>({x:oK(),y:oK()}),iK=()=>({min:0,max:0}),En=()=>({x:iK(),y:iK()}),vC=typeof window<"u",Y3={current:null},bC={current:!1};function aK(){if(bC.current=!0,!!vC)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),r=()=>Y3.current=e.matches;e.addEventListener("change",r),r()}else Y3.current=!1}function X3(e){return e!==null&&typeof e=="object"&&typeof e.start=="function"}function Vy(e){return typeof e=="string"||Array.isArray(e)}const xC=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],wC=["initial",...xC];function K3(e){return X3(e.animate)||wC.some(r=>Vy(e[r]))}function lK(e){return!!(K3(e)||e.variants)}function zOe(e,r,n){for(const o in r){const i=r[o],a=n[o];if(to(i))e.addValue(o,i);else if(to(a))e.addValue(o,_p(i,{owner:e}));else if(a!==i)if(e.hasValue(o)){const l=e.getValue(o);l.liveStyle===!0?l.jump(i):l.hasAnimated||l.set(i)}else{const l=e.getStaticValue(o);e.addValue(o,_p(l!==void 0?l:i,{owner:e}))}}for(const o in n)r[o]===void 0&&e.removeValue(o);return r}const sK=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class cK{scrapeMotionValuesFromProps(r,n,o){return{}}constructor({parent:r,props:n,presenceContext:o,reducedMotionConfig:i,blockInitialAnimation:a,visualState:l},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=QE,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const f=li.now();this.renderScheduledAtthis.bindToMotionValue(o,n)),bC.current||aK(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:Y3.current,this.parent?.addChild(this),this.update(this.props,this.presenceContext)}unmount(){this.projection&&this.projection.unmount(),$d(this.notifyUpdate),$d(this.render),this.valueSubscriptions.forEach(r=>r()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const r in this.events)this.events[r].clear();for(const r in this.features){const n=this.features[r];n&&(n.unmount(),n.isMounted=!1)}this.current=null}addChild(r){this.children.add(r),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(r)}removeChild(r){this.children.delete(r),this.enteringChildren&&this.enteringChildren.delete(r)}bindToMotionValue(r,n){this.valueSubscriptions.has(r)&&this.valueSubscriptions.get(r)();const o=eg.has(r);o&&this.onBindTransform&&this.onBindTransform();const i=n.on("change",l=>{this.latestValues[r]=l,this.props.onUpdate&&Dr.preRender(this.notifyUpdate),o&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let a;window.MotionCheckAppearSync&&(a=window.MotionCheckAppearSync(this,r,n)),this.valueSubscriptions.set(r,()=>{i(),a&&a(),n.owner&&n.stop()})}sortNodePosition(r){return!this.current||!this.sortInstanceNodePosition||this.type!==r.type?0:this.sortInstanceNodePosition(this.current,r.current)}updateFeatures(){let r="animation";for(r in og){const n=og[r];if(!n)continue;const{isEnabled:o,Feature:i}=n;if(!this.features[r]&&i&&o(this.props)&&(this.features[r]=new i(this)),this.features[r]){const a=this.features[r];a.isMounted?a.update():(a.mount(),a.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):En()}getStaticValue(r){return this.latestValues[r]}setStaticValue(r,n){this.latestValues[r]=n}update(r,n){(r.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=r,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let o=0;on.variantChildren.delete(r)}addValue(r,n){const o=this.values.get(r);n!==o&&(o&&this.removeValue(r),this.bindToMotionValue(r,n),this.values.set(r,n),this.latestValues[r]=n.get())}removeValue(r){this.values.delete(r);const n=this.valueSubscriptions.get(r);n&&(n(),this.valueSubscriptions.delete(r)),delete this.latestValues[r],this.removeValueFromRenderState(r,this.renderState)}hasValue(r){return this.values.has(r)}getValue(r,n){if(this.props.values&&this.props.values[r])return this.props.values[r];let o=this.values.get(r);return o===void 0&&n!==void 0&&(o=_p(n===null?void 0:n,{owner:this}),this.addValue(r,o)),o}readValue(r,n){let o=this.latestValues[r]!==void 0||!this.current?this.latestValues[r]:this.getBaseTargetFromProps(this.props,r)??this.readValueFromInstance(this.current,r,this.options);return o!=null&&(typeof o=="string"&&(EY(o)||$Y(o))?o=parseFloat(o):!JIe(o)&&zd.test(n)&&(o=zX(r,n)),this.setBaseTarget(r,to(o)?o.get():o)),to(o)?o.get():o}setBaseTarget(r,n){this.baseTarget[r]=n}getBaseTarget(r){const{initial:n}=this.props;let o;if(typeof n=="string"||typeof n=="object"){const a=dC(this.props,n,this.presenceContext?.custom);a&&(o=a[r])}if(n&&o!==void 0)return o;const i=this.getBaseTargetFromProps(this.props,r);return i!==void 0&&!to(i)?i:this.initialValues[r]!==void 0&&o===void 0?void 0:this.baseTarget[r]}on(r,n){return this.events[r]||(this.events[r]=new EE),this.events[r].add(n)}notify(r,...n){this.events[r]&&this.events[r].notify(...n)}scheduleRenderMicrotask(){oC.render(this.render)}}class dK extends cK{constructor(){super(...arguments),this.KeyframeResolver=qIe}sortInstanceNodePosition(r,n){return r.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(r,n){return r.style?r.style[n]:void 0}removeValueFromRenderState(r,{vars:n,style:o}){delete n[r],delete o[r]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:r}=this.props;to(r)&&(this.childSubscription=r.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}}const TOe={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},jOe=Jf.length;function AOe(e,r,n){let o="",i=!0;for(let a=0;a{if(!r.target)return e;if(typeof e=="string")if(_t.test(e))e=parseFloat(e);else return e;const n=pK(e,r.target.x),o=pK(e,r.target.y);return`${n}% ${o}%`}},DOe={correct:(e,{treeScale:r,projectionDelta:n})=>{const o=e,i=zd.parse(e);if(i.length>5)return o;const a=zd.createTransformer(e),l=typeof i[0]!="number"?1:0,s=n.x.scale*r.x,c=n.y.scale*r.y;i[0+l]/=s,i[1+l]/=c;const d=Lr(s,c,.5);return typeof i[2+l]=="number"&&(i[2+l]/=d),typeof i[3+l]=="number"&&(i[3+l]/=d),a(i)}},_C={borderRadius:{...qy,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:qy,borderTopRightRadius:qy,borderBottomLeftRadius:qy,borderBottomRightRadius:qy,boxShadow:DOe};function hK(e,{layout:r,layoutId:n}){return eg.has(e)||e.startsWith("origin")||(r||n!==void 0)&&(!!_C[e]||e==="opacity")}function SC(e,r,n){const{style:o}=e,i={};for(const a in o)(to(o[a])||r.style&&to(r.style[a])||hK(a,e)||n?.getValue(a)?.liveStyle!==void 0)&&(i[a]=o[a]);return i}function POe(e){return window.getComputedStyle(e)}class fK extends dK{constructor(){super(...arguments),this.type="html",this.renderInstance=uK}readValueFromInstance(r,n){if(eg.has(n))return this.projection?.isProjecting?GE(n):aIe(r,n);{const o=POe(r),i=(HY(n)?o.getPropertyValue(n):o[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(r,{transformPagePoint:n}){return rK(r,n)}build(r,n,o){kC(r,n,o.transformTemplate)}scrapeMotionValuesFromProps(r,n,o){return SC(r,n,o)}}function MOe(e,r){return e in r}class NOe extends cK{constructor(){super(...arguments),this.type="object"}readValueFromInstance(r,n){if(MOe(n,r)){const o=r[n];if(typeof o=="string"||typeof o=="number")return o}}getBaseTargetFromProps(){}removeValueFromRenderState(r,n){delete n.output[r]}measureInstanceViewportBox(){return En()}build(r,n){Object.assign(r.output,n)}renderInstance(r,{output:n}){Object.assign(r,n)}sortInstanceNodePosition(){return 0}}const BOe={offset:"stroke-dashoffset",array:"stroke-dasharray"},IOe={offset:"strokeDashoffset",array:"strokeDasharray"};function OOe(e,r,n=1,o=0,i=!0){e.pathLength=1;const a=i?BOe:IOe;e[a.offset]=_t.transform(-o);const l=_t.transform(r),s=_t.transform(n);e[a.array]=`${l} ${s}`}function gK(e,{attrX:r,attrY:n,attrScale:o,pathLength:i,pathSpacing:a=1,pathOffset:l=0,...s},c,d,u){if(kC(e,s,d),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:p,style:f}=e;p.transform&&(f.transform=p.transform,delete p.transform),(f.transform||p.transformOrigin)&&(f.transformOrigin=p.transformOrigin??"50% 50%",delete p.transformOrigin),f.transform&&(f.transformBox=u?.transformBox??"fill-box",delete p.transformBox),r!==void 0&&(p.x=r),n!==void 0&&(p.y=n),o!==void 0&&(p.scale=o),i!==void 0&&OOe(p,i,a,l,!1)}const mK=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),yK=e=>typeof e=="string"&&e.toLowerCase()==="svg";function LOe(e,r,n,o){uK(e,r,void 0,o);for(const i in r.attrs)e.setAttribute(mK.has(i)?i:pC(i),r.attrs[i])}function vK(e,r,n){const o=SC(e,r,n);for(const i in e)if(to(e[i])||to(r[i])){const a=Jf.indexOf(i)!==-1?"attr"+i.charAt(0).toUpperCase()+i.substring(1):i;o[a]=e[i]}return o}class bK extends dK{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=En}getBaseTargetFromProps(r,n){return r[n]}readValueFromInstance(r,n){if(eg.has(n)){const o=RX(n);return o&&o.default||0}return n=mK.has(n)?n:pC(n),r.getAttribute(n)}scrapeMotionValuesFromProps(r,n,o){return vK(r,n,o)}build(r,n,o){gK(r,n,this.isSVGTag,o.transformTemplate,o.style)}renderInstance(r,n,o,i){LOe(r,n,o,i)}mount(r){this.isSVGTag=yK(r.tagName),super.mount(r)}}function FOe(e){const r={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=lC(e)&&!LX(e)?new bK(r):new fK(r);n.mount(e),Fy.set(e,n)}function VOe(e){const r={presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}},n=new NOe(r);n.mount(e),Fy.set(e,n)}function xK(e,r,n){const o=to(e)?e:_p(e);return o.start(hC("",o,r,n)),o.animation}function qOe(e,r){return to(e)||typeof e=="number"||typeof e=="string"&&!sC(r)}function wK(e,r,n,o){const i=[];if(qOe(e,r))i.push(xK(e,sC(r)&&r.default||r,n&&(n.default||n)));else{const a=FX(e,r,o),l=a.length;for(let s=0;s{o.push(...wK(l,i,a))}),o}function UOe(e){return Array.isArray(e)&&e.some(Array.isArray)}function WOe(e){function r(n,o,i){let a=[],l;if(UOe(n))a=HOe(n,o,e);else{const{onComplete:c,...d}=i||{};typeof c=="function"&&(l=c),a=wK(n,o,d,e)}const s=new jIe(a);return l&&s.finished.then(l),s}return r}const GOe=WOe();function YOe(e,r){const n=li.now(),o=({timestamp:i})=>{const a=i-n;a>=r&&($d(o),e(a-r))};return Dr.setup(o,!0),()=>$d(o)}const kK=(e,r)=>Math.abs(e-r);function XOe(e,r){const n=kK(e.x,r.x),o=kK(e.y,r.y);return Math.sqrt(n**2+o**2)}const Hy=S.createContext({});function ag(e){const r=S.useRef(null);return r.current===null&&(r.current=e()),r.current}const EC=vC?S.useLayoutEffect:S.useEffect,Z3=S.createContext(null),Ep=S.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"});function _K(e,r){if(typeof e=="function")return e(r);e!=null&&(e.current=r)}function KOe(...e){return r=>{let n=!1;const o=e.map(i=>{const a=_K(i,r);return!n&&typeof a=="function"&&(n=!0),a});if(n)return()=>{for(let i=0;i{const{width:d,height:u,top:p,left:f,right:m}=l.current;if(r||!a.current||!d||!u)return;const v=n==="left"?`left: ${f}`:`right: ${m}`;a.current.dataset.motionPopId=i;const w=document.createElement("style");s&&(w.nonce=s);const x=o??document.head;return x.appendChild(w),w.sheet&&w.sheet.insertRule(` - [data-motion-pop-id="${i}"] { - position: absolute !important; - width: ${d}px !important; - height: ${u}px !important; - ${v}px !important; - top: ${p}px !important; - } - `),()=>{x.contains(w)&&x.removeChild(w)}},[r]),y.jsx(QOe,{isPresent:r,childRef:a,sizeRef:l,children:S.cloneElement(e,{ref:c})})}const eLe=({children:e,initial:r,isPresent:n,onExitComplete:o,custom:i,presenceAffectsLayout:a,mode:l,anchorX:s,root:c})=>{const d=ag(tLe),u=S.useId();let p=!0,f=S.useMemo(()=>(p=!1,{id:u,initial:r,isPresent:n,custom:i,onExitComplete:m=>{d.set(m,!0);for(const v of d.values())if(!v)return;o&&o()},register:m=>(d.set(m,!1),()=>d.delete(m))}),[n,d,o]);return a&&p&&(f={...f}),S.useMemo(()=>{d.forEach((m,v)=>d.set(v,!1))},[n]),S.useEffect(()=>{!n&&!d.size&&o&&o()},[n]),l==="popLayout"&&(e=y.jsx(JOe,{isPresent:n,anchorX:s,root:c,children:e})),y.jsx(Z3.Provider,{value:f,children:e})};function tLe(){return new Map}function SK(e=!0){const r=S.useContext(Z3);if(r===null)return[!0,null];const{isPresent:n,onExitComplete:o,register:i}=r,a=S.useId();S.useEffect(()=>{if(e)return i(a)},[e]);const l=S.useCallback(()=>e&&o&&o(a),[a,o,e]);return!n&&o?[!1,l]:[!0]}const Q3=e=>e.key||"";function EK(e){const r=[];return S.Children.forEach(e,n=>{S.isValidElement(n)&&r.push(n)}),r}const Cn=({children:e,custom:r,initial:n=!0,onExitComplete:o,presenceAffectsLayout:i=!0,mode:a="sync",propagate:l=!1,anchorX:s="left",root:c})=>{const[d,u]=SK(l),p=S.useMemo(()=>EK(e),[e]),f=l&&!d?[]:p.map(Q3),m=S.useRef(!0),v=S.useRef(p),w=ag(()=>new Map),[x,k]=S.useState(p),[C,_]=S.useState(p);EC(()=>{m.current=!1,v.current=p;for(let T=0;T{const A=Q3(T),z=l&&!d?!1:p===C||f.includes(A),j=()=>{if(w.has(A))w.set(A,!0);else return;let I=!0;w.forEach(N=>{N||(I=!1)}),I&&(R?.(),_(v.current),l&&u?.(),o&&o())};return y.jsx(eLe,{isPresent:z,initial:!m.current||n?void 0:!1,custom:r,presenceAffectsLayout:i,mode:a,root:c,onExitComplete:z?void 0:j,anchorX:s,children:T},A)})})},rLe=S.createContext(null);function nLe(){const e=S.useRef(!1);return EC(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function oLe(){const e=nLe(),[r,n]=S.useState(0),o=S.useCallback(()=>{e.current&&n(r+1)},[r]);return[S.useCallback(()=>Dr.postRender(o),[o]),r]}const iLe=e=>!e.isLayoutDirty&&e.willUpdate(!1);function aLe(){const e=new Set,r=new WeakMap,n=()=>e.forEach(iLe);return{add:o=>{e.add(o),r.set(o,o.addEventListener("willUpdate",n))},remove:o=>{e.delete(o);const i=r.get(o);i&&(i(),r.delete(o)),n()},dirty:n}}const CK=e=>e===!0,lLe=e=>CK(e===!0)||e==="id",lg=({children:e,id:r,inherit:n=!0})=>{const o=S.useContext(Hy),i=S.useContext(rLe),[a,l]=oLe(),s=S.useRef(null),c=o.id||i;s.current===null&&(lLe(n)&&c&&(r=r?c+"-"+r:c),s.current={id:r,group:CK(n)&&o.group||aLe()});const d=S.useMemo(()=>({...s.current,forceRender:a}),[l]);return y.jsx(Hy.Provider,{value:d,children:e})},CC=S.createContext({strict:!1});function $C(e){for(const r in e)og[r]={...og[r],...e[r]}}function sLe({children:e,features:r,strict:n=!1}){const[,o]=S.useState(!RC(r)),i=S.useRef(void 0);if(!RC(r)){const{renderer:a,...l}=r;i.current=a,$C(l)}return S.useEffect(()=>{RC(r)&&r().then(({renderer:a,...l})=>{$C(l),i.current=a,o(!0)})},[]),y.jsx(CC.Provider,{value:{renderer:i.current,strict:n},children:e})}function RC(e){return typeof e=="function"}const cLe=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function J3(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||e.startsWith("onLayout")||cLe.has(e)}let $K=e=>!J3(e);function RK(e){typeof e=="function"&&($K=r=>r.startsWith("on")?!J3(r):e(r))}try{RK(require("@emotion/is-prop-valid").default)}catch{}function dLe(e,r,n){const o={};for(const i in e)i==="values"&&typeof e.values=="object"||($K(i)||n===!0&&J3(i)||!r&&!J3(i)||e.draggable&&i.startsWith("onDrag"))&&(o[i]=e[i]);return o}function uLe({children:e,isValidProp:r,...n}){r&&RK(r),n={...S.useContext(Ep),...n},n.isStatic=ag(()=>n.isStatic);const o=S.useMemo(()=>n,[JSON.stringify(n.transition),n.transformPagePoint,n.reducedMotion]);return y.jsx(Ep.Provider,{value:o,children:e})}const e2=S.createContext({});function pLe(e,r){if(K3(e)){const{initial:n,animate:o}=e;return{initial:n===!1||Vy(n)?n:void 0,animate:Vy(o)?o:void 0}}return e.inherit!==!1?r:{}}function hLe(e){const{initial:r,animate:n}=pLe(e,S.useContext(e2));return S.useMemo(()=>({initial:r,animate:n}),[zK(r),zK(n)])}function zK(e){return Array.isArray(e)?e.join(" "):e}const zC=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function TK(e,r,n){for(const o in r)!to(r[o])&&!hK(o,n)&&(e[o]=r[o])}function fLe({transformTemplate:e},r){return S.useMemo(()=>{const n=zC();return kC(n,r,e),Object.assign({},n.vars,n.style)},[r])}function gLe(e,r){const n=e.style||{},o={};return TK(o,n,e),Object.assign(o,fLe(e,r)),o}function mLe(e,r){const n={},o=gLe(e,r);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,o.userSelect=o.WebkitUserSelect=o.WebkitTouchCallout="none",o.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=o,n}const jK=()=>({...zC(),attrs:{}});function yLe(e,r,n,o){const i=S.useMemo(()=>{const a=jK();return gK(a,r,yK(o),e.transformTemplate,e.style),{...a.attrs,style:{...a.style}}},[r]);if(e.style){const a={};TK(a,e.style,e),i.style={...a,...i.style}}return i}const vLe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function TC(e){return typeof e!="string"||e.includes("-")?!1:!!(vLe.indexOf(e)>-1||/[A-Z]/u.test(e))}function bLe(e,r,n,{latestValues:o},i,a=!1){const l=(TC(e)?yLe:mLe)(r,o,i,e),s=dLe(r,typeof e=="string",a),c=e!==S.Fragment?{...s,...l,ref:n}:{},{children:d}=r,u=S.useMemo(()=>to(d)?d.get():d,[d]);return S.createElement(e,{...c,children:u})}function t2(e){return to(e)?e.get():e}function xLe({scrapeMotionValuesFromProps:e,createRenderState:r},n,o,i){return{latestValues:wLe(n,o,i,e),renderState:r()}}function wLe(e,r,n,o){const i={},a=o(e,{});for(const f in a)i[f]=t2(a[f]);let{initial:l,animate:s}=e;const c=K3(e),d=lK(e);r&&d&&!c&&e.inherit!==!1&&(l===void 0&&(l=r.initial),s===void 0&&(s=r.animate));let u=n?n.initial===!1:!1;u=u||l===!1;const p=u?s:l;if(p&&typeof p!="boolean"&&!X3(p)){const f=Array.isArray(p)?p:[p];for(let m=0;m(r,n)=>{const o=S.useContext(e2),i=S.useContext(Z3),a=()=>xLe(e,r,o,i);return n?a():ag(a)},kLe=AK({scrapeMotionValuesFromProps:SC,createRenderState:zC}),_Le=AK({scrapeMotionValuesFromProps:vK,createRenderState:jK}),SLe=Symbol.for("motionComponentSymbol");function sg(e){return e&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function ELe(e,r,n){return S.useCallback(o=>{o&&e.onMount&&e.onMount(o),r&&(o?r.mount(o):r.unmount()),n&&(typeof n=="function"?n(o):sg(n)&&(n.current=o))},[r])}const DK=S.createContext({});function CLe(e,r,n,o,i){const{visualElement:a}=S.useContext(e2),l=S.useContext(CC),s=S.useContext(Z3),c=S.useContext(Ep).reducedMotion,d=S.useRef(null);o=o||l.renderer,!d.current&&o&&(d.current=o(e,{visualState:r,parent:a,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:c}));const u=d.current,p=S.useContext(DK);u&&!u.projection&&i&&(u.type==="html"||u.type==="svg")&&$Le(d.current,n,i,p);const f=S.useRef(!1);S.useInsertionEffect(()=>{u&&f.current&&u.update(n,s)});const m=n[WX],v=S.useRef(!!m&&!window.MotionHandoffIsComplete?.(m)&&window.MotionHasOptimisedAnimation?.(m));return EC(()=>{u&&(f.current=!0,window.MotionIsMounted=!0,u.updateFeatures(),u.scheduleRenderMicrotask(),v.current&&u.animationState&&u.animationState.animateChanges())}),S.useEffect(()=>{u&&(!v.current&&u.animationState&&u.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(m)}),v.current=!1),u.enteringChildren=void 0)}),u}function $Le(e,r,n,o){const{layoutId:i,layout:a,drag:l,dragConstraints:s,layoutScroll:c,layoutRoot:d,layoutCrossfade:u}=r;e.projection=new n(e.latestValues,r["data-framer-portal-id"]?void 0:PK(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!l||s&&sg(s),visualElement:e,animationType:typeof a=="string"?a:"both",initialPromotionConfig:o,crossfade:u,layoutScroll:c,layoutRoot:d})}function PK(e){if(e)return e.options.allowProjection!==!1?e.projection:PK(e.parent)}function r2(e,{forwardMotionProps:r=!1}={},n,o){n&&$C(n);const i=TC(e)?_Le:kLe;function a(s,c){let d;const u={...S.useContext(Ep),...s,layoutId:RLe(s)},{isStatic:p}=u,f=hLe(s),m=i(s,p);if(!p&&vC){zLe();const v=TLe(u);d=v.MeasureLayout,f.visualElement=CLe(e,m,u,o,v.ProjectionNode)}return y.jsxs(e2.Provider,{value:f,children:[d&&f.visualElement?y.jsx(d,{visualElement:f.visualElement,...u}):null,bLe(e,s,ELe(m,f.visualElement,c),m,p,r)]})}a.displayName=`motion.${typeof e=="string"?e:`create(${e.displayName??e.name??""})`}`;const l=S.forwardRef(a);return l[SLe]=e,l}function RLe({layoutId:e}){const r=S.useContext(Hy).id;return r&&e!==void 0?r+"-"+e:e}function zLe(e,r){S.useContext(CC).strict}function TLe(e){const{drag:r,layout:n}=og;if(!r&&!n)return{};const o={...r,...n};return{MeasureLayout:r?.isEnabled(e)||n?.isEnabled(e)?o.MeasureLayout:void 0,ProjectionNode:o.ProjectionNode}}function jLe(e,r){if(typeof Proxy>"u")return r2;const n=new Map,o=(a,l)=>r2(a,l,e,r),i=(a,l)=>o(a,l);return new Proxy(i,{get:(a,l)=>l==="create"?o:(n.has(l)||n.set(l,r2(l,void 0,e,r)),n.get(l))})}const ga=jLe(),ALe=(e,r)=>TC(e)?new bK(r):new fK(r,{allowProjection:e!==S.Fragment});function MK(e,r,n,o=0,i=1){const a=Array.from(e).sort((c,d)=>c.sortNodePosition(d)).indexOf(r),l=e.size,s=(l-1)*o;return typeof n=="function"?n(a,l):i===1?a*o:s-a*o}function jC(e,r,n={}){const o=tg(e,r,n.type==="exit"?e.presenceContext?.custom:void 0);let{transition:i=e.getDefaultTransition()||{}}=o||{};n.transitionOverride&&(i=n.transitionOverride);const a=o?()=>Promise.all(fC(e,o,n)):()=>Promise.resolve(),l=e.variantChildren&&e.variantChildren.size?(c=0)=>{const{delayChildren:d=0,staggerChildren:u,staggerDirection:p}=i;return DLe(e,r,c,d,u,p,n)}:()=>Promise.resolve(),{when:s}=i;if(s){const[c,d]=s==="beforeChildren"?[a,l]:[l,a];return c().then(()=>d())}else return Promise.all([a(),l(n.delay)])}function DLe(e,r,n=0,o=0,i=0,a=1,l){const s=[];for(const c of e.variantChildren)c.notify("AnimationStart",r),s.push(jC(c,r,{...l,delay:n+(typeof o=="function"?0:o)+MK(e.variantChildren,c,o,i,a)}).then(()=>c.notify("AnimationComplete",r)));return Promise.all(s)}function PLe(e,r,n={}){e.notify("AnimationStart",r);let o;if(Array.isArray(r)){const i=r.map(a=>jC(e,a,n));o=Promise.all(i)}else if(typeof r=="string")o=jC(e,r,n);else{const i=typeof r=="function"?tg(e,r,n.custom):r;o=Promise.all(fC(e,i,n))}return o.then(()=>{e.notify("AnimationComplete",r)})}function NK(e,r){if(!Array.isArray(r))return!1;const n=r.length;if(n!==e.length)return!1;for(let o=0;oPromise.all(r.map(({animation:n,options:o})=>PLe(e,n,o)))}function OLe(e){let r=ILe(e),n=IK(),o=!0;const i=c=>(d,u)=>{const p=tg(e,u,c==="exit"?e.presenceContext?.custom:void 0);if(p){const{transition:f,transitionEnd:m,...v}=p;d={...d,...v,...m}}return d};function a(c){r=c(e)}function l(c){const{props:d}=e,u=BK(e.parent)||{},p=[],f=new Set;let m={},v=1/0;for(let x=0;xv&&$,j=!1;const I=Array.isArray(_)?_:[_];let N=I.reduce(i(k),{});R===!1&&(N={});const{prevResolvedValues:L={}}=C,H={...L,...N},P=B=>{z=!0,f.has(B)&&(j=!0,f.delete(B)),C.needsAnimating[B]=!0;const F=e.getValue(B);F&&(F.liveStyle=!1)};for(const B in H){const F=N[B],q=L[B];if(m.hasOwnProperty(B))continue;let G=!1;cC(F)&&cC(q)?G=!NK(F,q):G=F!==q,G?F!=null?P(B):f.add(B):F!==void 0&&f.has(B)?P(B):C.protectedKeys[B]=!0}C.prevProp=_,C.prevResolvedValues=N,C.isActive&&(m={...m,...N}),o&&e.blockInitialAnimation&&(z=!1);const V=T&&A;z&&(!V||j)&&p.push(...I.map(B=>{const F={type:k};if(typeof B=="string"&&o&&!V&&e.manuallyAnimateOnMount&&e.parent){const{parent:q}=e,G=tg(q,B);if(q.enteringChildren&&G){const{delayChildren:U}=G.transition||{};F.delay=MK(q.enteringChildren,e,U)}}return{animation:B,options:F}}))}if(f.size){const x={};if(typeof d.initial!="boolean"){const k=tg(e,Array.isArray(d.initial)?d.initial[0]:d.initial);k&&k.transition&&(x.transition=k.transition)}f.forEach(k=>{const C=e.getBaseTarget(k),_=e.getValue(k);_&&(_.liveStyle=!0),x[k]=C??null}),p.push({animation:x})}let w=!!p.length;return o&&(d.initial===!1||d.initial===d.animate)&&!e.manuallyAnimateOnMount&&(w=!1),o=!1,w?r(p):Promise.resolve()}function s(c,d){if(n[c].isActive===d)return Promise.resolve();e.variantChildren?.forEach(p=>p.animationState?.setActive(c,d)),n[c].isActive=d;const u=l(c);for(const p in n)n[p].protectedKeys={};return u}return{animateChanges:l,setActive:s,setAnimateFunction:a,getState:()=>n,reset:()=>{n=IK()}}}function LLe(e,r){return typeof r=="string"?r!==e:Array.isArray(r)?!NK(r,e):!1}function Cp(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function IK(){return{animate:Cp(!0),whileInView:Cp(),whileHover:Cp(),whileTap:Cp(),whileDrag:Cp(),whileFocus:Cp(),exit:Cp()}}class Td{constructor(r){this.isMounted=!1,this.node=r}update(){}}class FLe extends Td{constructor(r){super(r),r.animationState||(r.animationState=OLe(r))}updateAnimationControlsSubscription(){const{animate:r}=this.node.getProps();X3(r)&&(this.unmountControls=r.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:r}=this.node.getProps(),{animate:n}=this.node.prevProps||{};r!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let VLe=0;class qLe extends Td{constructor(){super(...arguments),this.id=VLe++}update(){if(!this.node.presenceContext)return;const{isPresent:r,onExitComplete:n}=this.node.presenceContext,{isPresent:o}=this.node.prevPresenceContext||{};if(!this.node.animationState||r===o)return;const i=this.node.animationState.setActive("exit",!r);n&&!r&&i.then(()=>{n(this.id)})}mount(){const{register:r,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),r&&(this.unmount=r(this.id))}unmount(){}}const HLe={animation:{Feature:FLe},exit:{Feature:qLe}};function Uy(e,r,n,o={passive:!0}){return e.addEventListener(r,n,o),()=>e.removeEventListener(r,n)}function Wy(e){return{point:{x:e.pageX,y:e.pageY}}}const ULe=e=>r=>iC(r)&&e(r,Wy(r));function Gy(e,r,n,o){return Uy(e,r,ULe(n),o)}const OK=1e-4,WLe=1-OK,GLe=1+OK,LK=.01,YLe=0-LK,XLe=0+LK;function Vo(e){return e.max-e.min}function KLe(e,r,n){return Math.abs(e-r)<=n}function FK(e,r,n,o=.5){e.origin=o,e.originPoint=Lr(r.min,r.max,e.origin),e.scale=Vo(n)/Vo(r),e.translate=Lr(n.min,n.max,e.origin)-e.originPoint,(e.scale>=WLe&&e.scale<=GLe||isNaN(e.scale))&&(e.scale=1),(e.translate>=YLe&&e.translate<=XLe||isNaN(e.translate))&&(e.translate=0)}function Yy(e,r,n,o){FK(e.x,r.x,n.x,o?o.originX:void 0),FK(e.y,r.y,n.y,o?o.originY:void 0)}function VK(e,r,n){e.min=n.min+r.min,e.max=e.min+Vo(r)}function ZLe(e,r,n){VK(e.x,r.x,n.x),VK(e.y,r.y,n.y)}function qK(e,r,n){e.min=r.min-n.min,e.max=e.min+Vo(r)}function n2(e,r,n){qK(e.x,r.x,n.x),qK(e.y,r.y,n.y)}function ma(e){return[e("x"),e("y")]}const HK=({current:e})=>e?e.ownerDocument.defaultView:null;class UK{constructor(r,n,{transformPagePoint:o,contextWindow:i=window,dragSnapToOrigin:a=!1,distanceThreshold:l=3}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const f=DC(this.lastMoveEventInfo,this.history),m=this.startEvent!==null,v=XOe(f.offset,{x:0,y:0})>=this.distanceThreshold;if(!m&&!v)return;const{point:w}=f,{timestamp:x}=so;this.history.push({...w,timestamp:x});const{onStart:k,onMove:C}=this.handlers;m||(k&&k(this.lastMoveEvent,f),this.startEvent=this.lastMoveEvent),C&&C(this.lastMoveEvent,f)},this.handlePointerMove=(f,m)=>{this.lastMoveEvent=f,this.lastMoveEventInfo=AC(m,this.transformPagePoint),Dr.update(this.updatePoint,!0)},this.handlePointerUp=(f,m)=>{this.end();const{onEnd:v,onSessionEnd:w,resumeAnimation:x}=this.handlers;if(this.dragSnapToOrigin&&x&&x(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const k=DC(f.type==="pointercancel"?this.lastMoveEventInfo:AC(m,this.transformPagePoint),this.history);this.startEvent&&v&&v(f,k),w&&w(f,k)},!iC(r))return;this.dragSnapToOrigin=a,this.handlers=n,this.transformPagePoint=o,this.distanceThreshold=l,this.contextWindow=i||window;const s=Wy(r),c=AC(s,this.transformPagePoint),{point:d}=c,{timestamp:u}=so;this.history=[{...d,timestamp:u}];const{onSessionStart:p}=n;p&&p(r,DC(c,this.history)),this.removeListeners=Ay(Gy(this.contextWindow,"pointermove",this.handlePointerMove),Gy(this.contextWindow,"pointerup",this.handlePointerUp),Gy(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(r){this.handlers=r}end(){this.removeListeners&&this.removeListeners(),$d(this.updatePoint)}}function AC(e,r){return r?{point:r(e.point)}:e}function WK(e,r){return{x:e.x-r.x,y:e.y-r.y}}function DC({point:e},r){return{point:e,delta:WK(e,GK(r)),offset:WK(e,QLe(r)),velocity:JLe(r,.1)}}function QLe(e){return e[0]}function GK(e){return e[e.length-1]}function JLe(e,r){if(e.length<2)return{x:0,y:0};let n=e.length-1,o=null;const i=GK(e);for(;n>=0&&(o=e[n],!(i.timestamp-o.timestamp>al(r)));)n--;if(!o)return{x:0,y:0};const a=fa(i.timestamp-o.timestamp);if(a===0)return{x:0,y:0};const l={x:(i.x-o.x)/a,y:(i.y-o.y)/a};return l.x===1/0&&(l.x=0),l.y===1/0&&(l.y=0),l}function eFe(e,{min:r,max:n},o){return r!==void 0&&en&&(e=o?Lr(n,e,o.max):Math.min(e,n)),e}function YK(e,r,n){return{min:r!==void 0?e.min+r:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function tFe(e,{top:r,left:n,bottom:o,right:i}){return{x:YK(e.x,n,i),y:YK(e.y,r,o)}}function XK(e,r){let n=r.min-e.min,o=r.max-e.max;return r.max-r.mino?n=Kf(r.min,r.max-o,e.min):o>i&&(n=Kf(e.min,e.max-i,r.min)),oc(0,1,n)}function oFe(e,r){const n={};return r.min!==void 0&&(n.min=r.min-e.min),r.max!==void 0&&(n.max=r.max-e.min),n}const PC=.35;function iFe(e=PC){return e===!1?e=0:e===!0&&(e=PC),{x:KK(e,"left","right"),y:KK(e,"top","bottom")}}function KK(e,r,n){return{min:ZK(e,r),max:ZK(e,n)}}function ZK(e,r){return typeof e=="number"?e:e[r]||0}const aFe=new WeakMap;class lFe{constructor(r){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=En(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=r}start(r,{snapToCursor:n=!1,distanceThreshold:o}={}){const{presenceContext:i}=this.visualElement;if(i&&i.isPresent===!1)return;const a=p=>{const{dragSnapToOrigin:f}=this.getProps();f?this.pauseAnimation():this.stopAnimation(),n&&this.snapToCursor(Wy(p).point)},l=(p,f)=>{const{drag:m,dragPropagation:v,onDragStart:w}=this.getProps();if(m&&!v&&(this.openDragLock&&this.openDragLock(),this.openDragLock=WIe(m),!this.openDragLock))return;this.latestPointerEvent=p,this.latestPanInfo=f,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ma(k=>{let C=this.getAxisMotionValue(k).get()||0;if(os.test(C)){const{projection:_}=this.visualElement;if(_&&_.layout){const $=_.layout.layoutBox[k];$&&(C=Vo($)*(parseFloat(C)/100))}}this.originPoint[k]=C}),w&&Dr.postRender(()=>w(p,f)),uC(this.visualElement,"transform");const{animationState:x}=this.visualElement;x&&x.setActive("whileDrag",!0)},s=(p,f)=>{this.latestPointerEvent=p,this.latestPanInfo=f;const{dragPropagation:m,dragDirectionLock:v,onDirectionLock:w,onDrag:x}=this.getProps();if(!m&&!this.openDragLock)return;const{offset:k}=f;if(v&&this.currentDirection===null){this.currentDirection=sFe(k),this.currentDirection!==null&&w&&w(this.currentDirection);return}this.updateAxis("x",f.point,k),this.updateAxis("y",f.point,k),this.visualElement.render(),x&&x(p,f)},c=(p,f)=>{this.latestPointerEvent=p,this.latestPanInfo=f,this.stop(p,f),this.latestPointerEvent=null,this.latestPanInfo=null},d=()=>ma(p=>this.getAnimationState(p)==="paused"&&this.getAxisMotionValue(p).animation?.play()),{dragSnapToOrigin:u}=this.getProps();this.panSession=new UK(r,{onSessionStart:a,onStart:l,onMove:s,onSessionEnd:c,resumeAnimation:d},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:u,distanceThreshold:o,contextWindow:HK(this.visualElement)})}stop(r,n){const o=r||this.latestPointerEvent,i=n||this.latestPanInfo,a=this.isDragging;if(this.cancel(),!a||!i||!o)return;const{velocity:l}=i;this.startAnimation(l);const{onDragEnd:s}=this.getProps();s&&Dr.postRender(()=>s(o,i))}cancel(){this.isDragging=!1;const{projection:r,animationState:n}=this.visualElement;r&&(r.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:o}=this.getProps();!o&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(r,n,o){const{drag:i}=this.getProps();if(!o||!o2(r,i,this.currentDirection))return;const a=this.getAxisMotionValue(r);let l=this.originPoint[r]+o[r];this.constraints&&this.constraints[r]&&(l=eFe(l,this.constraints[r],this.elastic[r])),a.set(l)}resolveConstraints(){const{dragConstraints:r,dragElastic:n}=this.getProps(),o=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,i=this.constraints;r&&sg(r)?this.constraints||(this.constraints=this.resolveRefConstraints()):r&&o?this.constraints=tFe(o.layoutBox,r):this.constraints=!1,this.elastic=iFe(n),i!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&ma(a=>{this.constraints!==!1&&this.getAxisMotionValue(a)&&(this.constraints[a]=oFe(o.layoutBox[a],this.constraints[a]))})}resolveRefConstraints(){const{dragConstraints:r,onMeasureDragConstraints:n}=this.getProps();if(!r||!sg(r))return!1;const o=r.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const a=ROe(o,i.root,this.visualElement.getTransformPagePoint());let l=rFe(i.layout.layoutBox,a);if(n){const s=n(EOe(l));this.hasMutatedConstraints=!!s,s&&(l=YX(s))}return l}startAnimation(r){const{drag:n,dragMomentum:o,dragElastic:i,dragTransition:a,dragSnapToOrigin:l,onDragTransitionEnd:s}=this.getProps(),c=this.constraints||{},d=ma(u=>{if(!o2(u,n,this.currentDirection))return;let p=c&&c[u]||{};l&&(p={min:0,max:0});const f=i?200:1e6,m=i?40:1e7,v={type:"inertia",velocity:o?r[u]:0,bounceStiffness:f,bounceDamping:m,timeConstant:750,restDelta:1,restSpeed:10,...a,...p};return this.startAxisValueAnimation(u,v)});return Promise.all(d).then(s)}startAxisValueAnimation(r,n){const o=this.getAxisMotionValue(r);return uC(this.visualElement,r),o.start(hC(r,o,0,n,this.visualElement,!1))}stopAnimation(){ma(r=>this.getAxisMotionValue(r).stop())}pauseAnimation(){ma(r=>this.getAxisMotionValue(r).animation?.pause())}getAnimationState(r){return this.getAxisMotionValue(r).animation?.state}getAxisMotionValue(r){const n=`_drag${r.toUpperCase()}`,o=this.visualElement.getProps();return o[n]||this.visualElement.getValue(r,(o.initial?o.initial[r]:void 0)||0)}snapToCursor(r){ma(n=>{const{drag:o}=this.getProps();if(!o2(n,o,this.currentDirection))return;const{projection:i}=this.visualElement,a=this.getAxisMotionValue(n);if(i&&i.layout){const{min:l,max:s}=i.layout.layoutBox[n];a.set(r[n]-Lr(l,s,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:r,dragConstraints:n}=this.getProps(),{projection:o}=this.visualElement;if(!sg(n)||!o||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};ma(l=>{const s=this.getAxisMotionValue(l);if(s&&this.constraints!==!1){const c=s.get();i[l]=nFe({min:c,max:c},this.constraints[l])}});const{transformTemplate:a}=this.visualElement.getProps();this.visualElement.current.style.transform=a?a({},""):"none",o.root&&o.root.updateScroll(),o.updateLayout(),this.resolveConstraints(),ma(l=>{if(!o2(l,r,null))return;const s=this.getAxisMotionValue(l),{min:c,max:d}=this.constraints[l];s.set(Lr(c,d,i[l]))})}addListeners(){if(!this.visualElement.current)return;aFe.set(this.visualElement,this);const r=this.visualElement.current,n=Gy(r,"pointerdown",c=>{const{drag:d,dragListener:u=!0}=this.getProps();d&&u&&this.start(c)}),o=()=>{const{dragConstraints:c}=this.getProps();sg(c)&&c.current&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,a=i.addEventListener("measure",o);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),Dr.read(o);const l=Uy(window,"resize",()=>this.scalePositionWithinConstraints()),s=i.addEventListener("didUpdate",(({delta:c,hasLayoutChanged:d})=>{this.isDragging&&d&&(ma(u=>{const p=this.getAxisMotionValue(u);p&&(this.originPoint[u]+=c[u].translate,p.set(p.get()+c[u].translate))}),this.visualElement.render())}));return()=>{l(),n(),a(),s&&s()}}getProps(){const r=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:o=!1,dragPropagation:i=!1,dragConstraints:a=!1,dragElastic:l=PC,dragMomentum:s=!0}=r;return{...r,drag:n,dragDirectionLock:o,dragPropagation:i,dragConstraints:a,dragElastic:l,dragMomentum:s}}}function o2(e,r,n){return(r===!0||r===e)&&(n===null||n===e)}function sFe(e,r=10){let n=null;return Math.abs(e.y)>r?n="y":Math.abs(e.x)>r&&(n="x"),n}class cFe extends Td{constructor(r){super(r),this.removeGroupControls=ha,this.removeListeners=ha,this.controls=new lFe(r)}mount(){const{dragControls:r}=this.node.getProps();r&&(this.removeGroupControls=r.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||ha}unmount(){this.removeGroupControls(),this.removeListeners()}}const QK=e=>(r,n)=>{e&&Dr.postRender(()=>e(r,n))};class dFe extends Td{constructor(){super(...arguments),this.removePointerDownListener=ha}onPointerDown(r){this.session=new UK(r,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:HK(this.node)})}createPanHandlers(){const{onPanSessionStart:r,onPanStart:n,onPan:o,onPanEnd:i}=this.node.getProps();return{onSessionStart:QK(r),onStart:QK(n),onMove:o,onEnd:(a,l)=>{delete this.session,i&&Dr.postRender(()=>i(a,l))}}}mount(){this.removePointerDownListener=Gy(this.node.current,"pointerdown",r=>this.onPointerDown(r))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const i2={hasAnimatedSinceResize:!0,hasEverUpdated:!1};let MC=!1;class uFe extends S.Component{componentDidMount(){const{visualElement:r,layoutGroup:n,switchLayoutGroup:o,layoutId:i}=this.props,{projection:a}=r;a&&(n.group&&n.group.add(a),o&&o.register&&i&&o.register(a),MC&&a.root.didUpdate(),a.addEventListener("animationComplete",()=>{this.safeToRemove()}),a.setOptions({...a.options,onExitComplete:()=>this.safeToRemove()})),i2.hasEverUpdated=!0}getSnapshotBeforeUpdate(r){const{layoutDependency:n,visualElement:o,drag:i,isPresent:a}=this.props,{projection:l}=o;return l&&(l.isPresent=a,MC=!0,i||r.layoutDependency!==n||n===void 0||r.isPresent!==a?l.willUpdate():this.safeToRemove(),r.isPresent!==a&&(a?l.promote():l.relegate()||Dr.postRender(()=>{const s=l.getStack();(!s||!s.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:r}=this.props.visualElement;r&&(r.root.didUpdate(),oC.postRender(()=>{!r.currentAnimation&&r.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:r,layoutGroup:n,switchLayoutGroup:o}=this.props,{projection:i}=r;MC=!0,i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),o&&o.deregister&&o.deregister(i))}safeToRemove(){const{safeToRemove:r}=this.props;r&&r()}render(){return null}}function JK(e){const[r,n]=SK(),o=S.useContext(Hy);return y.jsx(uFe,{...e,layoutGroup:o,switchLayoutGroup:S.useContext(DK),isPresent:r,safeToRemove:n})}const pFe=(e,r)=>e.depth-r.depth;class hFe{constructor(){this.children=[],this.isDirty=!1}add(r){kE(this.children,r),this.isDirty=!0}remove(r){L3(this.children,r),this.isDirty=!0}forEach(r){this.isDirty&&this.children.sort(pFe),this.isDirty=!1,this.children.forEach(r)}}const eZ=["TopLeft","TopRight","BottomLeft","BottomRight"],fFe=eZ.length,tZ=e=>typeof e=="string"?parseFloat(e):e,rZ=e=>typeof e=="number"||_t.test(e);function gFe(e,r,n,o,i,a){i?(e.opacity=Lr(0,n.opacity??1,mFe(o)),e.opacityExit=Lr(r.opacity??1,0,yFe(o))):a&&(e.opacity=Lr(r.opacity??1,n.opacity??1,o));for(let l=0;lor?1:n(Kf(e,r,o))}function iZ(e,r){e.min=r.min,e.max=r.max}function sl(e,r){iZ(e.x,r.x),iZ(e.y,r.y)}function aZ(e,r){e.translate=r.translate,e.scale=r.scale,e.originPoint=r.originPoint,e.origin=r.origin}function lZ(e,r,n,o,i){return e-=r,e=G3(e,1/n,o),i!==void 0&&(e=G3(e,1/i,o)),e}function vFe(e,r=0,n=1,o=.5,i,a=e,l=e){if(os.test(r)&&(r=parseFloat(r),r=Lr(l.min,l.max,r/100)-l.min),typeof r!="number")return;let s=Lr(a.min,a.max,o);e===a&&(s-=r),e.min=lZ(e.min,r,n,s,i),e.max=lZ(e.max,r,n,s,i)}function sZ(e,r,[n,o,i],a,l){vFe(e,r[n],r[o],r[i],r.scale,a,l)}const bFe=["x","scaleX","originX"],xFe=["y","scaleY","originY"];function cZ(e,r,n,o){sZ(e.x,r,bFe,n?n.x:void 0,o?o.x:void 0),sZ(e.y,r,xFe,n?n.y:void 0,o?o.y:void 0)}function dZ(e){return e.translate===0&&e.scale===1}function uZ(e){return dZ(e.x)&&dZ(e.y)}function pZ(e,r){return e.min===r.min&&e.max===r.max}function wFe(e,r){return pZ(e.x,r.x)&&pZ(e.y,r.y)}function hZ(e,r){return Math.round(e.min)===Math.round(r.min)&&Math.round(e.max)===Math.round(r.max)}function fZ(e,r){return hZ(e.x,r.x)&&hZ(e.y,r.y)}function gZ(e){return Vo(e.x)/Vo(e.y)}function mZ(e,r){return e.translate===r.translate&&e.scale===r.scale&&e.originPoint===r.originPoint}class kFe{constructor(){this.members=[]}add(r){kE(this.members,r),r.scheduleRender()}remove(r){if(L3(this.members,r),r===this.prevLead&&(this.prevLead=void 0),r===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(r){const n=this.members.findIndex(i=>r===i);if(n===0)return!1;let o;for(let i=n;i>=0;i--){const a=this.members[i];if(a.isPresent!==!1){o=a;break}}return o?(this.promote(o),!0):!1}promote(r,n){const o=this.lead;if(r!==o&&(this.prevLead=o,this.lead=r,r.show(),o)){o.instance&&o.scheduleRender(),r.scheduleRender(),r.resumeFrom=o,n&&(r.resumeFrom.preserveOpacity=!0),o.snapshot&&(r.snapshot=o.snapshot,r.snapshot.latestValues=o.animationValues||o.latestValues),r.root&&r.root.isUpdating&&(r.isLayoutDirty=!0);const{crossfade:i}=r.options;i===!1&&o.hide()}}exitAnimationComplete(){this.members.forEach(r=>{const{options:n,resumingFrom:o}=r;n.onExitComplete&&n.onExitComplete(),o&&o.options.onExitComplete&&o.options.onExitComplete()})}scheduleRender(){this.members.forEach(r=>{r.instance&&r.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function _Fe(e,r,n){let o="";const i=e.x.translate/r.x,a=e.y.translate/r.y,l=n?.z||0;if((i||a||l)&&(o=`translate3d(${i}px, ${a}px, ${l}px) `),(r.x!==1||r.y!==1)&&(o+=`scale(${1/r.x}, ${1/r.y}) `),n){const{transformPerspective:d,rotate:u,rotateX:p,rotateY:f,skewX:m,skewY:v}=n;d&&(o=`perspective(${d}px) ${o}`),u&&(o+=`rotate(${u}deg) `),p&&(o+=`rotateX(${p}deg) `),f&&(o+=`rotateY(${f}deg) `),m&&(o+=`skewX(${m}deg) `),v&&(o+=`skewY(${v}deg) `)}const s=e.x.scale*r.x,c=e.y.scale*r.y;return(s!==1||c!==1)&&(o+=`scale(${s}, ${c})`),o||"none"}const NC=["","X","Y","Z"],SFe=1e3;let EFe=0;function BC(e,r,n,o){const{latestValues:i}=r;i[e]&&(n[e]=i[e],r.setStaticValue(e,0),o&&(o[e]=0))}function yZ(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;const{visualElement:r}=e.options;if(!r)return;const n=GX(r);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:i,layoutId:a}=e.options;window.MotionCancelOptimisedAnimation(n,"transform",Dr,!(i||a))}const{parent:o}=e;o&&!o.hasCheckedOptimisedAppear&&yZ(o)}function vZ({attachResizeListener:e,defaultParent:r,measureScroll:n,checkIsScrollRoot:o,resetTransform:i}){return class{constructor(a={},l=r?.()){this.id=EFe++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(RFe),this.nodes.forEach(AFe),this.nodes.forEach(DFe),this.nodes.forEach(zFe)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=a,this.root=l?l.root||l:this,this.path=l?[...l.path,l]:[],this.parent=l,this.depth=l?l.depth+1:0;for(let s=0;sthis.root.updateBlockedByResize=!1;Dr.read(()=>{u=window.innerWidth}),e(a,()=>{const f=window.innerWidth;f!==u&&(u=f,this.root.updateBlockedByResize=!0,d&&d(),d=YOe(p,250),i2.hasAnimatedSinceResize&&(i2.hasAnimatedSinceResize=!1,this.nodes.forEach(wZ)))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&c&&(l||s)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:u,hasRelativeLayoutChanged:p,layout:f})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||c.getDefaultTransition()||IFe,{onLayoutAnimationStart:v,onLayoutAnimationComplete:w}=c.getProps(),x=!this.targetLayout||!fZ(this.targetLayout,f),k=!u&&p;if(this.options.layoutRoot||this.resumeFrom||k||u&&(x||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const C={...tC(m,"layout"),onPlay:v,onComplete:w};(c.shouldReduceMotion||this.options.layoutRoot)&&(C.delay=0,C.type=!1),this.startAnimation(C),this.setAnimationOrigin(d,k)}else u||wZ(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=f})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const a=this.getStack();a&&a.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),$d(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(PFe),this.animationId++)}getTransformTemplate(){const{visualElement:a}=this.options;return a&&a.getProps().transformTemplate}willUpdate(a=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&yZ(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let d=0;d{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!Vo(this.snapshot.measuredBox.x)&&!Vo(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let s=0;s{const $=_/1e3;kZ(u.x,a.x,$),kZ(u.y,a.y,$),this.setTargetDelta(u),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(n2(p,this.layout.layoutBox,this.relativeParent.layout.layoutBox),NFe(this.relativeTarget,this.relativeTargetOrigin,p,$),C&&wFe(this.relativeTarget,C)&&(this.isProjectionDirty=!1),C||(C=En()),sl(C,this.relativeTarget)),v&&(this.animationValues=d,gFe(d,c,this.latestValues,$,k,x)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=$},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(a){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&($d(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Dr.update(()=>{i2.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=_p(0)),this.currentAnimation=xK(this.motionValue,[0,1e3],{...a,velocity:0,isSync:!0,onUpdate:l=>{this.mixTargetDelta(l),a.onUpdate&&a.onUpdate(l)},onStop:()=>{},onComplete:()=>{a.onComplete&&a.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const a=this.getStack();a&&a.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(SFe),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const a=this.getLead();let{targetWithTransforms:l,target:s,layout:c,latestValues:d}=a;if(!(!l||!s||!c)){if(this!==a&&this.layout&&c&&$Z(this.options.animationType,this.layout.layoutBox,c.layoutBox)){s=this.target||En();const u=Vo(this.layout.layoutBox.x);s.x.min=a.target.x.min,s.x.max=s.x.min+u;const p=Vo(this.layout.layoutBox.y);s.y.min=a.target.y.min,s.y.max=s.y.min+p}sl(l,s),ng(l,d),Yy(this.projectionDeltaWithTransform,this.layoutCorrected,l,d)}}registerSharedNode(a,l){this.sharedNodes.has(a)||this.sharedNodes.set(a,new kFe),this.sharedNodes.get(a).add(l);const s=l.options.initialPromotionConfig;l.promote({transition:s?s.transition:void 0,preserveFollowOpacity:s&&s.shouldPreserveFollowOpacity?s.shouldPreserveFollowOpacity(l):void 0})}isLead(){const a=this.getStack();return a?a.lead===this:!0}getLead(){const{layoutId:a}=this.options;return a?this.getStack()?.lead||this:this}getPrevLead(){const{layoutId:a}=this.options;return a?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:a}=this.options;if(a)return this.root.sharedNodes.get(a)}promote({needsReset:a,transition:l,preserveFollowOpacity:s}={}){const c=this.getStack();c&&c.promote(this,s),a&&(this.projectionDelta=void 0,this.needsReset=!0),l&&this.setOptions({transition:l})}relegate(){const a=this.getStack();return a?a.relegate(this):!1}resetSkewAndRotation(){const{visualElement:a}=this.options;if(!a)return;let l=!1;const{latestValues:s}=a;if((s.z||s.rotate||s.rotateX||s.rotateY||s.rotateZ||s.skewX||s.skewY)&&(l=!0),!l)return;const c={};s.z&&BC("z",a,c,this.animationValues);for(let d=0;da.currentAnimation?.stop()),this.root.nodes.forEach(bZ),this.root.sharedNodes.clear()}}}function CFe(e){e.updateLayout()}function $Fe(e){const r=e.resumeFrom?.snapshot||e.snapshot;if(e.isLead()&&e.layout&&r&&e.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:o}=e.layout,{animationType:i}=e.options,a=r.source!==e.layout.source;i==="size"?ma(u=>{const p=a?r.measuredBox[u]:r.layoutBox[u],f=Vo(p);p.min=n[u].min,p.max=p.min+f}):$Z(i,r.layoutBox,n)&&ma(u=>{const p=a?r.measuredBox[u]:r.layoutBox[u],f=Vo(n[u]);p.max=p.min+f,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[u].max=e.relativeTarget[u].min+f)});const l=ig();Yy(l,n,r.layoutBox);const s=ig();a?Yy(s,e.applyTransform(o,!0),r.measuredBox):Yy(s,n,r.layoutBox);const c=!uZ(l);let d=!1;if(!e.resumeFrom){const u=e.getClosestProjectingParent();if(u&&!u.resumeFrom){const{snapshot:p,layout:f}=u;if(p&&f){const m=En();n2(m,r.layoutBox,p.layoutBox);const v=En();n2(v,n,f.layoutBox),fZ(m,v)||(d=!0),u.options.layoutRoot&&(e.relativeTarget=v,e.relativeTargetOrigin=m,e.relativeParent=u)}}}e.notifyListeners("didUpdate",{layout:n,snapshot:r,delta:s,layoutDelta:l,hasLayoutChanged:c,hasRelativeLayoutChanged:d})}else if(e.isLead()){const{onExitComplete:n}=e.options;n&&n()}e.options.transition=void 0}function RFe(e){e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function zFe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function TFe(e){e.clearSnapshot()}function bZ(e){e.clearMeasurements()}function xZ(e){e.isLayoutDirty=!1}function jFe(e){const{visualElement:r}=e.options;r&&r.getProps().onBeforeLayoutMeasure&&r.notify("BeforeLayoutMeasure"),e.resetTransform()}function wZ(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function AFe(e){e.resolveTargetDelta()}function DFe(e){e.calcProjection()}function PFe(e){e.resetSkewAndRotation()}function MFe(e){e.removeLeadSnapshot()}function kZ(e,r,n){e.translate=Lr(r.translate,0,n),e.scale=Lr(r.scale,1,n),e.origin=r.origin,e.originPoint=r.originPoint}function _Z(e,r,n,o){e.min=Lr(r.min,n.min,o),e.max=Lr(r.max,n.max,o)}function NFe(e,r,n,o){_Z(e.x,r.x,n.x,o),_Z(e.y,r.y,n.y,o)}function BFe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const IFe={duration:.45,ease:[.4,0,.1,1]},SZ=e=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),EZ=SZ("applewebkit/")&&!SZ("chrome/")?Math.round:ha;function CZ(e){e.min=EZ(e.min),e.max=EZ(e.max)}function OFe(e){CZ(e.x),CZ(e.y)}function $Z(e,r,n){return e==="position"||e==="preserve-aspect"&&!KLe(gZ(r),gZ(n),.2)}function LFe(e){return e!==e.root&&e.scroll?.wasRoot}const FFe=vZ({attachResizeListener:(e,r)=>Uy(e,"resize",r),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),IC={current:void 0},RZ=vZ({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!IC.current){const e=new FFe({});e.mount(window),e.setOptions({layoutScroll:!0}),IC.current=e}return IC.current},resetTransform:(e,r)=>{e.style.transform=r!==void 0?r:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),VFe={pan:{Feature:dFe},drag:{Feature:cFe,ProjectionNode:RZ,MeasureLayout:JK}};function zZ(e,r,n){const{props:o}=e;e.animationState&&o.whileHover&&e.animationState.setActive("whileHover",n==="Start");const i="onHover"+n,a=o[i];a&&Dr.postRender(()=>a(r,Wy(r)))}class qFe extends Td{mount(){const{current:r}=this.node;r&&(this.unmount=GIe(r,(n,o)=>(zZ(this.node,o,"Start"),i=>zZ(this.node,i,"End"))))}unmount(){}}class HFe extends Td{constructor(){super(...arguments),this.isActive=!1}onFocus(){let r=!1;try{r=this.node.current.matches(":focus-visible")}catch{r=!0}!r||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Ay(Uy(this.node.current,"focus",()=>this.onFocus()),Uy(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function TZ(e,r,n){const{props:o}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&o.whileTap&&e.animationState.setActive("whileTap",n==="Start");const i="onTap"+(n==="End"?"":n),a=o[i];a&&Dr.postRender(()=>a(r,Wy(r)))}class UFe extends Td{mount(){const{current:r}=this.node;r&&(this.unmount=ZIe(r,(n,o)=>(TZ(this.node,o,"Start"),(i,{success:a})=>TZ(this.node,i,a?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const OC=new WeakMap,LC=new WeakMap,WFe=e=>{const r=OC.get(e.target);r&&r(e)},GFe=e=>{e.forEach(WFe)};function YFe({root:e,...r}){const n=e||document;LC.has(n)||LC.set(n,{});const o=LC.get(n),i=JSON.stringify(r);return o[i]||(o[i]=new IntersectionObserver(GFe,{root:e,...r})),o[i]}function XFe(e,r,n){const o=YFe(r);return OC.set(e,n),o.observe(e),()=>{OC.delete(e),o.unobserve(e)}}const KFe={some:0,all:1};class ZFe extends Td{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:r={}}=this.node.getProps(),{root:n,margin:o,amount:i="some",once:a}=r,l={root:n?n.current:void 0,rootMargin:o,threshold:typeof i=="number"?i:KFe[i]},s=c=>{const{isIntersecting:d}=c;if(this.isInView===d||(this.isInView=d,a&&!d&&this.hasEnteredView))return;d&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",d);const{onViewportEnter:u,onViewportLeave:p}=this.node.getProps(),f=d?u:p;f&&f(c)};return XFe(this.node.current,l,s)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:r,prevProps:n}=this.node;["amount","margin","root"].some(QFe(r,n))&&this.startObserver()}unmount(){}}function QFe({viewport:e={}},{viewport:r={}}={}){return n=>e[n]!==r[n]}const JFe={inView:{Feature:ZFe},tap:{Feature:UFe},focus:{Feature:HFe},hover:{Feature:qFe}},eVe={layout:{ProjectionNode:RZ,MeasureLayout:JK}},tVe={renderer:ALe,...HLe,...JFe},rVe={...tVe,...VFe,...eVe};function jZ(e){const r=ag(()=>_p(e)),{isStatic:n}=S.useContext(Ep);if(n){const[,o]=S.useState(e);S.useEffect(()=>r.on("change",o),[])}return r}function nVe(){!bC.current&&aK();const[e]=S.useState(Y3.current);return e}function AZ(){const e=nVe(),{reducedMotion:r}=S.useContext(Ep);return r==="never"?!1:r==="always"?!0:e}class oVe{constructor(){this.componentControls=new Set}subscribe(r){return this.componentControls.add(r),()=>this.componentControls.delete(r)}start(r,n){this.componentControls.forEach(o=>{o.start(r.nativeEvent||r,n)})}cancel(){this.componentControls.forEach(r=>{r.cancel()})}stop(){this.componentControls.forEach(r=>{r.stop()})}}const iVe=()=>new oVe;function aVe(){return ag(iVe)}const FC=S.createContext(null);FC.displayName="ElementDetailsActorContext";const lVe=()=>{const e=S.useContext(FC);if(e===null)throw new Error("ElementDetailsActorRef is not provided");return e},ya=(e,r,n)=>{const o=i=>({[e]:"__ignore__",...r,...Vu(i)});return{recipeFn:(i,a=!0)=>{const l=cL({conditions:{shift:fL,finalize:hL,breakpoints:{keys:["base","xs","sm","md","lg","xl"]}},utility:{toHash:(c,d)=>d(c.join(":")),transform:(c,d)=>(jke(e,n,i,c),d==="__ignore__"?{className:e}:(d=i7(d),{className:`${e}--${c}_${d}`}))}}),s=o(i);if(a){const c=u7(n,s);return Ge(l(s),fe(c))}return l(s)},getVariantProps:o,__getCompoundVariantCss__:i=>u7(n,o(i))}},is=(e,r)=>{if(e&&!r)return e;if(!e&&r)return r;const n=(...a)=>Ge(e(...a),r(...a)),o=c7(e.variantKeys,r.variantKeys),i=o.reduce((a,l)=>(a[l]=c7(e.variantMap[l],r.variantMap[l]),a),{});return Object.assign(n,{__recipe__:!0,__name__:`${e.__name__} ${r.__name__}`,raw:a=>a,variantKeys:o,variantMap:i,splitVariantProps(a){return Fn(a,o)}})},VC=ya("action-btn",{size:"md",radius:"md",variant:"filled"},[]),DZ={variant:["transparent","filled"],size:["sm","md"],radius:["sm","md"]},PZ=Object.keys(DZ),a2=Object.assign(Kn(VC.recipeFn),{__recipe__:!0,__name__:"actionBtn",__getCompoundVariantCss__:VC.__getCompoundVariantCss__,raw:e=>e,variantKeys:PZ,variantMap:DZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,PZ)},getVariantProps:VC.getVariantProps}),qC=ya("likec4-compound-node",{},[]),MZ={isTransparent:["false","true"],inverseColor:["true","false"],borderStyle:["solid","dashed","dotted","none"]},NZ=Object.keys(MZ),sVe=Object.assign(Kn(qC.recipeFn),{__recipe__:!0,__name__:"compoundNode",__getCompoundVariantCss__:qC.__getCompoundVariantCss__,raw:e=>e,variantKeys:NZ,variantMap:MZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,NZ)},getVariantProps:qC.getVariantProps}),HC=ya("likec4-edge-action-btn",{},[]),BZ={},IZ=Object.keys(BZ),cVe=Object.assign(Kn(HC.recipeFn),{__recipe__:!0,__name__:"edgeActionBtn",__getCompoundVariantCss__:HC.__getCompoundVariantCss__,raw:e=>e,variantKeys:IZ,variantMap:BZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,IZ)},getVariantProps:HC.getVariantProps}),UC=ya("likec4-edge-label",{pointerEvents:"all",isStepEdge:!1,cursor:"default"},[]),OZ={pointerEvents:["none","all"],cursor:["pointer","default"],isStepEdge:["false","true"]},LZ=Object.keys(OZ),dVe=Object.assign(Kn(UC.recipeFn),{__recipe__:!0,__name__:"edgeLabel",__getCompoundVariantCss__:UC.__getCompoundVariantCss__,raw:e=>e,variantKeys:LZ,variantMap:OZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,LZ)},getVariantProps:UC.getVariantProps}),FZ={},uVe=[],pVe=[["path","likec4-edge__path"],["pathBg","likec4-edge__pathBg"],["markersCtx","likec4-edge__markersCtx"],["middlePoint","likec4-edge__middlePoint"]],hVe=pVe.map(([e,r])=>[e,ya(r,FZ,s7(uVe,e))]),fVe=Kn((e={})=>Object.fromEntries(hVe.map(([r,n])=>[r,n.recipeFn(e)]))),VZ=[],gVe=e=>({...FZ,...Vu(e)}),mVe=Object.assign(fVe,{__recipe__:!1,__name__:"edgePath",raw:e=>e,classNameMap:{},variantKeys:VZ,variantMap:{},splitVariantProps(e){return Fn(e,VZ)},getVariantProps:gVe}),WC=ya("likec4-element-node-data",{},[]),qZ={},HZ=Object.keys(qZ),yVe=Object.assign(Kn(WC.recipeFn),{__recipe__:!0,__name__:"elementNodeData",__getCompoundVariantCss__:WC.__getCompoundVariantCss__,raw:e=>e,variantKeys:HZ,variantMap:qZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,HZ)},getVariantProps:WC.getVariantProps}),GC=ya("likec4-element-shape",{},[]),UZ={shapetype:["html","svg"]},WZ=Object.keys(UZ),GZ=Object.assign(Kn(GC.recipeFn),{__recipe__:!0,__name__:"elementShapeRecipe",__getCompoundVariantCss__:GC.__getCompoundVariantCss__,raw:e=>e,variantKeys:WZ,variantMap:UZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,WZ)},getVariantProps:GC.getVariantProps}),YC=ya("likec4-tag",{autoTextColor:!1},[]),YZ={autoTextColor:["false","true"]},XZ=Object.keys(YZ),vVe=Object.assign(Kn(YC.recipeFn),{__recipe__:!0,__name__:"likec4tag",__getCompoundVariantCss__:YC.__getCompoundVariantCss__,raw:e=>e,variantKeys:XZ,variantMap:YZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,XZ)},getVariantProps:YC.getVariantProps}),XC=ya("likec4-markdown-block",{uselikec4palette:!1,value:"markdown"},[]),KZ={uselikec4palette:["true","false"],value:["markdown","plaintext"]},ZZ=Object.keys(KZ),bVe=Object.assign(Kn(XC.recipeFn),{__recipe__:!0,__name__:"markdownBlock",__getCompoundVariantCss__:XC.__getCompoundVariantCss__,raw:e=>e,variantKeys:ZZ,variantMap:KZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,ZZ)},getVariantProps:XC.getVariantProps}),KC=ya("likec4-navigation-panel-icon",{variant:"default",type:"default"},[{type:"warning",variant:"filled",css:{backgroundColor:{base:"likec4.panel.action.warning.bg",_hover:"likec4.panel.action.warning.bg.hover"}}}]),QZ={variant:["default","filled"],type:["default","warning"]},JZ=Object.keys(QZ),eQ=Object.assign(Kn(KC.recipeFn),{__recipe__:!0,__name__:"navigationPanelActionIcon",__getCompoundVariantCss__:KC.__getCompoundVariantCss__,raw:e=>e,variantKeys:JZ,variantMap:QZ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,JZ)},getVariantProps:KC.getVariantProps}),ZC=ya("likec4-overlay",{fullscreen:!1,withBackdrop:!0},[]),tQ={fullscreen:["false","true"],withBackdrop:["false","true"]},rQ=Object.keys(tQ),xVe=Object.assign(Kn(ZC.recipeFn),{__recipe__:!0,__name__:"overlay",__getCompoundVariantCss__:ZC.__getCompoundVariantCss__,raw:e=>e,variantKeys:rQ,variantMap:tQ,merge(e){return is(this,e)},splitVariantProps(e){return Fn(e,rQ)},getVariantProps:ZC.getVariantProps}),nQ={truncateLabel:!1},wVe=[],kVe=[["root","likec4-navlink__root"],["body","likec4-navlink__body"],["section","likec4-navlink__section"],["label","likec4-navlink__label"],["description","likec4-navlink__description"]],_Ve=kVe.map(([e,r])=>[e,ya(r,nQ,s7(wVe,e))]),SVe=Kn((e={})=>Object.fromEntries(_Ve.map(([r,n])=>[r,n.recipeFn(e)]))),oQ=["truncateLabel"],EVe=e=>({...nQ,...Vu(e)}),CVe=Object.assign(SVe,{__recipe__:!1,__name__:"navigationLink",raw:e=>e,classNameMap:{},variantKeys:oQ,variantMap:{truncateLabel:["true","false"]},splitVariantProps(e){return Fn(e,oQ)},getVariantProps:EVe});function iQ(){return pf()}function QC(e,r){return Dt(at(e),r??Ir)}function JC(){return vr()}const $Ve=e=>Math.round(e.transform[2]*100)/100;function RVe(){return Dt($Ve)}const zVe=e=>e.transform[2]<.2;function TVe(){return Dt(zVe)}const{abs:Xy,cos:ac,sin:cg,acos:jVe,atan2:Ky,sqrt:jd,pow:va}=Math;function Zy(e){return e<0?-va(-e,.3333333333333333):va(e,.3333333333333333)}const aQ=Math.PI,l2=2*aQ,Ad=aQ/2,AVe=1e-6,e$=Number.MAX_SAFE_INTEGER||9007199254740991,t$=Number.MIN_SAFE_INTEGER||-9007199254740991,DVe={x:0,y:0,z:0},Oe={Tvalues:[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213],Cvalues:[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872],arcfn:function(e,r){const n=r(e);let o=n.x*n.x+n.y*n.y;return typeof n.z<"u"&&(o+=n.z*n.z),jd(o)},compute:function(e,r,n){if(e===0)return r[0].t=0,r[0];const o=r.length-1;if(e===1)return r[o].t=1,r[o];const i=1-e;let a=r;if(o===0)return r[0].t=e,r[0];if(o===1){const s={x:i*a[0].x+e*a[1].x,y:i*a[0].y+e*a[1].y,t:e};return n&&(s.z=i*a[0].z+e*a[1].z),s}if(o<4){let s=i*i,c=e*e,d,u,p,f=0;o===2?(a=[a[0],a[1],a[2],DVe],d=s,u=i*e*2,p=c):o===3&&(d=s*i,u=s*e*3,p=i*c*3,f=e*c);const m={x:d*a[0].x+u*a[1].x+p*a[2].x+f*a[3].x,y:d*a[0].y+u*a[1].y+p*a[2].y+f*a[3].y,t:e};return n&&(m.z=d*a[0].z+u*a[1].z+p*a[2].z+f*a[3].z),m}const l=JSON.parse(JSON.stringify(r));for(;l.length>1;){for(let s=0;s1;i--,a--){const l=[];for(let s=0,c;s"u")e=.5;else if(e===0||e===1)return e;const n=va(e,r)+va(1-e,r),o=n-1;return Xy(o/n)},projectionratio:function(e,r){if(r!==2&&r!==3)return!1;if(typeof e>"u")e=.5;else if(e===0||e===1)return e;const n=va(1-e,r),o=va(e,r)+n;return n/o},lli8:function(e,r,n,o,i,a,l,s){const c=(e*o-r*n)*(i-l)-(e-n)*(i*s-a*l),d=(e*o-r*n)*(a-s)-(r-o)*(i*s-a*l),u=(e-n)*(a-s)-(r-o)*(i-l);return u==0?!1:{x:c/u,y:d/u}},lli4:function(e,r,n,o){const i=e.x,a=e.y,l=r.x,s=r.y,c=n.x,d=n.y,u=o.x,p=o.y;return Oe.lli8(i,a,l,s,c,d,u,p)},lli:function(e,r){return Oe.lli4(e,e.c,r,r.c)},makeline:function(e,r){return new Fr(e.x,e.y,(e.x+r.x)/2,(e.y+r.y)/2,r.x,r.y)},findbbox:function(e){let r=e$,n=e$,o=t$,i=t$;return e.forEach(function(a){const l=a.bbox();r>l.x.min&&(r=l.x.min),n>l.y.min&&(n=l.y.min),o0&&(u.c1=c,u.c2=d,u.s1=e,u.s2=n,a.push(u))})}),a},makeshape:function(e,r,n){const o=r.points.length,i=e.points.length,a=Oe.makeline(r.points[o-1],e.points[0]),l=Oe.makeline(e.points[i-1],r.points[0]),s={startcap:a,forward:e,back:r,endcap:l,bbox:Oe.findbbox([a,e,r,l])};return s.intersections=function(c){return Oe.shapeintersections(s,s.bbox,c,c.bbox,n)},s},getminmax:function(e,r,n){if(!n)return{min:0,max:0};let o=e$,i=t$,a,l;n.indexOf(0)===-1&&(n=[0].concat(n)),n.indexOf(1)===-1&&n.push(1);for(let s=0,c=n.length;si&&(i=l[r]);return{min:o,mid:(o+i)/2,max:i,size:i-o}},align:function(e,r){const n=r.p1.x,o=r.p1.y,i=-Ky(r.p2.y-o,r.p2.x-n),a=function(l){return{x:(l.x-n)*ac(i)-(l.y-o)*cg(i),y:(l.x-n)*cg(i)+(l.y-o)*ac(i)}};return e.map(a)},roots:function(e,r){r=r||{p1:{x:0,y:0},p2:{x:1,y:0}};const n=e.length-1,o=Oe.align(e,r),i=function(A){return 0<=A&&A<=1};if(n===2){const A=o[0].y,z=o[1].y,j=o[2].y,I=A-2*z+j;if(I!==0){const N=-jd(z*z-A*j),L=-A+z,H=-(N+L)/I,P=-(-N+L)/I;return[H,P].filter(i)}else if(z!==j&&I===0)return[(2*z-j)/(2*z-2*j)].filter(i);return[]}const a=o[0].y,l=o[1].y,s=o[2].y,c=o[3].y;let d=-a+3*l-3*s+c,u=3*a-6*l+3*s,p=-3*a+3*l,f=a;if(Oe.approximately(d,0)){if(Oe.approximately(u,0))return Oe.approximately(p,0)?[]:[-f/p].filter(i);const A=jd(p*p-4*u*f),z=2*u;return[(A-p)/z,(-p-A)/z].filter(i)}u/=d,p/=d,f/=d;const m=(3*p-u*u)/3,v=m/3,w=(2*u*u*u-9*u*p+27*f)/27,x=w/2,k=x*x+v*v*v;let C,_,$,R,T;if(k<0){const A=-m/3,z=A*A*A,j=jd(z),I=-w/(2*j),N=I<-1?-1:I>1?1:I,L=jVe(N),H=Zy(j),P=2*H;return $=P*ac(L/3)-u/3,R=P*ac((L+l2)/3)-u/3,T=P*ac((L+2*l2)/3)-u/3,[$,R,T].filter(i)}else{if(k===0)return C=x<0?Zy(-x):-Zy(x),$=2*C-u/3,R=-C-u/3,[$,R].filter(i);{const A=jd(k);return C=Zy(-x+A),_=Zy(x+A),[C-_-u/3].filter(i)}}},droots:function(e){if(e.length===3){const r=e[0],n=e[1],o=e[2],i=r-2*n+o;if(i!==0){const a=-jd(n*n-r*o),l=-r+n,s=-(a+l)/i,c=-(-a+l)/i;return[s,c]}else if(n!==o&&i===0)return[(2*n-o)/(2*(n-o))];return[]}if(e.length===2){const r=e[0],n=e[1];return r!==n?[r/(r-n)]:[]}return[]},curvature:function(e,r,n,o,i){let a,l,s,c,d=0,u=0;const p=Oe.compute(e,r),f=Oe.compute(e,n),m=p.x*p.x+p.y*p.y;if(o?(a=jd(va(p.y*f.z-f.y*p.z,2)+va(p.z*f.x-f.z*p.x,2)+va(p.x*f.y-f.x*p.y,2)),l=va(m+p.z*p.z,3/2)):(a=p.x*f.y-p.y*f.x,l=va(m,3/2)),a===0||l===0)return{k:0,r:0};if(d=a/l,u=l/a,!i){const v=Oe.curvature(e-.001,r,n,o,!0).k,w=Oe.curvature(e+.001,r,n,o,!0).k;c=(w-d+(d-v))/2,s=(Xy(w-d)+Xy(d-v))/2}return{k:d,r:u,dk:c,adk:s}},inflections:function(e){if(e.length<4)return[];const r=Oe.align(e,{p1:e[0],p2:e.slice(-1)[0]}),n=r[2].x*r[1].y,o=r[3].x*r[1].y,i=r[1].x*r[2].y,a=r[3].x*r[2].y,l=18*(-3*n+2*o+3*i-a),s=18*(3*n-o-3*i),c=18*(i-n);if(Oe.approximately(l,0)){if(!Oe.approximately(s,0)){let f=-c/s;if(0<=f&&f<=1)return[f]}return[]}const d=2*l;if(Oe.approximately(d,0))return[];const u=s*s-4*l*c;if(u<0)return[];const p=Math.sqrt(u);return[(p-s)/d,-(s+p)/d].filter(function(f){return 0<=f&&f<=1})},bboxoverlap:function(e,r){const n=["x","y"],o=n.length;for(let i=0,a,l,s,c;i=c)return!1;return!0},expandbox:function(e,r){r.x.mine.x.max&&(e.x.max=r.x.max),r.y.max>e.y.max&&(e.y.max=r.y.max),r.z&&r.z.max>e.z.max&&(e.z.max=r.z.max),e.x.mid=(e.x.min+e.x.max)/2,e.y.mid=(e.y.min+e.y.max)/2,e.z&&(e.z.mid=(e.z.min+e.z.max)/2),e.x.size=e.x.max-e.x.min,e.y.size=e.y.max-e.y.min,e.z&&(e.z.size=e.z.max-e.z.min)},pairiteration:function(e,r,n){const o=e.bbox(),i=r.bbox(),a=1e5,l=n||.5;if(o.x.size+o.y.sizeT||T>A)&&(R+=l2),R>A&&(z=A,A=R,R=z)):A4){if(arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");i=!0}}else if(a!==6&&a!==8&&a!==9&&a!==12&&arguments.length!==1)throw new Error("Only new Bezier(point[]) is accepted for 4th and higher order curves");const l=this._3d=!i&&(a===9||a===12)||r&&r[0]&&typeof r[0].z<"u",s=this.points=[];for(let m=0,v=l?3:2;mm+Jy(v.y),0)"u"&&(i=.5),i===0)return new Fr(n,n,o);if(i===1)return new Fr(r,n,n);const a=Fr.getABC(2,r,n,o,i);return new Fr(r,a.A,o)}static cubicFromPoints(r,n,o,i,a){typeof i>"u"&&(i=.5);const l=Fr.getABC(3,r,n,o,i);typeof a>"u"&&(a=Oe.dist(n,l.C));const s=a*(1-i)/i,c=Oe.dist(r,o),d=(o.x-r.x)/c,u=(o.y-r.y)/c,p=a*d,f=a*u,m=s*d,v=s*u,w={x:n.x-p,y:n.y-f},x={x:n.x+m,y:n.y+v},k=l.A,C={x:k.x+(w.x-k.x)/(1-i),y:k.y+(w.y-k.y)/(1-i)},_={x:k.x+(x.x-k.x)/i,y:k.y+(x.y-k.y)/i},$={x:r.x+(C.x-r.x)/i,y:r.y+(C.y-r.y)/i},R={x:o.x+(_.x-o.x)/(1-i),y:o.y+(_.y-o.y)/(1-i)};return new Fr(r,$,R,o)}static getUtils(){return Oe}getUtils(){return Fr.getUtils()}static get PolyBezier(){return Qy}valueOf(){return this.toString()}toString(){return Oe.pointsToString(this.points)}toSVG(){if(this._3d)return!1;const r=this.points,n=r[0].x,o=r[0].y,i=["M",n,o,this.order===2?"Q":"C"];for(let a=1,l=r.length;a0}length(){return Oe.length(this.derivative.bind(this))}static getABC(r=2,n,o,i,a=.5){const l=Oe.projectionratio(a,r),s=1-l,c={x:l*n.x+s*i.x,y:l*n.y+s*i.y},d=Oe.abcratio(a,r);return{A:{x:o.x+(o.x-c.x)/d,y:o.y+(o.y-c.y)/d},B:o,C:c,S:n,E:i}}getABC(r,n){n=n||this.get(r);let o=this.points[0],i=this.points[this.order];return Fr.getABC(this.order,o,n,i,r)}getLUT(r){if(this.verify(),r=r||100,this._lut.length===r+1)return this._lut;this._lut=[],r++,this._lut=[];for(let n=0,o,i;n1?1:p,f=this.compute(p),f.t=p,f.d=d,f}get(r){return this.compute(r)}point(r){return this.points[r]}compute(r){return this.ratios?Oe.computeWithRatios(r,this.points,this.ratios,this._3d):Oe.compute(r,this.points,this._3d,this.ratios)}raise(){const r=this.points,n=[r[0]],o=r.length;for(let i=1,a,l;i1;){o=[];for(let l=0,s,c=n.length-1;l=0&&l<=1}),n=n.concat(r[o].sort(Oe.numberSort))}).bind(this)),r.values=n.sort(Oe.numberSort).filter(function(o,i){return n.indexOf(o)===i}),r}bbox(){const r=this.extrema(),n={};return this.dims.forEach((function(o){n[o]=Oe.getminmax(this,o,r[o])}).bind(this)),n}overlaps(r){const n=this.bbox(),o=r.bbox();return Oe.bboxoverlap(n,o)}offset(r,n){if(typeof n<"u"){const o=this.get(r),i=this.normal(r),a={c:o,n:i,x:o.x+i.x*n,y:o.y+i.y*n};return this._3d&&(a.z=o.z+i.z*n),a}if(this._linear){const o=this.normal(0),i=this.points.map(function(a){const l={x:a.x+r*o.x,y:a.y+r*o.y};return a.z&&o.z&&(l.z=a.z+r*o.z),l});return[new Fr(i)]}return this.reduce().map(function(o){return o._linear?o.offset(r)[0]:o.scale(r)})}simple(){if(this.order===3){const i=Oe.angle(this.points[0],this.points[3],this.points[1]),a=Oe.angle(this.points[0],this.points[3],this.points[2]);if(i>0&&a<0||i<0&&a>0)return!1}const r=this.normal(0),n=this.normal(1);let o=r.x*n.x+r.y*n.y;return this._3d&&(o+=r.z*n.z),Jy(NVe(o))(1-s/i)*n+s/i*o);return new Fr(this.points.map((l,s)=>({x:l.x+r.x*a[s],y:l.y+r.y*a[s]})))}scale(r){const n=this.order;let o=!1;if(typeof r=="function"&&(o=r),o&&n===2)return this.raise().scale(o);const i=this.clockwise,a=this.points;if(this._linear)return this.translate(this.normal(0),o?o(0):r,o?o(1):r);const l=o?o(0):r,s=o?o(1):r,c=[this.offset(0,10),this.offset(1,10)],d=[],u=Oe.lli4(c[0],c[0].c,c[1],c[1].c);if(!u)throw new Error("cannot scale this curve. Try reducing it first.");return[0,1].forEach(function(p){const f=d[p*n]=Oe.copy(a[p*n]);f.x+=(p?s:l)*c[p].n.x,f.y+=(p?s:l)*c[p].n.y}),o?([0,1].forEach(function(p){if(!(n===2&&p)){var f=a[p+1],m={x:f.x-u.x,y:f.y-u.y},v=o?o((p+1)/n):r;o&&!i&&(v=-v);var w=e0(m.x*m.x+m.y*m.y);m.x/=w,m.y/=w,d[p+1]={x:f.x+v*m.x,y:f.y+v*m.y}}}),new Fr(d)):([0,1].forEach(p=>{if(n===2&&p)return;const f=d[p*n],m=this.derivative(p),v={x:f.x+m.x,y:f.y+m.y};d[p+1]=Oe.lli4(f,v,u,a[p+1])}),new Fr(d))}outline(r,n,o,i){if(n=n===void 0?r:n,this._linear){const R=this.normal(0),T=this.points[0],A=this.points[this.points.length-1];let z,j,I;o===void 0&&(o=r,i=n),z={x:T.x+R.x*r,y:T.y+R.y*r},I={x:A.x+R.x*o,y:A.y+R.y*o},j={x:(z.x+I.x)/2,y:(z.y+I.y)/2};const N=[z,j,I];z={x:T.x-R.x*n,y:T.y-R.y*n},I={x:A.x-R.x*i,y:A.y-R.y*i},j={x:(z.x+I.x)/2,y:(z.y+I.y)/2};const L=[I,j,z],H=Oe.makeline(L[2],N[0]),P=Oe.makeline(N[2],L[0]),V=[H,new Fr(N),P,new Fr(L)];return new Qy(V)}const a=this.reduce(),l=a.length,s=[];let c=[],d,u=0,p=this.length();const f=typeof o<"u"&&typeof i<"u";function m(R,T,A,z,j){return function(I){const N=z/A,L=(z+j)/A,H=T-R;return Oe.map(I,0,1,R+N*H,R+L*H)}}a.forEach(function(R){const T=R.length();f?(s.push(R.scale(m(r,o,p,u,T))),c.push(R.scale(m(-n,-i,p,u,T)))):(s.push(R.scale(r)),c.push(R.scale(-n))),u+=T}),c=c.map(function(R){return d=R.points,d[3]?R.points=[d[3],d[2],d[1],d[0]]:R.points=[d[2],d[1],d[0]],R}).reverse();const v=s[0].points[0],w=s[l-1].points[s[l-1].points.length-1],x=c[l-1].points[c[l-1].points.length-1],k=c[0].points[0],C=Oe.makeline(x,v),_=Oe.makeline(w,k),$=[C].concat(s).concat([_]).concat(c);return new Qy($)}outlineshapes(r,n,o){n=n||r;const i=this.outline(r,n).curves,a=[];for(let l=1,s=i.length;l1,c.endcap.virtual=l{var s=this.get(l);return Oe.between(s.x,n,i)&&Oe.between(s.y,o,a)})}selfintersects(r){const n=this.reduce(),o=n.length-2,i=[];for(let a=0,l,s,c;a0&&(a=a.concat(s))}),a}arcs(r){return r=r||.5,this._iterate(r,[])}_error(r,n,o,i){const a=(i-o)/4,l=this.get(o+a),s=this.get(i-a),c=Oe.dist(r,n),d=Oe.dist(r,l),u=Oe.dist(r,s);return Jy(d-c)+Jy(u-c)}_iterate(r,n){let o=0,i=1,a;do{a=0,i=1;let l=this.get(o),s,c,d,u,p=!1,f=!1,m,v=i,w=1;do if(f=p,u=d,v=(o+i)/2,s=this.get(v),c=this.get(i),d=Oe.getccenter(l,s,c),d.interval={start:o,end:i},p=this._error(d,l,o,i)<=r,m=f&&!p,m||(w=i),p){if(i>=1){if(d.interval.end=w=1,u=d,i>1){let x={x:d.x+d.r*PVe(d.e),y:d.y+d.r*MVe(d.e)};d.e+=Oe.angle({x:d.x,y:d.y},x,this.get(1))}break}i=i+(i-o)/2}else i=v;while(!m&&a++<100);if(a>=100)break;u=u||d,n.push(u),o=w}while(i<1);return n}}function cQ(e,r){return e.x===r.x&&e.y===r.y&&e.width===r.width&&e.height===r.height}const r$=e=>({x:Math.round(e.internals.positionAbsolute.x),y:Math.round(e.internals.positionAbsolute.y),width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0});function n$(e){const{width:r,height:n}=_o(e),{x:o,y:i}=e.internals.positionAbsolute;return{x:Math.round(o+r/2),y:Math.round(i+n/2)}}function s2(e,r,n=0){const{width:o,height:i}=e,a=ko.center(e),l=Qr(r.x,r.y).subtract(a),s=(n+o/2)/l.x,c=(n+i/2)/l.y,d=Math.min(Math.abs(s),Math.abs(c));return Qr(l).multiply(d).add(a).round()}function c2(e){let[r,...n]=e;He(r,"start should be defined");const o=[];for(;xn(n,3);){const[i,a,l,...s]=n,c=new Fr(r[0],r[1],i[0],i[1],a[0],a[1],l[0],l[1]),d=c.inflections();d.length===0&&d.push(.5),d.forEach(u=>{const{x:p,y:f}=c.get(u);o.push({x:Math.round(p),y:Math.round(f)})}),n=s,r=l}return He(n.length===0,"all points should be consumed"),He(xn(o,1),"at least one control point should be generated"),o}function d2(e,r){const n=i9(e)?{x:e[0],y:e[1]}:e,o=i9(r)?{x:r[0],y:r[1]}:r;return IVe(n,o)<2.1}function IVe(e,r){return Math.hypot(r.x-e.x,r.y-e.y)}function nn(e){return e.stopPropagation()}function OVe(e){let[r,...n]=e;He(r,"start should be defined");let o=`M ${r[0]},${r[1]}`;for(;xn(n,3);){const[i,a,l,...s]=n;o=o+` C ${i[0]},${i[1]} ${a[0]},${a[1]} ${l[0]},${l[1]}`,n=s}return He(n.length===0,"all points should be consumed"),o}const u2=S.forwardRef(({tag:e,cursor:r,className:n,style:o,...i},a)=>{const l=_Me(e);return y.jsxs(hr,{ref:a,"data-likec4-tag":e,className:Ge(vVe({autoTextColor:GO(l)}),n),...i,style:{cursor:r,...o},children:[y.jsx("span",{children:"#"}),y.jsx("span",{children:e})]})}),LVe=(e,r)=>e.data.width===r.data.width&&tt(e.data.tags,r.data.tags)&&(e.data.hovered??!1)===(r.data.hovered??!1),t0=S.memo(({id:e,data:{tags:r,width:n,hovered:o=!1}})=>{const{hovered:i,ref:a}=b9(),{hovered:l,ref:s}=b9(),[c,d]=KRe(!1,o?120:300);S.useEffect(()=>{d(x=>x?o||i||l:o&&(i||l))},[i,l,o]);const u=RVe(),p=u>1.2,f=Mt(),m=x=>{f.send({type:"tag.highlight",tag:x})},v=S.useCallback(()=>{f.send({type:"tag.unhighlight"})},[]);if(!r||r.length===0)return null;const w=Math.max(Math.round(n*u)-10,200);return y.jsxs(y.Fragment,{children:[y.jsx("div",{ref:a,className:Ge("likec4-element-tags",qn({pointerEvents:"all",gap:"1",alignItems:"flex-end",justifyItems:"stretch",position:"absolute",width:"100%",bottom:"0",left:"0",padding:"1",_shapeCylinder:{bottom:"[5px]"},_shapeStorage:{bottom:"[5px]"},_shapeQueue:{bottom:"0",paddingLeft:"[14px]"}})),onClick:nn,children:r.map(x=>y.jsx(hr,{"data-likec4-tag":x,className:fe({layerStyle:"likec4.tag",flex:"1",display:"flex",alignItems:"center",justifyContent:"center",maxWidth:50,height:5,_whenHovered:{height:12,borderRadius:4,transitionDelay:".08s"},transition:"fast"})},e+"#"+x))}),y.jsx(r9,{isVisible:c,align:"start",position:Ue.Bottom,children:y.jsx(Or,{ref:s,css:{gap:"0.5",alignItems:"baseline",flexWrap:"wrap",pb:"sm",translate:"auto",x:"[-8px]",maxWidth:w},children:r.map(x=>y.jsx(u2,{tag:x,cursor:"pointer",className:fe({userSelect:"none",...p&&{fontSize:"lg",borderRadius:"[4px]",px:"1.5"}}),onClick:k=>{k.stopPropagation(),f.openSearch(`#${x}`)},onMouseEnter:()=>m(x),onMouseLeave:v},x))})})]})},LVe);t0.displayName="ElementTags";const FVe=S.forwardRef((e,r)=>y.jsx("svg",{height:"24",width:"24",fill:"currentColor",...e,viewBox:"0 0 24 24",ref:r,children:y.jsx("path",{d:"M12 1C5.923 1 1 5.923 1 12c0 4.867 3.149 8.979 7.521 10.436.55.096.756-.233.756-.522 0-.262-.013-1.128-.013-2.049-2.764.509-3.479-.674-3.699-1.292-.124-.317-.66-1.293-1.127-1.554-.385-.207-.936-.715-.014-.729.866-.014 1.485.797 1.691 1.128.99 1.663 2.571 1.196 3.204.907.096-.715.385-1.196.701-1.471-2.448-.275-5.005-1.224-5.005-5.432 0-1.196.426-2.186 1.128-2.956-.111-.275-.496-1.402.11-2.915 0 0 .921-.288 3.024 1.128a10.193 10.193 0 0 1 2.75-.371c.936 0 1.871.123 2.75.371 2.104-1.43 3.025-1.128 3.025-1.128.605 1.513.221 2.64.111 2.915.701.77 1.127 1.747 1.127 2.956 0 4.222-2.571 5.157-5.019 5.432.399.344.743 1.004.743 2.035 0 1.471-.014 2.654-.014 3.025 0 .289.206.632.756.522C19.851 20.979 23 16.854 23 12c0-6.077-4.922-11-11-11Z"})})),VVe=[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]],dQ=wt("outline","check","Check",VVe),qVe=[["path",{d:"M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z",key:"svg-0"}],["path",{d:"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1",key:"svg-1"}]],HVe=wt("outline","copy","Copy",qVe),uQ="https://github.com/",o$=S.forwardRef(({value:e,className:r,...n},o)=>{const i=e.url.includes("://")?e.url:new window.URL(e.url,window.location.href).toString();let a=i.startsWith(uQ);return y.jsx(ec,{ref:o,variant:"default",radius:"sm",size:"sm",tt:"none",leftSection:e.title?y.jsx(y.Fragment,{children:e.title}):null,rightSection:y.jsx(UW,{value:i,timeout:1500,children:({copy:l,copied:s})=>y.jsx(lr,{className:fe({opacity:s?1:.45,transition:"fast",_hover:{opacity:1}}),tabIndex:-1,size:"20",variant:s?"light":"transparent",color:s?"teal":"gray","data-active":s,onClick:c=>{c.stopPropagation(),c.preventDefault(),l()},children:s?y.jsx(dQ,{}):y.jsx(HVe,{stroke:2.5})})}),...n,className:Ge(r,"group"),classNames:{root:fe({flexWrap:"nowrap",minHeight:24,maxWidth:500,userSelect:"all",pr:"0",backgroundColor:{base:"transparent",_hover:{base:"mantine.colors.gray[1]",_dark:"mantine.colors.dark[5]"}}}),section:fe({'&:is([data-position="left"])':{color:"mantine.colors.dimmed",userSelect:"none",pointerEvents:"none",_groupHover:{color:"[var(--badge-color)]",opacity:.7}}})},children:y.jsxs(Ed.a,{href:i,target:"_blank",style:{color:"var(--badge-color)",cursor:"pointer"},css:{transition:"fast",opacity:{base:.7,_hover:1},textDecoration:{base:"none",_hover:"underline"}},children:[a&&y.jsx(FVe,{height:"12",width:"12",style:{verticalAlign:"middle",marginRight:"4px"}}),a?i.replace(uQ,""):i]})})});function UVe(){return S.useContext(GS)}function WVe(){const e=S.useContext(GS);if(!e)throw new Error("No LikeC4ViewModel in context found");return e}const p2="--_blur",h2="--_opacity",GVe=fe({boxSizing:"border-box",margin:"0",padding:"0",position:"fixed",inset:"0",width:"100vw",height:"100vh",maxWidth:"100vw",maxHeight:"100vh",background:"transparent",border:"transparent",_backdrop:{backdropFilter:"auto",backdropBlur:`var(${p2})`,backgroundColor:`[rgb(36 36 36 / var(${h2}, 5%))]`}}),YVe=fe({position:"absolute",pointerEvents:"all",display:"flex",flexDirection:"column",padding:"4",gap:"lg",justifyContent:"stretch",color:"mantine.colors.text",boxShadow:"md",overflow:"hidden",border:"none",background:`[ - linear-gradient(180deg, - color-mix(in oklab, var(--likec4-palette-fill) 60%, transparent), - color-mix(in oklab, var(--likec4-palette-fill) 20%, transparent) 8px, - color-mix(in oklab, var(--likec4-palette-fill) 14%, transparent) 20px, - transparent 80px - ), - linear-gradient(180deg, var(--likec4-palette-fill), var(--likec4-palette-fill) 4px, transparent 4px), - {colors.likec4.overlay.body} - ]`,"& .react-flow__attribution":{display:"none"}}),XVe=fe({flex:0,cursor:"move"}),KVe=fe({display:"block",fontFamily:"likec4.element",fontOpticalSizing:"auto",fontStyle:"normal",fontWeight:600,fontSize:"24px",lineHeight:"xs"}),i$="40px",ZVe=fe({flex:`0 0 ${i$}`,height:i$,width:i$,display:"flex",alignItems:"center",justifyContent:"center",alignSelf:"flex-start",cursor:"move",_dark:{mixBlendMode:"hard-light"},"& :where(svg, img)":{width:"100%",height:"auto",maxHeight:"100%",pointerEvents:"none",filter:` - drop-shadow(0 0 3px rgb(0 0 0 / 10%)) - drop-shadow(0 1px 8px rgb(0 0 0 / 5%)) - drop-shadow(1px 1px 16px rgb(0 0 0 / 2%)) - `},"& img":{objectFit:"contain"}}),f2="--view-title-color",g2="--icon-color",QVe=fe({width:"100%",background:"mantine.colors.body",borderRadius:"sm",padding:"[10px 8px]",transition:"fast",border:"1px dashed",borderColor:"mantine.colors.defaultBorder",[f2]:"{colors.mantine.colors.dark[1]}",_hover:{background:"mantine.colors.defaultHover",[g2]:"{colors.mantine.colors.dark[1]}",[f2]:"{colors.mantine.colors.defaultColor}"},_dark:{background:"mantine.colors.dark[6]"},_light:{[g2]:"{colors.mantine.colors.gray[6]}",[f2]:"{colors.mantine.colors.gray[7]}",_hover:{[g2]:"{colors.mantine.colors.gray[7]}"}},"& .mantine-ThemeIcon-root":{transition:"fast",color:`[var(${g2}, {colors.mantine.colors.dark[2]})]`,"--ti-size":"22px",_hover:{color:"mantine.colors.defaultColor"}},"& > *":{transition:"all 130ms {easings.inOut}"},"&:hover > *":{transitionTimingFunction:"out",transform:"translateX(1.6px)"}}),JVe=fe({transition:"fast",color:`[var(${f2}, {colors.mantine.colors.gray[7]})]`,fontSize:"15px",fontWeight:500,lineHeight:"1.4"}),eqe=fe({flex:1,display:"flex",flexDirection:"column",justifyContent:"stretch",overflow:"hidden",gap:"sm"}),tqe=fe({background:"mantine.colors.gray[1]",borderRadius:"sm",flexWrap:"nowrap",gap:"1.5",padding:"1",_dark:{background:"mantine.colors.dark[7]"}}),rqe=fe({fontSize:"xs",fontWeight:500,flexGrow:1,padding:"[6px 8px]",transition:"fast",borderRadius:"sm",color:"mantine.colors.gray[7]",_hover:{transitionTimingFunction:"out",color:"mantine.colors.defaultColor",background:"mantine.colors.gray[3]"},"&[data-active]":{transition:"none",background:"mantine.colors.white",shadow:"xs",color:"mantine.colors.defaultColor"},_dark:{color:"mantine.colors.dark[1]",_hover:{color:"mantine.colors.white",background:"mantine.colors.dark[6]"},"&:is([data-active])":{color:"mantine.colors.white",background:"mantine.colors.dark[5]"}}}),nqe=fe({flex:1,overflow:"hidden",position:"relative","&:not(:has(.mantine-ScrollArea-root))":{paddingLeft:"1",paddingRight:"1"},"& .mantine-ScrollArea-root":{width:"100%",height:"100%","& > div":{paddingLeft:"1",paddingRight:"1"}}}),oqe=fe({flex:1,display:"grid",gridTemplateColumns:"min-content 1fr",gridAutoRows:"min-content max-content",gap:"[24px 20px]",alignItems:"baseline",justifyItems:"stretch"}),iqe=fe({justifySelf:"end",textAlign:"right",userSelect:"none"}),aqe=fe({position:"absolute",width:"14px",height:"14px",border:"3.5px solid",borderColor:"mantine.colors.dark[3]",borderTop:"none",borderLeft:"none",borderRadius:"2px",bottom:"0.5",right:"0.5",transition:"fast",cursor:"se-resize",_hover:{borderWidth:"4px",borderColor:"mantine.colors.dark[1]"}}),lqe=[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]],a$=wt("outline","chevron-down","ChevronDown",lqe),sqe=[["path",{d:"M9 6l6 6l-6 6",key:"svg-0"}]],Dd=wt("outline","chevron-right","ChevronRight",sqe);function pQ({children:e}){return y.jsx(y.Fragment,{children:e})}function hQ({value:e,isExpanded:r}){const[n,o]=S.useState(!1),i=S.useRef(null);return S.useEffect(()=>{i.current&&o(i.current.scrollWidth>i.current.clientWidth)},[e]),y.jsx(_n,{label:n&&!r?e:null,multiline:!0,w:300,withinPortal:!0,children:y.jsx(it,{ref:i,component:"div",className:fe({fontSize:"sm",padding:"xs",userSelect:"all",color:"mantine.colors.text",lineHeight:1.4,whiteSpace:r?"pre-wrap":"nowrap",overflow:r?"visible":"hidden",textOverflow:r?"unset":"ellipsis",wordBreak:r?"break-word":"normal",minWidth:0,width:"100%"}),children:e})})}function cqe({values:e,isExpanded:r}){return r?y.jsx(Lo,{gap:"xs",children:e.map((n,o)=>y.jsxs(Js,{align:"center",gap:"xs",children:[y.jsx(it,{className:fe({fontSize:"xs",color:"mantine.colors.gray[5]",fontWeight:500,flexShrink:0,_dark:{color:"mantine.colors.dark[3]"}}),children:"•"}),y.jsx(Se,{className:fe({minHeight:"32px",display:"flex",alignItems:"center",flex:1}),children:y.jsx(hQ,{value:n,isExpanded:!0})})]},o))}):y.jsx(Se,{className:fe({minHeight:"32px",display:"flex",alignItems:"center",padding:"xs",gap:"xs",flexWrap:"wrap",minWidth:0,overflow:"hidden"}),children:e.map((n,o)=>y.jsxs(Js,{align:"center",gap:"xs",style:{minWidth:0},children:[y.jsx(it,{className:fe({fontSize:"sm",padding:"[4px 8px]",backgroundColor:"mantine.colors.white",color:"mantine.colors.text",borderRadius:"sm",border:"1px solid",borderColor:"mantine.colors.gray[3]",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"min(200px, 100%)",minWidth:"60px",flex:"0 1 auto",userSelect:"all",_dark:{backgroundColor:"mantine.colors.dark[9]",color:"mantine.colors.text",borderColor:"mantine.colors.dark[4]"}}),title:n,children:n}),ol.trim()).filter(Boolean):[r],o=n.length>1,[i,a]=S.useState(!1);return y.jsxs(y.Fragment,{children:[o?y.jsx(pr,{onClick:()=>{a(!i)},className:fe({fontSize:"xs",color:"mantine.colors.dimmed",justifySelf:"end",textAlign:"right",userSelect:"none",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"xs",padding:"[4px 8px]",borderRadius:"sm",whiteSpace:"nowrap",transition:"all 150ms ease",_hover:{backgroundColor:"mantine.colors.gray[1]",color:"mantine.colors.primary[6]",_dark:{backgroundColor:"mantine.colors.dark[7]",color:"mantine.colors.primary[4]"}}}),children:y.jsxs(Js,{align:"center",gap:"xs",children:[y.jsxs(it,{component:"span",size:"xs",fw:700,children:[e,":"]}),y.jsx(it,{component:"span",className:fe({fontSize:"xs",fontWeight:500,color:"mantine.colors.gray[6]",backgroundColor:"mantine.colors.gray[1]",padding:"[1px 4px]",borderRadius:"xs",_dark:{color:"mantine.colors.dark[2]",backgroundColor:"mantine.colors.dark[6]"}}),children:n.length}),i?y.jsx(a$,{size:12}):y.jsx(Dd,{size:12})]})}):y.jsxs(it,{component:"div",className:fe({fontSize:"xs",color:"mantine.colors.dimmed",justifySelf:"end",textAlign:"right",userSelect:"none",whiteSpace:"nowrap",padding:"[4px 8px]",fontWeight:700}),children:[e,":"]}),y.jsx(Se,{className:fe({justifySelf:"stretch",alignSelf:"start"}),children:o?y.jsx(cqe,{values:n,isExpanded:i}):y.jsx(Se,{className:fe({minHeight:"32px",display:"flex",alignItems:"center"}),children:y.jsx(hQ,{value:n[0]||"",isExpanded:i})})})]})}const uqe=fe({"&[data-level='1']":{marginBottom:"sm"}}),pqe=fe({cursor:"default",marginTop:"0",marginBottom:"0"}),fQ=fe({transition:"fast",color:"mantine.colors.gray[7]",_dark:{color:"mantine.colors.dark[1]"},"& > *":{transition:"fast"},_hover:{transitionTimingFunction:"out","& > :not([data-no-transform])":{transitionTimingFunction:"out",transform:"translateX(1px)"}}}),hqe=Ge(fQ),fqe=Ge(fQ,fe({cursor:"pointer",width:"100%",justifyContent:"stretch",flexWrap:"nowrap",height:"36px",paddingInlineStart:"[16px]",paddingInlineEnd:"2.5",borderRadius:"sm",alignItems:"center",color:"mantine.colors.gray[7]",_dark:{color:"mantine.colors.gray.lightColor"},_hover:{background:"mantine.colors.gray.lightHover"},"& .tabler-icon":{transition:"fast",width:"90%",opacity:.65}})),gqe=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 9h.01",key:"svg-1"}],["path",{d:"M11 12h1v4h1",key:"svg-2"}]],r0=wt("outline","info-circle","InfoCircle",gqe),mqe=[["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-1"}],["path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-2"}]],yqe=wt("outline","target","Target",mqe),vqe=[["path",{d:"M4 8v-2a2 2 0 0 1 2 -2h2",key:"svg-0"}],["path",{d:"M4 16v2a2 2 0 0 0 2 2h2",key:"svg-1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v2",key:"svg-2"}],["path",{d:"M16 20h2a2 2 0 0 0 2 -2v-2",key:"svg-3"}],["path",{d:"M8 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-4"}],["path",{d:"M16 16l-2.5 -2.5",key:"svg-5"}]],ba=wt("outline","zoom-scan","ZoomScan",vqe),bqe=({node:e})=>y.jsxs(en,{className:hqe,gap:6,align:"baseline",wrap:"nowrap",children:[y.jsxs(it,{component:"div",fz:11,c:"dimmed",children:[e.kind,":"]}),y.jsx(it,{component:"div",fz:"sm",fw:"500",children:e.title})]}),xqe=({instance:e})=>{const r=Mt(),n=r.currentView.id,o=[...e.views()];return y.jsxs(en,{className:fqe,gap:4,children:[y.jsx(Ti,{color:"gray",variant:"transparent",size:"xs",flex:0,children:y.jsx(yqe,{stroke:1.2})}),y.jsx(it,{component:"div",fz:"sm",fw:"500",flex:"1 1 100%",children:e.title}),y.jsxs(Se,{onClick:nn,pos:"relative","data-no-transform":!0,flex:0,children:[o.length===0&&y.jsx(Vn,{size:"compact-xs",variant:"transparent",color:"gray",disabled:!0,children:"no views"}),o.length>0&&y.jsxs(tn,{shadow:"md",withinPortal:!1,position:"bottom-start",offset:0,closeOnClickOutside:!0,clickOutsideEvents:["pointerdown","mousedown","click"],closeOnEscape:!0,trapFocus:!0,children:[y.jsx(tn.Target,{children:y.jsxs(Vn,{size:"compact-xs",variant:"subtle",color:"gray",children:[o.length," view",o.length>1?"s":""]})}),y.jsx(tn.Dropdown,{children:o.map(i=>y.jsx(tn.Item,{px:"xs",py:4,disabled:i.id===n,leftSection:y.jsx(Ti,{size:"sm",variant:"transparent",color:"gray",children:y.jsx(ba,{stroke:1.8,opacity:.65})}),styles:{itemSection:{marginInlineEnd:$e(8)}},onClick:a=>{a.stopPropagation(),r.navigateTo(i.id)},children:i.title},i.id))})]})]})]})},wqe=()=>{},kqe=S.memo(({elementFqn:e})=>{const r=Fo().element(e),n=[...r.deployments()],o=_y({multiple:!1});o.setHoveredNode=wqe;const i=S.useMemo(()=>{let a=[],l=new Map;for(const s of r.deployments()){let c={label:y.jsx(xqe,{instance:s}),value:s.id,type:"instance",children:[]};l.set(s.id,c);let d=s.parent;for(;d;){let u=l.get(d.id);if(u){u.children.push(c);break}u={label:y.jsx(bqe,{node:d}),value:d.id,type:"node",children:[c]},l.set(d.id,u),c=u,d=d.parent}!d&&!a.includes(c)&&a.push(c)}return a},[r]);return S.useEffect(()=>{o.expandAllNodes()},[i]),n.length===0?y.jsx(f3,{variant:"light",color:"gray",icon:y.jsx(r0,{}),children:"This element does not have any deployments"}):y.jsx(Ff,{levelOffset:"sm",allowRangeSelection:!1,classNames:{node:uqe,label:pqe},styles:{root:{position:"relative",width:"min-content",minWidth:300}},data:i,tree:o,renderNode:({node:a,selected:l,elementProps:s,hasChildren:c})=>y.jsx(Se,{...s,style:{...!c&&{marginBottom:$e(4)}},children:c?y.jsx(Vn,{fullWidth:!0,color:"gray",variant:l?"transparent":"subtle",size:"xs",justify:"flex-start",styles:{root:{position:"unset",paddingInlineStart:$e(16)}},children:a.label}):a.label})})}),_qe=()=>{},gQ=(e,r)=>{if(e===r)return!0;if(e.length!==r.length)return!1;for(const[n,o]of e.entries())if(!(o===r[n]||Ir(o,r[n])))return!1;return!0};function $p(e,r,n,o){const i=kL();Zke(i?_qe:e,r,gQ,o)}function Sqe(){const e=typeof window<"u"&&typeof window.devicePixelRatio=="number"?window.devicePixelRatio:1;return ta(Math.floor(e),{min:1,max:4})}let m2;function Pd(e){return m2??=Sqe(),m2<2?Math.round(e):Math.round(e*m2)/m2}function Eqe(e){switch(e){case"dots":return Qa.Dots;case"lines":return Qa.Lines;case"cross":return Qa.Cross;default:Qo(e)}}const Cqe=(e,r)=>typeof e.background=="string"&&typeof r.background=="string"?e.background===r.background:tt(e.background,r.background),mQ=S.memo(({background:e})=>typeof e=="string"?y.jsx(bq,{variant:Eqe(e),size:2,gap:20}):y.jsx(bq,{...e}),Cqe);mQ.displayName="Background";const yQ=(e,r)=>(e.data.dimmed??!1)===r?e:{...e,data:{...e.data,dimmed:r}};function $qe(e,r){return r!==void 0?yQ(e,r):n=>yQ(n,e)}const vQ=(e,r)=>(e.data.hovered??!1)===r?e:{...e,data:{...e.data,hovered:r}};function Rqe(e,r){return r!==void 0?vQ(e,r):n=>vQ(n,e)}function bQ(e,r){return Mq(e.data,r)?e:{...e,data:{...e.data,...r}}}function zqe(e,r){return r!==void 0?bQ(e,r):n=>bQ(n,e)}const tr={setDimmed:$qe,setHovered:Rqe,setData:zqe},lc={Compound:1,Edge:20,Element:20,Max:30},xa=.05,l$=3,y2={default:"16px",withControls:{top:"58px",left:"16px",right:"16px",bottom:"16px"}};function s$({nodes:e,edges:r,onEdgesChange:n,onNodesChange:o,className:i,pannable:a=!0,zoomable:l=!0,nodesSelectable:s=!0,nodesDraggable:c=!1,background:d="dots",children:u,colorMode:p,fitViewPadding:f=0,fitView:m=!0,zoomOnDoubleClick:v=!1,onViewportResize:w,onMoveEnd:x,onNodeMouseEnter:k,onNodeMouseLeave:C,onEdgeMouseEnter:_,onEdgeMouseLeave:$,...R}){const T=S.useMemo(()=>({minZoom:xa,maxZoom:1,padding:f,includeHiddenNodes:!1}),[f]),A=d!=="transparent"&&d!=="solid",z=TVe(),j=JC(),{colorScheme:I}=gTe();return p||(p=I==="auto"?"system":I),y.jsxs(zEe,{colorMode:p,nodes:e,edges:r,className:Ge(d==="transparent"&&"bg-transparent",i),...z&&{"data-likec4-zoom-small":!0},zoomOnPinch:l,zoomOnScroll:!a&&l,...!l&&{zoomActivationKeyCode:null},zoomOnDoubleClick:v,maxZoom:l?l$:1,minZoom:l?xa:1,fitView:m,fitViewOptions:T,preventScrolling:l||a,defaultMarkerColor:"var(--xy-edge-stroke)",noDragClassName:"nodrag",noPanClassName:"nopan",noWheelClassName:"nowheel",panOnScroll:a,panOnDrag:a,...!a&&{panActivationKeyCode:null,selectionKeyCode:null},elementsSelectable:s,nodesFocusable:c||s,edgesFocusable:!1,nodesDraggable:c,nodeDragThreshold:4,nodeClickDistance:3,paneClickDistance:3,elevateNodesOnSelect:!1,selectNodesOnDrag:!1,onNodesChange:o,onEdgesChange:n,onMoveEnd:at((N,{x:L,y:H,zoom:P})=>{const V=Pd(L),B=Pd(H);(L!==V||H!==B)&&j.setState({transform:[V,B,P]}),x?.(N,{x:V,y:B,zoom:P})}),onNodeMouseEnter:at((N,L)=>{if(k){k(N,L);return}o([{id:L.id,type:"replace",item:tr.setHovered(L,!0)}])}),onNodeMouseLeave:at((N,L)=>{if(C){C(N,L);return}o([{id:L.id,type:"replace",item:tr.setHovered(L,!1)}])}),onEdgeMouseEnter:at((N,L)=>{if(_){_(N,L);return}n([{id:L.id,type:"replace",item:tr.setHovered(L,!0)}])}),onEdgeMouseLeave:at((N,L)=>{if($){$(N,L);return}n([{id:L.id,type:"replace",item:tr.setHovered(L,!1)}])}),onNodeDoubleClick:nn,onEdgeDoubleClick:nn,...R,children:[A&&y.jsx(mQ,{background:d}),w&&y.jsx(jqe,{onViewportResize:w}),u]})}const Tqe=({width:e,height:r})=>(e||1)*(r||1),jqe=({onViewportResize:e})=>{const r=Dt(Tqe);return $p(e,[r]),null},xQ=S.createContext(null);function wQ(){return gt(S.useContext(xQ),"No RelationshipsBrowserActorContext")}function v2(e,r=Ir){const n=wQ();return pn(n,e,r)}function n0(){const e=wQ();return S.useMemo(()=>({actor:e,get rootElementId(){return`relationships-browser-${e.sessionId.replaceAll(":","_")}`},getState:()=>e.getSnapshot().context,send:e.send,updateView:r=>{e.getSnapshot().status==="active"&&e.send({type:"update.view",layouted:r})},changeScope:r=>{e.send({type:"change.scope",scope:r})},navigateTo:(r,n)=>{e.send({type:"navigate.to",subject:r,fromNode:n})},fitDiagram:()=>{e.send({type:"fitDiagram"})},close:()=>{e._parent?e._parent?.send({type:"close",actorId:e.id}):e.send({type:"close"})}}),[e])}var c$,kQ;function d$(){if(kQ)return c$;kQ=1;var e="\0",r="\0",n="";class o{_isDirected=!0;_isMultigraph=!1;_isCompound=!1;_label;_defaultNodeLabelFn=()=>{};_defaultEdgeLabelFn=()=>{};_nodes={};_in={};_preds={};_out={};_sucs={};_edgeObjs={};_edgeLabels={};_nodeCount=0;_edgeCount=0;_parent;_children;constructor(u){u&&(this._isDirected=Object.hasOwn(u,"directed")?u.directed:!0,this._isMultigraph=Object.hasOwn(u,"multigraph")?u.multigraph:!1,this._isCompound=Object.hasOwn(u,"compound")?u.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[r]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(u){return this._label=u,this}graph(){return this._label}setDefaultNodeLabel(u){return this._defaultNodeLabelFn=u,typeof u!="function"&&(this._defaultNodeLabelFn=()=>u),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var u=this;return this.nodes().filter(p=>Object.keys(u._in[p]).length===0)}sinks(){var u=this;return this.nodes().filter(p=>Object.keys(u._out[p]).length===0)}setNodes(u,p){var f=arguments,m=this;return u.forEach(function(v){f.length>1?m.setNode(v,p):m.setNode(v)}),this}setNode(u,p){return Object.hasOwn(this._nodes,u)?(arguments.length>1&&(this._nodes[u]=p),this):(this._nodes[u]=arguments.length>1?p:this._defaultNodeLabelFn(u),this._isCompound&&(this._parent[u]=r,this._children[u]={},this._children[r][u]=!0),this._in[u]={},this._preds[u]={},this._out[u]={},this._sucs[u]={},++this._nodeCount,this)}node(u){return this._nodes[u]}hasNode(u){return Object.hasOwn(this._nodes,u)}removeNode(u){var p=this;if(Object.hasOwn(this._nodes,u)){var f=m=>p.removeEdge(p._edgeObjs[m]);delete this._nodes[u],this._isCompound&&(this._removeFromParentsChildList(u),delete this._parent[u],this.children(u).forEach(function(m){p.setParent(m)}),delete this._children[u]),Object.keys(this._in[u]).forEach(f),delete this._in[u],delete this._preds[u],Object.keys(this._out[u]).forEach(f),delete this._out[u],delete this._sucs[u],--this._nodeCount}return this}setParent(u,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(p===void 0)p=r;else{p+="";for(var f=p;f!==void 0;f=this.parent(f))if(f===u)throw new Error("Setting "+p+" as parent of "+u+" would create a cycle");this.setNode(p)}return this.setNode(u),this._removeFromParentsChildList(u),this._parent[u]=p,this._children[p][u]=!0,this}_removeFromParentsChildList(u){delete this._children[this._parent[u]][u]}parent(u){if(this._isCompound){var p=this._parent[u];if(p!==r)return p}}children(u=r){if(this._isCompound){var p=this._children[u];if(p)return Object.keys(p)}else{if(u===r)return this.nodes();if(this.hasNode(u))return[]}}predecessors(u){var p=this._preds[u];if(p)return Object.keys(p)}successors(u){var p=this._sucs[u];if(p)return Object.keys(p)}neighbors(u){var p=this.predecessors(u);if(p){const m=new Set(p);for(var f of this.successors(u))m.add(f);return Array.from(m.values())}}isLeaf(u){var p;return this.isDirected()?p=this.successors(u):p=this.neighbors(u),p.length===0}filterNodes(u){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var f=this;Object.entries(this._nodes).forEach(function([w,x]){u(w)&&p.setNode(w,x)}),Object.values(this._edgeObjs).forEach(function(w){p.hasNode(w.v)&&p.hasNode(w.w)&&p.setEdge(w,f.edge(w))});var m={};function v(w){var x=f.parent(w);return x===void 0||p.hasNode(x)?(m[w]=x,x):x in m?m[x]:v(x)}return this._isCompound&&p.nodes().forEach(w=>p.setParent(w,v(w))),p}setDefaultEdgeLabel(u){return this._defaultEdgeLabelFn=u,typeof u!="function"&&(this._defaultEdgeLabelFn=()=>u),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(u,p){var f=this,m=arguments;return u.reduce(function(v,w){return m.length>1?f.setEdge(v,w,p):f.setEdge(v,w),w}),this}setEdge(){var u,p,f,m,v=!1,w=arguments[0];typeof w=="object"&&w!==null&&"v"in w?(u=w.v,p=w.w,f=w.name,arguments.length===2&&(m=arguments[1],v=!0)):(u=w,p=arguments[1],f=arguments[3],arguments.length>2&&(m=arguments[2],v=!0)),u=""+u,p=""+p,f!==void 0&&(f=""+f);var x=l(this._isDirected,u,p,f);if(Object.hasOwn(this._edgeLabels,x))return v&&(this._edgeLabels[x]=m),this;if(f!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(u),this.setNode(p),this._edgeLabels[x]=v?m:this._defaultEdgeLabelFn(u,p,f);var k=s(this._isDirected,u,p,f);return u=k.v,p=k.w,Object.freeze(k),this._edgeObjs[x]=k,i(this._preds[p],u),i(this._sucs[u],p),this._in[p][x]=k,this._out[u][x]=k,this._edgeCount++,this}edge(u,p,f){var m=arguments.length===1?c(this._isDirected,arguments[0]):l(this._isDirected,u,p,f);return this._edgeLabels[m]}edgeAsObj(){const u=this.edge(...arguments);return typeof u!="object"?{label:u}:u}hasEdge(u,p,f){var m=arguments.length===1?c(this._isDirected,arguments[0]):l(this._isDirected,u,p,f);return Object.hasOwn(this._edgeLabels,m)}removeEdge(u,p,f){var m=arguments.length===1?c(this._isDirected,arguments[0]):l(this._isDirected,u,p,f),v=this._edgeObjs[m];return v&&(u=v.v,p=v.w,delete this._edgeLabels[m],delete this._edgeObjs[m],a(this._preds[p],u),a(this._sucs[u],p),delete this._in[p][m],delete this._out[u][m],this._edgeCount--),this}inEdges(u,p){var f=this._in[u];if(f){var m=Object.values(f);return p?m.filter(v=>v.v===p):m}}outEdges(u,p){var f=this._out[u];if(f){var m=Object.values(f);return p?m.filter(v=>v.w===p):m}}nodeEdges(u,p){var f=this.inEdges(u,p);if(f)return f.concat(this.outEdges(u,p))}}function i(d,u){d[u]?d[u]++:d[u]=1}function a(d,u){--d[u]||delete d[u]}function l(d,u,p,f){var m=""+u,v=""+p;if(!d&&m>v){var w=m;m=v,v=w}return m+n+v+n+(f===void 0?e:f)}function s(d,u,p,f){var m=""+u,v=""+p;if(!d&&m>v){var w=m;m=v,v=w}var x={v:m,w:v};return f&&(x.name=f),x}function c(d,u){return l(d,u.v,u.w,u.name)}return c$=o,c$}var _Q,SQ;function Aqe(){return SQ||(SQ=1,_Q="2.2.4"),_Q}var EQ,CQ;function Dqe(){return CQ||(CQ=1,EQ={Graph:d$(),version:Aqe()}),EQ}var u$,$Q;function Pqe(){if($Q)return u$;$Q=1;var e=d$();u$={write:r,read:i};function r(a){var l={options:{directed:a.isDirected(),multigraph:a.isMultigraph(),compound:a.isCompound()},nodes:n(a),edges:o(a)};return a.graph()!==void 0&&(l.value=structuredClone(a.graph())),l}function n(a){return a.nodes().map(function(l){var s=a.node(l),c=a.parent(l),d={v:l};return s!==void 0&&(d.value=s),c!==void 0&&(d.parent=c),d})}function o(a){return a.edges().map(function(l){var s=a.edge(l),c={v:l.v,w:l.w};return l.name!==void 0&&(c.name=l.name),s!==void 0&&(c.value=s),c})}function i(a){var l=new e(a.options).setGraph(a.value);return a.nodes.forEach(function(s){l.setNode(s.v,s.value),s.parent&&l.setParent(s.v,s.parent)}),a.edges.forEach(function(s){l.setEdge({v:s.v,w:s.w,name:s.name},s.value)}),l}return u$}var p$,RQ;function Mqe(){if(RQ)return p$;RQ=1,p$=e;function e(r){var n={},o=[],i;function a(l){Object.hasOwn(n,l)||(n[l]=!0,i.push(l),r.successors(l).forEach(a),r.predecessors(l).forEach(a))}return r.nodes().forEach(function(l){i=[],a(l),i.length&&o.push(i)}),o}return p$}var h$,zQ;function TQ(){if(zQ)return h$;zQ=1;class e{_arr=[];_keyIndices={};size(){return this._arr.length}keys(){return this._arr.map(function(n){return n.key})}has(n){return Object.hasOwn(this._keyIndices,n)}priority(n){var o=this._keyIndices[n];if(o!==void 0)return this._arr[o].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(n,o){var i=this._keyIndices;if(n=String(n),!Object.hasOwn(i,n)){var a=this._arr,l=a.length;return i[n]=l,a.push({key:n,priority:o}),this._decrease(l),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var n=this._arr.pop();return delete this._keyIndices[n.key],this._heapify(0),n.key}decrease(n,o){var i=this._keyIndices[n];if(o>this._arr[i].priority)throw new Error("New priority is greater than current priority. Key: "+n+" Old: "+this._arr[i].priority+" New: "+o);this._arr[i].priority=o,this._decrease(i)}_heapify(n){var o=this._arr,i=2*n,a=i+1,l=n;i>1,!(o[a].priority1;function n(i,a,l,s){return o(i,String(a),l||r,s||function(c){return i.outEdges(c)})}function o(i,a,l,s){var c={},d=new e,u,p,f=function(m){var v=m.v!==u?m.v:m.w,w=c[v],x=l(m),k=p.distance+x;if(x<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+m+" Weight: "+x);k0&&(u=d.removeMin(),p=c[u],p.distance!==Number.POSITIVE_INFINITY);)s(u).forEach(f);return c}return f$}var g$,DQ;function Nqe(){if(DQ)return g$;DQ=1;var e=AQ();g$=r;function r(n,o,i){return n.nodes().reduce(function(a,l){return a[l]=e(n,l,o,i),a},{})}return g$}var m$,PQ;function MQ(){if(PQ)return m$;PQ=1,m$=e;function e(r){var n=0,o=[],i={},a=[];function l(s){var c=i[s]={onStack:!0,lowlink:n,index:n++};if(o.push(s),r.successors(s).forEach(function(p){Object.hasOwn(i,p)?i[p].onStack&&(c.lowlink=Math.min(c.lowlink,i[p].index)):(l(p),c.lowlink=Math.min(c.lowlink,i[p].lowlink))}),c.lowlink===c.index){var d=[],u;do u=o.pop(),i[u].onStack=!1,d.push(u);while(s!==u);a.push(d)}}return r.nodes().forEach(function(s){Object.hasOwn(i,s)||l(s)}),a}return m$}var y$,NQ;function Bqe(){if(NQ)return y$;NQ=1;var e=MQ();y$=r;function r(n){return e(n).filter(function(o){return o.length>1||o.length===1&&n.hasEdge(o[0],o[0])})}return y$}var v$,BQ;function Iqe(){if(BQ)return v$;BQ=1,v$=r;var e=()=>1;function r(o,i,a){return n(o,i||e,a||function(l){return o.outEdges(l)})}function n(o,i,a){var l={},s=o.nodes();return s.forEach(function(c){l[c]={},l[c][c]={distance:0},s.forEach(function(d){c!==d&&(l[c][d]={distance:Number.POSITIVE_INFINITY})}),a(c).forEach(function(d){var u=d.v===c?d.w:d.v,p=i(d);l[c][u]={distance:p,predecessor:c}})}),s.forEach(function(c){var d=l[c];s.forEach(function(u){var p=l[u];s.forEach(function(f){var m=p[c],v=d[f],w=p[f],x=m.distance+v.distance;xi.successors(p):p=>i.neighbors(p),c=l==="post"?r:n,d=[],u={};return a.forEach(p=>{if(!i.hasNode(p))throw new Error("Graph does not have node: "+p);c(p,s,u,d)}),d}function r(i,a,l,s){for(var c=[[i,!1]];c.length>0;){var d=c.pop();d[1]?s.push(d[0]):Object.hasOwn(l,d[0])||(l[d[0]]=!0,c.push([d[0],!0]),o(a(d[0]),u=>c.push([u,!1])))}}function n(i,a,l,s){for(var c=[i];c.length>0;){var d=c.pop();Object.hasOwn(l,d)||(l[d]=!0,s.push(d),o(a(d),u=>c.push(u)))}}function o(i,a){for(var l=i.length;l--;)a(i[l],l,i);return i}return w$}var k$,qQ;function Lqe(){if(qQ)return k$;qQ=1;var e=VQ();k$=r;function r(n,o){return e(n,o,"post")}return k$}var _$,HQ;function Fqe(){if(HQ)return _$;HQ=1;var e=VQ();_$=r;function r(n,o){return e(n,o,"pre")}return _$}var S$,UQ;function Vqe(){if(UQ)return S$;UQ=1;var e=d$(),r=TQ();S$=n;function n(o,i){var a=new e,l={},s=new r,c;function d(p){var f=p.v===c?p.w:p.v,m=s.priority(f);if(m!==void 0){var v=i(p);v0;){if(c=s.removeMin(),Object.hasOwn(l,c))a.setEdge(c,l[c]);else{if(u)throw new Error("Input graph is not connected: "+o);u=!0}o.nodeEdges(c).forEach(d)}return a}return S$}var WQ,GQ;function qqe(){return GQ||(GQ=1,WQ={components:Mqe(),dijkstra:AQ(),dijkstraAll:Nqe(),findCycles:Bqe(),floydWarshall:Iqe(),isAcyclic:Oqe(),postorder:Lqe(),preorder:Fqe(),prim:Vqe(),tarjan:MQ(),topsort:OQ()}),WQ}var E$,YQ;function cl(){if(YQ)return E$;YQ=1;var e=Dqe();return E$={Graph:e.Graph,json:Pqe(),alg:qqe(),version:e.version},E$}var C$,XQ;function Hqe(){if(XQ)return C$;XQ=1;class e{constructor(){let i={};i._next=i._prev=i,this._sentinel=i}dequeue(){let i=this._sentinel,a=i._prev;if(a!==i)return r(a),a}enqueue(i){let a=this._sentinel;i._prev&&i._next&&r(i),i._next=a._next,a._next._prev=i,a._next=i,i._prev=a}toString(){let i=[],a=this._sentinel,l=a._prev;for(;l!==a;)i.push(JSON.stringify(l,n)),l=l._prev;return"["+i.join(", ")+"]"}}function r(o){o._prev._next=o._next,o._next._prev=o._prev,delete o._next,delete o._prev}function n(o,i){if(o!=="_next"&&o!=="_prev")return i}return C$=e,C$}var $$,KQ;function Uqe(){if(KQ)return $$;KQ=1;let e=cl().Graph,r=Hqe();$$=o;let n=()=>1;function o(d,u){if(d.nodeCount()<=1)return[];let p=l(d,u||n);return i(p.graph,p.buckets,p.zeroIdx).flatMap(f=>d.outEdges(f.v,f.w))}function i(d,u,p){let f=[],m=u[u.length-1],v=u[0],w;for(;d.nodeCount();){for(;w=v.dequeue();)a(d,u,p,w);for(;w=m.dequeue();)a(d,u,p,w);if(d.nodeCount()){for(let x=u.length-2;x>0;--x)if(w=u[x].dequeue(),w){f=f.concat(a(d,u,p,w,!0));break}}}return f}function a(d,u,p,f,m){let v=m?[]:void 0;return d.inEdges(f.v).forEach(w=>{let x=d.edge(w),k=d.node(w.v);m&&v.push({v:w.v,w:w.w}),k.out-=x,s(u,p,k)}),d.outEdges(f.v).forEach(w=>{let x=d.edge(w),k=w.w,C=d.node(k);C.in-=x,s(u,p,C)}),d.removeNode(f.v),v}function l(d,u){let p=new e,f=0,m=0;d.nodes().forEach(x=>{p.setNode(x,{v:x,in:0,out:0})}),d.edges().forEach(x=>{let k=p.edge(x.v,x.w)||0,C=u(x),_=k+C;p.setEdge(x.v,x.w,_),m=Math.max(m,p.node(x.v).out+=C),f=Math.max(f,p.node(x.w).in+=C)});let v=c(m+f+3).map(()=>new r),w=f+1;return p.nodes().forEach(x=>{s(v,w,p.node(x))}),{graph:p,buckets:v,zeroIdx:w}}function s(d,u,p){p.out?p.in?d[p.out-p.in+u].enqueue(p):d[d.length-1].enqueue(p):d[0].enqueue(p)}function c(d){const u=[];for(let p=0;pj.setNode(I,z.node(I))),z.edges().forEach(I=>{let N=j.edge(I.v,I.w)||{weight:0,minlen:1},L=z.edge(I);j.setEdge(I.v,I.w,{weight:N.weight+L.weight,minlen:Math.max(N.minlen,L.minlen)})}),j}function o(z){let j=new e({multigraph:z.isMultigraph()}).setGraph(z.graph());return z.nodes().forEach(I=>{z.children(I).length||j.setNode(I,z.node(I))}),z.edges().forEach(I=>{j.setEdge(I,z.edge(I))}),j}function i(z){let j=z.nodes().map(I=>{let N={};return z.outEdges(I).forEach(L=>{N[L.w]=(N[L.w]||0)+z.edge(L).weight}),N});return A(z.nodes(),j)}function a(z){let j=z.nodes().map(I=>{let N={};return z.inEdges(I).forEach(L=>{N[L.v]=(N[L.v]||0)+z.edge(L).weight}),N});return A(z.nodes(),j)}function l(z,j){let I=z.x,N=z.y,L=j.x-I,H=j.y-N,P=z.width/2,V=z.height/2;if(!L&&!H)throw new Error("Not possible to find intersection inside of the rectangle");let B,F;return Math.abs(H)*P>Math.abs(L)*V?(H<0&&(V=-V),B=V*L/H,F=V):(L<0&&(P=-P),B=P,F=P*H/L),{x:I+B,y:N+F}}function s(z){let j=$(v(z)+1).map(()=>[]);return z.nodes().forEach(I=>{let N=z.node(I),L=N.rank;L!==void 0&&(j[L][N.order]=I)}),j}function c(z){let j=z.nodes().map(N=>{let L=z.node(N).rank;return L===void 0?Number.MAX_VALUE:L}),I=m(Math.min,j);z.nodes().forEach(N=>{let L=z.node(N);Object.hasOwn(L,"rank")&&(L.rank-=I)})}function d(z){let j=z.nodes().map(P=>z.node(P).rank),I=m(Math.min,j),N=[];z.nodes().forEach(P=>{let V=z.node(P).rank-I;N[V]||(N[V]=[]),N[V].push(P)});let L=0,H=z.graph().nodeRankFactor;Array.from(N).forEach((P,V)=>{P===void 0&&V%H!==0?--L:P!==void 0&&L&&P.forEach(B=>z.node(B).rank+=L)})}function u(z,j,I,N){let L={width:0,height:0};return arguments.length>=4&&(L.rank=I,L.order=N),r(z,"border",L,j)}function p(z,j=f){const I=[];for(let N=0;Nf){const I=p(j);return z.apply(null,I.map(N=>z.apply(null,N)))}else return z.apply(null,j)}function v(z){const j=z.nodes().map(I=>{let N=z.node(I).rank;return N===void 0?Number.MIN_VALUE:N});return m(Math.max,j)}function w(z,j){let I={lhs:[],rhs:[]};return z.forEach(N=>{j(N)?I.lhs.push(N):I.rhs.push(N)}),I}function x(z,j){let I=Date.now();try{return j()}finally{console.log(z+" time: "+(Date.now()-I)+"ms")}}function k(z,j){return j()}let C=0;function _(z){var j=++C;return z+(""+j)}function $(z,j,I=1){j==null&&(j=z,z=0);let N=H=>HjN[j]),Object.entries(z).reduce((N,[L,H])=>(N[L]=I(H,L),N),{})}function A(z,j){return z.reduce((I,N,L)=>(I[N]=j[L],I),{})}return R$}var z$,QQ;function Wqe(){if(QQ)return z$;QQ=1;let e=Uqe(),r=$n().uniqueId;z$={run:n,undo:i};function n(a){(a.graph().acyclicer==="greedy"?e(a,l(a)):o(a)).forEach(s=>{let c=a.edge(s);a.removeEdge(s),c.forwardName=s.name,c.reversed=!0,a.setEdge(s.w,s.v,c,r("rev"))});function l(s){return c=>s.edge(c).weight}}function o(a){let l=[],s={},c={};function d(u){Object.hasOwn(c,u)||(c[u]=!0,s[u]=!0,a.outEdges(u).forEach(p=>{Object.hasOwn(s,p.w)?l.push(p):d(p.w)}),delete s[u])}return a.nodes().forEach(d),l}function i(a){a.edges().forEach(l=>{let s=a.edge(l);if(s.reversed){a.removeEdge(l);let c=s.forwardName;delete s.reversed,delete s.forwardName,a.setEdge(l.w,l.v,s,c)}})}return z$}var T$,JQ;function Gqe(){if(JQ)return T$;JQ=1;let e=$n();T$={run:r,undo:o};function r(i){i.graph().dummyChains=[],i.edges().forEach(a=>n(i,a))}function n(i,a){let l=a.v,s=i.node(l).rank,c=a.w,d=i.node(c).rank,u=a.name,p=i.edge(a),f=p.labelRank;if(d===s+1)return;i.removeEdge(a);let m,v,w;for(w=0,++s;s{let l=i.node(a),s=l.edgeLabel,c;for(i.setEdge(l.edgeObj,s);l.dummy;)c=i.successors(a)[0],i.removeNode(a),s.points.push({x:l.x,y:l.y}),l.dummy==="edge-label"&&(s.x=l.x,s.y=l.y,s.width=l.width,s.height=l.height),a=c,l=i.node(a)})}return T$}var j$,eJ;function b2(){if(eJ)return j$;eJ=1;const{applyWithChunking:e}=$n();j$={longestPath:r,slack:n};function r(o){var i={};function a(l){var s=o.node(l);if(Object.hasOwn(i,l))return s.rank;i[l]=!0;let c=o.outEdges(l).map(u=>u==null?Number.POSITIVE_INFINITY:a(u.w)-o.edge(u).minlen);var d=e(Math.min,c);return d===Number.POSITIVE_INFINITY&&(d=0),s.rank=d}o.sources().forEach(a)}function n(o,i){return o.node(i.w).rank-o.node(i.v).rank-o.edge(i).minlen}return j$}var A$,tJ;function rJ(){if(tJ)return A$;tJ=1;var e=cl().Graph,r=b2().slack;A$=n;function n(l){var s=new e({directed:!1}),c=l.nodes()[0],d=l.nodeCount();s.setNode(c,{});for(var u,p;o(s,l){var p=u.v,f=d===p?u.w:p;!l.hasNode(f)&&!r(s,u)&&(l.setNode(f,{}),l.setEdge(d,f,{}),c(f))})}return l.nodes().forEach(c),l.nodeCount()}function i(l,s){return s.edges().reduce((c,d)=>{let u=Number.POSITIVE_INFINITY;return l.hasNode(d.v)!==l.hasNode(d.w)&&(u=r(s,d)),us.node(d).rank+=c)}return A$}var D$,nJ;function Yqe(){if(nJ)return D$;nJ=1;var e=rJ(),r=b2().slack,n=b2().longestPath,o=cl().alg.preorder,i=cl().alg.postorder,a=$n().simplify;D$=l,l.initLowLimValues=u,l.initCutValues=s,l.calcCutValue=d,l.leaveEdge=f,l.enterEdge=m,l.exchangeEdges=v;function l(C){C=a(C),n(C);var _=e(C);u(_),s(_,C);for(var $,R;$=f(_);)R=m(_,C,$),v(_,C,$,R)}function s(C,_){var $=i(C,C.nodes());$=$.slice(0,$.length-1),$.forEach(R=>c(C,_,R))}function c(C,_,$){var R=C.node($),T=R.parent;C.edge($,T).cutvalue=d(C,_,$)}function d(C,_,$){var R=C.node($),T=R.parent,A=!0,z=_.edge($,T),j=0;return z||(A=!1,z=_.edge(T,$)),j=z.weight,_.nodeEdges($).forEach(I=>{var N=I.v===$,L=N?I.w:I.v;if(L!==T){var H=N===A,P=_.edge(I).weight;if(j+=H?P:-P,x(C,$,L)){var V=C.edge($,L).cutvalue;j+=H?-V:V}}}),j}function u(C,_){arguments.length<2&&(_=C.nodes()[0]),p(C,{},1,_)}function p(C,_,$,R,T){var A=$,z=C.node(R);return _[R]=!0,C.neighbors(R).forEach(j=>{Object.hasOwn(_,j)||($=p(C,_,$,j,R))}),z.low=A,z.lim=$++,T?z.parent=T:delete z.parent,$}function f(C){return C.edges().find(_=>C.edge(_).cutvalue<0)}function m(C,_,$){var R=$.v,T=$.w;_.hasEdge(R,T)||(R=$.w,T=$.v);var A=C.node(R),z=C.node(T),j=A,I=!1;A.lim>z.lim&&(j=z,I=!0);var N=_.edges().filter(L=>I===k(C,C.node(L.v),j)&&I!==k(C,C.node(L.w),j));return N.reduce((L,H)=>r(_,H)!_.node(T).parent),R=o(C,$);R=R.slice(1),R.forEach(T=>{var A=C.node(T).parent,z=_.edge(T,A),j=!1;z||(z=_.edge(A,T),j=!0),_.node(T).rank=_.node(A).rank+(j?z.minlen:-z.minlen)})}function x(C,_,$){return C.hasEdge(_,$)}function k(C,_,$){return $.low<=_.lim&&_.lim<=$.lim}return D$}var P$,oJ;function Xqe(){if(oJ)return P$;oJ=1;var e=b2(),r=e.longestPath,n=rJ(),o=Yqe();P$=i;function i(c){var d=c.graph().ranker;if(d instanceof Function)return d(c);switch(c.graph().ranker){case"network-simplex":s(c);break;case"tight-tree":l(c);break;case"longest-path":a(c);break;case"none":break;default:s(c)}}var a=r;function l(c){r(c),n(c)}function s(c){o(c)}return P$}var M$,iJ;function Kqe(){if(iJ)return M$;iJ=1,M$=e;function e(o){let i=n(o);o.graph().dummyChains.forEach(a=>{let l=o.node(a),s=l.edgeObj,c=r(o,i,s.v,s.w),d=c.path,u=c.lca,p=0,f=d[p],m=!0;for(;a!==s.w;){if(l=o.node(a),m){for(;(f=d[p])!==u&&o.node(f).maxRankd||u>i[p].lim));for(f=p,p=l;(p=o.parent(p))!==f;)c.push(p);return{path:s.concat(c.reverse()),lca:f}}function n(o){let i={},a=0;function l(s){let c=a;o.children(s).forEach(l),i[s]={low:c,lim:a++}}return o.children().forEach(l),i}return M$}var N$,aJ;function Zqe(){if(aJ)return N$;aJ=1;let e=$n();N$={run:r,cleanup:a};function r(l){let s=e.addDummyNode(l,"root",{},"_root"),c=o(l),d=Object.values(c),u=e.applyWithChunking(Math.max,d)-1,p=2*u+1;l.graph().nestingRoot=s,l.edges().forEach(m=>l.edge(m).minlen*=p);let f=i(l)+1;l.children().forEach(m=>n(l,s,p,f,u,c,m)),l.graph().nodeRankFactor=p}function n(l,s,c,d,u,p,f){let m=l.children(f);if(!m.length){f!==s&&l.setEdge(s,f,{weight:0,minlen:c});return}let v=e.addBorderNode(l,"_bt"),w=e.addBorderNode(l,"_bb"),x=l.node(f);l.setParent(v,f),x.borderTop=v,l.setParent(w,f),x.borderBottom=w,m.forEach(k=>{n(l,s,c,d,u,p,k);let C=l.node(k),_=C.borderTop?C.borderTop:k,$=C.borderBottom?C.borderBottom:k,R=C.borderTop?d:2*d,T=_!==$?1:u-p[f]+1;l.setEdge(v,_,{weight:R,minlen:T,nestingEdge:!0}),l.setEdge($,w,{weight:R,minlen:T,nestingEdge:!0})}),l.parent(f)||l.setEdge(s,v,{weight:0,minlen:u+p[f]})}function o(l){var s={};function c(d,u){var p=l.children(d);p&&p.length&&p.forEach(f=>c(f,u+1)),s[d]=u}return l.children().forEach(d=>c(d,1)),s}function i(l){return l.edges().reduce((s,c)=>s+l.edge(c).weight,0)}function a(l){var s=l.graph();l.removeNode(s.nestingRoot),delete s.nestingRoot,l.edges().forEach(c=>{var d=l.edge(c);d.nestingEdge&&l.removeEdge(c)})}return N$}var B$,lJ;function Qqe(){if(lJ)return B$;lJ=1;let e=$n();B$=r;function r(o){function i(a){let l=o.children(a),s=o.node(a);if(l.length&&l.forEach(i),Object.hasOwn(s,"minRank")){s.borderLeft=[],s.borderRight=[];for(let c=s.minRank,d=s.maxRank+1;co(c.node(d))),c.edges().forEach(d=>o(c.edge(d)))}function o(c){let d=c.width;c.width=c.height,c.height=d}function i(c){c.nodes().forEach(d=>a(c.node(d))),c.edges().forEach(d=>{let u=c.edge(d);u.points.forEach(a),Object.hasOwn(u,"y")&&a(u)})}function a(c){c.y=-c.y}function l(c){c.nodes().forEach(d=>s(c.node(d))),c.edges().forEach(d=>{let u=c.edge(d);u.points.forEach(s),Object.hasOwn(u,"x")&&s(u)})}function s(c){let d=c.x;c.x=c.y,c.y=d}return I$}var O$,cJ;function eHe(){if(cJ)return O$;cJ=1;let e=$n();O$=r;function r(n){let o={},i=n.nodes().filter(d=>!n.children(d).length),a=i.map(d=>n.node(d).rank),l=e.applyWithChunking(Math.max,a),s=e.range(l+1).map(()=>[]);function c(d){if(o[d])return;o[d]=!0;let u=n.node(d);s[u.rank].push(d),n.successors(d).forEach(c)}return i.sort((d,u)=>n.node(d).rank-n.node(u).rank).forEach(c),s}return O$}var L$,dJ;function tHe(){if(dJ)return L$;dJ=1;let e=$n().zipObject;L$=r;function r(o,i){let a=0;for(let l=1;lm)),s=i.flatMap(f=>o.outEdges(f).map(m=>({pos:l[m.w],weight:o.edge(m).weight})).sort((m,v)=>m.pos-v.pos)),c=1;for(;c{let m=f.pos+c;u[m]+=f.weight;let v=0;for(;m>0;)m%2&&(v+=u[m+1]),m=m-1>>1,u[m]+=f.weight;p+=f.weight*v}),p}return L$}var F$,uJ;function rHe(){if(uJ)return F$;uJ=1,F$=e;function e(r,n=[]){return n.map(o=>{let i=r.inEdges(o);if(i.length){let a=i.reduce((l,s)=>{let c=r.edge(s),d=r.node(s.v);return{sum:l.sum+c.weight*d.order,weight:l.weight+c.weight}},{sum:0,weight:0});return{v:o,barycenter:a.sum/a.weight,weight:a.weight}}else return{v:o}})}return F$}var V$,pJ;function nHe(){if(pJ)return V$;pJ=1;let e=$n();V$=r;function r(i,a){let l={};i.forEach((c,d)=>{let u=l[c.v]={indegree:0,in:[],out:[],vs:[c.v],i:d};c.barycenter!==void 0&&(u.barycenter=c.barycenter,u.weight=c.weight)}),a.edges().forEach(c=>{let d=l[c.v],u=l[c.w];d!==void 0&&u!==void 0&&(u.indegree++,d.out.push(l[c.w]))});let s=Object.values(l).filter(c=>!c.indegree);return n(s)}function n(i){let a=[];function l(c){return d=>{d.merged||(d.barycenter===void 0||c.barycenter===void 0||d.barycenter>=c.barycenter)&&o(c,d)}}function s(c){return d=>{d.in.push(c),--d.indegree===0&&i.push(d)}}for(;i.length;){let c=i.pop();a.push(c),c.in.reverse().forEach(l(c)),c.out.forEach(s(c))}return a.filter(c=>!c.merged).map(c=>e.pick(c,["vs","i","barycenter","weight"]))}function o(i,a){let l=0,s=0;i.weight&&(l+=i.barycenter*i.weight,s+=i.weight),a.weight&&(l+=a.barycenter*a.weight,s+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=l/s,i.weight=s,i.i=Math.min(a.i,i.i),a.merged=!0}return V$}var q$,hJ;function oHe(){if(hJ)return q$;hJ=1;let e=$n();q$=r;function r(i,a){let l=e.partition(i,v=>Object.hasOwn(v,"barycenter")),s=l.lhs,c=l.rhs.sort((v,w)=>w.i-v.i),d=[],u=0,p=0,f=0;s.sort(o(!!a)),f=n(d,c,f),s.forEach(v=>{f+=v.vs.length,d.push(v.vs),u+=v.barycenter*v.weight,p+=v.weight,f=n(d,c,f)});let m={vs:d.flat(!0)};return p&&(m.barycenter=u/p,m.weight=p),m}function n(i,a,l){let s;for(;a.length&&(s=a[a.length-1]).i<=l;)a.pop(),i.push(s.vs),l++;return l}function o(i){return(a,l)=>a.barycenterl.barycenter?1:i?l.i-a.i:a.i-l.i}return q$}var H$,fJ;function iHe(){if(fJ)return H$;fJ=1;let e=rHe(),r=nHe(),n=oHe();H$=o;function o(l,s,c,d){let u=l.children(s),p=l.node(s),f=p?p.borderLeft:void 0,m=p?p.borderRight:void 0,v={};f&&(u=u.filter(C=>C!==f&&C!==m));let w=e(l,u);w.forEach(C=>{if(l.children(C.v).length){let _=o(l,C.v,c,d);v[C.v]=_,Object.hasOwn(_,"barycenter")&&a(C,_)}});let x=r(w,c);i(x,v);let k=n(x,d);if(f&&(k.vs=[f,k.vs,m].flat(!0),l.predecessors(f).length)){let C=l.node(l.predecessors(f)[0]),_=l.node(l.predecessors(m)[0]);Object.hasOwn(k,"barycenter")||(k.barycenter=0,k.weight=0),k.barycenter=(k.barycenter*k.weight+C.order+_.order)/(k.weight+2),k.weight+=2}return k}function i(l,s){l.forEach(c=>{c.vs=c.vs.flatMap(d=>s[d]?s[d].vs:d)})}function a(l,s){l.barycenter!==void 0?(l.barycenter=(l.barycenter*l.weight+s.barycenter*s.weight)/(l.weight+s.weight),l.weight+=s.weight):(l.barycenter=s.barycenter,l.weight=s.weight)}return H$}var U$,gJ;function aHe(){if(gJ)return U$;gJ=1;let e=cl().Graph,r=$n();U$=n;function n(i,a,l,s){s||(s=i.nodes());let c=o(i),d=new e({compound:!0}).setGraph({root:c}).setDefaultNodeLabel(u=>i.node(u));return s.forEach(u=>{let p=i.node(u),f=i.parent(u);(p.rank===a||p.minRank<=a&&a<=p.maxRank)&&(d.setNode(u),d.setParent(u,f||c),i[l](u).forEach(m=>{let v=m.v===u?m.w:m.v,w=d.edge(v,u),x=w!==void 0?w.weight:0;d.setEdge(v,u,{weight:i.edge(m).weight+x})}),Object.hasOwn(p,"minRank")&&d.setNode(u,{borderLeft:p.borderLeft[a],borderRight:p.borderRight[a]}))}),d}function o(i){for(var a;i.hasNode(a=r.uniqueId("_root")););return a}return U$}var W$,mJ;function lHe(){if(mJ)return W$;mJ=1,W$=e;function e(r,n,o){let i={},a;o.forEach(l=>{let s=r.parent(l),c,d;for(;s;){if(c=r.parent(s),c?(d=i[c],i[c]=s):(d=a,a=s),d&&d!==s){n.setEdge(d,s);return}s=c}})}return W$}var G$,yJ;function sHe(){if(yJ)return G$;yJ=1;let e=eHe(),r=tHe(),n=iHe(),o=aHe(),i=lHe(),a=cl().Graph,l=$n();G$=s;function s(p,f){if(f&&typeof f.customOrder=="function"){f.customOrder(p,s);return}let m=l.maxRank(p),v=c(p,l.range(1,m+1),"inEdges"),w=c(p,l.range(m-1,-1,-1),"outEdges"),x=e(p);if(u(p,x),f&&f.disableOptimalOrderHeuristic)return;let k=Number.POSITIVE_INFINITY,C;for(let _=0,$=0;$<4;++_,++$){d(_%2?v:w,_%4>=2),x=l.buildLayerMatrix(p);let R=r(p,x);R{v.has(x)||v.set(x,[]),v.get(x).push(k)};for(const x of p.nodes()){const k=p.node(x);if(typeof k.rank=="number"&&w(k.rank,x),typeof k.minRank=="number"&&typeof k.maxRank=="number")for(let C=k.minRank;C<=k.maxRank;C++)C!==k.rank&&w(C,x)}return f.map(function(x){return o(p,x,m,v.get(x)||[])})}function d(p,f){let m=new a;p.forEach(function(v){let w=v.graph().root,x=n(v,w,m,f);x.vs.forEach((k,C)=>v.node(k).order=C),i(v,m,x.vs)})}function u(p,f){Object.values(f).forEach(m=>m.forEach((v,w)=>p.node(v).order=w))}return G$}var Y$,vJ;function cHe(){if(vJ)return Y$;vJ=1;let e=cl().Graph,r=$n();Y$={positionX:m,findType1Conflicts:n,findType2Conflicts:o,addConflict:a,hasConflict:l,verticalAlignment:s,horizontalCompaction:c,alignCoordinates:p,findSmallestWidthAlignment:u,balance:f};function n(x,k){let C={};function _($,R){let T=0,A=0,z=$.length,j=R[R.length-1];return R.forEach((I,N)=>{let L=i(x,I),H=L?x.node(L).order:z;(L||I===j)&&(R.slice(A,N+1).forEach(P=>{x.predecessors(P).forEach(V=>{let B=x.node(V),F=B.order;(F{I=R[N],x.node(I).dummy&&x.predecessors(I).forEach(L=>{let H=x.node(L);H.dummy&&(H.orderj)&&a(C,L,I)})})}function $(R,T){let A=-1,z,j=0;return T.forEach((I,N)=>{if(x.node(I).dummy==="border"){let L=x.predecessors(I);L.length&&(z=x.node(L[0]).order,_(T,j,N,A,z),j=N,A=z)}_(T,j,T.length,z,R.length)}),T}return k.length&&k.reduce($),C}function i(x,k){if(x.node(k).dummy)return x.predecessors(k).find(C=>x.node(C).dummy)}function a(x,k,C){if(k>C){let $=k;k=C,C=$}let _=x[k];_||(x[k]=_={}),_[C]=!0}function l(x,k,C){if(k>C){let _=k;k=C,C=_}return!!x[k]&&Object.hasOwn(x[k],C)}function s(x,k,C,_){let $={},R={},T={};return k.forEach(A=>{A.forEach((z,j)=>{$[z]=z,R[z]=z,T[z]=j})}),k.forEach(A=>{let z=-1;A.forEach(j=>{let I=_(j);if(I.length){I=I.sort((L,H)=>T[L]-T[H]);let N=(I.length-1)/2;for(let L=Math.floor(N),H=Math.ceil(N);L<=H;++L){let P=I[L];R[j]===j&&zMath.max(L,R[H.v]+T.edge(H)),0)}function I(N){let L=T.outEdges(N).reduce((P,V)=>Math.min(P,R[V.w]-T.edge(V)),Number.POSITIVE_INFINITY),H=x.node(N);L!==Number.POSITIVE_INFINITY&&H.borderType!==A&&(R[N]=Math.max(R[N],L))}return z(j,T.predecessors.bind(T)),z(I,T.successors.bind(T)),Object.keys(_).forEach(N=>R[N]=R[C[N]]),R}function d(x,k,C,_){let $=new e,R=x.graph(),T=v(R.nodesep,R.edgesep,_);return k.forEach(A=>{let z;A.forEach(j=>{let I=C[j];if($.setNode(I),z){var N=C[z],L=$.edge(N,I);$.setEdge(N,I,Math.max(T(x,j,z),L||0))}z=j})}),$}function u(x,k){return Object.values(k).reduce((C,_)=>{let $=Number.NEGATIVE_INFINITY,R=Number.POSITIVE_INFINITY;Object.entries(_).forEach(([A,z])=>{let j=w(x,A)/2;$=Math.max(z+j,$),R=Math.min(z-j,R)});const T=$-R;return T{["l","r"].forEach(T=>{let A=R+T,z=x[A];if(z===k)return;let j=Object.values(z),I=_-r.applyWithChunking(Math.min,j);T!=="l"&&(I=$-r.applyWithChunking(Math.max,j)),I&&(x[A]=r.mapValues(z,N=>N+I))})})}function f(x,k){return r.mapValues(x.ul,(C,_)=>{if(k)return x[k.toLowerCase()][_];{let $=Object.values(x).map(R=>R[_]).sort((R,T)=>R-T);return($[1]+$[2])/2}})}function m(x){let k=r.buildLayerMatrix(x),C=Object.assign(n(x,k),o(x,k)),_={},$;["u","d"].forEach(T=>{$=T==="u"?k:Object.values(k).reverse(),["l","r"].forEach(A=>{A==="r"&&($=$.map(N=>Object.values(N).reverse()));let z=(T==="u"?x.predecessors:x.successors).bind(x),j=s(x,$,C,z),I=c(x,$,j.root,j.align,A==="r");A==="r"&&(I=r.mapValues(I,N=>-N)),_[T+A]=I})});let R=u(x,_);return p(_,R),f(_,x.graph().align)}function v(x,k,C){return(_,$,R)=>{let T=_.node($),A=_.node(R),z=0,j;if(z+=T.width/2,Object.hasOwn(T,"labelpos"))switch(T.labelpos.toLowerCase()){case"l":j=-T.width/2;break;case"r":j=T.width/2;break}if(j&&(z+=C?j:-j),j=0,z+=(T.dummy?k:x)/2,z+=(A.dummy?k:x)/2,z+=A.width/2,Object.hasOwn(A,"labelpos"))switch(A.labelpos.toLowerCase()){case"l":j=A.width/2;break;case"r":j=-A.width/2;break}return j&&(z+=C?j:-j),j=0,z}}function w(x,k){return x.node(k).width}return Y$}var X$,bJ;function dHe(){if(bJ)return X$;bJ=1;let e=$n(),r=cHe().positionX;X$=n;function n(i){i=e.asNonCompoundGraph(i),o(i),Object.entries(r(i)).forEach(([a,l])=>i.node(a).x=l)}function o(i){let a=e.buildLayerMatrix(i),l=i.graph().ranksep,s=0;a.forEach(c=>{const d=c.reduce((u,p)=>{const f=i.node(p).height;return u>f?u:f},0);c.forEach(u=>i.node(u).y=s+d/2),s+=d+l})}return X$}var K$,xJ;function uHe(){if(xJ)return K$;xJ=1;let e=Wqe(),r=Gqe(),n=Xqe(),o=$n().normalizeRanks,i=Kqe(),a=$n().removeEmptyRanks,l=Zqe(),s=Qqe(),c=Jqe(),d=sHe(),u=dHe(),p=$n(),f=cl().Graph;K$=m;function m(O,W){let Z=W&&W.debugTiming?p.time:p.notime;Z("layout",()=>{let Q=Z(" buildLayoutGraph",()=>z(O));Z(" runLayout",()=>v(Q,Z,W)),Z(" updateInputGraph",()=>w(O,Q))})}function v(O,W,Z){W(" makeSpaceForEdgeLabels",()=>j(O)),W(" removeSelfEdges",()=>q(O)),W(" acyclic",()=>e.run(O)),W(" nestingGraph.run",()=>l.run(O)),W(" rank",()=>n(p.asNonCompoundGraph(O))),W(" injectEdgeLabelProxies",()=>I(O)),W(" removeEmptyRanks",()=>a(O)),W(" nestingGraph.cleanup",()=>l.cleanup(O)),W(" normalizeRanks",()=>o(O)),W(" assignRankMinMax",()=>N(O)),W(" removeEdgeLabelProxies",()=>L(O)),W(" normalize.run",()=>r.run(O)),W(" parentDummyChains",()=>i(O)),W(" addBorderSegments",()=>s(O)),W(" order",()=>d(O,Z)),W(" insertSelfEdges",()=>G(O)),W(" adjustCoordinateSystem",()=>c.adjust(O)),W(" position",()=>u(O)),W(" positionSelfEdges",()=>U(O)),W(" removeBorderNodes",()=>F(O)),W(" normalize.undo",()=>r.undo(O)),W(" fixupEdgeLabelCoords",()=>V(O)),W(" undoCoordinateSystem",()=>c.undo(O)),W(" translateGraph",()=>H(O)),W(" assignNodeIntersects",()=>P(O)),W(" reversePoints",()=>B(O)),W(" acyclic.undo",()=>e.undo(O))}function w(O,W){O.nodes().forEach(Z=>{let Q=O.node(Z),ie=W.node(Z);Q&&(Q.x=ie.x,Q.y=ie.y,Q.rank=ie.rank,W.children(Z).length&&(Q.width=ie.width,Q.height=ie.height))}),O.edges().forEach(Z=>{let Q=O.edge(Z),ie=W.edge(Z);Q.points=ie.points,Object.hasOwn(ie,"x")&&(Q.x=ie.x,Q.y=ie.y)}),O.graph().width=W.graph().width,O.graph().height=W.graph().height}let x=["nodesep","edgesep","ranksep","marginx","marginy"],k={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},C=["acyclicer","ranker","rankdir","align"],_=["width","height","rank"],$={width:0,height:0},R=["minlen","weight","width","height","labeloffset"],T={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},A=["labelpos"];function z(O){let W=new f({multigraph:!0,compound:!0}),Z=K(O.graph());return W.setGraph(Object.assign({},k,Y(Z,x),p.pick(Z,C))),O.nodes().forEach(Q=>{let ie=K(O.node(Q));const te=Y(ie,_);Object.keys($).forEach(re=>{te[re]===void 0&&(te[re]=$[re])}),W.setNode(Q,te),W.setParent(Q,O.parent(Q))}),O.edges().forEach(Q=>{let ie=K(O.edge(Q));W.setEdge(Q,Object.assign({},T,Y(ie,R),p.pick(ie,A)))}),W}function j(O){let W=O.graph();W.ranksep/=2,O.edges().forEach(Z=>{let Q=O.edge(Z);Q.minlen*=2,Q.labelpos.toLowerCase()!=="c"&&(W.rankdir==="TB"||W.rankdir==="BT"?Q.width+=Q.labeloffset:Q.height+=Q.labeloffset)})}function I(O){O.edges().forEach(W=>{let Z=O.edge(W);if(Z.width&&Z.height){let Q=O.node(W.v),ie={rank:(O.node(W.w).rank-Q.rank)/2+Q.rank,e:W};p.addDummyNode(O,"edge-proxy",ie,"_ep")}})}function N(O){let W=0;O.nodes().forEach(Z=>{let Q=O.node(Z);Q.borderTop&&(Q.minRank=O.node(Q.borderTop).rank,Q.maxRank=O.node(Q.borderBottom).rank,W=Math.max(W,Q.maxRank))}),O.graph().maxRank=W}function L(O){O.nodes().forEach(W=>{let Z=O.node(W);Z.dummy==="edge-proxy"&&(O.edge(Z.e).labelRank=Z.rank,O.removeNode(W))})}function H(O){let W=Number.POSITIVE_INFINITY,Z=0,Q=Number.POSITIVE_INFINITY,ie=0,te=O.graph(),re=te.marginx||0,ue=te.marginy||0;function _e(ce){let pe=ce.x,xe=ce.y,je=ce.width,Be=ce.height;W=Math.min(W,pe-je/2),Z=Math.max(Z,pe+je/2),Q=Math.min(Q,xe-Be/2),ie=Math.max(ie,xe+Be/2)}O.nodes().forEach(ce=>_e(O.node(ce))),O.edges().forEach(ce=>{let pe=O.edge(ce);Object.hasOwn(pe,"x")&&_e(pe)}),W-=re,Q-=ue,O.nodes().forEach(ce=>{let pe=O.node(ce);pe.x-=W,pe.y-=Q}),O.edges().forEach(ce=>{let pe=O.edge(ce);pe.points.forEach(xe=>{xe.x-=W,xe.y-=Q}),Object.hasOwn(pe,"x")&&(pe.x-=W),Object.hasOwn(pe,"y")&&(pe.y-=Q)}),te.width=Z-W+re,te.height=ie-Q+ue}function P(O){O.edges().forEach(W=>{let Z=O.edge(W),Q=O.node(W.v),ie=O.node(W.w),te,re;Z.points?(te=Z.points[0],re=Z.points[Z.points.length-1]):(Z.points=[],te=ie,re=Q),Z.points.unshift(p.intersectRect(Q,te)),Z.points.push(p.intersectRect(ie,re))})}function V(O){O.edges().forEach(W=>{let Z=O.edge(W);if(Object.hasOwn(Z,"x"))switch((Z.labelpos==="l"||Z.labelpos==="r")&&(Z.width-=Z.labeloffset),Z.labelpos){case"l":Z.x-=Z.width/2+Z.labeloffset;break;case"r":Z.x+=Z.width/2+Z.labeloffset;break}})}function B(O){O.edges().forEach(W=>{let Z=O.edge(W);Z.reversed&&Z.points.reverse()})}function F(O){O.nodes().forEach(W=>{if(O.children(W).length){let Z=O.node(W),Q=O.node(Z.borderTop),ie=O.node(Z.borderBottom),te=O.node(Z.borderLeft[Z.borderLeft.length-1]),re=O.node(Z.borderRight[Z.borderRight.length-1]);Z.width=Math.abs(re.x-te.x),Z.height=Math.abs(ie.y-Q.y),Z.x=te.x+Z.width/2,Z.y=Q.y+Z.height/2}}),O.nodes().forEach(W=>{O.node(W).dummy==="border"&&O.removeNode(W)})}function q(O){O.edges().forEach(W=>{if(W.v===W.w){var Z=O.node(W.v);Z.selfEdges||(Z.selfEdges=[]),Z.selfEdges.push({e:W,label:O.edge(W)}),O.removeEdge(W)}})}function G(O){var W=p.buildLayerMatrix(O);W.forEach(Z=>{var Q=0;Z.forEach((ie,te)=>{var re=O.node(ie);re.order=te+Q,(re.selfEdges||[]).forEach(ue=>{p.addDummyNode(O,"selfedge",{width:ue.label.width,height:ue.label.height,rank:re.rank,order:te+ ++Q,e:ue.e,label:ue.label},"_se")}),delete re.selfEdges})})}function U(O){O.nodes().forEach(W=>{var Z=O.node(W);if(Z.dummy==="selfedge"){var Q=O.node(Z.e.v),ie=Q.x+Q.width/2,te=Q.y,re=Z.x-ie,ue=Q.height/2;O.setEdge(Z.e,Z.label),O.removeNode(W),Z.label.points=[{x:ie+2*re/3,y:te-ue},{x:ie+5*re/6,y:te-ue},{x:ie+re,y:te},{x:ie+5*re/6,y:te+ue},{x:ie+2*re/3,y:te+ue}],Z.label.x=Z.x,Z.label.y=Z.y}})}function Y(O,W){return p.mapValues(p.pick(O,W),Number)}function K(O){var W={};return O&&Object.entries(O).forEach(([Z,Q])=>{typeof Z=="string"&&(Z=Z.toLowerCase()),W[Z]=Q}),W}return K$}var Z$,wJ;function pHe(){if(wJ)return Z$;wJ=1;let e=$n(),r=cl().Graph;Z$={debugOrdering:n};function n(o){let i=e.buildLayerMatrix(o),a=new r({compound:!0,multigraph:!0}).setGraph({});return o.nodes().forEach(l=>{a.setNode(l,{label:l}),a.setParent(l,"layer"+o.node(l).rank)}),o.edges().forEach(l=>a.setEdge(l.v,l.w,{},l.name)),i.forEach((l,s)=>{let c="layer"+s;a.setNode(c,{rank:"same"}),l.reduce((d,u)=>(a.setEdge(d,u,{style:"invis"}),u))}),a}return Z$}var kJ,_J;function hHe(){return _J||(_J=1,kJ="1.1.8"),kJ}var SJ,EJ;function fHe(){return EJ||(EJ=1,SJ={graphlib:cl(),layout:uHe(),debug:pHe(),util:{time:$n().time,notime:$n().notime},version:hHe()}),SJ}var gHe=fHe();const x2=Y7(gHe),co={dagre:{ranksep:60,nodesep:35,edgesep:25},edgeLabel:{width:140,height:10,minlen:1,weight:1},emptyNodeOffset:120,nodeWidth:330,nodeHeight:180,compound:{labelHeight:2,paddingTop:50,paddingBottom:32}};function mHe(){const e=new x2.graphlib.Graph({directed:!0,compound:!0,multigraph:!0});return e.setGraph({...co.dagre,rankdir:"LR"}),e.setDefaultEdgeLabel(()=>({...co.edgeLabel})),e.setDefaultNodeLabel(()=>({})),e}const Q$="-port";function J$(e,r,n){const o=new Ln(a=>({id:`${e}-${a}`,portId:`${e}-${a}`})),i=hx(r);for(const a of i.sorted){const l=i.children(a).length>0,s=a.id,c=`${e}-${s}`,d=l?`${c}${Q$}`:c;o.set(s,{id:c,portId:d}),n.setNode(c,{column:e,element:a,isCompound:l,portId:d,inPorts:[],outPorts:[],width:co.nodeWidth,height:co.nodeHeight}),l&&(n.setNode(d,{element:a,portId:d,isCompound:l,inPorts:[],outPorts:[],width:co.nodeWidth-co.dagre.ranksep,height:co.compound.labelHeight}),n.setParent(d,c));const u=i.parent(a);u&&n.setParent(c,`${e}-${u.id}`)}return{...i,byId:a=>{const l=i.byId(a),s=o.get(l.id);return{element:l,graph:s}},graphNodes:o}}function yHe(e){return x2.layout(e,{}),r=>{const n=e.node(r),{x:o,y:i,width:a,height:l}=n;return{position:{x:o-Math.round(a/2),y:i-Math.round(l/2)},width:a,height:l}}}var w2;(e=>{e.Empty="@empty"})(w2||(w2={}));function vHe(e,r){const n=mHe(),o=J$("incomers",e.incomers,n),i=J$("subjects",e.subjects,n),a=J$("outgoers",e.outgoers,n),l=[];Jr(XCe(Jr(C1(e.incoming),un($=>({id:$.source.id,sourceFqn:$.source.id,targetFqn:$.target.id,source:o.byId($.source.id).graph,target:i.byId($.target.id).graph,relation:$}))),Jr(C1(e.outgoing),un($=>({id:$.target.id,sourceFqn:$.source.id,targetFqn:$.target.id,source:i.byId($.source.id).graph,target:a.byId($.target.id).graph,relation:$})))),un($=>({...$,expr:`${$.source.id}->${$.target.id}`})),m$e(rp("expr")),f$e($=>{const R=$[0].source,T=$[0].target,A=$[0].expr;n.node(R.id).outPorts.push(T.id),n.node(T.id).inPorts.push(R.id),n.setEdge(R.portId,T.portId,{...co.edgeLabel},A),l.push({name:A,sourceFqn:$[0].sourceFqn,targetFqn:$[0].targetFqn,source:R.id,sourceHandle:R.id+"_out"+(n.node(R.id).outPorts.length-1),target:T.id,targetHandle:T.id+"_in"+(n.node(T.id).inPorts.length-1),relations:un($,rp("relation"))})}));for(const $ of i.graphNodes.values()){const R=$.id,T=n.node(R);if(T.isCompound)continue;const A=Math.max(n.inEdges(R)?.length??0,n.outEdges(R)?.length??0);A>2&&(T.height=T.height+(A-3)*14)}const s=[...o.graphNodes.values(),...i.graphNodes.values(),...a.graphNodes.values()];if(o.graphNodes.size==0){const $="incomers-empty";n.setNode($,{column:"incomers",element:null,isCompound:!1,portId:$,inPorts:[],outPorts:[],width:co.nodeWidth,height:co.nodeHeight});for(const R of i.graphNodes.values())n.setEdge($,R.portId);s.push({id:$,portId:$})}if(a.graphNodes.size==0){const $="outgoers-empty";n.setNode($,{column:"outgoers",element:null,isCompound:!1,portId:$,inPorts:[],outPorts:[],width:co.nodeWidth,height:co.nodeHeight});for(const R of i.graphNodes.values())n.setEdge(R.portId,$);s.push({id:$,portId:$})}const c=n.edgeCount();if(c>10)for(const $ of n.edges())n.setEdge($,{...co.edgeLabel,width:c>25?800:400});const d=yHe(n),u=Jr(s,ep($=>$.id===$.portId),hw($=>[$.id,d($.id)]));function p($){return u[$]??=Jr(n.children($)??[],ep(R=>!R.endsWith(Q$)),un(R=>p(R)),Wq(R=>{He(R.length>0,`Node ${$} has no nested nodes`)}),gw((R,T)=>({minY:Math.min(R.minY,T.position.y),maxY:Math.max(R.maxY,T.position.y+T.height)}),{minY:1/0,maxY:-1/0}),({minY:R,maxY:T})=>{const{position:{x:A},width:z}=d($);return R=R-co.compound.paddingTop,T=T+co.compound.paddingBottom,{position:{x:A,y:R},width:z,height:T-R}})}function f($){const R=n.parent($);return R?f(R)+1:0}function m($){const R=n.children($)??[];return R.length===0?0:1+Math.max(...R.map(m))}const v=($,R,T)=>Jr(T,un((A,z)=>({port:$+"_"+R+z,topY:p(A).position.y})),mw(rp("topY")),un(rp("port")));let w=0,x=0;const[k]=[...i.root];He(k,"Subjects should not be empty");let C=p(i.graphNodes.get(k.id).id);const _=s.map(({id:$})=>{const{element:R,inPorts:T,outPorts:A,column:z}=n.node($);let{position:j,width:I,height:N}=p($);if(!R){if(N=Math.min(C.height,300),j.y=C.position.y+C.height/2-N/2,z==="incomers")I=C.position.x-co.emptyNodeOffset-j.x;else{const q=j.x+I;j.x=C.position.x+C.width+co.emptyNodeOffset,I=q-j.x}return{id:$,parent:null,x:j.x,y:j.y,title:"empty node",description:null,technology:null,tags:[],links:[],color:"muted",shape:"rectangle",style:{border:"dashed",opacity:50},kind:w2.Empty,level:0,labelBBox:{x:j.x,y:j.y,width:I,height:N},children:[],width:I,height:N,column:z,ports:{in:[],out:[]},existsInCurrentView:!1}}const L=n.parent($),H=(n.children($)??[]).filter(q=>!q.endsWith(Q$));w=Math.min(w,j.x),x=Math.min(x,j.y);const P=r?E1(R.scopedViews(),q=>q.id!==r.id)?.id??null:null,V=r?.findNodeWithElement(R.id),B=r&&!V?E1(R.ancestors(),q=>!!r.findNodeWithElement(q.id))?.id:null,F=V??(B&&r?.findNodeWithElement(B));return{id:$,parent:L??null,x:j.x,y:j.y,title:R.title,description:Fs(R.$element)??null,technology:R.technology,tags:[...R.tags],links:null,color:F?.color??R.color,shape:V?.shape??R.shape,icon:V?.icon??R.icon??"none",modelRef:R.id,kind:R.kind,level:f($),labelBBox:{x:j.x,y:j.y,width:I,height:N},style:ud({...(V??F)?.style,...R.$element.style},["color","shape","icon"]),navigateTo:P,...H.length>0&&{depth:m($)},children:H,width:I,height:N,column:z,ports:{in:v($,"in",T),out:v($,"out",A)},existsInCurrentView:!!V}});return{subjectExistsInScope:!r||r.includesElement(k.id),bounds:{x:Math.min(w,0),y:Math.min(x,0),width:n.graph().width??100,height:n.graph().height??100},nodes:_,edges:n.edges().reduce(($,R)=>{const T=n.edge(R),A=R.name;if(!A)return $;const{name:z,source:j,sourceFqn:I,target:N,targetFqn:L,relations:H,sourceHandle:P,targetHandle:V}=gt(Q1(l,U=>U.name===A)),B=fw(H),F=B?.title??"untitled",q=H.length>1,G=fw(yw(H.flatMap(U=>U.navigateTo?.id?U.navigateTo.id:[])));return $.push(_1({id:z,sourceFqn:I,source:j,sourceHandle:P,targetFqn:L,target:N,targetHandle:V,label:q?`${H.length} relationships`:F,navigateTo:G,color:B?.color??"gray",existsInCurrentView:!r||H.every(U=>r.includesRelation(U.id)),points:T.points.map(U=>[U.x,U.y]),line:B?.line??"dashed",head:B?.head,tail:B?.tail,relations:H.map(U=>U.id),parent:null})),$},[])}}function bHe(e,r,n){const o=Fo();return S.useMemo(()=>{const i=r?o.findView(r):null,a=vHe(ZO(e,o,r,n),n==="view"?i:null);return i&&(n==="global"||!a.subjectExistsInScope)&&(a.edges=a.edges.map(l=>(l.existsInCurrentView=l.relations.every(s=>i.includesRelation(s)),l))),Object.assign(a,{subject:e})},[o,e,r,n,ZO])}const o0=(e,r)=>Rb(e.label,r.label);function eR(e){return{label:e.title,value:e.id,children:[...e.children()].map(eR).sort(o0)}}function xHe(e){const r=Fo();return S.useMemo(()=>e?[...r.view(e).roots()].map(eR).sort(o0):[...r.roots()].map(eR).sort(o0),[r,e??null])}const wHe=fe({margin:"0"}),kHe=fe({_hover:{backgroundColor:"mantine.colors.gray[0]",_dark:{backgroundColor:"mantine.colors.defaultHover",color:"mantine.colors.white"}}}),CJ=fe({maxHeight:["70vh","calc(100cqh - 70px)"]}),_He=Object.freeze(Object.defineProperty({__proto__:null,label:kHe,node:wHe,scrollArea:CJ},Symbol.toStringTag,{value:"Module"})),SHe=[["path",{d:"M8 9l4 -4l4 4",key:"svg-0"}],["path",{d:"M16 15l-4 4l-4 -4",key:"svg-1"}]],tR=wt("outline","selector","Selector",SHe),EHe=e=>{const r=e.context.layouted?.subjectExistsInScope??!1;return{subjectId:e.context.subject,viewId:e.context.viewId,scope:e.context.scope,subjectExistsInScope:r,enableSelectSubject:e.context.enableSelectSubject,enableChangeScope:e.context.enableChangeScope}},CHe=()=>{},$He=S.memo(()=>{const e=n0(),{subjectId:r,viewId:n,scope:o,subjectExistsInScope:i,enableSelectSubject:a,enableChangeScope:l}=v2(EHe),s=S.useRef(null),c=S.useRef(null),d=Fo().findElement(r),u=xHe(o==="view"&&n?n:void 0),p=_y({multiple:!1});return p.setHoveredNode=CHe,S.useEffect(()=>{Du(r).reverse().forEach(f=>{p.expand(f)}),p.select(r)},[r]),y.jsxs(en,{ref:s,gap:"xs",pos:"relative",children:[a&&y.jsxs(en,{gap:4,wrap:"nowrap",children:[y.jsx(Se,{fz:"xs",fw:"500",style:{whiteSpace:"nowrap",userSelect:"none"},children:"Relationships of"}),y.jsx(Se,{pos:"relative",children:y.jsxs(br,{position:"bottom-start",shadow:"md",keepMounted:!1,withinPortal:!1,closeOnClickOutside:!0,clickOutsideEvents:["pointerdown","mousedown","click"],offset:4,onOpen:()=>{setTimeout(()=>{c.current?.querySelector(`[data-value="${r}"]`)?.scrollIntoView({behavior:"instant",block:"nearest"})},100)},children:[y.jsx(kd,{children:y.jsx(Vn,{size:"xs",variant:"default",maw:250,rightSection:y.jsx(tR,{size:16}),children:y.jsx(it,{fz:"xs",fw:"500",truncate:!0,children:d?.title??"???"})})}),y.jsx(Qs,{p:0,miw:250,maw:400,children:y.jsx(oi,{scrollbars:"y",type:"never",viewportRef:c,className:CJ,children:y.jsx(Ff,{allowRangeSelection:!1,selectOnClick:!1,tree:p,data:u,classNames:_He,levelOffset:8,styles:{root:{maxWidth:400,overflow:"hidden"},label:{paddingTop:5,paddingBottom:6}},renderNode:({node:f,selected:m,expanded:v,elementProps:w,hasChildren:x})=>y.jsxs(en,{gap:2,wrap:"nowrap",...w,py:"3",children:[y.jsx(lr,{variant:"subtle",size:18,c:"dimmed",style:{visibility:x?"visible":"hidden"},children:y.jsx(Dd,{stroke:3.5,style:{transition:"transform 150ms ease",transform:`rotate(${v?"90deg":"0"})`,width:"80%"}})}),y.jsx(Se,{flex:"1 1 100%",w:"100%",onClick:k=>{k.stopPropagation(),p.select(f.value),p.expand(f.value),e.navigateTo(f.value)},children:y.jsx(it,{fz:"sm",fw:m?"600":"400",truncate:"end",children:f.label})})]})})})})]})})]}),l&&y.jsxs(en,{gap:4,wrap:"nowrap",children:[a&&y.jsx(Se,{fz:"xs",fw:"500",...!i&&{c:"dimmed"},style:{whiteSpace:"nowrap",userSelect:"none"},children:"Scope"}),y.jsx("div",{children:y.jsx(_n,{color:"orange",label:y.jsxs(y.Fragment,{children:["This element does not exist in the current view",o==="view"&&y.jsxs(y.Fragment,{children:[y.jsx("br",{}),"Scope is set to global"]})]}),position:"bottom-start",disabled:i,portalProps:{target:s.current},children:y.jsx(Of,{flex:"1 0 auto",size:"xs",withItemsBorders:!1,value:o,styles:{label:{paddingLeft:8,paddingRight:8}},onChange:f=>{e.changeScope(f)},data:[{label:"Global",value:"global"},{label:y.jsx("span",{children:"Current view"}),value:"view",disabled:!i}]})})})]})]})}),k2=(e,r)=>Math.abs(e-r)<2.5,RHe=(e,r)=>e.id===r.id&&tt(e.selected??!1,r.selected??!1)&&tt(e.animated??!1,r.animated??!1)&&tt(e.source,r.source)&&k2(e.sourceX,r.sourceX)&&k2(e.sourceY,r.sourceY)&&tt(e.sourceHandleId??null,r.sourceHandleId??null)&&tt(e.sourcePosition,r.sourcePosition)&&tt(e.target,r.target)&&k2(e.targetY,r.targetY)&&k2(e.targetX,r.targetX)&&tt(e.targetHandleId??null,r.targetHandleId??null)&&tt(e.targetPosition,r.targetPosition)&&tt(e.data,r.data);function rR(e){const r=S.memo(e,RHe);return r.displayName=`MemoEdge(${e.displayName||e.name})`,r}function $J(e,r){return r2(e,r)}const wa=$J("button"),Rr=$J("div"),i0=S.forwardRef(({edgeProps:{id:e,data:{label:r,technology:n,hovered:o=!1},selected:i=!1,selectable:a=!1},pointerEvents:l="all",className:s,style:c,children:d,...u},p)=>{const f=k1(e)?IO(e):null,m=Zn(r)||Zn(n);return y.jsxs(Rr,{ref:p,className:Ge("likec4-edge-label",dVe({pointerEvents:l,isStepEdge:f!==null,cursor:a||f!==null?"pointer":"default"}),s),"data-edge-id":e,animate:{scale:o&&!i?1.06:1},...u,children:[f!==null&&y.jsx(hr,{className:"likec4-edge-label__step-number",children:f}),m&&y.jsxs(hr,{className:"likec4-edge-label__contents",children:[Zn(r)&&y.jsx(hr,{lineClamp:5,className:"likec4-edge-label__text",children:r}),Zn(n)&&y.jsx(hr,{className:"likec4-edge-label__technology",children:"[ "+n+" ]"}),d]})]})});i0.displayName="EdgeLabel";function _2({icon:e,onClick:r}){return y.jsx(lr,{className:Ge("nodrag nopan",cVe()),onPointerDownCapture:nn,onClick:r,role:"button",onDoubleClick:nn,children:e??y.jsx(ba,{})})}function a0({className:e,component:r="g",selectable:n=!1,selected:o=!1,data:{color:i="gray",hovered:a=!1,active:l=!1,dimmed:s=!1,...c},animated:d,children:u,style:p}){const f={className:Ge(e,"likec4-edge-container",o&&"selected",n&&"selectable"),"data-likec4-color":i,"data-edge-dir":c.dir??"forward","data-edge-active":l,"data-edge-animated":d||l,"data-likec4-hovered":a,...o&&{"data-likec4-selected":o},...s!==!1&&{"data-likec4-dimmed":s}};return r==="svg"?y.jsx("svg",{style:p,...f,children:u}):(He(r==="g",'EdgeContainer: component must be "g" or "svg"'),y.jsx("g",{style:p,...f,children:u}))}const zHe=e=>y.jsx("marker",{viewBox:"-4 -4 14 16",refX:5,refY:4,markerWidth:"7",markerHeight:"8",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M0,0 L7,4 L0,8 L4,4 Z",stroke:"context-stroke",fill:"context-stroke",strokeDasharray:0,strokeWidth:1,strokeLinecap:"round"})}),THe=e=>y.jsx("marker",{viewBox:"-1 -1 12 10",refX:4,refY:3,markerWidth:"8",markerHeight:"6",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M 0 0 L 8 3 L 0 6 L 1 3 z",fill:"context-stroke",strokeWidth:0})}),jHe=e=>y.jsx("marker",{viewBox:"-1 -1 12 12",refX:8,refY:4,markerWidth:"8",markerHeight:"8",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M 8 0 L 0 4 L 8 8 M 8 4 L 0 4",fill:"none",strokeWidth:1})}),AHe=e=>y.jsx("marker",{viewBox:"-1 -1 12 10",refX:4,refY:3,markerWidth:"8",markerHeight:"6",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M 0 0 L 8 3 L 0 6 L 1 3 z",stroke:"context-stroke",fill:"context-stroke",strokeWidth:1.25,strokeLinejoin:"miter",strokeLinecap:"square"})}),DHe=e=>y.jsx("marker",{viewBox:"-4 -4 16 14",refX:5,refY:4,markerWidth:"10",markerHeight:"8",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M5,0 L10,4 L5,8 L0,4 Z",fill:"context-stroke",strokeWidth:0,strokeLinecap:"round"})}),PHe=e=>y.jsx("marker",{viewBox:"-4 -4 16 14",refX:6,refY:4,markerWidth:"10",markerHeight:"8",preserveAspectRatio:"xMaxYMid meet",orient:"auto-start-reverse",...e,children:y.jsx("path",{d:"M5,0 L10,4 L5,8 L0,4 Z",stroke:"context-stroke",fill:"context-stroke",strokeWidth:1.25,strokeLinecap:"round"})}),MHe=e=>y.jsx("marker",{viewBox:"0 0 10 10",refX:4,refY:4,markerWidth:"6",markerHeight:"6",...e,children:y.jsx("circle",{strokeWidth:0,fill:"context-stroke",cx:4,cy:4,r:3})}),NHe=e=>y.jsx("marker",{viewBox:"0 0 10 10",refX:4,refY:4,markerWidth:"6",markerHeight:"6",...e,children:y.jsx("circle",{strokeWidth:1.25,stroke:"context-stroke",fill:"context-stroke",cx:4,cy:4,r:3})}),RJ={Arrow:THe,Crow:jHe,OArrow:AHe,Open:zHe,Diamond:DHe,ODiamond:PHe,Dot:MHe,ODot:NHe};function zJ(e){if(!(!e||e==="none"))switch(e){case"normal":return"Arrow";case"crow":return"Crow";case"onormal":return"OArrow";case"diamond":return"Diamond";case"odiamond":return"ODiamond";case"open":case"vee":return"Open";case"dot":return"Dot";case"odot":return"ODot";default:Qo(e)}}const l0=S.forwardRef(({edgeProps:{id:e,data:{line:r,dir:n,tail:o,head:i},selectable:a=!0,style:l,interactionWidth:s},isDragging:c=!1,onEdgePointerDown:d,strokeWidth:u,svgPath:p},f)=>{let m=zJ(o),v=zJ(i??"normal");n==="back"&&([m,v]=[v,m]);const w=m?RJ[m]:null,x=v?RJ[v]:null,k=r==="dotted",C=k||r==="dashed";let _;k?_="1,8":C&&(_="8,10");const $=mVe();return y.jsxs(y.Fragment,{children:[a&&y.jsx("path",{className:Ge("react-flow__edge-interaction",fe({fill:"none"})),onPointerDown:d,d:p,style:{strokeWidth:s??10,stroke:"currentcolor",strokeOpacity:0,...c?{display:"none"}:{}}}),y.jsx("circle",{className:Ge("likec4-edge-middle-point",$.middlePoint),"data-edge-id":e,style:{offsetPath:`path("${p}")`}}),y.jsxs("g",{className:$.markersCtx,onPointerDown:d,children:[y.jsxs("defs",{children:[w&&y.jsx(w,{id:"start"+e}),x&&y.jsx(x,{id:"end"+e})]}),y.jsx("path",{className:Ge("react-flow__edge-path","hide-on-reduced-graphics",$.pathBg,c&&fe({display:"none"})),d:p,style:l,strokeLinecap:"round"}),y.jsx("path",{ref:f,className:Ge("react-flow__edge-path",$.path,a&&"react-flow__edge-interaction"),d:p,style:l,strokeWidth:u,strokeLinecap:"round",strokeDasharray:_,markerStart:w?`url(#start${e})`:void 0,markerEnd:x?`url(#end${e})`:void 0})]})]})});l0.displayName="EdgePath";const TJ=e=>{if(e!==void 0)return Iq(e)?`${Math.round(e)}px`:e};function S2({edgeProps:{id:e,selected:r=!1,data:{hovered:n=!1,active:o=!1,dimmed:i=!1,labelBBox:a,color:l="gray"},animated:s},labelPosition:c,className:d,style:u,children:p,...f}){let m=QC(S.useCallback(k=>k.edgeLookup.get(e)?.zIndex??lc.Edge,[e]));(n||o)&&(m+=100);let v=c?.x??a?.x,w=c?.y??a?.y;if(v===void 0||w===void 0)return null;const x=c?.translate??"";return y.jsx(yq,{children:y.jsx("div",{...f,className:Ge("nodrag nopan","likec4-edge-label-container",d),"data-likec4-hovered":n,"data-likec4-color":l,"data-edge-active":o,"data-edge-animated":s||o,...r!==!1&&{"data-likec4-selected":r},...i!==!1&&{"data-likec4-dimmed":i},style:{...a&&{maxWidth:a.width+18},zIndex:m,...u,transform:`translate(${TJ(v)}, ${TJ(w)}) ${x}`},children:p},e)})}const BHe=rR(e=>{const r=n0(),{enableNavigateTo:n}=sr(),{data:{navigateTo:o,relations:i,existsInCurrentView:a}}=e,[l,s,c]=Kx(e),d=Mt(),u=i.length>1||!a,p=u?{...e,data:{...e.data,line:"solid",color:"amber"}}:e;let f=y.jsx(i0,{edgeProps:p,className:fe({transition:"fast"}),children:n&&o&&y.jsx(_2,{...e,onClick:m=>{m.stopPropagation(),d.navigateTo(o)}})});return a||(f=y.jsx(_n,{color:"orange",c:"black",label:"This relationship is not included in the current view",portalProps:{target:`#${r.rootElementId}`},openDelay:800,children:f})),y.jsxs(a0,{...p,children:[y.jsx(l0,{edgeProps:p,svgPath:l,...u&&{strokeWidth:5}}),y.jsx(S2,{edgeProps:p,labelPosition:{x:s,y:c,translate:"translate(-50%, 0)"},style:{maxWidth:Math.min(Math.abs(e.targetX-e.sourceX-70),250)},children:f})]})}),IHe=fe({width:"100%",height:"100%",border:"3px dashed",borderColor:"mantine.colors.defaultBorder",borderRadius:"md",display:"flex",justifyContent:"center",alignItems:"center"});function OHe({data:{column:e}}){return y.jsx(Se,{className:IHe,children:y.jsxs(it,{c:"dimmed",fz:"lg",fw:500,children:["No ",e==="incomers"?"incoming":"outgoing"]})})}const LHe=e=>e.context.view.id;function E2(){const e=Xf();return pn(e,LHe)}const FHe=e=>e.context.view;function VHe(){const e=Xf();return pn(e,FHe,Ir)}const qHe=[["path",{d:"M3 6a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M21 11v-3a2 2 0 0 0 -2 -2h-6l3 3m0 -6l-3 3",key:"svg-1"}],["path",{d:"M3 13v3a2 2 0 0 0 2 2h6l-3 -3m0 6l3 -3",key:"svg-2"}],["path",{d:"M15 18a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-3"}]],s0=wt("outline","transform","Transform",qHe),HHe=[["path",{d:"M4 21v-4a3 3 0 0 1 3 -3h5",key:"svg-0"}],["path",{d:"M9 17l3 -3l-3 -3",key:"svg-1"}],["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-2"}],["path",{d:"M5 11v-6a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-9.5",key:"svg-3"}]],dg=wt("outline","file-symlink","FileSymlink",HHe),UHe=[["path",{d:"M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11",key:"svg-0"}]],WHe=wt("outline","bolt","Bolt",UHe),GHe=qn({position:"absolute",zIndex:1,justifyContent:"center",alignItems:"center",_smallZoom:{display:"none"}}),YHe=qn({gap:"1.5",justifyContent:"center",alignItems:"center"});function C2({selected:e=!1,data:{hovered:r=!1},buttons:n}){const o=oa();return n.length?y.jsx(hr,{className:GHe,style:{top:"calc(100% - 30px)",transform:"translateX(-50%)",left:"50%",width:"auto",minHeight:30},children:y.jsx(Rr,{layoutRoot:!0,initial:!1,style:{originY:0},animate:{opacity:r||e?1:.75,scale:r?1.1:e?.9:.8,y:r||e?6:0},layoutDependency:`${r}-${e}`,"data-likec4-hovered":r,className:Ge("nodrag nopan",YHe),children:n.map((i,a)=>y.jsx(lr,{component:wa,className:a2({}),initial:!1,whileTap:{scale:1},whileHover:{scale:1.3},onClick:i.onClick,onDoubleClick:nn,children:i.icon||y.jsx(WHe,{})},`${o}-${i.key??a}`))})}):null}const XHe=e=>e.context.subject,KHe=e=>{const{enableNavigateTo:r,enableVscode:n}=sr(),o=Mt(),i=E2(),a=n0(),l=v2(XHe),{navigateTo:s,fqn:c}=e.data,d=S.useMemo(()=>{const u=[];return s&&r&&i!==s&&u.push({key:"navigate",icon:y.jsx(ba,{}),onClick:p=>{p.stopPropagation(),o.navigateTo(s)}}),c!==l&&u.push({key:"relationships",icon:y.jsx(s0,{}),onClick:p=>{p.stopPropagation(),a.navigateTo(c,e.id)}}),n&&u.push({key:"goToSource",icon:y.jsx(dg,{}),onClick:p=>{p.stopPropagation(),o.openSource({element:c})}}),u},[s,r,i,c,l,n,o,a,e.id]);return y.jsx(C2,{buttons:d,...e})};function c0({nodeProps:{data:{hovered:e=!1,dimmed:r=!1,...n}},className:o,children:i,style:a,...l}){let s=ta(n.style.opacity??100,{min:0,max:100});const c=s<99,d=65,u=d+ta((100-d)*(s/100),{min:0,max:100-d}),p=sVe({isTransparent:c,inverseColor:s<60,borderStyle:n.style.border??(c?"dashed":"none")}),f=ta(n.depth??1,{min:1,max:5});return y.jsx(Rr,{className:Ge(p,o),initial:!1,"data-likec4-hovered":e,"data-likec4-color":n.color,"data-compound-depth":f,...r!==!1&&{"data-likec4-dimmed":r},style:{...a,"--_border-transparency":`${u}%`,"--_compound-transparency":`${s}%`},...l,children:i})}function d0({data:e}){const r=bx({element:e,className:"likec4-compound-icon"});return y.jsxs("div",{className:"likec4-compound-title-container",children:[r,y.jsx(it,{component:"h3",className:"likec4-compound-title",truncate:"end",children:e.title})]})}const jJ=T1({base:{transitionDuration:"normal"},variants:{delay:{true:{transitionDelay:{base:"0.2s",_hover:"0s"}}}}}),ZHe=[["path",{d:"M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v10a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z",key:"svg-0"}],["path",{d:"M9 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-1"}],["path",{d:"M15 8l2 0",key:"svg-2"}],["path",{d:"M15 12l2 0",key:"svg-3"}],["path",{d:"M7 16l10 0",key:"svg-4"}]],nR=wt("outline","id","Id",ZHe);function AJ({data:{hovered:e=!1},icon:r,onClick:n}){const o=m9(e,e?130:0)[0]&&e;return y.jsx(Rr,{initial:!1,animate:{scale:o?1.2:1},whileHover:{scale:1.4},whileTap:{scale:1},className:"likec4-compound-details details-button",children:y.jsx(lr,{className:Ge("nodrag nopan",jJ({delay:e&&!o}),a2({variant:"transparent"})),onClick:n,onDoubleClick:nn,children:r??y.jsx(nR,{stroke:1.8,style:{width:"75%"}})})})}const QHe=fe({position:"relative",width:"full",height:"full",padding:"0",margin:"0",display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",_focusVisible:{outline:"none"},_whenSelectable:{pointerEvents:"all",_before:{content:'" "',position:"absolute",top:"[calc(100% - 4px)]",left:"0",width:"full",height:"24px",background:"transparent",pointerEvents:"all"}},_reduceGraphicsOnPan:{_before:{display:"none"}},":where(.react-flow__node.selectable:not(.dragging)) &":{cursor:"pointer"}}),ug=S.forwardRef(({nodeProps:{selected:e=!1,selectable:r=!1,data:{hovered:n=!1,dimmed:o=!1,...i}},className:a,style:l,children:s,...c},d)=>{let u=1;switch(!0){case n:u=1.05;break;case e:u=1.02;break}const{size:p,padding:f,textSize:m}=$b(i.style??{});return y.jsx(Rr,{ref:d,className:Ge(QHe,"group","likec4-element-node",a),initial:!1,...r&&{animate:{scale:u},whileTap:{scale:.98}},"data-likec4-hovered":n,"data-likec4-color":i.color,"data-likec4-shape":i.shape,"data-likec4-shape-size":p,"data-likec4-spacing":f,"data-likec4-text-size":m,...o!==!1&&{"data-likec4-dimmed":o},style:{...l},...c,children:s})});ug.displayName="ElementNodeContainer";function DJ(e,r,n=.065){const o=Math.round(e/2),i=o,a=Pd(n*o),l=r-2*a;return{path:` M ${e},${a} - a ${i},${a} 0,0,0 ${-e} 0 - l 0,${l} - a ${i},${a} 0,0,0 ${e} 0 - l 0,${-l} - z - `.replace(/\s+/g," ").trim(),ry:a,rx:i}}function PJ(e,r,n=.185){const o=r,i=Math.round(o/2),a=Pd(o/2*n),l=e-2*a;return{path:` - M ${a},0 - a ${a},${i} 0,0,0 0 ${o} - l ${l},0 - a ${a},${i} 0,0,0 0 ${-o} - z`.replace(/\s+/g," ").trim(),ry:i,rx:a}}const Rp={width:115,height:120,path:"M57.9197 0C10.9124 0 33.5766 54.75 33.5766 54.75C38.6131 62.25 45.3285 60.75 45.3285 66C45.3285 70.5 39.4526 72 33.5766 72.75C24.3431 72.75 15.9489 71.25 7.55474 84.75C2.51825 93 0 120 0 120H115C115 120 112.482 93 108.285 84.75C99.8905 70.5 91.4963 72.75 82.2628 72C76.3869 71.25 70.5109 69.75 70.5109 65.25C70.5109 60.75 77.2263 62.25 82.2628 54C82.2628 54.75 104.927 0 57.9197 0V0Z"};function MJ({shape:e,w:r,h:n}){switch(e){case"mobile":return y.jsxs(y.Fragment,{children:[y.jsx("rect",{width:r,height:n,rx:6,"data-likec4-fill":"mix-stroke",strokeWidth:0}),y.jsxs("g",{"data-likec4-fill":"fill",strokeWidth:0,children:[y.jsx("circle",{cx:17,cy:n/2,r:12}),y.jsx("rect",{x:33,y:12,width:r-44,height:n-24,rx:5})]})]});case"browser":return y.jsxs(y.Fragment,{children:[y.jsx("rect",{width:r,height:n,rx:6,"data-likec4-fill":"mix-stroke",strokeWidth:0}),y.jsxs("g",{"data-likec4-fill":"fill",strokeWidth:0,children:[y.jsx("circle",{cx:16,cy:17,r:7}),y.jsx("circle",{cx:36,cy:17,r:7}),y.jsx("circle",{cx:56,cy:17,r:7}),y.jsx("rect",{x:70,y:8,width:r-80,height:17,rx:4}),y.jsx("rect",{x:10,y:32,width:r-20,height:n-42,rx:4})]})]});case"person":return y.jsxs(y.Fragment,{children:[y.jsx("rect",{width:r,height:n,rx:6,strokeWidth:0}),y.jsx("svg",{x:r-Rp.width-6,y:n-Rp.height,width:Rp.width,height:Rp.height,viewBox:`0 0 ${Rp.width} ${Rp.height}`,"data-likec4-fill":"mix-stroke",children:y.jsx("path",{strokeWidth:0,d:Rp.path})})]});case"queue":{const{path:o,rx:i,ry:a}=PJ(r,n);return y.jsxs(y.Fragment,{children:[y.jsx("path",{d:o,strokeWidth:2}),y.jsx("ellipse",{cx:i,cy:a,ry:a-.75,rx:i,"data-likec4-fill":"mix-stroke",strokeWidth:2})]})}case"storage":case"cylinder":{const{path:o,rx:i,ry:a}=DJ(r,n);return y.jsxs(y.Fragment,{children:[y.jsx("path",{d:o,strokeWidth:2}),y.jsx("ellipse",{cx:i,cy:a,ry:a,rx:i-.75,"data-likec4-fill":"mix-stroke",strokeWidth:2})]})}default:return Qo(e)}}function JHe({shape:e,w:r,h:n}){let o;switch(e){case"queue":o=y.jsx("path",{d:PJ(r,n).path});break;case"storage":case"cylinder":{o=y.jsx("path",{d:DJ(r,n).path});break}default:{o=y.jsx("rect",{x:-3,y:-3,width:r+6,height:n+6,rx:8});break}}return y.jsx("g",{className:"likec4-shape-outline",children:o})}function eUe({multiple:e,withOutLine:r}){return y.jsxs("div",{className:GZ({shapetype:"html"}),children:[e&&y.jsx("div",{className:"likec4-shape-multiple"}),r&&y.jsx("div",{className:"likec4-shape-outline"})]})}function pg({data:e,width:r,height:n,showSeletionOutline:o=!0}){let i=r&&r>10?r:e.width,a=n&&n>10?n:e.height;const l=e.style?.multiple??!1;if(e.shape==="rectangle")return y.jsx(eUe,{multiple:l,withOutLine:o});const s=GZ({shapetype:"svg"});return y.jsxs(y.Fragment,{children:[l&&y.jsx("svg",{className:s,"data-likec4-shape-multiple":"true",viewBox:`0 0 ${i} ${a}`,children:y.jsx(MJ,{shape:e.shape,w:i,h:a})}),y.jsxs("svg",{className:s,viewBox:`0 0 ${i} ${a}`,children:[o&&y.jsx(JHe,{shape:e.shape,w:i,h:a}),y.jsx(MJ,{shape:e.shape,w:i,h:a})]})]})}const zp=S.forwardRef(({value:e,textScale:r=1,uselikec4palette:n=!1,hideIfEmpty:o=!1,emptyText:i="no content",className:a,style:l,fontSize:s,...c},d)=>{if(e.isEmpty&&o)return null;const u=e.nonEmpty?e.isMarkdown?{dangerouslySetInnerHTML:{__html:e.html}}:{children:y.jsx("p",{children:e.text})}:{children:y.jsx(it,{component:"span",fz:"xs",c:"dimmed",style:{userSelect:"none"},children:i})};return y.jsx(hr,{ref:d,...c,className:Ge(bVe({uselikec4palette:n,value:e.isMarkdown?"markdown":"plaintext"}),a),style:{...l,...s&&{"--text-fz":`var(--font-sizes-${s}, var(--font-sizes-md))`},...r!==1&&{"--mantine-scale":r}},...u})});zp.displayName="Markdown";const NJ=S.forwardRef(({className:e,...r},n)=>y.jsx("div",{...r,ref:n,className:Ge(e,yVe(),"likec4-element")})),BJ=({data:e,...r})=>y.jsx(bx,{element:e,...r}),IJ=S.forwardRef(({className:e,...r},n)=>y.jsx("div",{...r,className:Ge(e,"likec4-element-node-content"),ref:n})),OJ=S.forwardRef(({data:{title:e,style:r},className:n,...o},i)=>{const{size:a}=$b(r),l=a==="sm"||a==="xs";return y.jsx(it,{component:"div",...o,className:Ge(n,"likec4-element-title"),"data-likec4-node-title":"",lineClamp:l?2:3,ref:i,children:e})}),LJ=S.forwardRef(({data:e,children:r,className:n,...o},i)=>{const a=e?.technology??r;return Zn(a)?y.jsx(it,{component:"div",...o,className:Ge(n,"likec4-element-technology"),"data-likec4-node-technology":"",ref:i,children:a}):null}),FJ=S.forwardRef(({data:{description:e,style:r},className:n,...o},i)=>{if(!e)return null;const a=ur.from(e),{size:l}=$b(r);return y.jsx(zp,{...o,className:Ge(n,"likec4-element-description",fe({lineClamp:l==="sm"||l==="xs"?3:5})),"data-likec4-node-description":"",value:a,uselikec4palette:!0,hideIfEmpty:!0,style:{maxHeight:a.isMarkdown?"8rem":void 0},ref:i})});function dl({iconSize:e,data:r}){return y.jsxs(NJ,{style:Iq(e)?{"--likec4-icon-size":`${e}px`}:void 0,children:[y.jsx(BJ,{data:r}),y.jsxs(IJ,{children:[y.jsx(OJ,{data:r}),y.jsx(LJ,{data:r}),y.jsx(FJ,{data:r})]})]})}dl.Root=NJ,dl.Icon=BJ,dl.Content=IJ,dl.Title=OJ,dl.Technology=LJ,dl.Description=FJ;const tUe=fe({position:"absolute",top:"0.5",right:"0.5",_shapeBrowser:{right:"[5px]"},_shapeCylinder:{top:"[14px]"},_shapeStorage:{top:"[14px]"},_shapeQueue:{top:"[1px]",right:"3"},_smallZoom:{display:"none"},_print:{display:"none"}});function oR({selected:e=!1,data:{hovered:r=!1},icon:n,onClick:o}){return y.jsx(hr,{className:Ge(tUe,"details-button"),children:y.jsx(lr,{className:Ge("nodrag nopan",a2({variant:"transparent"})),component:wa,initial:!1,style:{originX:.45,originY:.55},animate:r||e?{scale:1.2,opacity:.8}:{scale:1,opacity:.5},whileHover:{scale:1.4,opacity:1},whileTap:{scale:1.15},onClick:o,onDoubleClick:nn,children:n??y.jsx(nR,{stroke:1.8,style:{width:"75%"}})})})}const rUe=e=>{const r=Mt();return y.jsx(oR,{...e,onClick:n=>{n.stopPropagation(),r.openElementDetails(e.data.fqn)}})};function nUe(e){const{enableElementTags:r}=sr();return y.jsxs(ug,{layoutId:e.id,nodeProps:e,children:[y.jsx(pg,{...e}),y.jsx(dl,{...e}),r&&y.jsx(t0,{...e}),y.jsx(rUe,{...e}),y.jsx(KHe,{...e}),y.jsx(iUe,{...e})]},e.id)}function oUe(e){const r=Mt();return y.jsxs(c0,{layoutId:e.id,nodeProps:e,children:[y.jsx(d0,{...e}),y.jsx(AJ,{...e,onClick:n=>{n.stopPropagation(),r.openElementDetails(e.data.fqn)}}),y.jsx(aUe,{...e})]},e.id)}const iUe=({data:{ports:e,height:r}})=>y.jsxs(y.Fragment,{children:[e.in.map((n,o)=>y.jsx(Oo,{id:n,type:"target",position:Ue.Left,style:{visibility:"hidden",top:`${15+(o+1)*((r-30)/(e.in.length+1))}px`}},n)),e.out.map((n,o)=>y.jsx(Oo,{id:n,type:"source",position:Ue.Right,style:{visibility:"hidden",top:`${15+(o+1)*((r-30)/(e.out.length+1))}px`}},n))]}),aUe=({data:e})=>y.jsxs(y.Fragment,{children:[e.ports.in.map((r,n)=>y.jsx(Oo,{id:r,type:"target",position:Ue.Left,style:{visibility:"hidden",top:`${20*(n+1)}px`}},r)),e.ports.out.map((r,n)=>y.jsx(Oo,{id:r,type:"source",position:Ue.Right,style:{visibility:"hidden",top:`${20*(n+1)}px`}},r))]}),lUe=[["path",{d:"M15 6l-6 6l6 6",key:"svg-0"}]],VJ=wt("outline","chevron-left","ChevronLeft",lUe),sUe={element:nUe,compound:oUe,empty:OHe},cUe={relationship:BHe};function qJ({actorRef:e}){const r=S.useRef(null);return r.current==null&&(r.current={initialNodes:[],initialEdges:[]}),y.jsx(xQ.Provider,{value:e,children:y.jsx(lw,{...r.current,children:y.jsx(lg,{id:e.sessionId,inherit:!1,children:y.jsx(Cn,{children:y.jsx(pUe,{})})})})})}const dUe=e=>({isActive:e.hasTag("active"),nodes:e.context.xynodes,edges:e.context.xyedges}),uUe=(e,r)=>e.isActive===r.isActive&&Ir(e.nodes,r.nodes)&&Ir(e.edges,r.edges),pUe=S.memo(()=>{const e=n0(),{isActive:r,nodes:n,edges:o}=v2(dUe,uUe);return y.jsx(s$,{id:e.rootElementId,nodes:n,edges:o,className:Ge(r?"initialized":"not-initialized","relationships-browser"),nodeTypes:sUe,edgeTypes:cUe,fitView:!1,onNodeClick:at((i,a)=>{i.stopPropagation(),e.send({type:"xyflow.nodeClick",node:a})}),onEdgeClick:at((i,a)=>{i.stopPropagation(),e.send({type:"xyflow.edgeClick",edge:a})}),onPaneClick:at(i=>{i.stopPropagation(),e.send({type:"xyflow.paneClick"})}),onDoubleClick:at(i=>{e.send({type:"xyflow.paneDblClick"})}),onViewportResize:at(()=>{e.send({type:"xyflow.resized"})}),onNodesChange:at(i=>{e.send({type:"xyflow.applyNodeChanges",changes:i})}),onEdgesChange:at(i=>{e.send({type:"xyflow.applyEdgeChanges",changes:i})}),onEdgeMouseEnter:at((i,a)=>{a.data.hovered||e.send({type:"xyflow.edgeMouseEnter",edge:a})}),onEdgeMouseLeave:at((i,a)=>{a.data.hovered&&e.send({type:"xyflow.edgeMouseLeave",edge:a})}),onSelectionChange:at(i=>{e.send({type:"xyflow.selectionChange",...i})}),nodesDraggable:!1,nodesSelectable:!0,pannable:!0,zoomable:!0,children:y.jsx(fUe,{})})}),hUe=e=>({subjectId:e.context.subject,viewId:e.context.viewId,scope:e.context.scope,closeable:e.context.closeable}),fUe=S.memo(()=>{const e=n0(),{subjectId:r,viewId:n,scope:o,closeable:i}=v2(hUe),a=vr(),l=pf();S.useEffect(()=>{l.viewportInitialized&&e.send({type:"xyflow.init",instance:l,store:a})},[a,l.viewportInitialized,e]);const s=bHe(r,n,o),[c,d,{history:u,current:p}]=RH(r);S.useEffect(()=>{c!==r&&d.set(r)},[r]),S.useEffect(()=>{c!==r&&e.navigateTo(c)},[c,e]),_L(()=>{e.updateView(s)},[s,e]);const f=p>0,m=p+1d.back(),onStepForward:()=>d.forward()}),i&&y.jsx(sd,{position:"top-right",children:y.jsx(lr,{variant:"default",color:"gray",onClick:v=>{v.stopPropagation(),e.close()},children:y.jsx(fp,{})})})]})}),gUe=({hasStepBack:e,hasStepForward:r,onStepBack:n,onStepForward:o})=>y.jsx(sd,{position:"top-left",children:y.jsxs(en,{gap:4,wrap:"nowrap",children:[y.jsxs(Cn,{mode:"popLayout",children:[e&&y.jsx(ga.div,{layout:!0,initial:{opacity:.05,transform:"translateX(-5px)"},animate:{opacity:1,transform:"translateX(0)"},exit:{opacity:.05,transform:"translateX(-10px)"},children:y.jsx(lr,{variant:"default",color:"gray",onClick:i=>{i.stopPropagation(),n()},children:y.jsx(VJ,{})})},"back"),r&&y.jsx(ga.div,{layout:!0,initial:{opacity:.05,transform:"translateX(5px)"},animate:{opacity:1,transform:"translateX(0)"},exit:{opacity:0,transform:"translateX(5px)"},children:y.jsx(lr,{variant:"default",color:"gray",onClick:i=>{i.stopPropagation(),o()},children:y.jsx(Dd,{})})},"forward")]}),y.jsx($He,{})]})}),mUe=fe({display:"inline-block",fontSize:"sm",fontWeight:500,whiteSpace:"nowrap",padding:"[3px 6px]",borderRadius:3,background:"var(--likec4-palette-fill)/75",lineHeight:1.2,color:"var(--likec4-palette-hiContrast)"}),yUe=fe({_light:{background:"mantine.colors.gray[1]","&[data-missing":{}},"&[data-missing]":{color:"mantine.colors.orange[4]",background:"mantine.colors.orange[8]/15",borderColor:"mantine.colors.orange[5]/20",_light:{color:"mantine.colors.orange[8]"}}}),vUe=fe({flex:"1 1 100%",position:"relative",width:"100%",height:"100%",background:"mantine.colors.body",border:"1px solid {colors.mantine.colors.defaultBorder}",borderRadius:"sm",_light:{borderColor:"mantine.colors.gray[3]",background:"mantine.colors.gray[1]"}});fe({_before:{content:'"scope:"',position:"absolute",top:"0",left:"2",fontSize:"xxs",fontWeight:500,lineHeight:"1",color:"mantine.colors.dimmed",opacity:.85,transform:"translateY(-100%) translateY(-2px)"},_light:{"& .mantine-SegmentedControl-root":{background:"mantine.colors.gray[3]"}}}),fe({display:"inline-block",fontSize:"xl",fontWeight:600,padding:"[1px 5px]",minWidth:24,textAlign:"center",borderRadius:"sm",background:"mantine.colors.dark[7]",color:"mantine.colors.defaultColor","&[data-zero]":{color:"mantine.colors.dimmed"},"&[data-missing]":{color:"mantine.colors.orange[4]",background:"mantine.colors.orange[8]/20"}});const bUe=[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]],hg=wt("outline","arrow-right","ArrowRight",bUe),xUe=[["path",{d:"M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6",key:"svg-0"}],["path",{d:"M11 13l9 -9",key:"svg-1"}],["path",{d:"M15 4h5v5",key:"svg-2"}]],HJ=wt("outline","external-link","ExternalLink",xUe),wUe=_n.withProps({color:"dark",fz:"xs",openDelay:600,closeDelay:120,label:"",children:null,offset:8,withinPortal:!1});function kUe({node:e,element:r}){const n=Mt(),o=lVe(),i=pn(o,S.useCallback(u=>u.children[`${o.id}-relationships`],[o.id])),a=[...r.incoming()].map(u=>u.id),l=[...r.outgoing()].map(u=>u.id),s=e?yw([...e.incoming()].flatMap(u=>u.$edge.relations)):[],c=e?yw([...e.outgoing()].flatMap(u=>u.$edge.relations)):[],d=[...a,...l].filter(u=>!s.includes(u)&&!c.includes(u)).length;return y.jsxs(Lo,{gap:"xs",pos:"relative",w:"100%",h:"100%",children:[a.length+l.length>0&&y.jsxs(en,{gap:"xs",wrap:"nowrap",align:"center",children:[y.jsx(Se,{children:y.jsxs(en,{gap:8,mb:4,wrap:"nowrap",children:[y.jsx(UJ,{title:"incoming",total:a.length,included:s.length}),y.jsx(Ti,{size:"sm",variant:"transparent",c:"dimmed",children:y.jsx(hg,{style:{width:16}})}),y.jsx(it,{className:mUe,children:Jm(r.id)}),y.jsx(Ti,{size:"sm",variant:"transparent",c:"dimmed",children:y.jsx(hg,{style:{width:16}})}),y.jsx(UJ,{title:"outgoing",total:l.length,included:c.length})]})}),d>0&&y.jsx(wUe,{label:"Current view does not include some relationships",children:y.jsxs(en,{mt:"xs",gap:6,c:"orange",style:{cursor:"pointer"},children:[y.jsx(r0,{style:{width:14}}),y.jsxs(it,{fz:"sm",children:[d," relationship",d>1?"s are":" is"," hidden"]})]})})]}),y.jsx(Se,{className:vUe,children:i&&y.jsxs(y.Fragment,{children:[y.jsx(qJ,{actorRef:i}),y.jsx(Se,{pos:"absolute",top:12,right:12,children:y.jsx(lr,{size:"md",variant:"default",radius:"sm",onClick:u=>{u.stopPropagation();const{subject:p,scope:f,viewId:m}=i.getSnapshot().context;n.overlays().send({type:"open.relationshipsBrowser",subject:p,scope:f,viewId:m})},children:y.jsx(HJ,{stroke:1.6,style:{width:"70%"}})})})]})})]})}function UJ({title:e,total:r,included:n}){return y.jsx(Af,{withBorder:!0,shadow:"none",className:yUe,px:"md",py:"xs",radius:"md",mod:{zero:r===0,missing:r!==n},children:y.jsxs(Lo,{gap:4,align:"flex-end",children:[y.jsx(it,{component:"div",c:r!==n?"orange":"dimmed",tt:"uppercase",fw:600,fz:10,lh:1,children:e}),y.jsx(it,{fw:600,fz:"xl",component:"div",lh:1,children:r!==n?y.jsxs(y.Fragment,{children:[n," / ",r]}):y.jsx(y.Fragment,{children:r})})]})})}const _Ue=fe({marginTop:"sm",marginBottom:"sm"}),SUe=fe({display:"inline-flex",transition:"fast",border:"1px dashed",borderColor:"mantine.colors.defaultBorder",borderRadius:"sm",px:"md",py:"xs",alignItems:"center",cursor:"pointer",color:"mantine.colors.gray[7]",_dark:{color:"mantine.colors.dark[1]"},"& > *":{transition:"fast"},_hover:{transitionTimingFunction:"out",borderStyle:"solid",color:"mantine.colors.defaultColor",background:"mantine.colors.defaultHover","& > *":{transitionTimingFunction:"out",transform:"translateX(1px)"}}}),iR=({element:e})=>y.jsx(Se,{className:SUe,children:y.jsx(it,{component:"div",fz:"sm",fw:"500",children:e.title})}),EUe=()=>{};function CUe({element:e}){const r=_y({multiple:!1});r.setHoveredNode=EUe;const n=S.useMemo(()=>{let o=1;const i=l=>({label:l,value:`msg${o++}`,type:"message",children:[]}),a={label:y.jsx(iR,{type:"current",element:e}),value:e.id,element:e,type:"current",children:[...e.children()].map(l=>({label:y.jsx(iR,{type:"descedant",element:l}),value:l.id,element:l,type:"descedant",children:[]}))};return a.children.length===0&&a.children.push(i(y.jsx(_3,{radius:"sm",children:"no nested"}))),[[...e.ancestors()].reduce((l,s)=>({label:y.jsx(iR,{type:"ancestor",element:s}),value:s.id,element:s,type:"ancestor",children:[l]}),a)]},[e]);return S.useEffect(()=>{r.expandAllNodes()},[n]),y.jsxs(y.Fragment,{children:[y.jsxs(f3,{variant:"light",color:"orange",title:"In development",icon:y.jsx(r0,{}),children:["We need your feedback. Share your thoughts and ideas -"," ",y.jsx(gS,{fz:"sm",fw:500,underline:"hover",c:"orange",href:"https://github.com/likec4/likec4/discussions/",target:"_blank",children:"GitHub discussions"})]}),y.jsx(Ff,{levelOffset:"xl",allowRangeSelection:!1,expandOnClick:!1,expandOnSpace:!1,classNames:{label:_Ue},data:n,tree:r})]})}const $Ue=[["path",{d:"M12 4l-8 4l8 4l8 -4l-8 -4",key:"svg-0"}],["path",{d:"M4 12l8 4l8 -4",key:"svg-1"}],["path",{d:"M4 16l8 4l8 -4",key:"svg-2"}]],aR=wt("outline","stack-2","Stack2",$Ue),WJ=sp.withProps({mb:8,labelPosition:"left",variant:"dashed"}),GJ=_n.withProps({color:"dark",fz:"xs",openDelay:400,closeDelay:150,label:"",children:null,offset:4}),YJ=it.withProps({component:"div",fz:11,fw:500,c:"dimmed",lh:1}),u0=it.withProps({component:"div",fz:"xs",c:"dimmed",className:iqe}),fg=24,RUe=["Properties","Relationships","Views","Structure","Deployments"];function zUe({viewId:e,fromNode:r,rectFromNode:n,fqn:o,onClose:i}){const[a,l]=S.useState(!1),s=fze(),c=s.width||window.innerWidth||1200,d=s.height||window.innerHeight||800,[u,p]=cze({key:"likec4:element-details:active-tab",defaultValue:"Properties"}),f=Mt(),m=WVe(),v=r?m.findNode(r):m.findNodeWithElement(o),w=m.$model.element(o),[x,k]=Jr([...w.views()],un(K=>K.$view),qq(K=>K._type==="element"&&K.viewOf===o));let C=v?.navigateTo?.$view??w.defaultView?.$view??null;C?.id===e&&(C=null);const _=fw(w.links),$=aVe(),R=(v?.$node.children?.length??0)>0,T=Math.min(700,c-fg*2),A=Math.min(650,d-fg*2),z=n?{x:n.x+(R?n.width-T/2:n.width/2),y:n.y+(R?0:n.height/2)}:{x:c/2,y:d/2},j=n?Math.min(n.width/T,n.height/A,.9):1,I=Math.round(ta(z.x-T/2,{min:fg,max:c-T-fg})),N=Math.round(ta(z.y-(R?0:60),{min:fg,max:d-A-fg})),L=ta((z.x-I)/T,{min:.1,max:.9}),H=ta((z.y-N)/A,{min:.1,max:.9}),P=jZ(T),V=jZ(A);$p(()=>{P.set(T),V.set(A)},[T,A]);const B=S.useCallback((K,O)=>{P.set(Math.max(P.get()+O.delta.x,320)),V.set(Math.max(V.get()+O.delta.y,300))},[]),F=S.useRef(null),q=Zh(i),G=h7(()=>{q.current()},[],50),U=v?.$node.notation??null,Y=bx({element:{id:o,title:w.title,icon:v?.icon??w.icon},className:ZVe});return wx(()=>{F.current?.open||F.current?.showModal()},20),wx(()=>{l(!0)},220),y.jsx(ga.dialog,{ref:F,className:Ge(GVe,ny.classNames.fullWidth),layout:!0,initial:{[p2]:"0px",[h2]:"5%"},animate:{[p2]:"3px",[h2]:"60%"},exit:{[p2]:"0px",[h2]:"0%",transition:{duration:.1}},onClick:K=>{K.stopPropagation(),K.target?.nodeName?.toUpperCase()==="DIALOG"&&F.current?.close()},onDoubleClick:nn,onPointerDown:nn,onClose:K=>{K.stopPropagation(),G()},children:y.jsx(ny,{forwardProps:!0,removeScrollBar:!1,children:y.jsxs(ga.div,{layout:!0,layoutRoot:!0,drag:!0,dragControls:$,dragElastic:0,dragMomentum:!1,dragListener:!1,"data-likec4-color":v?.color??w.color,className:YVe,initial:{top:N,left:I,width:T,height:A,opacity:0,originX:L,originY:H,scale:Math.max(j,.65)},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9,translateY:-10,transition:{duration:.1}},style:{width:P,height:V},children:[y.jsxs("div",{className:XVe,onPointerDown:K=>$.start(K),children:[y.jsxs(Or,{alignItems:"start",justify:"space-between",gap:"sm",mb:"sm",flexWrap:"nowrap",children:[y.jsxs(Or,{alignItems:"start",gap:"sm",style:{cursor:"default"},flexWrap:"nowrap",children:[Y,y.jsxs("div",{children:[y.jsx(it,{component:"div",className:KVe,children:w.title}),U&&y.jsx(it,{component:"div",c:"dimmed",fz:"sm",fw:500,lh:1.3,lineClamp:1,children:U})]})]}),y.jsx(lp,{size:"lg",onClick:K=>{K.stopPropagation(),G()}})]}),y.jsxs(Or,{alignItems:"baseline",gap:"sm",flexWrap:"nowrap",children:[y.jsxs("div",{children:[y.jsx(YJ,{children:"kind"}),y.jsx(ec,{radius:"sm",size:"sm",fw:600,color:"gray",style:{cursor:"pointer"},onClick:K=>{K.stopPropagation(),f.openSearch(`kind:${w.kind}`)},children:w.kind})]}),y.jsxs("div",{style:{flex:1},children:[y.jsx(YJ,{children:"tags"}),y.jsxs(Js,{gap:4,flex:1,mt:6,wrap:"wrap",children:[w.tags.map(K=>y.jsx(u2,{tag:K,cursor:"pointer",onClick:O=>{O.stopPropagation(),f.openSearch(`#${K}`)}},K)),w.tags.length===0&&y.jsx(ec,{radius:"sm",size:"sm",fw:600,color:"gray",children:"—"})]})]}),y.jsxs(s3,{style:{alignSelf:"flex-start"},children:[_&&y.jsx(lr,{component:"a",href:_.url,target:"_blank",size:"lg",variant:"default",radius:"sm",children:y.jsx(HJ,{stroke:1.6,style:{width:"65%"}})}),y.jsx(LMe,{feature:"Vscode",children:y.jsx(GJ,{label:"Open source",children:y.jsx(lr,{size:"lg",variant:"default",radius:"sm",onClick:K=>{K.stopPropagation(),f.openSource({element:w.id})},children:y.jsx(dg,{stroke:1.8,style:{width:"62%"}})})})}),C&&y.jsx(GJ,{label:"Open default view",children:y.jsx(lr,{size:"lg",variant:"default",radius:"sm",onClick:K=>{K.stopPropagation(),f.navigateTo(C.id,r??void 0)},children:y.jsx(ba,{style:{width:"70%"}})})})]})]})]}),y.jsx(pQ,{children:y.jsxs(up,{value:u,onChange:K=>p(K),variant:"none",classNames:{root:eqe,list:tqe,tab:rqe,panel:nqe},children:[y.jsx(ky,{children:RUe.map(K=>y.jsx(Lf,{value:K,children:K},K))}),y.jsx(rc,{value:"Properties",children:y.jsx(es,{scrollbars:"y",type:"scroll",offsetScrollbars:!0,children:y.jsxs(Se,{className:oqe,pt:"xs",children:[w.hasSummary&&y.jsxs(y.Fragment,{children:[y.jsx(u0,{children:"summary"}),y.jsx(zp,{value:w.summary})]}),y.jsxs(y.Fragment,{children:[y.jsx(u0,{children:"description"}),y.jsx(zp,{value:w.description,emptyText:"no description"})]}),w.technology&&y.jsx(TUe,{title:"technology",children:w.technology}),w.links.length>0&&y.jsxs(y.Fragment,{children:[y.jsx(u0,{children:"links"}),y.jsx(Or,{gap:"xs",flexWrap:"wrap",children:w.links.map((K,O)=>y.jsx(o$,{value:K},O))})]}),w.$element.metadata&&y.jsx(jUe,{value:w.$element.metadata})]})})}),y.jsx(rc,{value:"Relationships",children:y.jsx(gp,{overrides:{enableRelationshipBrowser:!1,enableNavigateTo:!1},children:a&&u==="Relationships"&&y.jsx(kUe,{element:w,node:v??null})})}),y.jsx(rc,{value:"Views",children:y.jsx(es,{scrollbars:"y",type:"auto",children:y.jsxs(Lo,{gap:"lg",children:[x.length>0&&y.jsxs(Se,{children:[y.jsx(WJ,{label:"views of the element (scoped)"}),y.jsx(Lo,{gap:"sm",children:x.map(K=>y.jsx(XJ,{view:K,onNavigateTo:O=>f.navigateTo(O,r??void 0)},K.id))})]}),k.length>0&&y.jsxs(Se,{children:[y.jsx(WJ,{label:"views including this element"}),y.jsx(Lo,{gap:"sm",children:k.map(K=>y.jsx(XJ,{view:K,onNavigateTo:O=>f.navigateTo(O,r??void 0)},K.id))})]})]})})}),y.jsx(rc,{value:"Structure",children:y.jsx(es,{scrollbars:"y",type:"auto",children:y.jsx(CUe,{element:w})})}),y.jsx(rc,{value:"Deployments",children:y.jsx(es,{scrollbars:"y",type:"auto",children:y.jsx(kqe,{elementFqn:w.id})})})]})}),y.jsx(ga.div,{className:aqe,drag:!0,dragElastic:0,dragMomentum:!1,onDrag:B,dragConstraints:{top:0,left:0,right:0,bottom:0}})]})})})}const XJ=({view:e,onNavigateTo:r})=>y.jsx(pr,{className:QVe,onClick:n=>r(e.id,n),children:y.jsxs(en,{gap:6,align:"start",wrap:"nowrap",children:[y.jsx(Ti,{size:"sm",variant:"transparent",children:e._type==="deployment"?y.jsx(aR,{stroke:1.8}):y.jsx(ba,{stroke:1.8})}),y.jsx(Se,{children:y.jsx(it,{component:"div",className:JVe,lineClamp:1,children:e.title||"untitled"})})]})});function TUe({title:e,emptyValue:r="undefined",children:n,style:o,...i}){return y.jsxs(y.Fragment,{children:[y.jsx(u0,{children:e}),y.jsx(it,{component:"div",...ty(n)&&{c:"dimmed"},fz:"md",style:{whiteSpace:"preserve-breaks",userSelect:"all",...o},...i,children:n||r})]})}function jUe({value:e}){const r=uw(e).sort(([n],[o])=>n.localeCompare(o));return y.jsx(pQ,{children:y.jsxs(y.Fragment,{children:[y.jsx(u0,{style:{justifySelf:"end",textAlign:"right"},children:"metadata"}),y.jsx(Se,{className:fe({display:"grid",gridTemplateColumns:"min-content 1fr",gridAutoRows:"min-content",gap:"[12px 16px]",alignItems:"baseline",justifyItems:"stretch"}),children:r.map(([n,o])=>y.jsx(dqe,{label:n,value:o},n))})]})})}const AUe=e=>({viewId:e.context.currentView.id,fromNode:e.context.initiatedFrom.node,rectFromNode:e.context.initiatedFrom.clientRect,fqn:e.context.subject});function DUe({actorRef:e,onClose:r}){const n=pn(e,AUe,Ir);return y.jsx(FC.Provider,{value:e,children:y.jsx(zUe,{onClose:r,...n})})}const $2="--_blur",R2="--_opacity",PUe="--_level",p0=S.forwardRef(({onClose:e,className:r,classes:n,overlayLevel:o=0,children:i,fullscreen:a=!1,withBackdrop:l=!0,backdrop:s,openDelay:c=130,...d},u)=>{const[p,f]=S.useState(c===0),m=bH(p),v=S.useRef(null),w=S.useRef(!1),x=AZ()!==!0,k=S.useRef(e);k.current=e;const C=h7(()=>{w.current||(w.current=!0,k.current())},[],50);S.useLayoutEffect(()=>{v.current?.open||v.current?.showModal()},[]),wx(()=>{f(!0)},c>0?c:void 0);const _=xVe({fullscreen:a,withBackdrop:l});let $=o>0?"50%":"60%";return s?.opacity!==void 0&&($=`${s.opacity*100}%`),y.jsx(ga.dialog,{ref:$r(v,m,u),className:Ge(n?.dialog,r,_,a&&ny.classNames.fullWidth),layout:!0,style:{[PUe]:o},...x?{initial:{[$2]:"0px",[R2]:"0%",scale:.85,opacity:0},animate:{[$2]:o>0?"4px":"8px",[R2]:$,scale:1,opacity:1,translateY:0},exit:{opacity:0,scale:.98,translateY:-20,[$2]:"0px",[R2]:"0%"}}:{initial:{[$2]:"8px",[R2]:$}},onClick:R=>{if(R.stopPropagation(),R.target?.nodeName?.toUpperCase()==="DIALOG"){v.current?.close();return}},onCancel:R=>{R.preventDefault(),R.stopPropagation(),C()},onDoubleClick:nn,onPointerDown:nn,onClose:R=>{R.stopPropagation(),C()},...d,children:y.jsx(ny,{forwardProps:!0,children:y.jsx("div",{className:Ge(n?.body,"likec4-overlay-body"),children:p&&y.jsx(y.Fragment,{children:i})})})})});p0.displayName="Overlay";const z2=(e,r)=>e.size>2&&r.size!==e.size?new Set(Jc([...hx(e).flatten(),...r])):e.size>1?new Set(Jc([...e])):e;function MUe(e,r){const n=new Set,o=new Set,i=new Set,a={sources:new Set,targets:new Set},l=(s,c)=>{c==="source"?(n.add(s),a.sources.add(s)):(i.add(s),a.targets.add(s))};for(const s of e){const c=r.findEdge(s),d=c?[...c.relationships("model")]:[];if(!c||!xn(d,1)||!c.source.hasElement()||!c.target.hasElement())continue;const u=c.source.element,p=c.target.element;l(u,"source"),l(p,"target");for(const f of d){if(o.add(f),f.source!==u){l(f.source,"source");for(const m of f.source.ancestors()){if(m===u)break;n.add(m)}}if(f.target!==p){l(f.target,"target");for(const m of f.target.ancestors()){if(m===p)break;i.add(m)}}}}return{sources:z2(n,a.sources),targets:z2(i,a.targets),relationships:o}}function NUe({source:e,target:r}){const n=new Set,o=new Set,i=new Set,a={sources:new Set,targets:new Set},l=(c,d)=>{d==="source"?(n.add(c),a.sources.add(c)):(i.add(c),a.targets.add(c))};e&&l(e,"source"),r&&l(r,"target");const[s]=V5e.findConnection(e,r,"directed");if(!s)return{sources:n,targets:i,relationships:o};for(const c of s.relations){const d=c.source,u=c.target;if(l(d,"source"),l(u,"target"),o.add(c),e!==d){He(Yn(e,d),`${e.id} is not an ancestor of ${d.id}`);for(const p of d.ancestors()){if(p===e)break;n.add(p)}}if(r!==u){He(Yn(r,u),`${r.id} is not an ancestor of ${u.id}`);for(const p of u.ancestors()){if(p===r)break;i.add(p)}}}return{sources:z2(n,a.sources),targets:z2(i,a.targets),relationships:o}}const KJ=S.createContext(null);function lR(){return gt(S.useContext(KJ),"No RelationshipDetailsActorContext")}function ZJ(e,r=Ir){const n=at(e),o=lR();return pn(o,n,r)}function sR(){const e=lR();return S.useMemo(()=>({actor:e,get rootElementId(){return`relationship-details-${e.sessionId.replaceAll(":","_")}`},getState:()=>e.getSnapshot().context,send:e.send,navigateTo:(...r)=>{r.length===1?e.send({type:"navigate.to",params:{edgeId:r[0]}}):e.send({type:"navigate.to",params:{source:r[0],target:r[1]}})},fitDiagram:()=>{e.send({type:"fitDiagram"})},close:()=>{e._parent?e._parent?.send({type:"close",actorId:e.id}):e.send({type:"close"})}}),[e])}const ul={dagre:{ranksep:60,nodesep:35,edgesep:25},edgeLabel:{width:220,height:14},nodeWidth:330,nodeHeight:180,compound:{labelHeight:2,paddingTop:50,paddingBottom:32}};function BUe(){const e=new x2.graphlib.Graph({directed:!0,compound:!0,multigraph:!0});return e.setGraph({...ul.dagre,rankdir:"LR"}),e.setDefaultEdgeLabel(()=>({...ul.edgeLabel})),e.setDefaultNodeLabel(()=>({})),e}const cR="-port";function QJ(e,r,n){const o=new Ln(a=>({id:`${e}-${a}`,portId:`${e}-${a}`})),i=hx(r);for(const a of i.sorted){const l=i.children(a).length>0,s=a.id,c=`${e}-${s}`,d=l?`${c}${cR}`:c;o.set(s,{id:c,portId:d}),n.setNode(c,{column:e,element:a,isCompound:l,portId:d,inPorts:[],outPorts:[],width:ul.nodeWidth,height:ul.nodeHeight}),l&&(n.setNode(d,{element:a,portId:d,isCompound:l,inPorts:[],outPorts:[],width:ul.nodeWidth-ul.dagre.ranksep,height:ul.compound.labelHeight}),n.setParent(d,c));const u=i.parent(a);u&&n.setParent(c,`${e}-${u.id}`)}return{...i,byId:a=>{const l=i.byId(a),s=o.get(l.id);return{element:l,graph:s}},graphNodes:o}}function IUe(e){return x2.layout(e,{}),r=>{const n=e.node(r),{x:o,y:i,width:a,height:l}=n;return{position:{x:o-Math.round(a/2),y:i-Math.round(l/2)},width:a,height:l}}}function OUe(e,r){const n=BUe(),o=QJ("sources",e.sources,n),i=QJ("targets",e.targets,n),a=Array.from(e.relationships).map(k=>{const C=o.byId(k.source.id).graph,_=i.byId(k.target.id).graph,$=k.id;return n.node(C.id).outPorts.push(_.id),n.node(_.id).inPorts.push(C.id),n.setEdge(C.portId,_.portId,{...ul.edgeLabel},$),{name:$,source:C.id,sourceHandle:C.id+"_out"+(n.node(C.id).outPorts.length-1),target:_.id,targetHandle:_.id+"_in"+(n.node(_.id).inPorts.length-1),relationship:k}}),l=[...o.graphNodes.values(),...i.graphNodes.values()];for(const{id:k}of l){const C=n.node(k);if(C.isCompound)continue;const _=Math.max(n.inEdges(k)?.length??0,n.outEdges(k)?.length??0);_>3&&(C.height=C.height+(_-4)*14)}const s=n.edgeCount();if(s>5)for(const k of n.edges())n.setEdge(k,{...ul.edgeLabel,width:s>10?800:400});const c=IUe(n),d=Jr(l,ep(k=>k.id===k.portId),hw(k=>[k.id,c(k.id)]));function u(k){return d[k]??=Jr(n.children(k)??[],ep(C=>!C.endsWith(cR)),un(C=>u(C)),Wq(C=>{He(C.length>0,`Node ${k} has no nested nodes`)}),gw((C,_)=>({minY:Math.min(C.minY,_.position.y),maxY:Math.max(C.maxY,_.position.y+_.height)}),{minY:1/0,maxY:-1/0}),({minY:C,maxY:_})=>{const{position:{x:$},width:R}=c(k);return C=C-ul.compound.paddingTop,_=_+ul.compound.paddingBottom,{position:{x:$,y:C},width:R,height:_-C}})}function p(k){const C=n.parent(k);return C?p(C)+1:0}function f(k){const C=n.children(k)??[];return C.length===0?0:1+Math.max(...C.map(f))}const m=(k,C,_)=>Jr(_,un(($,R)=>({port:k+"_"+C+R,topY:u($).position.y})),mw(rp("topY")),un(rp("port")));let v=0,w=0;const x=l.map(({id:k})=>{const{element:C,inPorts:_,outPorts:$,column:R}=n.node(k);let{position:T,width:A,height:z}=u(k);const j=n.parent(k),I=(n.children(k)??[]).filter(V=>!V.endsWith(cR));v=Math.min(v,T.x),w=Math.min(w,T.y);const N=r?E1(C.scopedViews(),V=>V.id!==r.id)?.id??null:null,L=r?.findNodeWithElement(C.id),H=r&&!L?E1(C.ancestors(),V=>!!r.findNodeWithElement(V.id))?.id:null,P=L??(H&&r?.findNodeWithElement(H));return _1({id:k,parent:j??null,x:T.x,y:T.y,title:C.title,description:Fs(C.$element)??null,technology:C.technology,tags:[...C.tags],links:null,color:P?.color??C.color,shape:L?.shape??C.shape,icon:L?.icon??C.icon??"none",modelRef:C.id,kind:C.kind,level:p(k),labelBBox:{x:T.x,y:T.y,width:A,height:z},style:ud({...(L??P)?.style,...C.$element.style},["shape","color","icon"]),navigateTo:N,...I.length>0&&{depth:f(k)},children:I,width:A,height:z,column:R,ports:{in:m(k,"in",_),out:m(k,"out",$)}})});return{bounds:{x:Math.min(v,0),y:Math.min(w,0),width:n.graph().width??100,height:n.graph().height??100},nodes:x,edges:n.edges().reduce((k,C)=>{const _=n.edge(C),$=C.name;if(!$)return k;const{name:R,source:T,target:A,relationship:z,sourceHandle:j,targetHandle:I}=Q1(a,V=>V.name===$),N=z.title??"untitled",L=z.navigateTo?.id??null,H=Fs(z.$relationship)??null,P=z.technology??null;return k.push({id:R,source:T,sourceHandle:j,target:A,targetHandle:I,label:N,color:z.color,description:H,...L&&{navigateTo:L},...P&&{technology:P},points:_.points.map(V=>[V.x,V.y]),line:z.line,relationId:z.id,parent:null}),k},[])}}const dR=fe.raw({display:"inline-flex",alignItems:"center",padding:"[6px 2px 0 2px]","& .mantine-Text-root":{color:"mantine.colors.text/90",fontSize:"xs",fontWeight:500,lineHeight:"1.2"}}),JJ=fe({paddingLeft:"1",gridColumn:1},dR),LUe=fe({gridColumn:2},dR),eee=fe({gridColumn:3,paddingRight:"1"},dR),tee="likec4-edge-label",FUe=Ge(tee,fe({display:"grid",gridColumnStart:1,gridColumnEnd:4,borderBottom:"1px solid",borderBottomColor:"mantine.colors.defaultBorder",marginBottom:"0",padding:"[0 4px 5px 4px]",width:"100%","& .mantine-Text-root":{fontSize:"xxs",fontWeight:400,lineHeight:"xs",color:"mantine.colors.dimmed"}})),VUe=fe({display:"contents",[`&:last-child .${tee}`]:{borderBottom:"none",marginBottom:"0"},"& > *":{transition:"all 0.15s ease-in"},"&:is(:hover, [data-selected=true]) > *":{transition:"all 0.15s ease-out",cursor:"pointer",backgroundColor:"mantine.colors.defaultHover"}}),qUe=fe({display:"grid",gridTemplateColumns:"1fr 30px 1fr",gridAutoRows:"min-content max-content",gap:"0",alignItems:"stretch"});fe({display:"grid",gridTemplateColumns:"min-content 1fr",gridAutoRows:"min-content max-content",gap:"[10px 12px]",alignItems:"baseline",justifyItems:"start"});const HUe=fe({maxHeight:["70vh","calc(100cqh - 70px)"]}),UUe=({edge:e,view:r})=>{const n=sR(),o=S.useRef(null),i=r.nodes.find(s=>s.id===e.source),a=r.nodes.find(s=>s.id===e.target),l=r.edges.flatMap(s=>{const c=r.nodes.find(u=>u.id===s.source),d=r.nodes.find(u=>u.id===s.target);return c&&d?{id:s.id,source:c,target:d,label:s.label}:[]});return!i||!a||l.length===0?null:y.jsxs(br,{position:"bottom-start",shadow:"md",keepMounted:!0,withinPortal:!1,closeOnClickOutside:!0,clickOutsideEvents:["pointerdown","mousedown","click"],onOpen:()=>{setTimeout(()=>{o.current?.querySelector(`[data-edge-id="${e.id}"]`)?.scrollIntoView({behavior:"instant",block:"nearest"})},100)},children:[y.jsx(kd,{children:y.jsxs(Vn,{size:"xs",variant:"default",fw:"500",style:{padding:"0.25rem 0.75rem"},rightSection:y.jsx(tR,{size:16}),children:[y.jsx(Se,{className:JJ,maw:160,p:0,mod:{"likec4-color":i.color},children:y.jsx(it,{component:"span",truncate:!0,children:i.title})}),y.jsx(Ti,{color:"dark",variant:"transparent",size:"xs",children:y.jsx(hg,{style:{width:"80%"}})}),y.jsx(Se,{className:eee,maw:160,p:0,mod:{"likec4-color":a.color},children:y.jsx(it,{component:"span",truncate:!0,children:a.title})})]})}),y.jsx(Qs,{p:0,miw:250,maw:400,children:y.jsx(oi,{className:HUe,scrollbars:"y",type:"never",viewportRef:o,children:y.jsx(Se,{className:qUe,p:"xs",maw:400,children:l.map(s=>y.jsxs("div",{className:VUe,"data-selected":s.id===e.id,onClick:c=>{c.stopPropagation(),n.navigateTo(s.id)},children:[y.jsx(Se,{className:JJ,mod:{"edge-id":s.id,"likec4-color":s.source.color},children:y.jsx(it,{component:"span",truncate:!0,children:s.source.title})}),y.jsx(Se,{className:LUe,children:y.jsx(Ti,{color:"dark",variant:"transparent",size:"xs",children:y.jsx(hg,{style:{width:"80%"}})})}),y.jsx(Se,{className:eee,mod:{"likec4-color":s.target.color},children:y.jsx(it,{component:"span",truncate:!0,children:s.target.title})}),y.jsx(Se,{className:FUe,children:y.jsx(it,{component:"span",truncate:!0,children:s.label||"untitled"})})]},s.id))})})})]})},WUe=rR(e=>{const{enableNavigateTo:r}=sr(),{data:{navigateTo:n}}=e,[o,i,a]=Kx(e),l=Mt();return y.jsxs(a0,{...e,children:[y.jsx(l0,{edgeProps:e,svgPath:o}),y.jsx(S2,{edgeProps:e,labelPosition:{x:i,y:a,translate:"translate(-50%, 0)"},style:{maxWidth:Math.abs(e.targetX-e.sourceX-100)},children:y.jsx(i0,{edgeProps:e,children:r&&n&&y.jsx(_2,{...e,onClick:s=>{s.stopPropagation(),l.navigateTo(n)}})})})]})}),GUe=e=>{const{enableNavigateTo:r,enableVscode:n}=sr(),o=Mt(),i=E2(),a=[],{navigateTo:l,fqn:s}=e.data;return l&&r&&i!==l&&a.push({key:"navigate",icon:y.jsx(ba,{}),onClick:c=>{c.stopPropagation(),o.navigateTo(l)}}),s&&a.push({key:"relationships",icon:y.jsx(s0,{}),onClick:c=>{c.stopPropagation(),o.openRelationshipsBrowser(s)}}),s&&n&&a.push({key:"goToSource",icon:y.jsx(dg,{}),onClick:c=>{c.stopPropagation(),o.openSource({element:s})}}),y.jsx(C2,{buttons:a,...e})};function YUe(e,r){return e.id===r.id&&tt(e.type,r.type)&&tt(e.selected??!1,r.selected??!1)&&tt(e.dragging??!1,r.dragging??!1)&&tt(e.width??0,r.width??0)&&tt(e.height??0,r.height??0)&&tt(e.zIndex??0,r.zIndex??0)&&tt(e.data,r.data)}const ree=Symbol.for("isMemoized");function sc(e,r="Node"){if(e.hasOwnProperty(ree))return e;const n=S.memo(e,YUe);return n.displayName=r,Object.defineProperty(n,ree,{enumerable:!1,writable:!1,value:!0}),n}const nee=e=>{const r=Mt();return y.jsx(oR,{...e,onClick:n=>{n.stopPropagation(),r.openElementDetails(e.data.fqn)}})},XUe=sc(e=>{const{enableElementTags:r}=sr();return y.jsxs(ug,{nodeProps:e,children:[y.jsx(pg,{...e}),y.jsx(dl,{...e}),r&&y.jsx(t0,{...e}),y.jsx(nee,{...e}),y.jsx(GUe,{...e}),y.jsx(ZUe,{...e})]})}),KUe=sc(e=>y.jsxs(c0,{nodeProps:e,children:[y.jsx(nee,{...e}),y.jsx(d0,{...e}),y.jsx(QUe,{...e})]})),ZUe=({data:{ports:e,height:r}})=>y.jsxs(y.Fragment,{children:[e.in.map((n,o)=>y.jsx(Oo,{id:n,type:"target",position:Ue.Left,style:{visibility:"hidden",top:`${15+(o+1)*((r-30)/(e.in.length+1))}px`}},n)),e.out.map((n,o)=>y.jsx(Oo,{id:n,type:"source",position:Ue.Right,style:{visibility:"hidden",top:`${15+(o+1)*((r-30)/(e.out.length+1))}px`}},n))]}),QUe=({data:e})=>y.jsxs(y.Fragment,{children:[e.ports.in.map((r,n)=>y.jsx(Oo,{id:r,type:"target",position:Ue.Left,style:{visibility:"hidden",top:`${20*(n+1)}px`}},r)),e.ports.out.map((r,n)=>y.jsx(Oo,{id:r,type:"source",position:Ue.Right,style:{visibility:"hidden",top:`${20*(n+1)}px`}},r))]}),JUe={element:XUe,compound:KUe},eWe={relationship:WUe};function tWe({actorRef:e}){const r=S.useRef(null);return r.current==null&&(r.current={defaultNodes:[],defaultEdges:[]}),y.jsx(KJ.Provider,{value:e,children:y.jsx(lw,{...r.current,children:y.jsx(lg,{id:e.sessionId,inherit:!1,children:y.jsxs(Cn,{children:[y.jsx(iWe,{},"xyflow"),y.jsx(nWe,{},"sync")]})})})})}const rWe=e=>({...e.context.subject,viewId:e.context.viewId}),nWe=S.memo(()=>{const e=lR(),r=pn(e,rWe,tt),n=Fo(),o=n.findView(r.viewId)??null,i=S.useMemo(()=>{let s;if("edgeId"in r&&Zn(r.edgeId)){He(o,`view ${r.viewId} not found`);const c=gt(o.findEdge(r.edgeId),`edge ${r.edgeId} not found in ${r.viewId}`);s=MUe([c.id],o)}else if(r.source&&r.target)s=NUe({source:n.element(r.source),target:n.element(r.target)});else return null;return OUe(s,o)},[r,o,n]),a=vr(),l=pf();return S.useEffect(()=>{l.viewportInitialized&&e.send({type:"xyflow.init",instance:l,store:a})},[a,l.viewportInitialized,e]),S.useEffect(()=>{i!==null&&e.send({type:"update.layoutData",data:i})},[i,e]),null}),oWe=({context:e})=>({initialized:e.initialized.xydata&&e.initialized.xyflow,nodes:e.xynodes,edges:e.xyedges}),iWe=S.memo(()=>{const e=sR(),{initialized:r,nodes:n,edges:o}=ZJ(oWe,tt);return y.jsxs(s$,{id:e.rootElementId,nodes:n,edges:o,className:Ge(r?"initialized":"not-initialized","likec4-relationship-details"),nodeTypes:JUe,edgeTypes:eWe,onNodesChange:Qn(i=>{e.send({type:"xyflow.applyNodeChanges",changes:i})}),onEdgesChange:Qn(i=>{e.send({type:"xyflow.applyEdgeChanges",changes:i})}),fitViewPadding:.05,onNodeClick:Qn((i,a)=>{i.stopPropagation(),e.send({type:"xyflow.nodeClick",node:a})}),onEdgeClick:Qn((i,a)=>{i.stopPropagation(),e.send({type:"xyflow.edgeClick",edge:a})}),onPaneClick:Qn(()=>{e.send({type:"xyflow.paneClick"})}),onDoubleClick:Qn(()=>{e.send({type:"xyflow.paneDblClick"})}),onViewportResize:Qn(()=>{e.send({type:"xyflow.resized"})}),onEdgeMouseEnter:Qn((i,a)=>{a.data.hovered||e.send({type:"xyflow.edgeMouseEnter",edge:a})}),onEdgeMouseLeave:Qn((i,a)=>{a.data.hovered&&e.send({type:"xyflow.edgeMouseLeave",edge:a})}),onSelectionChange:Qn(i=>{e.send({type:"xyflow.selectionChange",...i})}),nodesDraggable:!1,nodesSelectable:!0,fitView:!1,pannable:!0,zoomable:!0,children:[y.jsx(lWe,{}),y.jsx(sd,{position:"top-right",children:y.jsx(lr,{variant:"default",color:"gray",onClick:i=>{i.stopPropagation(),e.close()},children:y.jsx(fp,{})})})]})}),aWe=({context:e})=>({subject:e.subject,viewId:e.viewId}),lWe=S.memo(()=>{const{subject:e,viewId:r}=ZJ(aWe,tt),n=Fo().findView(r);if(!n||!n.isDiagram())return null;const o=[...n.edges()];let i="edgeId"in e&&Zn(e.edgeId)?o.find(a=>a.id===e.edgeId):Q1(o,a=>a.source.element?.id===e.source&&a.target.element?.id===e.target)||Q1(o,a=>(a.source.element?.id===e.source||Yn(a.source.element?.id??"__",e.source??"__"))&&(a.target.element?.id===e.target||Yn(a.target.element?.id??"__",e.target??"__")));return i?y.jsx(sWe,{edge:i.$edge,view:n.$view}):null}),sWe=({edge:e,view:r})=>{const n=sR(),o=e.id,[i,a,{history:l,current:s}]=RH(e.id);S.useEffect(()=>{i!==o&&a.set(o)},[o]),S.useEffect(()=>{i!==o&&n.navigateTo(i)},[i]);const c=s>0,d=s+1{u.stopPropagation(),a.back()},children:y.jsx(VJ,{})})},"back"),d&&y.jsx(ga.div,{layout:!0,initial:{opacity:.05,transform:"translateX(5px)"},animate:{opacity:1,transform:"translateX(0)"},exit:{opacity:0,transform:"translateX(5px)"},children:y.jsx(lr,{variant:"default",color:"gray",onClick:u=>{u.stopPropagation(),a.forward()},children:y.jsx(Dd,{})})},"forward"),y.jsx(en,{gap:"xs",wrap:"nowrap",ml:"sm",children:y.jsx(UUe,{edge:e,view:r})})]})})})},cWe=e=>e.context.overlays.map(r=>{switch(r.type){case"relationshipsBrowser":return e.children[r.id]?{type:r.type,actorRef:e.children[r.id]}:null;case"relationshipDetails":return e.children[r.id]?{type:r.type,actorRef:e.children[r.id]}:null;case"elementDetails":return e.children[r.id]?{type:r.type,actorRef:e.children[r.id]}:null;default:Qo(r)}}).filter(Bq),dWe=(e,r)=>e.length===r.length&&e.every((n,o)=>n.actorRef===r[o].actorRef);function uWe({overlaysActorRef:e}){const r=Mt(),n=pn(e,cWe,dWe),o=AZ()??!1,i=n.some(s=>s.type==="elementDetails");S.useEffect(()=>{const s=r.getContext().xystore.getState().domNode?.querySelector(".react-flow__renderer");if(!s||o)return;const c=GOe(s,{opacity:i?.7:1,filter:i?"grayscale(1)":"grayscale(0)",transform:i?"perspective(400px) translateZ(-12px) translateY(3px)":"translateY(0)"},{duration:i?.35:.17});let d=null;return i||(d=setTimeout(()=>{s.style.transform="",s.style.filter="",d=null},450)),()=>{d&&clearTimeout(d),c.stop()}},[i]);const a=s=>{e.send({type:"close",actorId:s.id})},l=n.map((s,c)=>{switch(s.type){case"relationshipsBrowser":return y.jsx(p0,{overlayLevel:c,onClose:()=>a(s.actorRef),children:y.jsx(qJ,{actorRef:s.actorRef})},s.actorRef.sessionId);case"relationshipDetails":return y.jsx(p0,{overlayLevel:c,onClose:()=>a(s.actorRef),children:y.jsx(tWe,{actorRef:s.actorRef})},s.actorRef.sessionId);case"elementDetails":return y.jsx(DUe,{actorRef:s.actorRef,onClose:()=>a(s.actorRef)},s.actorRef.sessionId);default:Qo(s)}});return y.jsx(gp.Overlays,{children:y.jsx(QS,{onReset:()=>e.send({type:"close.all"}),children:y.jsx(lg,{children:y.jsx(Cn,{mode:"popLayout",children:l})})})})}const[pWe,Md]=na("SearchActorContext"),hWe=e=>e.context.searchValue;function fWe(){const e=Md(),r=pn(e,hWe),n=S.useCallback(o=>{e.send({type:"change.search",search:o})},[e]);return[r,n]}const gWe=e=>{const r=e.context.searchValue.trim().toLowerCase();return r.length>1?r:""};function uR(){const e=Md();return S.useDeferredValue(pn(e,gWe))}function mWe(){const e=Md();return S.useCallback(r=>{e.send({type:"change.search",search:r})},[e])}const yWe=e=>e.context.pickViewFor;function vWe(){const e=Md();return pn(e,yWe)}const pR=fe.raw({outline:"none",background:"mantine.colors.primary[8]",borderColor:"mantine.colors.primary[9]"}),T2=".mantine-Tree-node:focus > .mantine-Tree-label &",bWe=fe.raw({display:"flex",width:"100%",background:"mantine.colors.body",rounded:"sm",padding:"[12px 8px 12px 14px]",minHeight:"60px",gap:"2",border:"1px solid",borderColor:"mantine.colors.defaultBorder",_hover:{...pR,borderColor:"mantine.colors.primary[9]",background:"mantine.colors.primary[8]/60"},_focus:pR,[T2]:pR,_dark:{borderColor:"transparent",background:"mantine.colors.dark[6]/80"},_light:{background:"mantine.colors.white/80",_hover:{borderColor:"mantine.colors.primary[6]",backgroundColor:"mantine.colors.primary[5]"}}}),j2="likec4-focusable",A2={ref:"var(--likec4-icon-size, 24px)"},xWe=fe.raw({color:{base:"mantine.colors.dimmed",_light:"mantine.colors.gray[5]",_groupHover:"mantine.colors.primary[0]",_groupFocus:"mantine.colors.primary[0]"},[T2]:{color:"mantine.colors.primary[0]"},flex:`0 0 ${A2.ref}`,height:A2.ref,width:A2.ref,display:"flex",alignItems:"center",justifyContent:"center",alignSelf:"flex-start","--ti-size":A2.ref,"& svg, & img":{width:"100%",height:"auto",maxHeight:"100%",pointerEvents:"none"},"& img":{objectFit:"contain"},"&.likec4-shape-icon svg":{strokeWidth:1.5}}),wWe=fe.raw({fontSize:"16px",fontWeight:500,lineHeight:"1.1",":where([data-disabled]) &":{opacity:.4},color:{base:"mantine.colors.dark[1]",_light:"mantine.colors.gray[7]",_groupHover:{base:"mantine.colors.primary[1]",_light:"mantine.colors.white"},_groupFocus:{base:"mantine.colors.primary[1]",_light:"mantine.colors.white"}},[T2]:{color:{base:"mantine.colors.primary[1]",_light:"mantine.colors.white"}}}),oee=fe.raw({color:{base:"mantine.colors.dimmed",_groupHover:{base:"mantine.colors.primary[1]",_light:"mantine.colors.primary[0]"},_groupFocus:"mantine.colors.primary[0]"},[T2]:{color:"mantine.colors.primary[0]"}}),kWe=fe.raw(oee,{marginTop:"1",fontSize:"12px",lineHeight:"1.4",":where([data-disabled]) &":{opacity:.85}}),_We=fe({width:"100%",height:"100%",border:"2px dashed",borderColor:"mantine.colors.defaultBorder",rounded:"md",display:"flex",justifyContent:"center",alignItems:"center",fontSize:"md",color:"mantine.colors.dimmed",padding:"md",paddingBlock:"xl"}),iee=Ake({slots:["root","icon","title","description","descriptionColor"],className:"search-button",base:{root:bWe,icon:xWe,title:wWe,description:kWe,descriptionColor:oee}}),hR="@container likec4-tree (max-width: 450px)",SWe=fe({outline:"none",marginBottom:"2"}),EWe=fe(LG.raw({containerName:"likec4-tree"}),{containerType:"inline-size",height:"100%"}),CWe=fe({display:"flex",alignItems:"baseline",outline:"none !important",gap:"1"}),$We=fe({marginTop:"2"}),RWe=fe({color:"mantine.colors.dimmed"}),zWe=fe({[hR]:{flexDirection:"column-reverse",alignItems:"flex-start",gap:"0.5"}}),TWe=fe({fontSize:"10px",lineHeight:"1.3",display:"block",fontWeight:500,whiteSpace:"nowrap",padding:"[1px 5px]",borderRadius:"4px",background:"mantine.colors.dark[9]/30",_light:{background:"mantine.colors.gray[3]/20"}}),jWe=fe({"--likec4-icon-size":"24px",[hR]:{"--likec4-icon-size":"18px"}}),AWe=fe({flex:0,fontSize:"10px",fontWeight:500,whiteSpace:"nowrap",lineHeight:"1.1",[hR]:{display:"none"}});function ka(e){e.stopPropagation(),e.preventDefault()}function aee(e){const r=e.getBoundingClientRect();return r.y+Math.floor(r.height/2)}function h0(e){if(!e){console.error("moveFocusToSearchInput: from is null or undefined");return}const r=e.getRootNode();if(!ey(r.querySelector)){console.error("moveFocusToSearchInput: root.querySelector is not a function");return}let n=r.querySelector("[data-likec4-search-input]");if(n){const o=n.value.length;n.focus(),n.setSelectionRange(o,o)}}function D2(e){if(!e){console.error("focusToFirstFoundElement: from is null or undefined");return}const r=e.getRootNode();if(!ey(r.querySelector)){console.error("focusToFirstFoundElement: root.querySelector is not a function");return}r.querySelector(`[data-likec4-search] .${j2}`)?.focus()}function lee(e,r,n=`.${j2}`){if(!e)return console.error("queryAllFocusable: from is null or undefined"),[];const o=e.getRootNode();return ey(o.querySelectorAll)?[...o.querySelectorAll(`[data-likec4-search-${r}] ${n}`)]:(console.error("queryAllFocusable: root.querySelectorAll is not a function"),[])}function see(e){setTimeout(e,300)}const DWe="likec4-view-btn",PWe=Ge(fe({flexWrap:"nowrap",display:"flex","&[data-disabled] .mantine-ThemeIcon-root":{opacity:.45}}),DWe);fe({marginTop:"1",fontSize:"13px",lineHeight:"1.4",":where(.likec4-view-btn[data-disabled]) &":{opacity:.85}});const cee=()=>y.jsx(hr,{className:_We,children:"Nothing found"}),MWe=S.memo(()=>{const e=S.useRef(null);let r=[...Fo().views()],n=uR();return n&&(n.startsWith("kind:")?r=[]:r=r.filter(o=>n.startsWith("#")?o.tags.some(i=>i.toLocaleLowerCase().includes(n.slice(1))):`${o.id} ${o.title} ${o.description.text}`.toLocaleLowerCase().includes(n))),y.jsxs(Lo,{ref:e,renderRoot:o=>y.jsx(Rr,{layout:!0,...o}),gap:8,"data-likec4-search-views":!0,onKeyDown:o=>{if(o.key==="ArrowLeft"||o.key==="ArrowRight"){const i=o.target.getBoundingClientRect().y,a=lee(e.current,"elements",".likec4-element-button");let l=a.length>1?a.find((s,c,d)=>aee(s)>i||c===d.length-1):null;l??=hf(a),l&&(o.stopPropagation(),l.focus());return}},children:[r.length===0&&y.jsx(cee,{}),r.length>0&&y.jsx(o3,{children:y.jsx(pr,{"data-likec4-view":!0,tabIndex:-1,onFocus:o=>{o.stopPropagation(),h0(e.current)}})}),r.map((o,i)=>y.jsx(Rr,{layoutId:`@view${o.id}`,children:y.jsx(fR,{view:o,search:n,tabIndex:i===0?0:-1})},o.id))]})}),P2=iee();function fR({className:e,view:r,loop:n=!1,search:o,focusOnElement:i,...a}){const l=Md(),s=Mt(),c=r.id,d=E2(),u=c===d,p=()=>{l.send({type:"close"}),see(()=>{if(u&&i){s.focusOnElement(i);return}s.navigateTo(c,void 0,i)})};return y.jsxs(pr,{...a,className:Ge(P2.root,"group",j2,PWe,e),"data-likec4-view":r.id,...u&&!i&&{"data-disabled":!0},onClick:f=>{f.stopPropagation(),p()},onKeyDown:iy({siblingSelector:"[data-likec4-view]",parentSelector:"[data-likec4-search-views]",activateOnFocus:!1,loop:n,orientation:"vertical",onKeyDown:f=>{f.nativeEvent.code==="Space"&&(f.stopPropagation(),p())}}),children:[y.jsx(Ti,{variant:"transparent",className:P2.icon,children:r.isDeploymentView()?y.jsx(aR,{stroke:1.8}):y.jsx(ba,{stroke:1.8})}),y.jsxs(hr,{style:{flexGrow:1},children:[y.jsxs(en,{gap:"xs",wrap:"nowrap",align:"center",children:[y.jsx(tc,{component:"div",highlight:o,className:P2.title,children:r.title||"untitled"}),u&&y.jsx(ec,{size:"xs",fz:9,radius:"sm",children:"current"})]}),y.jsx(tc,{highlight:r.description.nonEmpty?o:"",component:"div",className:P2.description,lineClamp:1,children:r.description.text||"No description"})]})]})}const gg=iee(),NWe=S.memo(()=>{const e=Fo(),r=uR(),n=S.useMemo(()=>{const i=r.split(".");let a;tp(i)||i[0]==="kind:"?a=e.elements():a=Is(e.elements(),d=>r.startsWith("kind:")?d.kind.toLocaleLowerCase().startsWith(r.slice(5)):r.startsWith("#")?d.tags.some(u=>u.toLocaleLowerCase().includes(r.slice(1))):(d.title+" "+d.id+" "+d.summary.text).toLocaleLowerCase().includes(r));const l={},{all:s,roots:c}=Jr([...a],Jc,gw((d,u)=>{const p={label:u.title,value:u.id,element:u,searchTerms:i,children:[]};l[p.value]=p;const f=d.all.findLast(m=>Yn(m.value,p.value));return f?(f.children.push(p),f.children.length>1&&f.children.sort(o0)):d.roots.push(p),d.all.push(p),d},{all:[],roots:[]}));return{all:s,byid:l,roots:c.sort(o0)}},[e,r]),o=dee();return n.all.length===0?y.jsx(cee,{}):y.jsx(IWe,{data:n,handleClick:o})}),BWe=()=>{};function IWe({data:{all:e,byid:r,roots:n},handleClick:o}){const i=_y({multiple:!1});i.setHoveredNode=BWe,S.useEffect(()=>{i.collapseAllNodes();for(const l of e)l.children.length>0&&i.expand(l.value)},[e]);const a=at(l=>{const s=l.target,c=s.getAttribute("data-value"),d=!!c&&r[c];if(d){if(l.key==="ArrowUp"){c===n[0]?.value&&(ka(l),h0(s));return}if(l.key==="ArrowRight"){if(d.children.length>0&&i.expandedState[c]===!1)return;const u=(l.target.querySelector(".mantine-Tree-label")??s).getBoundingClientRect().y,p=lee(s,"views");let f=p.length>1?p.find((m,v,w)=>aee(m)>u||v===w.length-1):null;f??=hf(p),f&&(ka(l),f.focus());return}if(l.key===" "||l.key==="Enter"){ka(l),o(d.element);return}}});return y.jsx(Ff,{"data-likec4-search-elements":!0,allowRangeSelection:!1,clearSelectionOnOutsideClick:!0,selectOnClick:!1,tree:i,data:n,levelOffset:"lg",classNames:{root:EWe,node:Ge(j2,SWe),label:CWe,subtree:$We},onKeyDownCapture:a,renderNode:OWe})}function OWe({node:e,elementProps:r,hasChildren:n,expanded:o}){const{element:i,searchTerms:a}=e,l=Gke({element:{id:i.id,title:i.title,shape:i.shape,icon:i.icon},className:Ge(gg.icon,jWe)}),s=[...i.views()],c=dee(),d=`@tree.${e.value}`;return y.jsxs(Rr,{layoutId:d,...r,children:[y.jsx(lr,{variant:"transparent",size:16,tabIndex:-1,className:Ge(RWe),style:{visibility:n?"visible":"hidden"},children:y.jsx(Dd,{stroke:3.5,style:{transition:"transform 150ms ease",transform:`rotate(${o?"90deg":"0"})`,width:"100%"}})}),y.jsxs(pr,{component:wa,layout:!0,tabIndex:-1,"data-value":i.id,className:Ge(gg.root,"group","likec4-element-button"),...s.length>0&&{onClick:u=>{(!n||o)&&(u.stopPropagation(),c(i))}},children:[l,y.jsxs(Se,{style:{flexGrow:1},children:[y.jsxs(en,{gap:"xs",wrap:"nowrap",align:"center",className:zWe,children:[y.jsx(tc,{component:"div",highlight:a,className:gg.title,children:e.label}),y.jsx(_n,{label:i.id,withinPortal:!1,fz:"xs",disabled:!i.id.includes("."),children:y.jsx(tc,{component:"div",highlight:a,className:Ge(TWe,gg.descriptionColor),children:Jm(i.id)})})]}),y.jsx(tc,{component:"div",highlight:a,className:gg.description,lineClamp:1,children:i.summary.text||"No description"})]}),y.jsx(it,{component:"div",className:Ge(AWe,gg.descriptionColor),fz:"xs",children:s.length===0?"No views":y.jsxs(y.Fragment,{children:[s.length," view",s.length>1?"s":""]})})]})]})}function dee(){const e=Mt(),r=Md();return at(n=>{const o=[...n.views()];if(o.length===0)return;const i=n.id,a=fw(o)?.id;if(!a){r.send({type:"pickview.open",elementFqn:i});return}const l=a===e.currentView.id;r.send({type:"close"}),see(()=>{if(l){e.focusOnElement(i);return}e.navigateTo(a,void 0,i)})})}const LWe=fe({border:"transparent",background:{base:"transparent",_focusWithin:{base:"mantine.colors.gray[4]/55 !important",_dark:"mantine.colors.dark[5]/55 !important"},_groupHover:{base:"mantine.colors.gray[3]/35",_dark:"mantine.colors.dark[5]/35"}}}),FWe=fe({position:"absolute",inset:"0",width:"100%",height:"100%",backgroundColor:"[rgb(34 34 34 / 0.7)]",zIndex:902,backdropFilter:"auto",backdropBlur:"10px",_light:{backgroundColor:"[rgb(255 255 255 / 0.6)]"}}),VWe=fe({position:"absolute",top:"[2rem]",left:"[50%]",width:"100%",maxWidth:"600px",minWidth:"200px",transform:"translateX(-50%)",zIndex:903}),uee=fe({marginTop:"2","& + &":{marginTop:"[32px]"}});fe({height:["100%","100cqh"],"& .mantine-ScrollArea-viewport":{minHeight:"100%","& > div":{minHeight:"100%",height:"100%"}}});function qWe({elementFqn:e}){const r=Md(),n=Fo().element(e),o=[],i=[];for(const l of n.views())l.viewOf===n?o.push(l):i.push(l);const a=()=>{r.send({type:"pickview.close"})};return kf("keydown",l=>{try{l.key==="Escape"&&(l.stopPropagation(),l.preventDefault(),a())}catch(s){console.warn(s)}},{capture:!0}),y.jsxs(y.Fragment,{children:[y.jsx(Rr,{className:FWe,onClick:l=>{l.stopPropagation(),a()}},"pickview-backdrop"),y.jsx(l3,{children:y.jsxs(Rr,{initial:{opacity:0,scale:.95,originY:0,translateX:"-50%",translateY:-20},animate:{opacity:1,scale:1,translateY:0},exit:{opacity:0,scale:.98,translateY:-20,transition:{duration:.1}},className:VWe,"data-likec4-search-views":!0,children:[y.jsxs(en,{px:"sm",py:"md",justify:"space-between",children:[y.jsx(pp,{order:2,lh:1,children:"Select view"}),y.jsx(lr,{size:"md",variant:"default",onClick:l=>{l.stopPropagation(),a()},children:y.jsx(fp,{})})]}),y.jsxs(oi,{mah:"calc(100vh - 110px)",type:"never",children:[o.length>0&&y.jsxs(Lo,{gap:"sm",px:"sm",className:uee,children:[y.jsx(pp,{order:6,c:"dimmed",children:"scoped views of the element"}),o.map((l,s)=>y.jsx(fR,{view:l,search:"",loop:!0,focusOnElement:e,mod:{autofocus:s===0}},l.id))]}),i.length>0&&y.jsxs(Lo,{gap:"sm",px:"sm",className:uee,children:[y.jsx(pp,{order:6,c:"dimmed",children:"views including this element"}),i.map((l,s)=>y.jsx(fR,{view:l,search:"",loop:!0,focusOnElement:e,mod:{autofocus:s===0&&o.length===0}},l.id))]})]})]},"pickview")})]})}function HWe(){const e=S.useRef(null);let r=Fo().tagsSortedByUsage,n=mWe(),o=uR(),i=r.length,a=!1;if(o.startsWith("#")){const l=o.slice(1);r=r.filter(({tag:s})=>s.toLocaleLowerCase().includes(l)),a=r.length!==i}return r.length===0?null:(r=r.slice(0,15),y.jsxs(Or,{ref:e,css:{gap:"md",paddingLeft:"[48px]",flexWrap:"nowrap"},children:[y.jsx(Or,{css:{gap:"1.5",flexWrap:"wrap",opacity:a?1:.3,grayscale:a?0:.9,filter:"auto",transition:"fast",_groupHover:{opacity:1,grayscale:0},_groupFocusWithin:{opacity:1,grayscale:0}},children:r.map(({tag:l})=>y.jsx(u2,{tag:l,className:fe({userSelect:"none",cursor:"pointer"}),onClick:s=>{s.stopPropagation(),n(`#${l}`),setTimeout(()=>{D2(e.current)},350)}},l))}),a&&y.jsx(Vn,{size:"compact-xs",variant:"light",onClick:l=>{l.stopPropagation(),n(""),h0(e.current)},rightSection:y.jsx(fp,{size:14}),children:"Clear"})]}))}const UWe=[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]],gR=wt("outline","search","Search",UWe);function pee(e){return e.match(/^(k|ki|kin|kind|kind:)$/)!=null}const WWe=["#","kind:"],GWe=S.memo(()=>{const e=Md(),r=Fo(),n=S.useRef(null),{ref:o,focused:i}=kze(),[a,l]=fWe(),s=IW({scrollBehavior:"smooth",loop:!1});kf("keydown",u=>{try{!i&&(u.key==="Backspace"||u.key.startsWith("Arrow")||u.key.match(new RegExp("^\\p{L}$","u")))&&h0(n.current)}catch(p){console.warn(p)}});let c=[],d=!1;switch(!0){case a.startsWith("#"):{const u=a.toLocaleLowerCase().slice(1),p=r.tags.filter(f=>f.toLocaleLowerCase().includes(u));p.length===0?(d=!1,c=[y.jsx(fy,{children:"No tags found"},"empty-tags")]):(d=r.tags.some(f=>f.toLocaleLowerCase()===u),c=p.map(f=>y.jsxs(gy,{value:`#${f}`,children:[y.jsx(it,{component:"span",opacity:.5,mr:1,fz:"sm",children:"#"}),f]},f)));break}case a.startsWith("kind:"):case pee(a):{const u=a.length>5?a.slice(5).toLocaleLowerCase():"";let p=l9(r.specification.elements);u&&(p=p.filter(f=>f.toLocaleLowerCase().includes(u))),p.length===0?(d=!1,c=[y.jsx(fy,{children:"No kinds found"},"empty-kinds")]):(d=p.some(f=>f.toLocaleLowerCase()===u),c=p.map(f=>y.jsxs(gy,{value:`kind:${f}`,children:[y.jsx(it,{component:"span",opacity:.5,mr:1,fz:"sm",children:"kind:"}),f]},f)));break}}return y.jsxs(eo,{onOptionSubmit:u=>{l(u),s.resetSelectedOption(),WWe.includes(u)||(s.closeDropdown(),setTimeout(()=>{D2(n.current)},350))},width:"max-content",position:"bottom-start",shadow:"md",offset:{mainAxis:4,crossAxis:50},store:s,withinPortal:!1,children:[y.jsx(kS,{children:y.jsx(zi,{ref:$r(n,o),placeholder:"Search by title, description or start with # or kind:",autoFocus:!0,"data-autofocus":!0,"data-likec4-search-input":!0,tabIndex:0,classNames:{input:LWe},size:"lg",value:a,leftSection:y.jsx(gR,{style:{width:$e(20)},stroke:2}),rightSection:y.jsx(zi.ClearButton,{onClick:u=>{u.stopPropagation();const p=e.getSnapshot().context.openedWithSearch;a===""||a===p?e.send({type:"close"}):l("")}}),rightSectionPointerEvents:"auto",onChange:u=>{l(u.currentTarget.value),s.openDropdown(),s.updateSelectedOptionIndex()},onClick:()=>s.openDropdown(),onFocus:()=>s.openDropdown(),onBlur:()=>s.closeDropdown(),onKeyDownCapture:u=>{if(u.key==="Tab"){switch(!0){case s.getSelectedOptionIndex()>=0:return s.clickSelectedOption(),ka(u);case c.length===1:return s.selectFirstOption()&&s.clickSelectedOption(),ka(u);case pee(a):return l("kind:"),ka(u)}return}if(u.key==="Backspace"&&s.dropdownOpened){if(a==="kind:")return l(""),s.resetSelectedOption(),ka(u);if(a.startsWith("kind:")&&d)return l("kind:"),s.resetSelectedOption(),ka(u);if(a.startsWith("#")&&d)return l("#"),s.resetSelectedOption(),ka(u)}if(u.key==="Escape"&&s.dropdownOpened&&c.length>0){ka(u),s.closeDropdown();return}if(u.key==="ArrowUp"&&s.dropdownOpened&&a===""&&s.getSelectedOptionIndex()===0){s.closeDropdown(),ka(u);return}if(u.key==="ArrowDown"&&(!s.dropdownOpened||c.length===0||d||a===""&&s.getSelectedOptionIndex()===c.length-1)){s.closeDropdown(),ka(u),D2(n.current);return}}})}),y.jsx(g3,{hidden:c.length===0,style:{minWidth:300},children:y.jsx(m3,{children:y.jsx(oi,{mah:"min(322px, calc(100cqh - 50px))",type:"scroll",children:c})})})]})}),YWe=fe({backgroundColor:"[rgb(34 34 34 / var(--_opacity, 95%))]",_light:{backgroundColor:"[rgb(250 250 250 / var(--_opacity, 95%))]"},backdropFilter:"auto",backdropBlur:"var(--_blur, 10px)"}),XWe=fe({width:"100%",height:"100%",maxHeight:"100vh",overflow:"hidden",display:"flex",flexDirection:"column",justifyContent:"stretch",gap:"sm",paddingTop:"[20px]",paddingLeft:"md",paddingRight:"md",paddingBottom:"sm",background:"[transparent]"}),KWe=e=>!e.matches("inactive");function ZWe({searchActorRef:e}){const r=pn(e,KWe),n=()=>{e.send({type:"open"})},o=at(()=>{e.send({type:"close"})});return bze([["mod+k",n,{preventDefault:!0}],["mod+f",n,{preventDefault:!0}]]),y.jsx(pWe,{value:e,children:y.jsx(gp.Overlays,{children:y.jsx(HG,{FallbackComponent:UG,onReset:o,children:y.jsx(Cn,{children:r&&y.jsx(p0,{fullscreen:!0,withBackdrop:!1,backdrop:{opacity:.9},classes:{dialog:YWe,body:XWe},openDelay:0,onClose:o,"data-likec4-search":"true",children:y.jsx(QWe,{searchActorRef:e})})})})})})}const hee=fe({height:["100%","100cqh"],"& .mantine-ScrollArea-viewport":{minHeight:"100%","& > div":{minHeight:"100%",height:"100%"}}}),QWe=({searchActorRef:e})=>{const r=S.useRef(null),n=vWe();return wx(()=>{Zn(e.getSnapshot().context.openedWithSearch)&&D2(r.current)},150),y.jsxs(hr,{ref:r,display:"contents",children:[y.jsx(en,{className:"group",wrap:"nowrap",onClick:o=>{o.stopPropagation(),h0(r.current)},children:y.jsxs(hp,{flex:1,px:"sm",children:[y.jsx(GWe,{}),y.jsx(HWe,{})]})}),y.jsxs(yy,{children:[y.jsx(cp,{span:6,children:y.jsx(pp,{component:"div",order:6,c:"dimmed",pl:"sm",children:"Elements"})}),y.jsx(cp,{span:6,children:y.jsx(pp,{component:"div",order:6,c:"dimmed",pl:"sm",children:"Views"})})]}),y.jsxs(yy,{className:fe({containerName:"likec4-search-elements",containerType:"size",overflow:"hidden",flexGrow:1}),children:[y.jsx(cp,{span:6,children:y.jsx(es,{type:"scroll",className:hee,pr:"xs",scrollbars:"y",children:y.jsx(Cn,{children:y.jsx(lg,{id:"likec4-search-elements",children:y.jsx(NWe,{})})})})}),y.jsx(cp,{span:6,children:y.jsx(es,{type:"scroll",className:hee,pr:"xs",scrollbars:"y",children:y.jsx(Cn,{children:y.jsx(lg,{id:"likec4-search-views",children:y.jsx(MWe,{})})})})})]}),n&&y.jsx(qWe,{elementFqn:n})]})};function JWe({children:e}){const r=S.useContext(WS);if(!r)throw new Error("PortalToContainer must be used within RootContainer");return y.jsx(py,{target:r.ref.current??`#${r.id}`,children:e})}const fee={onNavigateTo:null,onNodeClick:null,onNodeContextMenu:null,onCanvasContextMenu:null,onEdgeClick:null,onEdgeContextMenu:null,onCanvasClick:null,onCanvasDblClick:null,onBurgerMenuClick:null,onOpenSource:null,onInitialized:null,onLayoutTypeChange:null},mR=l9(fee),gee=S.createContext({...hw(mR,e=>[e,null]),handlersRef:{current:fee}});function eGe({handlers:e,children:r}){const n=Zh(e),o=mR.map(a=>ey(e[a])),i=S.useMemo(()=>({...hw(mR,a=>n.current[a]?[a,(...l)=>n.current[a]?.(...l)]:[a,null]),handlersRef:n}),[n,...o]);return y.jsx(gee.Provider,{value:i,children:r})}function mg(){return S.useContext(gee)}const mee=(e,r)=>e.find(o=>"modelFqn"in o.data&&o.data.modelFqn===r)||null;function zr(e){return{get overlaysActorRef(){return e.get("overlays")??null},get diagramActorRef(){return gt(e.get("diagram"),"Diagram actor not found")},get searchActorRef(){return e.get("search")??null},get editorActorRef(){return e.get("editor")??null}}}zr.editorActor=({system:e})=>e.get("editor"),zr.overlaysActor=({system:e})=>e.get("overlays"),zr.diagramActor=({system:e})=>e.get("diagram"),zr.searchActor=({system:e})=>e.get("search");function yg(e,r){return e.view.nodes.find(n=>n.id===r)??null}function yR(e,r){return e.view.edges.find(n=>n.id===r)??null}function tGe(e){const r=new Map,n=e.context.xynodes.reduce((o,i)=>{let a=i.position;if(i.parentId){const c=r.get(i.parentId)??{x:0,y:0};a={x:a.x+c.x,y:a.y+c.y}}if(r.set(i.id,a),i.hidden||i.data.dimmed)return o;const l=i.measured?.width??i.width??i.initialWidth,s=i.measured?.height??i.height??i.initialHeight;return o.minX=Math.min(o.minX,a.x),o.minY=Math.min(o.minY,a.y),o.maxX=Math.max(o.maxX,a.x+l),o.maxY=Math.max(o.maxY,a.y+s),o},{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0});return n.minX===1/0?{bounds:e.context.view.bounds}:{duration:350,bounds:{x:n.minX-10,y:n.minY-10,width:n.maxX-n.minX+20,height:n.maxY-n.minY+20}}}const rGe=32;function nGe(e){const r=gt(e.context.activeWalkthrough),n=gt(e.context.xyedges.find(c=>c.id===r.stepId)),o=e.context.xystore.getState(),i=gt(o.nodeLookup.get(n.source)),a=gt(o.nodeLookup.get(n.target)),l=EF([i,a],o);let s;if(r.parallelPrefix){const c=e.context.xynodes.find(d=>d.type==="seq-parallel"&&d.data.parallelPrefix===r.parallelPrefix);c&&(s={x:c.position.x,y:c.position.y,..._o(c)})}return s??=oGe(n,o),s?s=ko.merge(s,l):s=l,{duration:350,bounds:ko.expand(s,rGe)}}function oGe(e,r){const n=r.nodeLookup.get(e.source),o=r.nodeLookup.get(e.target);if(!n||!o)return null;const i=WF({id:e.id,sourceNode:n,targetNode:o,sourceHandle:e.sourceHandle||null,targetHandle:e.targetHandle||null,connectionMode:r.connectionMode});return i?ko.fromPoints([[i.sourceX,i.sourceY],[i.targetX,i.targetY]]):null}function vR(e){switch(e.type){case"element":case"compound-element":case"seq-actor":return e.data.modelFqn;case"deployment":case"compound-deployment":return e.data.modelFqn??e.data.deploymentFqn;case"seq-parallel":case"view-group":return null;default:Qo(e)}}function iGe(e,r){const n=e.lastOnNavigate?.fromNode,o=n&&e.xynodes.find(l=>l.id===n),i=o&&vR(o),a=i&&r.xynodes.find(l=>vR(l)===i);return{fromNode:o,toNode:a}}function aGe(e,r){let{width:n,height:o,transform:i}=e.xystore.getState();const a=Math.max(i[2],1);return Ws(r,n,o,xa,a,e.fitViewPadding)}const lGe=ns({delays:{"open timeout":({context:e})=>e.openTimeout,"close timeout":600,"long idle":1500},actions:{"update edgeId":Bt(({context:e,event:r})=>(ht(r,["xyedge.select","xyedge.mouseEnter"]),{edgeId:r.edgeId,edgeSelected:e.edgeSelected||r.type==="xyedge.select"})),"increase open timeout":Bt(()=>({openTimeout:800})),"decrease open timeout":Bt(()=>({openTimeout:300})),"reset edgeId":Bt({edgeId:null,edgeSelected:!1})},guards:{"edge was selected":({context:e})=>e.edgeSelected,"edge was hovered":({context:e})=>!e.edgeSelected}}).createMachine({id:"breadcrumbs",context:()=>({edgeId:null,edgeSelected:!1,openTimeout:800}),initial:"idle",on:{close:{target:"#idle",actions:["reset edgeId","increase open timeout"]}},states:{idle:{id:"idle",on:{"xyedge.mouseEnter":{target:"opening",actions:"update edgeId"},"xyedge.select":{target:"active",actions:"update edgeId"}},after:{"long idle":{actions:"increase open timeout"}}},opening:{on:{"xyedge.mouseLeave":{target:"idle"},"xyedge.select":{target:"active",actions:"update edgeId"}},after:{"open timeout":{actions:"decrease open timeout",target:"active"}}},active:{tags:["opened"],initial:"opened",exit:"reset edgeId",on:{"xyedge.unselect":{target:"idle",actions:"increase open timeout"},"xyedge.select":{actions:"update edgeId"}},states:{opened:{on:{"dropdown.mouseEnter":{target:"hovered"},"xyedge.mouseLeave":{guard:"edge was hovered",target:"closing"}}},hovered:{on:{"dropdown.mouseLeave":[{guard:"edge was selected",target:"opened"},{target:"closing"}]}},closing:{on:{"xyedge.mouseEnter":{guard:"edge was hovered",target:"opened",actions:"update edgeId"},"xyedge.select":{target:"opened",actions:"update edgeId"},"dropdown.mouseEnter":{target:"hovered"}},after:{"close timeout":{target:"#idle"}}}}}}}),sGe=lGe,yee=fe({display:"block",fontSize:"xxs",fontWeight:500,whiteSpace:"nowrap",paddingX:"1",paddingY:"0.5",borderRadius:"[2px]",background:{_light:"var(--likec4-palette-fill)/90",_dark:"var(--likec4-palette-fill)/60"},lineHeight:"1",color:{_light:"var(--likec4-palette-hiContrast)",_dark:"var(--likec4-palette-loContrast)"}}),cGe=fe({whiteSpaceCollapse:"preserve-breaks",fontSize:"sm",lineHeight:"sm",userSelect:"all"});function dGe(e){let r=null;for(const n of e.xyedges)if(n.selected){if(r){r=null;break}r=n.data.id}return{viewId:e.view.id,selected:r}}const uGe=S.memo(()=>{const e=Fo(),r=vE(sGe),n=Mt(),{viewId:o,selected:i}=pa(dGe),a=pn(r,m=>m.hasTag("opened")?m.context.edgeId:null);ji("navigateTo",()=>{r.send({type:"close"})}),ji("edgeMouseEnter",({edge:m})=>{r.send({type:"xyedge.mouseEnter",edgeId:m.data.id})}),ji("edgeMouseLeave",()=>{r.send({type:"xyedge.mouseLeave"})}),ji("walkthroughStarted",()=>{r.send({type:"close"})}),S.useEffect(()=>{i?r.send({type:"xyedge.select",edgeId:i}):r.send({type:"xyedge.unselect"})},[i]);const l=S.useCallback(m=>{if(!a)return;r.send({type:"dropdown.mouseEnter"});const v=n.findEdge(a);v&&!v.data.hovered&&n.send({type:"xyflow.edgeMouseEnter",edge:v,event:m})},[r,n,a]),s=S.useCallback(m=>{if(!a)return;r.send({type:"dropdown.mouseLeave"});const v=n.findEdge(a);v?.data.hovered&&n.send({type:"xyflow.edgeMouseLeave",edge:v,event:m})},[r,n,a]),{diagramEdge:c,sourceNode:d,targetNode:u}=pa(m=>{const v=a?yR(m,a):null,w=v?yg(m,v.source):null,x=v?yg(m,v.target):null;return{diagramEdge:v,sourceNode:w,targetNode:x}},Ir,[a]);if(!c||!d||!u||tp(c.relations))return null;const[p,f]=Jr(c.relations,un(m=>{try{return e.relationship(m)}catch(v){return console.error(`View is cached and likec4model missing relationship ${m} from ${d.id} -> ${u.id}`,v),null}}),ep(Zn),qq(m=>m.source.id===d.id&&m.target.id===u.id));return p.length===0&&f.length===0?(console.warn("No relationships found diagram edge",{diagramEdge:c,sourceNode:d,targetNode:u}),null):y.jsx(JWe,{children:y.jsx(fGe,{viewId:o,direct:p,nested:f,diagramEdge:c,sourceNode:d,targetNode:u,onMouseEnter:l,onMouseLeave:s})})}),pGe=(e,r)=>r?.querySelector(`.likec4-edge-label[data-edge-id="${e}"]`)??r?.querySelector(`.likec4-edge-middle-point[data-edge-id="${e}"]`)??null,hGe=8,fGe=({viewId:e,diagramEdge:r,direct:n,nested:o,sourceNode:i,targetNode:a,onMouseEnter:l,onMouseLeave:s})=>{const c=S.useRef(null),{enableNavigateTo:d,enableVscode:u,enableCompareWithLatest:p}=sr(),{onOpenSource:f}=mg(),m=dMe(),[v,w]=S.useState(null);S.useLayoutEffect(()=>{w(pGe(r.id,m.current))},[r]),S.useEffect(()=>{const C=v,_=c.current;if(!C||!_)return;let $=!1;const R=Kw(C,_,()=>{$U(C,_,{placement:"bottom-start",middleware:[_U(4),Zje({crossAxis:!0,allowedPlacements:["bottom-start","bottom-end","left-start","top-start","top-end","right-start","right-end","left-end"]}),SU({apply({availableHeight:T,availableWidth:A,elements:z}){$||Object.assign(z.floating.style,{maxWidth:`${ta(Pd(A),{min:220,max:400})}px`,maxHeight:`${ta(Pd(T),{min:100,max:500})}px`})}}),EU({padding:hGe*2})]}).then(({x:T,y:A,middlewareData:z})=>{$||(_.style.transform=`translate(${Pd(T)}px, ${Pd(A)}px)`,_.style.visibility=z.hide?.referenceHidden?"hidden":"visible")})},{ancestorResize:!1,animationFrame:!0});return()=>{$=!0,R()}},[v]);const x=Mt(),k=S.useCallback((C,_)=>y.jsxs(S.Fragment,{children:[_>0&&y.jsx(sp,{}),y.jsx(mGe,{viewId:e,relationship:C,sourceNode:i,targetNode:a,onNavigateTo:d?$=>{x.navigateTo($)}:void 0,...f&&u&&{onOpenSource:()=>f({relation:C.id})}})]},C.id),[e,i,a,x,d,f,u]);return y.jsx(oi,{ref:c,onMouseEnter:l,onMouseLeave:s,type:"auto",scrollbars:"y",scrollbarSize:6,styles:{viewport:{overscrollBehavior:"contain",minWidth:200,minHeight:40}},className:Ge(fe({layerStyle:"likec4.dropdown",p:"0",pointerEvents:{base:"all",_whenPanning:"none"},position:"absolute",top:"0",left:"0",width:"max-content",cursor:"default"})),children:y.jsxs(hp,{css:{gap:"3",padding:"4",paddingTop:"2"},children:[p&&y.jsx(gGe,{diagramEdge:r}),y.jsx(Vn,{variant:"default",color:"gray",size:"compact-xs",style:{alignSelf:"flex-start",fontWeight:500,"--button-fz":"var(--font-sizes-xxs)"},onClick:C=>{C.stopPropagation(),x.openRelationshipDetails(r.id)},children:"browse relationships"}),n.length>0&&y.jsxs(y.Fragment,{children:[y.jsx(vg,{children:"DIRECT RELATIONSHIPS"}),n.map(k)]}),o.length>0&&y.jsxs(y.Fragment,{children:[y.jsx(vg,{css:{mt:n.length>0?"2":"0"},children:"RESOLVED FROM NESTED"}),o.map(k)]})]})})},gGe=({diagramEdge:e})=>{const r=e.drifts;return!r||r.length===0?null:y.jsx(xy,{color:"orange",withBorder:!1,withCloseButton:!1,title:"Changes:",children:r.map(n=>y.jsxs(it,{mt:2,size:"sm",lh:"xs",children:["- ",n]},n))})},mGe=S.forwardRef(({viewId:e,relationship:r,sourceNode:n,targetNode:o,onNavigateTo:i,onOpenSource:a},l)=>{const s=vee(r,"source",n),c=vee(r,"target",o),d=i&&r.navigateTo?.id!==e?r.navigateTo?.id:void 0,u=r.links,p=r.hasMetadata()?uw(r.getMetadata()).sort(([m],[v])=>m.localeCompare(v)):null,f=p&&y.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[y.jsx("div",{style:{fontWeight:600,fontSize:"10px",color:"#868e96",marginBottom:"2px",letterSpacing:"0.5px",textTransform:"uppercase"},children:"Metadata"}),y.jsx("div",{style:{borderTop:"1px solid rgba(0, 0, 0, 0.1)",paddingTop:"6px",display:"flex",flexDirection:"column",gap:"6px"},children:p.map(([m,v])=>{const w=Array.isArray(v)?v.join(", "):v;return y.jsxs("div",{style:{display:"flex",gap:"12px",fontSize:"12px",lineHeight:"1.4"},children:[y.jsxs("span",{style:{fontWeight:600,minWidth:"110px",color:"#495057"},children:[m,":"]}),y.jsx("span",{style:{color:"#212529",wordBreak:"break-word",flex:1},children:w})]},m)})})]});return y.jsxs(hp,{ref:l,className:qG({block:"2",inline:"2",paddingY:"2.5",paddingX:"2",gap:"1",rounded:"sm",backgroundColor:{_hover:{base:"mantine.colors.gray[1]",_dark:"mantine.colors.dark[5]/70"}}}),children:[y.jsx(Or,{gap:"0.5",children:y.jsxs(dp,{openDelay:200,children:[y.jsx(f0,{label:s.full,offset:2,position:"top-start",children:y.jsx(it,{component:"div","data-likec4-color":n.color,className:yee,children:s.short})}),y.jsx(hg,{stroke:2.5,size:"11px",opacity:.65}),y.jsx(f0,{label:c.full,offset:2,position:"top-start",children:y.jsx(it,{component:"div","data-likec4-color":o.color,className:yee,children:c.short})}),d&&y.jsx(f0,{label:"Open dynamic view",children:y.jsx(lr,{size:"sm",radius:"sm",variant:"default",onClick:m=>{m.stopPropagation(),i?.(d)},style:{alignSelf:"flex-end"},role:"button",children:y.jsx(ba,{size:"80%",stroke:2})})}),a&&y.jsx(f0,{label:"Open source",children:y.jsx(lr,{size:"sm",radius:"sm",variant:"default",onClick:m=>{m.stopPropagation(),a()},role:"button",children:y.jsx(dg,{size:"80%",stroke:2})})})]})}),y.jsxs(Or,{gap:"xs",alignItems:"center",children:[y.jsx(hr,{className:cGe,children:r.title||"untitled"}),f&&y.jsx(f0,{label:f,w:350,position:"right",offset:10,openDelay:300,withArrow:!0,bg:"white",c:"dark",withinPortal:!0,styles:{tooltip:{boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",border:"1px solid #dee2e6"}},children:y.jsx(hr,{display:"inline-flex",children:y.jsx(r0,{size:14,opacity:.5,style:{flexShrink:0,cursor:"help"}})})})]}),r.kind&&y.jsxs(Or,{gap:"2",children:[y.jsx(vg,{children:"kind"}),y.jsx(it,{size:"xs",className:fe({userSelect:"all"}),children:r.kind})]}),r.technology&&y.jsxs(Or,{gap:"2",children:[y.jsx(vg,{children:"technology"}),y.jsx(it,{size:"xs",className:fe({userSelect:"all"}),children:r.technology})]}),r.summary.nonEmpty&&y.jsxs(y.Fragment,{children:[y.jsx(vg,{children:"description"}),y.jsx(hr,{css:{paddingLeft:"2.5",py:"1.5",borderLeft:"2px dotted",borderLeftColor:{base:"mantine.colors.gray[3]",_dark:"mantine.colors.dark[4]"}},children:y.jsx(zp,{value:r.summary,fontSize:"sm",textScale:.875})})]}),u.length>0&&y.jsxs(y.Fragment,{children:[y.jsx(vg,{children:"links"}),y.jsx(Or,{gap:"1",flexWrap:"wrap",children:u.map(m=>y.jsx(o$,{size:"sm",value:m},m.url))})]})]})}),vg=Ed("div",{base:{display:"block",fontSize:"xxs",fontWeight:500,userSelect:"none",lineHeight:"sm",color:"mantine.colors.dimmed"}}),f0=_n.withProps({color:"dark",fz:"xs",label:"",children:null,offset:8,withinPortal:!1});function vee(e,r,n){const o=e.isDeploymentRelation()?n.id:n.modelRef||"",i=e[r].id,a=Jm(o)+i.slice(o.length);return{full:i,short:a}}function bg(){const e=uMe();return S.useMemo(()=>e?{portalProps:{target:e},withinPortal:!0}:{withinPortal:!1},[e])}const yGe=ns({delays:{"open timeout":500,"close timeout":350},actions:{"update activatedBy":Bt({activatedBy:({context:e,event:r})=>{switch(!0){case r.type.includes("click"):return"click";case r.type.includes("mouseEnter"):return"hover";default:return e.activatedBy}}}),"keep dropdown open":Bt({activatedBy:"click"}),"update selected folder":Bt(({event:e})=>e.type==="breadcrumbs.click.root"?{selectedFolder:""}:(ht(e,["breadcrumbs.click.folder","select.folder"]),{selectedFolder:e.folderPath})),"reset selected folder":Bt({selectedFolder:({context:e})=>e.viewModel?.folder.path??""}),"update inputs":Bt(({context:e,event:r})=>{ht(r,"update.inputs");const n=r.inputs.viewModel?.id!==e.viewModel?.id;let o=e.selectedFolder;return r.inputs.viewModel?.folder.path.startsWith(o)||(o=r.inputs.viewModel?.folder.path??""),{view:r.inputs.view,viewModel:r.inputs.viewModel,selectedFolder:o,activatedBy:n?"hover":e.activatedBy}}),"reset search query":Bt({searchQuery:""}),"update search query":Bt(({event:e})=>(ht(e,"searchQuery.change"),{searchQuery:e.value??""})),"emit navigateTo":gE(({event:e})=>(ht(e,"select.view"),{type:"navigateTo",viewId:e.viewId}))},guards:{"was opened on hover":({context:e})=>e.activatedBy==="hover","has search query":({context:e})=>!tp(e.searchQuery),"search query is empty":({context:e})=>tp(e.searchQuery)}}).createMachine({id:"breadcrumbs",context:({input:e})=>({...e,breadcrumbs:[],activatedBy:"hover",selectedFolder:"",searchQuery:"",folderColumns:[]}),initial:"idle",entry:["update activatedBy","reset selected folder"],on:{"update.inputs":{actions:"update inputs"},"searchQuery.change":{actions:["update search query",ai({type:"searchQuery.changed"})]}},states:{idle:{id:"idle",on:{"breadcrumbs.mouseEnter.*":{target:"pending",actions:"update activatedBy"},"breadcrumbs.click.*":{target:"active",actions:"update activatedBy"}}},pending:{on:{"breadcrumbs.mouseEnter.*":{actions:"update activatedBy"},"breadcrumbs.mouseLeave.*":{target:"idle"},"breadcrumbs.click.*":{target:"active",actions:"update activatedBy"}},after:{"open timeout":{target:"active"}}},active:{tags:["active"],initial:"decide",on:{"dropdown.dismiss":{target:"#idle"},"breadcrumbs.mouseLeave":{guard:"was opened on hover",target:".closing"},"dropdown.mouseLeave":{guard:"was opened on hover",target:".closing"},"searchQuery.changed":{target:".decide"}},states:{decide:{always:[{guard:"has search query",target:"search"},{target:"opened"}]},opened:{on:{"searchQuery.changed":{guard:"has search query",actions:"keep dropdown open",target:"search"},"breadcrumbs.click.viewtitle":{actions:"reset selected folder"},"breadcrumbs.click.*":{actions:"update selected folder"},"select.folder":{actions:["keep dropdown open","update selected folder"]},"select.view":{actions:["emit navigateTo"]}}},search:{on:{"breadcrumbs.click.viewtitle":{actions:["reset search query","reset selected folder"],target:"opened"},"breadcrumbs.click.*":{actions:["reset search query","update selected folder"],target:"opened"},"select.view":{actions:["emit navigateTo"]}}},closing:{on:{"breadcrumbs.mouseEnter.*":{target:"decide"},"dropdown.mouseEnter":{target:"decide"}},after:{"close timeout":{target:"#idle"}}}}}}}),vGe=yGe,bR=S.createContext(null);bR.displayName="NavigationPanelActorSafeContext";const bGe=bR.Provider,xR=()=>{const e=S.useContext(bR);if(e===null)throw new Error("NavigationPanelActorRef is not found in the context");return e};function wR(e,r=Ir){const n=xR();return pn(n,e,r)}function xGe(e,r=Ir){return wR(n=>e(n.context),r)}function g0(){const e=xR();return S.useMemo(()=>({actorRef:e,send:r=>e.send(r),selectFolder:r=>e.send({type:"select.folder",folderPath:r}),selectView:r=>e.send({type:"select.view",viewId:r}),isOpened:()=>e.getSnapshot().hasTag("active"),clearSearch:()=>e.send({type:"searchQuery.change",value:""}),closeDropdown:()=>e.send({type:"dropdown.dismiss"})}),[e])}const bee=_n.withProps({color:"dark",fz:"xs",openDelay:600,closeDelay:120,label:"",children:null,offset:8,withinPortal:!1}),xee=()=>y.jsx(Ti,{component:Rr,variant:"transparent",size:16,className:fe({display:{base:"none","@/md":"flex"},color:{base:"mantine.colors.gray[5]",_dark:"mantine.colors.dark[3]"}}),children:y.jsx(Dd,{})});y3.withProps({separator:y.jsx(xee,{}),separatorMargin:4});const cc=S.forwardRef(({variant:e="default",className:r,disabled:n=!1,type:o,...i},a)=>y.jsx(lr,{size:"md",variant:"transparent",radius:"sm",component:wa,...!n&&{whileHover:{scale:1.085},whileTap:{scale:1,translateY:1}},disabled:n,...i,className:Ge(r,eQ({variant:e,type:o})),ref:a})),M2=T1({base:{fontSize:"sm",fontWeight:"500",transition:"fast",color:{base:"likec4.panel.action",_hover:"likec4.panel.action.hover"}},variants:{truncate:{true:{truncate:!0}},dimmed:{true:{color:{base:"likec4.panel.text.dimmed",_hover:"likec4.panel.action"}}}}}),wGe=S.forwardRef((e,r)=>y.jsxs("svg",{ref:r,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 222 56",...e,children:[y.jsx("path",{fill:"#5E98AF",d:"M33.95 33.78V0H2.37A2.37 2.37 0 0 0 0 2.35V33.9h33.95v-.12ZM38.57 33.78H55.6v-14.6c0-1.3-1.06-2.35-2.36-2.35H38.57v16.95ZM33.95 38.37H17.04v14.6c0 1.29 1.06 2.35 2.36 2.35h14.67V38.37h-.12ZM38.57 38.37v16.95h14.67c1.3 0 2.36-1.06 2.36-2.36v-14.6H38.57Z"}),y.jsx("path",{className:fe({fill:"[#FCFBF7]",_light:{fill:"[#222221]"}}),d:"M71.61 12.08c-.06 3.61.3 29.95.23 31.87 0 1.8 0 3.6.06 5.41 0 .3.18.58.47.58 4.1.18 8.13-.17 12.22-.11 1.34.05 2.69 0 3.97 0 1.29-.06 1.4-.59 1.35-1.63-.06-1.63-.06-3.08-.06-4.65-.06-.82-.53-1.11-1.23-1.11-2.4.06-4.8-.06-7.19.06-.4.06-.82.06-1.23.06-.7-.06-.87-.24-.93-1v-.86c-.18-4.83.17-9.83.17-14.66-.06-4.07 0-7.73-.06-11.34 0-1.57 0-3.14-.05-4.65-.06-.93 0-1.92-.24-2.85-.11-.35-.29-.81-.7-.81h-5.5c-.93 0-1.22.64-1.28 1.57v4.12ZM103.81 35c-.17-6.63-.1-13.67-.05-20.24 0-2.04-.12-4.25-.12-6.28 0-2.21-.87-2.1-2.04-2.15-1.7-.06-2.46-.06-4.15-.06-1.11-.06-1.58.23-1.58 1.34 0 5.7-.18 21.8-.12 24.13.06 2.33.3 12.91.18 15.24-.06.81 0 1.62.06 2.44.05.29.23.58.7.58 1.93-.12 3.74-.12 5.67-.17.7-.06 1.28-.24 1.58-1 .05-.4-.12-11.04-.12-13.83Zm13.92 4.47c0-2.03-.3-7.56-.23-8.72 0-.17.11-.4.17-.4.12 0 .35.11.41.17 1.87 2.44 10.64 19.36 11.7 19.42.28.06.58.06.87.06 1.99-.12 3.74 0 5.73 0 2.04 0 .7-1.98.35-2.5-.53-.76-7.48-13.14-7.9-13.9-1.16-1.98-2.16-4.13-3.32-6.05-.12-.23-.24-.58-.18-.81.12-.7.3-1.34.59-1.98a93.18 93.18 0 0 1 4.55-8.14c1.88-2.97 2.93-4.83 4.45-7.5.35-.64.58-1.34.82-2.1.05-.29-.18-.58-.53-.58-1.11-.05-5.15 0-6.43 0-.59 0-1.17.12-1.46.64-.76 1.46-8.6 15.7-9.35 16.98-.06.12-.24.18-.41.18 0 0-.12-.18-.12-.3-.06-3.25.53-13.9.4-16.04-.05-1.28-.28-1.4-1.57-1.46-1.4-.05-3.33-.05-4.73-.05-1.3 0-1.4.7-1.58 1.62-.06.18-.06 5.64-.06 8.09 0 3.54-.3 25.76.11 32.8 0 .7.18 1.1.77 1.1 1.57-.12 3.91 0 5.49 0 1.11 0 1.29-.12 1.29-1.98 0-2.5.23-4.77.23-7.85 0-.23-.06-.46-.06-.7Zm25.66-1.4h-.06c0 1.46-.05 2.97 0 4.49.06 1.86.18 3.72.3 5.58 0 .64.17.81.76.93 1.22.29 2.4.35 3.62.35 3.16-.12 6.31.11 9.47 0 1.29-.06 1.87.06 3.16-.18 1.17-.23 1.58-.87 1.58-2.61-.12-1.1-.06-1.57-.06-2.91 0-1.92-1.35-2.56-2.52-2.5-.81.06-4.73-.06-6.31-.06-2.63.06-2.22.4-2.22-2.33 0-2.2.06-5.05.06-7.32 0-1.22.11-1.63 1.28-1.63h7.31c1.17.17 1.99-.64 1.99-1.86 0-1.22.12-1.28.12-2.5l-.18-1.75c-.12-.99-.47-1.33-1.46-1.33-.64 0-1.29.05-1.93.11-2.52.18-3.68-.17-6.14 0-.82 0-.93-.11-1-.87-.23-2.27 0-4.77.24-7.04.06-.93.3-1.1 1.17-1.16l8.24-.06c1.11-.11 1.46-.06 1.4-1.16-.11-1.69.06-3.43-.11-5.12-.12-.93-.41-1.1-1.46-1.1-1.76.05-2.17.05-3.92.17-1.75.06-8.77.06-10.46.06-2.46 0-2.63-.18-2.7 2.8-.1 2.32-.05 4.7-.05 7.09 0 4.07-.23 18.66-.12 21.92Zm47.76-24.82c.06-1.92 0-3.5 0-5.35 0-2.15-3.92-1.92-5.32-1.86a18.95 18.95 0 0 0-15.08 9.77c-.82 1.57-1.4 3.2-1.81 4.88a34 34 0 0 0-.59 12.15c.41 3.78 1.4 7.56 3.74 10.59 4.04 5.3 11.46 7.15 17.83 6.16.3-.06.59-.11.82-.29.18-.11.35-.35.35-.58l.18-3.31c.06-1.05 0-1 0-2.04 0-1.4-2.93-.35-4.74-.35-1.75 0-3.62-.06-5.2-.87-2.8-1.57-4.38-4.71-5.26-7.68-1-3.2-1.23-6.63-.64-9.88.7-4.25 2.74-9.13 7.25-10.59 2.57-.87 5.31-.58 7.89-.29.35.06.58-.17.58-.46Zm26.77 15.3c.06-2.5 0-14.84 0-18.38.06-.82 0-1.63-.11-2.45-.06-.99-.24-1.28-1.29-1.33h-4.44c-.82 0-1.35.4-1.82 1.27-1.34 3.2-10.75 24.02-12.15 26.58-.53.99-1 1.63-1 2.68v4.24c0 .76-.06 1.28 1.23 1.28l11.1-.06c1.47 0 1.47.3 1.47 1.1 0 .88-.12 4.9-.12 5.3 0 .58.12 1.16 1.23 1.16h5.08c1.23 0 1.23-.7 1.23-2.03.06-1.17-.06-3.5-.06-4.66 0-.93.18-.98 1.76-.98 1.22 0 1.75-.12 1.75-.88.06-1.57 0-2.67 0-4.42 0-1.04-.93-.98-2.92-.98-.65 0-.7-.18-.7-1.05-.12-1.8-.24-4.6-.24-6.4Zm-7.25-5.94c-.05.7-.11 10.82-.11 12.27-.06.81-.24 1.05-1 1.1-1.93.06-3.85.06-5.78.06-.47 0-.65-.4-.41-.87.23-.4 4.85-11.57 6.13-14.48.18-.17.24-.35.41-.52.18-.12.41-.18.59-.23.06 0 .23.29.23.46 0 .76-.06 1.51-.06 2.21Z"})]})),kGe=S.forwardRef((e,r)=>y.jsx("svg",{ref:r,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 56 56",...e,children:y.jsx("path",{fill:"#5E98AF",d:"M33.95 33.78V0H2.37A2.37 2.37 0 0 0 0 2.35V33.9h33.95v-.12ZM38.57 33.78H55.6v-14.6c0-1.3-1.06-2.35-2.36-2.35H38.57v16.95ZM33.95 38.37H17.04v14.6c0 1.29 1.06 2.35 2.36 2.35h14.67V38.37h-.12ZM38.57 38.37v16.95h14.67c1.3 0 2.36-1.06 2.36-2.36v-14.6H38.57Z"})})),_Ge=()=>{const e=g0(),{onBurgerMenuClick:r}=mg();return y.jsx(Rr,{layout:"position",children:y.jsxs(pr,{onMouseEnter:()=>{e.send({type:"breadcrumbs.mouseEnter.root"})},onMouseLeave:()=>{e.send({type:"breadcrumbs.mouseLeave.root"})},onClick:n=>{n.stopPropagation(),r&&e.isOpened()&&setTimeout(()=>{r()},100),e.send({type:"breadcrumbs.click.root"})},className:Ge("mantine-active",qn({padding:"0.5",width:{base:"[20px]","@/md":"[64px]"}})),children:[y.jsx(wGe,{className:fe({display:{base:"none","@/md":"block"}})}),y.jsx(kGe,{className:fe({display:{base:"block","@/md":"none"}})})]})})},SGe=[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M5 12l6 6",key:"svg-1"}],["path",{d:"M5 12l6 -6",key:"svg-2"}]],EGe=wt("outline","arrow-left","ArrowLeft",SGe),CGe=()=>{const e=Mt(),{hasStepBack:r,hasStepForward:n}=pa(o=>({hasStepBack:o.navigationHistory.currentIndex>0,hasStepForward:o.navigationHistory.currentIndex{o.stopPropagation(),e.navigate("back")},children:y.jsx(EGe,{size:14})}),y.jsx(cc,{disabled:!n,onClick:o=>{o.stopPropagation(),e.navigate("forward")},children:y.jsx(hg,{size:14})})]})},$Ge=[["path",{d:"M9 15l6 -6",key:"svg-0"}],["path",{d:"M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464",key:"svg-1"}],["path",{d:"M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463",key:"svg-2"}]],RGe=wt("outline","link","Link",$Ge),zGe=({context:e})=>{const r=e.view;return{id:r.id,title:e.viewModel?.title??(r.title&&n7(r.title))??"Untitled View",description:e.viewModel?.description??ur.from(r.description),tags:r.tags??[],links:r.links??[]}},TGe=e=>{const[r,n]=S.useState(!1),o=wR(zGe,tt),i=bg();return y.jsxs(br,{position:"bottom-end",shadow:"xl",clickOutsideEvents:["pointerdown","mousedown","click"],offset:{mainAxis:4},opened:r,onChange:n,...i,...e,children:[y.jsx(jGe,{linksCount:o.links.length,onOpen:()=>n(!0)}),r&&y.jsx(AGe,{data:o,onClose:()=>n(!1)})]})},jGe=({linksCount:e,onOpen:r})=>y.jsx(br.Target,{children:y.jsxs(pr,{component:wa,layout:"position",whileTap:{scale:.95,translateY:1},onClick:n=>{n.stopPropagation(),r()},className:Ge("group",qn({gap:"2",paddingInline:"2",paddingBlock:"1",rounded:"sm",userSelect:"none",cursor:"pointer",color:{base:"likec4.panel.action",_hover:"likec4.panel.action.hover"},backgroundColor:{_hover:"likec4.panel.action.bg.hover"},display:{base:"none","@/xs":"flex"}}),""),children:[y.jsx(nR,{size:16,stroke:1.8}),e>0&&y.jsxs(Or,{gap:"[1px]",children:[y.jsx(RGe,{size:14,stroke:2}),y.jsx(hr,{css:{fontSize:"11px",fontWeight:600,lineHeight:1,opacity:.8},children:e})]})]})}),wee=Ed("div",{base:{fontSize:"xs",color:"mantine.colors.dimmed",fontWeight:500,userSelect:"none",mb:"xxs"}}),AGe=({data:{id:e,title:r,description:n,tags:o,links:i},onClose:a})=>{const l=Mt();return ji("paneClick",a),ji("nodeClick",a),y.jsxs(br.Dropdown,{className:Ge("nowheel nopan nodrag",Ey({margin:"xs",layerStyle:"likec4.dropdown",gap:"md",padding:"md",paddingBottom:"lg",pointerEvents:"all",maxWidth:"calc(100cqw - 52px)",minWidth:"200px",maxHeight:"calc(100cqh - 100px)",width:"max-content",cursor:"default",overflow:"auto",overscrollBehavior:"contain","@/sm":{minWidth:400,maxWidth:550},"@/lg":{maxWidth:700}})),children:[y.jsxs("section",{children:[y.jsx(it,{component:"div",fw:500,size:"xl",lh:"sm",children:r}),y.jsxs(Or,{alignItems:"flex-start",mt:"1",children:[y.jsx(DGe,{label:"id",value:e}),y.jsx(Or,{gap:"xs",flexWrap:"wrap",children:o.map(s=>y.jsx(u2,{tag:s,cursor:"pointer",onClick:c=>{c.stopPropagation(),l.openSearch(`#${s}`)}},s))})]})]}),i.length>0&&y.jsxs("section",{className:qn({alignItems:"baseline"}),children:[y.jsx(wee,{children:"Links"}),y.jsx(Or,{gap:"xs",flexWrap:"wrap",children:i.map((s,c)=>y.jsx(o$,{value:s},`${c}-${s.url}`))})]}),n.isEmpty&&y.jsx(it,{component:"div",fw:500,size:"xs",c:"dimmed",style:{userSelect:"none"},children:"No description"}),n.nonEmpty&&y.jsxs("section",{children:[y.jsx(wee,{children:"Description"}),y.jsx(zp,{value:n,fontSize:"sm",emptyText:"No description",className:fe({userSelect:"all"})})]})]})},DGe=({label:e,value:r})=>y.jsxs(Or,{gap:"0.5",children:[y.jsx(PGe,{children:e}),y.jsx(ec,{size:"sm",radius:"sm",variant:"light",color:"gray",tt:"none",fw:500,classNames:{root:fe({width:"max-content",overflow:"visible",px:"1",color:{_dark:"mantine.colors.gray[4]",_light:"mantine.colors.gray[8]"}}),label:fe({overflow:"visible"}),section:fe({opacity:.5,userSelect:"none",marginInlineEnd:"0.5"})},children:r})]}),PGe=Ed("div",{base:{color:"mantine.colors.dimmed",fontWeight:500,fontSize:"xxs",userSelect:"none"}}),MGe=()=>{const e=E2(),{enableVscode:r}=sr(),{onOpenSource:n}=mg();return r?y.jsx(bee,{label:"Open View Source",children:y.jsx(cc,{onClick:o=>{o.stopPropagation(),n?.({view:e})},children:y.jsx(dg,{style:{width:"60%",height:"60%"}})})}):null};function kee(e,r){if(e._type==="dynamic")try{if(r??=e.variant,r==="sequence")return e.sequenceLayout.bounds}catch{}return e.bounds}function NGe({points:e,controlPoints:r,labelBBox:n}){let o=1/0,i=1/0,a=-1/0,l=-1/0;if(r)for(const s of r)o=Math.min(o,s.x),i=Math.min(i,s.y),a=Math.max(a,s.x),l=Math.max(l,s.y);else for(const[s,c]of e)o=Math.min(o,s),i=Math.min(i,c),a=Math.max(a,s),l=Math.max(l,c);return n&&(o=Math.min(o,n.x),i=Math.min(i,n.y),a=Math.max(a,n.x+n.width),l=Math.max(l,n.y+n.height)),{x:o,y:i,width:a-o,height:l-i}}function BGe({nodes:e,edges:r}){return ko.expand(ko.merge(...e,...r.map(NGe)),10)}function _ee(e){const{view:{drifts:r,_layout:n,...o},xynodes:i,xystore:a}=e,{nodeLookup:l,edgeLookup:s}=a.getState(),c=new Set,d=un(o.nodes,p=>{const f=l.get(p.id);if(!f)return console.error(`Internal node not found for ${p.id}`),p;const m=i.find(k=>k.id===p.id)?.data??f.data,v=f.internals.positionAbsolute,{width:w,height:x}=_o(f);return(!d2(v,p)||p.width!==w||p.height!==x)&&c.add(p.id),{...p,shape:m.shape,color:m.color,style:{...m.style},x:Math.floor(v.x),y:Math.floor(v.y),width:Math.ceil(w),height:Math.ceil(x)}}),u=un(o.edges,p=>{const f=s.get(p.id);if(!f)return console.error(`Internal edge not found for ${p.id}`),p;const m=f.data;let v=m.controlPoints??[];const w=c.has(f.source)||c.has(f.target);v.length===0&&w&&(v=c2(m.points));const x={...ud(p,["controlPoints","labelBBox"]),points:m.points};return m.labelBBox&&(x.labelBBox=m.labelBBox),xn(v,1)&&(x.controlPoints=v),x});return{op:"save-view-snapshot",layout:{...o,_layout:"manual",bounds:BGe({nodes:d,edges:u}),nodes:d,edges:u}}}const IGe=function(e){return e.get("diagram")},See=function(e){return e.get("diagram").getSnapshot().context},Eee=()=>Rn.raise({type:"sync"},{delay:200,id:"sync"}),xg=()=>Rn.cancel("sync"),Cee=(e=50)=>Rn.raise(({event:r})=>r,{delay:e}),$ee=e=>e.op==="reset-manual-layout"||e.op==="save-view-snapshot",Ree=ep(S$e($ee)),zee=()=>Rn.assign(({system:e})=>{const r=See(e);return{beforeEditing:{xynodes:r.xynodes.map(({measured:n,...o})=>({...ud(o,["selected","dragging","resizing"]),data:ud(o.data,["dimmed","hovered"]),measured:n,initialWidth:n?.width??o.width??o.initialWidth,initialHeight:n?.height??o.height??o.initialHeight})),xyedges:r.xyedges.map(n=>({...ud(n,["selected"]),data:ud(n.data,["active","dimmed","hovered"])})),change:_ee(r),view:r.view,synched:!1}}}),OGe=()=>Rn.enqueueActions(({enqueue:e,event:r})=>{e(zee()),r.type==="edit.start"&&e.assign({editing:r.subject})}),LGe=()=>Rn.stopChild("hotkey"),kR=()=>Rn.enqueueActions(({check:e,enqueue:r,self:n})=>{const o=e("can undo"),i=n.getSnapshot().children.hotkey;if(!o&&i){r.stopChild(i);return}o&&!i&&r.spawnChild("hotkey",{id:"hotkey"})}),Tee=()=>Rn.assign(({context:e})=>{const r=e.beforeEditing;return r?{beforeEditing:null,editing:null,history:[...e.history,r]}:{editing:null}}),_R=()=>Rn.enqueueActions(({event:e,enqueue:r})=>{if(e.type==="edit.finish"&&e.wasChanged){r(Tee()),r(Eee());return}r.assign({beforeEditing:null,editing:null})}),FGe=()=>Rn.assign(({context:e})=>({beforeEditing:e.beforeEditing&&e.beforeEditing.synched===!1?{...e.beforeEditing,synched:!0}:e.beforeEditing,history:e.history.map(r=>({...r,synched:!0}))})),VGe=()=>Rn.assign(({context:e})=>e.history.length<=1?{history:[]}:{history:e.history.slice(0,e.history.length-1)}),qGe=()=>Rn.enqueueActions(({context:e,enqueue:r,system:n})=>{const o=dd(e.history);if(!o)return;r(xg()),r(VGe()),r(kR());const i=IGe(n);r.sendTo(i,{type:"update.view",view:o.view,xyedges:o.xyedges,xynodes:o.xynodes,source:"editor"}),r.assign({pendingChanges:[]}),o.synched?r.raise({type:"change",change:o.change},{delay:50}):r(Eee())}),SR=()=>Rn.assign(({context:e,system:r})=>{const n=See(r),o=_ee(n);return{pendingChanges:[...Ree(e.pendingChanges),o]}}),HGe=B3(({sendBack:e})=>{const r=$w([["mod + z",n=>{n.stopPropagation(),e({type:"undo"})},{preventDefault:!0}]]);return document.body.addEventListener("keydown",r,{capture:!0}),()=>{document.body.removeEventListener("keydown",r,{capture:!0})}}),UGe=zy(()=>{throw new Error("Not implemented")}),WGe=zy(()=>{throw new Error("Not implemented")}),jee=function(e){return e.system.get("diagram")},Rn=ns({delays:{"350ms":350,waitBeforeSync:2e3},actors:{applyLatest:UGe,executeChange:WGe,hotkey:HGe},guards:{"has pending":({context:e})=>e.pendingChanges.length>0,"can undo":({context:e})=>e.history.length>0}}),Hn={idle:{target:"#idle"},editing:{target:"#editing"},afterEdit:{target:"#afterEdit"},pending:{target:"#pending"},applyLatestToManual:{target:"#applyLatestToManual"},executeChanges:{target:"#executeChanges"}},GGe=Rn.createStateConfig({id:"idle",on:{sync:{...Hn.pending},"edit.start":{...Hn.editing}}}),YGe=Rn.createStateConfig({id:"editing",tags:"pending",entry:[OGe(),xg()],on:{change:{actions:_R(),...Hn.executeChanges},"edit.finish":{actions:_R(),...Hn.afterEdit},undo:{actions:_R(),...Hn.idle}}}),XGe=Rn.createStateConfig({id:"pending",tags:["pending"],entry:kR(),on:{sync:{reenter:!0,...Hn.pending},"edit.start":{actions:[SR()],...Hn.editing}},after:{waitBeforeSync:{actions:[SR()],...Hn.executeChanges}}}),KGe=Rn.createStateConfig({id:"afterEdit",always:[{guard:"has pending",...Hn.pending},{...Hn.idle}]}),ZGe=Rn.createStateConfig({id:"applyLatestToManual",entry:[xg(),zee()],initial:"call",on:{"*":{actions:[yE(({event:e})=>`applyLatestToManual received unexpected event: ${e.type}`),Cee(350)]}},states:{call:{invoke:{src:"applyLatest",input:({context:e})=>{const r=e.beforeEditing?.change.layout;return{current:r&&r._layout==="manual"?r:void 0,viewId:e.viewId}},onDone:{actions:jy(jee,({event:e})=>({type:"update.view",view:e.output.updated}),{delay:10}),target:"wait"},onError:{actions:[Bt({beforeEditing:null,pendingChanges:[]}),({event:e})=>{console.error(e.error)}],...Hn.idle}}},wait:{entry:Tee(),after:{"350ms":{actions:[SR(),kR()],...Hn.executeChanges}}}}}),QGe=Rn.createStateConfig({id:"executeChanges",entry:[Bt(({event:e,context:r})=>{if(e.type==="change"){if($ee(e.change))return{pendingChanges:[...Ree(r.pendingChanges),e.change]};if(!r.pendingChanges.includes(e.change))return{pendingChanges:[...r.pendingChanges,e.change]}}return{}}),xg()],invoke:{src:"executeChange",input:({context:e})=>({changes:e.pendingChanges,viewId:e.viewId}),onDone:{actions:rs(({context:e,enqueue:r})=>{const n=Q1(e.pendingChanges,o=>o.op==="save-view-snapshot");n&&r.sendTo(jee,{type:"update.view-bounds",bounds:n.layout.bounds}),r.assign({pendingChanges:[]})}),...Hn.idle},onError:{actions:({event:e})=>{console.error(e.error)},...Hn.afterEdit}},on:{"*":{actions:Cee()}}}),JGe=Rn.createMachine({id:"editor",context:({input:e})=>({viewId:e.viewId,beforeEditing:null,editing:null,pendingChanges:[],history:[]}),initial:"idle",states:{idle:GGe,editing:YGe,pending:XGe,afterEdit:KGe,applyLatestToManual:ZGe,executeChanges:QGe},on:{cancel:{actions:[xg(),Bt({editing:null,beforeEditing:null,pendingChanges:[]})],...Hn.idle},synced:{actions:FGe()},undo:{guard:"can undo",actions:qGe(),...Hn.idle},change:{...Hn.executeChanges},applyLatestToManual:{...Hn.applyLatestToManual},reset:{actions:[xg(),Bt({history:[],editing:null,beforeEditing:null,pendingChanges:[]}),LGe()],...Hn.idle}}}),Aee=JGe,Dee={};function Pee(e,r){return e===r?e:(r=r.map(n=>{const o=e.find(l=>l.id===n.id&&l.type===n.type&&l.source===n.source&&l.target===n.target);if(!o)return n;const i=tt(o.data,n.data),a=i?o.data:n.data;return i&&tt(o.hidden,n.hidden??o.hidden)&&tt(o.selected,n.selected??o.selected)&&tt(o.selectable,n.selectable??o.selectable)&&tt(o.focusable,n.focusable??o.focusable)&&tt(o.animated,n.animated??o.animated)&&tt(o.className,n.className)&&tt(o.zIndex,n.zIndex??o.zIndex)&&tt(o.label,n.label)&&tt(o.sourceHandle,n.sourceHandle)&&tt(o.targetHandle,n.targetHandle)&&tt(o.style??Dee,n.style??Dee)?o:{...ry(o,ra),...ry(n,ra),data:a}}),Oq(e,r)?e:r)}function ER(e,r){return ra(r)?Pee(e,r):(r=e,n=>Pee(n,r))}const N2={};function Mee(e,r){return e===r?e:(r=r.map(n=>{const o=e.find(p=>p.id===n.id&&p.type===n.type);if(!o)return n;const i=Mq(o.data,n.data);let a=i?o.data:n.data;i||(ra(o.data.hovered)&&!ra(n.data.hovered)&&(a={...a,hovered:o.data.hovered}),ra(o.data.dimmed)&&!ra(n.data.dimmed)&&(a={...a,dimmed:o.data.dimmed}));const{width:l,height:s}=_o(o),c=Object.hasOwn(o,"handles")||Object.hasOwn(n,"handles"),d=!c||tt(o.handles??[],n.handles??[]);if(i&&d&&tt(l,n.width??n.initialWidth)&&tt(s,n.height??n.initialHeight)&&tt(o.parentId??null,n.parentId??null)&&tt(o.hidden,n.hidden??o.hidden)&&tt(o.selected,n.selected??o.selected)&&tt(o.selectable,n.selectable??o.selectable)&&tt(o.focusable,n.focusable??o.focusable)&&tt(o.draggable,n.draggable??o.draggable)&&tt(o.dragHandle,n.dragHandle)&&tt(o.className,n.className)&&tt(o.zIndex,n.zIndex??o.zIndex)&&tt(o.position,n.position)&&tt(o.domAttributes??N2,n.domAttributes??N2)&&tt(o.style??N2,n.style??N2))return o;const u=c&&d?o.handles:n.handles;return{...ry(o,(p,f)=>ra(p)&&f!=="parentId"),..."measured"in o&&{measured:{width:n.width??n.initialWidth,height:n.height??n.initialHeight}},...ry(n,ra),width:n.width??n.initialWidth,height:n.height??n.initialHeight,...u&&{handles:u},data:a}}),Oq(e,r)?e:r)}function B2(e,r){return ra(r)?Mee(e,r):(r=e,n=>Mee(n,r))}const CR={top:"40px",bottom:"22px",left:"22px",right:"22px"};function Nee(e){const r=[],n=[],o=new Map,i=x8.from(e.nodes.reduce((s,c)=>(o.set(c.id,c),c.parent||s.push({node:c,parent:null}),s),[])),a=s=>gt(o.get(s),`Node not found: ${s}`);let l;for(;l=i.dequeue();){const{node:s,parent:c}=l,d=xn(s.children,1)||s.kind==w1;if(d)for(const w of s.children)i.enqueue({node:a(w),parent:s});const u={x:s.x,y:s.y};c&&(u.x-=c.x,u.y-=c.y);const p=s.id,f={id:p,position:u,zIndex:d?lc.Compound:lc.Element,style:{width:s.width,height:s.height},initialWidth:s.width,initialHeight:s.height,...c&&{parentId:c.id}},m=s.modelRef??null,v={navigateTo:s.navigateTo??null};switch(!0){case s.kind===w2.Empty:{r.push({...f,type:"empty",data:{column:s.column}});break}case(d&&!!m):{r.push({...f,type:"compound",data:{id:p,column:s.column,title:s.title,color:s.color,shape:s.shape,style:s.style,depth:s.depth??0,icon:s.icon??"none",ports:s.ports,existsInCurrentView:s.existsInCurrentView,fqn:m,...v}});break}default:He(m,"Element should have either modelRef or deploymentRef"),r.push({...f,type:"element",data:{id:p,column:s.column,fqn:m,title:s.title,technology:s.technology,description:s.description,height:s.height,width:s.width,color:s.color,shape:s.shape,icon:s.icon??"none",ports:s.ports,style:s.style,existsInCurrentView:s.existsInCurrentView,tags:s.tags,...v}})}}for(const s of e.edges){const c=s.source,d=s.target,u=s.id;if(!xn(s.points,2)){console.error("edge should have at least 2 points",s);continue}if(!xn(s.relations,1)){console.error("edge should have at least 1 relation",s);continue}n.push({id:u,type:"relationship",source:c,target:d,sourceHandle:s.sourceHandle,targetHandle:s.targetHandle,data:{sourceFqn:s.sourceFqn,targetFqn:s.targetFqn,relations:s.relations,color:s.color??"gray",label:s.label,navigateTo:s.navigateTo??null,line:s.line??"dashed",existsInCurrentView:s.existsInCurrentView},interactionWidth:20})}return{xynodes:r,xyedges:n}}const Bee=e=>e.find(r=>r.data.column==="subjects"&&ty(r.parentId)),eYe=zy(async({input:e,self:r,signal:n})=>{const{subjectId:o,navigateFromNode:i,xyflow:a,xystore:l,update:s}=e;let{nodes:c,width:d,height:u}=l.getState();const p=Nee(s),f=()=>{const{nodes:j,edges:I}=l.getState();return{xynodes:B2(j,p.xynodes),xyedges:ER(I,p.xyedges)}},m=gt(r._parent);let v=a.getZoom();const w=Math.max(v,1),x=Ws(s.bounds,d,u,xa,w,CR),k=p.xynodes.find(j=>j.type!=="empty"&&j.data.column==="subjects"&&j.data.fqn===o)??Bee(p.xynodes),C=Bee(c),_=i?c.find(j=>j.id===i):c.find(j=>j.type!=="empty"&&j.data.column!=="subjects"&&j.data.fqn===o);if(!k||!_||k.type==="empty"||!C||k.data.fqn===C.data.fqn)return await a.setViewport(x),f();const $={x:k.position.x+(k.initialWidth??0)/2,y:k.position.y+(k.initialHeight??0)/2},R=a.getInternalNode(C.id),T=n$(R),A=new Set;if(c.forEach(j=>{if(j.id!==_.id){if(j.data.column==="subjects"){A.add(j.id);return}j.parentId&&(j.parentId===_.id||A.has(j.parentId))&&A.add(j.id)}}),c=B2(c,c.flatMap(j=>A.has(j.id)?[]:j.id!==_.id?{...j,data:{...j.data,dimmed:j.data.column==="subjects"?"immediate":!0}}:{...ud(j,["parentId"]),position:{x:T.x-j.initialWidth/2,y:T.y-j.initialHeight/2},zIndex:lc.Max,hidden:!1,data:{...j.data,dimmed:!1}})),m.send({type:"update.xydata",xynodes:c,xyedges:[]}),await XO(120),p.xynodes=p.xynodes.map(tr.setDimmed(!1)),n.aborted)return f();const z=300;return a.setCenter(T.x,T.y,{zoom:v,duration:z,interpolate:"smooth"}),await XO(z),await a.setCenter($.x,$.y,{zoom:v}),f()}),dc=ns({actors:{layouter:eYe},guards:{hasViewId:({context:e})=>e.viewId!==null,isReady:({context:e})=>e.xyflow!==null&&e.xystore!==null&&e.layouted!==null,anotherSubject:({context:e,event:r})=>r.type==="update.view"?e.layouted?.subject!==r.layouted.subject:!1}}),Iee=()=>dc.assign(({event:e})=>(ht(e,"xyflow.init"),{xyflow:e.instance,xystore:e.store})),Oee=()=>dc.assign(({event:e})=>(ht(e,"update.view"),{layouted:e.layouted,...Nee(e.layouted)})),tYe=()=>dc.createAction(({context:e})=>{He(e.xystore,"xystore is not initialized");const{domNode:r,updateNodeInternals:n}=e.xystore.getState(),o=new Set(e.xyedges.flatMap(l=>[l.source,l.target]));if(o.size===0||!r)return;const i=new Map,a=r.querySelectorAll(".react-flow__node");for(const l of a){const s=l.getAttribute("data-id");s&&o.has(s)&&i.set(s,{id:s,nodeElement:l,force:!0})}n(i,{triggerFitView:!1})}),$R=e=>dc.createAction(({context:r,event:n})=>{e??=n.type==="fitDiagram"?n:{};let{duration:o,bounds:i}=e??{};o??=450;const{xyflow:a,xystore:l}=r;He(a,"xyflow is not initialized"),He(l,"xystore is not initialized"),i??=r.layouted?.bounds;const s=Math.max(a.getZoom(),1);if(i){const{width:c,height:d}=l.getState(),u=Ws(i,c,d,xa,s,CR);a.setViewport(u,o>0?{duration:o,interpolate:"smooth"}:void 0).catch(console.error)}else a.fitView({minZoom:xa,maxZoom:s,padding:CR,...o>0&&{duration:o,interpolate:"smooth"}}).catch(console.error)}),rYe=()=>dc.assign(({context:e,event:r})=>(ht(r,"xyflow.applyNodeChanges"),{xynodes:rw(r.changes,e.xynodes)})),nYe=()=>dc.assign(({context:e,event:r})=>(ht(r,"xyflow.applyEdgeChanges"),{xyedges:nw(r.changes,e.xyedges)})),Lee=()=>dc.enqueueActions(({system:e,event:r})=>{if(r.type!=="xyflow.edgeClick")return;const n=zr(e).diagramActorRef,o=r.edge.data.relations;xn(o,1)&&n.send({type:"open.source",relation:o[0]})}),Fee=()=>dc.assign({xyflow:null,layouted:null,xystore:null,xyedges:[],xynodes:[]}),oYe=dc.createMachine({id:"relationships-browser",context:({input:e})=>({subject:e.subject,viewId:e.viewId,scope:e.viewId?e.scope:"global",closeable:e.closeable??!0,enableSelectSubject:e.enableSelectSubject??!0,enableChangeScope:e.enableChangeScope??!0,xyflow:null,xystore:null,layouted:null,navigateFromNode:null,xynodes:[],xyedges:[]}),initial:"initializing",on:{"xyflow.applyNodeChanges":{actions:rYe()},"xyflow.applyEdgeChanges":{actions:nYe()}},states:{initializing:{on:{"xyflow.init":{actions:Iee(),target:"isReady"},"update.view":{actions:Oee(),target:"isReady"},stop:"closed",close:"closed"}},isReady:{always:[{guard:"isReady",actions:[$R({duration:0}),ai({type:"xyflow.updateNodeInternals"},{delay:150})],target:"active"},{target:"initializing"}]},active:{initial:"idle",tags:["active"],on:{"xyflow.nodeClick":{actions:rs(({event:e,enqueue:r})=>{if("fqn"in e.node.data){const n=e.node.data.fqn;r.raise({type:"navigate.to",subject:n,fromNode:e.node.id})}})},"xyflow.edgeClick":[{guard:"hasViewId",actions:rs(({event:e,context:r,system:n,enqueue:o})=>{e.edge.selected||e.edge.data.relations.length>1?o.sendTo(zr(n).overlaysActorRef,{type:"open.relationshipDetails",viewId:r.viewId,source:e.edge.data.sourceFqn,target:e.edge.data.targetFqn}):o(Lee())})},{actions:Lee()}],"navigate.to":{actions:[Bt({subject:({event:e})=>e.subject,viewId:({event:e,context:r})=>e.viewId??r.viewId??null,navigateFromNode:({event:e})=>e.fromNode??null})]},"xyflow.paneDblClick":{actions:$R()},"update.view":{actions:Oee(),target:".layouting"},"change.scope":{actions:Bt({scope:({event:e})=>e.scope})},"xyflow.updateNodeInternals":{actions:tYe()},fitDiagram:{actions:$R()},"xyflow.resized":{actions:[ua("fitDiagram"),ai({type:"fitDiagram"},{id:"fitDiagram",delay:300})]},"xyflow.init":{actions:Iee()},"xyflow.unmount":{target:"initializing"},close:"closed"},states:{idle:{on:{"xyflow.edgeMouseEnter":{actions:[Bt({xyedges:({context:e,event:r})=>{const n=e.xyedges.some(o=>o.data.dimmed!==!1||o.selected);return e.xyedges.map(o=>o.id===r.edge.id?tr.setData(o,{hovered:!0,dimmed:!1}):n&&!o.selected?tr.setDimmed(o,"immediate"):o)}}),ua("undim.edges"),ua("dim.nonhovered.edges"),ai({type:"dim.nonhovered.edges"},{id:"dim.nonhovered.edges",delay:200})]},"xyflow.edgeMouseLeave":{actions:[Bt({xyedges:({context:e,event:r})=>e.xyedges.map(n=>n.id===r.edge.id?tr.setHovered(n,!1):n)}),ua("dim.nonhovered.edges"),ai({type:"undim.edges"},{id:"undim.edges",delay:400})]},"dim.nonhovered.edges":{actions:Bt({xyedges:({context:e})=>e.xyedges.map(r=>r.data.hovered?r:tr.setDimmed(r,r.data.dimmed==="immediate"?"immediate":!0))})},"undim.edges":{actions:Bt({xyedges:({context:e})=>e.xyedges.map(tr.setDimmed(!1))})},"xyflow.selectionChange":{actions:rs(({event:e,context:r,enqueue:n})=>{e.edges.length===0&&r.xyedges.some(o=>o.data.dimmed)&&!r.xyedges.some(o=>o.data.hovered)&&n.raise({type:"undim.edges"})})}}},layouting:{invoke:{id:"layouter",src:"layouter",input:({context:e})=>({subjectId:e.subject,navigateFromNode:e.navigateFromNode,xyflow:gt(e.xyflow),xystore:gt(e.xystore),update:gt(e.layouted)}),onDone:{target:"idle",actions:rs(({enqueue:e,event:r})=>{e.assign({xynodes:r.output.xynodes,xyedges:r.output.xyedges,navigateFromNode:null}),e.raise({type:"fitDiagram",duration:200},{id:"fitDiagram",delay:50});for(let n=1;n<8;n++)e.raise({type:"xyflow.updateNodeInternals"},{delay:120+n*75})})}},on:{"update.xydata":{actions:Bt({xynodes:({event:e})=>e.xynodes,xyedges:({event:e})=>e.xyedges})},"xyflow.applyEdgeChanges":{},"xyflow.applyNodeChanges":{}}}}},closed:{id:"closed",type:"final",entry:Fee()}},exit:Fee()}),Vee=oYe,iYe=ns({actors:{relationshipsBrowserLogic:Vee}}).createMachine({id:"element-details",context:({input:e})=>({...e,initiatedFrom:{node:e.initiatedFrom?.node??null,clientRect:e.initiatedFrom?.clientRect??null}}),initial:"active",states:{active:{entry:T3("relationshipsBrowserLogic",{id:({self:e})=>`${e.id}-relationships`,input:({context:e})=>({subject:e.subject,viewId:e.currentView.id,scope:"view",enableSelectSubject:!1,enableChangeScope:!0,closeable:!1})}),exit:[jy(({self:e})=>`${e.id}-relationships`,{type:"close"}),$y(({self:e})=>`${e.id}-relationships`)],on:{"change.subject":{actions:Bt({subject:({event:e})=>e.subject})},close:"closed"}},closed:{id:"closed",type:"final"}}}),aYe=iYe;function lYe(e){const r=[],n=[],o=new Map,i=x8.from(e.nodes.reduce((s,c)=>(o.set(c.id,c),c.parent||s.push({node:c,parent:null}),s),[])),a=s=>gt(o.get(s),`Node not found: ${s}`);let l;for(;l=i.dequeue();){const{node:s,parent:c}=l,d=xn(s.children,1);if(d)for(const w of s.children)i.enqueue({node:a(w),parent:s});const u={x:s.x,y:s.y};c&&(u.x-=c.x,u.y-=c.y);const p=s.id,f={id:p,draggable:!1,deletable:!1,position:u,zIndex:d?lc.Compound:lc.Element,style:{width:s.width,height:s.height},initialWidth:s.width,initialHeight:s.height,...c&&{parentId:c.id}},m=s.modelRef,v={navigateTo:s.navigateTo??null};switch(!0){case d:{r.push({...f,type:"compound",data:{id:p,column:s.column,title:s.title,color:s.color,style:s.style,depth:s.depth??0,icon:s.icon??"none",ports:s.ports,fqn:m,...v}});break}default:r.push({...f,type:"element",data:{id:p,column:s.column,fqn:m,title:s.title,technology:s.technology,description:s.description??null,height:s.height,width:s.width,color:s.color,shape:s.shape,icon:s.icon??"none",ports:s.ports,style:s.style,tags:s.tags,...v}})}}for(const{source:s,target:c,relationId:d,label:u,technology:p,description:f,navigateTo:m=null,color:v="gray",line:w="dashed",...x}of e.edges){const k=x.id;n.push({id:k,type:"relationship",source:s,target:c,sourceHandle:x.sourceHandle,targetHandle:x.targetHandle,deletable:!1,data:{relationId:d,label:u,color:v,navigateTo:m,line:w,description:f??null,...p&&{technology:p}}})}return{xynodes:r,xyedges:n,bounds:e.bounds}}function qee(e){return"edgeId"in e?(He(pw(e.edgeId),"edgeId is required"),{edgeId:e.edgeId}):{source:e.source,target:e.target}}const Hee={x:"22px",y:"22px"},sYe=ns({actions:{"xyflow:fitDiagram":({context:e},r)=>{let{duration:n,bounds:o}=r??{};n??=450;const{xyflow:i,xystore:a}=e;He(i,"xyflow is not initialized"),He(a,"xystore is not initialized"),o??=e.bounds;const l=Math.max(i.getZoom(),1);if(o){const{width:s,height:c}=a.getState(),d=Ws(o,s,c,xa,l,Hee);i.setViewport(d,n>0?{duration:n}:void 0).catch(console.error)}else i.fitView({minZoom:xa,maxZoom:l,padding:Hee,...n>0&&{duration:n,interpolate:"smooth"}}).catch(console.error)},"xyflow:updateNodeInternals":({context:e})=>{He(e.xystore,"xystore is not initialized");const{domNode:r,updateNodeInternals:n}=e.xystore.getState(),o=new Set(e.xyedges.flatMap(a=>[a.source,a.target]));if(o.size===0||!r)return;const i=new Map;for(const a of o){const l=r.querySelector(`.react-flow__node[data-id="${a}"]`);l&&i.set(a,{id:a,nodeElement:l,force:!0})}n(i,{triggerFitView:!1})},updateXYFlow:Bt(({context:e,event:r})=>{ht(r,"xyflow.init");let n=e.initialized;return n.xyflow||(n={...n,xyflow:!0}),{initialized:n,xyflow:r.instance,xystore:r.store}}),updateLayoutData:Bt(({context:e,event:r})=>{ht(r,"update.layoutData");const{xynodes:n,xyedges:o,bounds:i}=lYe(r.data);let a=e.initialized;return a.xydata||(a={...a,xydata:!0}),{initialized:a,xynodes:B2(e.xynodes,n),xyedges:ER(e.xyedges,o),bounds:Ir(e.bounds,i)?e.bounds:i}}),"open relationship source":rs(({system:e,event:r})=>{if(r.type!=="xyflow.edgeClick")return;const n=zr(e).diagramActorRef,o=r.edge.data.relationId;o&&n.send({type:"open.source",relation:o})})},guards:{isReady:({context:e})=>e.initialized.xydata&&e.initialized.xyflow,"enable: navigate.to":()=>!0}}).createMachine({initial:"initializing",context:({input:e})=>({subject:qee(e),viewId:e.viewId,bounds:{x:0,y:0,width:200,height:200},initialized:{xydata:!1,xyflow:!1},xyflow:null,xystore:null,xynodes:[],xyedges:[]}),states:{initializing:{on:{"xyflow.init":{actions:"updateXYFlow",target:"isReady"},"update.layoutData":{actions:"updateLayoutData",target:"isReady"},close:{target:"closed"}}},isReady:{always:[{guard:"isReady",actions:[{type:"xyflow:fitDiagram",params:{duration:0}},ai({type:"xyflow.updateNodeInternals"},{delay:50})],target:"ready"},{target:"initializing"}]},ready:{on:{"xyflow.edgeMouseEnter":{actions:[Bt({xyedges:({context:e,event:r})=>{const n=e.xyedges.some(o=>o.data.dimmed===!0||o.data.dimmed==="immediate");return e.xyedges.map(o=>o.id===r.edge.id?tr.setData(o,{hovered:!0,dimmed:!1}):n&&!o.selected?tr.setDimmed(o,"immediate"):o)}}),ua("undim.edges"),ua("dim.nonhovered.edges"),ai({type:"dim.nonhovered.edges"},{id:"dim.nonhovered.edges",delay:100})]},"xyflow.edgeMouseLeave":{actions:[Bt({xyedges:({context:e,event:r})=>e.xyedges.map(n=>n.id===r.edge.id?tr.setHovered(n,!1):n)}),ua("dim.nonhovered.edges"),ai({type:"undim.edges"},{id:"undim.edges",delay:400})]},"dim.nonhovered.edges":{actions:Bt({xyedges:({context:e})=>e.xyedges.map(r=>tr.setDimmed(r,r.data.hovered!==!0))})},"undim.edges":{actions:Bt({xyedges:({context:e})=>e.xyedges.some(r=>r.selected===!0)?e.xyedges.map(r=>tr.setDimmed(r,r.selected!==!0?r.data.dimmed||"immediate":!1)):e.xyedges.map(tr.setDimmed(!1))})},"xyflow.selectionChange":{actions:rs(({event:e,context:r,enqueue:n})=>{e.edges.length===0&&r.xyedges.some(o=>o.data.dimmed)&&!r.xyedges.some(o=>o.data.hovered)&&n.raise({type:"undim.edges"})})},"update.layoutData":{actions:["updateLayoutData",ua("fitDiagram"),ai({type:"fitDiagram",duration:0},{id:"fitDiagram",delay:50}),ai({type:"xyflow.updateNodeInternals"},{delay:75})]},"xyflow.init":{actions:"updateXYFlow"},"xyflow.applyNodeChanges":{actions:Bt({xynodes:({context:e,event:r})=>rw(r.changes,e.xynodes)})},"xyflow.applyEdgeChanges":{actions:Bt({xyedges:({context:e,event:r})=>nw(r.changes,e.xyedges)})},"xyflow.paneDblClick":{actions:"xyflow:fitDiagram"},"xyflow.edgeClick":{actions:"open relationship source"},"navigate.to":{actions:Bt({subject:({event:e})=>qee(e.params),viewId:({context:e,event:r})=>r.params.viewId??e.viewId})},close:{target:"closed"}},exit:Bt({xyedges:[],xynodes:[],initialized:{xydata:!1,xyflow:!1},xyflow:null,xystore:null})},closed:{type:"final"}},on:{fitDiagram:{actions:{type:"xyflow:fitDiagram",params:rp("event")}},"xyflow.resized":{actions:[ua("fitDiagram"),ai({type:"fitDiagram"},{id:"fitDiagram",delay:200})]},"xyflow.updateNodeInternals":{actions:"xyflow:updateNodeInternals"}}}),cYe=sYe;var Nd={},ft={},Uee=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},wg={},Wee;function RR(){if(Wee)return wg;Wee=1,Object.defineProperty(wg,"__esModule",{value:!0});function e(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof Uee<"u")return Uee}function r(){const i=e();if(i.__xstate__)return i.__xstate__}function n(i){if(typeof window>"u")return;const a=r();a&&a.register(i)}const o=i=>{if(typeof window>"u")return;const a=r();a&&a.register(i)};return wg.devToolsAdapter=o,wg.getGlobal=e,wg.registerService=n,wg}var Gee;function I2(){if(Gee)return ft;Gee=1;var e=RR();class r{constructor(ee){this._process=ee,this._active=!1,this._current=null,this._last=null}start(){this._active=!0,this.flush()}clear(){this._current&&(this._current.next=null,this._last=this._current)}enqueue(ee){const oe={value:ee,next:null};if(this._current){this._last.next=oe,this._last=oe;return}this._current=oe,this._last=oe,this._active&&this.flush()}flush(){for(;this._current;){const ee=this._current;this._process(ee.value),this._current=ee.next}this._last=null}}const n=".",o="",i="",a="#",l="*",s="xstate.init",c="xstate.error",d="xstate.stop";function u(J,ee){return{type:`xstate.after.${J}.${ee}`}}function p(J,ee){return{type:`xstate.done.state.${J}`,output:ee}}function f(J,ee){return{type:`xstate.done.actor.${J}`,output:ee,actorId:J}}function m(J,ee){return{type:`xstate.error.actor.${J}`,error:ee,actorId:J}}function v(J){return{type:s,input:J}}function w(J){setTimeout(()=>{throw J})}const x=typeof Symbol=="function"&&Symbol.observable||"@@observable";function k(J,ee){const oe=_(J),ae=_(ee);return typeof ae=="string"?typeof oe=="string"?ae===oe:!1:typeof oe=="string"?oe in ae:Object.keys(oe).every(le=>le in ae?k(oe[le],ae[le]):!1)}function C(J){if(j(J))return J;const ee=[];let oe="";for(let ae=0;aetypeof ee>"u"||typeof ee=="string"?{target:ee}:ee)}function L(J){if(!(J===void 0||J===o))return A(J)}function H(J,ee,oe){const ae=typeof J=="object",le=ae?J:void 0;return{next:(ae?J.next:J)?.bind(le),error:(ae?J.error:ee)?.bind(le),complete:(ae?J.complete:oe)?.bind(le)}}function P(J,ee){return`${ee}.${J}`}function V(J,ee){const oe=ee.match(/^xstate\.invoke\.(\d+)\.(.*)/);if(!oe)return J.implementations.actors[ee];const[,ae,le]=oe,ve=J.getStateNodeById(le).config.invoke;return(Array.isArray(ve)?ve[ae]:ve).src}function B(J){return[...new Set([...J._nodes.flatMap(ee=>ee.ownEvents)])]}function F(J,ee){return`${J.sessionId}.${ee}`}let q=0;function G(J,ee){const oe=new Map,ae=new Map,le=new WeakMap,ve=new Set,De={},{clock:Fe,logger:rt}=ee,lt={schedule:(Ze,pt,vt,Lt,Mo=Math.random().toString(36).slice(2))=>{const uh={source:Ze,target:pt,event:vt,delay:Lt,id:Mo,startedAt:Date.now()},Vi=F(Ze,Mo);Ke._snapshot._scheduledEvents[Vi]=uh;const su=Fe.setTimeout(()=>{delete De[Vi],delete Ke._snapshot._scheduledEvents[Vi],Ke._relay(Ze,pt,vt)},Lt);De[Vi]=su},cancel:(Ze,pt)=>{const vt=F(Ze,pt),Lt=De[vt];delete De[vt],delete Ke._snapshot._scheduledEvents[vt],Lt!==void 0&&Fe.clearTimeout(Lt)},cancelAll:Ze=>{for(const pt in Ke._snapshot._scheduledEvents){const vt=Ke._snapshot._scheduledEvents[pt];vt.source===Ze&<.cancel(Ze,vt.id)}}},Ot=Ze=>{if(!ve.size)return;const pt={...Ze,rootId:J.sessionId};ve.forEach(vt=>vt.next?.(pt))},Ke={_snapshot:{_scheduledEvents:(ee?.snapshot&&ee.snapshot.scheduler)??{}},_bookId:()=>`x:${q++}`,_register:(Ze,pt)=>(oe.set(Ze,pt),Ze),_unregister:Ze=>{oe.delete(Ze.sessionId);const pt=le.get(Ze);pt!==void 0&&(ae.delete(pt),le.delete(Ze))},get:Ze=>ae.get(Ze),getAll:()=>Object.fromEntries(ae.entries()),_set:(Ze,pt)=>{const vt=ae.get(Ze);if(vt&&vt!==pt)throw new Error(`Actor with system ID '${Ze}' already exists.`);ae.set(Ze,pt),le.set(pt,Ze)},inspect:Ze=>{const pt=H(Ze);return ve.add(pt),{unsubscribe(){ve.delete(pt)}}},_sendInspectionEvent:Ot,_relay:(Ze,pt,vt)=>{Ke._sendInspectionEvent({type:"@xstate.event",sourceRef:Ze,actorRef:pt,event:vt}),pt._send(vt)},scheduler:lt,getSnapshot:()=>({_scheduledEvents:{...Ke._snapshot._scheduledEvents}}),start:()=>{const Ze=Ke._snapshot._scheduledEvents;Ke._snapshot._scheduledEvents={};for(const pt in Ze){const{source:vt,target:Lt,event:Mo,delay:uh,id:Vi}=Ze[pt];lt.schedule(vt,Lt,Mo,uh,Vi)}},_clock:Fe,_logger:rt};return Ke}let U=!1;const Y=1;let K=(function(J){return J[J.NotStarted=0]="NotStarted",J[J.Running=1]="Running",J[J.Stopped=2]="Stopped",J})({});const O={clock:{setTimeout:(J,ee)=>setTimeout(J,ee),clearTimeout:J=>clearTimeout(J)},logger:console.log.bind(console),devTools:!1};class W{constructor(ee,oe){this.logic=ee,this._snapshot=void 0,this.clock=void 0,this.options=void 0,this.id=void 0,this.mailbox=new r(this._process.bind(this)),this.observers=new Set,this.eventListeners=new Map,this.logger=void 0,this._processingStatus=K.NotStarted,this._parent=void 0,this._syncSnapshot=void 0,this.ref=void 0,this._actorScope=void 0,this.systemId=void 0,this.sessionId=void 0,this.system=void 0,this._doneEvent=void 0,this.src=void 0,this._deferred=[];const ae={...O,...oe},{clock:le,logger:ve,parent:De,syncSnapshot:Fe,id:rt,systemId:lt,inspect:Ot}=ae;this.system=De?De.system:G(this,{clock:le,logger:ve}),Ot&&!De&&this.system.inspect(H(Ot)),this.sessionId=this.system._bookId(),this.id=rt??this.sessionId,this.logger=oe?.logger??this.system._logger,this.clock=oe?.clock??this.system._clock,this._parent=De,this._syncSnapshot=Fe,this.options=ae,this.src=ae.src??ee,this.ref=this,this._actorScope={self:this,id:this.id,sessionId:this.sessionId,logger:this.logger,defer:Ke=>{this._deferred.push(Ke)},system:this.system,stopChild:Ke=>{if(Ke._parent!==this)throw new Error(`Cannot stop child actor ${Ke.id} of ${this.id} because it is not a child`);Ke._stop()},emit:Ke=>{const Ze=this.eventListeners.get(Ke.type),pt=this.eventListeners.get("*");if(!Ze&&!pt)return;const vt=[...Ze?Ze.values():[],...pt?pt.values():[]];for(const Lt of vt)try{Lt(Ke)}catch(Mo){w(Mo)}},actionExecutor:Ke=>{const Ze=()=>{if(this._actorScope.system._sendInspectionEvent({type:"@xstate.action",actorRef:this,action:{type:Ke.type,params:Ke.params}}),!Ke.exec)return;const pt=U;try{U=!0,Ke.exec(Ke.info,Ke.params)}finally{U=pt}};this._processingStatus===K.Running?Ze():this._deferred.push(Ze)}},this.send=this.send.bind(this),this.system._sendInspectionEvent({type:"@xstate.actor",actorRef:this}),lt&&(this.systemId=lt,this.system._set(lt,this)),this._initState(oe?.snapshot??oe?.state),lt&&this._snapshot.status!=="active"&&this.system._unregister(this)}_initState(ee){try{this._snapshot=ee?this.logic.restoreSnapshot?this.logic.restoreSnapshot(ee,this._actorScope):ee:this.logic.getInitialSnapshot(this._actorScope,this.options?.input)}catch(oe){this._snapshot={status:"error",output:void 0,error:oe}}}update(ee,oe){this._snapshot=ee;let ae;for(;ae=this._deferred.shift();)try{ae()}catch(le){this._deferred.length=0,this._snapshot={...ee,status:"error",error:le}}switch(this._snapshot.status){case"active":for(const le of this.observers)try{le.next?.(ee)}catch(ve){w(ve)}break;case"done":for(const le of this.observers)try{le.next?.(ee)}catch(ve){w(ve)}this._stopProcedure(),this._complete(),this._doneEvent=f(this.id,this._snapshot.output),this._parent&&this.system._relay(this,this._parent,this._doneEvent);break;case"error":this._error(this._snapshot.error);break}this.system._sendInspectionEvent({type:"@xstate.snapshot",actorRef:this,event:oe,snapshot:ee})}subscribe(ee,oe,ae){const le=H(ee,oe,ae);if(this._processingStatus!==K.Stopped)this.observers.add(le);else switch(this._snapshot.status){case"done":try{le.complete?.()}catch(ve){w(ve)}break;case"error":{const ve=this._snapshot.error;if(!le.error)w(ve);else try{le.error(ve)}catch(De){w(De)}break}}return{unsubscribe:()=>{this.observers.delete(le)}}}on(ee,oe){let ae=this.eventListeners.get(ee);ae||(ae=new Set,this.eventListeners.set(ee,ae));const le=oe.bind(void 0);return ae.add(le),{unsubscribe:()=>{ae.delete(le)}}}start(){if(this._processingStatus===K.Running)return this;this._syncSnapshot&&this.subscribe({next:oe=>{oe.status==="active"&&this.system._relay(this,this._parent,{type:`xstate.snapshot.${this.id}`,snapshot:oe})},error:()=>{}}),this.system._register(this.sessionId,this),this.systemId&&this.system._set(this.systemId,this),this._processingStatus=K.Running;const ee=v(this.options.input);switch(this.system._sendInspectionEvent({type:"@xstate.event",sourceRef:this._parent,actorRef:this,event:ee}),this._snapshot.status){case"done":return this.update(this._snapshot,ee),this;case"error":return this._error(this._snapshot.error),this}if(this._parent||this.system.start(),this.logic.start)try{this.logic.start(this._snapshot,this._actorScope)}catch(oe){return this._snapshot={...this._snapshot,status:"error",error:oe},this._error(oe),this}return this.update(this._snapshot,ee),this.options.devTools&&this.attachDevTools(),this.mailbox.start(),this}_process(ee){let oe,ae;try{oe=this.logic.transition(this._snapshot,ee,this._actorScope)}catch(le){ae={err:le}}if(ae){const{err:le}=ae;this._snapshot={...this._snapshot,status:"error",error:le},this._error(le);return}this.update(oe,ee),ee.type===d&&(this._stopProcedure(),this._complete())}_stop(){return this._processingStatus===K.Stopped?this:(this.mailbox.clear(),this._processingStatus===K.NotStarted?(this._processingStatus=K.Stopped,this):(this.mailbox.enqueue({type:d}),this))}stop(){if(this._parent)throw new Error("A non-root actor cannot be stopped directly.");return this._stop()}_complete(){for(const ee of this.observers)try{ee.complete?.()}catch(oe){w(oe)}this.observers.clear()}_reportError(ee){if(!this.observers.size){this._parent||w(ee);return}let oe=!1;for(const ae of this.observers){const le=ae.error;oe||=!le;try{le?.(ee)}catch(ve){w(ve)}}this.observers.clear(),oe&&w(ee)}_error(ee){this._stopProcedure(),this._reportError(ee),this._parent&&this.system._relay(this,this._parent,m(this.id,ee))}_stopProcedure(){return this._processingStatus!==K.Running?this:(this.system.scheduler.cancelAll(this),this.mailbox.clear(),this.mailbox=new r(this._process.bind(this)),this._processingStatus=K.Stopped,this.system._unregister(this),this)}_send(ee){this._processingStatus!==K.Stopped&&this.mailbox.enqueue(ee)}send(ee){this.system._relay(void 0,this,ee)}attachDevTools(){const{devTools:ee}=this.options;ee&&(typeof ee=="function"?ee:e.devToolsAdapter)(this)}toJSON(){return{xstate$$type:Y,id:this.id}}getPersistedSnapshot(ee){return this.logic.getPersistedSnapshot(this._snapshot,ee)}[x](){return this}getSnapshot(){return this._snapshot}}function Z(J,...[ee]){return new W(J,ee)}const Q=Z;function ie(J,ee,oe,ae,{sendId:le}){const ve=typeof le=="function"?le(oe,ae):le;return[ee,{sendId:ve},void 0]}function te(J,ee){J.defer(()=>{J.system.scheduler.cancel(J.self,ee.sendId)})}function re(J){function ee(oe,ae){}return ee.type="xstate.cancel",ee.sendId=J,ee.resolve=ie,ee.execute=te,ee}function ue(J,ee,oe,ae,{id:le,systemId:ve,src:De,input:Fe,syncSnapshot:rt}){const lt=typeof De=="string"?V(ee.machine,De):De,Ot=typeof le=="function"?le(oe):le;let Ke,Ze;return lt&&(Ze=typeof Fe=="function"?Fe({context:ee.context,event:oe.event,self:J.self}):Fe,Ke=Z(lt,{id:Ot,src:De,parent:J.self,syncSnapshot:rt,systemId:ve,input:Ze})),[Gr(ee,{children:{...ee.children,[Ot]:Ke}}),{id:le,systemId:ve,actorRef:Ke,src:De,input:Ze},void 0]}function _e(J,{actorRef:ee}){ee&&J.defer(()=>{ee._processingStatus!==K.Stopped&&ee.start()})}function ce(...[J,{id:ee,systemId:oe,input:ae,syncSnapshot:le=!1}={}]){function ve(De,Fe){}return ve.type="xstate.spawnChild",ve.id=ee,ve.systemId=oe,ve.src=J,ve.input=ae,ve.syncSnapshot=le,ve.resolve=ue,ve.execute=_e,ve}function pe(J,ee,oe,ae,{actorRef:le}){const ve=typeof le=="function"?le(oe,ae):le,De=typeof ve=="string"?ee.children[ve]:ve;let Fe=ee.children;return De&&(Fe={...Fe},delete Fe[De.id]),[Gr(ee,{children:Fe}),De,void 0]}function xe(J,ee){if(ee){if(J.system._unregister(ee),ee._processingStatus!==K.Running){J.stopChild(ee);return}J.defer(()=>{J.stopChild(ee)})}}function je(J){function ee(oe,ae){}return ee.type="xstate.stopChild",ee.actorRef=J,ee.resolve=pe,ee.execute=xe,ee}const Be=je;function Je(J,ee,{stateValue:oe}){if(typeof oe=="string"&&Ht(oe)){const ae=J.machine.getStateNodeById(oe);return J._nodes.some(le=>le===ae)}return J.matches(oe)}function st(J){function ee(){return!1}return ee.check=Je,ee.stateValue=J,ee}function Le(J,{context:ee,event:oe},{guards:ae}){return!Et(ae[0],ee,oe,J)}function St(J){function ee(oe,ae){return!1}return ee.check=Le,ee.guards=[J],ee}function Ve(J,{context:ee,event:oe},{guards:ae}){return ae.every(le=>Et(le,ee,oe,J))}function qe(J){function ee(oe,ae){return!1}return ee.check=Ve,ee.guards=J,ee}function Xe(J,{context:ee,event:oe},{guards:ae}){return ae.some(le=>Et(le,ee,oe,J))}function It(J){function ee(oe,ae){return!1}return ee.check=Xe,ee.guards=J,ee}function Et(J,ee,oe,ae){const{machine:le}=ae,ve=typeof J=="function",De=ve?J:le.implementations.guards[typeof J=="string"?J:J.type];if(!ve&&!De)throw new Error(`Guard '${typeof J=="string"?J:J.type}' is not implemented.'.`);if(typeof De!="function")return Et(De,ee,oe,ae);const Fe={context:ee,event:oe},rt=ve||typeof J=="string"?void 0:"params"in J?typeof J.params=="function"?J.params({context:ee,event:oe}):J.params:void 0;return"check"in De?De.check(ae,Fe,De):De(Fe,rt)}const be=J=>J.type==="atomic"||J.type==="final";function ke(J){return Object.values(J.states).filter(ee=>ee.type!=="history")}function Ye(J,ee){const oe=[];if(ee===J)return oe;let ae=J.parent;for(;ae&&ae!==ee;)oe.push(ae),ae=ae.parent;return oe}function yt(J){const ee=new Set(J),oe=Tr(ee);for(const ae of ee)if(ae.type==="compound"&&(!oe.get(ae)||!oe.get(ae).length))ui(ae).forEach(le=>ee.add(le));else if(ae.type==="parallel"){for(const le of ke(ae))if(le.type!=="history"&&!ee.has(le)){const ve=ui(le);for(const De of ve)ee.add(De)}}for(const ae of ee){let le=ae.parent;for(;le;)ee.add(le),le=le.parent}return ee}function xt(J,ee){const oe=ee.get(J);if(!oe)return{};if(J.type==="compound"){const le=oe[0];if(le){if(be(le))return le.key}else return{}}const ae={};for(const le of oe)ae[le.key]=xt(le,ee);return ae}function Tr(J){const ee=new Map;for(const oe of J)ee.has(oe)||ee.set(oe,[]),oe.parent&&(ee.has(oe.parent)||ee.set(oe.parent,[]),ee.get(oe.parent).push(oe));return ee}function er(J,ee){const oe=yt(ee);return xt(J,Tr(oe))}function qt(J,ee){return ee.type==="compound"?ke(ee).some(oe=>oe.type==="final"&&J.has(oe)):ee.type==="parallel"?ke(ee).every(oe=>qt(J,oe)):ee.type==="final"}const Ht=J=>J[0]===a;function Kr(J,ee){return J.transitions.get(ee)||[...J.transitions.keys()].filter(oe=>{if(oe===l)return!0;if(!oe.endsWith(".*"))return!1;const ae=oe.split("."),le=ee.split(".");for(let ve=0;veae.length-oe.length).flatMap(oe=>J.transitions.get(oe))}function Gt(J){const ee=J.config.after;if(!ee)return[];const oe=ae=>{const le=u(ae,J.id),ve=le.type;return J.entry.push(lu(le,{id:ve,delay:ae})),J.exit.push(re(ve)),ve};return Object.keys(ee).flatMap(ae=>{const le=ee[ae],ve=typeof le=="string"?{target:le}:le,De=Number.isNaN(+ae)?ae:+ae,Fe=oe(De);return A(ve).map(rt=>({...rt,event:Fe,delay:De}))}).map(ae=>{const{delay:le}=ae;return{...ln(J,ae.event,ae),delay:le}})}function ln(J,ee,oe){const ae=L(oe.target),le=oe.reenter??!1,ve=oo(J,ae),De={...oe,actions:A(oe.actions),guard:oe.guard,target:ve,source:J,reenter:le,eventType:ee,toJSON:()=>({...De,source:`#${J.id}`,target:ve?ve.map(Fe=>`#${Fe.id}`):void 0})};return De}function Wn(J){const ee=new Map;if(J.config.on)for(const oe of Object.keys(J.config.on)){if(oe===i)throw new Error('Null events ("") cannot be specified as a transition key. Use `always: { ... }` instead.');const ae=J.config.on[oe];ee.set(oe,N(ae).map(le=>ln(J,oe,le)))}if(J.config.onDone){const oe=`xstate.done.state.${J.id}`;ee.set(oe,N(J.config.onDone).map(ae=>ln(J,oe,ae)))}for(const oe of J.invoke){if(oe.onDone){const ae=`xstate.done.actor.${oe.id}`;ee.set(ae,N(oe.onDone).map(le=>ln(J,ae,le)))}if(oe.onError){const ae=`xstate.error.actor.${oe.id}`;ee.set(ae,N(oe.onError).map(le=>ln(J,ae,le)))}if(oe.onSnapshot){const ae=`xstate.snapshot.${oe.id}`;ee.set(ae,N(oe.onSnapshot).map(le=>ln(J,ae,le)))}}for(const oe of J.after){let ae=ee.get(oe.eventType);ae||(ae=[],ee.set(oe.eventType,ae)),ae.push(oe)}return ee}function fn(J,ee){const oe=typeof ee=="string"?J.states[ee]:ee?J.states[ee.target]:void 0;if(!oe&&ee)throw new Error(`Initial state node "${ee}" not found on parent state node #${J.id}`);const ae={source:J,actions:!ee||typeof ee=="string"?[]:A(ee.actions),eventType:null,reenter:!1,target:oe?[oe]:[],toJSON:()=>({...ae,source:`#${J.id}`,target:oe?[`#${oe.id}`]:[]})};return ae}function oo(J,ee){if(ee!==void 0)return ee.map(oe=>{if(typeof oe!="string")return oe;if(Ht(oe))return J.machine.getStateNodeById(oe);const ae=oe[0]===n;if(ae&&!J.parent)return xs(J,oe.slice(1));const le=ae?J.key+oe:oe;if(J.parent)try{return xs(J.parent,le)}catch(ve){throw new Error(`Invalid transition definition for state node '${J.id}': -${ve.message}`)}else throw new Error(`Invalid target: "${oe}" is not a valid target from the root node. Did you mean ".${oe}"?`)})}function Yo(J){const ee=L(J.config.target);return ee?{target:ee.map(oe=>typeof oe=="string"?xs(J.parent,oe):oe)}:J.parent.initial}function jo(J){return J.type==="history"}function ui(J){const ee=Dl(J);for(const oe of ee)for(const ae of Ye(oe,J))ee.add(ae);return ee}function Dl(J){const ee=new Set;function oe(ae){if(!ee.has(ae)){if(ee.add(ae),ae.type==="compound")oe(ae.initial.target[0]);else if(ae.type==="parallel")for(const le of ke(ae))oe(le)}}return oe(J),ee}function Ao(J,ee){if(Ht(ee))return J.machine.getStateNodeById(ee);if(!J.states)throw new Error(`Unable to retrieve child state '${ee}' from '${J.id}'; no child states exist.`);const oe=J.states[ee];if(!oe)throw new Error(`Child state '${ee}' does not exist on '${J.id}'`);return oe}function xs(J,ee){if(typeof ee=="string"&&Ht(ee))try{return J.machine.getStateNodeById(ee)}catch{}const oe=C(ee).slice();let ae=J;for(;oe.length;){const le=oe.shift();if(!le.length)break;ae=Ao(ae,le)}return ae}function ws(J,ee){if(typeof ee=="string"){const le=J.states[ee];if(!le)throw new Error(`State '${ee}' does not exist on '${J.id}'`);return[J,le]}const oe=Object.keys(ee),ae=oe.map(le=>Ao(J,le)).filter(Boolean);return[J.machine.root,J].concat(ae,oe.reduce((le,ve)=>{const De=Ao(J,ve);if(!De)return le;const Fe=ws(De,ee[ve]);return le.concat(Fe)},[]))}function zc(J,ee,oe,ae){const le=Ao(J,ee).next(oe,ae);return!le||!le.length?J.next(oe,ae):le}function Pl(J,ee,oe,ae){const le=Object.keys(ee),ve=Ao(J,le[0]),De=ks(ve,ee[le[0]],oe,ae);return!De||!De.length?J.next(oe,ae):De}function lh(J,ee,oe,ae){const le=[];for(const ve of Object.keys(ee)){const De=ee[ve];if(!De)continue;const Fe=Ao(J,ve),rt=ks(Fe,De,oe,ae);rt&&le.push(...rt)}return le.length?le:J.next(oe,ae)}function ks(J,ee,oe,ae){return typeof ee=="string"?zc(J,ee,oe,ae):Object.keys(ee).length===1?Pl(J,ee,oe,ae):lh(J,ee,oe,ae)}function tu(J){return Object.keys(J.states).map(ee=>J.states[ee]).filter(ee=>ee.type==="history")}function Xo(J,ee){let oe=J;for(;oe.parent&&oe.parent!==ee;)oe=oe.parent;return oe.parent===ee}function Tc(J,ee){const oe=new Set(J),ae=new Set(ee);for(const le of oe)if(ae.has(le))return!0;for(const le of ae)if(oe.has(le))return!0;return!1}function _s(J,ee,oe){const ae=new Set;for(const le of J){let ve=!1;const De=new Set;for(const Fe of ae)if(Tc(Mr([le],ee,oe),Mr([Fe],ee,oe)))if(Xo(le.source,Fe.source))De.add(Fe);else{ve=!0;break}if(!ve){for(const Fe of De)ae.delete(Fe);ae.add(le)}}return Array.from(ae)}function ru(J){const[ee,...oe]=J;for(const ae of Ye(ee,void 0))if(oe.every(le=>Xo(le,ae)))return ae}function Ss(J,ee){if(!J.target)return[];const oe=new Set;for(const ae of J.target)if(jo(ae))if(ee[ae.id])for(const le of ee[ae.id])oe.add(le);else for(const le of Ss(Yo(ae),ee))oe.add(le);else oe.add(ae);return[...oe]}function Ko(J,ee){const oe=Ss(J,ee);if(!oe)return;if(!J.reenter&&oe.every(le=>le===J.source||Xo(le,J.source)))return J.source;const ae=ru(oe.concat(J.source));if(ae)return ae;if(!J.reenter)return J.source.machine.root}function Mr(J,ee,oe){const ae=new Set;for(const le of J)if(le.target?.length){const ve=Ko(le,oe);le.reenter&&le.source===ve&&ae.add(ve);for(const De of ee)Xo(De,ve)&&ae.add(De)}return[...ae]}function Pn(J,ee){if(J.length!==ee.size)return!1;for(const oe of J)if(!ee.has(oe))return!1;return!0}function Do(J,ee,oe,ae,le,ve){if(!J.length)return ee;const De=new Set(ee._nodes);let Fe=ee.historyValue;const rt=_s(J,De,Fe);let lt=ee;le||([lt,Fe]=za(lt,ae,oe,rt,De,Fe,ve,oe.actionExecutor)),lt=ho(lt,ae,oe,rt.flatMap(Ke=>Ke.actions),ve,void 0),lt=jc(lt,ae,oe,rt,De,ve,Fe,le);const Ot=[...De];lt.status==="done"&&(lt=ho(lt,ae,oe,Ot.sort((Ke,Ze)=>Ze.order-Ke.order).flatMap(Ke=>Ke.exit),ve,void 0));try{return Fe===ee.historyValue&&Pn(ee._nodes,De)?lt:Gr(lt,{_nodes:Ot,historyValue:Fe})}catch(Ke){throw Ke}}function Ml(J,ee,oe,ae,le){if(ae.output===void 0)return;const ve=p(le.id,le.output!==void 0&&le.parent?z(le.output,J.context,ee,oe.self):void 0);return z(ae.output,J.context,ve,oe.self)}function jc(J,ee,oe,ae,le,ve,De,Fe){let rt=J;const lt=new Set,Ot=new Set;sh(ae,De,Ot,lt),Fe&&Ot.add(J.machine.root);const Ke=new Set;for(const Ze of[...lt].sort((pt,vt)=>pt.order-vt.order)){le.add(Ze);const pt=[];pt.push(...Ze.entry);for(const vt of Ze.invoke)pt.push(ce(vt.src,{...vt,syncSnapshot:!!vt.onSnapshot}));if(Ot.has(Ze)){const vt=Ze.initial.actions;pt.push(...vt)}if(rt=ho(rt,ee,oe,pt,ve,Ze.invoke.map(vt=>vt.id)),Ze.type==="final"){const vt=Ze.parent;let Lt=vt?.type==="parallel"?vt:vt?.parent,Mo=Lt||Ze;for(vt?.type==="compound"&&ve.push(p(vt.id,Ze.output!==void 0?z(Ze.output,rt.context,ee,oe.self):void 0));Lt?.type==="parallel"&&!Ke.has(Lt)&&qt(le,Lt);)Ke.add(Lt),ve.push(p(Lt.id)),Mo=Lt,Lt=Lt.parent;if(Lt)continue;rt=Gr(rt,{status:"done",output:Ml(rt,ee,oe,rt.machine.root,Mo)})}}return rt}function sh(J,ee,oe,ae){for(const le of J){const ve=Ko(le,ee);for(const Fe of le.target||[])!jo(Fe)&&(le.source!==Fe||le.source!==ve||le.reenter)&&(ae.add(Fe),oe.add(Fe)),Li(Fe,ee,oe,ae);const De=Ss(le,ee);for(const Fe of De){const rt=Ye(Fe,ve);ve?.type==="parallel"&&rt.push(ve),Ra(ae,ee,oe,rt,!le.source.parent&&le.reenter?void 0:ve)}}}function Li(J,ee,oe,ae){if(jo(J))if(ee[J.id]){const le=ee[J.id];for(const ve of le)ae.add(ve),Li(ve,ee,oe,ae);for(const ve of le)Nl(ve,J.parent,ae,ee,oe)}else{const le=Yo(J);for(const ve of le.target)ae.add(ve),le===J.parent?.initial&&oe.add(J.parent),Li(ve,ee,oe,ae);for(const ve of le.target)Nl(ve,J.parent,ae,ee,oe)}else if(J.type==="compound"){const[le]=J.initial.target;jo(le)||(ae.add(le),oe.add(le)),Li(le,ee,oe,ae),Nl(le,J,ae,ee,oe)}else if(J.type==="parallel")for(const le of ke(J).filter(ve=>!jo(ve)))[...ae].some(ve=>Xo(ve,le))||(jo(le)||(ae.add(le),oe.add(le)),Li(le,ee,oe,ae))}function Ra(J,ee,oe,ae,le){for(const ve of ae)if((!le||Xo(ve,le))&&J.add(ve),ve.type==="parallel")for(const De of ke(ve).filter(Fe=>!jo(Fe)))[...J].some(Fe=>Xo(Fe,De))||(J.add(De),Li(De,ee,oe,J))}function Nl(J,ee,oe,ae,le){Ra(oe,ae,le,Ye(J,ee))}function za(J,ee,oe,ae,le,ve,De,Fe){let rt=J;const lt=Mr(ae,le,ve);lt.sort((Ke,Ze)=>Ze.order-Ke.order);let Ot;for(const Ke of lt)for(const Ze of tu(Ke)){let pt;Ze.history==="deep"?pt=vt=>be(vt)&&Xo(vt,Ke):pt=vt=>vt.parent===Ke,Ot??={...ve},Ot[Ze.id]=Array.from(le).filter(pt)}for(const Ke of lt)rt=ho(rt,ee,oe,[...Ke.exit,...Ke.invoke.map(Ze=>je(Ze.id))],De,void 0),le.delete(Ke);return[rt,Ot||ve]}function Ta(J,ee){return J.implementations.actions[ee]}function pi(J,ee,oe,ae,le,ve){const{machine:De}=J;let Fe=J;for(const rt of ae){const lt=typeof rt=="function",Ot=lt?rt:Ta(De,typeof rt=="string"?rt:rt.type),Ke={context:Fe.context,event:ee,self:oe.self,system:oe.system},Ze=lt||typeof rt=="string"?void 0:"params"in rt?typeof rt.params=="function"?rt.params({context:Fe.context,event:ee}):rt.params:void 0;if(!Ot||!("resolve"in Ot)){oe.actionExecutor({type:typeof rt=="string"?rt:typeof rt=="object"?rt.type:rt.name||"(anonymous)",info:Ke,params:Ze,exec:Ot});continue}const pt=Ot,[vt,Lt,Mo]=pt.resolve(oe,Fe,Ke,Ze,Ot,le);Fe=vt,"retryResolve"in pt&&ve?.push([pt,Lt]),"execute"in pt&&oe.actionExecutor({type:pt.type,info:Ke,params:Lt,exec:pt.execute.bind(null,oe,Lt)}),Mo&&(Fe=pi(Fe,ee,oe,Mo,le,ve))}return Fe}function ho(J,ee,oe,ae,le,ve){const De=ve?[]:void 0,Fe=pi(J,ee,oe,ae,{internalQueue:le,deferredActorIds:ve},De);return De?.forEach(([rt,lt])=>{rt.retryResolve(oe,Fe,lt)}),Fe}function Wr(J,ee,oe,ae){let le=J;const ve=[];function De(lt,Ot,Ke){oe.system._sendInspectionEvent({type:"@xstate.microstep",actorRef:oe.self,event:Ot,snapshot:lt,_transitions:Ke}),ve.push(lt)}if(ee.type===d)return le=Gr(Ac(le,ee,oe),{status:"stopped"}),De(le,ee,[]),{snapshot:le,microstates:ve};let Fe=ee;if(Fe.type!==s){const lt=Fe,Ot=I(lt),Ke=Dc(lt,le);if(Ot&&!Ke.length)return le=Gr(J,{status:"error",error:lt.error}),De(le,lt,[]),{snapshot:le,microstates:ve};le=Do(Ke,J,oe,Fe,!1,ae),De(le,lt,Ke)}let rt=!0;for(;le.status==="active";){let lt=rt?Fi(le,Fe):[];const Ot=lt.length?le:void 0;if(!lt.length){if(!ae.length)break;Fe=ae.shift(),lt=Dc(Fe,le)}le=Do(lt,le,oe,Fe,!1,ae),rt=le!==Ot,De(le,Fe,lt)}return le.status!=="active"&&Ac(le,Fe,oe),{snapshot:le,microstates:ve}}function Ac(J,ee,oe){return ho(J,ee,oe,Object.values(J.children).map(ae=>je(ae)),[],void 0)}function Dc(J,ee){return ee.machine.getTransitionData(ee,J)}function Fi(J,ee){const oe=new Set,ae=J._nodes.filter(be);for(const le of ae)e:for(const ve of[le].concat(Ye(le,void 0)))if(ve.always){for(const De of ve.always)if(De.guard===void 0||Et(De.guard,J.context,ee,J)){oe.add(De);break e}}return _s(Array.from(oe),new Set(J._nodes),J.historyValue)}function ja(J,ee){const oe=yt(ws(J,ee));return er(J,[...oe])}function nu(J){return!!J&&typeof J=="object"&&"machine"in J&&"value"in J}const Es=function(J){return k(J,this.value)},ou=function(J){return this.tags.has(J)},ch=function(J){const ee=this.machine.getTransitionData(this,J);return!!ee?.length&&ee.some(oe=>oe.target!==void 0||oe.actions.length)},Cs=function(){const{_nodes:J,tags:ee,machine:oe,getMeta:ae,toJSON:le,can:ve,hasTag:De,matches:Fe,...rt}=this;return{...rt,tags:Array.from(ee)}},$s=function(){return this._nodes.reduce((J,ee)=>(ee.meta!==void 0&&(J[ee.id]=ee.meta),J),{})};function Po(J,ee){return{status:J.status,output:J.output,error:J.error,machine:ee,context:J.context,_nodes:J._nodes,value:er(ee.root,J._nodes),tags:new Set(J._nodes.flatMap(oe=>oe.tags)),children:J.children,historyValue:J.historyValue||{},matches:Es,hasTag:ou,can:ch,getMeta:$s,toJSON:Cs}}function Gr(J,ee={}){return Po({...J,...ee},J.machine)}function iu(J){if(typeof J!="object"||J===null)return{};const ee={};for(const oe in J){const ae=J[oe];Array.isArray(ae)&&(ee[oe]=ae.map(le=>({id:le.id})))}return ee}function dh(J,ee){const{_nodes:oe,tags:ae,machine:le,children:ve,context:De,can:Fe,hasTag:rt,matches:lt,getMeta:Ot,toJSON:Ke,...Ze}=J,pt={};for(const vt in ve){const Lt=ve[vt];pt[vt]={snapshot:Lt.getPersistedSnapshot(ee),src:Lt.src,systemId:Lt.systemId,syncSnapshot:Lt._syncSnapshot}}return{...Ze,context:Aa(De),children:pt,historyValue:iu(Ze.historyValue)}}function Aa(J){let ee;for(const oe in J){const ae=J[oe];if(ae&&typeof ae=="object")if("sessionId"in ae&&"send"in ae&&"ref"in ae)ee??=Array.isArray(J)?J.slice():{...J},ee[oe]={xstate$$type:Y,id:ae.id};else{const le=Aa(ae);le!==ae&&(ee??=Array.isArray(J)?J.slice():{...J},ee[oe]=le)}}return ee??J}function au(J,ee,oe,ae,{event:le,id:ve,delay:De},{internalQueue:Fe}){const rt=ee.machine.implementations.delays;if(typeof le=="string")throw new Error(`Only event objects may be used with raise; use raise({ type: "${le}" }) instead`);const lt=typeof le=="function"?le(oe,ae):le;let Ot;if(typeof De=="string"){const Ke=rt&&rt[De];Ot=typeof Ke=="function"?Ke(oe,ae):Ke}else Ot=typeof De=="function"?De(oe,ae):De;return typeof Ot!="number"&&Fe.push(lt),[ee,{event:lt,id:ve,delay:Ot},void 0]}function Da(J,ee){const{event:oe,delay:ae,id:le}=ee;if(typeof ae=="number"){J.defer(()=>{const ve=J.self;J.system.scheduler.schedule(ve,ve,oe,ae,le)});return}}function lu(J,ee){function oe(ae,le){}return oe.type="xstate.raise",oe.event=J,oe.id=ee?.id,oe.delay=ee?.delay,oe.resolve=au,oe.execute=Da,oe}return ft.$$ACTOR_TYPE=Y,ft.Actor=W,ft.NULL_EVENT=i,ft.ProcessingStatus=K,ft.STATE_DELIMITER=n,ft.XSTATE_ERROR=c,ft.XSTATE_STOP=d,ft.and=qe,ft.cancel=re,ft.cloneMachineSnapshot=Gr,ft.createActor=Z,ft.createErrorActorEvent=m,ft.createInitEvent=v,ft.createInvokeId=P,ft.createMachineSnapshot=Po,ft.evaluateGuard=Et,ft.formatInitialTransition=fn,ft.formatTransition=ln,ft.formatTransitions=Wn,ft.getAllOwnEventDescriptors=B,ft.getAllStateNodes=yt,ft.getCandidates=Kr,ft.getDelayedTransitions=Gt,ft.getInitialStateNodes=Dl,ft.getPersistedSnapshot=dh,ft.getStateNodeByPath=xs,ft.getStateNodes=ws,ft.interpret=Q,ft.isInFinalState=qt,ft.isMachineSnapshot=nu,ft.isStateId=Ht,ft.macrostep=Wr,ft.mapValues=R,ft.matchesState=k,ft.microstep=Do,ft.not=St,ft.or=It,ft.pathToStateValue=$,ft.raise=lu,ft.resolveActionsAndContext=ho,ft.resolveReferencedActor=V,ft.resolveStateValue=ja,ft.spawnChild=ce,ft.stateIn=st,ft.stop=Be,ft.stopChild=je,ft.toArray=A,ft.toObserver=H,ft.toStatePath=C,ft.toTransitionConfigArray=N,ft.transitionNode=ks,ft}var Yee;function dYe(){if(Yee)return Nd;Yee=1,Object.defineProperty(Nd,"__esModule",{value:!0});var e=I2();return RR(),Nd.and=e.and,Nd.evaluateGuard=e.evaluateGuard,Nd.not=e.not,Nd.or=e.or,Nd.stateIn=e.stateIn,Nd}var Bd=dYe();const uYe=B3(({sendBack:e})=>{const r=$w([["Escape",n=>{n.stopPropagation(),e({type:"close"})},{preventDefault:!0}]]);return document.body.addEventListener("keydown",r,{capture:!0}),()=>{document.body.removeEventListener("keydown",r,{capture:!0})}}),pl=ns({actors:{relationshipDetails:cYe,elementDetails:aYe,relationshipsBrowser:Vee,hotkey:uYe},guards:{"has overlays?":({context:e})=>e.overlays.length>0,"close specific overlay?":({context:e,event:r})=>(ht(r,"close"),pw(r.actorId)&&e.overlays.some(n=>n.id===r.actorId)),"last: is relationshipDetails?":({context:e})=>dd(e.overlays)?.type==="relationshipDetails","last: is relationshipsBrowser?":({context:e})=>dd(e.overlays)?.type==="relationshipsBrowser"}}),pYe=()=>pl.enqueueActions(({context:e,enqueue:r})=>{if(e.overlays.length===0)return;const n=dd(e.overlays)?.id;n&&(r.sendTo(n,{type:"close"}),r.stopChild(n),r.assign({overlays:e.overlays.filter(o=>o.id!==n)}))}),hYe=()=>pl.enqueueActions(({context:e,enqueue:r,event:n})=>{ht(n,"close");const o=n.actorId;if(!pw(o))return;const i=e.overlays.find(a=>a.id===o)?.id;i&&(r.sendTo(i,{type:"close"}),r.stopChild(i),r.assign({overlays:e.overlays.filter(a=>a.id!==i)}))}),Xee=()=>pl.enqueueActions(({context:e,enqueue:r})=>{for(const{id:n}of U$e(e.overlays))r.sendTo(n,{type:"close"}),r.stopChild(n);r.assign({overlays:[]})}),fYe=()=>pl.enqueueActions(({context:e,enqueue:r,event:n})=>{if(ht(n,"open.elementDetails"),e.overlays.some(i=>i.type==="elementDetails"&&i.subject===n.subject))return;const o=`elementDetails-${e.seq}`;r.spawnChild("elementDetails",{id:o,input:n,syncSnapshot:!0}),r.assign({seq:e.seq+1,overlays:[...e.overlays,{id:o,type:"elementDetails",subject:n.subject}]})}),gYe=()=>pl.enqueueActions(({context:e,enqueue:r,event:n})=>{ht(n,"open.relationshipDetails");const o=dd(e.overlays);if(o?.type==="relationshipDetails"){r.sendTo(o.id,{...n,type:"navigate.to"});return}const i=`relationshipDetails-${e.seq}`;r.spawnChild("relationshipDetails",{id:i,input:n,syncSnapshot:!0}),r.assign({seq:e.seq+1,overlays:[...e.overlays,{id:i,type:"relationshipDetails"}]})}),mYe=()=>pl.enqueueActions(({context:e,enqueue:r,event:n})=>{ht(n,"open.relationshipsBrowser");const o=dd(e.overlays);if(o?.type==="relationshipsBrowser"){r.sendTo(o.id,{type:"navigate.to",subject:n.subject,viewId:n.viewId});return}const i=`relationshipsBrowser-${e.seq}`;r.spawnChild("relationshipsBrowser",{id:i,input:n,syncSnapshot:!0}),r.assign({seq:e.seq+1,overlays:[...e.overlays,{id:i,type:"relationshipsBrowser",subject:n.subject}]})}),Kee=()=>pl.enqueueActions(({enqueue:e,event:r})=>{switch(ht(r,["open.elementDetails","open.relationshipDetails","open.relationshipsBrowser"]),r.type){case"open.elementDetails":e(fYe());break;case"open.relationshipDetails":e(gYe());break;case"open.relationshipsBrowser":e(mYe());break}}),yYe=()=>pl.spawnChild("hotkey",{id:"hotkey"}),Zee=()=>pl.stopChild("hotkey"),Qee=()=>pl.enqueueActions(({enqueue:e,context:r})=>{r.overlays.length===0&&e.raise({type:"close"})}),vYe=pl.createMachine({id:"overlays",context:()=>({seq:1,overlays:[]}),initial:"idle",states:{idle:{on:{"open.*":{actions:Kee(),target:"active"}}},active:{entry:[yYe()],exit:[Zee()],on:{"open.*":{actions:Kee()},close:[{guard:Bd.not("has overlays?"),target:"idle"},{guard:"close specific overlay?",actions:[hYe(),Qee()]},{actions:[pYe(),Qee()]}],"close.all":{actions:[Xee()],target:"idle"}}},final:{entry:[Xee(),Zee()],type:"final"}}}),bYe=vYe,xYe=ns({actions:{"change searchValue":Bt({searchValue:({event:e,context:r})=>(ht(e,["change.search","open"]),e.search??r.searchValue)}),"reset pickViewFor":Bt({pickViewFor:()=>null})}}).createMachine({id:"search",context:{openedWithSearch:null,searchValue:"",pickViewFor:null},initial:"inactive",on:{close:{target:".inactive",actions:"reset pickViewFor"}},states:{inactive:{on:{open:{target:"opened",actions:[Bt({openedWithSearch:({event:e})=>e.search??null,searchValue:({event:e,context:r})=>e.search??r.searchValue})]}}},opened:{on:{open:{actions:"change searchValue"},"change.search":{actions:"change searchValue"},"pickview.open":{target:"pickView",actions:Bt({pickViewFor:({event:e})=>e.elementFqn})}}},pickView:{on:{"pickview.close":{target:"opened",actions:"reset pickViewFor"}}}}}),wYe=xYe,kYe=B3(({sendBack:e})=>{const r=$w([["Escape",o=>{o.stopPropagation(),e({type:"key.esc"})},{preventDefault:!0}]]),n=$w([["ArrowLeft",o=>{o.stopPropagation(),e({type:"key.arrow.left"})},{preventDefault:!0}],["ArrowUp",o=>{o.stopPropagation(),e({type:"key.arrow.up"})},{preventDefault:!0}],["ArrowRight",o=>{o.stopPropagation(),e({type:"key.arrow.right"})},{preventDefault:!0}],["ArrowDown",o=>{o.stopPropagation(),e({type:"key.arrow.down"})},{preventDefault:!0}]]);return document.body.addEventListener("keydown",r),document.body.addEventListener("keydown",n,{capture:!0}),()=>{document.body.removeEventListener("keydown",r),document.body.removeEventListener("keydown",n,{capture:!0})}}),_Ye=B3(({sendBack:e})=>{const r=()=>{e({type:"media.print.on"})},n=()=>{e({type:"media.print.off"})};return window.addEventListener("beforeprint",r),window.addEventListener("afterprint",n),()=>{window.removeEventListener("beforeprint",r),window.removeEventListener("afterprint",n)}}),O2=e=>{let r=e.toggledFeatures;const n=Zn(e.activeWalkthrough),o=e.features.enableCompareWithLatest&&(r.enableCompareWithLatest??!1)&&Zn(e.view._layout)&&!n,i=e.features.enableReadOnly||(r.enableReadOnly??!1)||n||e.dynamicViewVariant==="sequence"&&e.view._type==="dynamic"||o&&e.view._layout==="auto";return{enableCompareWithLatest:o,enableReadOnly:i}},zR=e=>O2(e).enableReadOnly,Qe=ns({actors:{hotkeyActorLogic:kYe,overlaysActorLogic:bYe,searchActorLogic:wYe,mediaPrintActorLogic:_Ye,editorActor:Aee},guards:{isReady:({context:e})=>e.initialized.xydata&&e.initialized.xyflow,"enabled: Editor":({context:e})=>e.features.enableEditor,"enabled: FitView":({context:e})=>e.features.enableFitView,"enabled: FocusMode":({context:e})=>e.features.enableFocusMode&&zR(e),"enabled: Readonly":({context:e})=>zR(e),"enabled: RelationshipDetails":({context:e})=>e.features.enableRelationshipDetails,"enabled: Search":({context:e})=>e.features.enableSearch,"enabled: ElementDetails":({context:e})=>e.features.enableElementDetails,"enabled: OpenSource":({context:e})=>e.features.enableVscode,"enabled: DynamicViewWalkthrough":({context:e})=>e.features.enableDynamicViewWalkthrough,"focus.node: autoUnfocus":({event:e})=>(ht(e,"focus.node"),e.autoUnfocus===!0),"enabled: Overlays":({context:e})=>e.features.enableElementDetails||e.features.enableRelationshipBrowser||e.features.enableRelationshipDetails,"not readonly":({context:e})=>!zR(e),"is dynamic view":({context:e})=>e.view._type==="dynamic","is same view":({context:e,event:r})=>{if(ht(r,["update.view","navigate.to"]),r.type==="update.view")return e.view.id===r.view.id;if(r.type==="navigate.to")return e.view.id===r.viewId;Qo(r.type)},"is another view":({context:e,event:r})=>{if(ht(r,["update.view","navigate.to"]),r.type==="update.view")return e.view.id!==r.view.id;if(r.type==="navigate.to")return e.view.id!==r.viewId;Qo(r.type)},"click: node has modelFqn":({event:e})=>(ht(e,"xyflow.nodeClick"),"modelFqn"in e.node.data),"click: selected node":({event:e})=>(ht(e,"xyflow.nodeClick"),e.node.selected===!0),"click: same node":({context:e,event:r})=>(ht(r,"xyflow.nodeClick"),e.lastClickedNode?.id===r.node.id),"click: focused node":({context:e,event:r})=>(ht(r,"xyflow.nodeClick"),e.focusedNode===r.node.id),"click: node has connections":({context:e,event:r})=>(ht(r,"xyflow.nodeClick"),e.xyedges.some(n=>n.source===r.node.id||n.target===r.node.id)),"click: selected edge":({event:e})=>(ht(e,["xyflow.edgeClick","xyflow.edgeDoubleClick"]),e.edge.selected===!0||e.edge.data.active===!0)}}),zn={idle:"#idle",focused:"#focused",walkthrough:"#walkthrough",printing:"#printing",navigating:"#navigating"},SYe=[["path",{d:"M3 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M9 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0",key:"svg-1"}],["path",{d:"M13 11v-4a4 4 0 1 1 8 0v4",key:"svg-2"}]],Jee=wt("outline","lock-open-2","LockOpen2",SYe),EYe=[["path",{d:"M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z",key:"svg-0"}],["path",{d:"M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0",key:"svg-1"}],["path",{d:"M8 11v-4a4 4 0 1 1 8 0v4",key:"svg-2"}]],CYe=wt("outline","lock","Lock",EYe),$Ye=e=>{const r=O2(e).enableCompareWithLatest&&!!e.view.drifts&&e.view._layout==="auto",n=e.view._type==="dynamic"&&e.dynamicViewVariant==="sequence",o=!Zn(e.activeWalkthrough);return{visible:e.features.enableEditor&&o,disabled:r||n,isReadOnly:e.toggledFeatures.enableReadOnly??!1}},RYe=()=>{const{visible:e,disabled:r,isReadOnly:n}=pa($Ye),o=Mt();return y.jsx(Cn,{mode:"popLayout",children:e&&y.jsxs(pr,{component:wa,layout:"position",layoutDependency:n,disabled:r,onClick:i=>{i.stopPropagation(),!r&&o.toggleFeature("ReadOnly")},initial:{opacity:0,scale:.6},animate:{opacity:1,scale:r?.95:1},exit:{opacity:0,scale:.6},whileTap:{translateY:1},className:Ge("group",qn({gap:"0.5",paddingInline:"xxs",paddingBlock:"xxs",userSelect:"none",layerStyle:"likec4.panel.action",backgroundColor:{base:"none",_notDisabled:{_hover:"likec4.panel.action.bg.hover"}}})),children:[y.jsx(Jee,{size:14,stroke:2,style:{display:n?"none":void 0}}),y.jsx(CYe,{size:14,stroke:2,style:{display:n?void 0:"none"}}),y.jsx(Rr,{className:fe({fontSize:"11px",fontWeight:600,lineHeight:1,opacity:.8}),style:{display:n?"block":"none"},children:"Edit"})]})})},zYe=[["path",{d:"M6 4v16a1 1 0 0 0 1.524 .852l13 -8a1 1 0 0 0 0 -1.704l-13 -8a1 1 0 0 0 -1.524 .852z",key:"svg-0"}]],TYe=wt("filled","player-play-filled","PlayerPlayFilled",zYe),ete=S.forwardRef((e,r)=>y.jsx(Vn,{variant:"filled",size:"xs",fw:"500",...e,ref:r,component:wa,whileTap:{scale:.95},layout:"position",layoutId:"trigger-dynamic-walkthrough",className:fe({flexShrink:0})}));function jYe(){const{enableReadOnly:e,enableCompareWithLatest:r}=sr(),n=Mt(),o=g0();let i="Start Dynamic View Walkthrough";switch(!0){case!e:i="Walkthrough not available in Edit mode";break;case r:i="Walkthrough not available when Compare is active";break}return y.jsx(bee,{label:i,children:y.jsx(ete,{onClick:a=>{a.stopPropagation(),o.closeDropdown(),n.startWalkthrough()},initial:{opacity:0,scale:.6,translateX:-10},animate:{opacity:1,scale:1,translateX:0},exit:{opacity:0,translateX:-20},size:"compact-xs",h:26,disabled:!e||r,classNames:{label:fe({display:{base:"none","@/md":"inherit"}}),section:fe({marginInlineStart:{base:"0","@/md":"2"}})},rightSection:y.jsx(TYe,{size:10}),children:"Start"})})}const AYe=S.forwardRef(({value:e,onChange:r},n)=>y.jsx(Rr,{ref:n,layout:"position",children:y.jsx(Of,{size:"xs",value:e,component:Rr,onChange:o=>{He(o==="diagram"||o==="sequence","Invalid dynamic view variant"),r(o)},classNames:{label:fe({fontSize:"xxs"})},data:[{value:"diagram",label:"Diagram"},{value:"sequence",label:"Sequence"}]})}));function DYe(){const e=pa(n=>n.dynamicViewVariant),r=Mt();return y.jsxs(Cn,{children:[y.jsx(AYe,{value:e,onChange:n=>{r.switchDynamicViewVariant(n)}}),y.jsx(jYe,{},"trigger-dynamic-walkthrough")]})}const tte=S.memo(()=>{const{enableSearch:e,enableCompareWithLatest:r}=sr(),n=Mt(),o=lf();return y.jsx(Cn,{children:e&&!r&&y.jsxs(pr,{component:wa,layout:"position",onClick:i=>{i.stopPropagation(),n.openSearch()},whileTap:{scale:.95,translateY:1},className:Ge("group",qn({gap:"xxs",paddingInline:"sm",paddingBlock:"xxs",userSelect:"none",layerStyle:"likec4.panel.action.filled",display:{base:"none","@/md":"flex"}})),children:[y.jsx(gR,{size:14,stroke:2.5}),y.jsx(hr,{css:{fontSize:"11px",fontWeight:600,lineHeight:1,opacity:.8,whiteSpace:"nowrap"},children:o?"⌘ + K":"Ctrl + K"})]})})});tte.displayName="SearchControl";const PYe=({context:e})=>{const r=e.view.drifts??null;if(!e.features.enableCompareWithLatest||!r||r.length===0)return{hasEditor:!1,isEnabled:!1,isEditable:!1,isActive:!1,drifts:[],canApplyLatest:!1,layout:e.view._layout??"auto"};const{enableCompareWithLatest:n,enableReadOnly:o}=O2(e);return{hasEditor:e.features.enableEditor,isEnabled:!0,isEditable:!o,isActive:n===!0,drifts:r,canApplyLatest:!r.includes("type-changed"),layout:e.view._layout??"auto"}};function TR(){const e=Xf(),r=pn(e,PYe,Ir),n=at(l=>{if(!r.isEnabled){console.warn("Compare with latest feature is not enabled");return}e.send({type:"emit.onLayoutTypeChange",layoutType:l})}),o=at(l=>{if(!r.isEnabled){console.warn("Compare with latest feature is not enabled");return}const s=l?l==="on":!r.isActive;r.isActive&&!s&&r.layout==="auto"&&n("manual"),e.send({type:"toggle.feature",feature:"CompareWithLatest",forceValue:s})}),i=at(()=>{if(!r.isEnabled){console.warn("Compare with latest feature is not enabled");return}e.send({type:"layout.resetManualLayout"})}),a=at(()=>{if(!r.isEnabled){console.warn("Compare with latest feature is not enabled");return}gt(e.system?.get("editor"),"editor actor not found").send({type:"applyLatestToManual"}),r.isActive&&e.send({type:"toggle.feature",feature:"CompareWithLatest",forceValue:!1})});return[r,{toggleCompare:o,switchLayout:n,resetManualLayout:i,applyLatestToManual:a}]}const MYe=[["path",{d:"M12 9v4",key:"svg-0"}],["path",{d:"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]],rte=wt("outline","alert-triangle","AlertTriangle",MYe),nte=S.memo(()=>{const[e,{toggleCompare:r}]=TR(),n=bg(),{drifts:o,isActive:i,isEnabled:a}=e;return y.jsx(Cn,{propagate:!0,children:a&&!i&&y.jsxs(Bf,{position:"bottom-start",openDelay:600,closeDelay:200,floatingStrategy:"absolute",offset:{mainAxis:4,crossAxis:-22},...n,children:[y.jsx(AS,{children:y.jsx(pr,{component:wa,layout:"position",onClick:l=>{l.stopPropagation(),r()},whileTap:{scale:.95,translateY:1},className:Ge("group",eQ({variant:"filled",type:"warning"}),qn({gap:"xxs",padding:"1.5",rounded:"sm",userSelect:"none",cursor:"pointer",fontSize:"xs",fontWeight:600})),children:i?y.jsx(y.Fragment,{children:"Stop Compare"}):y.jsx(rte,{size:18})})}),y.jsx(TS,{p:"0",children:y.jsxs(xy,{color:"orange",withBorder:!1,withCloseButton:!1,title:"View is out of sync",children:[y.jsx(it,{mt:2,size:"sm",lh:"xs",children:"Model has changed since this view was last updated."}),y.jsxs(it,{mt:4,size:"sm",lh:"xs",children:["Detected changes:",o.map(l=>y.jsxs(S.Fragment,{children:[y.jsx("br",{}),y.jsxs("span",{children:["- ",l]})]},l))]}),y.jsx(Vn,{mt:"xs",size:"compact-sm",variant:"default",onClick:l=>{l.stopPropagation(),r()},children:"Compare with current state"})]})})]})})});nte.displayName="ManualLayoutWarning";const NYe=({context:e})=>{const r=e.view,n=e.viewModel?.folder;return{folders:!n||n.isRoot?[]:n.breadcrumbs.map(o=>({folderPath:o.path,title:o.title})),viewId:r.id,viewTitle:e.viewModel?.title??(r.title&&n7(r.title))??"Untitled View",isDynamicView:(e.viewModel?._type??r._type)==="dynamic"}},ote=S.memo(()=>{const e=g0(),{enableNavigationButtons:r,enableDynamicViewWalkthrough:n}=sr(),{folders:o,viewTitle:i,isDynamicView:a}=pn(e.actorRef,NYe,tt),l=o.flatMap(({folderPath:c,title:d},u)=>[y.jsx(pr,{component:wa,className:Ge(M2({dimmed:!0,truncate:!0}),"mantine-active",fe({userSelect:"none",maxWidth:"200px",display:{base:"none","@/md":"block"}})),initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},title:d,onMouseEnter:()=>e.send({type:"breadcrumbs.mouseEnter.folder",folderPath:c}),onMouseLeave:()=>e.send({type:"breadcrumbs.mouseLeave.folder",folderPath:c}),onClick:p=>{p.stopPropagation(),e.send({type:"breadcrumbs.click.folder",folderPath:c})},children:d},c),y.jsx(xee,{},`separator-${u}`)]),s=y.jsx(pr,{component:wa,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:Ge("mantine-active",M2({truncate:!0}),fe({userSelect:"none"})),title:i,onMouseEnter:()=>e.send({type:"breadcrumbs.mouseEnter.viewtitle"}),onMouseLeave:()=>e.send({type:"breadcrumbs.mouseLeave.viewtitle"}),onClick:c=>{c.stopPropagation(),e.send({type:"breadcrumbs.click.viewtitle"})},children:i},"view-title");return y.jsxs(Cn,{propagate:!0,mode:"popLayout",children:[y.jsx(_Ge,{},"burger-button"),r&&y.jsx(CGe,{},"nav-buttons"),y.jsxs(Rr,{layout:"position",className:qn({gap:"1",flexShrink:1,flexGrow:1,overflow:"hidden"}),children:[l,s]},"breadcrumbs"),y.jsxs(Rr,{layout:"position",className:qn({gap:"0.5",flexGrow:0,_empty:{display:"none"}}),children:[y.jsx(TGe,{onOpen:()=>e.closeDropdown()}),y.jsx(MGe,{}),y.jsx(RYe,{})]},"actions"),n&&a&&y.jsx(DYe,{},"dynamic-view-controls"),y.jsx(tte,{},"search-control"),y.jsx(nte,{},"outdated-manual-layout-warning")]})});ote.displayName="NavigationPanelControls";const jR=S.forwardRef(({className:e,truncateLabel:r=!0,...n},o)=>y.jsx(IS,{...n,component:"button",classNames:CVe({truncateLabel:r}),className:Ge("group","mantine-active",e),ref:o}));jR.displayName="NavigationLink";const BYe=S.createContext(null),IYe=[],OYe=()=>{},LYe={projects:IYe,onProjectChange:OYe};function FYe(){return S.useContext(BYe)??LYe}function VYe(){const e=S.useContext(Sy);if(!e)throw new Error("No LikeC4ModelProvider found");return e.projectId}const qYe=S.memo(e=>{const{projects:r,onProjectChange:n}=FYe(),o=VYe();return r.length<=1?null:y.jsxs(Or,{gap:"0.5",alignItems:"baseline",children:[y.jsx(hr,{css:{fontWeight:"400",fontSize:"xxs",color:"likec4.panel.text.dimmed",userSelect:"none"},children:"Project"}),y.jsxs(tn,{withinPortal:!1,shadow:"md",position:"bottom-start",offset:{mainAxis:2},children:[y.jsx(w3,{children:y.jsx(Vn,{tabIndex:-1,autoFocus:!1,variant:"subtle",size:"compact-xs",color:"gray",classNames:{root:fe({fontWeight:"400",fontSize:"xxs",height:"auto",lineHeight:1.1,color:{_light:"mantine.colors.gray[9]"}}),section:fe({'&:is([data-position="right"])':{marginInlineStart:"1"}})},rightSection:y.jsx(a$,{opacity:.5,size:12,stroke:1.5}),children:o})}),y.jsx(vy,{children:r.map(({id:i,title:a})=>y.jsx(by,{onClick:l=>{if(o===i){l.stopPropagation();return}n(i)},children:a??i},i))})]})]})}),HYe=[["path",{d:"M10.52 2.614a2.095 2.095 0 0 1 2.835 -.117l.126 .117l7.905 7.905c.777 .777 .816 2.013 .117 2.836l-.117 .126l-7.905 7.905a2.094 2.094 0 0 1 -2.836 .117l-.126 -.117l-7.907 -7.906a2.096 2.096 0 0 1 -.115 -2.835l.117 -.126l7.905 -7.905zm5.969 9.535l.01 -.116l-.003 -.12l-.016 -.114l-.03 -.11l-.044 -.112l-.052 -.098l-.076 -.105l-.07 -.081l-3.5 -3.5l-.095 -.083a1 1 0 0 0 -1.226 0l-.094 .083l-.083 .094a1 1 0 0 0 0 1.226l.083 .094l1.792 1.793h-5.085l-.117 .007a1 1 0 0 0 0 1.986l.117 .007h5.085l-1.792 1.793l-.083 .094a1 1 0 0 0 1.403 1.403l.094 -.083l3.5 -3.5l.097 -.112l.05 -.074l.037 -.067l.05 -.112l.023 -.076l.025 -.117z",key:"svg-0"}]],UYe=wt("filled","direction-sign-filled","DirectionSignFilled",HYe),WYe=[["path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",key:"svg-0"}]],GYe=wt("filled","star-filled","StarFilled",WYe),YYe=[["path",{d:"M9 3a1 1 0 0 1 .608 .206l.1 .087l2.706 2.707h6.586a3 3 0 0 1 2.995 2.824l.005 .176v8a3 3 0 0 1 -2.824 2.995l-.176 .005h-14a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-11a3 3 0 0 1 2.824 -2.995l.176 -.005h4z",key:"svg-0"}]],XYe=wt("filled","folder-filled","FolderFilled",YYe),ite=iy({siblingSelector:"[data-likec4-focusable]",parentSelector:"[data-likec4-breadcrumbs-dropdown]",activateOnFocus:!1,loop:!0,orientation:"vertical"});function KYe(e){return e.context.searchQuery.trim().length>=2}const ate=S.memo(()=>{const e=g0(),r=wR(KYe);ji("paneClick",()=>{e.closeDropdown()}),ji("nodeClick",()=>{e.closeDropdown()}),ji("edgeClick",()=>{e.closeDropdown()});const n=Eze(o=>{e.send({type:"searchQuery.change",value:o})},250);return y.jsxs(Qs,{className:Ge("nowheel",Ey({layerStyle:"likec4.dropdown",gap:"xs",pointerEvents:"all"})),"data-likec4-breadcrumbs-dropdown":!0,onMouseLeave:()=>e.send({type:"dropdown.mouseLeave"}),onMouseEnter:()=>e.send({type:"dropdown.mouseEnter"}),children:[y.jsx(qYe,{}),y.jsx(Or,{gap:"xs",children:y.jsx(sXe,{defaultValue:e.actorRef.getSnapshot().context.searchQuery,onChange:n})}),y.jsx(oi,{scrollbars:"x",type:"auto",offsetScrollbars:"present",classNames:{root:fe({maxWidth:["calc(100vw - 50px)","calc(100cqw - 50px)"]})},styles:{viewport:{overscrollBehavior:"none"}},children:r?y.jsx(JYe,{}):y.jsx(iXe,{})})]})});ate.displayName="NavigationPanelDropdown";function ZYe(e){return mx(e.context.searchQuery)}const QYe=JN(_i),JYe=S.memo(()=>{const e=Fo(),r=g0(),n=pn(r.actorRef,ZYe),o=S.useDeferredValue(n),i=o.includes(_i),a=i?o.split(_i):o,[l,s]=S.useState([]);return S.useEffect(()=>{s(c=>{const d=Jr(e.views(),Is(u=>i&&u.$view.title?mx(u.$view.title).toLowerCase().includes(o):u.id.toLowerCase().includes(o)||!!u.title?.toLowerCase().includes(o)),j5e(20),C1(),G$e((u,p)=>QYe(u.folder.path,p.folder.path)));return Ir(d,c)?c:d})},[e,o,i]),l.length===0?y.jsx("div",{children:"no results"}):y.jsx(oi,{scrollbars:"xy",offsetScrollbars:!1,className:fe({width:"100%",maxWidth:["calc(100vw - 250px)","calc(100cqw - 250px)"],maxHeight:["calc(100vh - 200px)","calc(100cqh - 200px)"]}),children:y.jsx(hp,{gap:"0.5",children:l.map(c=>y.jsx(tXe,{view:c,highlight:a,onClick:d=>{d.stopPropagation(),r.selectView(c.id)},"data-likec4-focusable":!0,onKeyDown:ite},c.id))})})}),eXe=qn({gap:"xxs",rounded:"sm",px:"xs",py:"xxs",_hover:{backgroundColor:{base:"mantine.colors.gray[1]",_dark:"mantine.colors.dark[5]"}},_focus:{outline:"none",color:"mantine.colors.primary.lightColor!",backgroundColor:"mantine.colors.primary.lightHover!"}}),lte=fe({_groupFocus:{color:"[inherit!]",transition:"none"}});function tXe({view:e,highlight:r,...n}){const o=e.folder,i=cte[e.id==="index"?"index":e._type],a=y.jsx(tc,{component:"div",className:Ge(lte,M2({truncate:!0}),fe({"& > mark":{backgroundColor:{base:"mantine.colors.yellow[2]/90",_dark:"mantine.colors.yellow[5]/80",_groupFocus:"[transparent]"},color:{_groupFocus:"[inherit!]"}}})),maw:350,highlight:r,children:e.title??e.id},e.id),l=Ge(n.className,"group",eXe);if(o.isRoot)return y.jsxs(pr,{...n,className:l,children:[i,a]});const s=o.breadcrumbs.map(c=>y.jsx(tc,{component:"div",className:Ge(fe({_groupHover:{color:"mantine.colors.dimmed"}}),lte,M2({dimmed:!0,truncate:!0})),maw:170,highlight:i9(r)?r:[],children:c.title},c.path));return s.push(y.jsxs(Or,{gap:"[4px]",children:[i,a]})),y.jsxs(pr,{...n,className:l,children:[ste,y.jsx(y3,{separator:y.jsx(Dd,{size:12,stroke:1.5}),separatorMargin:3,children:s})]})}const rXe=y.jsx(Dd,{size:12,stroke:1.5,className:"mantine-rotate-rtl"}),ste=y.jsx(XYe,{size:16,className:fe({opacity:{base:.3,_groupHover:.5,_groupActive:.5,_groupFocus:.5}})}),L2=fe({opacity:{base:.3,_dark:.5,_groupHover:.8,_groupActive:.8,_groupFocus:.8}}),cte={index:y.jsx(GYe,{size:16,className:L2}),element:y.jsx(ba,{size:18,stroke:2,className:L2}),deployment:y.jsx(aR,{size:16,stroke:1.5,className:L2}),dynamic:y.jsx(UYe,{size:18,className:L2})},nXe=oi.withProps({scrollbars:"y",className:fe({maxHeight:["calc(100vh - 160px)","calc(100cqh - 160px)"]})});function dte(e,r){return{folderPath:e.path,items:[...e.folders.map(n=>({type:"folder",folderPath:n.path,title:n.title,selected:r.selectedFolder.startsWith(n.path)})),...e.views.map(n=>({type:"view",viewType:n.id==="index"?"index":n._type,viewId:n.id,title:n.title??n.id,description:n.description.nonEmpty&&n.description.text||null,selected:n.id===r.viewModel?.id}))]}}const oXe=e=>{const r=e.viewModel;if(!r)return[];const n=r.$model,o=[dte(n.rootViewFolder,e)],i=n.viewFolder(e.selectedFolder);if(!i.isRoot)for(const a of i.breadcrumbs)o.push(dte(a,e));return o},iXe=S.memo(()=>{const e=xGe(oXe,tt);return y.jsx(Or,{gap:"xs",alignItems:"stretch",children:e.flatMap((r,n)=>[n>0&&y.jsx(sp,{orientation:"vertical"},"divider"+n),y.jsx(aXe,{data:r,isLast:n>0&&n==e.length-1},r.folderPath)])})});function aXe({data:e,isLast:r}){const n=S.useRef(null),o=xR(),i=a=>l=>{l.stopPropagation(),a.type==="folder"?o.send({type:"select.folder",folderPath:a.folderPath}):o.send({type:"select.view",viewId:a.viewId})};return Qke(()=>{r&&n.current&&n.current.scrollIntoView({block:"nearest",inline:"nearest",behavior:"smooth"})}),y.jsx(hr,{mb:"1",ref:n,children:y.jsx(nXe,{children:y.jsx(hp,{gap:"0.5",children:e.items.map((a,l)=>y.jsx(lXe,{columnItem:a,onClick:i(a)},`${e.folderPath}/${a.type}/${l}`))})})})}function lXe({columnItem:e,...r}){switch(e.type){case"folder":return y.jsx(jR,{variant:"light",active:e.selected,label:e.title,leftSection:ste,rightSection:rXe,maw:"300px",miw:"200px",...r},e.folderPath);case"view":return y.jsx(jR,{variant:"filled",active:e.selected,label:e.title,description:e.description,leftSection:cte[e.viewType],maw:"300px",miw:"200px",...r},e.viewId);default:Qo(e)}}function sXe(e){const[r,n]=Ys({...e,finalValue:""});return y.jsx(zi,{size:"xs",placeholder:"Search by title or id",variant:"unstyled",height:$e(26),value:r,onKeyDown:ite,onChange:o=>n(o.currentTarget.value),"data-likec4-focusable":!0,classNames:{wrapper:fe({flexGrow:1,backgroundColor:{base:"mantine.colors.gray[1]",_dark:"mantine.colors.dark[5]/80",_hover:{base:"mantine.colors.gray[2]",_dark:"mantine.colors.dark[4]"},_focus:{base:"mantine.colors.gray[2]",_dark:"mantine.colors.dark[4]"}},rounded:"sm"}),input:fe({_placeholder:{color:"mantine.colors.dimmed"},_focus:{outline:"none"}})},style:{"--input-fz":"var(--mantine-font-size-sm)"},leftSection:y.jsx(gR,{size:14}),rightSectionPointerEvents:"all",rightSectionWidth:"min-content",rightSection:!e.value||tp(e.value)?null:y.jsx(Vn,{variant:"subtle",h:"100%",size:"compact-xs",color:"gray",onClick:o=>{o.stopPropagation(),n("")},children:"clear"})})}const cXe=Ed("div",{base:{fontSize:"xs",color:"mantine.colors.dimmed",fontWeight:500,userSelect:"none",mb:"xxs"}});function dXe(e){const r=_$e(e.activeWalkthrough),n=r?e.xyedges.findIndex(o=>o.id===e.activeWalkthrough?.stepId):-1;return{isActive:r,isParallel:r&&Zn(e.activeWalkthrough?.parallelPrefix),hasNext:r&&n0,notes:r?e.xyedges[n]?.data?.notes??null:null}}const uXe=S.memo(()=>{const{isActive:e,notes:r}=pa(dXe),n=r?ur.from(r):ur.EMPTY;return y.jsx(Cn,{children:e&&!n.isEmpty&&y.jsx(ga.div,{layout:"position",className:fe({position:"relative"}),initial:{opacity:0,translateX:-20},animate:{opacity:1,translateX:0},exit:{opacity:0,translateX:-20},children:y.jsxs(oi,{className:Ey({position:"absolute",layerStyle:"likec4.dropdown",gap:"sm",padding:"md",paddingTop:"xxs",pointerEvents:"all",maxWidth:"calc(100cqw - 32px)",minWidth:"calc(100cqw - 50px)",maxHeight:"calc(100cqh - 100px)",width:"max-content",cursor:"default",overflow:"auto",overscrollBehavior:"contain","@/sm":{minWidth:400,maxWidth:550},"@/lg":{maxWidth:700}}),type:"scroll",children:[y.jsx(cXe,{children:"Notes"}),y.jsx(zp,{value:n,fontSize:"sm",emptyText:"No description",className:fe({userSelect:"all"})})]})})})});function pXe({disabled:e=!1,onApplyLatestToManual:r,onResetManualLayout:n}){return y.jsxs(tn,{withinPortal:!1,floatingStrategy:"absolute",shadow:"lg",position:"bottom-start",offset:{mainAxis:4},disabled:e,children:[y.jsx(tn.Target,{children:y.jsxs(pr,{disabled:e,className:Ge("mantine-active",qn({gap:"2",py:"1.5",px:"2",lineHeight:"1",textStyle:"xs",fontWeight:"medium",layerStyle:"likec4.panel.action",userSelect:"none"})),children:[y.jsx(hr,{children:"Actions"}),y.jsx(a$,{size:12,stroke:2,opacity:.7})]})}),y.jsxs(tn.Dropdown,{children:[y.jsxs(tn.Item,{disabled:!r,onClick:r,rightSection:r&&y.jsx(_n,{onClick:nn,position:"right-start",label:y.jsxs(y.Fragment,{children:["Applies changes from the latest auto-layouted",y.jsx("br",{}),"to saved snapshot, preserving (as possible)",y.jsx("br",{}),"manual adjustments.",y.jsx("br",{}),y.jsx("br",{}),"You can undo this action."]}),children:y.jsx(r0,{size:14,stroke:1.7,opacity:.5})}),children:["Sync with latest",!r&&y.jsx(hr,{textStyle:"xs",children:"view type is changed"})]}),y.jsx(tn.Item,{onClick:n,children:"Remove manual layout"})]})]})}function hXe({value:e,onChange:r}){const n=S.useMemo(()=>[{value:"manual",label:"Saved manual"},{value:"auto",label:"Latest auto"}],[]);return y.jsx(Rr,{layout:"position",children:y.jsx(Of,{size:"xs",color:e==="manual"?"orange":"green",value:e,component:Rr,onChange:o=>{He(o==="manual"||o==="auto","Invalid layout type"),r(o)},classNames:{label:fe({fontSize:"xxs",fontWeight:"medium"})},data:n})})}const ute=sp.withProps({mx:2,size:"xs",orientation:"vertical"});function fXe(){const[e,{toggleCompare:r,switchLayout:n,resetManualLayout:o,applyLatestToManual:i}]=TR();return y.jsxs(y.Fragment,{children:[y.jsx(hr,{css:{textStyle:"xs",color:"likec4.panel.text",userSelect:"none"},children:"Compare"}),y.jsx(hXe,{value:e.layout,onChange:n}),e.hasEditor&&y.jsxs(Or,{gap:"1",children:[y.jsx(ute,{}),y.jsx(pXe,{disabled:e.layout==="auto",onResetManualLayout:o,onApplyLatestToManual:e.canApplyLatest?i:void 0}),y.jsx(ute,{})]}),y.jsx(cc,{size:"sm",onClick:a=>{a.stopPropagation(),r()},children:y.jsx(fp,{})})]})}const pte=S.memo(()=>{const{enableCompareWithLatest:e}=sr();return y.jsx(Cn,{children:e&&y.jsx(Rr,{layout:"position",className:qn({gap:"2",layerStyle:"likec4.panel",position:"relative",px:"2",py:"1",pl:"3",pointerEvents:"all"}),initial:{opacity:0,translateX:-20},animate:{opacity:1,translateX:0},exit:{opacity:0,translateX:-20},children:y.jsx(fXe,{})})})});pte.displayName="ComparePanel";const m0=_n.withProps({color:"dark",fz:"xs",openDelay:600,closeDelay:120,label:"",children:null,offset:8,position:"right"}),gXe=[["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M4 8v-2a2 2 0 0 1 2 -2h2",key:"svg-1"}],["path",{d:"M4 16v2a2 2 0 0 0 2 2h2",key:"svg-2"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v2",key:"svg-3"}],["path",{d:"M16 20h2a2 2 0 0 0 2 -2v-2",key:"svg-4"}]],mXe=wt("outline","focus-centered","FocusCentered",gXe),yXe=()=>{const e=Mt();return y.jsx(m0,{label:"Center camera",children:y.jsx(cc,{onClick:()=>e.fitDiagram(),children:y.jsx(mXe,{})})})};fe({gap:"xxs",_empty:{display:"none"}}),fe({top:"md",left:"md",margin:"0",pointerEvents:"none","& :where(button, .action-icon, [role='dialog'])":{pointerEvents:"all"},"& .action-icon":{"--ai-size":"2rem"},"& .tabler-icon":{width:"65%",height:"65%"},_reduceGraphics:{"& .action-icon":{"--ai-radius":"0px"}}}),fe({shadow:{base:"md",_whenPanning:"none"}}),fe({"& .tabler-icon":{width:"65%",height:"65%"}});const F2=fe({flex:"1 1 40%",textAlign:"center",fontWeight:500,padding:"[4px 6px]",fontSize:"11px",zIndex:1}),vXe=fe({background:"mantine.colors.gray[2]",borderRadius:"sm",border:"1px solid",borderColor:"mantine.colors.gray[4]",_dark:{background:"mantine.colors.dark[5]",borderColor:"mantine.colors.dark[4]"}}),bXe=fe({position:"relative",borderRadius:"sm",background:"mantine.colors.gray[3]",boxShadow:"inset 1px 1px 3px 0px #00000024",_dark:{background:"mantine.colors.dark[7]"}}),xXe=fe({position:"absolute",width:8,height:8,border:"2px solid",borderColor:"mantine.colors.gray[5]",borderRadius:3,transform:"translate(-50%, -50%)"}),wXe=[["path",{d:"M5 4h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1",key:"svg-0"}],["path",{d:"M5 16h4a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1",key:"svg-1"}],["path",{d:"M15 12h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1",key:"svg-2"}],["path",{d:"M15 4h4a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1",key:"svg-3"}]],kXe=wt("outline","layout-dashboard","LayoutDashboard",wXe),_Xe=e=>({viewId:e.view.id,isManualLayout:e.view._layout==="manual",autoLayout:e.view.autoLayout}),SXe=()=>{const e=Mt(),[r,n]=S.useState(null),[o,i]=S.useState({}),{autoLayout:a,viewId:l,isManualLayout:s}=pa(_Xe),{ref:c,hovered:d}=b9(),u=m=>v=>{o[m]=v,i(o)},p=m=>v=>{v.stopPropagation(),e.fitDiagram(),e.triggerChange({op:"change-autolayout",layout:{...a,direction:m}})},f=(m,v)=>{e.fitDiagram(),e.triggerChange({op:"change-autolayout",layout:{...a,nodeSep:m,rankSep:v}})};return s?null:y.jsxs(br,{position:"right-start",clickOutsideEvents:["pointerdown"],radius:"xs",shadow:"lg",offset:{mainAxis:10},children:[y.jsx(kd,{children:y.jsx(m0,{label:"Change Auto Layout",children:y.jsx(cc,{children:y.jsx(kXe,{})})})}),y.jsx(Qs,{className:"likec4-top-left-panel",p:8,pt:6,opacity:d?.6:1,children:y.jsxs(Se,{pos:"relative",ref:n,children:[y.jsx(h3,{target:o[a.direction],parent:r,className:vXe}),y.jsx(Se,{mb:10,children:y.jsx(it,{inline:!0,fz:"xs",c:"dimmed",fw:500,children:"Auto layout:"})}),y.jsxs(Js,{gap:2,wrap:"wrap",justify:"stretch",maw:160,children:[y.jsx(pr,{className:F2,ref:u("TB"),onClick:p("TB"),children:"Top-Bottom"}),y.jsx(pr,{className:F2,ref:u("BT"),onClick:p("BT"),children:"Bottom-Top"}),y.jsx(pr,{className:F2,ref:u("LR"),onClick:p("LR"),children:"Left-Right"}),y.jsx(pr,{className:F2,ref:u("RL"),onClick:p("RL"),children:"Right-Left"})]}),y.jsx(Se,{my:10,children:y.jsx(it,{inline:!0,fz:"xs",c:"dimmed",fw:500,children:"Spacing:"})}),y.jsx(EXe,{ref:c,isVertical:a.direction==="TB"||a.direction==="BT",nodeSep:a.nodeSep,rankSep:a.rankSep,onChange:f},l)]})})]})},kg=400,EXe=S.forwardRef(({isVertical:e,nodeSep:r,rankSep:n,onChange:o},i)=>{e||([r,n]=[n,r]);const a=h7(({x:f,y:m})=>{e||([f,m]=[m,f]),o(Math.round(f*kg),Math.round(m*kg))},[o,e],250,2e3),[l,s]=Ys({defaultValue:dze({x:(r??100)/kg,y:(n??120)/kg}),onChange:a}),{ref:c}=kH(s);let d=Math.round(l.x*kg),u=Math.round(l.y*kg);e||([d,u]=[u,d]);const p=$r(c,i);return y.jsxs(Se,{ref:p,className:bXe,pt:"100%",children:[y.jsx(Se,{className:xXe,style:{left:`${l.x*100}%`,top:`${l.y*100}%`}}),y.jsx(Se,{pos:"absolute",left:2,bottom:2,children:y.jsxs(it,{component:"div",fz:8,c:"dimmed",fw:500,children:[u,", ",d]})})]})}),CXe=[["path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M10 4l4 16",key:"svg-1"}],["path",{d:"M12 12l-8 2",key:"svg-2"}]],$Xe=wt("outline","layout-collage","LayoutCollage",CXe),RXe=[["path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M4 12h8",key:"svg-1"}],["path",{d:"M12 15h8",key:"svg-2"}],["path",{d:"M12 9h8",key:"svg-3"}],["path",{d:"M12 4v16",key:"svg-4"}]],hte=wt("outline","layout-board-split","LayoutBoardSplit",RXe),zXe=[["path",{d:"M4 4l0 16",key:"svg-0"}],["path",{d:"M8 9m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z",key:"svg-1"}]],TXe=wt("outline","layout-align-left","LayoutAlignLeft",zXe),jXe=[["path",{d:"M12 4l0 5",key:"svg-0"}],["path",{d:"M12 15l0 5",key:"svg-1"}],["path",{d:"M6 9m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z",key:"svg-2"}]],AXe=wt("outline","layout-align-center","LayoutAlignCenter",jXe),DXe=[["path",{d:"M20 4l0 16",key:"svg-0"}],["path",{d:"M4 9m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z",key:"svg-1"}]],PXe=wt("outline","layout-align-right","LayoutAlignRight",DXe),MXe=[["path",{d:"M4 4l16 0",key:"svg-0"}],["path",{d:"M9 8m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z",key:"svg-1"}]],NXe=wt("outline","layout-align-top","LayoutAlignTop",MXe),BXe=[["path",{d:"M4 12l5 0",key:"svg-0"}],["path",{d:"M15 12l5 0",key:"svg-1"}],["path",{d:"M9 6m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z",key:"svg-2"}]],IXe=wt("outline","layout-align-middle","LayoutAlignMiddle",BXe),OXe=[["path",{d:"M4 20l16 0",key:"svg-0"}],["path",{d:"M9 4m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z",key:"svg-1"}]],LXe=wt("outline","layout-align-bottom","LayoutAlignBottom",OXe),FXe=[["path",{d:"M6 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-0"}],["path",{d:"M18 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-1"}],["path",{d:"M12 19h4.5c.71 0 1.372 -.212 1.924 -.576m1.545 -2.459a3.5 3.5 0 0 0 -3.469 -3.965h-.499m-4 0h-3.501a3.5 3.5 0 0 1 -2.477 -5.972m2.477 -1.028h3.5",key:"svg-2"}],["path",{d:"M3 3l18 18",key:"svg-3"}]],VXe=wt("outline","route-off","RouteOff",FXe),uc=({label:e,icon:r,onClick:n})=>y.jsx(m0,{label:e,withinPortal:!1,position:"top",children:y.jsx(cc,{classNames:{root:"action-icon",icon:fe({"& > svg":{width:"70%",height:"70%"}})},onClick:n,children:r})}),fte=S.memo(()=>{const e=Mt(),r=bg();return y.jsxs(br,{position:"right",offset:{mainAxis:12},clickOutsideEvents:["pointerdown"],...r,children:[y.jsx(kd,{children:y.jsx(m0,{label:"Manual layouting tools",children:y.jsx(cc,{children:y.jsx($Xe,{})})})}),y.jsx(Qs,{className:qn({gap:"0.5",layerStyle:"likec4.panel",padding:"1",pointerEvents:"all"}),children:y.jsxs(dp,{children:[y.jsx(uc,{label:"Align in columns",icon:y.jsx(hte,{}),onClick:n=>{n.stopPropagation(),e.align("Column")}}),y.jsx(uc,{label:"Align left",icon:y.jsx(TXe,{}),onClick:n=>{n.stopPropagation(),e.align("Left")}}),y.jsx(uc,{label:"Align center",icon:y.jsx(AXe,{}),onClick:n=>{n.stopPropagation(),e.align("Center")}}),y.jsx(uc,{label:"Align right",icon:y.jsx(PXe,{}),onClick:n=>{n.stopPropagation(),e.align("Right")}}),y.jsx(uc,{label:"Align in rows",icon:y.jsx(hte,{style:{transform:"rotate(90deg)"}}),onClick:n=>{n.stopPropagation(),e.align("Row")}}),y.jsx(uc,{label:"Align top",icon:y.jsx(NXe,{}),onClick:n=>{n.stopPropagation(),e.align("Top")}}),y.jsx(uc,{label:"Align middle",icon:y.jsx(IXe,{}),onClick:n=>{n.stopPropagation(),e.align("Middle")}}),y.jsx(uc,{label:"Align bottom",icon:y.jsx(LXe,{}),onClick:n=>{n.stopPropagation(),e.align("Bottom")}}),y.jsx(uc,{label:"Reset all control points",icon:y.jsx(VXe,{}),onClick:n=>{n.stopPropagation(),e.resetEdgeControlPoints()}})]})})]})});fte.displayName="ManualLayoutToolsButton";const qXe=()=>{const e=Mt();return y.jsx(m0,{label:"Switch to Read-only",children:y.jsx(cc,{onClick:()=>e.toggleFeature("ReadOnly"),children:y.jsx(Jee,{size:14,stroke:2})})})};function HXe(){const{enableReadOnly:e}=sr();return y.jsx(Cn,{children:!e&&y.jsx(Rr,{layout:"position",className:Ey({gap:"xs",layerStyle:"likec4.panel",position:"relative",cursor:"pointer",padding:"xxs",pointerEvents:"all"}),initial:{opacity:0,translateX:-20},animate:{opacity:1,translateX:0},exit:{opacity:0,translateX:-20},children:y.jsxs(dp,{openDelay:600,closeDelay:120,children:[y.jsx(SXe,{}),y.jsx(fte,{}),y.jsx(yXe,{}),y.jsx(qXe,{})]})})})}const UXe=[["path",{d:"M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z",key:"svg-0"}]],WXe=wt("filled","player-stop-filled","PlayerStopFilled",UXe),GXe=[["path",{d:"M19.496 4.136l-12 7a1 1 0 0 0 0 1.728l12 7a1 1 0 0 0 1.504 -.864v-14a1 1 0 0 0 -1.504 -.864z",key:"svg-0"}],["path",{d:"M4 4a1 1 0 0 1 .993 .883l.007 .117v14a1 1 0 0 1 -1.993 .117l-.007 -.117v-14a1 1 0 0 1 1 -1z",key:"svg-1"}]],YXe=wt("filled","player-skip-back-filled","PlayerSkipBackFilled",GXe),XXe=[["path",{d:"M3 5v14a1 1 0 0 0 1.504 .864l12 -7a1 1 0 0 0 0 -1.728l-12 -7a1 1 0 0 0 -1.504 .864z",key:"svg-0"}],["path",{d:"M20 4a1 1 0 0 1 .993 .883l.007 .117v14a1 1 0 0 1 -1.993 .117l-.007 -.117v-14a1 1 0 0 1 1 -1z",key:"svg-1"}]],KXe=wt("filled","player-skip-forward-filled","PlayerSkipForwardFilled",XXe),gte=Vn.withProps({component:wa,layout:"position",whileTap:{scale:.95},variant:"light",size:"xs",fw:"500"}),ZXe=()=>{const{portalProps:e}=bg();return y.jsx(py,{...e,children:y.jsx(hr,{css:{position:"absolute",margin:"0",padding:"0",top:"0",left:"0",width:"100%",height:"100%",border:"2px solid",borderColor:"mantine.colors.orange[6]",pointerEvents:"none",md:{borderWidth:4}}})})};function QXe(){const e=Mt(),{isParallel:r,hasNext:n,hasPrevious:o,currentStep:i,totalSteps:a}=pa(l=>{const s=l.xyedges.findIndex(c=>c.id===l.activeWalkthrough?.stepId);return{isParallel:Zn(l.activeWalkthrough?.parallelPrefix),hasNext:s0,currentStep:s+1,totalSteps:l.xyedges.length}});return y.jsxs(Cn,{propagate:!0,mode:"popLayout",children:[y.jsx(ete,{variant:"light",size:"xs",color:"orange",mr:"sm",onClick:l=>{l.stopPropagation(),e.stopWalkthrough()},rightSection:y.jsx(WXe,{size:10}),children:"Stop"},"stop-walkthrough"),y.jsx(gte,{disabled:!o,onClick:()=>e.walkthroughStep("previous"),leftSection:y.jsx(YXe,{size:10}),children:"Previous"},"prev"),y.jsxs(ec,{component:Rr,layout:"position",size:"md",radius:"sm",variant:r?"gradient":"transparent",gradient:{from:"red",to:"orange",deg:90},rightSection:y.jsx(Rr,{className:fe({fontSize:"xxs",display:r?"block":"none"}),children:"parallel"}),className:fe({alignItems:"baseline"}),children:[i," / ",a]},"step-badge"),y.jsx(gte,{disabled:!n,onClick:()=>e.walkthroughStep("next"),rightSection:y.jsx(KXe,{size:10}),children:"Next"},"next"),r&&y.jsx(ZXe,{},"parallel-frame")]})}const mte=S.memo(()=>{const e=Mt(),r=VHe(),n=UVe(),o=vE(vGe,{input:{view:r,viewModel:n}});return S.useEffect(()=>{const i=o.on("navigateTo",a=>{e.navigateTo(a.viewId)});return()=>i.unsubscribe()},[o,e]),S.useEffect(()=>{o.send({type:"update.inputs",inputs:{viewModel:n,view:r}})},[n,r]),y.jsx(hp,{css:{alignItems:"flex-start",pointerEvents:"none",position:"absolute",top:"0",left:"0",margin:"0",width:"100%",gap:"xxs",maxWidth:["calc(100vw)","calc(100cqw)"],"@/sm":{margin:"xs",gap:"xs",width:"max-content",maxWidth:["calc(100vw - 2 * {spacing.md})","calc(100cqw - 2 * {spacing.md})"]},_print:{display:"none"}},children:y.jsxs(bGe,{value:o,children:[y.jsx(JXe,{actor:o}),y.jsx(pte,{}),y.jsx(uXe,{}),y.jsx(HXe,{})]})})});mte.displayName="NavigationPanel";const JXe=({actor:e})=>{const r=pn(e,o=>o.hasTag("active")),n=bg();return y.jsxs(br,{offset:{mainAxis:4},opened:r,position:"bottom-start",trapFocus:r,...n,clickOutsideEvents:["pointerdown","mousedown","click"],onDismiss:()=>e.send({type:"dropdown.dismiss"}),children:[y.jsx(eKe,{actor:e}),r&&y.jsx(ate,{})]})},eKe=({actor:e})=>{const r=pa(n=>n.activeWalkthrough!==null);return y.jsx(lg,{children:y.jsx(kd,{children:y.jsx(Rr,{layout:!0,layoutDependency:r,className:qn({layerStyle:"likec4.panel",position:"relative",gap:"xs",cursor:"pointer",pointerEvents:"all",width:"100%"}),onMouseLeave:()=>e.send({type:"breadcrumbs.mouseLeave"}),children:y.jsx(Cn,{children:r?y.jsx(QXe,{}):y.jsx(ote,{})})})})})},AR=fe({position:"absolute",bottom:"0",right:"0",padding:"2",margin:"0",width:"min-content",height:"min-content",_print:{display:"none"}}),tKe=fe({"--ai-radius":"0px",_noReduceGraphics:{"--ai-radius":"{radii.md}"}}),rKe=fe({cursor:"default",userSelect:"none",minWidth:200,maxWidth:"calc(100vw - 20px)",backgroundColor:"mantine.colors.body/80",sm:{minWidth:300,maxWidth:"65vw"},md:{maxWidth:"40vw"},_dark:{backgroundColor:"mantine.colors.dark[6]/80"}}),nKe=fe({padding:"xxs"}),oKe=fe({backgroundColor:"transparent",transition:"all 100ms ease-in",_hover:{transition:"all 120ms ease-out",backgroundColor:"mantine.colors.primary[2]/50"},_dark:{_hover:{backgroundColor:"mantine.colors.dark[3]/40"}}});fe({fill:"var(--likec4-palette-fill)",stroke:"var(--likec4-palette-stroke)",strokeWidth:1,overflow:"visible",width:"100%",height:"auto",filter:` - drop-shadow(0 2px 3px rgb(0 0 0 / 22%)) - drop-shadow(0 1px 8px rgb(0 0 0 / 10%)) - `});const iKe=fe({fontWeight:500,letterSpacing:"0.2px",paddingTop:"0",paddingBottom:"0",textTransform:"lowercase",transition:"all 150ms ease-in-out",cursor:"pointer","--badge-radius":"2px","--badge-fz":"9.5px","--badge-padding-x":"3px","--badge-height":"13.5px","--badge-lh":"1","--badge-bg":"var(--likec4-palette-fill)","--badge-color":"var(--likec4-palette-hiContrast)"}),aKe=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 16v.01",key:"svg-1"}],["path",{d:"M12 13a2 2 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483",key:"svg-2"}]],lKe=wt("outline","help-circle","HelpCircle",aKe),sKe=[["path",{d:"M7 7l10 10",key:"svg-0"}],["path",{d:"M17 8l0 9l-9 0",key:"svg-1"}]],cKe=wt("outline","arrow-down-right","ArrowDownRight",sKe),dKe=({value:e})=>{const{title:r,color:n="primary",shape:o="rectangle"}=e,[i,a]=S.useState(null),l=Mt(),s=300,c=200;return y.jsx(b3,{shadow:"none",px:"xs",py:"sm",className:Ge(oKe),"data-likec4-color":n,onMouseEnter:()=>{a(null),l.highlightNotation(e)},onMouseLeave:()=>{a(null),l.unhighlightNotation()},children:y.jsxs(en,{gap:"sm",align:"stretch",wrap:"nowrap",children:[y.jsx(Se,{flex:"0 0 70px",style:{position:"relative",width:70,height:GCe(70*(c/s),0)},children:y.jsx(pg,{data:{shape:o,width:s,height:c}})}),y.jsxs(Lo,{gap:4,flex:1,children:[y.jsx(en,{gap:4,flex:"0 0 auto",children:e.kinds.map(d=>y.jsx(ec,{className:Ge(iKe),onMouseEnter:()=>{a(d),l.highlightNotation(e,d)},onMouseLeave:()=>{a(null),l.highlightNotation(e)},opacity:Bq(i)&&i!==d?.25:1,children:d},d))}),y.jsx(it,{component:"div",fz:"sm",fw:500,lh:"1.25",style:{textWrap:"pretty"},children:r})]})]})})},uKe=e=>({id:e.view.id,notations:e.view.notation?.nodes??[]}),pKe=S.memo(()=>{const e=QC(s=>s.height),{id:r,notations:n}=pa(uKe),[o,i]=sze({key:"notation-webview-collapsed",defaultValue:!0}),a=n.length>0,l=bg();return y.jsxs(Cn,{children:[!a&&y.jsx(ga.div,{initial:{opacity:.75,translateX:"50%"},animate:{opacity:1,translateX:0},exit:{translateX:"100%",opacity:.6},className:AR,children:y.jsx(_n,{label:"View has no notations",color:"orange",...l,children:y.jsx(Ti,{size:"lg",variant:"light",color:"orange",radius:"md",children:y.jsx(rte,{})})})},"empty"),a&&o&&y.jsx(ga.div,{initial:{opacity:.75,translateX:"50%"},animate:{opacity:1,translateX:0},exit:{translateX:"100%",opacity:.6},className:AR,children:y.jsx(_n,{label:"Show notation",color:"dark",fz:"xs",...l,children:y.jsx(lr,{size:"lg",variant:"default",color:"gray",className:tKe,onClick:()=>i(!1),children:y.jsx(lKe,{stroke:1.5})})})},"collapsed"),a&&!o&&y.jsx(ga.div,{initial:{opacity:.75,scale:.2},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.25},className:Ge("react-flow__panel",AR),style:{transformOrigin:"bottom right"},children:y.jsx(Af,{radius:"sm",withBorder:!0,shadow:"lg",className:rKe,children:y.jsxs(up,{defaultValue:"first",radius:"xs",children:[y.jsxs(ky,{children:[y.jsx(lr,{size:"md",variant:"subtle",color:"gray",ml:2,style:{alignSelf:"center"},onClick:()=>i(!0),children:y.jsx(cKe,{stroke:2})}),y.jsx(Lf,{value:"first",fz:"xs",children:"Elements"}),y.jsx(Lf,{value:"second",fz:"xs",disabled:!0,children:"Relationships"})]}),y.jsx(rc,{value:"first",className:nKe,hidden:o,children:y.jsx(oi,{viewportProps:{style:{maxHeight:`min(40vh, ${Math.max(e-60,50)}px)`}},children:y.jsx(Lo,{gap:0,children:n.map((s,c)=>y.jsx(dKe,{value:s},c))})})})]})})},r)]})}),hKe=S.memo(()=>{const[{layout:e,isActive:r},{toggleCompare:n}]=TR(),o=e==="manual"?"var(--mantine-color-orange-6)":"var(--mantine-color-green-6)";return y.jsx(hr,{className:qn({position:"absolute",top:"0",left:"0",width:"full",height:"full",border:"default",borderWidth:4,pointerEvents:"none",alignItems:"flex-start",justifyContent:"center"}),style:{zIndex:"9999",display:r?void 0:"none",borderColor:o},children:y.jsx(fKe,{style:{backgroundColor:o},onClick:i=>{i.stopPropagation(),n()},children:"Close compare"})})}),fKe=pr.withProps({className:fe({fontSize:"xs",fontWeight:"medium",py:"1.5",lineHeight:"1",borderBottomLeftRadius:"sm",borderBottomRightRadius:"sm",transform:"translateY(-4px)",px:"4",color:"mantine.colors.gray[9]",pointerEvents:"all",_active:{transform:"translateY(-3px)"}})}),yte=S.memo(()=>{const{enableControls:e,enableNotations:r,enableSearch:n,enableRelationshipDetails:o,enableReadOnly:i,enableCompareWithLatest:a}=sr(),l=e6e(),s=oBe(),c=aBe(),d=S.useCallback(()=>{console.warn("DiagramUI: resetting error boundary and rerendering..."),l()},[]);return y.jsxs(QS,{onReset:d,children:[e&&y.jsx(mte,{}),s&&y.jsx(uWe,{overlaysActorRef:s}),r&&y.jsx(pKe,{}),n&&c&&y.jsx(ZWe,{searchActorRef:c}),o&&i&&y.jsx(uGe,{}),a&&y.jsx(hKe,{})]})});yte.displayName="DiagramUI";function vte({edgeProps:{data:e},svgPath:r}){const n=e.drifts;return!n||n.length===0?null:y.jsx("path",{className:Ge("react-flow__edge-path",fe({pointerEvents:"none",stroke:"likec4.compare.manual.outline",fill:"none",strokeWidth:{base:"8px",_whenHovered:"12px"},strokeOpacity:.5})),d:r,strokeLinecap:"round"})}const gKe=fe({overflow:"visible",position:"absolute",pointerEvents:"none",top:"0",left:"0",mixBlendMode:{_dark:"screen",_light:"multiply"}}),mKe=fe({fill:"[var(--xy-edge-stroke)]",stroke:"transparent",fillOpacity:.5,strokeWidth:10,r:4,cursor:"grab",pointerEvents:"all",visibility:"hidden",transitionDuration:"120ms",transitionProperty:"visibility, fill, fill-opacity, r",transitionTimingFunction:"inOut",transitionDelay:"20ms",":where([data-likec4-selected='true'], [data-likec4-hovered='true']) &":{visibility:"visible",fillOpacity:1,transitionTimingFunction:"out",transitionDelay:"0ms"},":where([data-likec4-selected='true']) &":{r:6},":is([data-likec4-hovered='true']) &":{r:8},_hover:{fill:"mantine.colors.primary.filledHover",r:10,transitionDuration:"100ms"},_groupActive:{cursor:"grabbing"}});function yKe({sourceX:e,sourceY:r,targetX:n,targetY:o,data:i}){const[a,l]=S.useState(()=>i.controlPoints??c2(i.points));$p(()=>{const c=i.controlPoints??c2(i.points);l(d=>tt(d,c)?d:c)},[i.controlPoints?.map(c=>`${Math.round(c.x)},${Math.round(c.y)}`).join("|")??"",i.points.map(c=>`${Math.round(c[0])},${Math.round(c[1])}`).join("|")]);const s=at(({x:c,y:d})=>{const u=Qr(e,r),p=Qr(n,o),f=[i.dir==="back"?p:u,...a.map(Qr)||[],i.dir==="back"?u:p],m=Qr(c,d).round();let v=0,w=1/0;for(let k=0;k=0))throw new Error(`invalid digits: ${e}`);if(r>15)return xte;const n=10**r;return function(o){this._+=o[0];for(let i=1,a=o.length;iTp)if(!(Math.abs(p*c-d*u)>Tp)||!a)this._append`L${this._x1=r},${this._y1=n}`;else{let m=o-l,v=i-s,w=c*c+d*d,x=m*m+v*v,k=Math.sqrt(w),C=Math.sqrt(f),_=a*Math.tan((DR-Math.acos((w+f-x)/(2*k*C)))/2),$=_/C,R=_/k;Math.abs($-1)>Tp&&this._append`L${r+$*u},${n+$*p}`,this._append`A${a},${a},0,0,${+(p*m>u*v)},${this._x1=r+R*c},${this._y1=n+R*d}`}}arc(r,n,o,i,a,l){if(r=+r,n=+n,o=+o,l=!!l,o<0)throw new Error(`negative radius: ${o}`);let s=o*Math.cos(i),c=o*Math.sin(i),d=r+s,u=n+c,p=1^l,f=l?i-a:a-i;this._x1===null?this._append`M${d},${u}`:(Math.abs(this._x1-d)>Tp||Math.abs(this._y1-u)>Tp)&&this._append`L${d},${u}`,o&&(f<0&&(f=f%PR+PR),f>vKe?this._append`A${o},${o},0,1,${p},${r-s},${n-c}A${o},${o},0,1,${p},${this._x1=d},${this._y1=u}`:f>Tp&&this._append`A${o},${o},0,${+(f>=DR)},${p},${this._x1=r+o*Math.cos(a)},${this._y1=n+o*Math.sin(a)}`)}rect(r,n,o,i){this._append`M${this._x0=this._x1=+r},${this._y0=this._y1=+n}h${o=+o}v${+i}h${-o}Z`}toString(){return this._}}function wKe(e){let r=3;return e.digits=function(n){if(!arguments.length)return r;if(n==null)r=null;else{const o=Math.floor(n);if(!(o>=0))throw new RangeError(`invalid digits: ${n}`);r=o}return e},()=>new xKe(r)}function kKe(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function wte(e){this._context=e}wte.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,r){switch(e=+e,r=+r,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 1:this._point=2;default:this._context.lineTo(e,r);break}}};function _Ke(e){return new wte(e)}function SKe(e){return e[0]}function EKe(e){return e[1]}function CKe(e,r){var n=_g(!0),o=null,i=_Ke,a=null,l=wKe(s);e=typeof e=="function"?e:e===void 0?SKe:_g(e),r=typeof r=="function"?r:r===void 0?EKe:_g(r);function s(c){var d,u=(c=kKe(c)).length,p,f=!1,m;for(o==null&&(a=i(m=l())),d=0;d<=u;++d)!(dbte){var s=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);o=(o*s-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*s-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>bte){var d=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,u=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*d+e._x1*e._l23_2a-r*e._l12_2a)/u,l=(l*d+e._y1*e._l23_2a-n*e._l12_2a)/u}e._context.bezierCurveTo(o,i,a,l,e._x2,e._y2)}function _te(e,r){this._context=e,this._alpha=r}_te.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,r){if(e=+e,r=+r,this._point){var n=this._x2-e,o=this._y2-r;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+o*o,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 1:this._point=2;break;case 2:this._point=3;default:kte(this,e,r);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=r}},(function e(r){function n(o){return r?new _te(o,r):new NR(o,0)}return n.alpha=function(o){return e(+o)},n})(.5);function Ste(e,r){this._context=e,this._alpha=r}Ste.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,r){if(e=+e,r=+r,this._point){var n=this._x2-e,o=this._y2-r;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+o*o,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:kte(this,e,r);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=r}};const $Ke=(function e(r){function n(o){return r?new Ste(o,r):new BR(o,0)}return n.alpha=function(o){return e(+o)},n})(.5),RKe=CKe().curve($Ke.alpha(.7)).x(e=>Math.round(e.x)).y(e=>Math.round(e.y)),zKe=(e,r)=>cQ(e.sourceNode,r.sourceNode)&&cQ(e.targetNode,r.targetNode);function TKe({props:{sourceX:e,sourceY:r,source:n,target:o,targetX:i,targetY:a,data:l},controlPoints:s,isControlPointDragging:c}){const{sourceNode:d,targetNode:u}=QC(S.useCallback(({nodeLookup:p})=>{const f=gt(p.get(n),`source node ${n} not found`),m=gt(p.get(o),`target node ${o} not found`);return{sourceNode:r$(f),targetNode:r$(m)}},[n,o]),zKe);if(Zn(l.controlPoints)||c){const p={x:e,y:r},f={x:i,y:a},m=6,v=l.dir==="back"?[f,s2(u,hf(s)??p,m),...s,s2(d,dd(s)??f,m),p]:[p,s2(d,hf(s)??f,m),...s,s2(u,dd(s)??p,m),f];return gt(RKe(v))}return OVe(l.points)}const Ete=e=>{const r=e.getPointAtLength(e.getTotalLength()*.5);return{x:Math.round(r.x),y:Math.round(r.y)}},Cte=rR(e=>{const[r,n]=S.useState(!1),o=S.useRef(r);o.current=r;const i=iQ(),a=Mt(),{enableNavigateTo:l,enableReadOnly:s,enableCompareWithLatest:c}=sr(),d=!s,{id:u,selected:p=!1,data:{labelBBox:f,labelXY:m,...v}}=e,w=l&&!r?v.navigateTo:void 0,{controlPoints:x,setControlPoints:k,insertControlPoint:C}=yKe(e);let _=TKe({props:e,controlPoints:x,isControlPointDragging:r}),$=f?.x??0,R=f?.y??0;const[T,A]=S.useState({x:m?.x??$,y:m?.y??R});$p(()=>{if(o.current)return;const V={x:$,y:R};A(B=>d2(B,V)?B:V)},[$,R]);const z=S.useRef(null);S.useEffect(()=>{const V=z.current;if(!V||!r)return;const B=Ete(V);A(F=>d2(F,B)?F:B)},[_,r]);const j=at(V=>{const B=z.current?Ete(z.current):null;f&&B?a.updateEdgeData(u,{controlPoints:V,labelBBox:{...f,...B}}):a.updateEdgeData(u,{controlPoints:V}),a.stopEditing(!0),n(!1)}),I=at(()=>{a.startEditing("edge"),n(!0)}),N=at(()=>{a.stopEditing(),n(!1)}),L=at(V=>{k(V),requestAnimationFrame(()=>{j(V)})}),H=at(V=>{a.startEditing("edge"),n(!0),k(V),requestAnimationFrame(()=>{j(V)})}),P=at(V=>{if(V.pointerType!=="mouse"||V.button!==2&&!p)return;V.stopPropagation(),V.preventDefault(),a.startEditing("edge");const B=C(i.screenToFlowPosition({x:V.clientX,y:V.clientY},{snapToGrid:!1}));a.updateEdgeData(u,{controlPoints:B}),a.stopEditing(!0)});return r&&!e.data.hovered&&(e={...e,data:{...e.data,hovered:!0}}),y.jsxs(y.Fragment,{children:[y.jsxs(a0,{...e,className:fe({"& .react-flow__edge-interaction":{cursor:d&&p?"copy":void 0}}),children:[y.jsx(l0,{edgeProps:e,svgPath:_,ref:z,isDragging:r,...d&&{onEdgePointerDown:P}}),c&&y.jsx(vte,{edgeProps:e,svgPath:_}),f&&y.jsx(S2,{edgeProps:e,labelPosition:r?T:{x:$,y:R},children:y.jsx(i0,{pointerEvents:d?"none":"all",edgeProps:e,children:w&&y.jsx(_2,{onClick:V=>{V.stopPropagation(),a.navigateTo(w)}})})})]}),d&&x.length>0&&y.jsx(jKe,{isControlPointDragging:r,edgeProps:e,controlPoints:x,onMove:k,onStartMove:I,onCancelMove:N,onFinishMove:L,onDelete:H,zIndex:9999})]})});Cte.displayName="RelationshipEdge";function jKe({isControlPointDragging:e,edgeProps:r,controlPoints:n,onMove:o,onStartMove:i,onCancelMove:a,onFinishMove:l,onDelete:s,zIndex:c}){const d=JC(),u=iQ(),p=r.data.id,f=(x,k,C)=>{let _=!1,$={x:k.clientX,y:k.clientY},R=null,T=n;const A=j=>{const I={x:j.clientX,y:j.clientY};d2($,I)||(_||(_=!0,i()),$=I,R??=requestAnimationFrame(()=>{R=null,T=T.slice();const{x:N,y:L}=u.screenToFlowPosition($,{snapToGrid:!1});T[x]={x:Math.round(N),y:Math.round(L)},o(T)})),j.stopPropagation()},z=j=>{j.stopPropagation(),C.removeEventListener("pointermove",A,{capture:!0}),C.removeEventListener("click",IR,{capture:!0}),_?l(T):a()};C.addEventListener("pointermove",A,{capture:!0}),C.addEventListener("pointerup",z,{once:!0,capture:!0}),C.addEventListener("click",IR,{capture:!0,once:!0})},m=(x,k)=>{if(n.length<=1)return;k.stopPropagation(),k.preventDefault();const C=n.slice();C.splice(x,1),setTimeout(()=>{s(C)},10)},v=at(x=>{const{domNode:k,addSelectedEdges:C,edges:_,unselectNodesAndEdges:$}=d.getState();if(!k||x.pointerType!=="mouse")return;const R=parseFloat(x.currentTarget.getAttribute("data-control-point-index")||"");if(isNaN(R))throw new Error("data-control-point-index is not a number");switch(x.button){case 0:{x.stopPropagation(),$({edges:_.filter(T=>T.selected&&T.id!==p)}),C([p]),f(R,x,k);break}case 2:m(R,x);break}}),w=at(x=>{const{domNode:k}=d.getState();if(!k||x.pointerType!=="mouse")return;const C=parseFloat(x.currentTarget.getAttribute("data-control-point-index")||"");if(isNaN(C))throw new Error("data-control-point-index is not a number");m(C,x)});return y.jsx(yq,{children:y.jsx(a0,{component:"svg",className:gKe,...r,style:{...r.style,zIndex:c},children:y.jsx("g",{"data-active":e?!0:void 0,className:"group",onContextMenu:IR,children:n.map((x,k)=>y.jsx("circle",{"data-control-point-index":k,onPointerDownCapture:v,onDoubleClick:w,className:Ge("nodrag nopan",mKe),cx:x.x,cy:x.y},"controlPoints"+p+"#"+k))})})})}const IR=e=>{e.stopPropagation(),e.preventDefault()},V2=16;function AKe(e){const{enableNavigateTo:r,enableCompareWithLatest:n}=sr(),o=Mt(),{navigateTo:i}=e.data,a=e.source===e.target,l=e.sourceX>e.targetX,[s]=Zx({sourceX:e.sourceX,sourceY:e.sourceY,sourcePosition:e.sourcePosition,targetX:e.targetX,targetY:e.targetY,targetPosition:e.targetPosition,...a&&{offset:30,borderRadius:16}});let c=e.sourceX;switch(!0){case a:c=e.sourceX+24+V2;break;case l:c=e.sourceX-V2;break;default:c=e.sourceX+V2;break}return y.jsxs(a0,{...e,children:[y.jsx(l0,{edgeProps:e,svgPath:s}),n&&y.jsx(vte,{edgeProps:e,svgPath:s}),y.jsx(S2,{edgeProps:e,labelPosition:{x:c,y:e.sourceY+(a?0:V2),translate:l?"translate(-100%, 0)":void 0},children:y.jsx(i0,{edgeProps:e,children:r&&i&&y.jsx(_2,{onClick:d=>{d.stopPropagation(),o.navigateTo(i)}})})})]})}const DKe=(e,r)=>tt(e.data.id,r.data.id)&&tt(e.selected??!1,r.selected??!1)&&tt(e.data.modelFqn??null,r.data.modelFqn??null)&&tt(e.data.navigateTo??null,r.data.navigateTo??null)&&tt(e.data.hovered??!1,r.data.hovered??!1)&&(!e.extraButtons&&!r.extraButtons||Ir(e.extraButtons,r.extraButtons)),$te=S.memo(({extraButtons:e,...r})=>{const{enableNavigateTo:n,enableRelationshipBrowser:o}=sr(),i=Mt(),{id:a,navigateTo:l,modelFqn:s}=r.data;let c=S.useMemo(()=>{const d=[];return l&&n&&d.push({key:"navigate",icon:y.jsx(ba,{}),onClick:u=>{u.stopPropagation(),i.navigateTo(l,a)}}),o&&d.push({key:"relationships",icon:y.jsx(s0,{}),onClick:u=>{u.stopPropagation(),i.openRelationshipsBrowser(s)}}),d},[n,o,s,l,a,i]);return e&&xn(e,1)&&(c=[...c,...e]),y.jsx(C2,{...r,buttons:c})},DKe),PKe=({extraButtons:e,...r})=>{const{enableNavigateTo:n,enableRelationshipBrowser:o}=sr(),i=Mt(),{id:a,navigateTo:l,modelFqn:s}=r.data;let c=S.useMemo(()=>{const d=[];return l&&n&&d.push({key:"navigate",icon:y.jsx(ba,{}),onClick:u=>{u.stopPropagation(),i.navigateTo(l,a)}}),o&&s&&d.push({key:"relationships",icon:y.jsx(s0,{}),onClick:u=>{u.stopPropagation(),i.openRelationshipsBrowser(s)}}),d},[n,o,s,l,a]);return e&&xn(e,1)&&(c=[...c,...e]),y.jsx(C2,{...r,buttons:c})};function Sg({nodeProps:{data:e},position:r="bottom"}){const n=e.drifts;if(!n||n.length===0)return null;const o=r==="top"?Ue.Top:Ue.Bottom;return y.jsx(hr,{className:"likec4-node-drifts",css:{display:"contents","& + .likec4-element-shape":{outlineColor:"likec4.compare.manual.outline",outlineWidth:"4px",outlineStyle:"dashed",outlineOffset:"1.5"}},children:y.jsx(r9,{isVisible:e.hovered===!0,align:"start",position:o,children:y.jsx(xy,{color:"orange",withBorder:!1,withCloseButton:!1,title:"Changes:",children:n.map(i=>y.jsxs(it,{mt:2,size:"sm",lh:"xs",children:["- ",i]},i))})})})}function MKe({data:{hovered:e=!1},icon:r,onClick:n}){const o=m9(e,e?130:0)[0]&&e;return y.jsx(Rr,{initial:!1,animate:{scale:o?1.2:1,x:o?-1:0,y:o?-1:0},whileHover:{scale:1.4,x:-3,y:-1},className:"likec4-compound-navigation compound-action",whileTap:{scale:1},onClick:nn,children:y.jsx(lr,{className:Ge("nodrag nopan",jJ({delay:e&&!o}),a2({variant:"transparent"})),onClick:n,onDoubleClick:nn,children:r??y.jsx(ba,{stroke:2})})})}const Rte=e=>{const{enableNavigateTo:r}=sr(),n=Mt(),{navigateTo:o}=e.data;return o&&r?y.jsx(MKe,{onClick:i=>{i.stopPropagation(),n.navigateTo(o,e.id)},...e}):null},zte=_n.withProps({color:"dark",fz:"xs",openDelay:400,closeDelay:150,label:"",children:null,offset:4,withinPortal:!1});function q2({fqn:e}){const r=Mt();return y.jsx(zte,{label:"Browse relationships",children:y.jsx(lr,{size:"sm",variant:"subtle",color:"gray",onClick:n=>{n.stopPropagation(),r.openRelationshipsBrowser(e)},children:y.jsx(s0,{stroke:2,style:{width:"72%",height:"72%"}})})})}function H2(e){const{onOpenSource:r}=mg();return r?y.jsx(zte,{label:"Open source",children:y.jsx(lr,{size:"sm",variant:"subtle",color:"gray",onClick:n=>{n.stopPropagation(),e.elementId?r?.({element:e.elementId}):e.deploymentId&&r?.({deployment:e.deploymentId})},children:y.jsx(dg,{stroke:1.8,style:{width:"70%"}})})}):null}function Tte(){const e=S.useContext(Sy);e||console.error("No LikeC4ModelContext found");const r=e?.$styles??XN.DEFAULT,[n,o]=S.useState(r);return S.useEffect(()=>{o(i=>i.equals(r)?i:r)},[r]),n}const jte=["primary","secondary","muted"];function U2({elementColor:e,elementOpacity:r,onColorPreview:n,isOpacityEditable:o=!1,onChange:i,...a}){const{theme:l}=Tte();return y.jsxs(br,{clickOutsideEvents:["pointerdown","mousedown","click"],position:"right-end",offset:2,withinPortal:!1,...a,children:[y.jsx(kd,{children:y.jsx(Vn,{variant:"subtle",color:"gray",size:"compact-xs",px:3,children:y.jsx(my,{color:l.colors[e].elements.fill,size:14,withShadow:!0,style:{color:"#fff",cursor:"pointer"}})})}),y.jsxs(Qs,{p:"xs",children:[y.jsx(NKe,{theme:l,elementColor:e,onColorPreview:n,onChange:s=>i({color:s})}),o&&y.jsxs(y.Fragment,{children:[y.jsx(qS,{h:"xs"}),y.jsx(sp,{label:"opacity",labelPosition:"left"}),y.jsx(qS,{h:"xs"}),y.jsx(BKe,{elementOpacity:r,onOpacityChange:s=>{i({opacity:s})}})]})]})]})}function NKe({theme:e,elementColor:r,onColorPreview:n,onChange:o}){const i=l=>s=>{s.stopPropagation(),n(null),r!==l&&o(l)},a=l9(e.colors).filter(l=>!jte.includes(l));return y.jsx(Lo,{gap:2,onMouseLeave:()=>n(null),children:y.jsxs(dp,{openDelay:1e3,closeDelay:300,children:[y.jsx(Js,{maw:120,gap:"6",justify:"flex-start",align:"flex-start",direction:"row",wrap:"wrap",children:jte.map(l=>y.jsx(_n,{label:l,fz:"xs",color:"dark",offset:2,withinPortal:!1,transitionProps:{duration:140,transition:"slide-up"},children:y.jsx(my,{color:e.colors[l].elements.fill,size:18,withShadow:!0,onMouseEnter:()=>n(l),onClick:i(l),style:{color:"#fff",cursor:"pointer"},children:r===l&&y.jsx(OW,{style:{width:$e(10),height:$e(10)}})})},l))}),y.jsx(Js,{mt:"sm",maw:110,gap:"6",justify:"flex-start",align:"flex-start",direction:"row",wrap:"wrap",children:a.map(l=>y.jsx(_n,{label:l,fz:"xs",color:"dark",offset:2,transitionProps:{duration:140,transition:"slide-up"},children:y.jsx(my,{color:e.colors[l].elements.fill,size:18,onMouseEnter:()=>n(l),onClick:i(l),style:{color:"#fff",cursor:"pointer"},children:r===l&&y.jsx(OW,{style:{width:$e(10),height:$e(10)}})})},l))})]})})}function BKe({elementOpacity:e=100,onOpacityChange:r}){const[n,o]=S.useState(e);return t6e(()=>{o(e)},[e]),y.jsx(VS,{size:"sm",color:"dark",value:n,onChange:o,onChangeEnd:r})}const IKe=fe({color:"mantine.colors.dimmed",fontSize:"10px",fontWeight:600,maxWidth:"220px",cursor:"default",userSelect:"all",textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap"}),OKe=()=>pa(e=>e.xynodes.filter(r=>r.selected).length);function W2({title:e,children:r,nodeProps:n,...o}){const i=OKe(),{selected:a=!1,dragging:l=!1,data:{hovered:s=!1}}=n,c=s&&i===0||a&&i===1;let d=150;c?a?d=100:d=1e3:i>0&&(d=50);const[u]=m9(c,d);return u?y.jsx(r9,{isVisible:!l,offset:4,...o,children:y.jsx(Af,{className:Ge("nodrag","nopan"),px:5,pb:8,pt:4,radius:"sm",shadow:"xl",onDoubleClickCapture:nn,onPointerDown:nn,onClick:nn,onDoubleClick:nn,withBorder:!0,children:y.jsxs(Lo,{gap:"6px",children:[y.jsx(Se,{px:"4px",children:y.jsx(it,{className:IKe,children:e})}),y.jsx(en,{gap:4,children:r})]})})}):null}function G2(e,r){const n=Mt(),[o,i]=S.useState(null),a=at(s=>{if(s===null){if(!o)return;i(null),n.updateNodeData(r.data.id,{color:o});return}i(c=>c??r.data.color),n.updateNodeData(r.data.id,{color:s})}),l=at(s=>{const{shape:c,color:d,...u}=s;n.updateNodeData(r.data.id,{...c&&{shape:c},...d&&{color:d},style:u}),n.triggerChange({op:"change-element-style",style:s,targets:[e]})});return{elementColor:o??r.data.color,onColorPreview:a,onChange:l}}function LKe(e){const{enableVscode:r,enableRelationshipBrowser:n}=sr(),{data:{style:o,modelFqn:i}}=e,{elementColor:a,onColorPreview:l,onChange:s}=G2(i,e),c=o?.opacity??100;return y.jsxs(W2,{nodeProps:e,title:i,align:"start",children:[y.jsx(U2,{elementColor:a,onColorPreview:l,isOpacityEditable:!0,elementOpacity:c,onChange:s,position:"left-start"}),y.jsx(Ate,{elementBorderStyle:o?.border??(c<99?"dashed":"none"),onChange:s}),r&&y.jsx(H2,{elementId:i}),n&&y.jsx(q2,{fqn:i})]})}function FKe(e){const{enableVscode:r,enableRelationshipBrowser:n}=sr(),{data:{deploymentFqn:o,style:i,modelFqn:a}}=e,{elementColor:l,onColorPreview:s,onChange:c}=G2(o,e);return y.jsxs(W2,{nodeProps:e,title:o,align:"start",children:[y.jsx(U2,{elementColor:l,onColorPreview:s,isOpacityEditable:!0,elementOpacity:i?.opacity,onChange:c,position:"left-start"}),y.jsx(Ate,{elementBorderStyle:i?.border,onChange:c}),r&&y.jsx(H2,{deploymentId:o}),n&&a&&y.jsx(q2,{fqn:a})]})}function Ate({elementBorderStyle:e="dashed",onChange:r}){const[n,o]=S.useState(e);return S.useEffect(()=>{o(e)},[e]),y.jsx(Se,{children:y.jsx(Of,{size:"xs",fullWidth:!0,withItemsBorders:!1,value:n,onChange:i=>{const a=i;o(a),r({border:a})},styles:{label:{paddingTop:"0.5",paddingBottom:"0.5"}},data:[{label:"Solid",value:"solid"},{label:"Dashed",value:"dashed"},{label:"Dotted",value:"dotted"},{label:"None",value:"none"}]})})}function VKe(e){const{enableVscode:r,enableRelationshipBrowser:n}=sr(),{data:{shape:o,modelFqn:i}}=e,{elementColor:a,onColorPreview:l,onChange:s}=G2(i,e);return y.jsxs(W2,{nodeProps:e,title:i,align:"start",children:[y.jsx(Dte,{elementShape:o,onChange:s}),y.jsx(U2,{elementColor:a,onColorPreview:l,onChange:s,position:"right-end"}),r&&y.jsx(H2,{elementId:i}),n&&y.jsx(q2,{fqn:i})]})}function qKe(e){const{enableVscode:r,enableRelationshipBrowser:n}=sr(),{data:{shape:o,deploymentFqn:i,modelFqn:a}}=e,{elementColor:l,onColorPreview:s,onChange:c}=G2(i,e);return y.jsxs(W2,{nodeProps:e,title:i,align:"start",children:[y.jsx(Dte,{elementShape:o,onChange:c}),y.jsx(U2,{elementColor:l,onColorPreview:s,onChange:c,position:"right-end"}),r&&y.jsx(H2,{deploymentId:i}),n&&a&&y.jsx(q2,{fqn:a})]})}function Dte({elementShape:e,onChange:r}){return y.jsxs(tn,{openDelay:300,closeDelay:450,floatingStrategy:"fixed",closeOnClickOutside:!0,clickOutsideEvents:["pointerdown","mousedown","click"],closeOnEscape:!0,closeOnItemClick:!1,position:"top-start",offset:2,styles:{item:{padding:"calc(var(--mantine-spacing-xs) / 1.5) var(--mantine-spacing-xs)"}},withinPortal:!1,children:[y.jsx(w3,{children:y.jsx(Vn,{variant:"light",color:"gray",size:"compact-xs",rightSection:y.jsx(tR,{size:12}),children:e})}),y.jsx(vy,{onDoubleClick:nn,onClick:nn,children:n0e.map(n=>y.jsx(by,{fz:12,fw:500,value:n,rightSection:e===n?y.jsx(dQ,{size:12}):void 0,onClick:o=>{o.stopPropagation(),r({shape:n})},children:n},n))})]})}const HKe=[Ue.Top,Ue.Right,Ue.Bottom,Ue.Left],y0=S.memo(()=>y.jsx(y.Fragment,{children:HKe.map(e=>y.jsxs(S.Fragment,{children:[y.jsx(Oo,{type:"source",position:e,className:"likec4-node-handle-center"}),y.jsx(Oo,{type:"target",position:e,className:"likec4-node-handle-center"})]},e))}));function OR(e){const r=Mt(),n=e.data.modelFqn;return n?y.jsx(oR,{...e,onClick:o=>{o.stopPropagation(),r.openElementDetails(n,e.id)}}):null}function Pte(e){const r=Mt(),n=e.data.modelFqn;return n?y.jsx(AJ,{...e,onClick:o=>{o.stopPropagation(),r.openElementDetails(n,e.id)}}):null}function UKe(e){const{enableElementTags:r,enableElementDetails:n,enableReadOnly:o,enableCompareWithLatest:i}=sr();return y.jsxs(ug,{nodeProps:e,children:[i&&y.jsx(Sg,{nodeProps:e}),y.jsx(pg,{...e}),y.jsx(dl,{...e}),r&&y.jsx(t0,{...e}),y.jsx($te,{...e}),n&&y.jsx(OR,{...e}),!o&&y.jsx(VKe,{...e}),y.jsx(y0,{})]})}function WKe(e){const{enableElementTags:r,enableElementDetails:n,enableReadOnly:o,enableCompareWithLatest:i}=sr();return y.jsxs(ug,{nodeProps:e,children:[i&&y.jsx(Sg,{nodeProps:e}),y.jsx(pg,{...e}),y.jsx(dl,{...e}),r&&y.jsx(t0,{...e}),y.jsx(PKe,{...e}),n&&y.jsx(OR,{...e}),!o&&y.jsx(qKe,{...e}),y.jsx(y0,{})]})}const LR=fe({outlineColor:"likec4.compare.manual.outline",outlineWidth:"4px",outlineStyle:"dashed",outlineOffset:"1.5"}),FR=e=>e.data.drifts&&e.data.drifts.length>0;function GKe(e){const{enableElementDetails:r,enableReadOnly:n,enableCompareWithLatest:o}=sr(),i=o&&FR(e);return y.jsxs(c0,{className:i?LR:void 0,nodeProps:e,children:[o&&y.jsx(Sg,{nodeProps:e}),y.jsx(d0,{...e}),y.jsx(Rte,{...e}),r&&y.jsx(Pte,{...e}),!n&&y.jsx(LKe,{...e}),y.jsx(y0,{})]})}function YKe(e){const{enableElementDetails:r,enableReadOnly:n,enableCompareWithLatest:o}=sr(),i=o&&FR(e);return y.jsxs(c0,{className:i?LR:void 0,nodeProps:e,children:[o&&y.jsx(Sg,{nodeProps:e}),y.jsx(d0,{...e}),y.jsx(Rte,{...e}),r&&y.jsx(Pte,{...e}),!n&&y.jsx(FKe,{...e}),y.jsx(y0,{})]})}function XKe(e){const{enableCompareWithLatest:r}=sr(),n=r&&FR(e);return y.jsxs(c0,{className:n?LR:void 0,nodeProps:e,children:[r&&y.jsx(Sg,{nodeProps:e}),y.jsx(d0,{...e}),y.jsx(y0,{})]})}const KKe={left:Ue.Left,right:Ue.Right,top:Ue.Top,bottom:Ue.Bottom},ZKe=({data:e,port:r})=>y.jsxs(y.Fragment,{children:[y.jsx(hr,{"data-likec4-color":e.color,className:fe({position:"absolute",backgroundColor:"var(--likec4-palette-fill)",rounded:"xs",width:{base:"5px",_whenHovered:"7px",_whenSelected:"7px"},transition:"fast",translateX:"-1/2",translateY:"-1/2",translate:"auto"}),style:{top:r.cy,left:r.cx,height:r.height}}),y.jsx(Oo,{id:r.id,type:r.type,position:KKe[r.position],style:{top:r.cy-3,left:r.cx-3,width:6,height:6,right:"unset",bottom:"unset",visibility:"hidden",transform:r.position==="left"?"translate(-150%, 0)":"translate(100%, 0)"}})]}),QKe=e=>Zn(e.modelFqn);function JKe(e){const{enableElementDetails:r,enableCompareWithLatest:n}=sr(),o=e.data,{id:i,positionAbsoluteY:a,data:{viewHeight:l,hovered:s=!1,ports:c}}=e;return y.jsxs(y.Fragment,{children:[y.jsx(hr,{"data-likec4-color":"gray",className:fe({position:"absolute",rounded:"xs",top:"1",pointerEvents:"none",transition:"fast",translateX:"-1/2",translate:"auto"}),style:{backgroundColor:"var(--likec4-palette-stroke)",opacity:s?.6:.4,left:"50%",width:s?3:2,height:l-a,zIndex:-1,pointerEvents:"none"}}),y.jsxs(ug,{nodeProps:e,children:[n&&y.jsx(Sg,{nodeProps:e}),y.jsx(pg,{...e}),y.jsx(dl,{...e}),QKe(o)&&y.jsxs(y.Fragment,{children:[y.jsx($te,{...e,data:o}),r&&y.jsx(OR,{id:i,data:o})]})]}),c.map(d=>y.jsx(ZKe,{port:d,data:e.data},d.id))]})}function eZe(e){return y.jsx(hr,{"data-likec4-color":e.data.color,css:{width:"100%",height:"100%",border:"default",rounded:"sm",borderWidth:1,"--_color":{base:"var(--likec4-palette-stroke)",_dark:"[color-mix(in oklab, var(--likec4-palette-hiContrast) 40%, var(--likec4-palette-fill))]"},borderColor:"[var(--_color)/30]",backgroundColor:"var(--likec4-palette-fill)/15",pointerEvents:"none",paddingLeft:"2",paddingTop:"0.5",fontSize:"xs",fontWeight:"bold",letterSpacing:".75px",color:"[var(--_color)/75]"},children:"PARALLEL"})}const jp={ElementNode:UKe,DeploymentNode:WKe,CompoundElementNode:GKe,CompoundDeploymentNode:YKe,ViewGroupNode:XKe,SequenceActorNode:JKe,SequenceParallelArea:eZe},Mte={RelationshipEdge:Cte,SequenceStepEdge:AKe};var Nte=Symbol.for("immer-nothing"),Bte=Symbol.for("immer-draftable"),qo=Symbol.for("immer-state");function hl(e,...r){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Ai=Object,Eg=Ai.getPrototypeOf,Y2="constructor",X2="prototype",VR="configurable",K2="enumerable",Z2="writable",v0="value",Id=e=>!!e&&!!e[qo];function pc(e){return e?Ote(e)||J2(e)||!!e[Bte]||!!e[Y2]?.[Bte]||e4(e)||t4(e):!1}var tZe=Ai[X2][Y2].toString(),Ite=new WeakMap;function Ote(e){if(!e||!HR(e))return!1;const r=Eg(e);if(r===null||r===Ai[X2])return!0;const n=Ai.hasOwnProperty.call(r,Y2)&&r[Y2];if(n===Object)return!0;if(!Cg(n))return!1;let o=Ite.get(n);return o===void 0&&(o=Function.toString.call(n),Ite.set(n,o)),o===tZe}function b0(e,r,n=!0){x0(e)===0?(n?Reflect.ownKeys(e):Ai.keys(e)).forEach(o=>{r(o,e[o],e)}):e.forEach((o,i)=>r(i,o,e))}function x0(e){const r=e[qo];return r?r.type_:J2(e)?1:e4(e)?2:t4(e)?3:0}var Lte=(e,r,n=x0(e))=>n===2?e.has(r):Ai[X2].hasOwnProperty.call(e,r),qR=(e,r,n=x0(e))=>n===2?e.get(r):e[r],Q2=(e,r,n,o=x0(e))=>{o===2?e.set(r,n):o===3?e.add(n):e[r]=n};function rZe(e,r){return e===r?e!==0||1/e===1/r:e!==e&&r!==r}var J2=Array.isArray,e4=e=>e instanceof Map,t4=e=>e instanceof Set,HR=e=>typeof e=="object",Cg=e=>typeof e=="function",UR=e=>typeof e=="boolean",hc=e=>e.copy_||e.base_,WR=e=>e.modified_?e.copy_:e.base_;function GR(e,r){if(e4(e))return new Map(e);if(t4(e))return new Set(e);if(J2(e))return Array[X2].slice.call(e);const n=Ote(e);if(r===!0||r==="class_only"&&!n){const o=Ai.getOwnPropertyDescriptors(e);delete o[qo];let i=Reflect.ownKeys(o);for(let a=0;a1&&Ai.defineProperties(e,{set:r4,add:r4,clear:r4,delete:r4}),Ai.freeze(e),r&&b0(e,(n,o)=>{YR(o,!0)},!1)),e}function nZe(){hl(2)}var r4={[v0]:nZe};function n4(e){return e===null||!HR(e)?!0:Ai.isFrozen(e)}var o4="MapSet",XR="Patches",Fte={};function $g(e){const r=Fte[e];return r||hl(0,e),r}var oZe=e=>!!Fte[e],w0,Vte=()=>w0,iZe=(e,r)=>({drafts_:[],parent_:e,immer_:r,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:oZe(o4)?$g(o4):void 0});function qte(e,r){r&&(e.patchPlugin_=$g(XR),e.patches_=[],e.inversePatches_=[],e.patchListener_=r)}function KR(e){ZR(e),e.drafts_.forEach(aZe),e.drafts_=null}function ZR(e){e===w0&&(w0=e.parent_)}var Hte=e=>w0=iZe(w0,e);function aZe(e){const r=e[qo];r.type_===0||r.type_===1?r.revoke_():r.revoked_=!0}function Ute(e,r){r.unfinalizedDrafts_=r.drafts_.length;const n=r.drafts_[0];if(e!==void 0&&e!==n){n[qo].modified_&&(KR(r),hl(4)),pc(e)&&(e=Wte(r,e));const{patchPlugin_:o}=r;o&&o.generateReplacementPatches_(n[qo].base_,e,r)}else e=Wte(r,n);return lZe(r,e,!0),KR(r),r.patches_&&r.patchListener_(r.patches_,r.inversePatches_),e!==Nte?e:void 0}function Wte(e,r){if(n4(r))return r;const n=r[qo];if(!n)return QR(r,e.handledSet_,e);if(!i4(n,e))return r;if(!n.modified_)return n.base_;if(!n.finalized_){const{callbacks_:o}=n;if(o)for(;o.length>0;)o.pop()(e);Xte(n,e)}return n.copy_}function lZe(e,r,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&YR(r,n)}function Gte(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var i4=(e,r)=>e.scope_===r,sZe=[];function Yte(e,r,n,o){const i=hc(e),a=e.type_;if(o!==void 0&&qR(i,o,a)===r){Q2(i,o,n,a);return}if(!e.draftLocations_){const s=e.draftLocations_=new Map;b0(i,(c,d)=>{if(Id(d)){const u=s.get(d)||[];u.push(c),s.set(d,u)}})}const l=e.draftLocations_.get(r)??sZe;for(const s of l)Q2(i,s,n,a)}function cZe(e,r,n){e.callbacks_.push(function(o){const i=r;if(!i||!i4(i,o))return;o.mapSetPlugin_?.fixSetContents(i);const a=WR(i);Yte(e,i.draft_??i,a,n),Xte(i,o)})}function Xte(e,r){if(e.modified_&&!e.finalized_&&(e.type_===3||(e.assigned_?.size??0)>0)){const{patchPlugin_:n}=r;if(n){const o=n.getPath(e);o&&n.generatePatches_(e,o,r)}Gte(e)}}function dZe(e,r,n){const{scope_:o}=e;if(Id(n)){const i=n[qo];i4(i,o)&&i.callbacks_.push(function(){a4(e);const a=WR(i);Yte(e,n,a,r)})}else pc(n)&&e.callbacks_.push(function(){const i=hc(e);qR(i,r,e.type_)===n&&o.drafts_.length>1&&(e.assigned_.get(r)??!1)===!0&&e.copy_&&QR(qR(e.copy_,r,e.type_),o.handledSet_,o)})}function QR(e,r,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||Id(e)||r.has(e)||!pc(e)||n4(e)||(r.add(e),b0(e,(o,i)=>{if(Id(i)){const a=i[qo];if(i4(a,n)){const l=WR(a);Q2(e,o,l,e.type_),Gte(a)}}else pc(i)&&QR(i,r,n)})),e}function uZe(e,r){const n=J2(e),o={type_:n?1:0,scope_:r?r.scope_:Vte(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:r,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0};let i=o,a=JR;n&&(i=[o],a=k0);const{revoke:l,proxy:s}=Proxy.revocable(i,a);return o.draft_=s,o.revoke_=l,[s,o]}var JR={get(e,r){if(r===qo)return e;const n=hc(e);if(!Lte(n,r,e.type_))return pZe(e,n,r);const o=n[r];if(e.finalized_||!pc(o))return o;if(o===ez(e.base_,r)){a4(e);const i=e.type_===1?+r:r,a=rz(e.scope_,o,e,i);return e.copy_[i]=a}return o},has(e,r){return r in hc(e)},ownKeys(e){return Reflect.ownKeys(hc(e))},set(e,r,n){const o=Kte(hc(e),r);if(o?.set)return o.set.call(e.draft_,n),!0;if(!e.modified_){const i=ez(hc(e),r),a=i?.[qo];if(a&&a.base_===n)return e.copy_[r]=n,e.assigned_.set(r,!1),!0;if(rZe(n,i)&&(n!==void 0||Lte(e.base_,r,e.type_)))return!0;a4(e),tz(e)}return e.copy_[r]===n&&(n!==void 0||r in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[r])||(e.copy_[r]=n,e.assigned_.set(r,!0),dZe(e,r,n)),!0},deleteProperty(e,r){return a4(e),ez(e.base_,r)!==void 0||r in e.base_?(e.assigned_.set(r,!1),tz(e)):e.assigned_.delete(r),e.copy_&&delete e.copy_[r],!0},getOwnPropertyDescriptor(e,r){const n=hc(e),o=Reflect.getOwnPropertyDescriptor(n,r);return o&&{[Z2]:!0,[VR]:e.type_!==1||r!=="length",[K2]:o[K2],[v0]:n[r]}},defineProperty(){hl(11)},getPrototypeOf(e){return Eg(e.base_)},setPrototypeOf(){hl(12)}},k0={};b0(JR,(e,r)=>{k0[e]=function(){const n=arguments;return n[0]=n[0][0],r.apply(this,n)}}),k0.deleteProperty=function(e,r){return k0.set.call(this,e,r,void 0)},k0.set=function(e,r,n){return JR.set.call(this,e[0],r,n,e[0])};function ez(e,r){const n=e[qo];return(n?hc(n):e)[r]}function pZe(e,r,n){const o=Kte(r,n);return o?v0 in o?o[v0]:o.get?.call(e.draft_):void 0}function Kte(e,r){if(!(r in e))return;let n=Eg(e);for(;n;){const o=Object.getOwnPropertyDescriptor(n,r);if(o)return o;n=Eg(n)}}function tz(e){e.modified_||(e.modified_=!0,e.parent_&&tz(e.parent_))}function a4(e){e.copy_||(e.assigned_=new Map,e.copy_=GR(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var hZe=class{constructor(r){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(n,o,i)=>{if(Cg(n)&&!Cg(o)){const l=o;o=n;const s=this;return function(c=l,...d){return s.produce(c,u=>o.call(this,u,...d))}}Cg(o)||hl(6),i!==void 0&&!Cg(i)&&hl(7);let a;if(pc(n)){const l=Hte(this),s=rz(l,n,void 0);let c=!0;try{a=o(s),c=!1}finally{c?KR(l):ZR(l)}return qte(l,i),Ute(a,l)}else if(!n||!HR(n)){if(a=o(n),a===void 0&&(a=n),a===Nte&&(a=void 0),this.autoFreeze_&&YR(a,!0),i){const l=[],s=[];$g(XR).generateReplacementPatches_(n,a,{patches_:l,inversePatches_:s}),i(l,s)}return a}else hl(1,n)},this.produceWithPatches=(n,o)=>{if(Cg(n))return(l,...s)=>this.produceWithPatches(l,c=>n(c,...s));let i,a;return[this.produce(n,o,(l,s)=>{i=l,a=s}),i,a]},UR(r?.autoFreeze)&&this.setAutoFreeze(r.autoFreeze),UR(r?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(r.useStrictShallowCopy),UR(r?.useStrictIteration)&&this.setUseStrictIteration(r.useStrictIteration)}createDraft(r){pc(r)||hl(8),Id(r)&&(r=fZe(r));const n=Hte(this),o=rz(n,r,void 0);return o[qo].isManual_=!0,ZR(n),o}finishDraft(r,n){const o=r&&r[qo];(!o||!o.isManual_)&&hl(9);const{scope_:i}=o;return qte(i,n),Ute(void 0,i)}setAutoFreeze(r){this.autoFreeze_=r}setUseStrictShallowCopy(r){this.useStrictShallowCopy_=r}setUseStrictIteration(r){this.useStrictIteration_=r}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(r,n){let o;for(o=n.length-1;o>=0;o--){const a=n[o];if(a.path.length===0&&a.op==="replace"){r=a.value;break}}o>-1&&(n=n.slice(o+1));const i=$g(XR).applyPatches_;return Id(r)?i(r,n):this.produce(r,a=>i(a,n))}};function rz(e,r,n,o){const[i,a]=e4(r)?$g(o4).proxyMap_(r,n):t4(r)?$g(o4).proxySet_(r,n):uZe(r,n);return(n?.scope_??Vte()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=o,n&&o!==void 0?cZe(n,a,o):a.callbacks_.push(function(l){l.mapSetPlugin_?.fixSetContents(a);const{patchPlugin_:s}=l;a.modified_&&s&&s.generatePatches_(a,[],l)}),i}function fZe(e){return Id(e)||hl(10,e),Zte(e)}function Zte(e){if(!pc(e)||n4(e))return e;const r=e[qo];let n,o=!0;if(r){if(!r.modified_)return r.base_;r.finalized_=!0,n=GR(e,r.scope_.immer_.useStrictShallowCopy_),o=r.scope_.immer_.shouldUseStrictIteration()}else n=GR(e,!0);return b0(n,(i,a)=>{Q2(n,i,Zte(a))},o),r&&(r.finalized_=!1),n}var nz=new hZe,as=nz.produce,Qte=nz.setAutoFreeze.bind(nz),_0=e=>e;class Rg{static LeftPadding=42;static RightPadding=42;static TopPadding=60;static BottomPadding=42;id;minX=1/0;minY=1/0;maxX=-1/0;maxY=-1/0;initialX;initialY;get positionAbsolute(){return{x:this.minX,y:this.minY}}get initialPositionAbsolute(){return{x:this.initialX,y:this.initialY}}set positionAbsolute(r){const n=Math.round(r.x),o=Math.round(r.y);this.maxX+=n-this.minX,this.maxY+=o-this.minY,this.minX=n,this.minY=o}get dimensions(){return{width:Math.round(this.maxX-this.minX),height:Math.round(this.maxY-this.minY)}}get diff(){return{x:Math.round(this.positionAbsolute.x-this.initialX),y:Math.round(this.positionAbsolute.y-this.initialY)}}get isMoved(){return this.diff.x!==0||this.diff.y!==0}get position(){const r=this.positionAbsolute;if(!this.parent)return r;const n=this.parent.positionAbsolute;return{x:r.x-n.x,y:r.y-n.y}}constructor(r,n=null){this.id=r.id,this.positionAbsolute=n?{x:r.position.x+n.minX,y:r.position.y+n.minY}:r.position;const{width:o,height:i}=_o(r);this.maxX=this.minX+Math.ceil(o),this.maxY=this.minY+Math.ceil(i),this.initialX=this.positionAbsolute.x,this.initialY=this.positionAbsolute.y,n&&n.children.push(this)}}class oz extends Rg{constructor(r,n=null){super(r,n),this.parent=n}children=[]}class gZe extends Rg{constructor(r,n=null){super(r,n),this.parent=n}}function mZe(e,r){const n=e.data.controlPoints??null;return o=>{const i=gt(o.get(e.id),`Edge ${e.id} not found`),{x:a,y:l}=r.diff;return a===0&&l===0?{id:e.id,type:"replace",item:as(i,s=>{s.data.points=e.data.points,s.data.controlPoints=n,s.data.labelBBox=e.data.labelBBox})}:{id:e.id,type:"replace",item:as(i,s=>{s.data.points=un(e.data.points,c=>[c[0]+a,c[1]+l]),n&&(s.data.controlPoints=n.map(c=>({x:c.x+a,y:c.y+l}))),e.data.labelBBox&&(s.data.labelBBox={x:e.data.labelBBox.x+a,y:e.data.labelBBox.y+l,width:e.data.labelBBox.width,height:e.data.labelBBox.height})})}}}function yZe(e,r,n,o){const i=e.data.controlPoints??c2(e.data.points),a=Qr(ko.center(n)),l=Qr(ko.center(o)),s=a.subtract(l),c=s.length();return d=>{const u=gt(d.get(e.id),`Edge ${e.id} not found`),{x:p,y:f}=r.diff;if(p===0&&f===0)return{id:e.id,type:"replace",item:as(u,w=>{w.data.points=e.data.points,w.data.controlPoints=e.data.controlPoints,w.data.labelBBox=e.data.labelBBox})};const m=Qr(p,f),v=w=>{const x=Qr(w),k=x.subtract(l).dot(s),C=ta(k/c**2,{min:-1,max:1});return x.add(m.multiply(C)).round().toObject()};return{id:e.id,type:"replace",item:as(u,w=>{if(w.data.controlPoints=i.map(v),e.data.labelBBox){w.data.labelBBox??=e.data.labelBBox;const{x,y:k}=v(e.data.labelBBox);w.data.labelBBox.x=x,w.data.labelBBox.y=k}})}}}function Jte(e,r){const{parentLookup:n,nodeLookup:o,edges:i}=e.getState(),a=new Map,l=new Ln(_=>{let $=o.get(_)?.parentId;return $?[$,...l.get($)]:[]}),s=new Ln(_=>{const $=n.get(_);if(!$||$.size===0)return new Set;const R=new Set;for(const T of $.values()){R.add(T.id);for(const A of s.get(T.id))R.add(A)}return R});if(xn(r,2)){const _=Jr(r,Pq($=>[...s.get($)]),yw(),$=>e$e(r,$));He(xn(_,1),"All editing nodes are nested within each other"),r=_}const c=new Set(r.flatMap(_=>l.get(_))),d=[...o.values()].flatMap(_=>_.parentId?[]:{xynode:_,parent:null});for(;d.length>0;){const{xynode:_,parent:$}=d.shift();if(!r.includes(_.id)&&c.has(_.id)){const R=new oz(_,$);a.set(_.id,R),n.get(_.id)?.forEach(T=>{d.push({xynode:T,parent:R})});continue}a.set(_.id,new gZe(_,$))}const u=[...a.values()],p=new Map,f=_=>a.get(_)??l.get(_).map($=>a.get($)).find($=>!!$)??null,m=new Set(r.flatMap(_=>[_,...s.get(_)]));for(const _ of i){const $=m.has(_.source),R=m.has(_.target);if($&&R){let T=a.get(_.source)??a.get(_.target)??f(_.source)??f(_.target);T&&p.set(_,mZe(_,T));continue}if($!==R){const T=f($?_.source:_.target);if(!T)continue;const[A,z]=Jr([_.source,_.target],un(N=>gt(o.get(N),`Node ${N} not found`)),un(r$)),[j,I]=$?[A,z]:[z,A];p.set(_,yZe(_,T,j,I));continue}}function v(_){for(const $ of _){if(!($ instanceof oz))continue;v($.children);const R={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};for(const T of $.children)R.minX=Math.min(R.minX,T.minX),R.minY=Math.min(R.minY,T.minY),R.maxX=Math.max(R.maxX,T.maxX),R.maxY=Math.max(R.maxY,T.maxY);$.minX=R.minX-Rg.LeftPadding,$.minY=R.minY-Rg.TopPadding,$.maxX=R.maxX+Rg.RightPadding,$.maxY=R.maxY+Rg.BottomPadding}}const w=[...p.values()];function x(){v(u);const _=u.reduce((z,j)=>(z.push({id:j.id,type:"position",dragging:!1,position:j.position,positionAbsolute:j.positionAbsolute}),j instanceof oz&&z.push({id:j.id,type:"dimensions",setAttributes:!0,dimensions:j.dimensions}),z),[]),{edgeLookup:$,triggerNodeChanges:R,triggerEdgeChanges:T}=e.getState();R(_);const A=w.map(z=>z($));A.length>0&&T(A)}let k=null;function C(){u.length!==0&&(k??=requestAnimationFrame(()=>{k=null;for(const _ of r){const $=a.get(_);if(!$){console.warn(`Rect not found for id ${_}`);continue}const R=o.get(_);if(!R){console.warn(`Node not found for id ${_}`);continue}$.positionAbsolute=R.internals.positionAbsolute}x()}))}return{rects:a,onMove:C,updateXYFlow:x}}function vZe(){const e=JC(),r=Mt(),n=S.useRef(void 0);return S.useMemo(()=>({onNodeDragStart:(o,i)=>{r.startEditing("node");const{nodeLookup:a}=e.getState(),l=Jr(Array.from(a.values()),ep(s=>s.dragging===!0||s.id===i.id||s.selected===!0),un(s=>s.id));xn(l,1)&&(n.current=Jte(e,l))},onNodeDrag:o=>{n.current?.onMove()},onNodeDragStop:o=>{const i=n.current?YO(n.current.rects.values(),a=>a.isMoved):!1;r.stopEditing(i),n.current=void 0}}),[e,r])}const bZe={relationship:Mte.RelationshipEdge,"seq-step":Mte.SequenceStepEdge},Od={element:sc(jp.ElementNode),deployment:sc(jp.DeploymentNode),"compound-element":sc(jp.CompoundElementNode),"compound-deployment":sc(jp.CompoundDeploymentNode),"view-group":sc(jp.ViewGroupNode),"seq-actor":sc(jp.SequenceActorNode),"seq-parallel":sc(jp.SequenceParallelArea)};function xZe(e){return!e||tp(e)?Od:{element:e.element??Od.element,deployment:e.deployment??Od.deployment,"compound-element":e.compoundElement??Od["compound-element"],"compound-deployment":e.compoundDeployment??Od["compound-deployment"],"view-group":e.viewGroup??Od["view-group"],"seq-actor":e.seqActor??Od["seq-actor"],"seq-parallel":e.seqParallel??Od["seq-parallel"]}}const wZe=({context:e,children:r})=>{const{enableReadOnly:n}=O2(e),o=n||r.editor?.getSnapshot().context.editing!=="edge";return{enableReadOnly:n,initialized:e.initialized.xydata&&e.initialized.xyflow,nodes:e.xynodes,edges:e.xyedges,pannable:e.pannable,zoomable:e.zoomable,nodesDraggable:!n&&e.nodesDraggable,nodesSelectable:e.nodesSelectable&&o,fitViewPadding:e.fitViewPadding,enableFitView:e.features.enableFitView,...!e.features.enableFitView&&{viewport:{x:-e.view.bounds.x,y:-e.view.bounds.y,zoom:1}}}},kZe=(e,r)=>e.enableReadOnly===r.enableReadOnly&&e.initialized===r.initialized&&e.pannable===r.pannable&&e.zoomable===r.zoomable&&e.nodesDraggable===r.nodesDraggable&&e.nodesSelectable===r.nodesSelectable&&e.enableFitView===r.enableFitView&&Ir(e.fitViewPadding,r.fitViewPadding)&&Ir(e.nodes,r.nodes)&&Ir(e.edges,r.edges)&&Ir(e.viewport??null,r.viewport??null);function _Ze({background:e="dots",reactFlowProps:r={},children:n,renderNodes:o}){const i=Mt();let{enableReadOnly:a,initialized:l,nodes:s,edges:c,enableFitView:d,nodesDraggable:u,nodesSelectable:p,...f}=wE(wZe,kZe);const{onNodeContextMenu:m,onCanvasContextMenu:v,onEdgeContextMenu:w,onNodeClick:x,onEdgeClick:k,onCanvasClick:C,onCanvasDblClick:_}=mg(),$=pMe(),R=vZe(),T=fMe(),A=CH(()=>{T.set(!0)},$?120:400),z=bf(()=>{A.clear(),T.set(!1)},$?350:200),j=at(H=>{H&&(T.get()||A.start(),z())}),I=at((H,P)=>{A.clear(),i.send({type:"xyflow.viewportMoved",viewport:P,manually:!!H})}),N=at(()=>{i.send({type:"xyflow.resized"})}),L=SL(()=>xZe(o),[o],gQ);return $p(()=>{console.warn("renderNodes changed - this might degrade performance")},[L]),y.jsx(s$,{nodes:s,edges:c,className:Ge(l?"initialized":"not-initialized"),nodeTypes:L,edgeTypes:bZe,onNodesChange:at(H=>{i.send({type:"xyflow.applyNodeChanges",changes:H})}),onEdgesChange:at(H=>{i.send({type:"xyflow.applyEdgeChanges",changes:H})}),background:l?e:"transparent",fitView:!1,onNodeClick:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.nodeClick",node:P}),x?.(i.findDiagramNode(P.id),H)}),onEdgeClick:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.edgeClick",edge:P}),k?.(i.findDiagramEdge(P.id),H)}),onEdgeDoubleClick:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.edgeDoubleClick",edge:P})}),onPaneClick:at(H=>{H.stopPropagation(),i.send({type:"xyflow.paneClick"}),C?.(H)}),onDoubleClick:at(H=>{H.stopPropagation(),H.preventDefault(),i.send({type:"xyflow.paneDblClick"}),_?.(H)}),onNodeMouseEnter:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.nodeMouseEnter",node:P})}),onNodeMouseLeave:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.nodeMouseLeave",node:P})}),onEdgeMouseEnter:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.edgeMouseEnter",edge:P,event:H})}),onEdgeMouseLeave:at((H,P)=>{H.stopPropagation(),i.send({type:"xyflow.edgeMouseLeave",edge:P,event:H})}),onMove:j,onMoveEnd:I,onInit:at(H=>{i.send({type:"xyflow.init",instance:H})}),onNodeContextMenu:at((H,P)=>{const V=gt(i.findDiagramNode(P.id),`diagramNode ${P.id} not found`);m?.(V,H)}),onEdgeContextMenu:at((H,P)=>{const V=gt(i.findDiagramEdge(P.id),`diagramEdge ${P.id} not found`);w?.(V,H)}),...v&&{onPaneContextMenu:v},...d&&{onViewportResize:N},nodesDraggable:u,nodesSelectable:p,elevateEdgesOnSelect:!a,...u&&R,...f,...r,children:n})}function SZe(e,r){try{return Qte(!1),EZe(e,r)}finally{Qte(!0)}}const ere=e=>ty(e.parent);function EZe(e,r){He(e.id===r.id,"View IDs do not match"),He(e._type===r._type,"View types do not match"),He(e._layout==="manual"&&r._layout==="auto","Views must be manual and auto");const n=new Set,o=new Set,i=u=>!n.has(typeof u=="string"?u:u.id),a=u=>o.has(u.source)&&o.has(u.target)&&i(u.source)&&i(u.target),l=new Map(r.nodes.map(u=>{u.children&&u.children.length>0&&n.add(u.id);const p=e.nodes.find(f=>f.id===u.id);return p?[u.id,$Ze({latest:u,manual:p})]:(o.add(u.id),[u.id,iz(u)])}));if(o.size===l.size)return as(r,u=>{u._layout="manual",u.nodes=_0([...l.values()]),u.edges=_0(r.edges.map(iz)),delete u.drifts});n.size>0&&CZe(l);const s=[...l.values()],c=r.edges.map(u=>{const p=u.dir??"forward",f=x=>x.source===u.source&&x.target===u.target&&(x.dir===p||!x.dir&&!u.dir);let m=e.edges.find(x=>x.id===u.id&&f(x));if(m||(m=e.edges.find(x=>f(x))),m)return RZe({latest:u,manual:m});if(a(u))return iz(u);const v=l.get(u.source),w=l.get(u.target);return zZe(u,v,w)}),d=ko.merge(...s.filter(ere));return as(r,u=>{u._layout="manual",u.nodes=_0(s),u.edges=_0(c),u.bounds=d,delete u.drifts})}const zg={Left:42,Right:42,Top:60,Bottom:42};function CZe(e){function r(n){const o=gt(e.get(n),`Node ${n} not found`);if(o.children.length===0)return o;const i=[];for(const l of o.children)i.push(r(l));const a=ko.merge(...i);return o.x=a.x-zg.Left,o.y=a.y-zg.Top,o.width=a.width+zg.Left+zg.Right,o.height=a.height+zg.Top+zg.Bottom,o}for(const n of e.values())!ere(n)||n.children.length===0||r(n.id)}function $Ze({latest:e,manual:r}){return He(r.id===e.id,"Node IDs do not match"),as(e,n=>{n.x=r.x,n.y=r.y,n.drifts=null})}function RZe(e){const{manual:r,latest:n}=e;return as(n,o=>{r.controlPoints?o.controlPoints=r.controlPoints:delete o.controlPoints,o.points=_0(r.points),r.labelBBox&&(o.labelBBox=n.labelBBox??r.labelBBox,o.labelBBox.x=r.labelBBox.x,o.labelBBox.y=r.labelBBox.y),o.drifts=null})}function iz(e){if("drifts"in e&&e.drifts!==null){const r={...e};return r.drifts=null,r}return e}function zZe(e,r,n){const o=TZe(r,n),i=o[0];return as(e,a=>{a.controlPoints=o,e.labelBBox&&(a.labelBBox.x=i.x,a.labelBBox.y=i.y),delete a.drifts})}function tre(e,r,n){const o=e.width/2/n.x,i=e.height/2/n.y,a=Math.min(Math.abs(o),Math.abs(i));return Qr(n).multiply(a).add(r)}function TZe(e,r){const n=Qr(ko.center(e)),o=Qr(ko.center(r));if(e===r){const s=Qr(0,e.height||0).multiply(-.5).add(n);return[s.add(Qr(-32,-80)).round().toObject(),s.add(Qr(32,-80)).round().toObject()]}const i=o.subtract(n),a=tre(e,n,i),l=tre(r,o,i.multiply(-1)).subtract(a);return[a.add(l.multiply(.4)).round().toObject(),a.add(l.multiply(.6)).round().toObject()]}const jZe=S.createContext(null);function rre(){return S.useContext(jZe)}function AZe(e){const r=rre(),n=at(async({input:{viewId:i,current:a}})=>{if(!r)return console.error("No editor port available for applying latest to manual layout"),Promise.reject(new Error("No editor port"));const[l,s]=await Promise.all([a??Promise.resolve().then(()=>r.fetchView(i,"manual")),Promise.resolve().then(()=>r.fetchView(i,"auto"))]).catch(c=>(console.error("Failed to fetch views for applying latest to manual layout",c),Promise.reject(c)));return{updated:SZe(l,s)}}),o=at(async({input:i})=>{if(!r)return console.error("No editor port available for executing change"),Promise.reject(new Error("No editor port"));for(const a of i.changes)await Promise.resolve().then(()=>r.handleChange(e,a)).catch(l=>(console.error("Failed to execute change",{change:a,err:l}),Promise.reject(l)));return{}});return Aee.provide({actors:{applyLatest:zy(n),executeChange:zy(o)}})}function nre(e){return{ref:e,get actor(){return e.current},overlays(){return gt(e.current.getSnapshot().children.overlays,"Overlays actor not found")},send:r=>e.current.send(r),navigateTo:(r,n,o)=>{e.current.send({type:"navigate.to",viewId:r,...n&&{fromNode:n},...o&&{focusOnElement:o}})},navigate:r=>{e.current.send({type:`navigate.${r}`})},fitDiagram:(r=350)=>{e.current.send({type:"xyflow.fitDiagram",duration:r})},openRelationshipsBrowser:r=>{e.current.send({type:"open.relationshipsBrowser",fqn:r})},openSource:r=>{e.current.send({type:"open.source",...r})},openElementDetails:(r,n)=>{e.current.send({type:"open.elementDetails",fqn:r,fromNode:n})},openRelationshipDetails:(...r)=>{r.length===1?e.current.send({type:"open.relationshipDetails",params:{edgeId:r[0]}}):e.current.send({type:"open.relationshipDetails",params:{source:r[0],target:r[1]}})},updateNodeData:(r,n)=>{e.current.send({type:"update.nodeData",nodeId:r,data:n})},updateEdgeData:(r,n)=>{e.current.send({type:"update.edgeData",edgeId:r,data:n})},startEditing:r=>{const n=zr(e.current.system).editorActorRef;He(n,"No editor actor found in diagram actor system"),n.send({type:"edit.start",subject:r})},stopEditing:(r=!1)=>{const n=zr(e.current.system).editorActorRef;He(n,"No editor actor found in diagram actor system"),n.send({type:"edit.finish",wasChanged:r})},undoEditing:()=>{const r=zr(e.current.system).editorActorRef;He(r,"No editor actor found in diagram actor system");const n=r.getSnapshot().context.history.length>0;return n&&r.send({type:"undo"}),n},align:r=>{e.current.send({type:"layout.align",mode:r})},resetEdgeControlPoints:()=>{e.current.send({type:"layout.resetEdgeControlPoints"})},focusNode:r=>{e.current.send({type:"focus.node",nodeId:r})},focusOnElement:r=>{const n=e.current.getSnapshot().context,o=mee(n.xynodes,r);o&&e.current.send({type:"focus.node",nodeId:o.id,autoUnfocus:!0})},get currentView(){return e.current.getSnapshot().context.view},getContext:()=>e.current.getSnapshot().context,findDiagramNode:r=>yg(e.current.getSnapshot().context,r),findEdge:r=>e.current.getSnapshot().context.xyedges.find(n=>n.data.id===r)??null,findDiagramEdge:r=>yR(e.current.getSnapshot().context,r),startWalkthrough:()=>{e.current.send({type:"walkthrough.start"})},walkthroughStep:(r="next")=>{e.current.send({type:"walkthrough.step",direction:r})},stopWalkthrough:()=>{e.current.send({type:"walkthrough.end"})},toggleFeature:(r,n)=>{e.current.send({type:"toggle.feature",feature:r,...n!==void 0&&{forceValue:n}})},highlightNotation:(r,n)=>{e.current.send({type:"notations.highlight",notation:r,...n&&{kind:n}})},unhighlightNotation:()=>{e.current.send({type:"notations.unhighlight"})},openSearch:r=>{e.current.send({type:"open.search",...r&&{search:r}})},triggerChange:r=>{e.current.send({type:"trigger.change",change:r})},switchDynamicViewVariant:r=>{e.current.send({type:"switch.dynamicViewVariant",variant:r})}}}function az(e,r){const n=r.view,o=e.view.id===n.id;if(n._type==="dynamic"&&n.variant==="sequence")return{xynodes:r.xynodes,xyedges:r.xyedges,view:n};const i=B2(e.xynodes,r.xynodes),a=o?ER(e.xyedges,r.xyedges):r.xyedges;return{xynodes:i,xyedges:a,view:n}}function DZe(e){const{xynodes:r,xyedges:n,focusedNode:o}=e;if(!o)return null;const i=new Set([o]),a=n.map(l=>l.source===o||l.target===o?(i.add(l.source),i.add(l.target),tr.setData(l,{dimmed:!1,active:!0})):tr.setData(l,{dimmed:!0,active:!1}));return{xynodes:r.map(l=>tr.setDimmed(l,!i.has(l.id))),xyedges:a}}function PZe({context:e,event:r}){return ht(r,"update.nodeData"),{xynodes:e.xynodes.map(n=>{if(n.id!==r.nodeId)return n;const o=Fq(n.data,r.data);return tt(o,n.data)?n:{...n,data:o}})}}function MZe({context:e,event:r}){return ht(r,"update.edgeData"),{xyedges:e.xyedges.map(n=>{if(n.id!==r.edgeId)return n;const o=Fq(n.data,r.data);return tt(o,n.data)?n:{...n,data:o}})}}function ore(e,r,n){const o=_o(e),i=o.width/2/n.x,a=o.height/2/n.y,l=Math.min(Math.abs(i),Math.abs(a));return Qr(n).multiply(l).add(r)}function ire(e,r){const n=gt(e.get(r.source),`Source node ${r.source} not found`),o=gt(e.get(r.target),`Target node ${r.target} not found`),i=Qr(n$(n)),a=Qr(n$(o));if(n===o){const d=Qr(0,n.height||0).multiply(-.5).add(i);return[d.add(Qr(-32,-80)).round().toObject(),d.add(Qr(32,-80)).round().toObject()]}const l=a.subtract(i),s=ore(n,i,l),c=ore(o,a,l.multiply(-1)).subtract(s);return[s.add(c.multiply(.4)).round().toObject(),s.add(c.multiply(.6)).round().toObject()]}function NZe(e){const{view:r}=e,n=[],o=[],i=new Map,a=x8.from(r.nodes.reduce((u,p)=>(i.set(p.id,p),p.parent||u.push({node:p,parent:null}),u),[]));let l=u=>!0;if(e.where)try{const u=Ou(e.where);l=p=>u({...Hq(p,["tags","kind"]),..."source"in p?{source:c(p.source)}:p,..."target"in p?{target:c(p.target)}:p})}catch(u){console.error("Error in where filter:",u)}const s="",c=u=>gt(i.get(u),`Node not found: ${u}`);let d;for(;d=a.dequeue();){const{node:u,parent:p}=d,f=xn(u.children,1)||u.kind==w1;if(f)for(const $ of u.children)a.enqueue({node:c($),parent:u});const m={x:u.x,y:u.y};p&&(m.x-=p.x,m.y-=p.y);const v={id:s+u.id,deletable:!1,position:m,zIndex:f?lc.Compound:lc.Element,style:{width:u.width,height:u.height},initialWidth:u.width,initialHeight:u.height,hidden:u.kind!==w1&&!l(u),...p&&{parentId:s+p.id}},w={viewId:r.id,id:u.id,title:u.title,color:u.color,shape:u.shape,style:u.style,depth:u.depth??0,icon:u.icon??"none",tags:u.tags??null,x:u.x,y:u.y,drifts:u.drifts??null},x={viewId:r.id,id:u.id,title:u.title,technology:u.technology??null,description:u.description??null,height:u.height,width:u.width,level:u.level,color:u.color,shape:u.shape,style:u.style,icon:u.icon??null,tags:u.tags,x:u.x,y:u.y,isMultiple:u.style?.multiple??!1,drifts:u.drifts??null};if(u.kind===w1){n.push({...v,type:"view-group",data:{isViewGroup:!0,...w},dragHandle:".likec4-compound-title-container"});continue}const k=u.modelRef??null,C=u.deploymentRef??null;if(!k&&!C)throw console.error("Invalid node",u),new Error("Element should have either modelRef or deploymentRef");const _={navigateTo:u.navigateTo??null};switch(!0){case(f&&!!C):{n.push({...v,type:"compound-deployment",data:{...w,..._,deploymentFqn:C,modelFqn:k}});break}case f:{He(!!k,"ModelRef expected"),n.push({...v,type:"compound-element",data:{...w,..._,modelFqn:k}});break}case!!C:{n.push({...v,type:"deployment",data:{...x,..._,deploymentFqn:C,modelFqn:k}});break}default:He(!!k,"ModelRef expected"),n.push({...v,type:"element",data:{...x,..._,modelFqn:k}})}}for(const u of r.edges){const p=u.source,f=u.target,m=s+u.id;if(!xn(u.points,2)){console.error("edge should have at least 2 points",u);continue}o.push({id:m,type:"relationship",source:s+p,target:s+f,zIndex:lc.Edge,hidden:!l(u),deletable:!1,data:{id:u.id,label:u.label,technology:u.technology,notes:u.notes??null,navigateTo:u.navigateTo,controlPoints:u.controlPoints??null,labelBBox:u.labelBBox??null,labelXY:null,points:u.points,color:u.color??"gray",line:u.line??"dashed",dir:u.dir??"forward",head:u.head??"normal",tail:u.tail??"none",astPath:u.astPath,drifts:u.drifts??null},interactionWidth:20})}return{bounds:r.bounds,xynodes:n,xyedges:o}}const are={parallel:1,actor:10},l4={default:"gray",active:"amber"};function BZe(e){const{actors:r,steps:n,compounds:o,parallelAreas:i,bounds:a}=e.sequenceLayout,l=[],s=[],c=d=>gt(e.nodes.find(u=>u.id===d));for(const d of o)l.push(IZe(d,c(d.origin),e));for(const d of i)l.push(OZe(d,e));for(const d of r)l.push(LZe(d,c(d.id),a,e));for(const d of n){const u=e.edges.find(p=>p.id===d.id);if(!u)throw new Error(`Edge ${d.id} not found`);s.push(FZe(d,u))}return{bounds:a,xynodes:l,xyedges:s}}function IZe({id:e,x:r,y:n,width:o,height:i,depth:a},l,s){return{id:e,type:"view-group",data:{id:l.id,title:l.title,color:l.color??"gray",shape:l.shape,style:l.style,tags:l.tags,x:r,y:n,viewId:s.id,depth:a,isViewGroup:!0,drifts:l.drifts??null},position:{x:r,y:n},draggable:!1,selectable:!1,focusable:!1,style:{pointerEvents:"none"},width:o,initialWidth:o,height:i,initialHeight:i}}function OZe({parallelPrefix:e,x:r,y:n,width:o,height:i},a){return{id:`seq-parallel-${e}`,type:"seq-parallel",data:{id:`seq-parallel-${e}`,title:"PARALLEL",technology:null,color:l4.default,shape:"rectangle",style:{},tags:[],x:r,y:n,level:0,icon:null,width:o,height:i,description:null,viewId:a.id,parallelPrefix:e,drifts:null},zIndex:are.parallel,position:{x:r,y:n},draggable:!1,deletable:!1,selectable:!1,focusable:!1,style:{pointerEvents:"none"},width:o,initialWidth:o,height:i,initialHeight:i}}function LZe({id:e,x:r,y:n,width:o,height:i,ports:a},l,s,c){return{id:e,type:"seq-actor",data:{id:l.id,x:r,y:n,level:0,icon:l.icon??null,isMultiple:l.style.multiple??!1,title:l.title,width:o,height:i,color:l.color,navigateTo:l.navigateTo??null,shape:l.shape,style:l.style,tags:l.tags,modelFqn:l.modelRef??null,technology:l.technology??null,description:l.description??null,viewHeight:s.height,viewId:c.id,ports:a,drifts:l.drifts??null},deletable:!1,selectable:!0,zIndex:are.actor,position:{x:r,y:n},width:o,initialWidth:o,height:i,initialHeight:i}}function FZe({id:e,labelBBox:r,sourceHandle:n,targetHandle:o},i){return{id:e,type:"seq-step",data:{id:e,label:i.label,technology:i.technology,notes:i.notes??null,navigateTo:i.navigateTo,controlPoints:null,labelBBox:{x:0,y:0,width:r?.width??i.labelBBox?.width??32,height:r?.height??i.labelBBox?.height??32},labelXY:null,points:i.points,color:i.color,line:i.line,dir:"forward",head:i.head??"normal",tail:i.tail??"none",astPath:i.astPath,drifts:i.drifts??null},selectable:!0,focusable:!1,zIndex:20,interactionWidth:40,source:i.source,sourceHandle:n,target:i.target,targetHandle:o}}function lre({dynamicViewVariant:e,...r}){const n=r.view,o=n._type==="dynamic",{bounds:i,xynodes:a,xyedges:l}=o&&e==="sequence"?BZe(n):NZe(r);return o&&n.variant!==e?{view:{...n,bounds:i,variant:e},xynodes:a,xyedges:l}:{view:i===n.bounds?n:{...n,bounds:i},xynodes:a,xyedges:l}}class sre{}class Tg extends sre{constructor(r,n,o){super(),this.getEdgePosition=r,this.computePosition=n,this.propertyToEdit=o}alignTo;computeLayout(r){this.alignTo=this.getEdgePosition(r)}applyPosition(r){return{[this.propertyToEdit]:this.computePosition(this.alignTo,r)}}}class VZe extends sre{layout=new Map;axisPreset;get primaryAxisCoord(){return this.axisPreset.primaryAxisCoord}get secondaryAxisCoord(){return this.axisPreset.secondaryAxisCoord}get primaryAxisDimension(){return this.axisPreset.primaryAxisDimension}get secondaryAxisDimension(){return this.axisPreset.secondaryAxisDimension}constructor(r){super(),this.axisPreset=r==="Column"?{primaryAxisDimension:"width",secondaryAxisDimension:"height",primaryAxisCoord:"x",secondaryAxisCoord:"y"}:{primaryAxisDimension:"height",secondaryAxisDimension:"width",primaryAxisCoord:"y",secondaryAxisCoord:"x"}}applyPosition(r){return this.layout?.get(r.id)??{}}computeLayout(r){const n=Jr(r,mw(a=>a[this.primaryAxisCoord])),o=this.getLayoutRect(n),i=this.getLayers(n);this.layout=this.buildLayout(i,o,n)}getLayoutRect(r){const n=Math.min(...r.map(l=>l.x)),o=Math.min(...r.map(l=>l.y)),i=Math.max(...r.map(l=>l.x+l.width)),a=Math.max(...r.map(l=>l.y+l.height));return{x:n,y:o,width:i-n,height:a-o}}getLayers(r){const n=[];let o=0,i=null;for(let a of r)if(i&&a[this.primaryAxisCoord]a.nodes.sort((l,s)=>l[this.secondaryAxisCoord]-s[this.secondaryAxisCoord])),n}buildLayout(r,n,o){const i=new Map(o.map(v=>[v.id,v])),a=[],l=r.reduce((v,w)=>v+w.primaryAxisSize,0),s=r.length>1?(n[this.primaryAxisDimension]-l)/(r.length-1):0,c=r.reduce((v,w,x)=>r[v].occupiedSpacev+w.primaryAxisSize+s,n[this.primaryAxisCoord]),p=this.buildLayerLayout(d,n,u,i,null);d.layout=p,a.push(...p.nodePositions);let f=u+d.primaryAxisSize+s,m=d;for(let v=c+1;v=0;v--){const w=r[v];f-=w.primaryAxisSize+s,w.layout=this.buildLayerLayout(w,n,f,i,m),a.push(...w.layout.nodePositions),m=w.layout.refLayer??w}return new Map(a)}buildLayerLayout(r,n,o,i,a){let l=this.scoreLayout(this.spaceAround(r,n,o),i);if(r.nodes.length!=1){const s=this.scoreLayout(this.spaceBetween(r,n,o),i);l=s[0]=r.nodes.length){const s=this.scoreLayout(this.placeInGaps(r,o,a),i);l=s[0]=r.nodes.length){const s=this.scoreLayout(this.placeInCells(r,o,a),i);l=s[0]c[this.secondaryAxisCoord]))l.set(s.id,{[this.secondaryAxisCoord]:a,[this.primaryAxisCoord]:o}),a+=s[this.secondaryAxisDimension]+i;return{nodePositions:l,refLayer:null}}placeInGaps(r,n,o){const i=new Map,a=r.nodes,l=this.getGapsPositions(o);let s=0;for(let c=0,d=a[c];c{const a=n.get(o);return He(a,`Could not find original rect for node ${o}`),[Hq(a,["x","y"]),i]}),un(([o,i])=>Math.abs(o[this.secondaryAxisCoord]-i[this.secondaryAxisCoord])),gw((o,i)=>o+i,0)),r]}getGapsPositions(r){const n=[],{layout:o,nodes:i}=r;He(o,"Layout of the layer must be computed before calling getGapsPositions");for(let a=1;aMath.min(...r.map(n=>n.x)),(r,n)=>Math.floor(r),"x");case"Top":return new Tg(r=>Math.min(...r.map(n=>n.y)),(r,n)=>Math.floor(r),"y");case"Right":return new Tg(r=>Math.max(...r.map(n=>n.x+n.width)),(r,n)=>Math.floor(r-n.width),"x");case"Bottom":return new Tg(r=>Math.max(...r.map(n=>n.y+n.height)),(r,n)=>Math.floor(r-n.height),"y");case"Center":return new Tg(r=>Math.min(...r.map(n=>n.x+n.width/2)),(r,n)=>Math.floor(r-n.width/2),"x");case"Middle":return new Tg(r=>Math.min(...r.map(n=>n.y+n.height/2)),(r,n)=>Math.floor(r-n.height/2),"y")}}function cre(e){const{width:r,height:n}=_o(e);return{...e.internals.positionAbsolute,id:e.id,width:r,height:n}}function HZe(e){switch(e){case"Left":case"Right":case"Top":case"Bottom":case"Center":case"Middle":return qZe(e);case"Column":case"Row":return new VZe(e);default:Qo(e)}}const S0=e=>Qe.createAction(({context:r,event:n})=>{let o,i;e?(o=e.viewport,i=e.duration):(ht(n,"xyflow.setViewport"),o=n.viewport,i=n.duration),i=i??400;const{panZoom:a}=gt(r.xystore).getState(),l=i>0?{duration:i,interpolate:"smooth"}:void 0;a?.setViewport({x:Math.round(o.x),y:Math.round(o.y),zoom:o.zoom},l).catch(s=>{console.error("Error during fitDiagram panZoom setViewport",{err:s})})}),s4=e=>Qe.enqueueActions(({context:r,event:n,enqueue:o})=>{let i=r.view.bounds,a;e?(i=e.bounds??r.view.bounds,a=e.duration):n.type==="xyflow.fitDiagram"&&(i=n.bounds??r.view.bounds,a=n.duration,o.assign({viewportChangedManually:!1})),a??=450;const{width:l,height:s,panZoom:c,transform:d}=gt(r.xystore).getState(),u=Math.max(1,d[2]),p=Ws(i,l,s,xa,u,r.fitViewPadding);p.x=Math.round(p.x),p.y=Math.round(p.y);const f=a>0?{duration:a,interpolate:"smooth"}:void 0;c?.setViewport(p,f).catch(m=>{console.error("Error during fitDiagram panZoom setViewport",{err:m})})}),E0=()=>Qe.createAction(({context:e})=>{const r=!!e.activeWalkthrough&&e.dynamicViewVariant==="sequence",{bounds:n,duration:o=450}=r?nGe({context:e}):tGe({context:e}),{width:i,height:a,panZoom:l,transform:s}=gt(e.xystore).getState(),c=Math.max(1,s[2]),d=Ws(n,i,a,xa,c,e.fitViewPadding);d.x=Math.round(d.x),d.y=Math.round(d.y);const u=o>0?{duration:o,interpolate:"smooth"}:void 0;l?.setViewport(d,u).catch(p=>{console.error("Error during fitFocusedBounds panZoom setViewport",{err:p})})}),lz=30,dre=e=>{const{delay:r=lz,...n}=e??{};return Qe.raise({type:"xyflow.setViewport",...n},{id:"fitDiagram",delay:r})},fc=()=>Qe.cancel("fitDiagram"),c4=e=>{const{delay:r=lz,...n}=e??{};return Qe.raise({type:"xyflow.fitDiagram",...n},{id:"fitDiagram",delay:r})},UZe=e=>Qe.raise(({context:r})=>({type:"update.view",view:r.view}),{delay:lz}),sz=e=>Qe.assign(({context:r})=>({viewportBefore:{wasChangedManually:r.viewportChangedManually,value:{...r.viewport}}})),cz=e=>Qe.enqueueActions(({enqueue:r,context:{viewportBefore:n}})=>{r(fc()),n?(r.assign({viewportChangedManually:n.wasChangedManually,viewportBefore:null}),e&&e.delay===0?r(S0({viewport:n.value,...e})):r(dre({viewport:n.value,...e}))):e&&e.delay===0?r(s4({...e})):r(c4({...e}))}),ure=()=>Qe.assign(({context:e})=>({toggledFeatures:{...e.toggledFeatures,enableCompareWithLatest:!1},viewportOnAutoLayout:null,viewportOnManualLayout:null})),WZe=()=>Qe.assign(({context:e,event:r})=>{if(ht(r,"xyflow.edgeDoubleClick"),!r.edge.data.controlPoints)return{};const{nodeLookup:n}=e.xystore.getState();return{xyedges:e.xyedges.map(o=>{if(o.id===r.edge.id){const i=ire(n,o),a=i[0];return{...o,data:{...o.data,controlPoints:i,labelBBox:o.data.labelBBox?{...o.data.labelBBox,...a}:null,labelXY:null}}}return o})}}),Ap=()=>Qe.assign(({context:e,event:r})=>{ht(r,"xyflow.nodeClick");const{lastClickedNode:n}=e;return!n||n.id!==r.node.id?{lastClickedNode:{id:r.node.id,clicks:1,timestamp:Date.now()}}:{lastClickedNode:{id:n.id,clicks:n.clicks+1,timestamp:Date.now()}}}),d4=()=>Qe.assign(({event:e})=>{let r,n=!1;switch(e.type){case"xyflow.nodeClick":r=e.node.data.id;break;case"focus.node":r=e.nodeId,n=e.autoUnfocus===!0;break;default:throw new Error(`Unexpected event type: ${e.type} in action 'assign: focusedNode'`)}return{focusedNode:r,autoUnfocusTimer:n}}),jg=()=>Qe.assign(()=>({lastClickedNode:null})),pre=()=>Qe.assign(({event:e})=>(ht(e,"update.features"),{features:{...e.features}})),GZe=()=>Qe.assign(({event:e})=>(ht(e,"update.inputs"),{...e.inputs})),hre=e=>Qe.assign(({context:r,event:n})=>{let o;ht(n,"update.view"),o="xynodes"in n?n:lre({dynamicViewVariant:r.dynamicViewVariant,view:n.view,where:r.where});const i=az(r,o);let{lastClickedNode:a,focusedNode:l,activeWalkthrough:s}=r;if(a||l||s){const c=new Set(i.xynodes.map(u=>u.id));a&&!c.has(a.id)&&(a=null),l&&!c.has(l)&&(l=null);const d=s?.stepId;return d&&!i.xyedges.some(u=>u.id===d)&&(s=null),{...i,lastClickedNode:a,focusedNode:l,activeWalkthrough:s}}return i}),C0=()=>Qe.enqueueActions(({context:e,enqueue:r})=>{const n=DZe(e);n?r.assign(n):r.raise({type:"key.esc"})}),u4=()=>Qe.assign(({context:e})=>({xynodes:e.xynodes.map(tr.setDimmed(!1)),xyedges:e.xyedges.map(tr.setData({dimmed:!1,active:!1}))})),YZe=()=>Qe.assign(({event:e})=>(ht(e,"switch.dynamicViewVariant"),{dynamicViewVariant:e.variant})),XZe=e=>Qe.assign(({context:r,event:n})=>{let o=e?.node;return o||(ht(n,"xyflow.nodeMouseEnter"),o=n.node),{xynodes:r.xynodes.map(i=>i.id===o.id?tr.setHovered(i,!0):i)}}),KZe=e=>Qe.assign(({context:r,event:n})=>{let o=e?.node;return o||(ht(n,"xyflow.nodeMouseLeave"),o=n.node),{xynodes:r.xynodes.map(i=>i.id===o.id?tr.setHovered(i,!1):i)}}),dz=()=>Qe.emit(()=>({type:"paneClick"})),fre=e=>Qe.emit(({event:r})=>e?{type:"openSource",params:e}:(ht(r,"open.source"),{type:"openSource",params:r})),ZZe=()=>Qe.emit(({context:e})=>(He(e.xyflow,"XYFlow instance not found"),{type:"initialized",instance:e.xyflow})),Dp=()=>Qe.emit(({context:e,event:r})=>(ht(r,"xyflow.nodeClick"),{type:"nodeClick",node:gt(yg(e,r.node.id),`Node ${r.node.id} not found in diagram`),xynode:r.node})),uz=e=>Qe.emit(({context:r})=>({type:"navigateTo",viewId:e?.viewId??gt(r.lastOnNavigate,"Invalid state, lastOnNavigate is null").toView})),pz=()=>Qe.emit(({context:e,event:r})=>(ht(r,"xyflow.edgeClick"),{type:"edgeClick",edge:gt(yR(e,r.edge.id),`Edge ${r.edge.id} not found in diagram`),xyedge:r.edge})),gre=e=>Qe.enqueueActions(({event:r,enqueue:n})=>{let o=e;o||(ht(r,"trigger.change"),o=r.change),n.assign({viewportChangedManually:!0}),n.sendTo(zr.editorActor,{type:"change",change:o})}),QZe=()=>Qe.enqueueActions(({event:e,system:r,context:n,enqueue:o})=>{if(!n.features.enableCompareWithLatest){console.warn("Layout type cannot be changed while CompareWithLatest feature is disabled");return}const i=n.view._layout;let a=i==="auto"?"manual":"auto";if(e.type==="emit.onLayoutTypeChange"&&(a=e.layoutType),i===a){console.warn("Ignoring layout type change event, layout type is already",i);return}if(n.toggledFeatures.enableCompareWithLatest===!0){i==="manual"&&a==="auto"&&zr(r).editorActorRef?.send({type:"cancel"});const l=n.viewport;i==="auto"&&o.assign({viewportOnAutoLayout:l}),i==="manual"&&o.assign({viewportOnManualLayout:l})}o.emit({type:"onLayoutTypeChange",layoutType:a})}),JZe=e=>Qe.createAction(({context:r,event:n})=>{let o;ht(n,"layout.align"),o=n.mode;const i=gt(r.xystore,"xystore is not initialized"),{nodeLookup:a,parentLookup:l}=i.getState(),s=[...new Set(a.values().filter(p=>p.selected).map(p=>p.id)).difference(new Set(l.keys()))];if(!xn(s,2)){console.warn("At least 2 nodes must be selected to align");return}const c=Jte(i,s),d=HZe(o),u=s.map(p=>({node:gt(a.get(p)),rect:gt(c.rects.get(p))}));d.computeLayout(u.map(({node:p})=>cre(p)));for(const{rect:p,node:f}of u)p.positionAbsolute={...p.positionAbsolute,...d.applyPosition(cre(f))};c.updateXYFlow()}),eQe=()=>Qe.assign(({context:e})=>{const{nodeLookup:r}=e.xystore.getState();return{xyedges:e.xyedges.map(n=>{if(!n.data.controlPoints)return n;const o=ire(r,n),i=o[0];return{...n,data:{...n.data,controlPoints:o,labelBBox:n.data.labelBBox?{...n.data.labelBBox,x:i.x,y:i.y}:null,labelXY:n.data.labelXY?i:null}}})}}),tQe=()=>Qe.assign(({context:e,event:r})=>{ht(r,"notations.highlight");const{notation:n,kind:o}=r,i=o?[o]:n.kinds,a=c=>c.notation===n.title&&c.shape===n.shape&&c.color===n.color&&i.includes(c.kind),l=e.xynodes.map(c=>{const d=yg(e,c.id),u=d&&a(d);return tr.setDimmed(c,u?!1:"immediate")}),s=e.xyedges.map(c=>tr.setDimmed(c,!0));return{xynodes:l,xyedges:s}}),rQe=()=>Qe.assign(({context:e,event:r})=>(ht(r,"tag.highlight"),{xynodes:e.xynodes.map(n=>n.data.tags?.includes(r.tag)?tr.setDimmed(n,!1):tr.setDimmed(n,!0))})),nQe=()=>Qe.assign(({context:e,event:r})=>{ht(r,"toggle.feature");const n=e.toggledFeatures[`enable${r.feature}`]??e.features[`enable${r.feature}`],o=r.forceValue??!n;return{toggledFeatures:{...e.toggledFeatures,[`enable${r.feature}`]:o}}}),oQe=()=>Qe.sendTo(zr.searchActor,{type:"close"}),iQe=()=>Qe.sendTo(zr.overlaysActor,{type:"close.all"}),mre=()=>Qe.enqueueActions(({enqueue:e,system:r})=>{const n=zr(r).editorActorRef;n&&e.stopChild(n)}),hz=()=>Qe.enqueueActions(({enqueue:e,context:r,system:n,check:o})=>{const i=o("enabled: Editor"),a=zr(n).editorActorRef;if(!i&&a){e.stopChild(a);return}i&&!a&&e.spawnChild("editorActor",{id:"editor",systemId:"editor",input:{viewId:r.view.id},syncSnapshot:!0})}),fz=(e="node")=>Qe.sendTo(zr.editorActor,{type:"edit.start",subject:e}),aQe=()=>Qe.sendTo(zr.editorActor,{type:"synced"}),gz=(e=!0)=>Qe.sendTo(zr.editorActor,{type:"edit.finish",wasChanged:e}),yre=()=>Qe.sendTo(zr.editorActor,{type:"cancel"}),vre=e=>"modelFqn"in e.data&&Zn(e.data.modelFqn),mz=e=>Qe.enqueueActions(({context:r,event:n,enqueue:o})=>{let i=null,a,l;switch(!0){case n.type==="xyflow.nodeClick":{if(!vre(n.node)){console.warn("No modelFqn in clicked node data");return}l=n.node.data.modelFqn,a=n.node.data.id;break}case n.type==="open.elementDetails":{l=n.fqn,a=n.fromNode;break}default:{if(!r.lastClickedNode){console.warn("No last clicked node");return}a=r.lastClickedNode.id;const c=r.xynodes.find(d=>d.id===a);if(!c||!vre(c)){console.warn("No modelFqn in last clicked node");return}l=c.data.modelFqn;break}}const s=a?r.xystore.getState().nodeLookup.get(a):null;if(a&&s){const c=Ku(s),d=r.xyflow.getZoom(),u={...r.xyflow.flowToScreenPosition(c),width:c.width*d,height:c.height*d};i={node:a,clientRect:u}}o.sendTo(zr.overlaysActor,{type:"open.elementDetails",subject:l,currentView:r.view,...i&&{initiatedFrom:i}})}),yz=()=>Qe.enqueueActions(({context:e,event:r,enqueue:n,check:o})=>{if(ht(r,["open.relationshipsBrowser","open.relationshipDetails","open.elementDetails"]),!o("enabled: Overlays")){console.warn("Overlays feature is disabled");return}switch(r.type){case"open.elementDetails":{o("enabled: ElementDetails")?n(mz()):console.warn("ElementDetails feature is disabled");break}case"open.relationshipsBrowser":{n.sendTo(zr.overlaysActor,{type:"open.relationshipsBrowser",subject:r.fqn,viewId:e.view.id,scope:"view",closeable:!0,enableChangeScope:!0,enableSelectSubject:!0});break}case"open.relationshipDetails":{n.sendTo(zr.overlaysActor,{type:"open.relationshipDetails",viewId:e.view.id,...r.params});break}default:Qo(r)}}),p4=()=>Qe.enqueueActions(({context:e,enqueue:r})=>{const n=e.focusedNode??e.lastClickedNode?.id;if(!n||!e.features.enableVscode)return;const o=yg(e,n);o&&(o.deploymentRef?r.raise({type:"open.source",deployment:o.deploymentRef}):o.modelRef&&r.raise({type:"open.source",element:o.modelRef}))}),bre=()=>Qe.enqueueActions(({enqueue:e,check:r,system:n})=>{const o=r("enabled: Overlays"),i=zr(n).overlaysActorRef;if(o&&!i){e.spawnChild("overlaysActorLogic",{id:"overlays",systemId:"overlays"});return}!o&&i&&(e.sendTo(i,{type:"close.all"}),e.stopChild("overlays"))}),xre=()=>Qe.enqueueActions(({enqueue:e,context:{features:{enableSearch:r}},system:n})=>{const o=zr(n).searchActorRef;if(r&&!o){e.spawnChild("searchActorLogic",{id:"search",systemId:"search"});return}!r&&o&&(e.sendTo(o,{type:"close"}),e.stopChild("search"))}),lQe=()=>Qe.enqueueActions(({enqueue:e,context:r,event:n})=>{ht(n,"xyflow.edgeMouseEnter");let o=n.edge;e.assign({xyedges:r.xyedges.map(i=>i.id===n.edge.id?(o=tr.setHovered(i,!0),o):i)}),e.emit({type:"edgeMouseEnter",edge:o,event:n.event})}),sQe=()=>Qe.enqueueActions(({enqueue:e,context:r,event:n})=>{ht(n,"xyflow.edgeMouseLeave");let o=n.edge;e.assign({xyedges:r.xyedges.map(i=>i.id===n.edge.id?(o=tr.setHovered(i,!1),o):i)}),e.emit({type:"edgeMouseLeave",edge:o,event:n.event})}),wre=()=>Qe.spawnChild("hotkeyActorLogic",{id:"hotkey"}),kre=()=>Qe.stopChild("hotkey"),_re=3e3,cQe=()=>Qe.enqueueActions(({context:e,enqueue:r})=>{e.autoUnfocusTimer&&_re>0&&r.raise({type:"focus.autoUnfocus"},{delay:_re,id:"autoUnfocusTimer"})}),dQe=()=>Qe.cancel("autoUnfocusTimer"),uQe=()=>Qe.enqueueActions(({enqueue:e,context:r,event:n})=>{ht(n,["navigate.to","navigate.back","navigate.forward"]);const{view:o,focusedNode:i,activeWalkthrough:a,dynamicViewVariant:l,viewport:s,viewportChangedManually:c,viewportBefore:d,navigationHistory:{currentIndex:u,history:p}}=r;let f=[...p];if(u{v.viewport={...s},v.viewportChangedManually=c,v.focusedNode=i,o._type==="dynamic"?(v.activeWalkthrough=a?.stepId??null,v.dynamicViewVariant=l):(v.activeWalkthrough=null,v.dynamicViewVariant=null),d?v.viewportBefore=d:delete v.viewportBefore});f=[...p],f[u]=m}switch(n.type){case"navigate.to":{e.assign({navigationHistory:{currentIndex:u,history:f},lastOnNavigate:{fromView:r.view.id,toView:n.viewId,fromNode:n.fromNode??null,focusOnElement:n.focusOnElement??null}}),e(uz());break}case"navigate.back":{He(u>0,"Cannot navigate back");const m=f[u-1];e.assign({navigationHistory:{currentIndex:u-1,history:f},lastOnNavigate:null}),e(uz({viewId:m.viewId}));break}case"navigate.forward":{He(uQe.enqueueActions(({enqueue:e,event:r,context:n})=>{if(r.type!=="update.view"){console.warn(`Ignoring unexpected event type: ${r.type} in action 'update.view'`);return}const o=r.view;if(o.id!==n.view.id){console.warn("updateView called for another view - ignoring",{event:r});return}if(e(hre()),r.source==="editor")return;e(aQe());let i=!n.viewportChangedManually&&!n.focusedNode&&!n.activeWalkthrough;if(n.toggledFeatures.enableCompareWithLatest===!0&&n.view._layout!==o._layout){if(o._layout==="auto"&&n.viewportOnAutoLayout){e(S0({viewport:n.viewportOnAutoLayout,duration:0}));return}if(o._layout==="manual"&&n.viewportOnManualLayout){e(S0({viewport:n.viewportOnManualLayout,duration:0}));return}}i=i||o._type==="dynamic"&&n.view._type==="dynamic"&&o.variant!==n.view.variant,i=i||n.toggledFeatures.enableCompareWithLatest===!0&&!!o._layout&&n.view._layout!==o._layout,i&&(e(fc()),e(c4({bounds:r.view.bounds})))});var Ho={},bz={},Sre;function Ere(){if(Sre)return bz;Sre=1;var e=I2();function r(i,{machine:a,context:l},s,c){const d=(u,p)=>{if(typeof u=="string"){const f=e.resolveReferencedActor(a,u);if(!f)throw new Error(`Actor logic '${u}' not implemented in machine '${a.id}'`);const m=e.createActor(f,{id:p?.id,parent:i.self,syncSnapshot:p?.syncSnapshot,input:typeof p?.input=="function"?p.input({context:l,event:s,self:i.self}):p?.input,src:u,systemId:p?.systemId});return c[m.id]=m,m}else return e.createActor(u,{id:p?.id,parent:i.self,syncSnapshot:p?.syncSnapshot,input:p?.input,src:u,systemId:p?.systemId})};return(u,p)=>{const f=d(u,p);return c[f.id]=f,i.defer(()=>{f._processingStatus!==e.ProcessingStatus.Stopped&&f.start()}),f}}function n(i,a,l,s,{assignment:c}){if(!a.context)throw new Error("Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.");const d={},u={context:a.context,event:l.event,spawn:r(i,a,l.event,d),self:i.self,system:i.system};let p={};if(typeof c=="function")p=c(u,s);else for(const m of Object.keys(c)){const v=c[m];p[m]=typeof v=="function"?v(u,s):v}const f=Object.assign({},a.context,p);return[e.cloneMachineSnapshot(a,{context:f,children:Object.keys(d).length?{...a.children,...d}:a.children}),void 0,void 0]}function o(i){function a(l,s){}return a.type="xstate.assign",a.assignment=i,a.resolve=n,a}return bz.assign=o,bz}var gc={},Cre;function pQe(){if(Cre)return gc;Cre=1;var e=I2(),r=Ere();function n(k,C,_,$,{event:R}){const T=typeof R=="function"?R(_,$):R;return[C,{event:T},void 0]}function o(k,{event:C}){k.defer(()=>k.emit(C))}function i(k){function C(_,$){}return C.type="xstate.emit",C.event=k,C.resolve=n,C.execute=o,C}let a=(function(k){return k.Parent="#_parent",k.Internal="#_internal",k})({});function l(k,C,_,$,{to:R,event:T,id:A,delay:z},j){const I=C.machine.implementations.delays;if(typeof T=="string")throw new Error(`Only event objects may be used with sendTo; use sendTo({ type: "${T}" }) instead`);const N=typeof T=="function"?T(_,$):T;let L;if(typeof z=="string"){const V=I&&I[z];L=typeof V=="function"?V(_,$):V}else L=typeof z=="function"?z(_,$):z;const H=typeof R=="function"?R(_,$):R;let P;if(typeof H=="string"){if(H===a.Parent?P=k.self._parent:H===a.Internal?P=k.self:H.startsWith("#_")?P=C.children[H.slice(2)]:P=j.deferredActorIds?.includes(H)?H:C.children[H],!P)throw new Error(`Unable to send event to actor '${H}' from machine '${C.machine.id}'.`)}else P=H||k.self;return[C,{to:P,targetId:typeof H=="string"?H:void 0,event:N,id:A,delay:L},void 0]}function s(k,C,_){typeof _.to=="string"&&(_.to=C.children[_.to])}function c(k,C){k.defer(()=>{const{to:_,event:$,delay:R,id:T}=C;if(typeof R=="number"){k.system.scheduler.schedule(k.self,_,$,R,T);return}k.system._relay(k.self,_,$.type===e.XSTATE_ERROR?e.createErrorActorEvent(k.self.id,$.data):$)})}function d(k,C,_){function $(R,T){}return $.type="xstate.sendTo",$.to=k,$.event=C,$.id=_?.id,$.delay=_?.delay,$.resolve=l,$.retryResolve=s,$.execute=c,$}function u(k,C){return d(a.Parent,k,C)}function p(k,C){return d(k,({event:_})=>_,C)}function f(k,C,_,$,{collect:R}){const T=[],A=function(z){T.push(z)};return A.assign=(...z)=>{T.push(r.assign(...z))},A.cancel=(...z)=>{T.push(e.cancel(...z))},A.raise=(...z)=>{T.push(e.raise(...z))},A.sendTo=(...z)=>{T.push(d(...z))},A.sendParent=(...z)=>{T.push(u(...z))},A.spawnChild=(...z)=>{T.push(e.spawnChild(...z))},A.stopChild=(...z)=>{T.push(e.stopChild(...z))},A.emit=(...z)=>{T.push(i(...z))},R({context:_.context,event:_.event,enqueue:A,check:z=>e.evaluateGuard(z,C.context,_.event,C),self:k.self,system:k.system},$),[C,void 0,T]}function m(k){function C(_,$){}return C.type="xstate.enqueueActions",C.collect=k,C.resolve=f,C}function v(k,C,_,$,{value:R,label:T}){return[C,{value:typeof R=="function"?R(_,$):R,label:T},void 0]}function w({logger:k},{value:C,label:_}){_?k(_,C):k(C)}function x(k=({context:_,event:$})=>({context:_,event:$}),C){function _($,R){}return _.type="xstate.log",_.value=k,_.label=C,_.resolve=v,_.execute=w,_}return gc.SpecialTargets=a,gc.emit=i,gc.enqueueActions=m,gc.forwardTo=p,gc.log=x,gc.sendParent=u,gc.sendTo=d,gc}var $re;function hQe(){if($re)return Ho;$re=1,Object.defineProperty(Ho,"__esModule",{value:!0});var e=Ere(),r=I2(),n=pQe();return RR(),Ho.assign=e.assign,Ho.cancel=r.cancel,Ho.raise=r.raise,Ho.spawnChild=r.spawnChild,Ho.stop=r.stop,Ho.stopChild=r.stopChild,Ho.emit=n.emit,Ho.enqueueActions=n.enqueueActions,Ho.forwardTo=n.forwardTo,Ho.log=n.log,Ho.sendParent=n.sendParent,Ho.sendTo=n.sendTo,Ho}var fr=hQe();const fQe=Qe.createStateConfig({on:{"xyflow.init":{actions:fr.assign(({context:e,event:r})=>({initialized:{...e.initialized,xyflow:!0},xyflow:r.instance})),target:"isReady"},"update.view":{actions:[hre(),fr.assign(({context:e})=>({initialized:{...e.initialized,xydata:!0}}))],target:"isReady"}}}),gQe=Qe.createStateConfig({always:[{guard:"isReady",actions:[s4({duration:0}),fr.assign(({context:e})=>({navigationHistory:{currentIndex:0,history:[{viewId:e.view.id,viewport:{...e.xyflow.getViewport()},viewportChangedManually:!1}]}})),ZZe()],target:"ready"},{target:"initializing"}]}),mQe=()=>Qe.assign(({context:e,event:r})=>{ht(r,"update.view");let{lastOnNavigate:n,navigationHistory:{currentIndex:o,history:i}}=e;const a=i[o];if(!a||a.viewId===r.view.id||n)return{};const l=o>0?gt(i[o-1]):null;if(l&&l.viewId===r.view.id)return{navigationHistory:{currentIndex:o-1,history:i},lastOnNavigate:null};const s=ovR(u)===c);if(d)return{lastOnNavigate:{fromView:e.view.id,toView:r.view.id,fromNode:d.id}}}return{}}),yQe=Qe.createStateConfig({id:zn.navigating.slice(1),always:{target:zn.idle,actions:[fc(),mQe(),ure(),rs(({enqueue:e,context:r,event:n})=>{ht(n,"update.view");const{xyflow:o,xystore:i,navigationHistory:{currentIndex:a,history:l}}=r,s="xynodes"in n?n:{...n,...lre({dynamicViewVariant:r.dynamicViewVariant,view:n.view,where:r.where})};He(o,"xyflow is not initialized");const c=x=>{const k=o.getZoom(),C=x.zoom({type:"focus.node",nodeId:e.node.id})),Dp()]}],"focus.node":{actions:[d4(),C0(),p4(),E0()]},"key.esc":{target:zn.idle},"xyflow.paneClick":{actions:[jg(),dz()],target:zn.idle},"notations.unhighlight":{actions:C0()},"tag.unhighlight":{actions:C0()},"update.view":{guard:"is same view",actions:[vz(),C0()]}}}),bQe=Qe.createStateConfig({id:zn.idle.slice(1),on:{"xyflow.nodeClick":[{guard:Bd.and(["enabled: Readonly","enabled: FocusMode","click: node has connections",Bd.or(["click: same node","click: selected node"])]),actions:[Ap(),d4(),Dp()],target:zn.focused},{guard:Bd.and(["enabled: Readonly","enabled: ElementDetails","click: node has modelFqn",Bd.or(["click: same node","click: selected node"])]),actions:[Ap(),p4(),mz(),Dp()]},{actions:[Ap(),p4(),Dp()]}],"xyflow.paneClick":{actions:[jg(),dz()]},"xyflow.paneDblClick":{actions:[jg(),fr.enqueueActions(({context:e,enqueue:r,check:n})=>{n("enabled: FitView")&&r(s4()),r(fre({view:e.view.id}))})]},"focus.node":[{guard:"focus.node: autoUnfocus",actions:d4(),target:zn.focused},{guard:"enabled: FocusMode",actions:d4(),target:zn.focused}],"xyflow.edgeClick":{guard:Bd.and(["enabled: Readonly","is dynamic view","enabled: DynamicViewWalkthrough","click: selected edge"]),actions:[jg(),fr.raise(({event:e})=>({type:"walkthrough.start",stepId:e.edge.id})),pz()]}}}),xQe=Qe.createStateConfig({id:zn.printing.slice(1),entry:[fc(),sz(),rs(({enqueue:e,context:r})=>{const n=r.view.bounds,o=16;e(S0({viewport:{x:n.x+o,y:n.y+o,zoom:1},duration:0}))})],exit:[cz({delay:0,duration:0})],on:{"media.print.off":{target:zn.idle},"*":{actions:[yE(({event:e})=>`Printing state - ignoring event: ${e.type}`)]}}}),Ag=()=>Qe.enqueueActions(({context:e,enqueue:r})=>{const{activeWalkthrough:n}=e;if(!n){console.warn("Active walkthrough is null"),r.raise({type:"walkthrough.end"});return}const{stepId:o,parallelPrefix:i}=n,a=e.xyedges.find(l=>l.id===o);if(!a){console.warn("Invalid walkthrough stepId:",o),r.raise({type:"walkthrough.end"});return}r.assign({xyedges:e.xyedges.map(l=>{const s=o===l.id||!!i&&l.id.startsWith(i);return tr.setData(l,{active:s,dimmed:o!==l.id})}),xynodes:e.xynodes.map(l=>{const s=a.source!==l.id&&a.target!==l.id;return l.type==="seq-parallel"?tr.setData(l,{color:i===l.data.parallelPrefix?l4.active:l4.default,dimmed:s}):tr.setDimmed(l,s)})})}),wQe=()=>Qe.emit(({context:e})=>{const r=e.xyedges.find(n=>n.id===e.activeWalkthrough?.stepId);return He(r,"Invalid walkthrough state"),{type:"walkthroughStarted",edge:r}}),kQe=()=>Qe.emit(()=>({type:"walkthroughStopped"})),Rre=()=>Qe.emit(({context:e})=>{const r=e.xyedges.find(n=>n.id===e.activeWalkthrough?.stepId);return He(r,"Invalid walkthrough state"),{type:"walkthroughStep",edge:r}}),_Qe=Qe.createStateConfig({id:zn.walkthrough.slice(1),entry:[wre(),yre(),fc(),sz(),fr.assign({activeWalkthrough:({context:e,event:r})=>{ht(r,"walkthrough.start");const n=r.stepId??hf(e.xyedges).id;return{stepId:n,parallelPrefix:Z8(n)}}}),Ag(),E0(),wQe()],exit:[kre(),fr.enqueueActions(({enqueue:e,context:r})=>{e.assign({activeWalkthrough:null}),r.dynamicViewVariant==="sequence"&&r.activeWalkthrough?.parallelPrefix&&e.assign({xynodes:r.xynodes.map(n=>n.type==="seq-parallel"?tr.setData(n,{color:l4.default}):n)})}),u4(),cz(),kQe()],on:{"key.esc":{target:zn.idle},"key.arrow.left":{actions:fr.raise({type:"walkthrough.step",direction:"previous"})},"key.arrow.up":{actions:fr.raise({type:"walkthrough.step",direction:"previous"})},"key.arrow.right":{actions:fr.raise({type:"walkthrough.step",direction:"next"})},"key.arrow.down":{actions:fr.raise({type:"walkthrough.step",direction:"next"})},"walkthrough.step":{actions:[fr.assign(({context:e,event:r})=>{const{stepId:n}=e.activeWalkthrough,o=e.xyedges.findIndex(l=>l.id===n),i=ta(r.direction==="next"?o+1:o-1,{min:0,max:e.xyedges.length-1});if(i===o)return{};const a=e.xyedges[i].id;return{activeWalkthrough:{stepId:a,parallelPrefix:Z8(a)}}}),Ag(),E0(),Rre()]},"xyflow.edgeClick":{actions:[fr.assign(({event:e,context:r})=>!k1(e.edge.id)||e.edge.id===r.activeWalkthrough?.stepId?{}:{activeWalkthrough:{stepId:e.edge.id,parallelPrefix:Z8(e.edge.id)}}),Ag(),E0(),pz(),Rre()]},"notations.unhighlight":{actions:Ag()},"tag.unhighlight":{actions:Ag()},"update.view":{guard:"is same view",actions:[vz(),Ag()]},"walkthrough.end":{target:zn.idle},"xyflow.paneDblClick":{target:zn.idle}}}),SQe=Qe.createStateConfig({initial:"idle",entry:[fr.spawnChild("mediaPrintActorLogic",{id:"mediaPrint"}),hz(),bre(),xre()],exit:[fc(),fr.stopChild("mediaPrint"),iQe(),oQe(),mre()],states:{idle:bQe,focused:vQe,walkthrough:_Qe,printing:xQe},on:{"navigate.*":{actions:uQe()},"layout.align":{guard:"not readonly",actions:[fz("node"),JZe(),gz(!0)]},"layout.resetEdgeControlPoints":{guard:"not readonly",actions:[fz("edge"),eQe(),gz(!0)]},"layout.resetManualLayout":{guard:"not readonly",actions:[yre(),ure(),gre({op:"reset-manual-layout"})]},"xyflow.resized":{guard:({context:e})=>e.features.enableFitView&&!e.viewportChangedManually,actions:[fc(),c4({delay:200})]},"open.elementDetails":{actions:yz()},"open.relationshipsBrowser":{actions:yz()},"open.relationshipDetails":{actions:yz()},"open.source":{guard:"enabled: OpenSource",actions:fre()},"walkthrough.start":{guard:"is dynamic view",target:zn.walkthrough},"toggle.feature":{actions:[nQe(),hz()]},"update.features":{actions:[pre(),bre(),xre(),hz()]},"xyflow.nodeMouseEnter":{actions:XZe()},"xyflow.nodeMouseLeave":{actions:KZe()},"xyflow.edgeMouseEnter":{actions:lQe()},"xyflow.edgeMouseLeave":{actions:sQe()},"xyflow.edgeDoubleClick":{guard:Bd.and(["not readonly",({event:e})=>!!e.edge.data.controlPoints&&e.edge.data.controlPoints.length>0]),actions:[fz("edge"),WZe(),gz(!0)]},"notations.highlight":{actions:tQe()},"notations.unhighlight":{actions:u4()},"tag.highlight":{actions:rQe()},"tag.unhighlight":{actions:u4()},"open.search":{guard:"enabled: Search",actions:fr.sendTo(({system:e})=>zr(e).searchActorRef,({event:e})=>({type:"open",search:e.search}))},"xyflow.paneClick":{actions:[jg(),dz()]},"xyflow.nodeClick":{actions:[Ap(),Dp()]},"xyflow.edgeClick":{actions:[jg(),pz()]},"xyflow.fitDiagram":{guard:"enabled: FitView",actions:s4()},"xyflow.setViewport":{actions:S0()},"update.view":[{guard:"is another view",target:zn.navigating},{actions:vz()}],"media.print.on":{target:zn.printing}}}),xz="likec4:diagram:toggledFeatures",zre={read(){try{let e=sessionStorage.getItem(xz);return e?JSON.parse(e):null}catch(e){return console.error(`Error reading fromStorage ${xz}:`,e),null}},write(e){return sessionStorage.setItem(xz,JSON.stringify(ry(e,Nq))),e}},EQe=Qe.createMachine({initial:"initializing",context:({input:e})=>({...e,xyedges:[],xynodes:[],features:{...WG},toggledFeatures:zre.read()??{enableReadOnly:!0,enableCompareWithLatest:!1},initialized:{xydata:!1,xyflow:!1},viewportChangedManually:!1,lastOnNavigate:null,lastClickedNode:null,focusedNode:null,autoUnfocusTimer:!1,activeElementDetails:null,viewportBefore:null,viewportOnManualLayout:null,viewportOnAutoLayout:null,navigationHistory:{currentIndex:0,history:[]},viewport:{x:0,y:0,zoom:1},xyflow:null,dynamicViewVariant:e.dynamicViewVariant??(e.view._type==="dynamic"?e.view.variant:"diagram")??"diagram",activeWalkthrough:null}),states:{initializing:fQe,isReady:gQe,ready:SQe,navigating:yQe,final:{type:"final",entry:[mre(),fc(),fr.stopChild("hotkey"),fr.stopChild("overlays"),fr.stopChild("search"),fr.stopChild("mediaPrint"),fr.assign({xyflow:null,xystore:null,xyedges:[],xynodes:[],initialized:{xydata:!1,xyflow:!1}})]}},on:{"update.nodeData":{actions:fr.assign(PZe)},"update.edgeData":{actions:fr.assign(MZe)},"switch.dynamicViewVariant":{guard:({context:e,event:r})=>e.dynamicViewVariant!==r.variant,actions:[YZe(),UZe()]},"update.inputs":{actions:GZe()},"update.view-bounds":{actions:fr.assign(({context:e,event:r})=>({view:{...e.view,bounds:r.bounds}}))},"update.features":{actions:pre()},"trigger.change":{actions:gre()},"emit.onLayoutTypeChange":{actions:QZe()},"xyflow.applyNodeChanges":{actions:fr.assign({xynodes:({context:e,event:r})=>rw(r.changes,e.xynodes)})},"xyflow.applyEdgeChanges":{actions:fr.assign({xyedges:({context:e,event:r})=>nw(r.changes,e.xyedges)})},"xyflow.viewportMoved":{actions:fr.assign(({event:e,context:r})=>({viewportChangedManually:r.viewportChangedManually||e.manually,viewport:e.viewport}))},destroy:{target:".final"}}}),CQe=EQe;function $Qe({view:e,zoomable:r,pannable:n,nodesDraggable:o,nodesSelectable:i,fitViewPadding:a,where:l,children:s,dynamicViewVariant:c}){const d=vr(),u=AZe(e.id),p=vE(CQe.provide({actors:{editorActor:u}}),{id:"diagram",systemId:"diagram",input:{xystore:d,view:e,zoomable:r,pannable:n,fitViewPadding:a,nodesDraggable:o,nodesSelectable:i,where:l,dynamicViewVariant:c}}),f=S.useRef(p);f.current!==p&&(console.warn("DiagramMachine actor instance changed",{context:{previous:f.current.getSnapshot().context,current:p.getSnapshot().context}}),f.current=p);const[m,v]=S.useState(()=>nre(f));S.useEffect(()=>{v(x=>x.ref===f?x:(console.warn("DiagramMachine actorRef changed, creating new DiagramApi instance, this should not happen during the lifetime of the actor"),nre(f)))},[f]);const w=sr();return S.useEffect(()=>p.send({type:"update.features",features:w}),[w,p]),S.useEffect(()=>p.send({type:"update.inputs",inputs:{zoomable:r,where:l,pannable:n,fitViewPadding:a,nodesDraggable:o,nodesSelectable:i}}),[r,l,n,a,p,o,i]),$p(()=>{c&&p.send({type:"switch.dynamicViewVariant",variant:c})},[c,p]),_L(()=>p.send({type:"update.view",view:e,source:"external"}),[p,e]),y.jsx(tBe,{value:p,children:y.jsxs(rBe,{value:m,children:[y.jsx(QS,{children:y.jsx(TQe,{actorRef:p,children:s})}),y.jsx(jQe,{})]})})}const RQe=({context:e})=>{let r=e.toggledFeatures;const n=e.view.drifts!=null&&e.view.drifts.length>0,o=e.features.enableCompareWithLatest&&(r.enableCompareWithLatest??!1)&&ty(e.activeWalkthrough)&&n,i=e.features.enableReadOnly||r.enableReadOnly||!!e.activeWalkthrough||e.dynamicViewVariant==="sequence"&&e.view._type==="dynamic"||o&&e.view._layout==="auto";return(r.enableReadOnly!==i||r.enableCompareWithLatest!==o)&&(r={...r,enableCompareWithLatest:o,enableReadOnly:i}),{toggledFeatures:r,viewId:e.view.id}},zQe=(e,r)=>e.viewId===r.viewId&&Ir(e.toggledFeatures,r.toggledFeatures);function TQe({children:e,actorRef:r}){const{viewId:n,toggledFeatures:o}=pn(r,RQe,zQe),i=Fo().findView(n);return y.jsx(GS.Provider,{value:i,children:y.jsx(gp,{overrides:o,children:e})})}const jQe=S.memo(()=>{const e=Mt(),{onNavigateTo:r,onOpenSource:n,onLayoutTypeChange:o,handlersRef:i}=mg();ji("openSource",({params:l})=>n?.(l)),ji("navigateTo",({viewId:l})=>r?.(l)),ji("onLayoutTypeChange",({layoutType:l})=>{o?.(l)}),ji("initialized",({instance:l})=>{try{i.current.onInitialized?.({diagram:e,xyflow:l})}catch(s){console.error(s)}},{once:!0});const a=pa(l=>l.toggledFeatures,Ir);return $p(()=>{zre.write(N$e(a,ty))},[a]),null}),h4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:e=>e>=255?255:e<0?0:e,g:e=>e>=255?255:e<0?0:e,b:e=>e>=255?255:e<0?0:e,h:e=>e%360,s:e=>e>=100?100:e<0?0:e,l:e=>e>=100?100:e<0?0:e,a:e=>e>=1?1:e<0?0:e},toLinear:e=>{const r=e/255;return e>.03928?Math.pow((r+.055)/1.055,2.4):r/12.92},hue2rgb:(e,r,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(r-e)*6*n:n<1/2?r:n<2/3?e+(r-e)*(2/3-n)*6:e),hsl2rgb:({h:e,s:r,l:n},o)=>{if(!r)return n*2.55;e/=360,r/=100,n/=100;const i=n<.5?n*(1+r):n+r-n*r,a=2*n-i;switch(o){case"r":return h4.hue2rgb(a,i,e+1/3)*255;case"g":return h4.hue2rgb(a,i,e)*255;case"b":return h4.hue2rgb(a,i,e-1/3)*255}},rgb2hsl:({r:e,g:r,b:n},o)=>{e/=255,r/=255,n/=255;const i=Math.max(e,r,n),a=Math.min(e,r,n),l=(i+a)/2;if(o==="l")return l*100;if(i===a)return 0;const s=i-a,c=l>.5?s/(2-i-a):s/(i+a);if(o==="s")return c*100;switch(i){case e:return((r-n)/s+(rr>n?Math.min(r,Math.max(n,e)):Math.min(n,Math.max(r,e)),round:e=>Math.round(e*1e10)/1e10},DQe={dec2hex:e=>{const r=Math.round(e).toString(16);return r.length>1?r:`0${r}`}},Tt={channel:h4,lang:AQe,unit:DQe},Ld={};for(let e=0;e<=255;e++)Ld[e]=Tt.unit.dec2hex(e);const $o={ALL:0,RGB:1,HSL:2};class PQe{constructor(){this.type=$o.ALL}get(){return this.type}set(r){if(this.type&&this.type!==r)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=r}reset(){this.type=$o.ALL}is(r){return this.type===r}}class MQe{constructor(r,n){this.color=n,this.changed=!1,this.data=r,this.type=new PQe}set(r,n){return this.color=n,this.changed=!1,this.data=r,this.type.type=$o.ALL,this}_ensureHSL(){const r=this.data,{h:n,s:o,l:i}=r;n===void 0&&(r.h=Tt.channel.rgb2hsl(r,"h")),o===void 0&&(r.s=Tt.channel.rgb2hsl(r,"s")),i===void 0&&(r.l=Tt.channel.rgb2hsl(r,"l"))}_ensureRGB(){const r=this.data,{r:n,g:o,b:i}=r;n===void 0&&(r.r=Tt.channel.hsl2rgb(r,"r")),o===void 0&&(r.g=Tt.channel.hsl2rgb(r,"g")),i===void 0&&(r.b=Tt.channel.hsl2rgb(r,"b"))}get r(){const r=this.data,n=r.r;return!this.type.is($o.HSL)&&n!==void 0?n:(this._ensureHSL(),Tt.channel.hsl2rgb(r,"r"))}get g(){const r=this.data,n=r.g;return!this.type.is($o.HSL)&&n!==void 0?n:(this._ensureHSL(),Tt.channel.hsl2rgb(r,"g"))}get b(){const r=this.data,n=r.b;return!this.type.is($o.HSL)&&n!==void 0?n:(this._ensureHSL(),Tt.channel.hsl2rgb(r,"b"))}get h(){const r=this.data,n=r.h;return!this.type.is($o.RGB)&&n!==void 0?n:(this._ensureRGB(),Tt.channel.rgb2hsl(r,"h"))}get s(){const r=this.data,n=r.s;return!this.type.is($o.RGB)&&n!==void 0?n:(this._ensureRGB(),Tt.channel.rgb2hsl(r,"s"))}get l(){const r=this.data,n=r.l;return!this.type.is($o.RGB)&&n!==void 0?n:(this._ensureRGB(),Tt.channel.rgb2hsl(r,"l"))}get a(){return this.data.a}set r(r){this.type.set($o.RGB),this.changed=!0,this.data.r=r}set g(r){this.type.set($o.RGB),this.changed=!0,this.data.g=r}set b(r){this.type.set($o.RGB),this.changed=!0,this.data.b=r}set h(r){this.type.set($o.HSL),this.changed=!0,this.data.h=r}set s(r){this.type.set($o.HSL),this.changed=!0,this.data.s=r}set l(r){this.type.set($o.HSL),this.changed=!0,this.data.l=r}set a(r){this.changed=!0,this.data.a=r}}const f4=new MQe({r:0,g:0,b:0,a:0},"transparent"),Dg={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:e=>{if(e.charCodeAt(0)!==35)return;const r=e.match(Dg.re);if(!r)return;const n=r[1],o=parseInt(n,16),i=n.length,a=i%4===0,l=i>4,s=l?1:17,c=l?8:4,d=a?0:-1,u=l?255:15;return f4.set({r:(o>>c*(d+3)&u)*s,g:(o>>c*(d+2)&u)*s,b:(o>>c*(d+1)&u)*s,a:a?(o&u)*s/255:1},e)},stringify:e=>{const{r,g:n,b:o,a:i}=e;return i<1?`#${Ld[Math.round(r)]}${Ld[Math.round(n)]}${Ld[Math.round(o)]}${Ld[Math.round(i*255)]}`:`#${Ld[Math.round(r)]}${Ld[Math.round(n)]}${Ld[Math.round(o)]}`}},Pp={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:e=>{const r=e.match(Pp.hueRe);if(r){const[,n,o]=r;switch(o){case"grad":return Tt.channel.clamp.h(parseFloat(n)*.9);case"rad":return Tt.channel.clamp.h(parseFloat(n)*180/Math.PI);case"turn":return Tt.channel.clamp.h(parseFloat(n)*360)}}return Tt.channel.clamp.h(parseFloat(e))},parse:e=>{const r=e.charCodeAt(0);if(r!==104&&r!==72)return;const n=e.match(Pp.re);if(!n)return;const[,o,i,a,l,s]=n;return f4.set({h:Pp._hue2deg(o),s:Tt.channel.clamp.s(parseFloat(i)),l:Tt.channel.clamp.l(parseFloat(a)),a:l?Tt.channel.clamp.a(s?parseFloat(l)/100:parseFloat(l)):1},e)},stringify:e=>{const{h:r,s:n,l:o,a:i}=e;return i<1?`hsla(${Tt.lang.round(r)}, ${Tt.lang.round(n)}%, ${Tt.lang.round(o)}%, ${i})`:`hsl(${Tt.lang.round(r)}, ${Tt.lang.round(n)}%, ${Tt.lang.round(o)}%)`}},$0={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:e=>{e=e.toLowerCase();const r=$0.colors[e];if(r)return Dg.parse(r)},stringify:e=>{const r=Dg.stringify(e);for(const n in $0.colors)if($0.colors[n]===r)return n}},R0={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:e=>{const r=e.charCodeAt(0);if(r!==114&&r!==82)return;const n=e.match(R0.re);if(!n)return;const[,o,i,a,l,s,c,d,u]=n;return f4.set({r:Tt.channel.clamp.r(i?parseFloat(o)*2.55:parseFloat(o)),g:Tt.channel.clamp.g(l?parseFloat(a)*2.55:parseFloat(a)),b:Tt.channel.clamp.b(c?parseFloat(s)*2.55:parseFloat(s)),a:d?Tt.channel.clamp.a(u?parseFloat(d)/100:parseFloat(d)):1},e)},stringify:e=>{const{r,g:n,b:o,a:i}=e;return i<1?`rgba(${Tt.lang.round(r)}, ${Tt.lang.round(n)}, ${Tt.lang.round(o)}, ${Tt.lang.round(i)})`:`rgb(${Tt.lang.round(r)}, ${Tt.lang.round(n)}, ${Tt.lang.round(o)})`}},fl={format:{keyword:$0,hex:Dg,rgb:R0,rgba:R0,hsl:Pp,hsla:Pp},parse:e=>{if(typeof e!="string")return e;const r=Dg.parse(e)||R0.parse(e)||Pp.parse(e)||$0.parse(e);if(r)return r;throw new Error(`Unsupported color format: "${e}"`)},stringify:e=>!e.changed&&e.color?e.color:e.type.is($o.HSL)||e.data.r===void 0?Pp.stringify(e):e.a<1||!Number.isInteger(e.r)||!Number.isInteger(e.g)||!Number.isInteger(e.b)?R0.stringify(e):Dg.stringify(e)},Tre=(e,r)=>{const n=fl.parse(e);for(const o in r)n[o]=Tt.channel.clamp[o](r[o]);return fl.stringify(n)},NQe=(e,r,n=0,o=1)=>{if(typeof e!="number")return Tre(e,{a:r});const i=f4.set({r:Tt.channel.clamp.r(e),g:Tt.channel.clamp.g(r),b:Tt.channel.clamp.b(n),a:Tt.channel.clamp.a(o)});return fl.stringify(i)},jre=e=>fl.format.hex.stringify(fl.parse(e)),Are=e=>fl.format.rgba.stringify(fl.parse(e)),BQe=(e,r)=>{const n=fl.parse(e),o={};for(const i in r)r[i]&&(o[i]=n[i]+r[i]);return Tre(e,o)},Dre=(e,r,n=50)=>{const{r:o,g:i,b:a,a:l}=fl.parse(e),{r:s,g:c,b:d,a:u}=fl.parse(r),p=n/100,f=p*2-1,m=l-u,v=((f*m===-1?f:(f+m)/(1+f*m))+1)/2,w=1-v,x=o*v+s*w,k=i*v+c*w,C=a*v+d*w,_=l*p+u*(1-p);return NQe(x,k,C,_)},Pre=(e,r)=>{const n=fl.parse(e),o={},i=(a,l,s)=>l>0?(s-a)*l/100:a*l/100;for(const a in r)o[a]=i(n[a],r[a],Tt.channel.max[a]);return BQe(e,o)},IQe=e=>`[data-mantine-color-scheme="${e}"]`,Mre=IQe("dark"),OQe=5,LQe=(e,r,n,o)=>{const i=s=>jre(Pre(s,{l:-22-5*o,s:-10-6*o})),a=s=>jre(Pre(s,{l:-20-3*o,s:-3-6*o})),l=`:where(${e} [data-likec4-color="${r}"][data-compound-depth="${o}"])`;return` -${l} { - --likec4-palette-fill: ${a(n.elements.fill)}; - --likec4-palette-stroke: ${a(n.elements.stroke)}; -} -${Mre} ${l} { - --likec4-palette-fill: ${i(n.elements.fill)}; - --likec4-palette-stroke: ${i(n.elements.stroke)}; -} - `.trim()};function FQe(e,r,n){const{elements:o,relationships:i}=n,a=`:where(${e} [data-likec4-color=${r}])`;return[` -${a} { - --likec4-palette-fill: ${o.fill}; - --likec4-palette-stroke: ${o.stroke}; - --likec4-palette-hiContrast: ${o.hiContrast}; - --likec4-palette-loContrast: ${o.loContrast}; - --likec4-palette-relation-stroke: ${i.line}; - --likec4-palette-relation-label: ${i.label}; - --likec4-palette-relation-label-bg: ${i.labelBg}; - --likec4-palette-relation-stroke-selected: ${Are(Dre(i.line,"black",85))}; -} -${Mre} ${a} { - --likec4-palette-relation-stroke-selected: ${Are(Dre(i.line,"white",70))}; -} - - `.trim(),...V$e(1,OQe+1).map(l=>LQe(e,r,n,l))].join(` -`)}function VQe(e,r){return Jr(r.colors,uw(),un(([n,o])=>FQe(e,n,o)),Lq(` -`))}const qQe=S.memo(({id:e})=>{const r=`#${e}`,n=np()?.(),{theme:o}=Tte(),i=VQe(r,o);return y.jsx("style",{type:"text/css","data-likec4-colors":e,dangerouslySetInnerHTML:{__html:i},nonce:n})}),HQe='@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-400-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-400-normal.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-500-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-500-normal.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-600-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-600-normal.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-400-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-400-normal.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-500-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-500-normal.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-600-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-600-normal.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-400-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-400-normal.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-500-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-500-normal.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-600-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/cyrillic-ext-600-normal.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-400-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-400-normal.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-500-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-500-normal.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-600-normal.woff2) format("woff2"),url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-ext-600-normal.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}',Nre=`@layer reset,base,mantine,xyflow,tokens,recipes,utilities;@layer mantine{:root,:host{color-scheme:var(--mantine-color-scheme)}*,*:before,*:after{box-sizing:border-box}input,button,textarea,select{font:inherit}button,select{text-transform:none}body,:host{margin:0;font-family:var(--mantine-font-family);font-size:var(--mantine-font-size-md);line-height:var(--mantine-line-height);background-color:var(--mantine-color-body);color:var(--mantine-color-text);-webkit-font-smoothing:var(--mantine-webkit-font-smoothing);-moz-osx-font-smoothing:var(--mantine-moz-font-smoothing)}@media screen and (max-device-width:31.25em){body,:host{-webkit-text-size-adjust:100%}}@media(prefers-reduced-motion:reduce){[data-respect-reduced-motion] [data-reduce-motion]{transition:none;animation:none}}[data-mantine-color-scheme=light] .mantine-light-hidden,[data-mantine-color-scheme=dark] .mantine-dark-hidden{display:none}.mantine-focus-auto:focus-visible{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-always:focus{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-never:focus{outline:none}.mantine-active:active{transform:translateY(calc(.0625rem * var(--mantine-scale)))}fieldset:disabled .mantine-active:active{transform:none}:where([dir=rtl]) .mantine-rotate-rtl{transform:rotate(180deg)}:root,:host{--mantine-z-index-app: 100;--mantine-z-index-modal: 200;--mantine-z-index-popover: 300;--mantine-z-index-overlay: 400;--mantine-z-index-max: 9999;--mantine-scale: 1;--mantine-cursor-type: default;--mantine-webkit-font-smoothing: antialiased;--mantine-moz-font-smoothing: grayscale;--mantine-color-white: #fff;--mantine-color-black: #000;--mantine-line-height: 1.55;--mantine-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-font-family-monospace: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;--mantine-font-family-headings: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-heading-font-weight: 700;--mantine-heading-text-wrap: wrap;--mantine-radius-default: calc(.25rem * var(--mantine-scale));--mantine-primary-color-filled: var(--mantine-color-blue-filled);--mantine-primary-color-filled-hover: var(--mantine-color-blue-filled-hover);--mantine-primary-color-light: var(--mantine-color-blue-light);--mantine-primary-color-light-hover: var(--mantine-color-blue-light-hover);--mantine-primary-color-light-color: var(--mantine-color-blue-light-color);--mantine-breakpoint-xs: 36em;--mantine-breakpoint-sm: 48em;--mantine-breakpoint-md: 62em;--mantine-breakpoint-lg: 75em;--mantine-breakpoint-xl: 88em;--mantine-spacing-xs: calc(.625rem * var(--mantine-scale));--mantine-spacing-sm: calc(.75rem * var(--mantine-scale));--mantine-spacing-md: calc(1rem * var(--mantine-scale));--mantine-spacing-lg: calc(1.25rem * var(--mantine-scale));--mantine-spacing-xl: calc(2rem * var(--mantine-scale));--mantine-font-size-xs: calc(.75rem * var(--mantine-scale));--mantine-font-size-sm: calc(.875rem * var(--mantine-scale));--mantine-font-size-md: calc(1rem * var(--mantine-scale));--mantine-font-size-lg: calc(1.125rem * var(--mantine-scale));--mantine-font-size-xl: calc(1.25rem * var(--mantine-scale));--mantine-line-height-xs: 1.4;--mantine-line-height-sm: 1.45;--mantine-line-height-md: 1.55;--mantine-line-height-lg: 1.6;--mantine-line-height-xl: 1.65;--mantine-shadow-xs: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), 0 calc(.0625rem * var(--mantine-scale)) calc(.125rem * var(--mantine-scale)) rgba(0, 0, 0, .1);--mantine-shadow-sm: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(.625rem * var(--mantine-scale)) calc(.9375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.4375rem * var(--mantine-scale)) calc(.4375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-md: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.25rem * var(--mantine-scale)) calc(1.5625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.625rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-lg: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.75rem * var(--mantine-scale)) calc(1.4375rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.75rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-shadow-xl: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(2.25rem * var(--mantine-scale)) calc(1.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(1.0625rem * var(--mantine-scale)) calc(1.0625rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-radius-xs: calc(.125rem * var(--mantine-scale));--mantine-radius-sm: calc(.25rem * var(--mantine-scale));--mantine-radius-md: calc(.5rem * var(--mantine-scale));--mantine-radius-lg: calc(1rem * var(--mantine-scale));--mantine-radius-xl: calc(2rem * var(--mantine-scale));--mantine-primary-color-0: var(--mantine-color-blue-0);--mantine-primary-color-1: var(--mantine-color-blue-1);--mantine-primary-color-2: var(--mantine-color-blue-2);--mantine-primary-color-3: var(--mantine-color-blue-3);--mantine-primary-color-4: var(--mantine-color-blue-4);--mantine-primary-color-5: var(--mantine-color-blue-5);--mantine-primary-color-6: var(--mantine-color-blue-6);--mantine-primary-color-7: var(--mantine-color-blue-7);--mantine-primary-color-8: var(--mantine-color-blue-8);--mantine-primary-color-9: var(--mantine-color-blue-9);--mantine-color-dark-0: #c9c9c9;--mantine-color-dark-1: #b8b8b8;--mantine-color-dark-2: #828282;--mantine-color-dark-3: #696969;--mantine-color-dark-4: #424242;--mantine-color-dark-5: #3b3b3b;--mantine-color-dark-6: #2e2e2e;--mantine-color-dark-7: #242424;--mantine-color-dark-8: #1f1f1f;--mantine-color-dark-9: #141414;--mantine-color-gray-0: #f8f9fa;--mantine-color-gray-1: #f1f3f5;--mantine-color-gray-2: #e9ecef;--mantine-color-gray-3: #dee2e6;--mantine-color-gray-4: #ced4da;--mantine-color-gray-5: #adb5bd;--mantine-color-gray-6: #868e96;--mantine-color-gray-7: #495057;--mantine-color-gray-8: #343a40;--mantine-color-gray-9: #212529;--mantine-color-red-0: #fff5f5;--mantine-color-red-1: #ffe3e3;--mantine-color-red-2: #ffc9c9;--mantine-color-red-3: #ffa8a8;--mantine-color-red-4: #ff8787;--mantine-color-red-5: #ff6b6b;--mantine-color-red-6: #fa5252;--mantine-color-red-7: #f03e3e;--mantine-color-red-8: #e03131;--mantine-color-red-9: #c92a2a;--mantine-color-pink-0: #fff0f6;--mantine-color-pink-1: #ffdeeb;--mantine-color-pink-2: #fcc2d7;--mantine-color-pink-3: #faa2c1;--mantine-color-pink-4: #f783ac;--mantine-color-pink-5: #f06595;--mantine-color-pink-6: #e64980;--mantine-color-pink-7: #d6336c;--mantine-color-pink-8: #c2255c;--mantine-color-pink-9: #a61e4d;--mantine-color-grape-0: #f8f0fc;--mantine-color-grape-1: #f3d9fa;--mantine-color-grape-2: #eebefa;--mantine-color-grape-3: #e599f7;--mantine-color-grape-4: #da77f2;--mantine-color-grape-5: #cc5de8;--mantine-color-grape-6: #be4bdb;--mantine-color-grape-7: #ae3ec9;--mantine-color-grape-8: #9c36b5;--mantine-color-grape-9: #862e9c;--mantine-color-violet-0: #f3f0ff;--mantine-color-violet-1: #e5dbff;--mantine-color-violet-2: #d0bfff;--mantine-color-violet-3: #b197fc;--mantine-color-violet-4: #9775fa;--mantine-color-violet-5: #845ef7;--mantine-color-violet-6: #7950f2;--mantine-color-violet-7: #7048e8;--mantine-color-violet-8: #6741d9;--mantine-color-violet-9: #5f3dc4;--mantine-color-indigo-0: #edf2ff;--mantine-color-indigo-1: #dbe4ff;--mantine-color-indigo-2: #bac8ff;--mantine-color-indigo-3: #91a7ff;--mantine-color-indigo-4: #748ffc;--mantine-color-indigo-5: #5c7cfa;--mantine-color-indigo-6: #4c6ef5;--mantine-color-indigo-7: #4263eb;--mantine-color-indigo-8: #3b5bdb;--mantine-color-indigo-9: #364fc7;--mantine-color-blue-0: #e7f5ff;--mantine-color-blue-1: #d0ebff;--mantine-color-blue-2: #a5d8ff;--mantine-color-blue-3: #74c0fc;--mantine-color-blue-4: #4dabf7;--mantine-color-blue-5: #339af0;--mantine-color-blue-6: #228be6;--mantine-color-blue-7: #1c7ed6;--mantine-color-blue-8: #1971c2;--mantine-color-blue-9: #1864ab;--mantine-color-cyan-0: #e3fafc;--mantine-color-cyan-1: #c5f6fa;--mantine-color-cyan-2: #99e9f2;--mantine-color-cyan-3: #66d9e8;--mantine-color-cyan-4: #3bc9db;--mantine-color-cyan-5: #22b8cf;--mantine-color-cyan-6: #15aabf;--mantine-color-cyan-7: #1098ad;--mantine-color-cyan-8: #0c8599;--mantine-color-cyan-9: #0b7285;--mantine-color-teal-0: #e6fcf5;--mantine-color-teal-1: #c3fae8;--mantine-color-teal-2: #96f2d7;--mantine-color-teal-3: #63e6be;--mantine-color-teal-4: #38d9a9;--mantine-color-teal-5: #20c997;--mantine-color-teal-6: #12b886;--mantine-color-teal-7: #0ca678;--mantine-color-teal-8: #099268;--mantine-color-teal-9: #087f5b;--mantine-color-green-0: #ebfbee;--mantine-color-green-1: #d3f9d8;--mantine-color-green-2: #b2f2bb;--mantine-color-green-3: #8ce99a;--mantine-color-green-4: #69db7c;--mantine-color-green-5: #51cf66;--mantine-color-green-6: #40c057;--mantine-color-green-7: #37b24d;--mantine-color-green-8: #2f9e44;--mantine-color-green-9: #2b8a3e;--mantine-color-lime-0: #f4fce3;--mantine-color-lime-1: #e9fac8;--mantine-color-lime-2: #d8f5a2;--mantine-color-lime-3: #c0eb75;--mantine-color-lime-4: #a9e34b;--mantine-color-lime-5: #94d82d;--mantine-color-lime-6: #82c91e;--mantine-color-lime-7: #74b816;--mantine-color-lime-8: #66a80f;--mantine-color-lime-9: #5c940d;--mantine-color-yellow-0: #fff9db;--mantine-color-yellow-1: #fff3bf;--mantine-color-yellow-2: #ffec99;--mantine-color-yellow-3: #ffe066;--mantine-color-yellow-4: #ffd43b;--mantine-color-yellow-5: #fcc419;--mantine-color-yellow-6: #fab005;--mantine-color-yellow-7: #f59f00;--mantine-color-yellow-8: #f08c00;--mantine-color-yellow-9: #e67700;--mantine-color-orange-0: #fff4e6;--mantine-color-orange-1: #ffe8cc;--mantine-color-orange-2: #ffd8a8;--mantine-color-orange-3: #ffc078;--mantine-color-orange-4: #ffa94d;--mantine-color-orange-5: #ff922b;--mantine-color-orange-6: #fd7e14;--mantine-color-orange-7: #f76707;--mantine-color-orange-8: #e8590c;--mantine-color-orange-9: #d9480f;--mantine-h1-font-size: calc(2.125rem * var(--mantine-scale));--mantine-h1-line-height: 1.3;--mantine-h1-font-weight: 700;--mantine-h2-font-size: calc(1.625rem * var(--mantine-scale));--mantine-h2-line-height: 1.35;--mantine-h2-font-weight: 700;--mantine-h3-font-size: calc(1.375rem * var(--mantine-scale));--mantine-h3-line-height: 1.4;--mantine-h3-font-weight: 700;--mantine-h4-font-size: calc(1.125rem * var(--mantine-scale));--mantine-h4-line-height: 1.45;--mantine-h4-font-weight: 700;--mantine-h5-font-size: calc(1rem * var(--mantine-scale));--mantine-h5-line-height: 1.5;--mantine-h5-font-weight: 700;--mantine-h6-font-size: calc(.875rem * var(--mantine-scale));--mantine-h6-line-height: 1.5;--mantine-h6-font-weight: 700}:root[data-mantine-color-scheme=dark],:host([data-mantine-color-scheme="dark"]){--mantine-color-scheme: dark;--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-bright: var(--mantine-color-white);--mantine-color-text: var(--mantine-color-dark-0);--mantine-color-body: var(--mantine-color-dark-7);--mantine-color-error: var(--mantine-color-red-8);--mantine-color-placeholder: var(--mantine-color-dark-3);--mantine-color-anchor: var(--mantine-color-blue-4);--mantine-color-default: var(--mantine-color-dark-6);--mantine-color-default-hover: var(--mantine-color-dark-5);--mantine-color-default-color: var(--mantine-color-white);--mantine-color-default-border: var(--mantine-color-dark-4);--mantine-color-dimmed: var(--mantine-color-dark-2);--mantine-color-disabled: var(--mantine-color-dark-6);--mantine-color-disabled-color: var(--mantine-color-dark-3);--mantine-color-disabled-border: var(--mantine-color-dark-4);--mantine-color-dark-text: var(--mantine-color-dark-4);--mantine-color-dark-filled: var(--mantine-color-dark-8);--mantine-color-dark-filled-hover: var(--mantine-color-dark-9);--mantine-color-dark-light: rgba(46, 46, 46, .15);--mantine-color-dark-light-hover: rgba(46, 46, 46, .2);--mantine-color-dark-light-color: var(--mantine-color-dark-3);--mantine-color-dark-outline: var(--mantine-color-dark-4);--mantine-color-dark-outline-hover: rgba(66, 66, 66, .05);--mantine-color-gray-text: var(--mantine-color-gray-4);--mantine-color-gray-filled: var(--mantine-color-gray-8);--mantine-color-gray-filled-hover: var(--mantine-color-gray-9);--mantine-color-gray-light: rgba(134, 142, 150, .15);--mantine-color-gray-light-hover: rgba(134, 142, 150, .2);--mantine-color-gray-light-color: var(--mantine-color-gray-3);--mantine-color-gray-outline: var(--mantine-color-gray-4);--mantine-color-gray-outline-hover: rgba(206, 212, 218, .05);--mantine-color-red-text: var(--mantine-color-red-4);--mantine-color-red-filled: var(--mantine-color-red-8);--mantine-color-red-filled-hover: var(--mantine-color-red-9);--mantine-color-red-light: rgba(250, 82, 82, .15);--mantine-color-red-light-hover: rgba(250, 82, 82, .2);--mantine-color-red-light-color: var(--mantine-color-red-3);--mantine-color-red-outline: var(--mantine-color-red-4);--mantine-color-red-outline-hover: rgba(255, 135, 135, .05);--mantine-color-pink-text: var(--mantine-color-pink-4);--mantine-color-pink-filled: var(--mantine-color-pink-8);--mantine-color-pink-filled-hover: var(--mantine-color-pink-9);--mantine-color-pink-light: rgba(230, 73, 128, .15);--mantine-color-pink-light-hover: rgba(230, 73, 128, .2);--mantine-color-pink-light-color: var(--mantine-color-pink-3);--mantine-color-pink-outline: var(--mantine-color-pink-4);--mantine-color-pink-outline-hover: rgba(247, 131, 172, .05);--mantine-color-grape-text: var(--mantine-color-grape-4);--mantine-color-grape-filled: var(--mantine-color-grape-8);--mantine-color-grape-filled-hover: var(--mantine-color-grape-9);--mantine-color-grape-light: rgba(190, 75, 219, .15);--mantine-color-grape-light-hover: rgba(190, 75, 219, .2);--mantine-color-grape-light-color: var(--mantine-color-grape-3);--mantine-color-grape-outline: var(--mantine-color-grape-4);--mantine-color-grape-outline-hover: rgba(218, 119, 242, .05);--mantine-color-violet-text: var(--mantine-color-violet-4);--mantine-color-violet-filled: var(--mantine-color-violet-8);--mantine-color-violet-filled-hover: var(--mantine-color-violet-9);--mantine-color-violet-light: rgba(121, 80, 242, .15);--mantine-color-violet-light-hover: rgba(121, 80, 242, .2);--mantine-color-violet-light-color: var(--mantine-color-violet-3);--mantine-color-violet-outline: var(--mantine-color-violet-4);--mantine-color-violet-outline-hover: rgba(151, 117, 250, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-4);--mantine-color-indigo-filled: var(--mantine-color-indigo-8);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-9);--mantine-color-indigo-light: rgba(76, 110, 245, .15);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-3);--mantine-color-indigo-outline: var(--mantine-color-indigo-4);--mantine-color-indigo-outline-hover: rgba(116, 143, 252, .05);--mantine-color-blue-text: var(--mantine-color-blue-4);--mantine-color-blue-filled: var(--mantine-color-blue-8);--mantine-color-blue-filled-hover: var(--mantine-color-blue-9);--mantine-color-blue-light: rgba(34, 139, 230, .15);--mantine-color-blue-light-hover: rgba(34, 139, 230, .2);--mantine-color-blue-light-color: var(--mantine-color-blue-3);--mantine-color-blue-outline: var(--mantine-color-blue-4);--mantine-color-blue-outline-hover: rgba(77, 171, 247, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-4);--mantine-color-cyan-filled: var(--mantine-color-cyan-8);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-9);--mantine-color-cyan-light: rgba(21, 170, 191, .15);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-3);--mantine-color-cyan-outline: var(--mantine-color-cyan-4);--mantine-color-cyan-outline-hover: rgba(59, 201, 219, .05);--mantine-color-teal-text: var(--mantine-color-teal-4);--mantine-color-teal-filled: var(--mantine-color-teal-8);--mantine-color-teal-filled-hover: var(--mantine-color-teal-9);--mantine-color-teal-light: rgba(18, 184, 134, .15);--mantine-color-teal-light-hover: rgba(18, 184, 134, .2);--mantine-color-teal-light-color: var(--mantine-color-teal-3);--mantine-color-teal-outline: var(--mantine-color-teal-4);--mantine-color-teal-outline-hover: rgba(56, 217, 169, .05);--mantine-color-green-text: var(--mantine-color-green-4);--mantine-color-green-filled: var(--mantine-color-green-8);--mantine-color-green-filled-hover: var(--mantine-color-green-9);--mantine-color-green-light: rgba(64, 192, 87, .15);--mantine-color-green-light-hover: rgba(64, 192, 87, .2);--mantine-color-green-light-color: var(--mantine-color-green-3);--mantine-color-green-outline: var(--mantine-color-green-4);--mantine-color-green-outline-hover: rgba(105, 219, 124, .05);--mantine-color-lime-text: var(--mantine-color-lime-4);--mantine-color-lime-filled: var(--mantine-color-lime-8);--mantine-color-lime-filled-hover: var(--mantine-color-lime-9);--mantine-color-lime-light: rgba(130, 201, 30, .15);--mantine-color-lime-light-hover: rgba(130, 201, 30, .2);--mantine-color-lime-light-color: var(--mantine-color-lime-3);--mantine-color-lime-outline: var(--mantine-color-lime-4);--mantine-color-lime-outline-hover: rgba(169, 227, 75, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-4);--mantine-color-yellow-filled: var(--mantine-color-yellow-8);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-9);--mantine-color-yellow-light: rgba(250, 176, 5, .15);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-3);--mantine-color-yellow-outline: var(--mantine-color-yellow-4);--mantine-color-yellow-outline-hover: rgba(255, 212, 59, .05);--mantine-color-orange-text: var(--mantine-color-orange-4);--mantine-color-orange-filled: var(--mantine-color-orange-8);--mantine-color-orange-filled-hover: var(--mantine-color-orange-9);--mantine-color-orange-light: rgba(253, 126, 20, .15);--mantine-color-orange-light-hover: rgba(253, 126, 20, .2);--mantine-color-orange-light-color: var(--mantine-color-orange-3);--mantine-color-orange-outline: var(--mantine-color-orange-4);--mantine-color-orange-outline-hover: rgba(255, 169, 77, .05)}:root[data-mantine-color-scheme=light],:host([data-mantine-color-scheme="light"]){--mantine-color-scheme: light;--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-bright: var(--mantine-color-black);--mantine-color-text: #000;--mantine-color-body: #fff;--mantine-color-error: var(--mantine-color-red-6);--mantine-color-placeholder: var(--mantine-color-gray-5);--mantine-color-anchor: var(--mantine-color-blue-6);--mantine-color-default: var(--mantine-color-white);--mantine-color-default-hover: var(--mantine-color-gray-0);--mantine-color-default-color: var(--mantine-color-black);--mantine-color-default-border: var(--mantine-color-gray-4);--mantine-color-dimmed: var(--mantine-color-gray-6);--mantine-color-disabled: var(--mantine-color-gray-2);--mantine-color-disabled-color: var(--mantine-color-gray-5);--mantine-color-disabled-border: var(--mantine-color-gray-3);--mantine-color-dark-text: var(--mantine-color-dark-filled);--mantine-color-dark-filled: var(--mantine-color-dark-6);--mantine-color-dark-filled-hover: var(--mantine-color-dark-7);--mantine-color-dark-light: rgba(46, 46, 46, .1);--mantine-color-dark-light-hover: rgba(46, 46, 46, .12);--mantine-color-dark-light-color: var(--mantine-color-dark-6);--mantine-color-dark-outline: var(--mantine-color-dark-6);--mantine-color-dark-outline-hover: rgba(46, 46, 46, .05);--mantine-color-gray-text: var(--mantine-color-gray-filled);--mantine-color-gray-filled: var(--mantine-color-gray-6);--mantine-color-gray-filled-hover: var(--mantine-color-gray-7);--mantine-color-gray-light: rgba(134, 142, 150, .1);--mantine-color-gray-light-hover: rgba(134, 142, 150, .12);--mantine-color-gray-light-color: var(--mantine-color-gray-6);--mantine-color-gray-outline: var(--mantine-color-gray-6);--mantine-color-gray-outline-hover: rgba(134, 142, 150, .05);--mantine-color-red-text: var(--mantine-color-red-filled);--mantine-color-red-filled: var(--mantine-color-red-6);--mantine-color-red-filled-hover: var(--mantine-color-red-7);--mantine-color-red-light: rgba(250, 82, 82, .1);--mantine-color-red-light-hover: rgba(250, 82, 82, .12);--mantine-color-red-light-color: var(--mantine-color-red-6);--mantine-color-red-outline: var(--mantine-color-red-6);--mantine-color-red-outline-hover: rgba(250, 82, 82, .05);--mantine-color-pink-text: var(--mantine-color-pink-filled);--mantine-color-pink-filled: var(--mantine-color-pink-6);--mantine-color-pink-filled-hover: var(--mantine-color-pink-7);--mantine-color-pink-light: rgba(230, 73, 128, .1);--mantine-color-pink-light-hover: rgba(230, 73, 128, .12);--mantine-color-pink-light-color: var(--mantine-color-pink-6);--mantine-color-pink-outline: var(--mantine-color-pink-6);--mantine-color-pink-outline-hover: rgba(230, 73, 128, .05);--mantine-color-grape-text: var(--mantine-color-grape-filled);--mantine-color-grape-filled: var(--mantine-color-grape-6);--mantine-color-grape-filled-hover: var(--mantine-color-grape-7);--mantine-color-grape-light: rgba(190, 75, 219, .1);--mantine-color-grape-light-hover: rgba(190, 75, 219, .12);--mantine-color-grape-light-color: var(--mantine-color-grape-6);--mantine-color-grape-outline: var(--mantine-color-grape-6);--mantine-color-grape-outline-hover: rgba(190, 75, 219, .05);--mantine-color-violet-text: var(--mantine-color-violet-filled);--mantine-color-violet-filled: var(--mantine-color-violet-6);--mantine-color-violet-filled-hover: var(--mantine-color-violet-7);--mantine-color-violet-light: rgba(121, 80, 242, .1);--mantine-color-violet-light-hover: rgba(121, 80, 242, .12);--mantine-color-violet-light-color: var(--mantine-color-violet-6);--mantine-color-violet-outline: var(--mantine-color-violet-6);--mantine-color-violet-outline-hover: rgba(121, 80, 242, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-filled);--mantine-color-indigo-filled: var(--mantine-color-indigo-6);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-7);--mantine-color-indigo-light: rgba(76, 110, 245, .1);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .12);--mantine-color-indigo-light-color: var(--mantine-color-indigo-6);--mantine-color-indigo-outline: var(--mantine-color-indigo-6);--mantine-color-indigo-outline-hover: rgba(76, 110, 245, .05);--mantine-color-blue-text: var(--mantine-color-blue-filled);--mantine-color-blue-filled: var(--mantine-color-blue-6);--mantine-color-blue-filled-hover: var(--mantine-color-blue-7);--mantine-color-blue-light: rgba(34, 139, 230, .1);--mantine-color-blue-light-hover: rgba(34, 139, 230, .12);--mantine-color-blue-light-color: var(--mantine-color-blue-6);--mantine-color-blue-outline: var(--mantine-color-blue-6);--mantine-color-blue-outline-hover: rgba(34, 139, 230, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-filled);--mantine-color-cyan-filled: var(--mantine-color-cyan-6);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-7);--mantine-color-cyan-light: rgba(21, 170, 191, .1);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .12);--mantine-color-cyan-light-color: var(--mantine-color-cyan-6);--mantine-color-cyan-outline: var(--mantine-color-cyan-6);--mantine-color-cyan-outline-hover: rgba(21, 170, 191, .05);--mantine-color-teal-text: var(--mantine-color-teal-filled);--mantine-color-teal-filled: var(--mantine-color-teal-6);--mantine-color-teal-filled-hover: var(--mantine-color-teal-7);--mantine-color-teal-light: rgba(18, 184, 134, .1);--mantine-color-teal-light-hover: rgba(18, 184, 134, .12);--mantine-color-teal-light-color: var(--mantine-color-teal-6);--mantine-color-teal-outline: var(--mantine-color-teal-6);--mantine-color-teal-outline-hover: rgba(18, 184, 134, .05);--mantine-color-green-text: var(--mantine-color-green-filled);--mantine-color-green-filled: var(--mantine-color-green-6);--mantine-color-green-filled-hover: var(--mantine-color-green-7);--mantine-color-green-light: rgba(64, 192, 87, .1);--mantine-color-green-light-hover: rgba(64, 192, 87, .12);--mantine-color-green-light-color: var(--mantine-color-green-6);--mantine-color-green-outline: var(--mantine-color-green-6);--mantine-color-green-outline-hover: rgba(64, 192, 87, .05);--mantine-color-lime-text: var(--mantine-color-lime-filled);--mantine-color-lime-filled: var(--mantine-color-lime-6);--mantine-color-lime-filled-hover: var(--mantine-color-lime-7);--mantine-color-lime-light: rgba(130, 201, 30, .1);--mantine-color-lime-light-hover: rgba(130, 201, 30, .12);--mantine-color-lime-light-color: var(--mantine-color-lime-6);--mantine-color-lime-outline: var(--mantine-color-lime-6);--mantine-color-lime-outline-hover: rgba(130, 201, 30, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-filled);--mantine-color-yellow-filled: var(--mantine-color-yellow-6);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-7);--mantine-color-yellow-light: rgba(250, 176, 5, .1);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .12);--mantine-color-yellow-light-color: var(--mantine-color-yellow-6);--mantine-color-yellow-outline: var(--mantine-color-yellow-6);--mantine-color-yellow-outline-hover: rgba(250, 176, 5, .05);--mantine-color-orange-text: var(--mantine-color-orange-filled);--mantine-color-orange-filled: var(--mantine-color-orange-6);--mantine-color-orange-filled-hover: var(--mantine-color-orange-7);--mantine-color-orange-light: rgba(253, 126, 20, .1);--mantine-color-orange-light-hover: rgba(253, 126, 20, .12);--mantine-color-orange-light-color: var(--mantine-color-orange-6);--mantine-color-orange-outline: var(--mantine-color-orange-6);--mantine-color-orange-outline-hover: rgba(253, 126, 20, .05)}.m_d57069b5{--scrollarea-scrollbar-size: calc(.75rem * var(--mantine-scale));position:relative;overflow:hidden}.m_d57069b5:where([data-autosize]) .m_b1336c6{min-width:min-content}.m_c0783ff9{scrollbar-width:none;overscroll-behavior:var(--scrollarea-over-scroll-behavior);-ms-overflow-style:none;-webkit-overflow-scrolling:touch;width:100%;height:100%}.m_c0783ff9::-webkit-scrollbar{display:none}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=y]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=y],[data-offset-scrollbars=present]):where([data-vertical-hidden]){padding-inline-end:0;padding-inline-start:0}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=y]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=y],[data-offset-scrollbars=present]):not([data-vertical-hidden]){padding-inline-end:var(--scrollarea-scrollbar-size);padding-inline-start:unset}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=x]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=x],[data-offset-scrollbars=present]):where([data-horizontal-hidden]){padding-bottom:0}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=x]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=x],[data-offset-scrollbars=present]):not([data-horizontal-hidden]){padding-bottom:var(--scrollarea-scrollbar-size)}.m_f8f631dd{min-width:100%;display:table}.m_c44ba933{user-select:none;touch-action:none;box-sizing:border-box;transition:background-color .15s ease,opacity .15s ease;padding:calc(var(--scrollarea-scrollbar-size) / 5);display:flex;background-color:transparent;flex-direction:row}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_c44ba933:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:hover>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover>.m_d8b5e363{background-color:#ffffff80}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_c44ba933:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:active>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active>.m_d8b5e363{background-color:#ffffff80}}.m_c44ba933:where([data-hidden],[data-state=hidden]){display:none}.m_c44ba933:where([data-orientation=vertical]){width:var(--scrollarea-scrollbar-size);top:0;bottom:var(--sa-corner-width);inset-inline-end:0}.m_c44ba933:where([data-orientation=horizontal]){height:var(--scrollarea-scrollbar-size);flex-direction:column;bottom:0;inset-inline-start:0;inset-inline-end:var(--sa-corner-width)}.m_d8b5e363{flex:1;border-radius:var(--scrollarea-scrollbar-size);position:relative;transition:background-color .15s ease;overflow:hidden;opacity:var(--thumb-opacity)}.m_d8b5e363:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;min-width:calc(2.75rem * var(--mantine-scale));min-height:calc(2.75rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d8b5e363{background-color:#0006}:where([data-mantine-color-scheme=dark]) .m_d8b5e363{background-color:#fff6}.m_21657268{position:absolute;opacity:0;transition:opacity .15s ease;display:block;inset-inline-end:0;bottom:0}:where([data-mantine-color-scheme=light]) .m_21657268{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_21657268{background-color:var(--mantine-color-dark-8)}.m_21657268:where([data-hovered]){opacity:1}.m_21657268:where([data-hidden]){display:none}.m_b1336c6{min-width:100%}.m_87cf2631{background-color:transparent;cursor:pointer;border:0;padding:0;appearance:none;font-size:var(--mantine-font-size-md);text-align:left;text-decoration:none;color:inherit;touch-action:manipulation;-webkit-tap-highlight-color:transparent}:where([dir=rtl]) .m_87cf2631{text-align:right}.m_515a97f8{border:0;clip:rect(0 0 0 0);height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));margin:calc(-.0625rem * var(--mantine-scale));overflow:hidden;padding:0;position:absolute;white-space:nowrap}.m_1b7284a3{--paper-radius: var(--mantine-radius-default);outline:0;-webkit-tap-highlight-color:transparent;display:block;touch-action:manipulation;text-decoration:none;border-radius:var(--paper-radius);box-shadow:var(--paper-shadow);background-color:var(--mantine-color-body)}[data-mantine-color-scheme=light] .m_1b7284a3{--paper-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_1b7284a3{--paper-border-color: var(--mantine-color-dark-4)}.m_1b7284a3:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--paper-border-color)}.m_9814e45f{inset:0;position:absolute;background:var(--overlay-bg, rgba(0, 0, 0, .6));-webkit-backdrop-filter:var(--overlay-filter);backdrop-filter:var(--overlay-filter);border-radius:var(--overlay-radius, 0);z-index:var(--overlay-z-index)}.m_9814e45f:where([data-fixed]){position:fixed}.m_9814e45f:where([data-center]){display:flex;align-items:center;justify-content:center}.m_38a85659{position:absolute;border:1px solid var(--popover-border-color);padding:var(--mantine-spacing-sm) var(--mantine-spacing-md);box-shadow:var(--popover-shadow, none);border-radius:var(--popover-radius, var(--mantine-radius-default))}.m_38a85659:where([data-fixed]){position:fixed}.m_38a85659:focus{outline:none}:where([data-mantine-color-scheme=light]) .m_38a85659{--popover-border-color: var(--mantine-color-gray-2);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_38a85659{--popover-border-color: var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_a31dc6c1{background-color:inherit;border:1px solid var(--popover-border-color);z-index:1}.m_3d7bc908{position:fixed;inset:0}.m_5ae2e3c{--loader-size-xs: calc(1.125rem * var(--mantine-scale));--loader-size-sm: calc(1.375rem * var(--mantine-scale));--loader-size-md: calc(2.25rem * var(--mantine-scale));--loader-size-lg: calc(2.75rem * var(--mantine-scale));--loader-size-xl: calc(3.625rem * var(--mantine-scale));--loader-size: var(--loader-size-md);--loader-color: var(--mantine-primary-color-filled)}@keyframes m_5d2b3b9d{0%{transform:scale(.6);opacity:0}50%,to{transform:scale(1)}}.m_7a2bd4cd{position:relative;width:var(--loader-size);height:var(--loader-size);display:flex;gap:calc(var(--loader-size) / 5)}.m_870bb79{flex:1;background:var(--loader-color);animation:m_5d2b3b9d 1.2s cubic-bezier(0,.5,.5,1) infinite;border-radius:calc(.125rem * var(--mantine-scale))}.m_870bb79:nth-of-type(1){animation-delay:-.24s}.m_870bb79:nth-of-type(2){animation-delay:-.12s}.m_870bb79:nth-of-type(3){animation-delay:0}@keyframes m_aac34a1{0%,to{transform:scale(1);opacity:1}50%{transform:scale(.6);opacity:.5}}.m_4e3f22d7{display:flex;justify-content:center;align-items:center;gap:calc(var(--loader-size) / 10);position:relative;width:var(--loader-size);height:var(--loader-size)}.m_870c4af{width:calc(var(--loader-size) / 3 - var(--loader-size) / 15);height:calc(var(--loader-size) / 3 - var(--loader-size) / 15);border-radius:50%;background:var(--loader-color);animation:m_aac34a1 .8s infinite linear}.m_870c4af:nth-child(2){animation-delay:.4s}@keyframes m_f8e89c4b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m_b34414df{display:inline-block;width:var(--loader-size);height:var(--loader-size)}.m_b34414df:after{content:"";display:block;width:var(--loader-size);height:var(--loader-size);border-radius:calc(625rem * var(--mantine-scale));border-width:calc(var(--loader-size) / 8);border-style:solid;border-color:var(--loader-color) var(--loader-color) var(--loader-color) transparent;animation:m_f8e89c4b 1.2s linear infinite}.m_8d3f4000{--ai-size-xs: calc(1.125rem * var(--mantine-scale));--ai-size-sm: calc(1.375rem * var(--mantine-scale));--ai-size-md: calc(1.75rem * var(--mantine-scale));--ai-size-lg: calc(2.125rem * var(--mantine-scale));--ai-size-xl: calc(2.75rem * var(--mantine-scale));--ai-size-input-xs: calc(1.875rem * var(--mantine-scale));--ai-size-input-sm: calc(2.25rem * var(--mantine-scale));--ai-size-input-md: calc(2.625rem * var(--mantine-scale));--ai-size-input-lg: calc(3.125rem * var(--mantine-scale));--ai-size-input-xl: calc(3.75rem * var(--mantine-scale));--ai-size: var(--ai-size-md);--ai-color: var(--mantine-color-white);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;user-select:none;overflow:hidden;width:var(--ai-size);height:var(--ai-size);min-width:var(--ai-size);min-height:var(--ai-size);border-radius:var(--ai-radius, var(--mantine-radius-default));background:var(--ai-bg, var(--mantine-primary-color-filled));color:var(--ai-color, var(--mantine-color-white));border:var(--ai-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);cursor:pointer}@media(hover:hover){.m_8d3f4000:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}@media(hover:none){.m_8d3f4000:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}.m_8d3f4000[data-loading]{cursor:not-allowed}.m_8d3f4000[data-loading] .m_8d3afb97{opacity:0;transform:translateY(100%)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-disabled-color);background:var(--mantine-color-disabled)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])):active{transform:none}.m_302b9fb1{inset:calc(-.0625rem * var(--mantine-scale));position:absolute;border-radius:var(--ai-radius, var(--mantine-radius-default));display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_302b9fb1{background-color:#ffffff26}:where([data-mantine-color-scheme=dark]) .m_302b9fb1{background-color:#00000026}.m_1a0f1b21{--ai-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_1a0f1b21 :where(*):focus{position:relative;z-index:1}.m_1a0f1b21[data-orientation=horizontal]{flex-direction:row}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):first-child,.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):last-child,.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child),.m_1a0f1b21[data-orientation=horizontal] .m_437b6484:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical]{flex-direction:column}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):first-child,.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):last-child,.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child),.m_1a0f1b21[data-orientation=vertical] .m_437b6484:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2);border-top-width:calc(var(--ai-border-width) / 2)}.m_8d3afb97{display:flex;align-items:center;justify-content:center;transition:transform .15s ease,opacity .1s ease;width:100%;height:100%}.m_437b6484{--section-height-xs: calc(1.125rem * var(--mantine-scale));--section-height-sm: calc(1.375rem * var(--mantine-scale));--section-height-md: calc(1.75rem * var(--mantine-scale));--section-height-lg: calc(2.125rem * var(--mantine-scale));--section-height-xl: calc(2.75rem * var(--mantine-scale));--section-height-input-xs: calc(1.875rem * var(--mantine-scale));--section-height-input-sm: calc(2.25rem * var(--mantine-scale));--section-height-input-md: calc(2.625rem * var(--mantine-scale));--section-height-input-lg: calc(3.125rem * var(--mantine-scale));--section-height-input-xl: calc(3.75rem * var(--mantine-scale));--section-padding-x-xs: calc(.375rem * var(--mantine-scale));--section-padding-x-sm: calc(.5rem * var(--mantine-scale));--section-padding-x-md: calc(.625rem * var(--mantine-scale));--section-padding-x-lg: calc(.75rem * var(--mantine-scale));--section-padding-x-xl: calc(1rem * var(--mantine-scale));--section-height: var(--section-height-sm);--section-padding-x: var(--section-padding-x-sm);--section-color: var(--mantine-color-white);font-weight:600;width:auto;border-radius:var(--section-radius, var(--mantine-radius-default));font-size:var(--section-fz, var(--mantine-font-size-sm));background:var(--section-bg, var(--mantine-primary-color-filled));border:var(--section-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--section-color, var(--mantine-color-white));height:var(--section-height, var(--section-height-sm));padding-inline:var(--section-padding-x, var(--section-padding-x-sm));vertical-align:middle;line-height:1;display:inline-flex;align-items:center;justify-content:center}.m_86a44da5{--cb-size-xs: calc(1.125rem * var(--mantine-scale));--cb-size-sm: calc(1.375rem * var(--mantine-scale));--cb-size-md: calc(1.75rem * var(--mantine-scale));--cb-size-lg: calc(2.125rem * var(--mantine-scale));--cb-size-xl: calc(2.75rem * var(--mantine-scale));--cb-size: var(--cb-size-md);--cb-icon-size: 70%;--cb-radius: var(--mantine-radius-default);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;user-select:none;width:var(--cb-size);height:var(--cb-size);min-width:var(--cb-size);min-height:var(--cb-size);border-radius:var(--cb-radius)}:where([data-mantine-color-scheme=light]) .m_86a44da5{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_86a44da5{color:var(--mantine-color-dark-1)}.m_86a44da5[data-disabled],.m_86a44da5:disabled{cursor:not-allowed;opacity:.6}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-dark-6)}}.m_4081bf90{display:flex;flex-direction:row;flex-wrap:var(--group-wrap, wrap);justify-content:var(--group-justify, flex-start);align-items:var(--group-align, center);gap:var(--group-gap, var(--mantine-spacing-md))}.m_4081bf90:where([data-grow])>*{flex-grow:1;max-width:var(--group-child-width)}.m_615af6c9{line-height:1;padding:0;margin:0;font-weight:400;font-size:var(--mantine-font-size-md)}.m_b5489c3c{display:flex;justify-content:space-between;align-items:center;padding:var(--mb-padding, var(--mantine-spacing-md));padding-inline-end:calc(var(--mb-padding, var(--mantine-spacing-md)) - calc(.3125rem * var(--mantine-scale)));position:sticky;top:0;background-color:var(--mantine-color-body);z-index:1000;min-height:calc(3.75rem * var(--mantine-scale));transition:padding-inline-end .1s}.m_60c222c7{position:fixed;width:100%;top:0;bottom:0;z-index:var(--mb-z-index);pointer-events:none}.m_fd1ab0aa{pointer-events:all;box-shadow:var(--mb-shadow, var(--mantine-shadow-xl))}.m_fd1ab0aa [data-mantine-scrollbar]{z-index:1001}[data-offset-scrollbars] .m_fd1ab0aa:has([data-mantine-scrollbar]) .m_b5489c3c{padding-inline-end:calc(var(--mb-padding, var(--mantine-spacing-md)) + calc(.3125rem * var(--mantine-scale)))}.m_606cb269{margin-inline-start:auto}.m_5df29311{padding:var(--mb-padding, var(--mantine-spacing-md));padding-top:var(--mb-padding, var(--mantine-spacing-md))}.m_5df29311:where(:not(:only-child)){padding-top:0}.m_6c018570{position:relative;margin-top:var(--input-margin-top, 0rem);margin-bottom:var(--input-margin-bottom, 0rem);--input-height-xs: calc(1.875rem * var(--mantine-scale));--input-height-sm: calc(2.25rem * var(--mantine-scale));--input-height-md: calc(2.625rem * var(--mantine-scale));--input-height-lg: calc(3.125rem * var(--mantine-scale));--input-height-xl: calc(3.75rem * var(--mantine-scale));--input-padding-y-xs: calc(.3125rem * var(--mantine-scale));--input-padding-y-sm: calc(.375rem * var(--mantine-scale));--input-padding-y-md: calc(.5rem * var(--mantine-scale));--input-padding-y-lg: calc(.625rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-height: var(--input-height-sm);--input-radius: var(--mantine-radius-default);--input-cursor: text;--input-text-align: left;--input-line-height: calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));--input-padding: calc(var(--input-height) / 3);--input-padding-inline-start: var(--input-padding);--input-padding-inline-end: var(--input-padding);--input-placeholder-color: var(--mantine-color-placeholder);--input-color: var(--mantine-color-text);--input-disabled-bg: var(--mantine-color-disabled);--input-disabled-color: var(--mantine-color-disabled-color);--input-left-section-size: var(--input-left-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))));--input-right-section-size: var( --input-right-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))) );--input-size: var(--input-height);--section-y: calc(.0625rem * var(--mantine-scale));--left-section-start: calc(.0625rem * var(--mantine-scale));--left-section-border-radius: var(--input-radius) 0 0 var(--input-radius);--right-section-end: calc(.0625rem * var(--mantine-scale));--right-section-border-radius: 0 var(--input-radius) var(--input-radius) 0}.m_6c018570[data-variant=unstyled]{--input-padding: 0;--input-padding-y: 0;--input-padding-inline-start: 0;--input-padding-inline-end: 0}.m_6c018570[data-pointer]{--input-cursor: pointer}.m_6c018570[data-multiline]{--input-padding-y-xs: calc(.28125rem * var(--mantine-scale));--input-padding-y-sm: calc(.34375rem * var(--mantine-scale));--input-padding-y-md: calc(.4375rem * var(--mantine-scale));--input-padding-y-lg: calc(.59375rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-size: auto;--input-line-height: var(--mantine-line-height)}.m_6c018570[data-with-left-section]{--input-padding-inline-start: var(--input-left-section-size)}.m_6c018570[data-with-right-section]{--input-padding-inline-end: var(--input-right-section-size)}.m_6c018570[data-size=xs] .m_6c018570[data-with-right-section]:has([data-combined-clear-section]){--input-padding-inline-end: calc(2.5625rem * var(--mantine-scale))}.m_6c018570[data-size=sm] .m_6c018570[data-with-right-section]:has([data-combined-clear-section]){--input-padding-inline-end: calc(3.125rem * var(--mantine-scale))}.m_6c018570[data-size=md] .m_6c018570[data-with-right-section]:has([data-combined-clear-section]){--input-padding-inline-end: calc(3.75rem * var(--mantine-scale))}.m_6c018570[data-size=lg] .m_6c018570[data-with-right-section]:has([data-combined-clear-section]){--input-padding-inline-end: calc(4.5rem * var(--mantine-scale))}.m_6c018570[data-size=xl] .m_6c018570[data-with-right-section]:has([data-combined-clear-section]){--input-padding-inline-end: calc(5.5625rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-gray-4);--input-bg: var(--mantine-color-white);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-gray-1);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-dark-4);--input-bg: var(--mantine-color-dark-6);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-dark-5);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme] .m_6c018570[data-error]:not([data-variant=unstyled]){--input-bd: var(--mantine-color-error)}[data-mantine-color-scheme] .m_6c018570[data-error]{--input-color: var(--mantine-color-error);--input-placeholder-color: var(--mantine-color-error);--input-section-color: var(--mantine-color-error)}:where([dir=rtl]) .m_6c018570{--input-text-align: right;--left-section-border-radius: 0 var(--input-radius) var(--input-radius) 0;--right-section-border-radius: var(--input-radius) 0 0 var(--input-radius)}.m_8fb7ebe7{-webkit-tap-highlight-color:transparent;appearance:none;resize:var(--input-resize, none);display:block;width:100%;transition:border-color .1s ease;text-align:var(--input-text-align);color:var(--input-color);border:calc(.0625rem * var(--mantine-scale)) solid var(--input-bd);background-color:var(--input-bg);font-family:var(--input-font-family, var(--mantine-font-family));height:var(--input-size);min-height:var(--input-height);line-height:var(--input-line-height);font-size:var(--_input-fz, var(--input-fz, var(--mantine-font-size-md)));border-radius:var(--input-radius);padding-inline-start:var(--input-padding-inline-start);padding-inline-end:var(--input-padding-inline-end);padding-top:var(--input-padding-y, 0rem);padding-bottom:var(--input-padding-y, 0rem);cursor:var(--input-cursor);overflow:var(--input-overflow)}.m_8fb7ebe7[data-no-overflow]{--input-overflow: hidden}.m_8fb7ebe7[data-monospace]{--input-font-family: var(--mantine-font-family-monospace);--_input-fz: calc(var(--input-fz) - calc(.125rem * var(--mantine-scale)))}.m_8fb7ebe7:focus,.m_8fb7ebe7:focus-within{outline:none;--input-bd: var(--input-bd-focus)}[data-error] .m_8fb7ebe7:focus,[data-error] .m_8fb7ebe7:focus-within{--input-bd: var(--mantine-color-error)}.m_8fb7ebe7::placeholder{color:var(--input-placeholder-color);opacity:1}.m_8fb7ebe7::-webkit-inner-spin-button,.m_8fb7ebe7::-webkit-outer-spin-button,.m_8fb7ebe7::-webkit-search-decoration,.m_8fb7ebe7::-webkit-search-cancel-button,.m_8fb7ebe7::-webkit-search-results-button,.m_8fb7ebe7::-webkit-search-results-decoration{appearance:none}.m_8fb7ebe7[type=number]{-moz-appearance:textfield}.m_8fb7ebe7:disabled,.m_8fb7ebe7[data-disabled]{cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_8fb7ebe7:has(input:disabled){cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_8fb7ebe7[readonly]{caret-color:transparent}.m_82577fc2{pointer-events:var(--section-pointer-events);position:absolute;z-index:1;inset-inline-start:var(--section-start);inset-inline-end:var(--section-end);bottom:var(--section-y);top:var(--section-y);display:flex;align-items:center;justify-content:center;width:var(--section-size);border-radius:var(--section-border-radius);color:var(--input-section-color, var(--mantine-color-dimmed))}.m_82577fc2[data-position=right]{--section-pointer-events: var(--input-right-section-pointer-events);--section-end: var(--right-section-end);--section-size: var(--input-right-section-size);--section-border-radius: var(--right-section-border-radius)}.m_6c018570[data-size=xs] .m_82577fc2[data-position=right]:has([data-combined-clear-section]){--section-size: calc(2.5625rem * var(--mantine-scale))}.m_6c018570[data-size=sm] .m_82577fc2[data-position=right]:has([data-combined-clear-section]){--section-size: calc(3.125rem * var(--mantine-scale))}.m_6c018570[data-size=md] .m_82577fc2[data-position=right]:has([data-combined-clear-section]){--section-size: calc(3.75rem * var(--mantine-scale))}.m_6c018570[data-size=lg] .m_82577fc2[data-position=right]:has([data-combined-clear-section]){--section-size: calc(4.5rem * var(--mantine-scale))}.m_6c018570[data-size=xl] .m_82577fc2[data-position=right]:has([data-combined-clear-section]){--section-size: calc(5.5625rem * var(--mantine-scale))}.m_82577fc2[data-position=left]{--section-pointer-events: var(--input-left-section-pointer-events);--section-start: var(--left-section-start);--section-size: var(--input-left-section-size);--section-border-radius: var(--left-section-border-radius)}.m_88bacfd0{color:var(--input-placeholder-color, var(--mantine-color-placeholder))}[data-error] .m_88bacfd0{--input-placeholder-color: var(--input-color, var(--mantine-color-placeholder))}.m_46b77525{line-height:var(--mantine-line-height)}.m_8fdc1311{display:inline-block;font-weight:500;overflow-wrap:break-word;cursor:default;-webkit-tap-highlight-color:transparent;font-size:var(--input-label-size, var(--mantine-font-size-sm))}.m_78a94662{color:var(--input-asterisk-color, var(--mantine-color-error))}.m_8f816625,.m_fe47ce59{word-wrap:break-word;line-height:1.2;display:block;margin:0;padding:0}.m_8f816625{color:var(--mantine-color-error);font-size:var(--input-error-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_fe47ce59{color:var(--mantine-color-dimmed);font-size:var(--input-description-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_8bffd616{display:flex}.m_96b553a6{--transition-duration: .15s;top:0;left:0;position:absolute;z-index:0;transition-property:transform,width,height;transition-timing-function:ease;transition-duration:0ms}.m_96b553a6:where([data-initialized]){transition-duration:var(--transition-duration)}.m_96b553a6:where([data-hidden]){background-color:red;display:none}.m_9bdbb667{--accordion-radius: var(--mantine-radius-default)}.m_df78851f{overflow-wrap:break-word}.m_4ba554d4{padding:var(--mantine-spacing-md);padding-top:calc(var(--mantine-spacing-xs) / 2)}.m_8fa820a0{margin:0;padding:0}.m_4ba585b8{width:100%;display:flex;align-items:center;flex-direction:row-reverse;padding-inline:var(--mantine-spacing-md);opacity:1;cursor:pointer;background-color:transparent;color:var(--mantine-color-bright)}.m_4ba585b8:where([data-chevron-position=left]){flex-direction:row;padding-inline-start:0}.m_4ba585b8:where(:disabled,[data-disabled]){opacity:.4;cursor:not-allowed}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-dark-6)}}.m_df3ffa0f{color:inherit;font-weight:400;flex:1;overflow:hidden;text-overflow:ellipsis;padding-top:var(--mantine-spacing-sm);padding-bottom:var(--mantine-spacing-sm)}.m_3f35ae96{display:flex;align-items:center;justify-content:flex-start;transition:transform var(--accordion-transition-duration, .2s) ease;width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));min-width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));transform:rotate(0)}.m_3f35ae96:where([data-rotate]){transform:rotate(180deg)}.m_3f35ae96:where([data-position=left]){margin-inline-end:var(--mantine-spacing-md);margin-inline-start:var(--mantine-spacing-md)}.m_9bd771fe{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--mantine-spacing-sm)}.m_9bd771fe:where([data-chevron-position=left]){margin-inline-end:0;margin-inline-start:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_9bd7b098{--item-border-color: var(--mantine-color-gray-3);--item-filled-color: var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_9bd7b098{--item-border-color: var(--mantine-color-dark-4);--item-filled-color: var(--mantine-color-dark-6)}.m_fe19b709{border-bottom:1px solid var(--item-border-color)}.m_1f921b3b{border:1px solid var(--item-border-color);transition:background-color .15s ease}.m_1f921b3b:where([data-active]){background-color:var(--item-filled-color)}.m_1f921b3b:first-of-type{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:first-of-type>[data-accordion-control]{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type>[data-accordion-control]{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b+.m_1f921b3b{border-top:0}.m_2cdf939a{border-radius:var(--accordion-radius)}.m_2cdf939a:where([data-active]){background-color:var(--item-filled-color)}.m_9f59b069{background-color:var(--item-filled-color);border-radius:var(--accordion-radius);border:calc(.0625rem * var(--mantine-scale)) solid transparent;transition:background-color .15s ease}.m_9f59b069[data-active]{border-color:var(--item-border-color)}:where([data-mantine-color-scheme=light]) .m_9f59b069[data-active]{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_9f59b069[data-active]{background-color:var(--mantine-color-dark-7)}.m_9f59b069+.m_9f59b069{margin-top:var(--mantine-spacing-md)}.m_7f854edf{position:fixed;z-index:var(--affix-z-index);inset-inline-start:var(--affix-left);inset-inline-end:var(--affix-right);top:var(--affix-top);bottom:var(--affix-bottom)}.m_66836ed3{--alert-radius: var(--mantine-radius-default);--alert-bg: var(--mantine-primary-color-light);--alert-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--alert-color: var(--mantine-primary-color-light-color);padding:var(--mantine-spacing-md) var(--mantine-spacing-md);border-radius:var(--alert-radius);position:relative;overflow:hidden;background-color:var(--alert-bg);border:var(--alert-bd);color:var(--alert-color)}.m_a5d60502{display:flex}.m_667c2793{flex:1;display:flex;flex-direction:column;gap:var(--mantine-spacing-xs)}.m_6a03f287{display:flex;align-items:center;justify-content:space-between;font-size:var(--mantine-font-size-sm);font-weight:700}.m_6a03f287:where([data-with-close-button]){padding-inline-end:var(--mantine-spacing-md)}.m_698f4f23{display:block;overflow:hidden;text-overflow:ellipsis}.m_667f2a6a{line-height:1;width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));display:flex;align-items:center;justify-content:flex-start;margin-inline-end:var(--mantine-spacing-md);margin-top:calc(.0625rem * var(--mantine-scale))}.m_7fa78076{text-overflow:ellipsis;overflow:hidden;font-size:var(--mantine-font-size-sm)}:where([data-mantine-color-scheme=light]) .m_7fa78076{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_7fa78076{color:var(--mantine-color-white)}.m_7fa78076:where([data-variant=filled]){color:var(--alert-color)}.m_7fa78076:where([data-variant=white]){color:var(--mantine-color-black)}.m_87f54839{width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));color:var(--alert-color)}.m_b6d8b162{-webkit-tap-highlight-color:transparent;text-decoration:none;font-size:var(--text-fz, var(--mantine-font-size-md));line-height:var(--text-lh, var(--mantine-line-height-md));font-weight:400;margin:0;padding:0;color:var(--text-color)}.m_b6d8b162:where([data-truncate]){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m_b6d8b162:where([data-truncate=start]){direction:rtl;text-align:right}:where([dir=rtl]) .m_b6d8b162:where([data-truncate=start]){direction:ltr;text-align:left}.m_b6d8b162:where([data-variant=gradient]){background-image:var(--text-gradient);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.m_b6d8b162:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--text-line-clamp);-webkit-box-orient:vertical}.m_b6d8b162:where([data-inherit]){line-height:inherit;font-weight:inherit;font-size:inherit}.m_b6d8b162:where([data-inline]){line-height:1}.m_849cf0da{color:var(--mantine-color-anchor);text-decoration:none;appearance:none;border:none;display:inline;padding:0;margin:0;background-color:transparent;cursor:pointer}@media(hover:hover){.m_849cf0da:where([data-underline=hover]):hover{text-decoration:underline}}@media(hover:none){.m_849cf0da:where([data-underline=hover]):active{text-decoration:underline}}.m_849cf0da:where([data-underline=not-hover]){text-decoration:underline}@media(hover:hover){.m_849cf0da:where([data-underline=not-hover]):hover{text-decoration:none}}@media(hover:none){.m_849cf0da:where([data-underline=not-hover]):active{text-decoration:none}}.m_849cf0da:where([data-underline=always]){text-decoration:underline}.m_849cf0da:where([data-variant=gradient]),.m_849cf0da:where([data-variant=gradient]):hover{text-decoration:none}.m_849cf0da:where([data-line-clamp]){display:-webkit-box}.m_48204f9b{width:var(--slider-size);height:var(--slider-size);position:relative;border-radius:100%;display:flex;align-items:center;justify-content:center;user-select:none}.m_48204f9b:focus-within{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_48204f9b{--slider-size: calc(3.75rem * var(--mantine-scale));--thumb-size: calc(var(--slider-size) / 5)}:where([data-mantine-color-scheme=light]) .m_48204f9b{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_48204f9b{background-color:var(--mantine-color-dark-5)}.m_bb9cdbad{position:absolute;inset:calc(.0625rem * var(--mantine-scale));border-radius:var(--slider-size);pointer-events:none}.m_481dd586{width:calc(.125rem * var(--mantine-scale));position:absolute;top:0;bottom:0;left:calc(50% - 1px);transform:rotate(var(--angle))}.m_481dd586:before{content:"";position:absolute;top:calc(var(--thumb-size) / 3);left:calc(.03125rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));height:calc(var(--thumb-size) / 1.5);transform:translate(-50%,-50%)}:where([data-mantine-color-scheme=light]) .m_481dd586:before{background-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_481dd586:before{background-color:var(--mantine-color-dark-3)}.m_481dd586[data-label]:after{min-width:calc(1.125rem * var(--mantine-scale));text-align:center;content:attr(data-label);position:absolute;top:calc(-1.5rem * var(--mantine-scale));left:calc(-.4375rem * var(--mantine-scale));transform:rotate(calc(360deg - var(--angle)));font-size:var(--mantine-font-size-xs)}.m_bc02ba3d{position:absolute;inset-block:0;inset-inline-start:calc(50% - 1.5px);inset-inline-end:0;height:100%;width:calc(.1875rem * var(--mantine-scale));outline:none;pointer-events:none}.m_bc02ba3d:before{content:"";position:absolute;right:0;top:0;height:min(var(--thumb-size),calc(var(--slider-size) / 2));width:calc(.1875rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_bc02ba3d:before{background-color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_bc02ba3d:before{background-color:var(--mantine-color-dark-1)}.m_bb8e875b{font-size:var(--mantine-font-size-xs)}.m_89ab340[data-resizing]{--app-shell-transition-duration: 0ms !important}.m_89ab340[data-disabled]{--app-shell-header-offset: 0rem !important;--app-shell-navbar-offset: 0rem !important;--app-shell-aside-offset: 0rem !important;--app-shell-footer-offset: 0rem !important}[data-mantine-color-scheme=light] .m_89ab340{--app-shell-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89ab340{--app-shell-border-color: var(--mantine-color-dark-4)}.m_45252eee,.m_9cdde9a,.m_3b16f56b,.m_8983817,.m_3840c879{transition-duration:var(--app-shell-transition-duration);transition-timing-function:var(--app-shell-transition-timing-function)}.m_45252eee,.m_9cdde9a{position:fixed;display:flex;flex-direction:column;top:var(--app-shell-header-offset, 0rem);height:calc(100dvh - var(--app-shell-header-offset, 0rem) - var(--app-shell-footer-offset, 0rem));background-color:var(--mantine-color-body);transition-property:transform,top,height}:where([data-layout=alt]) .m_45252eee,:where([data-layout=alt]) .m_9cdde9a{top:0rem;height:100dvh}.m_45252eee{inset-inline-start:0;width:var(--app-shell-navbar-width);transition-property:transform,top,height;transform:var(--app-shell-navbar-transform);z-index:var(--app-shell-navbar-z-index)}:where([dir=rtl]) .m_45252eee{transform:var(--app-shell-navbar-transform-rtl)}.m_45252eee:where([data-with-border]){border-inline-end:1px solid var(--app-shell-border-color)}.m_9cdde9a{inset-inline-end:0;width:var(--app-shell-aside-width);transform:var(--app-shell-aside-transform);z-index:var(--app-shell-aside-z-index)}:where([dir=rtl]) .m_9cdde9a{transform:var(--app-shell-aside-transform-rtl)}.m_9cdde9a:where([data-with-border]){border-inline-start:1px solid var(--app-shell-border-color)}:where([data-scroll-locked]) .m_9cdde9a{visibility:var(--app-shell-aside-scroll-locked-visibility)}.m_8983817{padding-inline-start:calc(var(--app-shell-navbar-offset, 0rem) + var(--app-shell-padding));padding-inline-end:calc(var(--app-shell-aside-offset, 0rem) + var(--app-shell-padding));padding-top:calc(var(--app-shell-header-offset, 0rem) + var(--app-shell-padding));padding-bottom:calc(var(--app-shell-footer-offset, 0rem) + var(--app-shell-padding));min-height:100dvh;transition-property:padding}.m_3b16f56b,.m_3840c879{position:fixed;inset-inline:0;transition-property:transform,margin-inline-start,margin-inline-end;background-color:var(--mantine-color-body)}:where([data-layout=alt]) .m_3b16f56b,:where([data-layout=alt]) .m_3840c879{margin-inline-start:var(--app-shell-navbar-offset, 0rem);margin-inline-end:var(--app-shell-aside-offset, 0rem)}.m_3b16f56b{top:0;height:var(--app-shell-header-height);background-color:var(--mantine-color-body);transform:var(--app-shell-header-transform);z-index:var(--app-shell-header-z-index)}.m_3b16f56b:where([data-with-border]){border-bottom:1px solid var(--app-shell-border-color)}.m_3840c879{bottom:0;height:calc(var(--app-shell-footer-height) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);transform:var(--app-shell-footer-transform);z-index:var(--app-shell-footer-z-index)}.m_3840c879:where([data-with-border]){border-top:1px solid var(--app-shell-border-color)}.m_6dcfc7c7{flex-grow:0}.m_6dcfc7c7:where([data-grow]){flex-grow:1}.m_71ac47fc{--ar-ratio: 1;max-width:100%}.m_71ac47fc>:where(*:not(style)){aspect-ratio:var(--ar-ratio);width:100%}.m_71ac47fc>:where(img,video){object-fit:cover}.m_88b62a41{--combobox-padding: calc(.25rem * var(--mantine-scale));padding:var(--combobox-padding)}.m_88b62a41:has([data-mantine-scrollbar]) .m_985517d8{max-width:calc(100% + var(--combobox-padding))}.m_88b62a41[data-composed]{padding-inline-end:0}.m_88b62a41[data-hidden]{display:none}.m_88b62a41,.m_b2821a6e{--combobox-option-padding-xs: calc(.25rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));--combobox-option-padding-sm: calc(.375rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--combobox-option-padding-md: calc(.5rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale));--combobox-option-padding-lg: calc(.625rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--combobox-option-padding-xl: calc(.875rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--combobox-option-padding: var(--combobox-option-padding-sm)}.m_92253aa5{padding:var(--combobox-option-padding);font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border-radius:var(--mantine-radius-default);background-color:transparent;color:inherit;cursor:pointer;overflow-wrap:break-word}.m_92253aa5:where([data-combobox-selected]){background-color:var(--mantine-primary-color-filled);color:var(--mantine-color-white)}.m_92253aa5:where([data-combobox-disabled]){cursor:not-allowed;opacity:.35}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}.m_985517d8{margin-inline:calc(var(--combobox-padding) * -1);margin-top:calc(var(--combobox-padding) * -1);width:calc(100% + var(--combobox-padding) * 2);border-top-width:0;border-inline-width:0;border-end-start-radius:0;border-end-end-radius:0;margin-bottom:var(--combobox-padding);position:relative}:where([data-mantine-color-scheme=light]) .m_985517d8,:where([data-mantine-color-scheme=light]) .m_985517d8:focus{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_985517d8,:where([data-mantine-color-scheme=dark]) .m_985517d8:focus{border-color:var(--mantine-color-dark-4)}:where([data-mantine-color-scheme=light]) .m_985517d8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_985517d8{background-color:var(--mantine-color-dark-7)}.m_2530cd1d{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));text-align:center;padding:var(--combobox-option-padding);color:var(--mantine-color-dimmed)}.m_858f94bd,.m_82b967cb{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border:0 solid transparent;margin-inline:calc(var(--combobox-padding) * -1);padding:var(--combobox-option-padding)}:where([data-mantine-color-scheme=light]) .m_858f94bd,:where([data-mantine-color-scheme=light]) .m_82b967cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_858f94bd,:where([data-mantine-color-scheme=dark]) .m_82b967cb{border-color:var(--mantine-color-dark-4)}.m_82b967cb{border-top-width:calc(.0625rem * var(--mantine-scale));margin-top:var(--combobox-padding);margin-bottom:calc(var(--combobox-padding) * -1)}.m_858f94bd{border-bottom-width:calc(.0625rem * var(--mantine-scale));margin-bottom:var(--combobox-padding);margin-top:calc(var(--combobox-padding) * -1)}.m_254f3e4f:has(.m_2bb2e9e5:only-child){display:none}.m_2bb2e9e5{color:var(--mantine-color-dimmed);font-size:calc(var(--combobox-option-fz, var(--mantine-font-size-sm)) * .85);padding:var(--combobox-option-padding);font-weight:500;position:relative;display:flex;align-items:center}.m_2bb2e9e5:after{content:"";flex:1;inset-inline:0;height:calc(.0625rem * var(--mantine-scale));margin-inline-start:var(--mantine-spacing-xs)}:where([data-mantine-color-scheme=light]) .m_2bb2e9e5:after{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_2bb2e9e5:after{background-color:var(--mantine-color-dark-4)}.m_2bb2e9e5:only-child{display:none}.m_2943220b{--combobox-chevron-size-xs: calc(.875rem * var(--mantine-scale));--combobox-chevron-size-sm: calc(1.125rem * var(--mantine-scale));--combobox-chevron-size-md: calc(1.25rem * var(--mantine-scale));--combobox-chevron-size-lg: calc(1.5rem * var(--mantine-scale));--combobox-chevron-size-xl: calc(1.75rem * var(--mantine-scale));--combobox-chevron-size: var(--combobox-chevron-size-sm)}:where([data-mantine-color-scheme=light]) .m_2943220b{--_combobox-chevron-color: var(--combobox-chevron-color, var(--mantine-color-gray-6))}:where([data-mantine-color-scheme=dark]) .m_2943220b{--_combobox-chevron-color: var(--combobox-chevron-color, var(--mantine-color-dark-3))}.m_2943220b{width:var(--combobox-chevron-size);height:var(--combobox-chevron-size);color:var(--_combobox-chevron-color)}.m_2943220b:where([data-error]){color:var(--combobox-chevron-color, var(--mantine-color-error))}.m_390b5f4{display:flex;align-items:center;gap:calc(.5rem * var(--mantine-scale))}.m_390b5f4:where([data-reverse]){justify-content:space-between}.m_8ee53fc2{opacity:.4;width:.8em;min-width:.8em;height:.8em}:where([data-combobox-selected]) .m_8ee53fc2{opacity:1}.m_a530ee0a{width:.8em;min-width:.8em;height:.8em}.m_5f75b09e{--label-lh-xs: calc(1rem * var(--mantine-scale));--label-lh-sm: calc(1.25rem * var(--mantine-scale));--label-lh-md: calc(1.5rem * var(--mantine-scale));--label-lh-lg: calc(1.875rem * var(--mantine-scale));--label-lh-xl: calc(2.25rem * var(--mantine-scale));--label-lh: var(--label-lh-sm)}.m_5f75b09e[data-label-position=left]{--label-order: 1;--label-offset-end: var(--mantine-spacing-sm);--label-offset-start: 0}.m_5f75b09e[data-label-position=right]{--label-order: 2;--label-offset-end: 0;--label-offset-start: var(--mantine-spacing-sm)}.m_5f6e695e{-webkit-tap-highlight-color:transparent;display:flex}.m_d3ea56bb{--label-cursor: var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:inline-flex;flex-direction:column;font-size:var(--label-fz, var(--mantine-font-size-sm));line-height:var(--label-lh);cursor:var(--label-cursor);order:var(--label-order)}fieldset:disabled .m_d3ea56bb,.m_d3ea56bb[data-disabled]{--label-cursor: not-allowed}.m_8ee546b8{cursor:var(--label-cursor);color:inherit;padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}fieldset:disabled .m_8ee546b8,.m_8ee546b8:where([data-disabled]){color:var(--mantine-color-disabled-color)}.m_328f68c0{margin-top:calc(var(--mantine-spacing-xs) / 2);padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end);cursor:default}.m_8e8a99cc{margin-top:calc(var(--mantine-spacing-xs) / 2);padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}.m_26775b0a{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_26775b0a :where(*){cursor:inherit}.m_26775b0a:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_5e5256ee{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled)}.m_5e5256ee:where([data-variant=filled]){--checkbox-icon-color: var(--mantine-color-white)}.m_5e5256ee:where([data-variant=outline]){--checkbox-icon-color: var(--checkbox-color)}.m_5e5256ee{position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);min-width:var(--checkbox-size);height:var(--checkbox-size);min-height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_5e5256ee{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_5e5256ee{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_5e5256ee[data-indeterminate],.m_5e5256ee[data-checked]{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_5e5256ee[data-indeterminate]>.m_1b1c543a,.m_5e5256ee[data-checked]>.m_1b1c543a{opacity:1;transform:none;color:var(--checkbox-icon-color)}.m_5e5256ee[data-disabled]{cursor:not-allowed;border-color:var(--mantine-color-disabled-border);background-color:var(--mantine-color-disabled)}[data-mantine-color-scheme=light] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-gray-5)}[data-mantine-color-scheme=dark] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-dark-3)}.m_76e20374[data-indeterminate]:not([data-disabled]),.m_76e20374[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--checkbox-color)}.m_76e20374[data-indeterminate]:not([data-disabled])>.m_1b1c543a,.m_76e20374[data-checked]:not([data-disabled])>.m_1b1c543a{color:var(--checkbox-icon-color);opacity:1;transform:none}.m_1b1c543a{display:block;width:60%;color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_bf2d988c{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled)}.m_bf2d988c:where([data-variant=filled]){--checkbox-icon-color: var(--mantine-color-white)}.m_bf2d988c:where([data-variant=outline]){--checkbox-icon-color: var(--checkbox-color)}.m_26062bec{position:relative;width:var(--checkbox-size);height:var(--checkbox-size);order:1}.m_26062bec:where([data-label-position=left]){order:2}.m_26063560{appearance:none;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));padding:0;display:block;margin:0;transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_26063560{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_26063560{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_26063560:where([data-error]){border-color:var(--mantine-color-error)}.m_26063560[data-indeterminate],.m_26063560:checked{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_26063560[data-indeterminate]+.m_bf295423,.m_26063560:checked+.m_bf295423{opacity:1;transform:none}.m_26063560:disabled{cursor:not-allowed;border-color:var(--mantine-color-disabled-border);background-color:var(--mantine-color-disabled)}.m_26063560:disabled+.m_bf295423{color:var(--mantine-color-disabled-color)}.m_215c4542+.m_bf295423{color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled),.m_215c4542:checked:not(:disabled){background-color:transparent;border-color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled)+.m_bf295423,.m_215c4542:checked:not(:disabled)+.m_bf295423{color:var(--checkbox-icon-color);opacity:1;transform:none}.m_bf295423{position:absolute;inset:0;width:60%;margin:auto;color:var(--checkbox-icon-color);pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:0;transition:transform .1s ease,opacity .1s ease}.m_11def92b{--ag-spacing: var(--mantine-spacing-sm);--ag-offset: calc(var(--ag-spacing) * -1);display:flex;padding-inline-start:var(--ag-spacing)}.m_f85678b6{--avatar-size-xs: calc(1rem * var(--mantine-scale));--avatar-size-sm: calc(1.625rem * var(--mantine-scale));--avatar-size-md: calc(2.375rem * var(--mantine-scale));--avatar-size-lg: calc(3.5rem * var(--mantine-scale));--avatar-size-xl: calc(5.25rem * var(--mantine-scale));--avatar-size: var(--avatar-size-md);--avatar-radius: calc(62.5rem * var(--mantine-scale));--avatar-bg: var(--mantine-color-gray-light);--avatar-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--avatar-color: var(--mantine-color-gray-light-color);--avatar-placeholder-fz: calc(var(--avatar-size) / 2.5);-webkit-tap-highlight-color:transparent;position:relative;display:block;user-select:none;overflow:hidden;border-radius:var(--avatar-radius);text-decoration:none;padding:0;width:var(--avatar-size);height:var(--avatar-size);min-width:var(--avatar-size)}.m_f85678b6:where([data-within-group]){margin-inline-start:var(--ag-offset);border:2px solid var(--mantine-color-body);background:var(--mantine-color-body)}.m_11f8ac07{object-fit:cover;width:100%;height:100%;display:block}.m_104cd71f{font-weight:700;display:flex;align-items:center;justify-content:center;width:100%;height:100%;user-select:none;border-radius:var(--avatar-radius);font-size:var(--avatar-placeholder-fz);background:var(--avatar-bg);border:var(--avatar-bd);color:var(--avatar-color)}.m_104cd71f>[data-avatar-placeholder-icon]{width:70%;height:70%}.m_2ce0de02{background-size:cover;background-position:center;display:block;width:100%;border:0;text-decoration:none;border-radius:var(--bi-radius, 0)}.m_347db0ec{--badge-height-xs: calc(1rem * var(--mantine-scale));--badge-height-sm: calc(1.125rem * var(--mantine-scale));--badge-height-md: calc(1.25rem * var(--mantine-scale));--badge-height-lg: calc(1.625rem * var(--mantine-scale));--badge-height-xl: calc(2rem * var(--mantine-scale));--badge-fz-xs: calc(.5625rem * var(--mantine-scale));--badge-fz-sm: calc(.625rem * var(--mantine-scale));--badge-fz-md: calc(.6875rem * var(--mantine-scale));--badge-fz-lg: calc(.8125rem * var(--mantine-scale));--badge-fz-xl: calc(1rem * var(--mantine-scale));--badge-padding-x-xs: calc(.375rem * var(--mantine-scale));--badge-padding-x-sm: calc(.5rem * var(--mantine-scale));--badge-padding-x-md: calc(.625rem * var(--mantine-scale));--badge-padding-x-lg: calc(.75rem * var(--mantine-scale));--badge-padding-x-xl: calc(1rem * var(--mantine-scale));--badge-height: var(--badge-height-md);--badge-fz: var(--badge-fz-md);--badge-padding-x: var(--badge-padding-x-md);--badge-radius: calc(62.5rem * var(--mantine-scale));--badge-lh: calc(var(--badge-height) - calc(.125rem * var(--mantine-scale)));--badge-color: var(--mantine-color-white);--badge-bg: var(--mantine-primary-color-filled);--badge-border-width: calc(.0625rem * var(--mantine-scale));--badge-bd: var(--badge-border-width) solid transparent;-webkit-tap-highlight-color:transparent;font-size:var(--badge-fz);border-radius:var(--badge-radius);height:var(--badge-height);line-height:var(--badge-lh);text-decoration:none;padding:0 var(--badge-padding-x);display:inline-grid;align-items:center;justify-content:center;width:fit-content;text-transform:uppercase;font-weight:700;letter-spacing:calc(.015625rem * var(--mantine-scale));cursor:default;text-overflow:ellipsis;overflow:hidden;color:var(--badge-color);background:var(--badge-bg);border:var(--badge-bd)}.m_347db0ec:where([data-with-left-section],[data-variant=dot]){grid-template-columns:auto 1fr}.m_347db0ec:where([data-with-right-section]){grid-template-columns:1fr auto}.m_347db0ec:where([data-with-left-section][data-with-right-section],[data-variant=dot][data-with-right-section]){grid-template-columns:auto 1fr auto}.m_347db0ec:where([data-block]){display:flex;width:100%}.m_347db0ec:where([data-circle]){padding-inline:calc(.125rem * var(--mantine-scale));display:flex;width:var(--badge-height)}.m_fbd81e3d{--badge-dot-size: calc(var(--badge-height) / 3.4)}:where([data-mantine-color-scheme=light]) .m_fbd81e3d{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fbd81e3d{background-color:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_fbd81e3d:before{content:"";display:block;width:var(--badge-dot-size);height:var(--badge-dot-size);border-radius:var(--badge-dot-size);background-color:var(--badge-dot-color);margin-inline-end:var(--badge-dot-size)}.m_5add502a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;cursor:inherit}.m_91fdda9b{--badge-section-margin: calc(var(--mantine-spacing-xs) / 2);display:inline-flex;justify-content:center;align-items:center;max-height:calc(var(--badge-height) - var(--badge-border-width) * 2)}.m_91fdda9b:where([data-position=left]){margin-inline-end:var(--badge-section-margin)}.m_91fdda9b:where([data-position=right]){margin-inline-start:var(--badge-section-margin)}.m_ddec01c0{--blockquote-border: 3px solid var(--bq-bd);position:relative;margin:0;border-inline-start:var(--blockquote-border);border-start-end-radius:var(--bq-radius);border-end-end-radius:var(--bq-radius);padding:var(--mantine-spacing-xl) calc(2.375rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_ddec01c0{background-color:var(--bq-bg-light)}:where([data-mantine-color-scheme=dark]) .m_ddec01c0{background-color:var(--bq-bg-dark)}.m_dde7bd57{--blockquote-icon-offset: calc(var(--bq-icon-size) / -2);position:absolute;color:var(--bq-bd);background-color:var(--mantine-color-body);display:flex;align-items:center;justify-content:center;top:var(--blockquote-icon-offset);inset-inline-start:var(--blockquote-icon-offset);width:var(--bq-icon-size);height:var(--bq-icon-size);border-radius:var(--bq-icon-size)}.m_dde51a35{display:block;margin-top:var(--mantine-spacing-md);opacity:.6;font-size:85%}.m_8b3717df{display:flex;align-items:center;flex-wrap:wrap}.m_f678d540{line-height:1;white-space:nowrap;-webkit-tap-highlight-color:transparent}.m_3b8f2208{margin-inline:var(--bc-separator-margin, var(--mantine-spacing-xs));line-height:1;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_3b8f2208{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_3b8f2208{color:var(--mantine-color-dark-2)}.m_fea6bf1a{--burger-size-xs: calc(.75rem * var(--mantine-scale));--burger-size-sm: calc(1.125rem * var(--mantine-scale));--burger-size-md: calc(1.5rem * var(--mantine-scale));--burger-size-lg: calc(2.125rem * var(--mantine-scale));--burger-size-xl: calc(2.625rem * var(--mantine-scale));--burger-size: var(--burger-size-md);--burger-line-size: calc(var(--burger-size) / 12);width:calc(var(--burger-size) + var(--mantine-spacing-xs));height:calc(var(--burger-size) + var(--mantine-spacing-xs));padding:calc(var(--mantine-spacing-xs) / 2);cursor:pointer}:where([data-mantine-color-scheme=light]) .m_fea6bf1a{--burger-color: var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fea6bf1a{--burger-color: var(--mantine-color-white)}.m_d4fb9cad{position:relative;user-select:none}.m_d4fb9cad,.m_d4fb9cad:before,.m_d4fb9cad:after{display:block;width:var(--burger-size);height:var(--burger-line-size);background-color:var(--burger-color);outline:calc(.0625rem * var(--mantine-scale)) solid transparent;transition-property:background-color,transform;transition-duration:var(--burger-transition-duration, .3s);transition-timing-function:var(--burger-transition-timing-function, ease)}.m_d4fb9cad:before,.m_d4fb9cad:after{position:absolute;content:"";inset-inline-start:0}.m_d4fb9cad:before{top:calc(var(--burger-size) / -3)}.m_d4fb9cad:after{top:calc(var(--burger-size) / 3)}.m_d4fb9cad[data-opened]{background-color:transparent}.m_d4fb9cad[data-opened]:before{transform:translateY(calc(var(--burger-size) / 3)) rotate(45deg)}.m_d4fb9cad[data-opened]:after{transform:translateY(calc(var(--burger-size) / -3)) rotate(-45deg)}.m_77c9d27d{--button-height-xs: calc(1.875rem * var(--mantine-scale));--button-height-sm: calc(2.25rem * var(--mantine-scale));--button-height-md: calc(2.625rem * var(--mantine-scale));--button-height-lg: calc(3.125rem * var(--mantine-scale));--button-height-xl: calc(3.75rem * var(--mantine-scale));--button-height-compact-xs: calc(1.375rem * var(--mantine-scale));--button-height-compact-sm: calc(1.625rem * var(--mantine-scale));--button-height-compact-md: calc(1.875rem * var(--mantine-scale));--button-height-compact-lg: calc(2.125rem * var(--mantine-scale));--button-height-compact-xl: calc(2.5rem * var(--mantine-scale));--button-padding-x-xs: calc(.875rem * var(--mantine-scale));--button-padding-x-sm: calc(1.125rem * var(--mantine-scale));--button-padding-x-md: calc(1.375rem * var(--mantine-scale));--button-padding-x-lg: calc(1.625rem * var(--mantine-scale));--button-padding-x-xl: calc(2rem * var(--mantine-scale));--button-padding-x-compact-xs: calc(.4375rem * var(--mantine-scale));--button-padding-x-compact-sm: calc(.5rem * var(--mantine-scale));--button-padding-x-compact-md: calc(.625rem * var(--mantine-scale));--button-padding-x-compact-lg: calc(.75rem * var(--mantine-scale));--button-padding-x-compact-xl: calc(.875rem * var(--mantine-scale));--button-height: var(--button-height-sm);--button-padding-x: var(--button-padding-x-sm);--button-color: var(--mantine-color-white);user-select:none;font-weight:600;position:relative;line-height:1;text-align:center;overflow:hidden;width:auto;cursor:pointer;display:inline-block;border-radius:var(--button-radius, var(--mantine-radius-default));font-size:var(--button-fz, var(--mantine-font-size-sm));background:var(--button-bg, var(--mantine-primary-color-filled));border:var(--button-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--button-color, var(--mantine-color-white));height:var(--button-height, var(--button-height-sm));padding-inline:var(--button-padding-x, var(--button-padding-x-sm));vertical-align:middle}.m_77c9d27d:where([data-block]){display:block;width:100%}.m_77c9d27d:where([data-with-left-section]){padding-inline-start:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where([data-with-right-section]){padding-inline-end:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent;transform:none;color:var(--mantine-color-disabled-color);background:var(--mantine-color-disabled)}.m_77c9d27d:before{content:"";pointer-events:none;position:absolute;inset:calc(-.0625rem * var(--mantine-scale));border-radius:var(--button-radius, var(--mantine-radius-default));transform:translateY(-100%);opacity:0;filter:blur(12px);transition:transform .15s ease,opacity .1s ease}:where([data-mantine-color-scheme=light]) .m_77c9d27d:before{background-color:#ffffff26}:where([data-mantine-color-scheme=dark]) .m_77c9d27d:before{background-color:#00000026}.m_77c9d27d:where([data-loading]){cursor:not-allowed;transform:none}.m_77c9d27d:where([data-loading]):before{transform:translateY(0);opacity:1}.m_77c9d27d:where([data-loading]) .m_80f1301b{opacity:0;transform:translateY(100%)}@media(hover:hover){.m_77c9d27d:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}@media(hover:none){.m_77c9d27d:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}.m_80f1301b{display:flex;align-items:center;justify-content:var(--button-justify, center);height:100%;overflow:visible;transition:transform .15s ease,opacity .1s ease}.m_811560b9{white-space:nowrap;height:100%;overflow:hidden;display:flex;align-items:center;opacity:1}.m_811560b9:where([data-loading]){opacity:.2}.m_a74036a{display:flex;align-items:center}.m_a74036a:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_a74036a:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_a25b86ee{position:absolute;left:50%;top:50%}.m_80d6d844{--button-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_80d6d844 :where(.m_77c9d27d):focus{position:relative;z-index:1}.m_80d6d844[data-orientation=horizontal]{flex-direction:row}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):first-child,.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):last-child,.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child),.m_80d6d844[data-orientation=horizontal] .m_70be2a01:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical]{flex-direction:column}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):first-child,.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):last-child,.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child),.m_80d6d844[data-orientation=vertical] .m_70be2a01:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--button-border-width) / 2);border-top-width:calc(var(--button-border-width) / 2)}.m_70be2a01{--section-height-xs: calc(1.875rem * var(--mantine-scale));--section-height-sm: calc(2.25rem * var(--mantine-scale));--section-height-md: calc(2.625rem * var(--mantine-scale));--section-height-lg: calc(3.125rem * var(--mantine-scale));--section-height-xl: calc(3.75rem * var(--mantine-scale));--section-height-compact-xs: calc(1.375rem * var(--mantine-scale));--section-height-compact-sm: calc(1.625rem * var(--mantine-scale));--section-height-compact-md: calc(1.875rem * var(--mantine-scale));--section-height-compact-lg: calc(2.125rem * var(--mantine-scale));--section-height-compact-xl: calc(2.5rem * var(--mantine-scale));--section-padding-x-xs: calc(.875rem * var(--mantine-scale));--section-padding-x-sm: calc(1.125rem * var(--mantine-scale));--section-padding-x-md: calc(1.375rem * var(--mantine-scale));--section-padding-x-lg: calc(1.625rem * var(--mantine-scale));--section-padding-x-xl: calc(2rem * var(--mantine-scale));--section-padding-x-compact-xs: calc(.4375rem * var(--mantine-scale));--section-padding-x-compact-sm: calc(.5rem * var(--mantine-scale));--section-padding-x-compact-md: calc(.625rem * var(--mantine-scale));--section-padding-x-compact-lg: calc(.75rem * var(--mantine-scale));--section-padding-x-compact-xl: calc(.875rem * var(--mantine-scale));--section-height: var(--section-height-sm);--section-padding-x: var(--section-padding-x-sm);--section-color: var(--mantine-color-white);font-weight:600;width:auto;border-radius:var(--section-radius, var(--mantine-radius-default));font-size:var(--section-fz, var(--mantine-font-size-sm));background:var(--section-bg, var(--mantine-primary-color-filled));border:var(--section-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--section-color, var(--mantine-color-white));height:var(--section-height, var(--section-height-sm));padding-inline:var(--section-padding-x, var(--section-padding-x-sm));vertical-align:middle;line-height:1;display:inline-flex;align-items:center;justify-content:center}.m_e615b15f{--card-padding: var(--mantine-spacing-md);position:relative;overflow:hidden;display:flex;flex-direction:column;padding:var(--card-padding);color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_e615b15f{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_e615b15f{background-color:var(--mantine-color-dark-6)}.m_599a2148{display:block;margin-inline:calc(var(--card-padding) * -1)}.m_599a2148:where(:first-child){margin-top:calc(var(--card-padding) * -1);border-top:none!important}.m_599a2148:where(:last-child){margin-bottom:calc(var(--card-padding) * -1);border-bottom:none!important}.m_599a2148:where([data-inherit-padding]){padding-inline:var(--card-padding)}.m_599a2148:where([data-with-border]){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-bottom:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_599a2148{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_599a2148{border-color:var(--mantine-color-dark-4)}.m_599a2148+.m_599a2148{border-top:none!important}.m_4451eb3a{display:flex;align-items:center;justify-content:center}.m_4451eb3a:where([data-inline]){display:inline-flex}.m_f59ffda3{--chip-size-xs: calc(1.4375rem * var(--mantine-scale));--chip-size-sm: calc(1.75rem * var(--mantine-scale));--chip-size-md: calc(2rem * var(--mantine-scale));--chip-size-lg: calc(2.25rem * var(--mantine-scale));--chip-size-xl: calc(2.5rem * var(--mantine-scale));--chip-icon-size-xs: calc(.5625rem * var(--mantine-scale));--chip-icon-size-sm: calc(.75rem * var(--mantine-scale));--chip-icon-size-md: calc(.875rem * var(--mantine-scale));--chip-icon-size-lg: calc(1rem * var(--mantine-scale));--chip-icon-size-xl: calc(1.125rem * var(--mantine-scale));--chip-padding-xs: calc(1rem * var(--mantine-scale));--chip-padding-sm: calc(1.25rem * var(--mantine-scale));--chip-padding-md: calc(1.5rem * var(--mantine-scale));--chip-padding-lg: calc(1.75rem * var(--mantine-scale));--chip-padding-xl: calc(2rem * var(--mantine-scale));--chip-checked-padding-xs: calc(.5125rem * var(--mantine-scale));--chip-checked-padding-sm: calc(.625rem * var(--mantine-scale));--chip-checked-padding-md: calc(.73125rem * var(--mantine-scale));--chip-checked-padding-lg: calc(.84375rem * var(--mantine-scale));--chip-checked-padding-xl: calc(.98125rem * var(--mantine-scale));--chip-spacing-xs: calc(.625rem * var(--mantine-scale));--chip-spacing-sm: calc(.75rem * var(--mantine-scale));--chip-spacing-md: calc(1rem * var(--mantine-scale));--chip-spacing-lg: calc(1.25rem * var(--mantine-scale));--chip-spacing-xl: calc(1.375rem * var(--mantine-scale));--chip-size: var(--chip-size-sm);--chip-icon-size: var(--chip-icon-size-sm);--chip-padding: var(--chip-padding-sm);--chip-spacing: var(--chip-spacing-sm);--chip-checked-padding: var(--chip-checked-padding-sm);--chip-bg: var(--mantine-primary-color-filled);--chip-hover: var(--mantine-primary-color-filled-hover);--chip-color: var(--mantine-color-white);--chip-bd: calc(.0625rem * var(--mantine-scale)) solid transparent}.m_be049a53{display:inline-flex;align-items:center;user-select:none;border-radius:var(--chip-radius, 1000rem);height:var(--chip-size);font-size:var(--chip-fz, var(--mantine-font-size-sm));line-height:calc(var(--chip-size) - calc(.125rem * var(--mantine-scale)));padding-inline:var(--chip-padding);cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}.m_be049a53:where([data-checked]){padding:var(--chip-checked-padding)}.m_be049a53:where([data-disabled]){cursor:not-allowed;background-color:var(--mantine-color-disabled);color:var(--mantine-color-disabled-color)}:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-white);border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-dark-6);border:1px solid var(--mantine-color-dark-4)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-dark-5)}}.m_3904c1af:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);border:var(--chip-bd)}@media(hover:hover){.m_3904c1af:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media(hover:none){.m_3904c1af:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_fa109255:not([data-disabled]),.m_f7e165c3:not([data-disabled]){border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-dark-5)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-dark-4)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-dark-4)}}.m_fa109255:not([data-disabled]):where([data-checked]),.m_f7e165c3:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);color:var(--chip-color);background-color:var(--chip-bg)}@media(hover:hover){.m_fa109255:not([data-disabled]):where([data-checked]):hover,.m_f7e165c3:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media(hover:none){.m_fa109255:not([data-disabled]):where([data-checked]):active,.m_f7e165c3:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_9ac86df9{width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));max-width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));height:var(--chip-icon-size);display:flex;align-items:center;overflow:hidden}.m_d6d72580{width:var(--chip-icon-size);height:var(--chip-icon-size);display:block;color:var(--chip-icon-color, inherit)}.m_bde07329{width:0;height:0;padding:0;opacity:0;margin:0}.m_bde07329:focus-visible+.m_be049a53{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_b183c0a2{font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);padding:2px calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);font-size:var(--mantine-font-size-xs);margin:0;overflow:auto}:where([data-mantine-color-scheme=light]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-gray-0))}:where([data-mantine-color-scheme=dark]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-dark-6))}.m_b183c0a2[data-block]{padding:var(--mantine-spacing-xs)}.m_de3d2490{--cs-size: calc(1.75rem * var(--mantine-scale));--cs-radius: calc(62.5rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;border:none;appearance:none;display:block;line-height:1;position:relative;width:var(--cs-size);height:var(--cs-size);min-width:var(--cs-size);min-height:var(--cs-size);border-radius:var(--cs-radius);color:inherit;text-decoration:none}[data-mantine-color-scheme=light] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-gray-3);--alpha-overlay-bg: var(--mantine-color-white)}[data-mantine-color-scheme=dark] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-dark-4);--alpha-overlay-bg: var(--mantine-color-dark-7)}.m_862f3d1b{position:absolute;inset:0;border-radius:var(--cs-radius)}.m_98ae7f22{position:absolute;inset:0;border-radius:var(--cs-radius);z-index:1;box-shadow:#0000001a 0 0 0 calc(.0625rem * var(--mantine-scale)) inset,#00000026 0 0 calc(.25rem * var(--mantine-scale)) inset}.m_95709ac0{position:absolute;inset:0;border-radius:var(--cs-radius);background-size:calc(.5rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));background-position:0 0,0 calc(.25rem * var(--mantine-scale)),calc(.25rem * var(--mantine-scale)) calc(-.25rem * var(--mantine-scale)),calc(-.25rem * var(--mantine-scale)) 0;background-image:linear-gradient(45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(-45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--alpha-overlay-color) 75%),linear-gradient(-45deg,var(--alpha-overlay-bg) 75%,var(--alpha-overlay-color) 75%)}.m_93e74e3{position:absolute;inset:0;border-radius:var(--cs-radius);z-index:2;display:flex;align-items:center;justify-content:center}.m_fee9c77{--cp-width-xs: calc(11.25rem * var(--mantine-scale));--cp-width-sm: calc(12.5rem * var(--mantine-scale));--cp-width-md: calc(15rem * var(--mantine-scale));--cp-width-lg: calc(17.5rem * var(--mantine-scale));--cp-width-xl: calc(20rem * var(--mantine-scale));--cp-preview-size-xs: calc(1.625rem * var(--mantine-scale));--cp-preview-size-sm: calc(2.125rem * var(--mantine-scale));--cp-preview-size-md: calc(2.625rem * var(--mantine-scale));--cp-preview-size-lg: calc(3.125rem * var(--mantine-scale));--cp-preview-size-xl: calc(3.375rem * var(--mantine-scale));--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-saturation-height-xs: calc(6.25rem * var(--mantine-scale));--cp-saturation-height-sm: calc(6.875rem * var(--mantine-scale));--cp-saturation-height-md: calc(7.5rem * var(--mantine-scale));--cp-saturation-height-lg: calc(8.75rem * var(--mantine-scale));--cp-saturation-height-xl: calc(10rem * var(--mantine-scale));--cp-preview-size: var(--cp-preview-size-sm);--cp-thumb-size: var(--cp-thumb-size-sm);--cp-saturation-height: var(--cp-saturation-height-sm);--cp-width: var(--cp-width-sm);--cp-body-spacing: var(--mantine-spacing-sm);width:var(--cp-width);padding:calc(.0625rem * var(--mantine-scale))}.m_fee9c77:where([data-full-width]){width:100%}.m_9dddfbac{width:var(--cp-preview-size);height:var(--cp-preview-size)}.m_bffecc3e{display:flex;padding-top:calc(var(--cp-body-spacing) / 2)}.m_3283bb96{flex:1}.m_3283bb96:not(:only-child){margin-inline-end:var(--mantine-spacing-xs)}.m_40d572ba{overflow:hidden;position:absolute;box-shadow:0 0 1px #0009;border:2px solid var(--mantine-color-white);width:var(--cp-thumb-size);height:var(--cp-thumb-size);border-radius:var(--cp-thumb-size);left:calc(var(--thumb-x-offset) - var(--cp-thumb-size) / 2);top:calc(var(--thumb-y-offset) - var(--cp-thumb-size) / 2)}.m_d8ee6fd8{height:unset!important;width:unset!important;min-width:0!important;min-height:0!important;margin:calc(.125rem * var(--mantine-scale));cursor:pointer;padding-bottom:calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)));flex:0 0 calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)))}.m_5711e686{margin-top:calc(.3125rem * var(--mantine-scale));margin-inline:calc(-.125rem * var(--mantine-scale));display:flex;flex-wrap:wrap}.m_5711e686:only-child{margin-top:0}.m_202a296e{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;position:relative;height:var(--cp-saturation-height);border-radius:var(--mantine-radius-sm);margin:calc(var(--cp-thumb-size) / 2)}.m_202a296e:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_202a296e:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_11b3db02{position:absolute;border-radius:var(--mantine-radius-sm);inset:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)))}.m_d856d47d{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-thumb-size: var(--cp-thumb-size, calc(.75rem * var(--mantine-scale)));position:relative;height:calc(var(--cp-thumb-size) + calc(.125rem * var(--mantine-scale)));margin-inline:calc(var(--cp-thumb-size) / 2);outline:none}.m_d856d47d+.m_d856d47d{margin-top:calc(.375rem * var(--mantine-scale))}.m_d856d47d:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_d856d47d:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}:where([data-mantine-color-scheme=light]) .m_d856d47d{--slider-checkers: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d856d47d{--slider-checkers: var(--mantine-color-dark-4)}.m_8f327113{position:absolute;top:0;bottom:0;inset-inline:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)));border-radius:10000rem}.m_b077c2bc{--ci-eye-dropper-icon-size-xs: calc(.875rem * var(--mantine-scale));--ci-eye-dropper-icon-size-sm: calc(1rem * var(--mantine-scale));--ci-eye-dropper-icon-size-md: calc(1.125rem * var(--mantine-scale));--ci-eye-dropper-icon-size-lg: calc(1.25rem * var(--mantine-scale));--ci-eye-dropper-icon-size-xl: calc(1.375rem * var(--mantine-scale));--ci-eye-dropper-icon-size: var(--ci-eye-dropper-icon-size-sm)}.m_66a028b5{--ci-button-size-xs: calc(1.375rem * var(--mantine-scale));--ci-button-size-sm: calc(1.625rem * var(--mantine-scale));--ci-button-size-md: calc(1.75rem * var(--mantine-scale));--ci-button-size-lg: calc(2rem * var(--mantine-scale));--ci-button-size-xl: calc(2.5rem * var(--mantine-scale));--ci-button-size: var(--ci-button-size-sm);width:var(--ci-button-size);height:var(--ci-button-size);min-width:var(--ci-button-size);min-height:var(--ci-button-size)}.m_c5ccdcab{--ci-preview-size-xs: calc(1rem * var(--mantine-scale));--ci-preview-size-sm: calc(1.125rem * var(--mantine-scale));--ci-preview-size-md: calc(1.375rem * var(--mantine-scale));--ci-preview-size-lg: calc(1.75rem * var(--mantine-scale));--ci-preview-size-xl: calc(2.25rem * var(--mantine-scale));--ci-preview-size: var(--ci-preview-size-sm)}.m_5ece2cd7{padding:calc(.5rem * var(--mantine-scale))}.m_7485cace{--container-size-xs: calc(33.75rem * var(--mantine-scale));--container-size-sm: calc(45rem * var(--mantine-scale));--container-size-md: calc(60rem * var(--mantine-scale));--container-size-lg: calc(71.25rem * var(--mantine-scale));--container-size-xl: calc(82.5rem * var(--mantine-scale));--container-size: var(--container-size-md)}.m_7485cace:where([data-strategy=block]){max-width:var(--container-size);padding-inline:var(--mantine-spacing-md);margin-inline:auto}.m_7485cace:where([data-strategy=block]):where([data-fluid]){max-width:100%}.m_7485cace:where([data-strategy=grid]){display:grid;grid-template-columns:1fr min(100%,var(--container-size)) 1fr;margin-inline:auto}.m_7485cace:where([data-strategy=grid])>*{grid-column:2}.m_7485cace:where([data-strategy=grid])>[data-breakout]{grid-column:1 / -1}.m_7485cace:where([data-strategy=grid])>[data-breakout]>[data-container]{max-width:var(--container-size);margin-inline:auto}.m_e2125a27{--dialog-size-xs: calc(10rem * var(--mantine-scale));--dialog-size-sm: calc(12.5rem * var(--mantine-scale));--dialog-size-md: calc(21.25rem * var(--mantine-scale));--dialog-size-lg: calc(25rem * var(--mantine-scale));--dialog-size-xl: calc(31.25rem * var(--mantine-scale));--dialog-size: var(--dialog-size-md);position:relative;width:var(--dialog-size);max-width:calc(100vw - var(--mantine-spacing-xl) * 2);min-height:calc(3.125rem * var(--mantine-scale))}.m_5abab665{position:absolute;top:calc(var(--mantine-spacing-md) / 2);inset-inline-end:calc(var(--mantine-spacing-md) / 2)}.m_3eebeb36{--divider-size-xs: calc(.0625rem * var(--mantine-scale));--divider-size-sm: calc(.125rem * var(--mantine-scale));--divider-size-md: calc(.1875rem * var(--mantine-scale));--divider-size-lg: calc(.25rem * var(--mantine-scale));--divider-size-xl: calc(.3125rem * var(--mantine-scale));--divider-size: var(--divider-size-xs)}:where([data-mantine-color-scheme=light]) .m_3eebeb36{--divider-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3eebeb36{--divider-color: var(--mantine-color-dark-4)}.m_3eebeb36:where([data-orientation=horizontal]){border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color)}.m_3eebeb36:where([data-orientation=vertical]){border-inline-start:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);height:auto;align-self:stretch}.m_3eebeb36:where([data-with-label]){border:0}.m_9e365f20{display:flex;align-items:center;font-size:var(--mantine-font-size-xs);color:var(--mantine-color-dimmed);white-space:nowrap}.m_9e365f20:where([data-position=left]):before{display:none}.m_9e365f20:where([data-position=right]):after{display:none}.m_9e365f20:before{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-end:var(--mantine-spacing-xs)}.m_9e365f20:after{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-start:var(--mantine-spacing-xs)}.m_f11b401e{--drawer-size-xs: calc(20rem * var(--mantine-scale));--drawer-size-sm: calc(23.75rem * var(--mantine-scale));--drawer-size-md: calc(27.5rem * var(--mantine-scale));--drawer-size-lg: calc(38.75rem * var(--mantine-scale));--drawer-size-xl: calc(48.75rem * var(--mantine-scale));--drawer-size: var(--drawer-size-md);--drawer-offset: 0rem}.m_5a7c2c9{z-index:1000}.m_b8a05bbd{flex:var(--drawer-flex, 0 0 var(--drawer-size));height:var(--drawer-height, calc(100% - var(--drawer-offset) * 2));margin:var(--drawer-offset);max-width:calc(100% - var(--drawer-offset) * 2);max-height:calc(100% - var(--drawer-offset) * 2);overflow-y:auto}.m_b8a05bbd[data-hidden]{opacity:0!important;pointer-events:none}.m_31cd769a{display:flex;justify-content:var(--drawer-justify, flex-start);align-items:var(--drawer-align, flex-start)}.m_e9408a47{padding:var(--mantine-spacing-lg);padding-top:var(--mantine-spacing-xs);border-radius:var(--fieldset-radius, var(--mantine-radius-default));min-inline-size:auto}.m_84c9523a{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_84c9523a{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_84c9523a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-7)}.m_ef274e49{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_ef274e49{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_ef274e49{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_eda993d3{padding:0;border:0;border-radius:0}.m_90794832{font-size:var(--mantine-font-size-sm)}.m_74ca27fe{padding:0;margin-bottom:var(--mantine-spacing-sm)}.m_8478a6da{container:mantine-grid / inline-size}.m_410352e9{--grid-overflow: visible;--grid-margin: calc(var(--grid-gutter) / -2);--grid-col-padding: calc(var(--grid-gutter) / 2);overflow:var(--grid-overflow)}.m_dee7bd2f{width:calc(100% + var(--grid-gutter));display:flex;flex-wrap:wrap;justify-content:var(--grid-justify);align-items:var(--grid-align);margin:var(--grid-margin)}.m_96bdd299{--col-flex-grow: 0;--col-offset: 0rem;flex-shrink:0;order:var(--col-order);flex-basis:var(--col-flex-basis);width:var(--col-width);max-width:var(--col-max-width);flex-grow:var(--col-flex-grow);margin-inline-start:var(--col-offset);padding:var(--grid-col-padding)}.m_bcb3f3c2{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=light]) .m_bcb3f3c2{background-color:var(--mark-bg-light)}:where([data-mantine-color-scheme=dark]) .m_bcb3f3c2{background-color:var(--mark-bg-dark)}.m_9e117634{display:block;object-fit:var(--image-object-fit, cover);width:100%;border-radius:var(--image-radius, 0)}@keyframes m_885901b1{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(2.8)}}.m_e5262200{--indicator-size: calc(.625rem * var(--mantine-scale));--indicator-color: var(--mantine-primary-color-filled);position:relative;display:block}.m_e5262200:where([data-inline]){display:inline-block}.m_760d1fb1{position:absolute;top:var(--indicator-top);left:var(--indicator-left);right:var(--indicator-right);bottom:var(--indicator-bottom);transform:translate(var(--indicator-translate-x),var(--indicator-translate-y));min-width:var(--indicator-size);height:var(--indicator-size);border-radius:var(--indicator-radius, 1000rem);z-index:var(--indicator-z-index, 200);display:flex;align-items:center;justify-content:center;font-size:var(--mantine-font-size-xs);background-color:var(--indicator-color);color:var(--indicator-text-color, var(--mantine-color-white));white-space:nowrap}.m_760d1fb1:before{content:"";position:absolute;inset:0;background-color:var(--indicator-color);border-radius:var(--indicator-radius, 1000rem);z-index:-1}.m_760d1fb1:where([data-with-label]){padding-inline:calc(var(--mantine-spacing-xs) / 2)}.m_760d1fb1:where([data-with-border]){border:2px solid var(--mantine-color-body)}.m_760d1fb1[data-processing]:before{animation:m_885901b1 1s linear infinite}.m_dc6f14e2{--kbd-fz-xs: calc(.625rem * var(--mantine-scale));--kbd-fz-sm: calc(.75rem * var(--mantine-scale));--kbd-fz-md: calc(.875rem * var(--mantine-scale));--kbd-fz-lg: calc(1rem * var(--mantine-scale));--kbd-fz-xl: calc(1.25rem * var(--mantine-scale));--kbd-fz: var(--kbd-fz-sm);font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale));unicode-bidi:embed;text-align:center;padding:.12em .45em}:where([data-mantine-color-scheme=light]) .m_dc6f14e2{border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_dc6f14e2{border-color:var(--mantine-color-dark-4);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-6)}.m_abbac491{--list-fz: var(--mantine-font-size-md);--list-lh: var(--mantine-line-height-md);--list-marker-gap: var(--mantine-spacing-lg);list-style-position:outside;font-size:var(--list-fz);line-height:var(--list-lh);margin:0;padding:0;padding-inline-start:var(--list-marker-gap)}.m_abbac491[data-type=none]{--list-marker-gap: 0}.m_abbac491:where([data-with-padding]){padding-inline-start:calc(var(--list-marker-gap) + var(--mantine-spacing-md))}.m_abb6bec2{white-space:normal;line-height:var(--list-lh)}.m_abb6bec2:where([data-with-icon]){list-style:none}.m_abb6bec2:where([data-with-icon]) .m_75cd9f71{--li-direction: row;--li-align: center}.m_abb6bec2:where(:not(:first-of-type)){margin-top:var(--list-spacing, 0)}.m_abb6bec2:where([data-centered]){line-height:1}.m_75cd9f71{display:inline-flex;flex-direction:var(--li-direction, column);align-items:var(--li-align, flex-start);white-space:normal}.m_60f83e5b{display:inline-block;vertical-align:middle;margin-inline-end:var(--mantine-spacing-sm)}.m_6e45937b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden;z-index:var(--lo-z-index)}.m_e8eb006c{position:relative;z-index:calc(var(--lo-z-index) + 1)}.m_df587f17{z-index:var(--lo-z-index)}.m_dc9b7c9f{padding:calc(.25rem * var(--mantine-scale))}.m_9bfac126{color:var(--mantine-color-dimmed);font-weight:500;font-size:var(--mantine-font-size-xs);padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-sm);cursor:default}.m_efdf90cb{margin-top:calc(.25rem * var(--mantine-scale));margin-bottom:calc(.25rem * var(--mantine-scale));border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_efdf90cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_efdf90cb{border-color:var(--mantine-color-dark-4)}.m_99ac2aa1{font-size:var(--mantine-font-size-sm);width:100%;padding:calc(var(--mantine-spacing-xs) / 1.5) var(--mantine-spacing-sm);border-radius:var(--popover-radius, var(--mantine-radius-default));color:var(--menu-item-color, var(--mantine-color-text));display:flex;align-items:center;user-select:none}.m_99ac2aa1:where([data-disabled],:disabled){color:var(--mantine-color-disabled-color);opacity:.6;cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_99ac2aa1:where(:hover,:focus):where(:not(:disabled,[data-disabled])){background-color:var(--menu-item-hover, var(--mantine-color-gray-1))}:where([data-mantine-color-scheme=dark]) .m_99ac2aa1:where(:hover,:focus):where(:not(:disabled,[data-disabled])){background-color:var(--menu-item-hover, var(--mantine-color-dark-4))}.m_99ac2aa1:where([data-sub-menu-item]){padding-inline-end:calc(.3125rem * var(--mantine-scale))}.m_5476e0d3{flex:1}.m_8b75e504{display:flex;justify-content:center;align-items:center}.m_8b75e504:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_8b75e504:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_b85b0bed{transform:rotate(-90deg)}:where([dir=rtl]) .m_b85b0bed{transform:rotate(90deg)}.m_9df02822{--modal-size-xs: calc(20rem * var(--mantine-scale));--modal-size-sm: calc(23.75rem * var(--mantine-scale));--modal-size-md: calc(27.5rem * var(--mantine-scale));--modal-size-lg: calc(38.75rem * var(--mantine-scale));--modal-size-xl: calc(48.75rem * var(--mantine-scale));--modal-size: var(--modal-size-md);--modal-y-offset: 5dvh;--modal-x-offset: 5vw}.m_9df02822[data-full-screen]{--modal-border-radius: 0 !important}.m_9df02822[data-full-screen] .m_54c44539{--modal-content-flex: 0 0 100%;--modal-content-max-height: auto;--modal-content-height: 100dvh}.m_9df02822[data-full-screen] .m_1f958f16{--modal-inner-y-offset: 0;--modal-inner-x-offset: 0}.m_9df02822[data-centered] .m_1f958f16{--modal-inner-align: center}.m_d0e2b9cd{border-start-start-radius:var(--modal-radius, var(--mantine-radius-default));border-start-end-radius:var(--modal-radius, var(--mantine-radius-default))}.m_54c44539{flex:var(--modal-content-flex, 0 0 var(--modal-size));max-width:100%;max-height:var(--modal-content-max-height, calc(100dvh - var(--modal-y-offset) * 2));height:var(--modal-content-height, auto);overflow-y:auto}.m_54c44539[data-full-screen]{border-radius:0}.m_54c44539[data-hidden]{opacity:0!important;pointer-events:none}.m_1f958f16{display:flex;justify-content:center;align-items:var(--modal-inner-align, flex-start);padding-top:var(--modal-inner-y-offset, var(--modal-y-offset));padding-bottom:var(--modal-inner-y-offset, var(--modal-y-offset));padding-inline:var(--modal-inner-x-offset, var(--modal-x-offset))}.m_7cda1cd6{--pill-fz-xs: calc(.625rem * var(--mantine-scale));--pill-fz-sm: calc(.75rem * var(--mantine-scale));--pill-fz-md: calc(.875rem * var(--mantine-scale));--pill-fz-lg: calc(1rem * var(--mantine-scale));--pill-fz-xl: calc(1.125rem * var(--mantine-scale));--pill-height-xs: calc(1.125rem * var(--mantine-scale));--pill-height-sm: calc(1.375rem * var(--mantine-scale));--pill-height-md: calc(1.5625rem * var(--mantine-scale));--pill-height-lg: calc(1.75rem * var(--mantine-scale));--pill-height-xl: calc(2rem * var(--mantine-scale));--pill-fz: var(--pill-fz-sm);--pill-height: var(--pill-height-sm);font-size:var(--pill-fz);flex:0;height:var(--pill-height);padding-inline:.8em;display:inline-flex;align-items:center;border-radius:var(--pill-radius, 1000rem);line-height:1;white-space:nowrap;user-select:none;-webkit-user-select:none;max-width:100%}:where([data-mantine-color-scheme=dark]) .m_7cda1cd6{background-color:var(--mantine-color-dark-7);color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_7cda1cd6{color:var(--mantine-color-black)}.m_7cda1cd6:where([data-with-remove]:not(:has(button:disabled))){padding-inline-end:0}.m_7cda1cd6:where([data-disabled],:has(button:disabled)){cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_44da308b{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=light]) .m_44da308b:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-disabled)}:where([data-mantine-color-scheme=light]) .m_e3a01f8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=light]) .m_e3a01f8:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-disabled)}.m_1e0e6180{cursor:inherit;overflow:hidden;height:100%;line-height:var(--pill-height);text-overflow:ellipsis}.m_ae386778{color:inherit;font-size:inherit;height:100%;min-height:unset;min-width:2em;width:unset;border-radius:0;padding-inline-start:.1em;padding-inline-end:.3em;flex:0;border-end-end-radius:var(--pill-radius, 50%);border-start-end-radius:var(--pill-radius, 50%)}.m_7cda1cd6[data-disabled]>.m_ae386778,.m_ae386778:disabled{display:none;background-color:transparent;width:.8em;min-width:.8em;padding:0;cursor:not-allowed}.m_7cda1cd6[data-disabled]>.m_ae386778>svg,.m_ae386778:disabled>svg{display:none}.m_ae386778>svg{pointer-events:none}.m_1dcfd90b{--pg-gap-xs: calc(.375rem * var(--mantine-scale));--pg-gap-sm: calc(.5rem * var(--mantine-scale));--pg-gap-md: calc(.625rem * var(--mantine-scale));--pg-gap-lg: calc(.75rem * var(--mantine-scale));--pg-gap-xl: calc(.75rem * var(--mantine-scale));--pg-gap: var(--pg-gap-sm);display:flex;align-items:center;gap:var(--pg-gap);flex-wrap:wrap}.m_45c4369d{background-color:transparent;appearance:none;min-width:calc(6.25rem * var(--mantine-scale));flex:1;border:0;font-size:inherit;height:1.6em;color:inherit;padding:0}.m_45c4369d::placeholder{color:var(--input-placeholder-color);opacity:1}.m_45c4369d:where([data-type=hidden],[data-type=auto]){height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));top:0;left:0;pointer-events:none;position:absolute;opacity:0}.m_45c4369d:focus{outline:none}.m_45c4369d:where([data-type=auto]:focus){height:1.6em;visibility:visible;opacity:1;position:static}.m_45c4369d:where([data-pointer]:not([data-disabled],:disabled)){cursor:pointer}.m_45c4369d:where([data-disabled],:disabled){cursor:not-allowed}.m_f0824112{--nl-bg: var(--mantine-primary-color-light);--nl-hover: var(--mantine-primary-color-light-hover);--nl-color: var(--mantine-primary-color-light-color);display:flex;align-items:center;width:100%;padding:8px var(--mantine-spacing-sm);user-select:none}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_f0824112:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:hover{background-color:var(--mantine-color-dark-6)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_f0824112:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:active{background-color:var(--mantine-color-dark-6)}}.m_f0824112:where([data-disabled]){opacity:.4;pointer-events:none}.m_f0824112:where([data-active],[aria-current=page]){background-color:var(--nl-bg);color:var(--nl-color)}@media(hover:hover){.m_f0824112:where([data-active],[aria-current=page]):hover{background-color:var(--nl-hover)}}@media(hover:none){.m_f0824112:where([data-active],[aria-current=page]):active{background-color:var(--nl-hover)}}.m_f0824112:where([data-active],[aria-current=page]) .m_57492dcc{--description-opacity: .9;--description-color: var(--nl-color)}.m_690090b5{display:flex;align-items:center;justify-content:center;transition:transform .15s ease}.m_690090b5>svg{display:block}.m_690090b5:where([data-position=left]){margin-inline-end:var(--mantine-spacing-sm)}.m_690090b5:where([data-position=right]){margin-inline-start:var(--mantine-spacing-sm)}.m_690090b5:where([data-rotate]){transform:rotate(90deg)}.m_1f6ac4c4{font-size:var(--mantine-font-size-sm)}.m_f07af9d2{flex:1;overflow:hidden;text-overflow:ellipsis}.m_f07af9d2:where([data-no-wrap]){white-space:nowrap}.m_57492dcc{display:block;font-size:var(--mantine-font-size-xs);opacity:var(--description-opacity, 1);color:var(--description-color, var(--mantine-color-dimmed));overflow:hidden;text-overflow:ellipsis}:where([data-no-wrap]) .m_57492dcc{white-space:nowrap}.m_e17b862f{padding-inline-start:var(--nl-offset, var(--mantine-spacing-lg))}.m_1fd8a00b{transform:rotate(-90deg)}.m_a513464{--notification-radius: var(--mantine-radius-default);--notification-color: var(--mantine-primary-color-filled);overflow:hidden;box-sizing:border-box;position:relative;display:flex;align-items:center;padding-inline-start:calc(1.375rem * var(--mantine-scale));padding-inline-end:var(--mantine-spacing-xs);padding-top:var(--mantine-spacing-xs);padding-bottom:var(--mantine-spacing-xs);border-radius:var(--notification-radius);box-shadow:var(--mantine-shadow-lg)}.m_a513464:before{content:"";display:block;position:absolute;width:calc(.375rem * var(--mantine-scale));top:var(--notification-radius);bottom:var(--notification-radius);inset-inline-start:calc(.25rem * var(--mantine-scale));border-radius:var(--notification-radius);background-color:var(--notification-color)}:where([data-mantine-color-scheme=light]) .m_a513464{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_a513464{background-color:var(--mantine-color-dark-6)}.m_a513464:where([data-with-icon]):before{display:none}:where([data-mantine-color-scheme=light]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-dark-4)}.m_a4ceffb{box-sizing:border-box;margin-inline-end:var(--mantine-spacing-md);width:calc(1.75rem * var(--mantine-scale));height:calc(1.75rem * var(--mantine-scale));border-radius:calc(1.75rem * var(--mantine-scale));display:flex;align-items:center;justify-content:center;background-color:var(--notification-color);color:var(--mantine-color-white)}.m_b0920b15{margin-inline-end:var(--mantine-spacing-md)}.m_a49ed24{flex:1;overflow:hidden;margin-inline-end:var(--mantine-spacing-xs)}.m_3feedf16{margin-bottom:calc(.125rem * var(--mantine-scale));overflow:hidden;text-overflow:ellipsis;font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);font-weight:500}:where([data-mantine-color-scheme=light]) .m_3feedf16{color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_3feedf16{color:var(--mantine-color-white)}.m_3d733a3a{font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);overflow:hidden;text-overflow:ellipsis}:where([data-mantine-color-scheme=light]) .m_3d733a3a{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a{color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-dark-2)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_919a4d88:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:hover{background-color:var(--mantine-color-dark-8)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_919a4d88:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:active{background-color:var(--mantine-color-dark-8)}}.m_e2f5cd4e{--ni-right-section-width-xs: calc(1.0625rem * var(--mantine-scale));--ni-right-section-width-sm: calc(1.5rem * var(--mantine-scale));--ni-right-section-width-md: calc(1.6875rem * var(--mantine-scale));--ni-right-section-width-lg: calc(1.9375rem * var(--mantine-scale));--ni-right-section-width-xl: calc(2.125rem * var(--mantine-scale))}.m_95e17d22{--ni-chevron-size-xs: calc(.625rem * var(--mantine-scale));--ni-chevron-size-sm: calc(.875rem * var(--mantine-scale));--ni-chevron-size-md: calc(1rem * var(--mantine-scale));--ni-chevron-size-lg: calc(1.125rem * var(--mantine-scale));--ni-chevron-size-xl: calc(1.25rem * var(--mantine-scale));--ni-chevron-size: var(--ni-chevron-size-sm);display:flex;flex-direction:column;width:100%;height:calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));max-width:calc(var(--ni-chevron-size) * 1.7);margin-inline-start:auto}.m_80b4b171{--control-border: 1px solid var(--input-bd);--control-radius: calc(var(--input-radius) - calc(.0625rem * var(--mantine-scale)));flex:0 0 50%;width:100%;padding:0;height:calc(var(--input-height) / 2 - calc(.0625rem * var(--mantine-scale)));border-inline-start:var(--control-border);display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text);background-color:transparent;cursor:pointer}.m_80b4b171:where(:disabled){background-color:transparent;cursor:not-allowed;opacity:.6;color:var(--mantine-color-disabled-color)}.m_e2f5cd4e[data-error] :where(.m_80b4b171){color:var(--mantine-color-error)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_80b4b171:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:hover{background-color:var(--mantine-color-dark-4)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_80b4b171:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:active{background-color:var(--mantine-color-dark-4)}}.m_80b4b171:where(:first-of-type){border-radius:0;border-start-end-radius:var(--control-radius)}.m_80b4b171:last-of-type{border-radius:0;border-end-end-radius:var(--control-radius)}.m_4addd315{--pagination-control-size-xs: calc(1.375rem * var(--mantine-scale));--pagination-control-size-sm: calc(1.625rem * var(--mantine-scale));--pagination-control-size-md: calc(2rem * var(--mantine-scale));--pagination-control-size-lg: calc(2.375rem * var(--mantine-scale));--pagination-control-size-xl: calc(2.75rem * var(--mantine-scale));--pagination-control-size: var(--pagination-control-size-md);--pagination-control-fz: var(--mantine-font-size-md);--pagination-active-bg: var(--mantine-primary-color-filled)}.m_326d024a{display:flex;align-items:center;justify-content:center;border:calc(.0625rem * var(--mantine-scale)) solid;cursor:pointer;color:var(--mantine-color-text);height:var(--pagination-control-size);min-width:var(--pagination-control-size);font-size:var(--pagination-control-fz);line-height:1;border-radius:var(--pagination-control-radius, var(--mantine-radius-default))}.m_326d024a:where([data-with-padding]){padding:calc(var(--pagination-control-size) / 4)}.m_326d024a:where(:disabled,[data-disabled]){cursor:not-allowed;opacity:.4}:where([data-mantine-color-scheme=light]) .m_326d024a{border-color:var(--mantine-color-gray-4);background-color:var(--mantine-color-white)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}:where([data-mantine-color-scheme=dark]) .m_326d024a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}@media(hover:hover){:where([data-mantine-color-scheme=dark]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=dark]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}.m_326d024a:where([data-active]){background-color:var(--pagination-active-bg);border-color:var(--pagination-active-bg);color:var(--pagination-active-color, var(--mantine-color-white))}@media(hover:hover){.m_326d024a:where([data-active]):hover{background-color:var(--pagination-active-bg)}}@media(hover:none){.m_326d024a:where([data-active]):active{background-color:var(--pagination-active-bg)}}.m_4ad7767d{height:var(--pagination-control-size);min-width:var(--pagination-control-size);display:flex;align-items:center;justify-content:center;pointer-events:none}.m_f61ca620{--psi-button-size-xs: calc(1.375rem * var(--mantine-scale));--psi-button-size-sm: calc(1.625rem * var(--mantine-scale));--psi-button-size-md: calc(1.75rem * var(--mantine-scale));--psi-button-size-lg: calc(2rem * var(--mantine-scale));--psi-button-size-xl: calc(2.5rem * var(--mantine-scale));--psi-icon-size-xs: calc(.75rem * var(--mantine-scale));--psi-icon-size-sm: calc(.9375rem * var(--mantine-scale));--psi-icon-size-md: calc(1.0625rem * var(--mantine-scale));--psi-icon-size-lg: calc(1.1875rem * var(--mantine-scale));--psi-icon-size-xl: calc(1.3125rem * var(--mantine-scale));--psi-button-size: var(--psi-button-size-sm);--psi-icon-size: var(--psi-icon-size-sm)}.m_ccf8da4c{position:relative;overflow:hidden}.m_f2d85dd2{font-family:var(--mantine-font-family);background-color:transparent;border:0;padding-inline-end:var(--input-padding-inline-end);padding-inline-start:var(--input-padding-inline-start);position:absolute;inset:0;outline:0;font-size:inherit;line-height:var(--mantine-line-height);height:100%;width:100%;color:inherit}.m_ccf8da4c[data-disabled] .m_f2d85dd2,.m_f2d85dd2:disabled{cursor:not-allowed}.m_f2d85dd2::placeholder{color:var(--input-placeholder-color);opacity:1}.m_f2d85dd2::-ms-reveal{display:none}.m_b1072d44{width:var(--psi-button-size);height:var(--psi-button-size);min-width:var(--psi-button-size);min-height:var(--psi-button-size)}.m_b1072d44:disabled{display:none}.m_f1cb205a{--pin-input-size-xs: calc(1.875rem * var(--mantine-scale));--pin-input-size-sm: calc(2.25rem * var(--mantine-scale));--pin-input-size-md: calc(2.625rem * var(--mantine-scale));--pin-input-size-lg: calc(3.125rem * var(--mantine-scale));--pin-input-size-xl: calc(3.75rem * var(--mantine-scale));--pin-input-size: var(--pin-input-size-sm)}.m_cb288ead{width:var(--pin-input-size);height:var(--pin-input-size)}@keyframes m_81a374bd{0%{background-position:0 0}to{background-position:calc(2.5rem * var(--mantine-scale)) 0}}@keyframes m_e0fb7a86{0%{background-position:0 0}to{background-position:0 calc(2.5rem * var(--mantine-scale))}}.m_db6d6462{--progress-radius: var(--mantine-radius-default);--progress-size: var(--progress-size-md);--progress-size-xs: calc(.1875rem * var(--mantine-scale));--progress-size-sm: calc(.3125rem * var(--mantine-scale));--progress-size-md: calc(.5rem * var(--mantine-scale));--progress-size-lg: calc(.75rem * var(--mantine-scale));--progress-size-xl: calc(1rem * var(--mantine-scale));position:relative;height:var(--progress-size);border-radius:var(--progress-radius);overflow:hidden;display:flex}:where([data-mantine-color-scheme=light]) .m_db6d6462{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_db6d6462{background-color:var(--mantine-color-dark-4)}.m_db6d6462:where([data-orientation=vertical]){height:auto;width:var(--progress-size);flex-direction:column-reverse}.m_2242eb65{background-color:var(--progress-section-color);height:100%;width:var(--progress-section-size);display:flex;align-items:center;justify-content:center;overflow:hidden;background-size:calc(1.25rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));transition:width var(--progress-transition-duration, .1s) ease}.m_2242eb65:where([data-striped]){background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.m_2242eb65:where([data-animated]){animation:m_81a374bd 1s linear infinite}.m_2242eb65:where(:last-of-type){border-radius:0;border-start-end-radius:var(--progress-radius);border-end-end-radius:var(--progress-radius)}.m_2242eb65:where(:first-of-type){border-radius:0;border-start-start-radius:var(--progress-radius);border-end-start-radius:var(--progress-radius)}.m_db6d6462:where([data-orientation=vertical]) .m_2242eb65{width:100%;height:var(--progress-section-size);transition:height var(--progress-transition-duration, .1s) ease}.m_db6d6462:where([data-orientation=vertical]) .m_2242eb65:where([data-striped]){background-image:linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.m_db6d6462:where([data-orientation=vertical]) .m_2242eb65:where([data-animated]){animation:m_e0fb7a86 1s linear infinite}.m_db6d6462:where([data-orientation=vertical]) .m_2242eb65:where(:last-of-type){border-radius:0;border-start-start-radius:var(--progress-radius);border-start-end-radius:var(--progress-radius)}.m_db6d6462:where([data-orientation=vertical]) .m_2242eb65:where(:first-of-type){border-radius:0;border-end-start-radius:var(--progress-radius);border-end-end-radius:var(--progress-radius)}.m_91e40b74{color:var(--progress-label-color, var(--mantine-color-white));font-weight:700;user-select:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:min(calc(var(--progress-size) * .65),calc(1.125rem * var(--mantine-scale)));line-height:1;padding-inline:calc(.25rem * var(--mantine-scale))}.m_db6d6462:where([data-orientation=vertical]) .m_91e40b74{writing-mode:vertical-rl}.m_9dc8ae12{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_9dc8ae12 :where(*){cursor:inherit}.m_9dc8ae12:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_717d7ff6{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-size: var(--radio-size-sm);--radio-color: var(--mantine-primary-color-filled);--radio-icon-color: var(--mantine-color-white);position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--radio-size);min-width:var(--radio-size);height:var(--radio-size);min-height:var(--radio-size);border-radius:var(--radio-radius, 10000px);transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_717d7ff6{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_717d7ff6{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_717d7ff6[data-indeterminate],.m_717d7ff6[data-checked]{background-color:var(--radio-color);border-color:var(--radio-color)}.m_717d7ff6[data-indeterminate]>.m_3e4da632,.m_717d7ff6[data-checked]>.m_3e4da632{opacity:1;transform:none;color:var(--radio-icon-color)}.m_717d7ff6[data-disabled]{cursor:not-allowed;background-color:var(--mantine-color-disabled);border-color:var(--mantine-color-disabled-border)}.m_717d7ff6[data-disabled][data-checked]>.m_3e4da632{color:var(--mantine-color-disabled-color)}.m_2980836c[data-indeterminate]:not([data-disabled]),.m_2980836c[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--radio-color)}.m_2980836c[data-indeterminate]:not([data-disabled])>.m_3e4da632,.m_2980836c[data-checked]:not([data-disabled])>.m_3e4da632{color:var(--radio-color);opacity:1;transform:none}.m_3e4da632{display:block;width:var(--radio-icon-size);height:var(--radio-icon-size);color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_f3f1af94{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-size: var(--radio-size-sm);--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-icon-color: var(--mantine-color-white)}.m_89c4f5e4{position:relative;width:var(--radio-size);height:var(--radio-size);order:1}.m_89c4f5e4:where([data-label-position=left]){order:2}.m_f3ed6b2b{color:var(--radio-icon-color);opacity:var(--radio-icon-opacity, 0);transform:var(--radio-icon-transform, scale(.2) translateY(calc(.625rem * var(--mantine-scale))));transition:opacity .1s ease,transform .2s ease;pointer-events:none;width:var(--radio-icon-size);height:var(--radio-icon-size);position:absolute;top:calc(50% - var(--radio-icon-size) / 2);left:calc(50% - var(--radio-icon-size) / 2)}.m_8a3dbb89{border:calc(.0625rem * var(--mantine-scale)) solid;position:relative;appearance:none;width:var(--radio-size);height:var(--radio-size);border-radius:var(--radio-radius, var(--radio-size));margin:0;display:flex;align-items:center;justify-content:center;transition-property:background-color,border-color;transition-timing-function:ease;transition-duration:.1s;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_8a3dbb89{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_8a3dbb89{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_8a3dbb89:checked{background-color:var(--radio-color, var(--mantine-primary-color-filled));border-color:var(--radio-color, var(--mantine-primary-color-filled))}.m_8a3dbb89:checked+.m_f3ed6b2b{--radio-icon-opacity: 1;--radio-icon-transform: scale(1)}.m_8a3dbb89:disabled{cursor:not-allowed;background-color:var(--mantine-color-disabled);border-color:var(--mantine-color-disabled-border)}.m_8a3dbb89:disabled+.m_f3ed6b2b{--radio-icon-color: var(--mantine-color-disabled-color)}.m_8a3dbb89:where([data-error]){border-color:var(--mantine-color-error)}.m_1bfe9d39+.m_f3ed6b2b{--radio-icon-color: var(--radio-color)}.m_1bfe9d39:checked:not(:disabled){background-color:transparent;border-color:var(--radio-color)}.m_1bfe9d39:checked:not(:disabled)+.m_f3ed6b2b{--radio-icon-color: var(--radio-color);--radio-icon-opacity: 1;--radio-icon-transform: none}.m_f8d312f2{--rating-size-xs: calc(.875rem * var(--mantine-scale));--rating-size-sm: calc(1.125rem * var(--mantine-scale));--rating-size-md: calc(1.25rem * var(--mantine-scale));--rating-size-lg: calc(1.75rem * var(--mantine-scale));--rating-size-xl: calc(2rem * var(--mantine-scale));display:flex;width:max-content}.m_f8d312f2:where(:has(input:disabled)){pointer-events:none}.m_61734bb7{position:relative;transition:transform .1s ease}.m_61734bb7:where([data-active]){z-index:1;transform:scale(1.1)}.m_5662a89a{width:var(--rating-size);height:var(--rating-size);display:block}:where([data-mantine-color-scheme=light]) .m_5662a89a{fill:var(--mantine-color-gray-3);stroke:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_5662a89a{fill:var(--mantine-color-dark-3);stroke:var(--mantine-color-dark-3)}.m_5662a89a:where([data-filled]){fill:var(--rating-color);stroke:var(--rating-color)}.m_211007ba{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0;-webkit-tap-highlight-color:transparent}.m_211007ba:focus-visible+label{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_21342ee4{display:block;cursor:pointer;position:absolute;top:0;left:0;z-index:var(--rating-item-z-index, 0);-webkit-tap-highlight-color:transparent}.m_21342ee4:where([data-read-only]){cursor:default}.m_21342ee4:where(:last-of-type){position:relative}.m_fae05d6a{clip-path:var(--rating-symbol-clip-path)}.m_1b3c8819{--tooltip-radius: var(--mantine-radius-default);position:absolute;padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-xs);pointer-events:none;font-size:var(--mantine-font-size-sm);white-space:nowrap;border-radius:var(--tooltip-radius)}:where([data-mantine-color-scheme=light]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-9));color:var(--tooltip-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-2));color:var(--tooltip-color, var(--mantine-color-black))}.m_1b3c8819:where([data-multiline]){white-space:normal}.m_1b3c8819:where([data-fixed]){position:fixed}.m_f898399f{background-color:inherit;border:0;z-index:1}.m_b32e4812{position:relative;width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size);--rp-transition-duration: 0ms}.m_d43b5134{width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size);transform:rotate(-90deg)}.m_b1ca1fbf{stroke:var(--curve-color, var(--rp-curve-root-color));transition:stroke-dashoffset var(--rp-transition-duration) ease,stroke-dasharray var(--rp-transition-duration) ease,stroke var(--rp-transition-duration)}[data-mantine-color-scheme=light] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-dark-4)}.m_b23f9dc4{position:absolute;top:50%;transform:translateY(-50%);inset-inline:var(--rp-label-offset)}.m_cf365364{--sc-padding-xs: calc(.125rem * var(--mantine-scale)) calc(.375rem * var(--mantine-scale));--sc-padding-sm: calc(.1875rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--sc-padding-md: calc(.25rem * var(--mantine-scale)) calc(.875rem * var(--mantine-scale));--sc-padding-lg: calc(.4375rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--sc-padding-xl: calc(.625rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--sc-transition-duration: .2s;--sc-padding: var(--sc-padding-sm);--sc-transition-timing-function: ease;--sc-font-size: var(--mantine-font-size-sm);position:relative;display:inline-flex;flex-direction:row;width:auto;border-radius:var(--sc-radius, var(--mantine-radius-default));overflow:hidden;padding:calc(.25rem * var(--mantine-scale))}.m_cf365364:where([data-full-width]){display:flex}.m_cf365364:where([data-orientation=vertical]){display:flex;flex-direction:column;width:max-content}.m_cf365364:where([data-orientation=vertical]):where([data-full-width]){width:auto}:where([data-mantine-color-scheme=light]) .m_cf365364{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_cf365364{background-color:var(--mantine-color-dark-8)}.m_9e182ccd{position:absolute;display:block;z-index:1;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_9e182ccd{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_9e182ccd{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}.m_1738fcb2{-webkit-tap-highlight-color:transparent;font-weight:500;display:block;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none;border-radius:var(--sc-radius, var(--mantine-radius-default));font-size:var(--sc-font-size);padding:var(--sc-padding);transition:color var(--sc-transition-duration) var(--sc-transition-timing-function);cursor:pointer;outline:var(--segmented-control-outline, none)}:where([data-mantine-color-scheme=light]) .m_1738fcb2{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2{color:var(--mantine-color-dark-1)}.m_1738fcb2:where([data-read-only]){cursor:default}fieldset:disabled .m_1738fcb2,.m_1738fcb2:where([data-disabled]){cursor:not-allowed;color:var(--mantine-color-disabled-color)}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-black))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-white))}.m_cf365364:where([data-initialized]) .m_1738fcb2:where([data-active]):before{display:none}.m_1738fcb2:where([data-active]):before{content:"";inset:0;z-index:0;position:absolute;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]):before{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]):before{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-white)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-white)}}@media(hover:hover){fieldset:disabled .m_1738fcb2:hover{color:var(--mantine-color-disabled-color)!important}}@media(hover:none){fieldset:disabled .m_1738fcb2:active{color:var(--mantine-color-disabled-color)!important}}.m_1714d588{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0}.m_1714d588[data-focus-ring=auto]:focus:focus-visible+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_1714d588[data-focus-ring=always]:focus+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_69686b9b{position:relative;flex:1;z-index:2;transition:border-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_cf365364[data-with-items-borders] :where(.m_69686b9b):before{content:"";position:absolute;top:0;bottom:0;inset-inline-start:0;background-color:var(--separator-color);width:calc(.0625rem * var(--mantine-scale));transition:background-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_69686b9b[data-orientation=vertical]:before{top:0;inset-inline:0;bottom:auto;height:calc(.0625rem * var(--mantine-scale));width:auto}:where([data-mantine-color-scheme=light]) .m_69686b9b{--separator-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_69686b9b{--separator-color: var(--mantine-color-dark-4)}.m_69686b9b:first-of-type:before{--separator-color: transparent}[data-mantine-color-scheme] .m_69686b9b[data-active]:before,[data-mantine-color-scheme] .m_69686b9b[data-active]+.m_69686b9b:before{--separator-color: transparent}.m_78882f40{position:relative;z-index:2}.m_fa528724{--scp-filled-segment-color: var(--mantine-primary-color-filled);--scp-transition-duration: 0ms;--scp-thickness: calc(.625rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_fa528724{--scp-empty-segment-color: var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa528724{--scp-empty-segment-color: var(--mantine-color-dark-4)}.m_fa528724{position:relative;width:fit-content}.m_62e9e7e2{display:block;transform:var(--scp-rotation);overflow:hidden}.m_c573fb6f{transition:stroke-dashoffset var(--scp-transition-duration) ease,stroke-dasharray var(--scp-transition-duration) ease,stroke var(--scp-transition-duration)}.m_4fa340f2{position:absolute;margin:0;padding:0;inset-inline:0;text-align:center;z-index:1}.m_4fa340f2:where([data-position=bottom]){bottom:0;padding-inline:calc(var(--scp-thickness) * 2)}.m_4fa340f2:where([data-position=bottom]):where([data-orientation=down]){bottom:auto;top:0}.m_4fa340f2:where([data-position=center]){top:50%;padding-inline:calc(var(--scp-thickness) * 3)}.m_925c2d2c{container:simple-grid / inline-size}.m_2415a157{display:grid;grid-template-columns:repeat(var(--sg-cols),minmax(0,1fr));gap:var(--sg-spacing-y) var(--sg-spacing-x)}@keyframes m_299c329c{0%,to{opacity:.4}50%{opacity:1}}.m_18320242{height:var(--skeleton-height, auto);width:var(--skeleton-width, 100%);border-radius:var(--skeleton-radius, var(--mantine-radius-default));position:relative;transform:translateZ(0);-webkit-transform:translateZ(0)}.m_18320242:where([data-animate]):after{animation:m_299c329c 1.5s linear infinite}.m_18320242:where([data-visible]){overflow:hidden}.m_18320242:where([data-visible]):before{position:absolute;content:"";inset:0;z-index:10;background-color:var(--mantine-color-body)}.m_18320242:where([data-visible]):after{position:absolute;content:"";inset:0;z-index:11}:where([data-mantine-color-scheme=light]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-dark-4)}.m_dd36362e{--slider-size-xs: calc(.25rem * var(--mantine-scale));--slider-size-sm: calc(.375rem * var(--mantine-scale));--slider-size-md: calc(.5rem * var(--mantine-scale));--slider-size-lg: calc(.625rem * var(--mantine-scale));--slider-size-xl: calc(.75rem * var(--mantine-scale));--slider-size: var(--slider-size-md);--slider-radius: calc(62.5rem * var(--mantine-scale));--slider-color: var(--mantine-primary-color-filled);--slider-track-disabled-bg: var(--mantine-color-disabled);-webkit-tap-highlight-color:transparent;outline:none;height:calc(var(--slider-size) * 2);padding-inline:var(--slider-size);display:flex;flex-direction:column;align-items:center;touch-action:none;position:relative}[data-mantine-color-scheme=light] .m_dd36362e{--slider-track-bg: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_dd36362e{--slider-track-bg: var(--mantine-color-dark-4)}.m_c9357328{position:absolute;top:calc(-2.25rem * var(--mantine-scale));font-size:var(--mantine-font-size-xs);color:var(--mantine-color-white);padding:calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);white-space:nowrap;pointer-events:none;user-select:none;touch-action:none}:where([data-mantine-color-scheme=light]) .m_c9357328{background-color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_c9357328{background-color:var(--mantine-color-dark-4)}.m_c9a9a60a{position:absolute;display:flex;height:var(--slider-thumb-size);width:var(--slider-thumb-size);border:calc(.25rem * var(--mantine-scale)) solid;transform:translate(-50%,-50%);top:50%;cursor:pointer;border-radius:var(--slider-radius);align-items:center;justify-content:center;transition:box-shadow .1s ease,transform .1s ease;z-index:3;user-select:none;touch-action:none;outline-offset:calc(.125rem * var(--mantine-scale));left:var(--slider-thumb-offset)}:where([dir=rtl]) .m_c9a9a60a{left:auto;right:calc(var(--slider-thumb-offset) - var(--slider-thumb-size))}fieldset:disabled .m_c9a9a60a,.m_c9a9a60a:where([data-disabled]){display:none}.m_c9a9a60a:where([data-dragging]){transform:translate(-50%,-50%) scale(1.05);box-shadow:var(--mantine-shadow-sm)}:where([data-mantine-color-scheme=light]) .m_c9a9a60a{color:var(--slider-color);border-color:var(--slider-color);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_c9a9a60a{color:var(--mantine-color-white);border-color:var(--mantine-color-white);background-color:var(--slider-color)}.m_a8645c2{display:flex;align-items:center;width:100%;height:calc(var(--slider-size) * 2);cursor:pointer}fieldset:disabled .m_a8645c2,.m_a8645c2:where([data-disabled]){cursor:not-allowed}.m_c9ade57f{position:relative;width:100%;height:var(--slider-size)}.m_c9ade57f:where([data-inverted]:not([data-disabled])){--track-bg: var(--slider-color)}fieldset:disabled .m_c9ade57f:where([data-inverted]),.m_c9ade57f:where([data-inverted][data-disabled]){--track-bg: var(--slider-track-disabled-bg)}.m_c9ade57f:before{content:"";position:absolute;top:0;bottom:0;border-radius:var(--slider-radius);inset-inline:calc(var(--slider-size) * -1);background-color:var(--track-bg, var(--slider-track-bg));z-index:0}.m_38aeed47{position:absolute;z-index:1;top:0;bottom:0;background-color:var(--slider-color);border-radius:var(--slider-radius);width:var(--slider-bar-width);inset-inline-start:var(--slider-bar-offset)}.m_38aeed47:where([data-inverted]){background-color:var(--slider-track-bg)}fieldset:disabled .m_38aeed47:where(:not([data-inverted])),.m_38aeed47:where([data-disabled]:not([data-inverted])){background-color:var(--mantine-color-disabled-color)}.m_b7b0423a{position:absolute;inset-inline-start:calc(var(--mark-offset) - var(--slider-size) / 2);top:0;z-index:2;height:0;pointer-events:none}.m_dd33bc19{border:calc(.125rem * var(--mantine-scale)) solid;height:var(--slider-size);width:var(--slider-size);border-radius:calc(62.5rem * var(--mantine-scale));background-color:var(--mantine-color-white);pointer-events:none}:where([data-mantine-color-scheme=light]) .m_dd33bc19{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_dd33bc19{border-color:var(--mantine-color-dark-4)}.m_dd33bc19:where([data-filled]){border-color:var(--slider-color)}.m_dd33bc19:where([data-filled]):where([data-disabled]){border-color:var(--mantine-color-disabled-border)}.m_68c77a5b{transform:translate(calc(-50% + var(--slider-size) / 2),calc(var(--mantine-spacing-xs) / 2));font-size:var(--mantine-font-size-sm);white-space:nowrap;cursor:pointer;user-select:none}:where([data-mantine-color-scheme=light]) .m_68c77a5b{color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_68c77a5b{color:var(--mantine-color-dark-2)}.m_559cce2d{position:relative}.m_559cce2d:where([data-has-spoiler]){margin-bottom:calc(1.5rem * var(--mantine-scale))}.m_b912df4e{display:flex;flex-direction:column;overflow:hidden;transition:max-height var(--spoiler-transition-duration, .2s) ease}.m_b9131032{position:absolute;inset-inline-start:0;top:100%;height:calc(1.5rem * var(--mantine-scale))}.m_6d731127{display:flex;flex-direction:column;align-items:var(--stack-align, stretch);justify-content:var(--stack-justify, flex-start);gap:var(--stack-gap, var(--mantine-spacing-md))}.m_cbb4ea7e{--stepper-icon-size-xs: calc(2.125rem * var(--mantine-scale));--stepper-icon-size-sm: calc(2.25rem * var(--mantine-scale));--stepper-icon-size-md: calc(2.625rem * var(--mantine-scale));--stepper-icon-size-lg: calc(3rem * var(--mantine-scale));--stepper-icon-size-xl: calc(3.25rem * var(--mantine-scale));--stepper-icon-size: var(--stepper-icon-size-md);--stepper-color: var(--mantine-primary-color-filled);--stepper-content-padding: var(--mantine-spacing-md);--stepper-spacing: var(--mantine-spacing-md);--stepper-radius: calc(62.5rem * var(--mantine-scale));--stepper-fz: var(--mantine-font-size-md);--stepper-outline-thickness: calc(.125rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_cbb4ea7e{--stepper-outline-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_cbb4ea7e{--stepper-outline-color: var(--mantine-color-dark-5)}.m_aaf89d0b{display:flex;flex-wrap:nowrap;align-items:center}.m_aaf89d0b:where([data-wrap]){flex-wrap:wrap;gap:var(--mantine-spacing-md) 0}.m_aaf89d0b:where([data-orientation=vertical]){flex-direction:column}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=left]){align-items:flex-start}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=right]){align-items:flex-end}.m_aaf89d0b:where([data-orientation=horizontal]){flex-direction:row}.m_2a371ac9{transition:background-color .15s ease;flex:1;height:var(--stepper-outline-thickness);margin-inline:var(--mantine-spacing-md);background-color:var(--stepper-outline-color)}.m_2a371ac9:where([data-active]){background-color:var(--stepper-color)}.m_78da155d{padding-top:var(--stepper-content-padding)}.m_cbb57068{--step-color: var(--stepper-color);display:flex;cursor:default}.m_cbb57068:where([data-allow-click]){cursor:pointer}.m_cbb57068:where([data-icon-position=left]){flex-direction:row}.m_cbb57068:where([data-icon-position=right]){flex-direction:row-reverse}.m_f56b1e2c{align-items:center}.m_833edb7e{--separator-spacing: calc(var(--mantine-spacing-xs) / 2);justify-content:flex-start;min-height:calc(var(--stepper-icon-size) + var(--mantine-spacing-xl) + var(--separator-spacing));margin-top:var(--separator-spacing);overflow:hidden}.m_833edb7e:where(:first-of-type){margin-top:0}.m_833edb7e:where(:last-of-type){min-height:auto}.m_833edb7e:where(:last-of-type) .m_6496b3f3{display:none}.m_818e70b{position:relative}.m_6496b3f3{top:calc(var(--stepper-icon-size) + var(--separator-spacing));inset-inline-start:calc(var(--stepper-icon-size) / 2);height:100vh;position:absolute;border-inline-start:var(--stepper-outline-thickness) solid var(--stepper-outline-color)}.m_6496b3f3:where([data-active]){border-color:var(--stepper-color)}.m_1959ad01{height:var(--stepper-icon-size);width:var(--stepper-icon-size);min-height:var(--stepper-icon-size);min-width:var(--stepper-icon-size);border-radius:var(--stepper-radius);font-size:var(--stepper-fz);display:flex;align-items:center;justify-content:center;position:relative;font-weight:700;transition:background-color .15s ease,border-color .15s ease;border:var(--stepper-outline-thickness) solid var(--stepper-outline-color);background-color:var(--stepper-outline-color)}:where([data-mantine-color-scheme=light]) .m_1959ad01{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1959ad01{color:var(--mantine-color-dark-1)}.m_1959ad01:where([data-progress]){border-color:var(--step-color)}.m_1959ad01:where([data-completed]){color:var(--stepper-icon-color, var(--mantine-color-white));background-color:var(--step-color);border-color:var(--step-color)}.m_a79331dc{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--stepper-icon-color, var(--mantine-color-white))}.m_1956aa2a{display:flex;flex-direction:column}.m_1956aa2a:where([data-icon-position=left]){margin-inline-start:var(--mantine-spacing-sm)}.m_1956aa2a:where([data-icon-position=right]){text-align:right;margin-inline-end:var(--mantine-spacing-sm)}:where([dir=rtl]) .m_1956aa2a:where([data-icon-position=right]){text-align:left}.m_12051f6c{font-weight:500;font-size:var(--stepper-fz);line-height:1}.m_164eea74{margin-top:calc(var(--stepper-spacing) / 3);margin-bottom:calc(var(--stepper-spacing) / 3);font-size:calc(var(--stepper-fz) - calc(.125rem * var(--mantine-scale)));line-height:1;color:var(--mantine-color-dimmed)}.m_5f93f3bb{--switch-height-xs: calc(1rem * var(--mantine-scale));--switch-height-sm: calc(1.25rem * var(--mantine-scale));--switch-height-md: calc(1.5rem * var(--mantine-scale));--switch-height-lg: calc(1.875rem * var(--mantine-scale));--switch-height-xl: calc(2.25rem * var(--mantine-scale));--switch-width-xs: calc(2rem * var(--mantine-scale));--switch-width-sm: calc(2.375rem * var(--mantine-scale));--switch-width-md: calc(2.875rem * var(--mantine-scale));--switch-width-lg: calc(3.5rem * var(--mantine-scale));--switch-width-xl: calc(4.5rem * var(--mantine-scale));--switch-thumb-size-xs: calc(.75rem * var(--mantine-scale));--switch-thumb-size-sm: calc(.875rem * var(--mantine-scale));--switch-thumb-size-md: calc(1.125rem * var(--mantine-scale));--switch-thumb-size-lg: calc(1.375rem * var(--mantine-scale));--switch-thumb-size-xl: calc(1.75rem * var(--mantine-scale));--switch-label-font-size-xs: calc(.3125rem * var(--mantine-scale));--switch-label-font-size-sm: calc(.375rem * var(--mantine-scale));--switch-label-font-size-md: calc(.4375rem * var(--mantine-scale));--switch-label-font-size-lg: calc(.5625rem * var(--mantine-scale));--switch-label-font-size-xl: calc(.6875rem * var(--mantine-scale));--switch-track-label-padding-xs: calc(.125rem * var(--mantine-scale));--switch-track-label-padding-sm: calc(.15625rem * var(--mantine-scale));--switch-track-label-padding-md: calc(.1875rem * var(--mantine-scale));--switch-track-label-padding-lg: calc(.1875rem * var(--mantine-scale));--switch-track-label-padding-xl: calc(.21875rem * var(--mantine-scale));--switch-height: var(--switch-height-sm);--switch-width: var(--switch-width-sm);--switch-thumb-size: var(--switch-thumb-size-sm);--switch-label-font-size: var(--switch-label-font-size-sm);--switch-track-label-padding: var(--switch-track-label-padding-sm);--switch-radius: calc(62.5rem * var(--mantine-scale));--switch-color: var(--mantine-primary-color-filled);--switch-disabled-color: var(--mantine-color-disabled);position:relative}.m_926b4011{height:0;width:0;opacity:0;margin:0;padding:0;position:absolute;overflow:hidden;white-space:nowrap}.m_9307d992{-webkit-tap-highlight-color:transparent;cursor:var(--switch-cursor, var(--mantine-cursor-type));overflow:hidden;position:relative;border-radius:var(--switch-radius);background-color:var(--switch-bg);height:var(--switch-height);min-width:var(--switch-width);margin:0;transition:background-color .15s ease,border-color .15s ease;appearance:none;display:flex;align-items:center;font-size:var(--switch-label-font-size);font-weight:600;order:var(--switch-order, 1);user-select:none;z-index:0;line-height:0;color:var(--switch-text-color)}.m_9307d992:where([data-without-labels]){width:var(--switch-width)}.m_926b4011:focus-visible+.m_9307d992{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_926b4011:checked+.m_9307d992{--switch-bg: var(--switch-color);--switch-text-color: var(--mantine-color-white)}.m_926b4011:disabled+.m_9307d992,.m_926b4011[data-disabled]+.m_9307d992{--switch-bg: var(--switch-disabled-color);--switch-cursor: not-allowed}[data-mantine-color-scheme=light] .m_9307d992{--switch-bg: var(--mantine-color-gray-3);--switch-text-color: var(--mantine-color-gray-6)}[data-mantine-color-scheme=dark] .m_9307d992{--switch-bg: var(--mantine-color-dark-5);--switch-text-color: var(--mantine-color-dark-1)}.m_9307d992[data-label-position=left]{--switch-order: 2}.m_93039a1d{position:absolute;z-index:1;border-radius:var(--switch-radius);display:flex;background-color:var(--switch-thumb-bg, var(--mantine-color-white));height:var(--switch-thumb-size);width:var(--switch-thumb-size);inset-inline-start:var(--switch-thumb-start, var(--switch-track-label-padding));transition:inset-inline-start .15s ease}.m_93039a1d:where([data-with-thumb-indicator]):before{content:"";width:40%;height:40%;background-color:var(--switch-bg);position:absolute;border-radius:var(--switch-radius);top:50%;left:50%;transform:translate(-50%,-50%)}.m_93039a1d>*{margin:auto}.m_926b4011:checked+*>.m_93039a1d{--switch-thumb-start: calc(100% - var(--switch-thumb-size) - var(--switch-track-label-padding))}.m_926b4011:disabled+*>.m_93039a1d,.m_926b4011[data-disabled]+*>.m_93039a1d{--switch-thumb-bg: var(--switch-thumb-bg-disabled)}[data-mantine-color-scheme=light] .m_93039a1d{--switch-thumb-bg-disabled: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_93039a1d{--switch-thumb-bg-disabled: var(--mantine-color-dark-3)}.m_8277e082{height:100%;display:grid;place-content:center;min-width:calc(var(--switch-width) - var(--switch-thumb-size));padding-inline:var(--switch-track-label-padding);margin-inline-start:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));transition:margin .15s ease}.m_926b4011:checked+*>.m_8277e082{margin-inline-end:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));margin-inline-start:0}.m_b23fa0ef{width:100%;border-collapse:collapse;border-spacing:0;line-height:var(--mantine-line-height);font-size:var(--mantine-font-size-sm);table-layout:var(--table-layout, auto);caption-side:var(--table-caption-side, bottom);border:none}:where([data-mantine-color-scheme=light]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-gray-1);--table-striped-color: var(--mantine-color-gray-0);--table-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-dark-5);--table-striped-color: var(--mantine-color-dark-6);--table-border-color: var(--mantine-color-dark-4)}.m_b23fa0ef:where([data-with-table-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_b23fa0ef:where([data-tabular-nums]){font-variant-numeric:tabular-nums}.m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){font-weight:500}:where([data-mantine-color-scheme=light]) .m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_b23fa0ef:where([data-variant=vertical]) :where(.m_4e7aa4f3){background-color:var(--mantine-color-dark-6)}.m_4e7aa4f3{text-align:left}:where([dir=rtl]) .m_4e7aa4f3{text-align:right}.m_4e7aa4fd{border-bottom:none;background-color:transparent}@media(hover:hover){.m_4e7aa4fd:hover:where([data-hover]){background-color:var(--tr-hover-bg)}}@media(hover:none){.m_4e7aa4fd:active:where([data-hover]){background-color:var(--tr-hover-bg)}}.m_4e7aa4fd:where([data-with-row-border]){border-bottom:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_4e7aa4ef,.m_4e7aa4f3{padding:var(--table-vertical-spacing) var(--table-horizontal-spacing, var(--mantine-spacing-xs))}.m_4e7aa4ef:where([data-with-column-border]:not(:first-child)),.m_4e7aa4f3:where([data-with-column-border]:not(:first-child)){border-inline-start:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_4e7aa4ef:where([data-with-column-border]:not(:last-child)),.m_4e7aa4f3:where([data-with-column-border]:not(:last-child)){border-inline-end:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_b2404537>:where(tr):where([data-with-row-border]:last-of-type){border-bottom:none}.m_b2404537>:where(tr):where([data-striped=odd]:nth-of-type(odd)){background-color:var(--table-striped-color)}.m_b2404537>:where(tr):where([data-striped=even]:nth-of-type(2n)){background-color:var(--table-striped-color)}.m_b2404537>:where(tr)[data-hover]{--tr-hover-bg: var(--table-highlight-on-hover-color, var(--table-hover-color))}.m_b242d975{top:var(--table-sticky-header-offset, 0);z-index:3}.m_b242d975:where([data-sticky]){position:sticky}.m_b242d975:where([data-sticky]) :where(.m_4e7aa4f3){position:sticky;top:var(--table-sticky-header-offset, 0);background-color:var(--mantine-color-body)}:where([data-with-table-border]) .m_b242d975[data-sticky]{position:sticky;top:var(--table-sticky-header-offset, 0);z-index:4;border-top:none}:where([data-with-table-border]) .m_b242d975[data-sticky]:before{content:"";display:block;position:absolute;left:0;top:calc(-.03125rem * var(--mantine-scale));width:100%;height:calc(.0625rem * var(--mantine-scale));background-color:var(--table-border-color);z-index:5}:where([data-with-table-border]) .m_b242d975[data-sticky] .m_4e7aa4f3:first-child{border-top:none}.m_9e5a3ac7{color:var(--mantine-color-dimmed)}.m_9e5a3ac7:where([data-side=top]){margin-bottom:var(--mantine-spacing-xs)}.m_9e5a3ac7:where([data-side=bottom]){margin-top:var(--mantine-spacing-xs)}.m_a100c15{overflow-x:var(--table-overflow)}.m_62259741{min-width:var(--table-min-width);max-height:var(--table-max-height)}.m_bcaa9990{display:flex;flex-direction:column;--toc-depth-offset: .8em}.m_375a65ef{display:block;padding:.3em .8em;font-size:var(--toc-size, var(--mantine-font-size-md));border-radius:var(--toc-radius, var(--mantine-radius-default));padding-left:max(calc(var(--depth-offset) * var(--toc-depth-offset)),.8em)}@media(hover:hover){:where([data-mantine-color-scheme=light]) .m_375a65ef:where(:hover):where(:not([data-variant=none])){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_375a65ef:where(:hover):where(:not([data-variant=none])){background-color:var(--mantine-color-dark-5)}}@media(hover:none){:where([data-mantine-color-scheme=light]) .m_375a65ef:where(:active):where(:not([data-variant=none])){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_375a65ef:where(:active):where(:not([data-variant=none])){background-color:var(--mantine-color-dark-5)}}.m_375a65ef:where([data-active]){background-color:var(--toc-bg);color:var(--toc-color)}[data-mantine-color-scheme=light] .m_89d60db1{--tab-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89d60db1{--tab-border-color: var(--mantine-color-dark-4)}.m_89d60db1{display:var(--tabs-display);flex-direction:var(--tabs-flex-direction);--tabs-list-direction: row;--tabs-panel-grow: unset;--tabs-display: block;--tabs-flex-direction: row;--tabs-list-border-width: 0;--tabs-list-border-size: 0 0 var(--tabs-list-border-width) 0;--tabs-list-gap: unset;--tabs-list-line-bottom: 0;--tabs-list-line-top: unset;--tabs-list-line-start: 0;--tabs-list-line-end: 0;--tab-radius: var(--tabs-radius) var(--tabs-radius) 0 0;--tab-border-width: 0 0 var(--tabs-list-border-width) 0}.m_89d60db1[data-inverted]{--tabs-list-line-bottom: unset;--tabs-list-line-top: 0;--tab-radius: 0 0 var(--tabs-radius) var(--tabs-radius);--tab-border-width: var(--tabs-list-border-width) 0 0 0}.m_89d60db1[data-inverted] .m_576c9d4:before{top:0;bottom:unset}.m_89d60db1[data-orientation=vertical]{--tabs-list-line-start: unset;--tabs-list-line-end: 0;--tabs-list-line-top: 0;--tabs-list-line-bottom: 0;--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius);--tabs-list-direction: column;--tabs-panel-grow: 1;--tabs-display: flex}[dir=rtl] .m_89d60db1[data-orientation=vertical]{--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}.m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-flex-direction: row-reverse;--tabs-list-line-start: 0;--tabs-list-line-end: unset;--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}[dir=rtl] .m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius)}.m_89d60db1[data-variant=default]{--tabs-list-border-width: calc(.125rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d60db1[data-variant=outline]{--tabs-list-border-width: calc(.0625rem * var(--mantine-scale))}.m_89d60db1[data-variant=pills]{--tabs-list-gap: calc(var(--mantine-spacing-sm) / 2)}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d33d6d{display:flex;flex-wrap:wrap;justify-content:var(--tabs-justify, flex-start);flex-direction:var(--tabs-list-direction);gap:var(--tabs-list-gap)}.m_89d33d6d:where([data-grow]) .m_4ec4dce6{flex:1}.m_b0c91715{flex-grow:var(--tabs-panel-grow)}.m_4ec4dce6{position:relative;padding:var(--mantine-spacing-xs) var(--mantine-spacing-md);font-size:var(--mantine-font-size-sm);white-space:nowrap;z-index:0;display:flex;align-items:center;line-height:1;user-select:none}.m_4ec4dce6:where(:disabled,[data-disabled]){opacity:.5;cursor:not-allowed}.m_4ec4dce6:focus{z-index:1}.m_fc420b1f{display:flex;align-items:center;justify-content:center}.m_fc420b1f:where([data-position=left]:not(:only-child)){margin-inline-end:var(--mantine-spacing-xs)}.m_fc420b1f:where([data-position=right]:not(:only-child)){margin-inline-start:var(--mantine-spacing-xs)}.m_42bbd1ae{flex:1;text-align:center}.m_576c9d4{position:relative}.m_576c9d4:before{content:"";position:absolute;border:1px solid var(--tab-border-color);bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_539e827b{border-radius:var(--tab-radius);border-width:var(--tab-border-width);border-style:solid;border-color:transparent;background-color:transparent}.m_539e827b:where([data-active]){border-color:var(--tabs-color)}@media(hover:hover){.m_539e827b:hover{background-color:var(--tab-hover-color)}.m_539e827b:hover:where(:not([data-active])){border-color:var(--tab-border-color)}}@media(hover:none){.m_539e827b:active{background-color:var(--tab-hover-color)}.m_539e827b:active:where(:not([data-active])){border-color:var(--tab-border-color)}}@media(hover:hover){.m_539e827b:disabled:hover,.m_539e827b[data-disabled]:hover{background-color:transparent}}@media(hover:none){.m_539e827b:disabled:active,.m_539e827b[data-disabled]:active{background-color:transparent}}.m_6772fbd5{position:relative}.m_6772fbd5:before{content:"";position:absolute;border-color:var(--tab-border-color);border-width:var(--tabs-list-border-size);border-style:solid;bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_b59ab47c{border-top:calc(.0625rem * var(--mantine-scale)) solid transparent;border-bottom:calc(.0625rem * var(--mantine-scale)) solid transparent;border-right:calc(.0625rem * var(--mantine-scale)) solid transparent;border-left:calc(.0625rem * var(--mantine-scale)) solid transparent;border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-radius:var(--tab-radius);position:relative;--tab-border-bottom-color: transparent;--tab-border-top-color: transparent;--tab-border-inline-end-color: transparent;--tab-border-inline-start-color: transparent}.m_b59ab47c:where([data-active]):before{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-before-bottom, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-before-left, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-before-right, auto);top:var(--tab-before-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]):after{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-after-bottom, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-after-right, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-after-left, auto);top:var(--tab-after-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]){border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-inline-start-color:var(--tab-border-inline-start-color);border-inline-end-color:var(--tab-border-inline-end-color);--tab-border-top-color: var(--tab-border-color);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--mantine-color-body)}.m_b59ab47c:where([data-active])[data-inverted]{--tab-border-bottom-color: var(--tab-border-color);--tab-border-top-color: var(--mantine-color-body);--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-bottom: auto;--tab-after-top: calc(-.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-border-inline-end-color: var(--mantine-color-body);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-before-left: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto;--tab-after-right: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-before-right: auto;--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-after-left: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-border-inline-start-color: var(--mantine-color-body);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-before-right: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto;--tab-after-left: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-before-left: auto;--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-after-right: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto}.m_c3381914{border-radius:var(--tabs-radius);background-color:var(--tab-bg);color:var(--tab-color);--tab-bg: transparent;--tab-color: inherit}@media(hover:hover){.m_c3381914:not([data-disabled]):hover{--tab-bg: var(--tab-hover-color)}}@media(hover:none){.m_c3381914:not([data-disabled]):active{--tab-bg: var(--tab-hover-color)}}.m_c3381914[data-active][data-active]{--tab-bg: var(--tabs-color);--tab-color: var(--tabs-text-color, var(--mantine-color-white))}@media(hover:hover){.m_c3381914[data-active][data-active]:hover{--tab-bg: var(--tabs-color)}}@media(hover:none){.m_c3381914[data-active][data-active]:active{--tab-bg: var(--tabs-color)}}.m_7341320d{--ti-size-xs: calc(1.125rem * var(--mantine-scale));--ti-size-sm: calc(1.375rem * var(--mantine-scale));--ti-size-md: calc(1.75rem * var(--mantine-scale));--ti-size-lg: calc(2.125rem * var(--mantine-scale));--ti-size-xl: calc(2.75rem * var(--mantine-scale));--ti-size: var(--ti-size-md);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;user-select:none;width:var(--ti-size);height:var(--ti-size);min-width:var(--ti-size);min-height:var(--ti-size);border-radius:var(--ti-radius, var(--mantine-radius-default));background:var(--ti-bg, var(--mantine-primary-color-filled));color:var(--ti-color, var(--mantine-color-white));border:var(--ti-bd, 1px solid transparent)}.m_43657ece{--offset: calc(var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2);--tl-bullet-size: calc(1.25rem * var(--mantine-scale));--tl-line-width: calc(.25rem * var(--mantine-scale));--tl-radius: calc(62.5rem * var(--mantine-scale));--tl-color: var(--mantine-primary-color-filled)}.m_43657ece:where([data-align=left]){padding-inline-start:var(--offset)}.m_43657ece:where([data-align=right]){padding-inline-end:var(--offset)}.m_2ebe8099{font-weight:500;line-height:1;margin-bottom:calc(var(--mantine-spacing-xs) / 2)}.m_436178ff{--item-border: var(--tl-line-width) var(--tli-border-style, solid) var(--item-border-color);position:relative;color:var(--mantine-color-text)}.m_436178ff:before{content:"";pointer-events:none;position:absolute;top:0;left:var(--timeline-line-left, 0);right:var(--timeline-line-right, 0);bottom:calc(var(--mantine-spacing-xl) * -1);border-inline-start:var(--item-border);display:var(--timeline-line-display, none)}.m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}[dir=rtl] .m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}.m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}[dir=rtl] .m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}.m_43657ece:where([data-align=left]) .m_436178ff{padding-inline-start:var(--offset);text-align:left}.m_43657ece:where([data-align=right]) .m_436178ff{padding-inline-end:var(--offset);text-align:right}:where([data-mantine-color-scheme=light]) .m_436178ff{--item-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_436178ff{--item-border-color: var(--mantine-color-dark-4)}.m_436178ff:where([data-line-active]):before{border-color:var(--tli-color, var(--tl-color))}.m_436178ff:where(:not(:last-of-type)){--timeline-line-display: block}.m_436178ff:where(:not(:first-of-type)){margin-top:var(--mantine-spacing-xl)}.m_8affcee1{width:var(--tl-bullet-size);height:var(--tl-bullet-size);border-radius:var(--tli-radius, var(--tl-radius));border:var(--tl-line-width) solid;background-color:var(--mantine-color-body);position:absolute;top:0;display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_8affcee1{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1{border-color:var(--mantine-color-dark-4)}.m_43657ece:where([data-align=left]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}.m_43657ece:where([data-align=right]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}.m_8affcee1:where([data-with-child]){border-width:var(--tl-line-width)}:where([data-mantine-color-scheme=light]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-dark-4)}.m_8affcee1:where([data-active]){border-color:var(--tli-color, var(--tl-color));background-color:var(--mantine-color-white);color:var(--tl-icon-color, var(--mantine-color-white))}.m_8affcee1:where([data-active]):where([data-with-child]){background-color:var(--tli-color, var(--tl-color));color:var(--tl-icon-color, var(--mantine-color-white))}.m_43657ece:where([data-align=left]) .m_540e8f41{padding-inline-start:var(--offset);text-align:left}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_540e8f41{text-align:right}.m_43657ece:where([data-align=right]) .m_540e8f41{padding-inline-end:var(--offset);text-align:right}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_540e8f41{text-align:left}.m_8a5d1357{margin:0;font-weight:var(--title-fw);font-size:var(--title-fz);line-height:var(--title-lh);font-family:var(--mantine-font-family-headings);text-wrap:var(--title-text-wrap, var(--mantine-heading-text-wrap))}.m_8a5d1357:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--title-line-clamp);-webkit-box-orient:vertical}.m_f698e191{--level-offset: var(--mantine-spacing-lg);margin:0;padding:0;user-select:none}.m_75f3ecf{margin:0;padding:0}.m_f6970eb1{cursor:pointer;list-style:none;margin:0;padding:0;outline:0}.m_f6970eb1:focus-visible>.m_dc283425{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_dc283425{padding-inline-start:var(--label-offset)}:where([data-mantine-color-scheme=light]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-dark-5)}.m_d08caa0 :first-child{margin-top:0}.m_d08caa0 :last-child{margin-bottom:0}.m_d08caa0 :where(h1,h2,h3,h4,h5,h6){margin-bottom:var(--mantine-spacing-xs);text-wrap:var(--mantine-heading-text-wrap);font-family:var(--mantine-font-family-headings)}.m_d08caa0 :where(h1){margin-top:calc(1.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h1-font-size);line-height:var(--mantine-h1-line-height);font-weight:var(--mantine-h1-font-weight)}.m_d08caa0 :where(h2){margin-top:var(--mantine-spacing-xl);font-size:var(--mantine-h2-font-size);line-height:var(--mantine-h2-line-height);font-weight:var(--mantine-h2-font-weight)}.m_d08caa0 :where(h3){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h3-font-size);line-height:var(--mantine-h3-line-height);font-weight:var(--mantine-h3-font-weight)}.m_d08caa0 :where(h4){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h4-font-size);line-height:var(--mantine-h4-line-height);font-weight:var(--mantine-h4-font-weight)}.m_d08caa0 :where(h5){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h5-font-size);line-height:var(--mantine-h5-line-height);font-weight:var(--mantine-h5-font-weight)}.m_d08caa0 :where(h6){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h6-font-size);line-height:var(--mantine-h6-line-height);font-weight:var(--mantine-h6-font-weight)}.m_d08caa0 :where(img){max-width:100%;margin-bottom:var(--mantine-spacing-xs)}.m_d08caa0 :where(p){margin-top:0;margin-bottom:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(mark){background-color:var(--mantine-color-yellow-2);color:inherit}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(mark){background-color:var(--mantine-color-yellow-5);color:var(--mantine-color-black)}.m_d08caa0 :where(a){color:var(--mantine-color-anchor);text-decoration:none}@media(hover:hover){.m_d08caa0 :where(a):hover{text-decoration:underline}}@media(hover:none){.m_d08caa0 :where(a):active{text-decoration:underline}}.m_d08caa0 :where(hr){margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);border:0;border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(hr){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(hr){border-color:var(--mantine-color-dark-3)}.m_d08caa0 :where(pre){padding:var(--mantine-spacing-xs);line-height:var(--mantine-line-height);margin:0;margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);overflow-x:auto;font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs);border-radius:var(--mantine-radius-sm)}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(pre){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(pre){background-color:var(--mantine-color-dark-8)}.m_d08caa0 :where(pre) :where(code){background-color:transparent;padding:0;border-radius:0;color:inherit;border:0}.m_d08caa0 :where(kbd){--kbd-fz: calc(.75rem * var(--mantine-scale));--kbd-padding: calc(.1875rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;padding:var(--kbd-padding);font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(kbd){border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(kbd){border-color:var(--mantine-color-dark-3);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-5)}.m_d08caa0 :where(code){line-height:var(--mantine-line-height);padding:calc(.0625rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));border-radius:var(--mantine-radius-sm);font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs)}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(code){background-color:var(--mantine-color-gray-0);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(code){background-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_d08caa0 :where(ul,ol):not([data-type=taskList]){margin-bottom:var(--mantine-spacing-md);padding-inline-start:var(--mantine-spacing-xl);list-style-position:outside}.m_d08caa0 :where(table){width:100%;border-collapse:collapse;caption-side:bottom;margin-bottom:var(--mantine-spacing-md)}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(table){--table-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(table){--table-border-color: var(--mantine-color-dark-4)}.m_d08caa0 :where(table) :where(caption){margin-top:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-sm);color:var(--mantine-color-dimmed)}.m_d08caa0 :where(table) :where(th){text-align:left;font-weight:700;font-size:var(--mantine-font-size-sm);padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm)}.m_d08caa0 :where(table) :where(thead th){border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color)}.m_d08caa0 :where(table) :where(tfoot th){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color)}.m_d08caa0 :where(table) :where(td){padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm);border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--table-border-color);font-size:var(--mantine-font-size-sm)}.m_d08caa0 :where(table) :where(tr:last-of-type td){border-bottom:0}.m_d08caa0 :where(blockquote){font-size:var(--mantine-font-size-lg);line-height:var(--mantine-line-height);margin:var(--mantine-spacing-md) 0;border-radius:var(--mantine-radius-sm);padding:var(--mantine-spacing-md) var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d08caa0 :where(blockquote){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d08caa0 :where(blockquote){background-color:var(--mantine-color-dark-8)}}@layer xyflow{.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}}@layer base{:root{--made-with-panda: "🐼"}*,:before,:after,::backdrop{--blur: ;--brightness: ;--contrast: ;--grayscale: ;--hue-rotate: ;--invert: ;--saturate: ;--sepia: ;--drop-shadow: ;--backdrop-blur: ;--backdrop-brightness: ;--backdrop-contrast: ;--backdrop-grayscale: ;--backdrop-hue-rotate: ;--backdrop-invert: ;--backdrop-opacity: ;--backdrop-saturate: ;--backdrop-sepia: ;--gradient-from-position: ;--gradient-to-position: ;--gradient-via-position: ;--scroll-snap-strictness: proximity;--border-spacing-x: 0;--border-spacing-y: 0;--translate-x: 0;--translate-y: 0;--rotate: 0;--rotate-x: 0;--rotate-y: 0;--skew-x: 0;--skew-y: 0;--scale-x: 1;--scale-y: 1}:where(:root,:host){--likec4-app-font-default: "IBM Plex Sans",'ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"'}:where([data-likec4-text-size=xs]){--likec4-text-size: var(--font-sizes-likec4-xs)}:where([data-likec4-text-size=sm]){--likec4-text-size: var(--font-sizes-likec4-sm)}:where([data-likec4-text-size=md]){--likec4-text-size: var(--font-sizes-likec4-md)}:where([data-likec4-text-size=lg]){--likec4-text-size: var(--font-sizes-likec4-lg)}:where([data-likec4-text-size=xl]){--likec4-text-size: var(--font-sizes-likec4-xl)}:where([data-likec4-spacing=xs]){--likec4-spacing: var(--spacing-likec4-xs)}:where([data-likec4-spacing=sm]){--likec4-spacing: var(--spacing-likec4-sm)}:where([data-likec4-spacing=md]){--likec4-spacing: var(--spacing-likec4-md)}:where([data-likec4-spacing=lg]){--likec4-spacing: var(--spacing-likec4-lg)}:where([data-likec4-spacing=xl]){--likec4-spacing: var(--spacing-likec4-xl)}.likec4-shadow-root{--mantine-font-family: var(--likec4-app-font, var(--likec4-app-font-default));--mantine-font-family-headings: var(--likec4-app-font, var(--likec4-app-font-default));display:contents}.likec4-shadow-root dialog{color:var(--mantine-color-text)}.likec4-edge-label-container{position:absolute;top:var(--spacing-0);left:var(--spacing-0);width:auto;height:auto}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-edge-label-container{display:none}:where([data-likec4-zoom-small=true]) .likec4-edge-label-container{display:none}.likec4-root{padding:var(--spacing-0);margin:var(--spacing-0);border:0px solid transparent;background:var(--colors-transparent);overflow:hidden;position:relative;container-name:likec4-root;container-type:size;width:var(--sizes-100\\%);height:var(--sizes-100\\%)}.likec4-root .react-flow{--xy-background-color: var(--colors-likec4-background);--xy-background-pattern-color: var(--colors-likec4-background-pattern, var(--colors-likec4-background))}.likec4-root .react-flow:is(.bg-transparent){--xy-background-color: transparent !important;background:var(--colors-transparent)!important}.likec4-root .react-flow:is(.not-initialized){opacity:0}.likec4-root .react-flow .react-flow__pane{-webkit-user-select:none;user-select:none}.likec4-root .react-flow :where(.react-flow__nodes,.react-flow__edges,.react-flow__edgelabel-renderer){display:contents}.likec4-root .react-flow .react-flow__node.draggable:has(.likec4-compound-node){cursor:default}.likec4-root .react-flow .likec4-node-handle-center{visibility:hidden!important;transform:translate(-50%,-50%)!important;top:50%!important;left:50%!important;right:unset!important;bottom:unset!important;width:5px!important;height:5px!important}.likec4-root :where(.react-flow__edge,.likec4-edge-container,.likec4-edge-label-container){--xy-edge-stroke-width: 3;--xy-edge-stroke: var(--likec4-palette-relation-stroke);--xy-edge-stroke-selected: var(--likec4-palette-relation-stroke-selected);--xy-edge-label-color: var(--likec4-palette-relation-label);--xy-edge-label-background-color: var(--likec4-palette-relation-label-bg)}[data-mantine-color-scheme=dark] .likec4-root :where(.react-flow__edge,.likec4-edge-container,.likec4-edge-label-container){--xy-edge-label-background-color: color-mix(in oklab, var(--likec4-palette-relation-label-bg) 50%, transparent)}[data-mantine-color-scheme=light] .likec4-root :where(.react-flow__edge,.likec4-edge-container,.likec4-edge-label-container){--xy-edge-label-color: color-mix(in oklab, var(--likec4-palette-relation-label), #FFF 50%);--xy-edge-label-background-color: color-mix(in oklab, var(--likec4-palette-relation-label-bg) 65%, transparent)}.likec4-root :where(.react-flow__edge,.likec4-edge-container,.likec4-edge-label-container):is([data-likec4-hovered=true],[data-edge-active=true]){--xy-edge-stroke-width: 4;--xy-edge-stroke: var(--likec4-palette-relation-stroke-selected)}.likec4-root :where(.react-flow__node,.react-flow__edge):has([data-likec4-dimmed]){opacity:.25}.likec4-root .likec4-edge-label-container:is([data-likec4-dimmed]){opacity:.25}.likec4-root:is([data-likec4-reduced-graphics]) .hide-on-reduced-graphics{display:none}.likec4-root :where(.relationships-browser,.likec4-relationship-details) .react-flow__attribution{display:none}.likec4-root .mantine-ActionIcon-icon .tabler-icon{width:75%;height:75%}.likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__node,.react-flow__edge):has([data-likec4-dimmed]){filter:grayscale(85%)}.likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__node,.react-flow__edge):has([data-likec4-dimmed=true]){--transition-prop: opacity, filter;transition-property:opacity,filter;--transition-easing: cubic-bezier(.5, 0, .2, 1);transition-timing-function:cubic-bezier(.5,0,.2,1);--transition-duration: .4s;transition-duration:.4s}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-edge-label-container:is([data-likec4-dimmed]){filter:grayscale(85%)}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-edge-label-container:is([data-likec4-dimmed=true]){--transition-prop: opacity, filter;transition-property:opacity,filter;--transition-easing: cubic-bezier(.5, 0, .2, 1);transition-timing-function:cubic-bezier(.5,0,.2,1);--transition-duration: .4s;transition-duration:.4s}[data-mantine-color-scheme=dark] .likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edgelabel-renderer)>*{mix-blend-mode:screen}[data-mantine-color-scheme=light] .likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edgelabel-renderer)>*{mix-blend-mode:hard-light}[data-mantine-color-scheme=dark] .likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edges)>svg{mix-blend-mode:plus-lighter}[data-mantine-color-scheme=light] .likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edges)>svg{mix-blend-mode:multiply}[data-mantine-color-scheme=light] .likec4-root:not([data-likec4-reduced-graphics]):has(.react-flow__node-seq-parallel) :where(.react-flow__edges>svg){mix-blend-mode:color-burn}[data-mantine-color-scheme=dark] .likec4-root:not([data-likec4-reduced-graphics]) .react-flow__node-seq-parallel{mix-blend-mode:luminosity}[data-mantine-color-scheme=light] .likec4-root:not([data-likec4-reduced-graphics]) .react-flow__node-seq-parallel{mix-blend-mode:color-burn}.likec4-static-view .react-flow .react-flow__attribution{display:none}:where(:root,:host){--likec4-text-size: 1.2rem;--likec4-palette-fill: #3b82f6;--likec4-palette-stroke: #2563eb;--likec4-palette-hiContrast: #eff6ff;--likec4-palette-loContrast: #bfdbfe;--likec4-palette-relation-stroke: #8D8D8D;--likec4-palette-relation-label: #C9C9C9;--likec4-palette-relation-label-bg: #18191B;--mantine-scale: 1;--likec4-palette-outline: var(--likec4-palette-loContrast);--likec4-spacing: ;--text-fz: ;--likec4-icon-size: }@media print{.likec4-root .react-flow{--xy-background-color: transparent !important;background:var(--colors-transparent)!important}.likec4-root .react-flow__background{display:none}.likec4-root *{color-adjust:exact!important;print-color-adjust:exact!important}.likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edgelabel-renderer)>*{mix-blend-mode:normal!important}.likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__edges)>svg{mix-blend-mode:normal!important}.likec4-root:not([data-likec4-reduced-graphics]) .react-flow__node-seq-parallel{mix-blend-mode:normal!important}}}@layer tokens{:where(:root,:host){--spacing-0: 0px;--spacing-1: 4px;--spacing-2: 8px;--spacing-3: 12px;--spacing-4: 16px;--spacing-5: 20px;--spacing-6: 24px;--spacing-7: 28px;--spacing-8: 32px;--spacing-9: 36px;--spacing-10: 40px;--spacing-likec4-xs: 8px;--spacing-likec4-sm: 10px;--spacing-likec4-md: 16px;--spacing-likec4-lg: 24px;--spacing-likec4-xl: 32px;--spacing-0\\.5: 2px;--spacing-1\\.5: 6px;--spacing-2\\.5: 10px;--spacing-3\\.5: 14px;--spacing-4\\.5: 18px;--spacing-xxs: calc(.5rem * var(--mantine-scale));--spacing-xs: calc(.625rem * var(--mantine-scale));--spacing-sm: calc(.75rem * var(--mantine-scale));--spacing-md: calc(1rem * var(--mantine-scale));--spacing-lg: calc(1.25rem * var(--mantine-scale));--spacing-xl: calc(2rem * var(--mantine-scale));--font-sizes-xxs: .625rem;--font-sizes-xs: calc(.75rem * var(--mantine-scale));--font-sizes-sm: calc(.875rem * var(--mantine-scale));--font-sizes-md: calc(1rem * var(--mantine-scale));--font-sizes-lg: calc(1.125rem * var(--mantine-scale));--font-sizes-xl: calc(1.25rem * var(--mantine-scale));--font-sizes-likec4-xs: .833rem;--font-sizes-likec4-sm: 1rem;--font-sizes-likec4-md: 1.2rem;--font-sizes-likec4-lg: 1.44rem;--font-sizes-likec4-xl: 1.73rem;--line-heights-1: 1;--line-heights-xs: 1.4;--line-heights-sm: 1.45;--line-heights-md: 1.55;--line-heights-lg: 1.6;--line-heights-xl: 1.65;--colors-mantine-colors-primary: var(--mantine-primary-color-6);--colors-mantine-colors-primary-filled: var(--mantine-primary-color-filled);--colors-mantine-colors-primary-filled-hover: var(--mantine-primary-color-filled-hover);--colors-mantine-colors-primary-light: var(--mantine-primary-color-light);--colors-mantine-colors-primary-light-hover: var(--mantine-primary-color-light-hover);--colors-mantine-colors-primary-light-color: var(--mantine-primary-color-light-color);--colors-mantine-colors-primary-outline: var(--mantine-primary-color-outline);--colors-mantine-colors-primary-outline-hover: var(--mantine-primary-color-outline-hover);--colors-mantine-colors-primary\\[0\\]: var(--mantine-primary-color-0);--colors-mantine-colors-primary\\[1\\]: var(--mantine-primary-color-1);--colors-mantine-colors-primary\\[2\\]: var(--mantine-primary-color-2);--colors-mantine-colors-primary\\[3\\]: var(--mantine-primary-color-3);--colors-mantine-colors-primary\\[4\\]: var(--mantine-primary-color-4);--colors-mantine-colors-primary\\[5\\]: var(--mantine-primary-color-5);--colors-mantine-colors-primary\\[6\\]: var(--mantine-primary-color-6);--colors-mantine-colors-primary\\[7\\]: var(--mantine-primary-color-7);--colors-mantine-colors-primary\\[8\\]: var(--mantine-primary-color-8);--colors-mantine-colors-primary\\[9\\]: var(--mantine-primary-color-9);--colors-mantine-colors-white: var(--mantine-color-white);--colors-mantine-colors-text: var(--mantine-color-text);--colors-mantine-colors-body: var(--mantine-color-body);--colors-mantine-colors-dimmed: var(--mantine-color-dimmed);--colors-mantine-colors-default-border: var(--mantine-color-default-border);--colors-mantine-colors-default-color: var(--mantine-color-default-color);--colors-mantine-colors-default-hover: var(--mantine-color-default-hover);--colors-mantine-colors-default: var(--mantine-color-default);--colors-mantine-colors-error: var(--mantine-color-error);--colors-mantine-colors-placeholder: var(--mantine-color-placeholder);--colors-mantine-colors-gray: var(--mantine-color-gray-6);--colors-mantine-colors-gray-filled: var(--mantine-color-gray-filled);--colors-mantine-colors-gray-filled-hover: var(--mantine-color-gray-filled-hover);--colors-mantine-colors-gray-light: var(--mantine-color-gray-light);--colors-mantine-colors-gray-light-hover: var(--mantine-color-gray-light-hover);--colors-mantine-colors-gray-light-color: var(--mantine-color-gray-light-color);--colors-mantine-colors-gray-outline: var(--mantine-color-gray-outline);--colors-mantine-colors-gray-outline-hover: var(--mantine-color-gray-outline-hover);--colors-mantine-colors-gray\\[0\\]: var(--mantine-color-gray-0);--colors-mantine-colors-gray\\[1\\]: var(--mantine-color-gray-1);--colors-mantine-colors-gray\\[2\\]: var(--mantine-color-gray-2);--colors-mantine-colors-gray\\[3\\]: var(--mantine-color-gray-3);--colors-mantine-colors-gray\\[4\\]: var(--mantine-color-gray-4);--colors-mantine-colors-gray\\[5\\]: var(--mantine-color-gray-5);--colors-mantine-colors-gray\\[6\\]: var(--mantine-color-gray-6);--colors-mantine-colors-gray\\[7\\]: var(--mantine-color-gray-7);--colors-mantine-colors-gray\\[8\\]: var(--mantine-color-gray-8);--colors-mantine-colors-gray\\[9\\]: var(--mantine-color-gray-9);--colors-mantine-colors-dark: var(--mantine-color-dark-6);--colors-mantine-colors-dark-filled: var(--mantine-color-dark-filled);--colors-mantine-colors-dark-filled-hover: var(--mantine-color-dark-filled-hover);--colors-mantine-colors-dark-light: var(--mantine-color-dark-light);--colors-mantine-colors-dark-light-hover: var(--mantine-color-dark-light-hover);--colors-mantine-colors-dark-light-color: var(--mantine-color-dark-light-color);--colors-mantine-colors-dark-outline: var(--mantine-color-dark-outline);--colors-mantine-colors-dark-outline-hover: var(--mantine-color-dark-outline-hover);--colors-mantine-colors-dark\\[0\\]: var(--mantine-color-dark-0);--colors-mantine-colors-dark\\[1\\]: var(--mantine-color-dark-1);--colors-mantine-colors-dark\\[2\\]: var(--mantine-color-dark-2);--colors-mantine-colors-dark\\[3\\]: var(--mantine-color-dark-3);--colors-mantine-colors-dark\\[4\\]: var(--mantine-color-dark-4);--colors-mantine-colors-dark\\[5\\]: var(--mantine-color-dark-5);--colors-mantine-colors-dark\\[6\\]: var(--mantine-color-dark-6);--colors-mantine-colors-dark\\[7\\]: var(--mantine-color-dark-7);--colors-mantine-colors-dark\\[8\\]: var(--mantine-color-dark-8);--colors-mantine-colors-dark\\[9\\]: var(--mantine-color-dark-9);--colors-mantine-colors-orange: var(--mantine-color-orange-6);--colors-mantine-colors-orange-filled: var(--mantine-color-orange-filled);--colors-mantine-colors-orange-filled-hover: var(--mantine-color-orange-filled-hover);--colors-mantine-colors-orange-light: var(--mantine-color-orange-light);--colors-mantine-colors-orange-light-hover: var(--mantine-color-orange-light-hover);--colors-mantine-colors-orange-light-color: var(--mantine-color-orange-light-color);--colors-mantine-colors-orange-outline: var(--mantine-color-orange-outline);--colors-mantine-colors-orange-outline-hover: var(--mantine-color-orange-outline-hover);--colors-mantine-colors-orange\\[0\\]: var(--mantine-color-orange-0);--colors-mantine-colors-orange\\[1\\]: var(--mantine-color-orange-1);--colors-mantine-colors-orange\\[2\\]: var(--mantine-color-orange-2);--colors-mantine-colors-orange\\[3\\]: var(--mantine-color-orange-3);--colors-mantine-colors-orange\\[4\\]: var(--mantine-color-orange-4);--colors-mantine-colors-orange\\[5\\]: var(--mantine-color-orange-5);--colors-mantine-colors-orange\\[6\\]: var(--mantine-color-orange-6);--colors-mantine-colors-orange\\[7\\]: var(--mantine-color-orange-7);--colors-mantine-colors-orange\\[8\\]: var(--mantine-color-orange-8);--colors-mantine-colors-orange\\[9\\]: var(--mantine-color-orange-9);--colors-mantine-colors-teal: var(--mantine-color-teal-6);--colors-mantine-colors-teal-filled: var(--mantine-color-teal-filled);--colors-mantine-colors-teal-filled-hover: var(--mantine-color-teal-filled-hover);--colors-mantine-colors-teal-light: var(--mantine-color-teal-light);--colors-mantine-colors-teal-light-hover: var(--mantine-color-teal-light-hover);--colors-mantine-colors-teal-light-color: var(--mantine-color-teal-light-color);--colors-mantine-colors-teal-outline: var(--mantine-color-teal-outline);--colors-mantine-colors-teal-outline-hover: var(--mantine-color-teal-outline-hover);--colors-mantine-colors-teal\\[0\\]: var(--mantine-color-teal-0);--colors-mantine-colors-teal\\[1\\]: var(--mantine-color-teal-1);--colors-mantine-colors-teal\\[2\\]: var(--mantine-color-teal-2);--colors-mantine-colors-teal\\[3\\]: var(--mantine-color-teal-3);--colors-mantine-colors-teal\\[4\\]: var(--mantine-color-teal-4);--colors-mantine-colors-teal\\[5\\]: var(--mantine-color-teal-5);--colors-mantine-colors-teal\\[6\\]: var(--mantine-color-teal-6);--colors-mantine-colors-teal\\[7\\]: var(--mantine-color-teal-7);--colors-mantine-colors-teal\\[8\\]: var(--mantine-color-teal-8);--colors-mantine-colors-teal\\[9\\]: var(--mantine-color-teal-9);--colors-mantine-colors-red: var(--mantine-color-red-6);--colors-mantine-colors-red-filled: var(--mantine-color-red-filled);--colors-mantine-colors-red-filled-hover: var(--mantine-color-red-filled-hover);--colors-mantine-colors-red-light: var(--mantine-color-red-light);--colors-mantine-colors-red-light-hover: var(--mantine-color-red-light-hover);--colors-mantine-colors-red-light-color: var(--mantine-color-red-light-color);--colors-mantine-colors-red-outline: var(--mantine-color-red-outline);--colors-mantine-colors-red-outline-hover: var(--mantine-color-red-outline-hover);--colors-mantine-colors-red\\[0\\]: var(--mantine-color-red-0);--colors-mantine-colors-red\\[1\\]: var(--mantine-color-red-1);--colors-mantine-colors-red\\[2\\]: var(--mantine-color-red-2);--colors-mantine-colors-red\\[3\\]: var(--mantine-color-red-3);--colors-mantine-colors-red\\[4\\]: var(--mantine-color-red-4);--colors-mantine-colors-red\\[5\\]: var(--mantine-color-red-5);--colors-mantine-colors-red\\[6\\]: var(--mantine-color-red-6);--colors-mantine-colors-red\\[7\\]: var(--mantine-color-red-7);--colors-mantine-colors-red\\[8\\]: var(--mantine-color-red-8);--colors-mantine-colors-red\\[9\\]: var(--mantine-color-red-9);--colors-mantine-colors-green: var(--mantine-color-green-6);--colors-mantine-colors-green-filled: var(--mantine-color-green-filled);--colors-mantine-colors-green-filled-hover: var(--mantine-color-green-filled-hover);--colors-mantine-colors-green-light: var(--mantine-color-green-light);--colors-mantine-colors-green-light-hover: var(--mantine-color-green-light-hover);--colors-mantine-colors-green-light-color: var(--mantine-color-green-light-color);--colors-mantine-colors-green-outline: var(--mantine-color-green-outline);--colors-mantine-colors-green-outline-hover: var(--mantine-color-green-outline-hover);--colors-mantine-colors-green\\[0\\]: var(--mantine-color-green-0);--colors-mantine-colors-green\\[1\\]: var(--mantine-color-green-1);--colors-mantine-colors-green\\[2\\]: var(--mantine-color-green-2);--colors-mantine-colors-green\\[3\\]: var(--mantine-color-green-3);--colors-mantine-colors-green\\[4\\]: var(--mantine-color-green-4);--colors-mantine-colors-green\\[5\\]: var(--mantine-color-green-5);--colors-mantine-colors-green\\[6\\]: var(--mantine-color-green-6);--colors-mantine-colors-green\\[7\\]: var(--mantine-color-green-7);--colors-mantine-colors-green\\[8\\]: var(--mantine-color-green-8);--colors-mantine-colors-green\\[9\\]: var(--mantine-color-green-9);--colors-mantine-colors-yellow: var(--mantine-color-yellow-6);--colors-mantine-colors-yellow-filled: var(--mantine-color-yellow-filled);--colors-mantine-colors-yellow-filled-hover: var(--mantine-color-yellow-filled-hover);--colors-mantine-colors-yellow-light: var(--mantine-color-yellow-light);--colors-mantine-colors-yellow-light-hover: var(--mantine-color-yellow-light-hover);--colors-mantine-colors-yellow-light-color: var(--mantine-color-yellow-light-color);--colors-mantine-colors-yellow-outline: var(--mantine-color-yellow-outline);--colors-mantine-colors-yellow-outline-hover: var(--mantine-color-yellow-outline-hover);--colors-mantine-colors-yellow\\[0\\]: var(--mantine-color-yellow-0);--colors-mantine-colors-yellow\\[1\\]: var(--mantine-color-yellow-1);--colors-mantine-colors-yellow\\[2\\]: var(--mantine-color-yellow-2);--colors-mantine-colors-yellow\\[3\\]: var(--mantine-color-yellow-3);--colors-mantine-colors-yellow\\[4\\]: var(--mantine-color-yellow-4);--colors-mantine-colors-yellow\\[5\\]: var(--mantine-color-yellow-5);--colors-mantine-colors-yellow\\[6\\]: var(--mantine-color-yellow-6);--colors-mantine-colors-yellow\\[7\\]: var(--mantine-color-yellow-7);--colors-mantine-colors-yellow\\[8\\]: var(--mantine-color-yellow-8);--colors-mantine-colors-yellow\\[9\\]: var(--mantine-color-yellow-9);--colors-transparent: transparent;--colors-none: none;--sizes-100\\%: 100%;--sizes-full: 100%;--sizes-breakpoint-xs: 36em;--sizes-breakpoint-sm: 48em;--sizes-breakpoint-md: 62em;--sizes-breakpoint-lg: 75em;--sizes-breakpoint-xl: 88em;--borders-none: none;--borders-transparent: 0px solid transparent;--borders-default: 1px solid var(--mantine-color-default-border);--radii-0: 0px;--radii-xs: .125rem;--radii-sm: .25rem;--radii-md: .5rem;--radii-lg: 1rem;--radii-xl: 2rem;--font-weights-normal: 400;--font-weights-medium: 500;--fonts-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--fonts-body: var(--likec4-app-font, var(--likec4-app-font-default));--fonts-likec4: var(--likec4-app-font, var(--likec4-app-font-default));--fonts-likec4-element: var(--likec4-element-font, var(--fonts-likec4));--fonts-likec4-compound: var(--likec4-compound-font, var(--fonts-likec4));--fonts-likec4-relation: var(--likec4-relation-font, var(--fonts-likec4));--easings-default: cubic-bezier(.4, 0, .2, 1);--easings-in: cubic-bezier(.4, 0, 1, 1);--easings-out: cubic-bezier(0, 0, .4, 1);--easings-in-out: cubic-bezier(.5, 0, .2, 1);--durations-fastest: 50ms;--durations-faster: .1s;--durations-fast: .13s;--durations-normal: .17s;--durations-slow: .3s;--durations-slower: .4s;--durations-slowest: .5s;--shadows-none: none;--shadows-xs: 0 1px 3px rgb(0 0 0/5%), 0 1px 2px rgb(0 0 0/10%);--shadows-sm: 0 1px 3px rgb(0 0 0/5%), 0 10px 15px -5px rgb(0 0 0/5%), 0 7px 7px -5px rgb(0 0 0/4%);--shadows-md: 0 1px 3px rgb(0 0 0/5%), 0 20px 25px -5px rgb(0 0 0/5%), 0 10px 10px -5px rgb(0 0 0/4%);--shadows-lg: 0 1px 3px rgb(0 0 0/5%), 0 28px 23px -7px rgb(0 0 0/5%), 0 12px 12px -7px rgb(0 0 0/4%);--shadows-xl: 0 1px 3px rgb(0 0 0/5%), 0 36px 28px -7px rgb(0 0 0/5%), 0 17px 17px -7px rgb(0 0 0/4%);--z-index-0: 0;--z-index-1: 1;--z-index--1: -1;--z-index-likec4-panel: 100;--z-index-likec4-dropdown: 200;--breakpoints-xs: 36em;--breakpoints-sm: 48em;--breakpoints-md: 62em;--breakpoints-lg: 75em;--breakpoints-xl: 88em;--colors-amber-1: var(--colors-amber-light-1);--colors-amber-2: var(--colors-amber-light-2);--colors-amber-3: var(--colors-amber-light-3);--colors-amber-4: var(--colors-amber-light-4);--colors-amber-5: var(--colors-amber-light-5);--colors-amber-6: var(--colors-amber-light-6);--colors-amber-7: var(--colors-amber-light-7);--colors-amber-8: var(--colors-amber-light-8);--colors-amber-9: var(--colors-amber-light-9);--colors-amber-10: var(--colors-amber-light-10);--colors-amber-11: var(--colors-amber-light-11);--colors-amber-12: var(--colors-amber-light-12);--colors-amber-light-1: #fefdfb;--colors-amber-light-2: #fefbe9;--colors-amber-light-3: #fff7c2;--colors-amber-light-4: #ffee9c;--colors-amber-light-5: #fbe577;--colors-amber-light-6: #f3d673;--colors-amber-light-7: #e9c162;--colors-amber-light-8: #e2a336;--colors-amber-light-9: #ffc53d;--colors-amber-light-10: #ffba18;--colors-amber-light-11: #ab6400;--colors-amber-light-12: #4f3422;--colors-amber-light-a-1: #c0800004;--colors-amber-light-a-2: #f4d10016;--colors-amber-light-a-3: #ffde003d;--colors-amber-light-a-4: #ffd40063;--colors-amber-light-a-5: #f8cf0088;--colors-amber-light-a-6: #eab5008c;--colors-amber-light-a-7: #dc9b009d;--colors-amber-light-a-8: #da8a00c9;--colors-amber-light-a-9: #ffb300c2;--colors-amber-light-a-10: #ffb300e7;--colors-amber-light-a-11: #ab6400;--colors-amber-light-a-12: #341500dd;--colors-amber-light-p3-1: color(display-p3 .995 .992 .985);--colors-amber-light-p3-2: color(display-p3 .994 .986 .921);--colors-amber-light-p3-3: color(display-p3 .994 .969 .782);--colors-amber-light-p3-4: color(display-p3 .989 .937 .65);--colors-amber-light-p3-5: color(display-p3 .97 .902 .527);--colors-amber-light-p3-6: color(display-p3 .936 .844 .506);--colors-amber-light-p3-7: color(display-p3 .89 .762 .443);--colors-amber-light-p3-8: color(display-p3 .85 .65 .3);--colors-amber-light-p3-9: color(display-p3 1 .77 .26);--colors-amber-light-p3-10: color(display-p3 .959 .741 .274);--colors-amber-light-p3-11: color(display-p3 .64 .4 0);--colors-amber-light-p3-12: color(display-p3 .294 .208 .145);--colors-amber-light-p3-a-1: color(display-p3 .757 .514 .024 / .016);--colors-amber-light-p3-a-2: color(display-p3 .902 .804 .008 / .079);--colors-amber-light-p3-a-3: color(display-p3 .965 .859 .004 / .22);--colors-amber-light-p3-a-4: color(display-p3 .969 .82 .004 / .35);--colors-amber-light-p3-a-5: color(display-p3 .933 .796 .004 / .475);--colors-amber-light-p3-a-6: color(display-p3 .875 .682 .004 / .495);--colors-amber-light-p3-a-7: color(display-p3 .804 .573 0 / .557);--colors-amber-light-p3-a-8: color(display-p3 .788 .502 0 / .699);--colors-amber-light-p3-a-9: color(display-p3 1 .686 0 / .742);--colors-amber-light-p3-a-10: color(display-p3 .945 .643 0 / .726);--colors-amber-light-p3-a-11: color(display-p3 .64 .4 0);--colors-amber-light-p3-a-12: color(display-p3 .294 .208 .145);--colors-amber-dark-1: #16120c;--colors-amber-dark-2: #1d180f;--colors-amber-dark-3: #302008;--colors-amber-dark-4: #3f2700;--colors-amber-dark-5: #4d3000;--colors-amber-dark-6: #5c3d05;--colors-amber-dark-7: #714f19;--colors-amber-dark-8: #8f6424;--colors-amber-dark-9: #ffc53d;--colors-amber-dark-10: #ffd60a;--colors-amber-dark-11: #ffca16;--colors-amber-dark-12: #ffe7b3;--colors-amber-dark-a-1: #e63c0006;--colors-amber-dark-a-2: #fd9b000d;--colors-amber-dark-a-3: #fa820022;--colors-amber-dark-a-4: #fc820032;--colors-amber-dark-a-5: #fd8b0041;--colors-amber-dark-a-6: #fd9b0051;--colors-amber-dark-a-7: #ffab2567;--colors-amber-dark-a-8: #ffae3587;--colors-amber-dark-a-9: #ffc53d;--colors-amber-dark-a-10: #ffd60a;--colors-amber-dark-a-11: #ffca16;--colors-amber-dark-a-12: #ffe7b3;--colors-amber-dark-p3-1: color(display-p3 .082 .07 .05);--colors-amber-dark-p3-2: color(display-p3 .111 .094 .064);--colors-amber-dark-p3-3: color(display-p3 .178 .128 .049);--colors-amber-dark-p3-4: color(display-p3 .239 .156 0);--colors-amber-dark-p3-5: color(display-p3 .29 .193 0);--colors-amber-dark-p3-6: color(display-p3 .344 .245 .076);--colors-amber-dark-p3-7: color(display-p3 .422 .314 .141);--colors-amber-dark-p3-8: color(display-p3 .535 .399 .189);--colors-amber-dark-p3-9: color(display-p3 1 .77 .26);--colors-amber-dark-p3-10: color(display-p3 1 .87 .15);--colors-amber-dark-p3-11: color(display-p3 1 .8 .29);--colors-amber-dark-p3-12: color(display-p3 .984 .909 .726);--colors-amber-dark-p3-a-1: color(display-p3 .992 .298 0 / .017);--colors-amber-dark-p3-a-2: color(display-p3 .988 .651 0 / .047);--colors-amber-dark-p3-a-3: color(display-p3 1 .6 0 / .118);--colors-amber-dark-p3-a-4: color(display-p3 1 .557 0 / .185);--colors-amber-dark-p3-a-5: color(display-p3 1 .592 0 / .24);--colors-amber-dark-p3-a-6: color(display-p3 1 .659 .094 / .299);--colors-amber-dark-p3-a-7: color(display-p3 1 .714 .263 / .383);--colors-amber-dark-p3-a-8: color(display-p3 .996 .729 .306 / .5);--colors-amber-dark-p3-a-9: color(display-p3 1 .769 .259);--colors-amber-dark-p3-a-10: color(display-p3 1 .871 .149);--colors-amber-dark-p3-a-11: color(display-p3 1 .8 .29);--colors-amber-dark-p3-a-12: color(display-p3 .984 .909 .726);--colors-amber-a-1: var(--colors-amber-light-a-1);--colors-amber-a-2: var(--colors-amber-light-a-2);--colors-amber-a-3: var(--colors-amber-light-a-3);--colors-amber-a-4: var(--colors-amber-light-a-4);--colors-amber-a-5: var(--colors-amber-light-a-5);--colors-amber-a-6: var(--colors-amber-light-a-6);--colors-amber-a-7: var(--colors-amber-light-a-7);--colors-amber-a-8: var(--colors-amber-light-a-8);--colors-amber-a-9: var(--colors-amber-light-a-9);--colors-amber-a-10: var(--colors-amber-light-a-10);--colors-amber-a-11: var(--colors-amber-light-a-11);--colors-amber-a-12: var(--colors-amber-light-a-12);--colors-amber-p3-1: var(--colors-amber-light-p3-1);--colors-amber-p3-2: var(--colors-amber-light-p3-2);--colors-amber-p3-3: var(--colors-amber-light-p3-3);--colors-amber-p3-4: var(--colors-amber-light-p3-4);--colors-amber-p3-5: var(--colors-amber-light-p3-5);--colors-amber-p3-6: var(--colors-amber-light-p3-6);--colors-amber-p3-7: var(--colors-amber-light-p3-7);--colors-amber-p3-8: var(--colors-amber-light-p3-8);--colors-amber-p3-9: var(--colors-amber-light-p3-9);--colors-amber-p3-10: var(--colors-amber-light-p3-10);--colors-amber-p3-11: var(--colors-amber-light-p3-11);--colors-amber-p3-12: var(--colors-amber-light-p3-12);--colors-amber-p3-a-1: var(--colors-amber-light-p3-a-1);--colors-amber-p3-a-2: var(--colors-amber-light-p3-a-2);--colors-amber-p3-a-3: var(--colors-amber-light-p3-a-3);--colors-amber-p3-a-4: var(--colors-amber-light-p3-a-4);--colors-amber-p3-a-5: var(--colors-amber-light-p3-a-5);--colors-amber-p3-a-6: var(--colors-amber-light-p3-a-6);--colors-amber-p3-a-7: var(--colors-amber-light-p3-a-7);--colors-amber-p3-a-8: var(--colors-amber-light-p3-a-8);--colors-amber-p3-a-9: var(--colors-amber-light-p3-a-9);--colors-amber-p3-a-10: var(--colors-amber-light-p3-a-10);--colors-amber-p3-a-11: var(--colors-amber-light-p3-a-11);--colors-amber-p3-a-12: var(--colors-amber-light-p3-a-12);--colors-blue-1: var(--colors-blue-light-1);--colors-blue-2: var(--colors-blue-light-2);--colors-blue-3: var(--colors-blue-light-3);--colors-blue-4: var(--colors-blue-light-4);--colors-blue-5: var(--colors-blue-light-5);--colors-blue-6: var(--colors-blue-light-6);--colors-blue-7: var(--colors-blue-light-7);--colors-blue-8: var(--colors-blue-light-8);--colors-blue-9: var(--colors-blue-light-9);--colors-blue-10: var(--colors-blue-light-10);--colors-blue-11: var(--colors-blue-light-11);--colors-blue-12: var(--colors-blue-light-12);--colors-blue-light-1: #fbfdff;--colors-blue-light-2: #f4faff;--colors-blue-light-3: #e6f4fe;--colors-blue-light-4: #d5efff;--colors-blue-light-5: #c2e5ff;--colors-blue-light-6: #acd8fc;--colors-blue-light-7: #8ec8f6;--colors-blue-light-8: #5eb1ef;--colors-blue-light-9: #0090ff;--colors-blue-light-10: #0588f0;--colors-blue-light-11: #0d74ce;--colors-blue-light-12: #113264;--colors-blue-light-a-1: #0080ff04;--colors-blue-light-a-2: #008cff0b;--colors-blue-light-a-3: #008ff519;--colors-blue-light-a-4: #009eff2a;--colors-blue-light-a-5: #0093ff3d;--colors-blue-light-a-6: #0088f653;--colors-blue-light-a-7: #0083eb71;--colors-blue-light-a-8: #0084e6a1;--colors-blue-light-a-9: #0090ff;--colors-blue-light-a-10: #0086f0fa;--colors-blue-light-a-11: #006dcbf2;--colors-blue-light-a-12: #002359ee;--colors-blue-light-p3-1: color(display-p3 .986 .992 .999);--colors-blue-light-p3-2: color(display-p3 .96 .979 .998);--colors-blue-light-p3-3: color(display-p3 .912 .956 .991);--colors-blue-light-p3-4: color(display-p3 .853 .932 1);--colors-blue-light-p3-5: color(display-p3 .788 .894 .998);--colors-blue-light-p3-6: color(display-p3 .709 .843 .976);--colors-blue-light-p3-7: color(display-p3 .606 .777 .947);--colors-blue-light-p3-8: color(display-p3 .451 .688 .917);--colors-blue-light-p3-9: color(display-p3 .247 .556 .969);--colors-blue-light-p3-10: color(display-p3 .234 .523 .912);--colors-blue-light-p3-11: color(display-p3 .15 .44 .84);--colors-blue-light-p3-12: color(display-p3 .102 .193 .379);--colors-blue-light-p3-a-1: color(display-p3 .024 .514 1 / .016);--colors-blue-light-p3-a-2: color(display-p3 .024 .514 .906 / .04);--colors-blue-light-p3-a-3: color(display-p3 .012 .506 .914 / .087);--colors-blue-light-p3-a-4: color(display-p3 .008 .545 1 / .146);--colors-blue-light-p3-a-5: color(display-p3 .004 .502 .984 / .212);--colors-blue-light-p3-a-6: color(display-p3 .004 .463 .922 / .291);--colors-blue-light-p3-a-7: color(display-p3 .004 .431 .863 / .393);--colors-blue-light-p3-a-8: color(display-p3 0 .427 .851 / .55);--colors-blue-light-p3-a-9: color(display-p3 0 .412 .961 / .753);--colors-blue-light-p3-a-10: color(display-p3 0 .376 .886 / .765);--colors-blue-light-p3-a-11: color(display-p3 .15 .44 .84);--colors-blue-light-p3-a-12: color(display-p3 .102 .193 .379);--colors-blue-dark-1: #0d1520;--colors-blue-dark-2: #111927;--colors-blue-dark-3: #0d2847;--colors-blue-dark-4: #003362;--colors-blue-dark-5: #004074;--colors-blue-dark-6: #104d87;--colors-blue-dark-7: #205d9e;--colors-blue-dark-8: #2870bd;--colors-blue-dark-9: #0090ff;--colors-blue-dark-10: #3b9eff;--colors-blue-dark-11: #70b8ff;--colors-blue-dark-12: #c2e6ff;--colors-blue-dark-a-1: #004df211;--colors-blue-dark-a-2: #1166fb18;--colors-blue-dark-a-3: #0077ff3a;--colors-blue-dark-a-4: #0075ff57;--colors-blue-dark-a-5: #0081fd6b;--colors-blue-dark-a-6: #0f89fd7f;--colors-blue-dark-a-7: #2a91fe98;--colors-blue-dark-a-8: #3094feb9;--colors-blue-dark-a-9: #0090ff;--colors-blue-dark-a-10: #3b9eff;--colors-blue-dark-a-11: #70b8ff;--colors-blue-dark-a-12: #c2e6ff;--colors-blue-dark-p3-1: color(display-p3 .057 .081 .122);--colors-blue-dark-p3-2: color(display-p3 .072 .098 .147);--colors-blue-dark-p3-3: color(display-p3 .078 .154 .27);--colors-blue-dark-p3-4: color(display-p3 .033 .197 .37);--colors-blue-dark-p3-5: color(display-p3 .08 .245 .441);--colors-blue-dark-p3-6: color(display-p3 .14 .298 .511);--colors-blue-dark-p3-7: color(display-p3 .195 .361 .6);--colors-blue-dark-p3-8: color(display-p3 .239 .434 .72);--colors-blue-dark-p3-9: color(display-p3 .247 .556 .969);--colors-blue-dark-p3-10: color(display-p3 .344 .612 .973);--colors-blue-dark-p3-11: color(display-p3 .49 .72 1);--colors-blue-dark-p3-12: color(display-p3 .788 .898 .99);--colors-blue-dark-p3-a-1: color(display-p3 0 .333 1 / .059);--colors-blue-dark-p3-a-2: color(display-p3 .114 .435 .988 / .085);--colors-blue-dark-p3-a-3: color(display-p3 .122 .463 1 / .219);--colors-blue-dark-p3-a-4: color(display-p3 0 .467 1 / .324);--colors-blue-dark-p3-a-5: color(display-p3 .098 .51 1 / .4);--colors-blue-dark-p3-a-6: color(display-p3 .224 .557 1 / .475);--colors-blue-dark-p3-a-7: color(display-p3 .294 .584 1 / .572);--colors-blue-dark-p3-a-8: color(display-p3 .314 .592 1 / .702);--colors-blue-dark-p3-a-9: color(display-p3 .251 .573 .996 / .967);--colors-blue-dark-p3-a-10: color(display-p3 .357 .631 1 / .971);--colors-blue-dark-p3-a-11: color(display-p3 .49 .72 1);--colors-blue-dark-p3-a-12: color(display-p3 .788 .898 .99);--colors-blue-a-1: var(--colors-blue-light-a-1);--colors-blue-a-2: var(--colors-blue-light-a-2);--colors-blue-a-3: var(--colors-blue-light-a-3);--colors-blue-a-4: var(--colors-blue-light-a-4);--colors-blue-a-5: var(--colors-blue-light-a-5);--colors-blue-a-6: var(--colors-blue-light-a-6);--colors-blue-a-7: var(--colors-blue-light-a-7);--colors-blue-a-8: var(--colors-blue-light-a-8);--colors-blue-a-9: var(--colors-blue-light-a-9);--colors-blue-a-10: var(--colors-blue-light-a-10);--colors-blue-a-11: var(--colors-blue-light-a-11);--colors-blue-a-12: var(--colors-blue-light-a-12);--colors-blue-p3-1: var(--colors-blue-light-p3-1);--colors-blue-p3-2: var(--colors-blue-light-p3-2);--colors-blue-p3-3: var(--colors-blue-light-p3-3);--colors-blue-p3-4: var(--colors-blue-light-p3-4);--colors-blue-p3-5: var(--colors-blue-light-p3-5);--colors-blue-p3-6: var(--colors-blue-light-p3-6);--colors-blue-p3-7: var(--colors-blue-light-p3-7);--colors-blue-p3-8: var(--colors-blue-light-p3-8);--colors-blue-p3-9: var(--colors-blue-light-p3-9);--colors-blue-p3-10: var(--colors-blue-light-p3-10);--colors-blue-p3-11: var(--colors-blue-light-p3-11);--colors-blue-p3-12: var(--colors-blue-light-p3-12);--colors-blue-p3-a-1: var(--colors-blue-light-p3-a-1);--colors-blue-p3-a-2: var(--colors-blue-light-p3-a-2);--colors-blue-p3-a-3: var(--colors-blue-light-p3-a-3);--colors-blue-p3-a-4: var(--colors-blue-light-p3-a-4);--colors-blue-p3-a-5: var(--colors-blue-light-p3-a-5);--colors-blue-p3-a-6: var(--colors-blue-light-p3-a-6);--colors-blue-p3-a-7: var(--colors-blue-light-p3-a-7);--colors-blue-p3-a-8: var(--colors-blue-light-p3-a-8);--colors-blue-p3-a-9: var(--colors-blue-light-p3-a-9);--colors-blue-p3-a-10: var(--colors-blue-light-p3-a-10);--colors-blue-p3-a-11: var(--colors-blue-light-p3-a-11);--colors-blue-p3-a-12: var(--colors-blue-light-p3-a-12);--colors-crimson-1: var(--colors-crimson-light-1);--colors-crimson-2: var(--colors-crimson-light-2);--colors-crimson-3: var(--colors-crimson-light-3);--colors-crimson-4: var(--colors-crimson-light-4);--colors-crimson-5: var(--colors-crimson-light-5);--colors-crimson-6: var(--colors-crimson-light-6);--colors-crimson-7: var(--colors-crimson-light-7);--colors-crimson-8: var(--colors-crimson-light-8);--colors-crimson-9: var(--colors-crimson-light-9);--colors-crimson-10: var(--colors-crimson-light-10);--colors-crimson-11: var(--colors-crimson-light-11);--colors-crimson-12: var(--colors-crimson-light-12);--colors-crimson-light-1: #fffcfd;--colors-crimson-light-2: #fef7f9;--colors-crimson-light-3: #ffe9f0;--colors-crimson-light-4: #fedce7;--colors-crimson-light-5: #facedd;--colors-crimson-light-6: #f3bed1;--colors-crimson-light-7: #eaacc3;--colors-crimson-light-8: #e093b2;--colors-crimson-light-9: #e93d82;--colors-crimson-light-10: #df3478;--colors-crimson-light-11: #cb1d63;--colors-crimson-light-12: #621639;--colors-crimson-light-a-1: #ff005503;--colors-crimson-light-a-2: #e0004008;--colors-crimson-light-a-3: #ff005216;--colors-crimson-light-a-4: #f8005123;--colors-crimson-light-a-5: #e5004f31;--colors-crimson-light-a-6: #d0004b41;--colors-crimson-light-a-7: #bf004753;--colors-crimson-light-a-8: #b6004a6c;--colors-crimson-light-a-9: #e2005bc2;--colors-crimson-light-a-10: #d70056cb;--colors-crimson-light-a-11: #c4004fe2;--colors-crimson-light-a-12: #530026e9;--colors-crimson-light-p3-1: color(display-p3 .998 .989 .992);--colors-crimson-light-p3-2: color(display-p3 .991 .969 .976);--colors-crimson-light-p3-3: color(display-p3 .987 .917 .941);--colors-crimson-light-p3-4: color(display-p3 .975 .866 .904);--colors-crimson-light-p3-5: color(display-p3 .953 .813 .864);--colors-crimson-light-p3-6: color(display-p3 .921 .755 .817);--colors-crimson-light-p3-7: color(display-p3 .88 .683 .761);--colors-crimson-light-p3-8: color(display-p3 .834 .592 .694);--colors-crimson-light-p3-9: color(display-p3 .843 .298 .507);--colors-crimson-light-p3-10: color(display-p3 .807 .266 .468);--colors-crimson-light-p3-11: color(display-p3 .731 .195 .388);--colors-crimson-light-p3-12: color(display-p3 .352 .111 .221);--colors-crimson-light-p3-a-1: color(display-p3 .675 .024 .349 / .012);--colors-crimson-light-p3-a-2: color(display-p3 .757 .02 .267 / .032);--colors-crimson-light-p3-a-3: color(display-p3 .859 .008 .294 / .083);--colors-crimson-light-p3-a-4: color(display-p3 .827 .008 .298 / .134);--colors-crimson-light-p3-a-5: color(display-p3 .753 .008 .275 / .189);--colors-crimson-light-p3-a-6: color(display-p3 .682 .004 .247 / .244);--colors-crimson-light-p3-a-7: color(display-p3 .62 .004 .251 / .318);--colors-crimson-light-p3-a-8: color(display-p3 .6 .004 .251 / .408);--colors-crimson-light-p3-a-9: color(display-p3 .776 0 .298 / .702);--colors-crimson-light-p3-a-10: color(display-p3 .737 0 .275 / .734);--colors-crimson-light-p3-a-11: color(display-p3 .731 .195 .388);--colors-crimson-light-p3-a-12: color(display-p3 .352 .111 .221);--colors-crimson-dark-1: #191114;--colors-crimson-dark-2: #201318;--colors-crimson-dark-3: #381525;--colors-crimson-dark-4: #4d122f;--colors-crimson-dark-5: #5c1839;--colors-crimson-dark-6: #6d2545;--colors-crimson-dark-7: #873356;--colors-crimson-dark-8: #b0436e;--colors-crimson-dark-9: #e93d82;--colors-crimson-dark-10: #ee518a;--colors-crimson-dark-11: #ff92ad;--colors-crimson-dark-12: #fdd3e8;--colors-crimson-dark-a-1: #f4126709;--colors-crimson-dark-a-2: #f22f7a11;--colors-crimson-dark-a-3: #fe2a8b2a;--colors-crimson-dark-a-4: #fd158741;--colors-crimson-dark-a-5: #fd278f51;--colors-crimson-dark-a-6: #fe459763;--colors-crimson-dark-a-7: #fd559b7f;--colors-crimson-dark-a-8: #fe5b9bab;--colors-crimson-dark-a-9: #fe418de8;--colors-crimson-dark-a-10: #ff5693ed;--colors-crimson-dark-a-11: #ff92ad;--colors-crimson-dark-a-12: #ffd5eafd;--colors-crimson-dark-p3-1: color(display-p3 .093 .068 .078);--colors-crimson-dark-p3-2: color(display-p3 .117 .078 .095);--colors-crimson-dark-p3-3: color(display-p3 .203 .091 .143);--colors-crimson-dark-p3-4: color(display-p3 .277 .087 .182);--colors-crimson-dark-p3-5: color(display-p3 .332 .115 .22);--colors-crimson-dark-p3-6: color(display-p3 .394 .162 .268);--colors-crimson-dark-p3-7: color(display-p3 .489 .222 .336);--colors-crimson-dark-p3-8: color(display-p3 .638 .289 .429);--colors-crimson-dark-p3-9: color(display-p3 .843 .298 .507);--colors-crimson-dark-p3-10: color(display-p3 .864 .364 .539);--colors-crimson-dark-p3-11: color(display-p3 1 .56 .66);--colors-crimson-dark-p3-12: color(display-p3 .966 .834 .906);--colors-crimson-dark-p3-a-1: color(display-p3 .984 .071 .463 / .03);--colors-crimson-dark-p3-a-2: color(display-p3 .996 .282 .569 / .055);--colors-crimson-dark-p3-a-3: color(display-p3 .996 .227 .573 / .148);--colors-crimson-dark-p3-a-4: color(display-p3 1 .157 .569 / .227);--colors-crimson-dark-p3-a-5: color(display-p3 1 .231 .604 / .286);--colors-crimson-dark-p3-a-6: color(display-p3 1 .337 .643 / .349);--colors-crimson-dark-p3-a-7: color(display-p3 1 .416 .663 / .454);--colors-crimson-dark-p3-a-8: color(display-p3 .996 .427 .651 / .614);--colors-crimson-dark-p3-a-9: color(display-p3 1 .345 .596 / .832);--colors-crimson-dark-p3-a-10: color(display-p3 1 .42 .62 / .853);--colors-crimson-dark-p3-a-11: color(display-p3 1 .56 .66);--colors-crimson-dark-p3-a-12: color(display-p3 .966 .834 .906);--colors-crimson-a-1: var(--colors-crimson-light-a-1);--colors-crimson-a-2: var(--colors-crimson-light-a-2);--colors-crimson-a-3: var(--colors-crimson-light-a-3);--colors-crimson-a-4: var(--colors-crimson-light-a-4);--colors-crimson-a-5: var(--colors-crimson-light-a-5);--colors-crimson-a-6: var(--colors-crimson-light-a-6);--colors-crimson-a-7: var(--colors-crimson-light-a-7);--colors-crimson-a-8: var(--colors-crimson-light-a-8);--colors-crimson-a-9: var(--colors-crimson-light-a-9);--colors-crimson-a-10: var(--colors-crimson-light-a-10);--colors-crimson-a-11: var(--colors-crimson-light-a-11);--colors-crimson-a-12: var(--colors-crimson-light-a-12);--colors-crimson-p3-1: var(--colors-crimson-light-p3-1);--colors-crimson-p3-2: var(--colors-crimson-light-p3-2);--colors-crimson-p3-3: var(--colors-crimson-light-p3-3);--colors-crimson-p3-4: var(--colors-crimson-light-p3-4);--colors-crimson-p3-5: var(--colors-crimson-light-p3-5);--colors-crimson-p3-6: var(--colors-crimson-light-p3-6);--colors-crimson-p3-7: var(--colors-crimson-light-p3-7);--colors-crimson-p3-8: var(--colors-crimson-light-p3-8);--colors-crimson-p3-9: var(--colors-crimson-light-p3-9);--colors-crimson-p3-10: var(--colors-crimson-light-p3-10);--colors-crimson-p3-11: var(--colors-crimson-light-p3-11);--colors-crimson-p3-12: var(--colors-crimson-light-p3-12);--colors-crimson-p3-a-1: var(--colors-crimson-light-p3-a-1);--colors-crimson-p3-a-2: var(--colors-crimson-light-p3-a-2);--colors-crimson-p3-a-3: var(--colors-crimson-light-p3-a-3);--colors-crimson-p3-a-4: var(--colors-crimson-light-p3-a-4);--colors-crimson-p3-a-5: var(--colors-crimson-light-p3-a-5);--colors-crimson-p3-a-6: var(--colors-crimson-light-p3-a-6);--colors-crimson-p3-a-7: var(--colors-crimson-light-p3-a-7);--colors-crimson-p3-a-8: var(--colors-crimson-light-p3-a-8);--colors-crimson-p3-a-9: var(--colors-crimson-light-p3-a-9);--colors-crimson-p3-a-10: var(--colors-crimson-light-p3-a-10);--colors-crimson-p3-a-11: var(--colors-crimson-light-p3-a-11);--colors-crimson-p3-a-12: var(--colors-crimson-light-p3-a-12);--colors-grass-1: var(--colors-grass-light-1);--colors-grass-2: var(--colors-grass-light-2);--colors-grass-3: var(--colors-grass-light-3);--colors-grass-4: var(--colors-grass-light-4);--colors-grass-5: var(--colors-grass-light-5);--colors-grass-6: var(--colors-grass-light-6);--colors-grass-7: var(--colors-grass-light-7);--colors-grass-8: var(--colors-grass-light-8);--colors-grass-9: var(--colors-grass-light-9);--colors-grass-10: var(--colors-grass-light-10);--colors-grass-11: var(--colors-grass-light-11);--colors-grass-12: var(--colors-grass-light-12);--colors-grass-light-1: #fbfefb;--colors-grass-light-2: #f5fbf5;--colors-grass-light-3: #e9f6e9;--colors-grass-light-4: #daf1db;--colors-grass-light-5: #c9e8ca;--colors-grass-light-6: #b2ddb5;--colors-grass-light-7: #94ce9a;--colors-grass-light-8: #65ba74;--colors-grass-light-9: #46a758;--colors-grass-light-10: #3e9b4f;--colors-grass-light-11: #2a7e3b;--colors-grass-light-12: #203c25;--colors-grass-light-a-1: #00c00004;--colors-grass-light-a-2: #0099000a;--colors-grass-light-a-3: #00970016;--colors-grass-light-a-4: #009f0725;--colors-grass-light-a-5: #00930536;--colors-grass-light-a-6: #008f0a4d;--colors-grass-light-a-7: #018b0f6b;--colors-grass-light-a-8: #008d199a;--colors-grass-light-a-9: #008619b9;--colors-grass-light-a-10: #007b17c1;--colors-grass-light-a-11: #006514d5;--colors-grass-light-a-12: #002006df;--colors-grass-light-p3-1: color(display-p3 .986 .996 .985);--colors-grass-light-p3-2: color(display-p3 .966 .983 .964);--colors-grass-light-p3-3: color(display-p3 .923 .965 .917);--colors-grass-light-p3-4: color(display-p3 .872 .94 .865);--colors-grass-light-p3-5: color(display-p3 .811 .908 .802);--colors-grass-light-p3-6: color(display-p3 .733 .864 .724);--colors-grass-light-p3-7: color(display-p3 .628 .803 .622);--colors-grass-light-p3-8: color(display-p3 .477 .72 .482);--colors-grass-light-p3-9: color(display-p3 .38 .647 .378);--colors-grass-light-p3-10: color(display-p3 .344 .598 .342);--colors-grass-light-p3-11: color(display-p3 .263 .488 .261);--colors-grass-light-p3-12: color(display-p3 .151 .233 .153);--colors-grass-light-p3-a-1: color(display-p3 .024 .757 .024 / .016);--colors-grass-light-p3-a-2: color(display-p3 .024 .565 .024 / .036);--colors-grass-light-p3-a-3: color(display-p3 .059 .576 .008 / .083);--colors-grass-light-p3-a-4: color(display-p3 .035 .565 .008 / .134);--colors-grass-light-p3-a-5: color(display-p3 .047 .545 .008 / .197);--colors-grass-light-p3-a-6: color(display-p3 .031 .502 .004 / .275);--colors-grass-light-p3-a-7: color(display-p3 .012 .482 .004 / .377);--colors-grass-light-p3-a-8: color(display-p3 0 .467 .008 / .522);--colors-grass-light-p3-a-9: color(display-p3 .008 .435 0 / .624);--colors-grass-light-p3-a-10: color(display-p3 .008 .388 0 / .659);--colors-grass-light-p3-a-11: color(display-p3 .263 .488 .261);--colors-grass-light-p3-a-12: color(display-p3 .151 .233 .153);--colors-grass-dark-1: #0e1511;--colors-grass-dark-2: #141a15;--colors-grass-dark-3: #1b2a1e;--colors-grass-dark-4: #1d3a24;--colors-grass-dark-5: #25482d;--colors-grass-dark-6: #2d5736;--colors-grass-dark-7: #366740;--colors-grass-dark-8: #3e7949;--colors-grass-dark-9: #46a758;--colors-grass-dark-10: #53b365;--colors-grass-dark-11: #71d083;--colors-grass-dark-12: #c2f0c2;--colors-grass-dark-a-1: #00de1205;--colors-grass-dark-a-2: #5ef7780a;--colors-grass-dark-a-3: #70fe8c1b;--colors-grass-dark-a-4: #57ff802c;--colors-grass-dark-a-5: #68ff8b3b;--colors-grass-dark-a-6: #71ff8f4b;--colors-grass-dark-a-7: #77fd925d;--colors-grass-dark-a-8: #77fd9070;--colors-grass-dark-a-9: #65ff82a1;--colors-grass-dark-a-10: #72ff8dae;--colors-grass-dark-a-11: #89ff9fcd;--colors-grass-dark-a-12: #ceffceef;--colors-grass-dark-p3-1: color(display-p3 .062 .083 .067);--colors-grass-dark-p3-2: color(display-p3 .083 .103 .085);--colors-grass-dark-p3-3: color(display-p3 .118 .163 .122);--colors-grass-dark-p3-4: color(display-p3 .142 .225 .15);--colors-grass-dark-p3-5: color(display-p3 .178 .279 .186);--colors-grass-dark-p3-6: color(display-p3 .217 .337 .224);--colors-grass-dark-p3-7: color(display-p3 .258 .4 .264);--colors-grass-dark-p3-8: color(display-p3 .302 .47 .305);--colors-grass-dark-p3-9: color(display-p3 .38 .647 .378);--colors-grass-dark-p3-10: color(display-p3 .426 .694 .426);--colors-grass-dark-p3-11: color(display-p3 .535 .807 .542);--colors-grass-dark-p3-12: color(display-p3 .797 .936 .776);--colors-grass-dark-p3-a-1: color(display-p3 0 .992 .071 / .017);--colors-grass-dark-p3-a-2: color(display-p3 .482 .996 .584 / .038);--colors-grass-dark-p3-a-3: color(display-p3 .549 .992 .588 / .106);--colors-grass-dark-p3-a-4: color(display-p3 .51 .996 .557 / .169);--colors-grass-dark-p3-a-5: color(display-p3 .553 1 .588 / .227);--colors-grass-dark-p3-a-6: color(display-p3 .584 1 .608 / .29);--colors-grass-dark-p3-a-7: color(display-p3 .604 1 .616 / .358);--colors-grass-dark-p3-a-8: color(display-p3 .608 1 .62 / .433);--colors-grass-dark-p3-a-9: color(display-p3 .573 1 .569 / .622);--colors-grass-dark-p3-a-10: color(display-p3 .6 .996 .6 / .673);--colors-grass-dark-p3-a-11: color(display-p3 .535 .807 .542);--colors-grass-dark-p3-a-12: color(display-p3 .797 .936 .776);--colors-grass-a-1: var(--colors-grass-light-a-1);--colors-grass-a-2: var(--colors-grass-light-a-2);--colors-grass-a-3: var(--colors-grass-light-a-3);--colors-grass-a-4: var(--colors-grass-light-a-4);--colors-grass-a-5: var(--colors-grass-light-a-5);--colors-grass-a-6: var(--colors-grass-light-a-6);--colors-grass-a-7: var(--colors-grass-light-a-7);--colors-grass-a-8: var(--colors-grass-light-a-8);--colors-grass-a-9: var(--colors-grass-light-a-9);--colors-grass-a-10: var(--colors-grass-light-a-10);--colors-grass-a-11: var(--colors-grass-light-a-11);--colors-grass-a-12: var(--colors-grass-light-a-12);--colors-grass-p3-1: var(--colors-grass-light-p3-1);--colors-grass-p3-2: var(--colors-grass-light-p3-2);--colors-grass-p3-3: var(--colors-grass-light-p3-3);--colors-grass-p3-4: var(--colors-grass-light-p3-4);--colors-grass-p3-5: var(--colors-grass-light-p3-5);--colors-grass-p3-6: var(--colors-grass-light-p3-6);--colors-grass-p3-7: var(--colors-grass-light-p3-7);--colors-grass-p3-8: var(--colors-grass-light-p3-8);--colors-grass-p3-9: var(--colors-grass-light-p3-9);--colors-grass-p3-10: var(--colors-grass-light-p3-10);--colors-grass-p3-11: var(--colors-grass-light-p3-11);--colors-grass-p3-12: var(--colors-grass-light-p3-12);--colors-grass-p3-a-1: var(--colors-grass-light-p3-a-1);--colors-grass-p3-a-2: var(--colors-grass-light-p3-a-2);--colors-grass-p3-a-3: var(--colors-grass-light-p3-a-3);--colors-grass-p3-a-4: var(--colors-grass-light-p3-a-4);--colors-grass-p3-a-5: var(--colors-grass-light-p3-a-5);--colors-grass-p3-a-6: var(--colors-grass-light-p3-a-6);--colors-grass-p3-a-7: var(--colors-grass-light-p3-a-7);--colors-grass-p3-a-8: var(--colors-grass-light-p3-a-8);--colors-grass-p3-a-9: var(--colors-grass-light-p3-a-9);--colors-grass-p3-a-10: var(--colors-grass-light-p3-a-10);--colors-grass-p3-a-11: var(--colors-grass-light-p3-a-11);--colors-grass-p3-a-12: var(--colors-grass-light-p3-a-12);--colors-indigo-1: var(--colors-indigo-light-1);--colors-indigo-2: var(--colors-indigo-light-2);--colors-indigo-3: var(--colors-indigo-light-3);--colors-indigo-4: var(--colors-indigo-light-4);--colors-indigo-5: var(--colors-indigo-light-5);--colors-indigo-6: var(--colors-indigo-light-6);--colors-indigo-7: var(--colors-indigo-light-7);--colors-indigo-8: var(--colors-indigo-light-8);--colors-indigo-9: var(--colors-indigo-light-9);--colors-indigo-10: var(--colors-indigo-light-10);--colors-indigo-11: var(--colors-indigo-light-11);--colors-indigo-12: var(--colors-indigo-light-12);--colors-indigo-light-1: #fdfdfe;--colors-indigo-light-2: #f7f9ff;--colors-indigo-light-3: #edf2fe;--colors-indigo-light-4: #e1e9ff;--colors-indigo-light-5: #d2deff;--colors-indigo-light-6: #c1d0ff;--colors-indigo-light-7: #abbdf9;--colors-indigo-light-8: #8da4ef;--colors-indigo-light-9: #3e63dd;--colors-indigo-light-10: #3358d4;--colors-indigo-light-11: #3a5bc7;--colors-indigo-light-12: #1f2d5c;--colors-indigo-light-a-1: #00008002;--colors-indigo-light-a-2: #0040ff08;--colors-indigo-light-a-3: #0047f112;--colors-indigo-light-a-4: #0044ff1e;--colors-indigo-light-a-5: #0044ff2d;--colors-indigo-light-a-6: #003eff3e;--colors-indigo-light-a-7: #0037ed54;--colors-indigo-light-a-8: #0034dc72;--colors-indigo-light-a-9: #0031d2c1;--colors-indigo-light-a-10: #002ec9cc;--colors-indigo-light-a-11: #002bb7c5;--colors-indigo-light-a-12: #001046e0;--colors-indigo-light-p3-1: color(display-p3 .992 .992 .996);--colors-indigo-light-p3-2: color(display-p3 .971 .977 .998);--colors-indigo-light-p3-3: color(display-p3 .933 .948 .992);--colors-indigo-light-p3-4: color(display-p3 .885 .914 1);--colors-indigo-light-p3-5: color(display-p3 .831 .87 1);--colors-indigo-light-p3-6: color(display-p3 .767 .814 .995);--colors-indigo-light-p3-7: color(display-p3 .685 .74 .957);--colors-indigo-light-p3-8: color(display-p3 .569 .639 .916);--colors-indigo-light-p3-9: color(display-p3 .276 .384 .837);--colors-indigo-light-p3-10: color(display-p3 .234 .343 .801);--colors-indigo-light-p3-11: color(display-p3 .256 .354 .755);--colors-indigo-light-p3-12: color(display-p3 .133 .175 .348);--colors-indigo-light-p3-a-1: color(display-p3 .02 .02 .51 / .008);--colors-indigo-light-p3-a-2: color(display-p3 .024 .161 .863 / .028);--colors-indigo-light-p3-a-3: color(display-p3 .008 .239 .886 / .067);--colors-indigo-light-p3-a-4: color(display-p3 .004 .247 1 / .114);--colors-indigo-light-p3-a-5: color(display-p3 .004 .235 1 / .169);--colors-indigo-light-p3-a-6: color(display-p3 .004 .208 .984 / .232);--colors-indigo-light-p3-a-7: color(display-p3 .004 .176 .863 / .314);--colors-indigo-light-p3-a-8: color(display-p3 .004 .165 .812 / .432);--colors-indigo-light-p3-a-9: color(display-p3 0 .153 .773 / .726);--colors-indigo-light-p3-a-10: color(display-p3 0 .137 .737 / .765);--colors-indigo-light-p3-a-11: color(display-p3 .256 .354 .755);--colors-indigo-light-p3-a-12: color(display-p3 .133 .175 .348);--colors-indigo-dark-1: #11131f;--colors-indigo-dark-2: #141726;--colors-indigo-dark-3: #182449;--colors-indigo-dark-4: #1d2e62;--colors-indigo-dark-5: #253974;--colors-indigo-dark-6: #304384;--colors-indigo-dark-7: #3a4f97;--colors-indigo-dark-8: #435db1;--colors-indigo-dark-9: #3e63dd;--colors-indigo-dark-10: #5472e4;--colors-indigo-dark-11: #9eb1ff;--colors-indigo-dark-12: #d6e1ff;--colors-indigo-dark-a-1: #1133ff0f;--colors-indigo-dark-a-2: #3354fa17;--colors-indigo-dark-a-3: #2f62ff3c;--colors-indigo-dark-a-4: #3566ff57;--colors-indigo-dark-a-5: #4171fd6b;--colors-indigo-dark-a-6: #5178fd7c;--colors-indigo-dark-a-7: #5a7fff90;--colors-indigo-dark-a-8: #5b81feac;--colors-indigo-dark-a-9: #4671ffdb;--colors-indigo-dark-a-10: #5c7efee3;--colors-indigo-dark-a-11: #9eb1ff;--colors-indigo-dark-a-12: #d6e1ff;--colors-indigo-dark-p3-1: color(display-p3 .068 .074 .118);--colors-indigo-dark-p3-2: color(display-p3 .081 .089 .144);--colors-indigo-dark-p3-3: color(display-p3 .105 .141 .275);--colors-indigo-dark-p3-4: color(display-p3 .129 .18 .369);--colors-indigo-dark-p3-5: color(display-p3 .163 .22 .439);--colors-indigo-dark-p3-6: color(display-p3 .203 .262 .5);--colors-indigo-dark-p3-7: color(display-p3 .245 .309 .575);--colors-indigo-dark-p3-8: color(display-p3 .285 .362 .674);--colors-indigo-dark-p3-9: color(display-p3 .276 .384 .837);--colors-indigo-dark-p3-10: color(display-p3 .354 .445 .866);--colors-indigo-dark-p3-11: color(display-p3 .63 .69 1);--colors-indigo-dark-p3-12: color(display-p3 .848 .881 .99);--colors-indigo-dark-p3-a-1: color(display-p3 .071 .212 .996 / .055);--colors-indigo-dark-p3-a-2: color(display-p3 .251 .345 .988 / .085);--colors-indigo-dark-p3-a-3: color(display-p3 .243 .404 1 / .223);--colors-indigo-dark-p3-a-4: color(display-p3 .263 .42 1 / .324);--colors-indigo-dark-p3-a-5: color(display-p3 .314 .451 1 / .4);--colors-indigo-dark-p3-a-6: color(display-p3 .361 .49 1 / .467);--colors-indigo-dark-p3-a-7: color(display-p3 .388 .51 1 / .547);--colors-indigo-dark-p3-a-8: color(display-p3 .404 .518 1 / .652);--colors-indigo-dark-p3-a-9: color(display-p3 .318 .451 1 / .824);--colors-indigo-dark-p3-a-10: color(display-p3 .404 .506 1 / .858);--colors-indigo-dark-p3-a-11: color(display-p3 .63 .69 1);--colors-indigo-dark-p3-a-12: color(display-p3 .848 .881 .99);--colors-indigo-a-1: var(--colors-indigo-light-a-1);--colors-indigo-a-2: var(--colors-indigo-light-a-2);--colors-indigo-a-3: var(--colors-indigo-light-a-3);--colors-indigo-a-4: var(--colors-indigo-light-a-4);--colors-indigo-a-5: var(--colors-indigo-light-a-5);--colors-indigo-a-6: var(--colors-indigo-light-a-6);--colors-indigo-a-7: var(--colors-indigo-light-a-7);--colors-indigo-a-8: var(--colors-indigo-light-a-8);--colors-indigo-a-9: var(--colors-indigo-light-a-9);--colors-indigo-a-10: var(--colors-indigo-light-a-10);--colors-indigo-a-11: var(--colors-indigo-light-a-11);--colors-indigo-a-12: var(--colors-indigo-light-a-12);--colors-indigo-p3-1: var(--colors-indigo-light-p3-1);--colors-indigo-p3-2: var(--colors-indigo-light-p3-2);--colors-indigo-p3-3: var(--colors-indigo-light-p3-3);--colors-indigo-p3-4: var(--colors-indigo-light-p3-4);--colors-indigo-p3-5: var(--colors-indigo-light-p3-5);--colors-indigo-p3-6: var(--colors-indigo-light-p3-6);--colors-indigo-p3-7: var(--colors-indigo-light-p3-7);--colors-indigo-p3-8: var(--colors-indigo-light-p3-8);--colors-indigo-p3-9: var(--colors-indigo-light-p3-9);--colors-indigo-p3-10: var(--colors-indigo-light-p3-10);--colors-indigo-p3-11: var(--colors-indigo-light-p3-11);--colors-indigo-p3-12: var(--colors-indigo-light-p3-12);--colors-indigo-p3-a-1: var(--colors-indigo-light-p3-a-1);--colors-indigo-p3-a-2: var(--colors-indigo-light-p3-a-2);--colors-indigo-p3-a-3: var(--colors-indigo-light-p3-a-3);--colors-indigo-p3-a-4: var(--colors-indigo-light-p3-a-4);--colors-indigo-p3-a-5: var(--colors-indigo-light-p3-a-5);--colors-indigo-p3-a-6: var(--colors-indigo-light-p3-a-6);--colors-indigo-p3-a-7: var(--colors-indigo-light-p3-a-7);--colors-indigo-p3-a-8: var(--colors-indigo-light-p3-a-8);--colors-indigo-p3-a-9: var(--colors-indigo-light-p3-a-9);--colors-indigo-p3-a-10: var(--colors-indigo-light-p3-a-10);--colors-indigo-p3-a-11: var(--colors-indigo-light-p3-a-11);--colors-indigo-p3-a-12: var(--colors-indigo-light-p3-a-12);--colors-lime-1: var(--colors-lime-light-1);--colors-lime-2: var(--colors-lime-light-2);--colors-lime-3: var(--colors-lime-light-3);--colors-lime-4: var(--colors-lime-light-4);--colors-lime-5: var(--colors-lime-light-5);--colors-lime-6: var(--colors-lime-light-6);--colors-lime-7: var(--colors-lime-light-7);--colors-lime-8: var(--colors-lime-light-8);--colors-lime-9: var(--colors-lime-light-9);--colors-lime-10: var(--colors-lime-light-10);--colors-lime-11: var(--colors-lime-light-11);--colors-lime-12: var(--colors-lime-light-12);--colors-lime-light-1: #fcfdfa;--colors-lime-light-2: #f8faf3;--colors-lime-light-3: #eef6d6;--colors-lime-light-4: #e2f0bd;--colors-lime-light-5: #d3e7a6;--colors-lime-light-6: #c2da91;--colors-lime-light-7: #abc978;--colors-lime-light-8: #8db654;--colors-lime-light-9: #bdee63;--colors-lime-light-10: #b0e64c;--colors-lime-light-11: #5c7c2f;--colors-lime-light-12: #37401c;--colors-lime-light-a-1: #66990005;--colors-lime-light-a-2: #6b95000c;--colors-lime-light-a-3: #96c80029;--colors-lime-light-a-4: #8fc60042;--colors-lime-light-a-5: #81bb0059;--colors-lime-light-a-6: #72aa006e;--colors-lime-light-a-7: #61990087;--colors-lime-light-a-8: #559200ab;--colors-lime-light-a-9: #93e4009c;--colors-lime-light-a-10: #8fdc00b3;--colors-lime-light-a-11: #375f00d0;--colors-lime-light-a-12: #1e2900e3;--colors-lime-light-p3-1: color(display-p3 .989 .992 .981);--colors-lime-light-p3-2: color(display-p3 .975 .98 .954);--colors-lime-light-p3-3: color(display-p3 .939 .965 .851);--colors-lime-light-p3-4: color(display-p3 .896 .94 .76);--colors-lime-light-p3-5: color(display-p3 .843 .903 .678);--colors-lime-light-p3-6: color(display-p3 .778 .852 .599);--colors-lime-light-p3-7: color(display-p3 .694 .784 .508);--colors-lime-light-p3-8: color(display-p3 .585 .707 .378);--colors-lime-light-p3-9: color(display-p3 .78 .928 .466);--colors-lime-light-p3-10: color(display-p3 .734 .896 .397);--colors-lime-light-p3-11: color(display-p3 .386 .482 .227);--colors-lime-light-p3-12: color(display-p3 .222 .25 .128);--colors-lime-light-p3-a-1: color(display-p3 .412 .608 .02 / .02);--colors-lime-light-p3-a-2: color(display-p3 .514 .592 .024 / .048);--colors-lime-light-p3-a-3: color(display-p3 .584 .765 .008 / .15);--colors-lime-light-p3-a-4: color(display-p3 .561 .757 .004 / .24);--colors-lime-light-p3-a-5: color(display-p3 .514 .698 .004 / .322);--colors-lime-light-p3-a-6: color(display-p3 .443 .627 0 / .4);--colors-lime-light-p3-a-7: color(display-p3 .376 .561 .004 / .491);--colors-lime-light-p3-a-8: color(display-p3 .333 .529 0 / .624);--colors-lime-light-p3-a-9: color(display-p3 .588 .867 0 / .534);--colors-lime-light-p3-a-10: color(display-p3 .561 .827 0 / .604);--colors-lime-light-p3-a-11: color(display-p3 .386 .482 .227);--colors-lime-light-p3-a-12: color(display-p3 .222 .25 .128);--colors-lime-dark-1: #11130c;--colors-lime-dark-2: #151a10;--colors-lime-dark-3: #1f2917;--colors-lime-dark-4: #29371d;--colors-lime-dark-5: #334423;--colors-lime-dark-6: #3d522a;--colors-lime-dark-7: #496231;--colors-lime-dark-8: #577538;--colors-lime-dark-9: #bdee63;--colors-lime-dark-10: #d4ff70;--colors-lime-dark-11: #bde56c;--colors-lime-dark-12: #e3f7ba;--colors-lime-dark-a-1: #11bb0003;--colors-lime-dark-a-2: #78f7000a;--colors-lime-dark-a-3: #9bfd4c1a;--colors-lime-dark-a-4: #a7fe5c29;--colors-lime-dark-a-5: #affe6537;--colors-lime-dark-a-6: #b2fe6d46;--colors-lime-dark-a-7: #b6ff6f57;--colors-lime-dark-a-8: #b6fd6d6c;--colors-lime-dark-a-9: #caff69ed;--colors-lime-dark-a-10: #d4ff70;--colors-lime-dark-a-11: #d1fe77e4;--colors-lime-dark-a-12: #e9febff7;--colors-lime-dark-p3-1: color(display-p3 .067 .073 .048);--colors-lime-dark-p3-2: color(display-p3 .086 .1 .067);--colors-lime-dark-p3-3: color(display-p3 .13 .16 .099);--colors-lime-dark-p3-4: color(display-p3 .172 .214 .126);--colors-lime-dark-p3-5: color(display-p3 .213 .266 .153);--colors-lime-dark-p3-6: color(display-p3 .257 .321 .182);--colors-lime-dark-p3-7: color(display-p3 .307 .383 .215);--colors-lime-dark-p3-8: color(display-p3 .365 .456 .25);--colors-lime-dark-p3-9: color(display-p3 .78 .928 .466);--colors-lime-dark-p3-10: color(display-p3 .865 .995 .519);--colors-lime-dark-p3-11: color(display-p3 .771 .893 .485);--colors-lime-dark-p3-12: color(display-p3 .905 .966 .753);--colors-lime-dark-p3-a-1: color(display-p3 .067 .941 0 / .009);--colors-lime-dark-p3-a-2: color(display-p3 .584 .996 .071 / .038);--colors-lime-dark-p3-a-3: color(display-p3 .69 1 .38 / .101);--colors-lime-dark-p3-a-4: color(display-p3 .729 1 .435 / .16);--colors-lime-dark-p3-a-5: color(display-p3 .745 1 .471 / .215);--colors-lime-dark-p3-a-6: color(display-p3 .769 1 .482 / .274);--colors-lime-dark-p3-a-7: color(display-p3 .769 1 .506 / .341);--colors-lime-dark-p3-a-8: color(display-p3 .784 1 .51 / .416);--colors-lime-dark-p3-a-9: color(display-p3 .839 1 .502 / .925);--colors-lime-dark-p3-a-10: color(display-p3 .871 1 .522 / .996);--colors-lime-dark-p3-a-11: color(display-p3 .771 .893 .485);--colors-lime-dark-p3-a-12: color(display-p3 .905 .966 .753);--colors-lime-a-1: var(--colors-lime-light-a-1);--colors-lime-a-2: var(--colors-lime-light-a-2);--colors-lime-a-3: var(--colors-lime-light-a-3);--colors-lime-a-4: var(--colors-lime-light-a-4);--colors-lime-a-5: var(--colors-lime-light-a-5);--colors-lime-a-6: var(--colors-lime-light-a-6);--colors-lime-a-7: var(--colors-lime-light-a-7);--colors-lime-a-8: var(--colors-lime-light-a-8);--colors-lime-a-9: var(--colors-lime-light-a-9);--colors-lime-a-10: var(--colors-lime-light-a-10);--colors-lime-a-11: var(--colors-lime-light-a-11);--colors-lime-a-12: var(--colors-lime-light-a-12);--colors-lime-p3-1: var(--colors-lime-light-p3-1);--colors-lime-p3-2: var(--colors-lime-light-p3-2);--colors-lime-p3-3: var(--colors-lime-light-p3-3);--colors-lime-p3-4: var(--colors-lime-light-p3-4);--colors-lime-p3-5: var(--colors-lime-light-p3-5);--colors-lime-p3-6: var(--colors-lime-light-p3-6);--colors-lime-p3-7: var(--colors-lime-light-p3-7);--colors-lime-p3-8: var(--colors-lime-light-p3-8);--colors-lime-p3-9: var(--colors-lime-light-p3-9);--colors-lime-p3-10: var(--colors-lime-light-p3-10);--colors-lime-p3-11: var(--colors-lime-light-p3-11);--colors-lime-p3-12: var(--colors-lime-light-p3-12);--colors-lime-p3-a-1: var(--colors-lime-light-p3-a-1);--colors-lime-p3-a-2: var(--colors-lime-light-p3-a-2);--colors-lime-p3-a-3: var(--colors-lime-light-p3-a-3);--colors-lime-p3-a-4: var(--colors-lime-light-p3-a-4);--colors-lime-p3-a-5: var(--colors-lime-light-p3-a-5);--colors-lime-p3-a-6: var(--colors-lime-light-p3-a-6);--colors-lime-p3-a-7: var(--colors-lime-light-p3-a-7);--colors-lime-p3-a-8: var(--colors-lime-light-p3-a-8);--colors-lime-p3-a-9: var(--colors-lime-light-p3-a-9);--colors-lime-p3-a-10: var(--colors-lime-light-p3-a-10);--colors-lime-p3-a-11: var(--colors-lime-light-p3-a-11);--colors-lime-p3-a-12: var(--colors-lime-light-p3-a-12);--colors-orange-1: var(--colors-orange-light-1);--colors-orange-2: var(--colors-orange-light-2);--colors-orange-3: var(--colors-orange-light-3);--colors-orange-4: var(--colors-orange-light-4);--colors-orange-5: var(--colors-orange-light-5);--colors-orange-6: var(--colors-orange-light-6);--colors-orange-7: var(--colors-orange-light-7);--colors-orange-8: var(--colors-orange-light-8);--colors-orange-9: var(--colors-orange-light-9);--colors-orange-10: var(--colors-orange-light-10);--colors-orange-11: var(--colors-orange-light-11);--colors-orange-12: var(--colors-orange-light-12);--colors-orange-light-1: #fefcfb;--colors-orange-light-2: #fff7ed;--colors-orange-light-3: #ffefd6;--colors-orange-light-4: #ffdfb5;--colors-orange-light-5: #ffd19a;--colors-orange-light-6: #ffc182;--colors-orange-light-7: #f5ae73;--colors-orange-light-8: #ec9455;--colors-orange-light-9: #f76b15;--colors-orange-light-10: #ef5f00;--colors-orange-light-11: #cc4e00;--colors-orange-light-12: #582d1d;--colors-orange-light-a-1: #c0400004;--colors-orange-light-a-2: #ff8e0012;--colors-orange-light-a-3: #ff9c0029;--colors-orange-light-a-4: #ff91014a;--colors-orange-light-a-5: #ff8b0065;--colors-orange-light-a-6: #ff81007d;--colors-orange-light-a-7: #ed6c008c;--colors-orange-light-a-8: #e35f00aa;--colors-orange-light-a-9: #f65e00ea;--colors-orange-light-a-10: #ef5f00;--colors-orange-light-a-11: #cc4e00;--colors-orange-light-a-12: #431200e2;--colors-orange-light-p3-1: color(display-p3 .995 .988 .985);--colors-orange-light-p3-2: color(display-p3 .994 .968 .934);--colors-orange-light-p3-3: color(display-p3 .989 .938 .85);--colors-orange-light-p3-4: color(display-p3 1 .874 .687);--colors-orange-light-p3-5: color(display-p3 1 .821 .583);--colors-orange-light-p3-6: color(display-p3 .975 .767 .545);--colors-orange-light-p3-7: color(display-p3 .919 .693 .486);--colors-orange-light-p3-8: color(display-p3 .877 .597 .379);--colors-orange-light-p3-9: color(display-p3 .9 .45 .2);--colors-orange-light-p3-10: color(display-p3 .87 .409 .164);--colors-orange-light-p3-11: color(display-p3 .76 .34 0);--colors-orange-light-p3-12: color(display-p3 .323 .185 .127);--colors-orange-light-p3-a-1: color(display-p3 .757 .267 .024 / .016);--colors-orange-light-p3-a-2: color(display-p3 .886 .533 .008 / .067);--colors-orange-light-p3-a-3: color(display-p3 .922 .584 .008 / .15);--colors-orange-light-p3-a-4: color(display-p3 1 .604 .004 / .314);--colors-orange-light-p3-a-5: color(display-p3 1 .569 .004 / .416);--colors-orange-light-p3-a-6: color(display-p3 .949 .494 .004 / .455);--colors-orange-light-p3-a-7: color(display-p3 .839 .408 0 / .514);--colors-orange-light-p3-a-8: color(display-p3 .804 .349 0 / .62);--colors-orange-light-p3-a-9: color(display-p3 .878 .314 0 / .8);--colors-orange-light-p3-a-10: color(display-p3 .843 .29 0 / .836);--colors-orange-light-p3-a-11: color(display-p3 .76 .34 0);--colors-orange-light-p3-a-12: color(display-p3 .323 .185 .127);--colors-orange-dark-1: #17120e;--colors-orange-dark-2: #1e160f;--colors-orange-dark-3: #331e0b;--colors-orange-dark-4: #462100;--colors-orange-dark-5: #562800;--colors-orange-dark-6: #66350c;--colors-orange-dark-7: #7e451d;--colors-orange-dark-8: #a35829;--colors-orange-dark-9: #f76b15;--colors-orange-dark-10: #ff801f;--colors-orange-dark-11: #ffa057;--colors-orange-dark-12: #ffe0c2;--colors-orange-dark-a-1: #ec360007;--colors-orange-dark-a-2: #fe6d000e;--colors-orange-dark-a-3: #fb6a0025;--colors-orange-dark-a-4: #ff590039;--colors-orange-dark-a-5: #ff61004a;--colors-orange-dark-a-6: #fd75045c;--colors-orange-dark-a-7: #ff832c75;--colors-orange-dark-a-8: #fe84389d;--colors-orange-dark-a-9: #fe6d15f7;--colors-orange-dark-a-10: #ff801f;--colors-orange-dark-a-11: #ffa057;--colors-orange-dark-a-12: #ffe0c2;--colors-orange-dark-p3-1: color(display-p3 .088 .07 .057);--colors-orange-dark-p3-2: color(display-p3 .113 .089 .061);--colors-orange-dark-p3-3: color(display-p3 .189 .12 .056);--colors-orange-dark-p3-4: color(display-p3 .262 .132 0);--colors-orange-dark-p3-5: color(display-p3 .315 .168 .016);--colors-orange-dark-p3-6: color(display-p3 .376 .219 .088);--colors-orange-dark-p3-7: color(display-p3 .465 .283 .147);--colors-orange-dark-p3-8: color(display-p3 .601 .359 .201);--colors-orange-dark-p3-9: color(display-p3 .9 .45 .2);--colors-orange-dark-p3-10: color(display-p3 .98 .51 .23);--colors-orange-dark-p3-11: color(display-p3 1 .63 .38);--colors-orange-dark-p3-12: color(display-p3 .98 .883 .775);--colors-orange-dark-p3-a-1: color(display-p3 .961 .247 0 / .022);--colors-orange-dark-p3-a-2: color(display-p3 .992 .529 0 / .051);--colors-orange-dark-p3-a-3: color(display-p3 .996 .486 0 / .131);--colors-orange-dark-p3-a-4: color(display-p3 .996 .384 0 / .211);--colors-orange-dark-p3-a-5: color(display-p3 1 .455 0 / .265);--colors-orange-dark-p3-a-6: color(display-p3 1 .529 .129 / .332);--colors-orange-dark-p3-a-7: color(display-p3 1 .569 .251 / .429);--colors-orange-dark-p3-a-8: color(display-p3 1 .584 .302 / .572);--colors-orange-dark-p3-a-9: color(display-p3 1 .494 .216 / .895);--colors-orange-dark-p3-a-10: color(display-p3 1 .522 .235 / .979);--colors-orange-dark-p3-a-11: color(display-p3 1 .63 .38);--colors-orange-dark-p3-a-12: color(display-p3 .98 .883 .775);--colors-orange-a-1: var(--colors-orange-light-a-1);--colors-orange-a-2: var(--colors-orange-light-a-2);--colors-orange-a-3: var(--colors-orange-light-a-3);--colors-orange-a-4: var(--colors-orange-light-a-4);--colors-orange-a-5: var(--colors-orange-light-a-5);--colors-orange-a-6: var(--colors-orange-light-a-6);--colors-orange-a-7: var(--colors-orange-light-a-7);--colors-orange-a-8: var(--colors-orange-light-a-8);--colors-orange-a-9: var(--colors-orange-light-a-9);--colors-orange-a-10: var(--colors-orange-light-a-10);--colors-orange-a-11: var(--colors-orange-light-a-11);--colors-orange-a-12: var(--colors-orange-light-a-12);--colors-orange-p3-1: var(--colors-orange-light-p3-1);--colors-orange-p3-2: var(--colors-orange-light-p3-2);--colors-orange-p3-3: var(--colors-orange-light-p3-3);--colors-orange-p3-4: var(--colors-orange-light-p3-4);--colors-orange-p3-5: var(--colors-orange-light-p3-5);--colors-orange-p3-6: var(--colors-orange-light-p3-6);--colors-orange-p3-7: var(--colors-orange-light-p3-7);--colors-orange-p3-8: var(--colors-orange-light-p3-8);--colors-orange-p3-9: var(--colors-orange-light-p3-9);--colors-orange-p3-10: var(--colors-orange-light-p3-10);--colors-orange-p3-11: var(--colors-orange-light-p3-11);--colors-orange-p3-12: var(--colors-orange-light-p3-12);--colors-orange-p3-a-1: var(--colors-orange-light-p3-a-1);--colors-orange-p3-a-2: var(--colors-orange-light-p3-a-2);--colors-orange-p3-a-3: var(--colors-orange-light-p3-a-3);--colors-orange-p3-a-4: var(--colors-orange-light-p3-a-4);--colors-orange-p3-a-5: var(--colors-orange-light-p3-a-5);--colors-orange-p3-a-6: var(--colors-orange-light-p3-a-6);--colors-orange-p3-a-7: var(--colors-orange-light-p3-a-7);--colors-orange-p3-a-8: var(--colors-orange-light-p3-a-8);--colors-orange-p3-a-9: var(--colors-orange-light-p3-a-9);--colors-orange-p3-a-10: var(--colors-orange-light-p3-a-10);--colors-orange-p3-a-11: var(--colors-orange-light-p3-a-11);--colors-orange-p3-a-12: var(--colors-orange-light-p3-a-12);--colors-pink-1: var(--colors-pink-light-1);--colors-pink-2: var(--colors-pink-light-2);--colors-pink-3: var(--colors-pink-light-3);--colors-pink-4: var(--colors-pink-light-4);--colors-pink-5: var(--colors-pink-light-5);--colors-pink-6: var(--colors-pink-light-6);--colors-pink-7: var(--colors-pink-light-7);--colors-pink-8: var(--colors-pink-light-8);--colors-pink-9: var(--colors-pink-light-9);--colors-pink-10: var(--colors-pink-light-10);--colors-pink-11: var(--colors-pink-light-11);--colors-pink-12: var(--colors-pink-light-12);--colors-pink-light-1: #fffcfe;--colors-pink-light-2: #fef7fb;--colors-pink-light-3: #fee9f5;--colors-pink-light-4: #fbdcef;--colors-pink-light-5: #f6cee7;--colors-pink-light-6: #efbfdd;--colors-pink-light-7: #e7acd0;--colors-pink-light-8: #dd93c2;--colors-pink-light-9: #d6409f;--colors-pink-light-10: #cf3897;--colors-pink-light-11: #c2298a;--colors-pink-light-12: #651249;--colors-pink-light-a-1: #ff00aa03;--colors-pink-light-a-2: #e0008008;--colors-pink-light-a-3: #f4008c16;--colors-pink-light-a-4: #e2008b23;--colors-pink-light-a-5: #d1008331;--colors-pink-light-a-6: #c0007840;--colors-pink-light-a-7: #b6006f53;--colors-pink-light-a-8: #af006f6c;--colors-pink-light-a-9: #c8007fbf;--colors-pink-light-a-10: #c2007ac7;--colors-pink-light-a-11: #b60074d6;--colors-pink-light-a-12: #59003bed;--colors-pink-light-p3-1: color(display-p3 .998 .989 .996);--colors-pink-light-p3-2: color(display-p3 .992 .97 .985);--colors-pink-light-p3-3: color(display-p3 .981 .917 .96);--colors-pink-light-p3-4: color(display-p3 .963 .867 .932);--colors-pink-light-p3-5: color(display-p3 .939 .815 .899);--colors-pink-light-p3-6: color(display-p3 .907 .756 .859);--colors-pink-light-p3-7: color(display-p3 .869 .683 .81);--colors-pink-light-p3-8: color(display-p3 .825 .59 .751);--colors-pink-light-p3-9: color(display-p3 .775 .297 .61);--colors-pink-light-p3-10: color(display-p3 .748 .27 .581);--colors-pink-light-p3-11: color(display-p3 .698 .219 .528);--colors-pink-light-p3-12: color(display-p3 .363 .101 .279);--colors-pink-light-p3-a-1: color(display-p3 .675 .024 .675 / .012);--colors-pink-light-p3-a-2: color(display-p3 .757 .02 .51 / .032);--colors-pink-light-p3-a-3: color(display-p3 .765 .008 .529 / .083);--colors-pink-light-p3-a-4: color(display-p3 .737 .008 .506 / .134);--colors-pink-light-p3-a-5: color(display-p3 .663 .004 .451 / .185);--colors-pink-light-p3-a-6: color(display-p3 .616 .004 .424 / .244);--colors-pink-light-p3-a-7: color(display-p3 .596 .004 .412 / .318);--colors-pink-light-p3-a-8: color(display-p3 .573 .004 .404 / .412);--colors-pink-light-p3-a-9: color(display-p3 .682 0 .447 / .702);--colors-pink-light-p3-a-10: color(display-p3 .655 0 .424 / .73);--colors-pink-light-p3-a-11: color(display-p3 .698 .219 .528);--colors-pink-light-p3-a-12: color(display-p3 .363 .101 .279);--colors-pink-dark-1: #191117;--colors-pink-dark-2: #21121d;--colors-pink-dark-3: #37172f;--colors-pink-dark-4: #4b143d;--colors-pink-dark-5: #591c47;--colors-pink-dark-6: #692955;--colors-pink-dark-7: #833869;--colors-pink-dark-8: #a84885;--colors-pink-dark-9: #d6409f;--colors-pink-dark-10: #de51a8;--colors-pink-dark-11: #ff8dcc;--colors-pink-dark-12: #fdd1ea;--colors-pink-dark-a-1: #f412bc09;--colors-pink-dark-a-2: #f420bb12;--colors-pink-dark-a-3: #fe37cc29;--colors-pink-dark-a-4: #fc1ec43f;--colors-pink-dark-a-5: #fd35c24e;--colors-pink-dark-a-6: #fd51c75f;--colors-pink-dark-a-7: #fd62c87b;--colors-pink-dark-a-8: #ff68c8a2;--colors-pink-dark-a-9: #fe49bcd4;--colors-pink-dark-a-10: #ff5cc0dc;--colors-pink-dark-a-11: #ff8dcc;--colors-pink-dark-a-12: #ffd3ecfd;--colors-pink-dark-p3-1: color(display-p3 .093 .068 .089);--colors-pink-dark-p3-2: color(display-p3 .121 .073 .11);--colors-pink-dark-p3-3: color(display-p3 .198 .098 .179);--colors-pink-dark-p3-4: color(display-p3 .271 .095 .231);--colors-pink-dark-p3-5: color(display-p3 .32 .127 .273);--colors-pink-dark-p3-6: color(display-p3 .382 .177 .326);--colors-pink-dark-p3-7: color(display-p3 .477 .238 .405);--colors-pink-dark-p3-8: color(display-p3 .612 .304 .51);--colors-pink-dark-p3-9: color(display-p3 .775 .297 .61);--colors-pink-dark-p3-10: color(display-p3 .808 .356 .645);--colors-pink-dark-p3-11: color(display-p3 1 .535 .78);--colors-pink-dark-p3-12: color(display-p3 .964 .826 .912);--colors-pink-dark-p3-a-1: color(display-p3 .984 .071 .855 / .03);--colors-pink-dark-p3-a-2: color(display-p3 1 .2 .8 / .059);--colors-pink-dark-p3-a-3: color(display-p3 1 .294 .886 / .139);--colors-pink-dark-p3-a-4: color(display-p3 1 .192 .82 / .219);--colors-pink-dark-p3-a-5: color(display-p3 1 .282 .827 / .274);--colors-pink-dark-p3-a-6: color(display-p3 1 .396 .835 / .337);--colors-pink-dark-p3-a-7: color(display-p3 1 .459 .831 / .442);--colors-pink-dark-p3-a-8: color(display-p3 1 .478 .827 / .585);--colors-pink-dark-p3-a-9: color(display-p3 1 .373 .784 / .761);--colors-pink-dark-p3-a-10: color(display-p3 1 .435 .792 / .795);--colors-pink-dark-p3-a-11: color(display-p3 1 .535 .78);--colors-pink-dark-p3-a-12: color(display-p3 .964 .826 .912);--colors-pink-a-1: var(--colors-pink-light-a-1);--colors-pink-a-2: var(--colors-pink-light-a-2);--colors-pink-a-3: var(--colors-pink-light-a-3);--colors-pink-a-4: var(--colors-pink-light-a-4);--colors-pink-a-5: var(--colors-pink-light-a-5);--colors-pink-a-6: var(--colors-pink-light-a-6);--colors-pink-a-7: var(--colors-pink-light-a-7);--colors-pink-a-8: var(--colors-pink-light-a-8);--colors-pink-a-9: var(--colors-pink-light-a-9);--colors-pink-a-10: var(--colors-pink-light-a-10);--colors-pink-a-11: var(--colors-pink-light-a-11);--colors-pink-a-12: var(--colors-pink-light-a-12);--colors-pink-p3-1: var(--colors-pink-light-p3-1);--colors-pink-p3-2: var(--colors-pink-light-p3-2);--colors-pink-p3-3: var(--colors-pink-light-p3-3);--colors-pink-p3-4: var(--colors-pink-light-p3-4);--colors-pink-p3-5: var(--colors-pink-light-p3-5);--colors-pink-p3-6: var(--colors-pink-light-p3-6);--colors-pink-p3-7: var(--colors-pink-light-p3-7);--colors-pink-p3-8: var(--colors-pink-light-p3-8);--colors-pink-p3-9: var(--colors-pink-light-p3-9);--colors-pink-p3-10: var(--colors-pink-light-p3-10);--colors-pink-p3-11: var(--colors-pink-light-p3-11);--colors-pink-p3-12: var(--colors-pink-light-p3-12);--colors-pink-p3-a-1: var(--colors-pink-light-p3-a-1);--colors-pink-p3-a-2: var(--colors-pink-light-p3-a-2);--colors-pink-p3-a-3: var(--colors-pink-light-p3-a-3);--colors-pink-p3-a-4: var(--colors-pink-light-p3-a-4);--colors-pink-p3-a-5: var(--colors-pink-light-p3-a-5);--colors-pink-p3-a-6: var(--colors-pink-light-p3-a-6);--colors-pink-p3-a-7: var(--colors-pink-light-p3-a-7);--colors-pink-p3-a-8: var(--colors-pink-light-p3-a-8);--colors-pink-p3-a-9: var(--colors-pink-light-p3-a-9);--colors-pink-p3-a-10: var(--colors-pink-light-p3-a-10);--colors-pink-p3-a-11: var(--colors-pink-light-p3-a-11);--colors-pink-p3-a-12: var(--colors-pink-light-p3-a-12);--colors-purple-1: var(--colors-purple-light-1);--colors-purple-2: var(--colors-purple-light-2);--colors-purple-3: var(--colors-purple-light-3);--colors-purple-4: var(--colors-purple-light-4);--colors-purple-5: var(--colors-purple-light-5);--colors-purple-6: var(--colors-purple-light-6);--colors-purple-7: var(--colors-purple-light-7);--colors-purple-8: var(--colors-purple-light-8);--colors-purple-9: var(--colors-purple-light-9);--colors-purple-10: var(--colors-purple-light-10);--colors-purple-11: var(--colors-purple-light-11);--colors-purple-12: var(--colors-purple-light-12);--colors-purple-light-1: #fefcfe;--colors-purple-light-2: #fbf7fe;--colors-purple-light-3: #f7edfe;--colors-purple-light-4: #f2e2fc;--colors-purple-light-5: #ead5f9;--colors-purple-light-6: #e0c4f4;--colors-purple-light-7: #d1afec;--colors-purple-light-8: #be93e4;--colors-purple-light-9: #8e4ec6;--colors-purple-light-10: #8347b9;--colors-purple-light-11: #8145b5;--colors-purple-light-12: #402060;--colors-purple-light-a-1: #aa00aa03;--colors-purple-light-a-2: #8000e008;--colors-purple-light-a-3: #8e00f112;--colors-purple-light-a-4: #8d00e51d;--colors-purple-light-a-5: #8000db2a;--colors-purple-light-a-6: #7a01d03b;--colors-purple-light-a-7: #6d00c350;--colors-purple-light-a-8: #6600c06c;--colors-purple-light-a-9: #5c00adb1;--colors-purple-light-a-10: #53009eb8;--colors-purple-light-a-11: #52009aba;--colors-purple-light-a-12: #250049df;--colors-purple-light-p3-1: color(display-p3 .995 .988 .996);--colors-purple-light-p3-2: color(display-p3 .983 .971 .993);--colors-purple-light-p3-3: color(display-p3 .963 .931 .989);--colors-purple-light-p3-4: color(display-p3 .937 .888 .981);--colors-purple-light-p3-5: color(display-p3 .904 .837 .966);--colors-purple-light-p3-6: color(display-p3 .86 .774 .942);--colors-purple-light-p3-7: color(display-p3 .799 .69 .91);--colors-purple-light-p3-8: color(display-p3 .719 .583 .874);--colors-purple-light-p3-9: color(display-p3 .523 .318 .751);--colors-purple-light-p3-10: color(display-p3 .483 .289 .7);--colors-purple-light-p3-11: color(display-p3 .473 .281 .687);--colors-purple-light-p3-12: color(display-p3 .234 .132 .363);--colors-purple-light-p3-a-1: color(display-p3 .675 .024 .675 / .012);--colors-purple-light-p3-a-2: color(display-p3 .443 .024 .722 / .028);--colors-purple-light-p3-a-3: color(display-p3 .506 .008 .835 / .071);--colors-purple-light-p3-a-4: color(display-p3 .451 .004 .831 / .114);--colors-purple-light-p3-a-5: color(display-p3 .431 .004 .788 / .165);--colors-purple-light-p3-a-6: color(display-p3 .384 .004 .745 / .228);--colors-purple-light-p3-a-7: color(display-p3 .357 .004 .71 / .31);--colors-purple-light-p3-a-8: color(display-p3 .322 .004 .702 / .416);--colors-purple-light-p3-a-9: color(display-p3 .298 0 .639 / .683);--colors-purple-light-p3-a-10: color(display-p3 .271 0 .58 / .71);--colors-purple-light-p3-a-11: color(display-p3 .473 .281 .687);--colors-purple-light-p3-a-12: color(display-p3 .234 .132 .363);--colors-purple-dark-1: #18111b;--colors-purple-dark-2: #1e1523;--colors-purple-dark-3: #301c3b;--colors-purple-dark-4: #3d224e;--colors-purple-dark-5: #48295c;--colors-purple-dark-6: #54346b;--colors-purple-dark-7: #664282;--colors-purple-dark-8: #8457aa;--colors-purple-dark-9: #8e4ec6;--colors-purple-dark-10: #9a5cd0;--colors-purple-dark-11: #d19dff;--colors-purple-dark-12: #ecd9fa;--colors-purple-dark-a-1: #b412f90b;--colors-purple-dark-a-2: #b744f714;--colors-purple-dark-a-3: #c150ff2d;--colors-purple-dark-a-4: #bb53fd42;--colors-purple-dark-a-5: #be5cfd51;--colors-purple-dark-a-6: #c16dfd61;--colors-purple-dark-a-7: #c378fd7a;--colors-purple-dark-a-8: #c47effa4;--colors-purple-dark-a-9: #b661ffc2;--colors-purple-dark-a-10: #bc6fffcd;--colors-purple-dark-a-11: #d19dff;--colors-purple-dark-a-12: #f1ddfffa;--colors-purple-dark-p3-1: color(display-p3 .09 .068 .103);--colors-purple-dark-p3-2: color(display-p3 .113 .082 .134);--colors-purple-dark-p3-3: color(display-p3 .175 .112 .224);--colors-purple-dark-p3-4: color(display-p3 .224 .137 .297);--colors-purple-dark-p3-5: color(display-p3 .264 .167 .349);--colors-purple-dark-p3-6: color(display-p3 .311 .208 .406);--colors-purple-dark-p3-7: color(display-p3 .381 .266 .496);--colors-purple-dark-p3-8: color(display-p3 .49 .349 .649);--colors-purple-dark-p3-9: color(display-p3 .523 .318 .751);--colors-purple-dark-p3-10: color(display-p3 .57 .373 .791);--colors-purple-dark-p3-11: color(display-p3 .8 .62 1);--colors-purple-dark-p3-12: color(display-p3 .913 .854 .971);--colors-purple-dark-p3-a-1: color(display-p3 .686 .071 .996 / .038);--colors-purple-dark-p3-a-2: color(display-p3 .722 .286 .996 / .072);--colors-purple-dark-p3-a-3: color(display-p3 .718 .349 .996 / .169);--colors-purple-dark-p3-a-4: color(display-p3 .702 .353 1 / .248);--colors-purple-dark-p3-a-5: color(display-p3 .718 .404 1 / .303);--colors-purple-dark-p3-a-6: color(display-p3 .733 .455 1 / .366);--colors-purple-dark-p3-a-7: color(display-p3 .753 .506 1 / .458);--colors-purple-dark-p3-a-8: color(display-p3 .749 .522 1 / .622);--colors-purple-dark-p3-a-9: color(display-p3 .686 .408 1 / .736);--colors-purple-dark-p3-a-10: color(display-p3 .71 .459 1 / .778);--colors-purple-dark-p3-a-11: color(display-p3 .8 .62 1);--colors-purple-dark-p3-a-12: color(display-p3 .913 .854 .971);--colors-purple-a-1: var(--colors-purple-light-a-1);--colors-purple-a-2: var(--colors-purple-light-a-2);--colors-purple-a-3: var(--colors-purple-light-a-3);--colors-purple-a-4: var(--colors-purple-light-a-4);--colors-purple-a-5: var(--colors-purple-light-a-5);--colors-purple-a-6: var(--colors-purple-light-a-6);--colors-purple-a-7: var(--colors-purple-light-a-7);--colors-purple-a-8: var(--colors-purple-light-a-8);--colors-purple-a-9: var(--colors-purple-light-a-9);--colors-purple-a-10: var(--colors-purple-light-a-10);--colors-purple-a-11: var(--colors-purple-light-a-11);--colors-purple-a-12: var(--colors-purple-light-a-12);--colors-purple-p3-1: var(--colors-purple-light-p3-1);--colors-purple-p3-2: var(--colors-purple-light-p3-2);--colors-purple-p3-3: var(--colors-purple-light-p3-3);--colors-purple-p3-4: var(--colors-purple-light-p3-4);--colors-purple-p3-5: var(--colors-purple-light-p3-5);--colors-purple-p3-6: var(--colors-purple-light-p3-6);--colors-purple-p3-7: var(--colors-purple-light-p3-7);--colors-purple-p3-8: var(--colors-purple-light-p3-8);--colors-purple-p3-9: var(--colors-purple-light-p3-9);--colors-purple-p3-10: var(--colors-purple-light-p3-10);--colors-purple-p3-11: var(--colors-purple-light-p3-11);--colors-purple-p3-12: var(--colors-purple-light-p3-12);--colors-purple-p3-a-1: var(--colors-purple-light-p3-a-1);--colors-purple-p3-a-2: var(--colors-purple-light-p3-a-2);--colors-purple-p3-a-3: var(--colors-purple-light-p3-a-3);--colors-purple-p3-a-4: var(--colors-purple-light-p3-a-4);--colors-purple-p3-a-5: var(--colors-purple-light-p3-a-5);--colors-purple-p3-a-6: var(--colors-purple-light-p3-a-6);--colors-purple-p3-a-7: var(--colors-purple-light-p3-a-7);--colors-purple-p3-a-8: var(--colors-purple-light-p3-a-8);--colors-purple-p3-a-9: var(--colors-purple-light-p3-a-9);--colors-purple-p3-a-10: var(--colors-purple-light-p3-a-10);--colors-purple-p3-a-11: var(--colors-purple-light-p3-a-11);--colors-purple-p3-a-12: var(--colors-purple-light-p3-a-12);--colors-red-1: var(--colors-red-light-1);--colors-red-2: var(--colors-red-light-2);--colors-red-3: var(--colors-red-light-3);--colors-red-4: var(--colors-red-light-4);--colors-red-5: var(--colors-red-light-5);--colors-red-6: var(--colors-red-light-6);--colors-red-7: var(--colors-red-light-7);--colors-red-8: var(--colors-red-light-8);--colors-red-9: var(--colors-red-light-9);--colors-red-10: var(--colors-red-light-10);--colors-red-11: var(--colors-red-light-11);--colors-red-12: var(--colors-red-light-12);--colors-red-light-1: #fffcfc;--colors-red-light-2: #fff7f7;--colors-red-light-3: #feebec;--colors-red-light-4: #ffdbdc;--colors-red-light-5: #ffcdce;--colors-red-light-6: #fdbdbe;--colors-red-light-7: #f4a9aa;--colors-red-light-8: #eb8e90;--colors-red-light-9: #e5484d;--colors-red-light-10: #dc3e42;--colors-red-light-11: #ce2c31;--colors-red-light-12: #641723;--colors-red-light-a-1: #ff000003;--colors-red-light-a-2: #ff000008;--colors-red-light-a-3: #f3000d14;--colors-red-light-a-4: #ff000824;--colors-red-light-a-5: #ff000632;--colors-red-light-a-6: #f8000442;--colors-red-light-a-7: #df000356;--colors-red-light-a-8: #d2000571;--colors-red-light-a-9: #db0007b7;--colors-red-light-a-10: #d10005c1;--colors-red-light-a-11: #c40006d3;--colors-red-light-a-12: #55000de8;--colors-red-light-p3-1: color(display-p3 .998 .989 .988);--colors-red-light-p3-2: color(display-p3 .995 .971 .971);--colors-red-light-p3-3: color(display-p3 .985 .925 .925);--colors-red-light-p3-4: color(display-p3 .999 .866 .866);--colors-red-light-p3-5: color(display-p3 .984 .812 .811);--colors-red-light-p3-6: color(display-p3 .955 .751 .749);--colors-red-light-p3-7: color(display-p3 .915 .675 .672);--colors-red-light-p3-8: color(display-p3 .872 .575 .572);--colors-red-light-p3-9: color(display-p3 .83 .329 .324);--colors-red-light-p3-10: color(display-p3 .798 .294 .285);--colors-red-light-p3-11: color(display-p3 .744 .234 .222);--colors-red-light-p3-12: color(display-p3 .36 .115 .143);--colors-red-light-p3-a-1: color(display-p3 .675 .024 .024 / .012);--colors-red-light-p3-a-2: color(display-p3 .863 .024 .024 / .028);--colors-red-light-p3-a-3: color(display-p3 .792 .008 .008 / .075);--colors-red-light-p3-a-4: color(display-p3 1 .008 .008 / .134);--colors-red-light-p3-a-5: color(display-p3 .918 .008 .008 / .189);--colors-red-light-p3-a-6: color(display-p3 .831 .02 .004 / .251);--colors-red-light-p3-a-7: color(display-p3 .741 .016 .004 / .33);--colors-red-light-p3-a-8: color(display-p3 .698 .012 .004 / .428);--colors-red-light-p3-a-9: color(display-p3 .749 .008 0 / .675);--colors-red-light-p3-a-10: color(display-p3 .714 .012 0 / .714);--colors-red-light-p3-a-11: color(display-p3 .744 .234 .222);--colors-red-light-p3-a-12: color(display-p3 .36 .115 .143);--colors-red-dark-1: #191111;--colors-red-dark-2: #201314;--colors-red-dark-3: #3b1219;--colors-red-dark-4: #500f1c;--colors-red-dark-5: #611623;--colors-red-dark-6: #72232d;--colors-red-dark-7: #8c333a;--colors-red-dark-8: #b54548;--colors-red-dark-9: #e5484d;--colors-red-dark-10: #ec5d5e;--colors-red-dark-11: #ff9592;--colors-red-dark-12: #ffd1d9;--colors-red-dark-a-1: #f4121209;--colors-red-dark-a-2: #f22f3e11;--colors-red-dark-a-3: #ff173f2d;--colors-red-dark-a-4: #fe0a3b44;--colors-red-dark-a-5: #ff204756;--colors-red-dark-a-6: #ff3e5668;--colors-red-dark-a-7: #ff536184;--colors-red-dark-a-8: #ff5d61b0;--colors-red-dark-a-9: #fe4e54e4;--colors-red-dark-a-10: #ff6465eb;--colors-red-dark-a-11: #ff9592;--colors-red-dark-a-12: #ffd1d9;--colors-red-dark-p3-1: color(display-p3 .093 .068 .067);--colors-red-dark-p3-2: color(display-p3 .118 .077 .079);--colors-red-dark-p3-3: color(display-p3 .211 .081 .099);--colors-red-dark-p3-4: color(display-p3 .287 .079 .113);--colors-red-dark-p3-5: color(display-p3 .348 .11 .142);--colors-red-dark-p3-6: color(display-p3 .414 .16 .183);--colors-red-dark-p3-7: color(display-p3 .508 .224 .236);--colors-red-dark-p3-8: color(display-p3 .659 .298 .297);--colors-red-dark-p3-9: color(display-p3 .83 .329 .324);--colors-red-dark-p3-10: color(display-p3 .861 .403 .387);--colors-red-dark-p3-11: color(display-p3 1 .57 .55);--colors-red-dark-p3-12: color(display-p3 .971 .826 .852);--colors-red-dark-p3-a-1: color(display-p3 .984 .071 .071 / .03);--colors-red-dark-p3-a-2: color(display-p3 .996 .282 .282 / .055);--colors-red-dark-p3-a-3: color(display-p3 1 .169 .271 / .156);--colors-red-dark-p3-a-4: color(display-p3 1 .118 .267 / .236);--colors-red-dark-p3-a-5: color(display-p3 1 .212 .314 / .303);--colors-red-dark-p3-a-6: color(display-p3 1 .318 .38 / .374);--colors-red-dark-p3-a-7: color(display-p3 1 .4 .424 / .475);--colors-red-dark-p3-a-8: color(display-p3 1 .431 .431 / .635);--colors-red-dark-p3-a-9: color(display-p3 1 .388 .384 / .82);--colors-red-dark-p3-a-10: color(display-p3 1 .463 .447 / .853);--colors-red-dark-p3-a-11: color(display-p3 1 .57 .55);--colors-red-dark-p3-a-12: color(display-p3 .971 .826 .852);--colors-red-a-1: var(--colors-red-light-a-1);--colors-red-a-2: var(--colors-red-light-a-2);--colors-red-a-3: var(--colors-red-light-a-3);--colors-red-a-4: var(--colors-red-light-a-4);--colors-red-a-5: var(--colors-red-light-a-5);--colors-red-a-6: var(--colors-red-light-a-6);--colors-red-a-7: var(--colors-red-light-a-7);--colors-red-a-8: var(--colors-red-light-a-8);--colors-red-a-9: var(--colors-red-light-a-9);--colors-red-a-10: var(--colors-red-light-a-10);--colors-red-a-11: var(--colors-red-light-a-11);--colors-red-a-12: var(--colors-red-light-a-12);--colors-red-p3-1: var(--colors-red-light-p3-1);--colors-red-p3-2: var(--colors-red-light-p3-2);--colors-red-p3-3: var(--colors-red-light-p3-3);--colors-red-p3-4: var(--colors-red-light-p3-4);--colors-red-p3-5: var(--colors-red-light-p3-5);--colors-red-p3-6: var(--colors-red-light-p3-6);--colors-red-p3-7: var(--colors-red-light-p3-7);--colors-red-p3-8: var(--colors-red-light-p3-8);--colors-red-p3-9: var(--colors-red-light-p3-9);--colors-red-p3-10: var(--colors-red-light-p3-10);--colors-red-p3-11: var(--colors-red-light-p3-11);--colors-red-p3-12: var(--colors-red-light-p3-12);--colors-red-p3-a-1: var(--colors-red-light-p3-a-1);--colors-red-p3-a-2: var(--colors-red-light-p3-a-2);--colors-red-p3-a-3: var(--colors-red-light-p3-a-3);--colors-red-p3-a-4: var(--colors-red-light-p3-a-4);--colors-red-p3-a-5: var(--colors-red-light-p3-a-5);--colors-red-p3-a-6: var(--colors-red-light-p3-a-6);--colors-red-p3-a-7: var(--colors-red-light-p3-a-7);--colors-red-p3-a-8: var(--colors-red-light-p3-a-8);--colors-red-p3-a-9: var(--colors-red-light-p3-a-9);--colors-red-p3-a-10: var(--colors-red-light-p3-a-10);--colors-red-p3-a-11: var(--colors-red-light-p3-a-11);--colors-red-p3-a-12: var(--colors-red-light-p3-a-12);--colors-ruby-1: var(--colors-ruby-light-1);--colors-ruby-2: var(--colors-ruby-light-2);--colors-ruby-3: var(--colors-ruby-light-3);--colors-ruby-4: var(--colors-ruby-light-4);--colors-ruby-5: var(--colors-ruby-light-5);--colors-ruby-6: var(--colors-ruby-light-6);--colors-ruby-7: var(--colors-ruby-light-7);--colors-ruby-8: var(--colors-ruby-light-8);--colors-ruby-9: var(--colors-ruby-light-9);--colors-ruby-10: var(--colors-ruby-light-10);--colors-ruby-11: var(--colors-ruby-light-11);--colors-ruby-12: var(--colors-ruby-light-12);--colors-ruby-light-1: #fffcfd;--colors-ruby-light-2: #fff7f8;--colors-ruby-light-3: #feeaed;--colors-ruby-light-4: #ffdce1;--colors-ruby-light-5: #ffced6;--colors-ruby-light-6: #f8bfc8;--colors-ruby-light-7: #efacb8;--colors-ruby-light-8: #e592a3;--colors-ruby-light-9: #e54666;--colors-ruby-light-10: #dc3b5d;--colors-ruby-light-11: #ca244d;--colors-ruby-light-12: #64172b;--colors-ruby-light-a-1: #ff005503;--colors-ruby-light-a-2: #ff002008;--colors-ruby-light-a-3: #f3002515;--colors-ruby-light-a-4: #ff002523;--colors-ruby-light-a-5: #ff002a31;--colors-ruby-light-a-6: #e4002440;--colors-ruby-light-a-7: #ce002553;--colors-ruby-light-a-8: #c300286d;--colors-ruby-light-a-9: #db002cb9;--colors-ruby-light-a-10: #d2002cc4;--colors-ruby-light-a-11: #c10030db;--colors-ruby-light-a-12: #550016e8;--colors-ruby-light-p3-1: color(display-p3 .998 .989 .992);--colors-ruby-light-p3-2: color(display-p3 .995 .971 .974);--colors-ruby-light-p3-3: color(display-p3 .983 .92 .928);--colors-ruby-light-p3-4: color(display-p3 .987 .869 .885);--colors-ruby-light-p3-5: color(display-p3 .968 .817 .839);--colors-ruby-light-p3-6: color(display-p3 .937 .758 .786);--colors-ruby-light-p3-7: color(display-p3 .897 .685 .721);--colors-ruby-light-p3-8: color(display-p3 .851 .588 .639);--colors-ruby-light-p3-9: color(display-p3 .83 .323 .408);--colors-ruby-light-p3-10: color(display-p3 .795 .286 .375);--colors-ruby-light-p3-11: color(display-p3 .728 .211 .311);--colors-ruby-light-p3-12: color(display-p3 .36 .115 .171);--colors-ruby-light-p3-a-1: color(display-p3 .675 .024 .349 / .012);--colors-ruby-light-p3-a-2: color(display-p3 .863 .024 .024 / .028);--colors-ruby-light-p3-a-3: color(display-p3 .804 .008 .11 / .079);--colors-ruby-light-p3-a-4: color(display-p3 .91 .008 .125 / .13);--colors-ruby-light-p3-a-5: color(display-p3 .831 .004 .133 / .185);--colors-ruby-light-p3-a-6: color(display-p3 .745 .004 .118 / .244);--colors-ruby-light-p3-a-7: color(display-p3 .678 .004 .114 / .314);--colors-ruby-light-p3-a-8: color(display-p3 .639 .004 .125 / .412);--colors-ruby-light-p3-a-9: color(display-p3 .753 0 .129 / .679);--colors-ruby-light-p3-a-10: color(display-p3 .714 0 .125 / .714);--colors-ruby-light-p3-a-11: color(display-p3 .728 .211 .311);--colors-ruby-light-p3-a-12: color(display-p3 .36 .115 .171);--colors-ruby-dark-1: #191113;--colors-ruby-dark-2: #1e1517;--colors-ruby-dark-3: #3a141e;--colors-ruby-dark-4: #4e1325;--colors-ruby-dark-5: #5e1a2e;--colors-ruby-dark-6: #6f2539;--colors-ruby-dark-7: #883447;--colors-ruby-dark-8: #b3445a;--colors-ruby-dark-9: #e54666;--colors-ruby-dark-10: #ec5a72;--colors-ruby-dark-11: #ff949d;--colors-ruby-dark-12: #fed2e1;--colors-ruby-dark-a-1: #f4124a09;--colors-ruby-dark-a-2: #fe5a7f0e;--colors-ruby-dark-a-3: #ff235d2c;--colors-ruby-dark-a-4: #fd195e42;--colors-ruby-dark-a-5: #fe2d6b53;--colors-ruby-dark-a-6: #ff447665;--colors-ruby-dark-a-7: #ff577d80;--colors-ruby-dark-a-8: #ff5c7cae;--colors-ruby-dark-a-9: #fe4c70e4;--colors-ruby-dark-a-10: #ff617beb;--colors-ruby-dark-a-11: #ff949d;--colors-ruby-dark-a-12: #ffd3e2fe;--colors-ruby-dark-p3-1: color(display-p3 .093 .068 .074);--colors-ruby-dark-p3-2: color(display-p3 .113 .083 .089);--colors-ruby-dark-p3-3: color(display-p3 .208 .088 .117);--colors-ruby-dark-p3-4: color(display-p3 .279 .092 .147);--colors-ruby-dark-p3-5: color(display-p3 .337 .12 .18);--colors-ruby-dark-p3-6: color(display-p3 .401 .166 .223);--colors-ruby-dark-p3-7: color(display-p3 .495 .224 .281);--colors-ruby-dark-p3-8: color(display-p3 .652 .295 .359);--colors-ruby-dark-p3-9: color(display-p3 .83 .323 .408);--colors-ruby-dark-p3-10: color(display-p3 .857 .392 .455);--colors-ruby-dark-p3-11: color(display-p3 1 .57 .59);--colors-ruby-dark-p3-12: color(display-p3 .968 .83 .88);--colors-ruby-dark-p3-a-1: color(display-p3 .984 .071 .329 / .03);--colors-ruby-dark-p3-a-2: color(display-p3 .992 .376 .529 / .051);--colors-ruby-dark-p3-a-3: color(display-p3 .996 .196 .404 / .152);--colors-ruby-dark-p3-a-4: color(display-p3 1 .173 .416 / .227);--colors-ruby-dark-p3-a-5: color(display-p3 1 .259 .459 / .29);--colors-ruby-dark-p3-a-6: color(display-p3 1 .341 .506 / .358);--colors-ruby-dark-p3-a-7: color(display-p3 1 .412 .541 / .458);--colors-ruby-dark-p3-a-8: color(display-p3 1 .431 .537 / .627);--colors-ruby-dark-p3-a-9: color(display-p3 1 .376 .482 / .82);--colors-ruby-dark-p3-a-10: color(display-p3 1 .447 .522 / .849);--colors-ruby-dark-p3-a-11: color(display-p3 1 .57 .59);--colors-ruby-dark-p3-a-12: color(display-p3 .968 .83 .88);--colors-ruby-a-1: var(--colors-ruby-light-a-1);--colors-ruby-a-2: var(--colors-ruby-light-a-2);--colors-ruby-a-3: var(--colors-ruby-light-a-3);--colors-ruby-a-4: var(--colors-ruby-light-a-4);--colors-ruby-a-5: var(--colors-ruby-light-a-5);--colors-ruby-a-6: var(--colors-ruby-light-a-6);--colors-ruby-a-7: var(--colors-ruby-light-a-7);--colors-ruby-a-8: var(--colors-ruby-light-a-8);--colors-ruby-a-9: var(--colors-ruby-light-a-9);--colors-ruby-a-10: var(--colors-ruby-light-a-10);--colors-ruby-a-11: var(--colors-ruby-light-a-11);--colors-ruby-a-12: var(--colors-ruby-light-a-12);--colors-ruby-p3-1: var(--colors-ruby-light-p3-1);--colors-ruby-p3-2: var(--colors-ruby-light-p3-2);--colors-ruby-p3-3: var(--colors-ruby-light-p3-3);--colors-ruby-p3-4: var(--colors-ruby-light-p3-4);--colors-ruby-p3-5: var(--colors-ruby-light-p3-5);--colors-ruby-p3-6: var(--colors-ruby-light-p3-6);--colors-ruby-p3-7: var(--colors-ruby-light-p3-7);--colors-ruby-p3-8: var(--colors-ruby-light-p3-8);--colors-ruby-p3-9: var(--colors-ruby-light-p3-9);--colors-ruby-p3-10: var(--colors-ruby-light-p3-10);--colors-ruby-p3-11: var(--colors-ruby-light-p3-11);--colors-ruby-p3-12: var(--colors-ruby-light-p3-12);--colors-ruby-p3-a-1: var(--colors-ruby-light-p3-a-1);--colors-ruby-p3-a-2: var(--colors-ruby-light-p3-a-2);--colors-ruby-p3-a-3: var(--colors-ruby-light-p3-a-3);--colors-ruby-p3-a-4: var(--colors-ruby-light-p3-a-4);--colors-ruby-p3-a-5: var(--colors-ruby-light-p3-a-5);--colors-ruby-p3-a-6: var(--colors-ruby-light-p3-a-6);--colors-ruby-p3-a-7: var(--colors-ruby-light-p3-a-7);--colors-ruby-p3-a-8: var(--colors-ruby-light-p3-a-8);--colors-ruby-p3-a-9: var(--colors-ruby-light-p3-a-9);--colors-ruby-p3-a-10: var(--colors-ruby-light-p3-a-10);--colors-ruby-p3-a-11: var(--colors-ruby-light-p3-a-11);--colors-ruby-p3-a-12: var(--colors-ruby-light-p3-a-12);--colors-teal-1: var(--colors-teal-light-1);--colors-teal-2: var(--colors-teal-light-2);--colors-teal-3: var(--colors-teal-light-3);--colors-teal-4: var(--colors-teal-light-4);--colors-teal-5: var(--colors-teal-light-5);--colors-teal-6: var(--colors-teal-light-6);--colors-teal-7: var(--colors-teal-light-7);--colors-teal-8: var(--colors-teal-light-8);--colors-teal-9: var(--colors-teal-light-9);--colors-teal-10: var(--colors-teal-light-10);--colors-teal-11: var(--colors-teal-light-11);--colors-teal-12: var(--colors-teal-light-12);--colors-teal-light-1: #fafefd;--colors-teal-light-2: #f3fbf9;--colors-teal-light-3: #e0f8f3;--colors-teal-light-4: #ccf3ea;--colors-teal-light-5: #b8eae0;--colors-teal-light-6: #a1ded2;--colors-teal-light-7: #83cdc1;--colors-teal-light-8: #53b9ab;--colors-teal-light-9: #12a594;--colors-teal-light-10: #0d9b8a;--colors-teal-light-11: #008573;--colors-teal-light-12: #0d3d38;--colors-teal-light-a-1: #00cc9905;--colors-teal-light-a-2: #00aa800c;--colors-teal-light-a-3: #00c69d1f;--colors-teal-light-a-4: #00c39633;--colors-teal-light-a-5: #00b49047;--colors-teal-light-a-6: #00a6855e;--colors-teal-light-a-7: #0099807c;--colors-teal-light-a-8: #009783ac;--colors-teal-light-a-9: #009e8ced;--colors-teal-light-a-10: #009684f2;--colors-teal-light-a-11: #008573;--colors-teal-light-a-12: #00332df2;--colors-teal-light-p3-1: color(display-p3 .983 .996 .992);--colors-teal-light-p3-2: color(display-p3 .958 .983 .976);--colors-teal-light-p3-3: color(display-p3 .895 .971 .952);--colors-teal-light-p3-4: color(display-p3 .831 .949 .92);--colors-teal-light-p3-5: color(display-p3 .761 .914 .878);--colors-teal-light-p3-6: color(display-p3 .682 .864 .825);--colors-teal-light-p3-7: color(display-p3 .581 .798 .756);--colors-teal-light-p3-8: color(display-p3 .433 .716 .671);--colors-teal-light-p3-9: color(display-p3 .297 .637 .581);--colors-teal-light-p3-10: color(display-p3 .275 .599 .542);--colors-teal-light-p3-11: color(display-p3 .08 .5 .43);--colors-teal-light-p3-12: color(display-p3 .11 .235 .219);--colors-teal-light-p3-a-1: color(display-p3 .024 .757 .514 / .016);--colors-teal-light-p3-a-2: color(display-p3 .02 .647 .467 / .044);--colors-teal-light-p3-a-3: color(display-p3 .004 .741 .557 / .106);--colors-teal-light-p3-a-4: color(display-p3 .004 .702 .537 / .169);--colors-teal-light-p3-a-5: color(display-p3 .004 .643 .494 / .24);--colors-teal-light-p3-a-6: color(display-p3 .004 .569 .447 / .318);--colors-teal-light-p3-a-7: color(display-p3 .004 .518 .424 / .42);--colors-teal-light-p3-a-8: color(display-p3 0 .506 .424 / .569);--colors-teal-light-p3-a-9: color(display-p3 0 .482 .404 / .702);--colors-teal-light-p3-a-10: color(display-p3 0 .451 .369 / .726);--colors-teal-light-p3-a-11: color(display-p3 .08 .5 .43);--colors-teal-light-p3-a-12: color(display-p3 .11 .235 .219);--colors-teal-dark-1: #0d1514;--colors-teal-dark-2: #111c1b;--colors-teal-dark-3: #0d2d2a;--colors-teal-dark-4: #023b37;--colors-teal-dark-5: #084843;--colors-teal-dark-6: #145750;--colors-teal-dark-7: #1c6961;--colors-teal-dark-8: #207e73;--colors-teal-dark-9: #12a594;--colors-teal-dark-10: #0eb39e;--colors-teal-dark-11: #0bd8b6;--colors-teal-dark-12: #adf0dd;--colors-teal-dark-a-1: #00deab05;--colors-teal-dark-a-2: #12fbe60c;--colors-teal-dark-a-3: #00ffe61e;--colors-teal-dark-a-4: #00ffe92d;--colors-teal-dark-a-5: #00ffea3b;--colors-teal-dark-a-6: #1cffe84b;--colors-teal-dark-a-7: #2efde85f;--colors-teal-dark-a-8: #32ffe775;--colors-teal-dark-a-9: #13ffe49f;--colors-teal-dark-a-10: #0dffe0ae;--colors-teal-dark-a-11: #0afed5d6;--colors-teal-dark-a-12: #b8ffebef;--colors-teal-dark-p3-1: color(display-p3 .059 .083 .079);--colors-teal-dark-p3-2: color(display-p3 .075 .11 .107);--colors-teal-dark-p3-3: color(display-p3 .087 .175 .165);--colors-teal-dark-p3-4: color(display-p3 .087 .227 .214);--colors-teal-dark-p3-5: color(display-p3 .12 .277 .261);--colors-teal-dark-p3-6: color(display-p3 .162 .335 .314);--colors-teal-dark-p3-7: color(display-p3 .205 .406 .379);--colors-teal-dark-p3-8: color(display-p3 .245 .489 .453);--colors-teal-dark-p3-9: color(display-p3 .297 .637 .581);--colors-teal-dark-p3-10: color(display-p3 .319 .69 .62);--colors-teal-dark-p3-11: color(display-p3 .388 .835 .719);--colors-teal-dark-p3-12: color(display-p3 .734 .934 .87);--colors-teal-dark-p3-a-1: color(display-p3 0 .992 .761 / .017);--colors-teal-dark-p3-a-2: color(display-p3 .235 .988 .902 / .047);--colors-teal-dark-p3-a-3: color(display-p3 .235 1 .898 / .118);--colors-teal-dark-p3-a-4: color(display-p3 .18 .996 .929 / .173);--colors-teal-dark-p3-a-5: color(display-p3 .31 1 .933 / .227);--colors-teal-dark-p3-a-6: color(display-p3 .396 1 .933 / .286);--colors-teal-dark-p3-a-7: color(display-p3 .443 1 .925 / .366);--colors-teal-dark-p3-a-8: color(display-p3 .459 1 .925 / .454);--colors-teal-dark-p3-a-9: color(display-p3 .443 .996 .906 / .61);--colors-teal-dark-p3-a-10: color(display-p3 .439 .996 .89 / .669);--colors-teal-dark-p3-a-11: color(display-p3 .388 .835 .719);--colors-teal-dark-p3-a-12: color(display-p3 .734 .934 .87);--colors-teal-a-1: var(--colors-teal-light-a-1);--colors-teal-a-2: var(--colors-teal-light-a-2);--colors-teal-a-3: var(--colors-teal-light-a-3);--colors-teal-a-4: var(--colors-teal-light-a-4);--colors-teal-a-5: var(--colors-teal-light-a-5);--colors-teal-a-6: var(--colors-teal-light-a-6);--colors-teal-a-7: var(--colors-teal-light-a-7);--colors-teal-a-8: var(--colors-teal-light-a-8);--colors-teal-a-9: var(--colors-teal-light-a-9);--colors-teal-a-10: var(--colors-teal-light-a-10);--colors-teal-a-11: var(--colors-teal-light-a-11);--colors-teal-a-12: var(--colors-teal-light-a-12);--colors-teal-p3-1: var(--colors-teal-light-p3-1);--colors-teal-p3-2: var(--colors-teal-light-p3-2);--colors-teal-p3-3: var(--colors-teal-light-p3-3);--colors-teal-p3-4: var(--colors-teal-light-p3-4);--colors-teal-p3-5: var(--colors-teal-light-p3-5);--colors-teal-p3-6: var(--colors-teal-light-p3-6);--colors-teal-p3-7: var(--colors-teal-light-p3-7);--colors-teal-p3-8: var(--colors-teal-light-p3-8);--colors-teal-p3-9: var(--colors-teal-light-p3-9);--colors-teal-p3-10: var(--colors-teal-light-p3-10);--colors-teal-p3-11: var(--colors-teal-light-p3-11);--colors-teal-p3-12: var(--colors-teal-light-p3-12);--colors-teal-p3-a-1: var(--colors-teal-light-p3-a-1);--colors-teal-p3-a-2: var(--colors-teal-light-p3-a-2);--colors-teal-p3-a-3: var(--colors-teal-light-p3-a-3);--colors-teal-p3-a-4: var(--colors-teal-light-p3-a-4);--colors-teal-p3-a-5: var(--colors-teal-light-p3-a-5);--colors-teal-p3-a-6: var(--colors-teal-light-p3-a-6);--colors-teal-p3-a-7: var(--colors-teal-light-p3-a-7);--colors-teal-p3-a-8: var(--colors-teal-light-p3-a-8);--colors-teal-p3-a-9: var(--colors-teal-light-p3-a-9);--colors-teal-p3-a-10: var(--colors-teal-light-p3-a-10);--colors-teal-p3-a-11: var(--colors-teal-light-p3-a-11);--colors-teal-p3-a-12: var(--colors-teal-light-p3-a-12);--colors-tomato-1: var(--colors-tomato-light-1);--colors-tomato-2: var(--colors-tomato-light-2);--colors-tomato-3: var(--colors-tomato-light-3);--colors-tomato-4: var(--colors-tomato-light-4);--colors-tomato-5: var(--colors-tomato-light-5);--colors-tomato-6: var(--colors-tomato-light-6);--colors-tomato-7: var(--colors-tomato-light-7);--colors-tomato-8: var(--colors-tomato-light-8);--colors-tomato-9: var(--colors-tomato-light-9);--colors-tomato-10: var(--colors-tomato-light-10);--colors-tomato-11: var(--colors-tomato-light-11);--colors-tomato-12: var(--colors-tomato-light-12);--colors-tomato-light-1: #fffcfc;--colors-tomato-light-2: #fff8f7;--colors-tomato-light-3: #feebe7;--colors-tomato-light-4: #ffdcd3;--colors-tomato-light-5: #ffcdc2;--colors-tomato-light-6: #fdbdaf;--colors-tomato-light-7: #f5a898;--colors-tomato-light-8: #ec8e7b;--colors-tomato-light-9: #e54d2e;--colors-tomato-light-10: #dd4425;--colors-tomato-light-11: #d13415;--colors-tomato-light-12: #5c271f;--colors-tomato-light-a-1: #ff000003;--colors-tomato-light-a-2: #ff200008;--colors-tomato-light-a-3: #f52b0018;--colors-tomato-light-a-4: #ff35002c;--colors-tomato-light-a-5: #ff2e003d;--colors-tomato-light-a-6: #f92d0050;--colors-tomato-light-a-7: #e7280067;--colors-tomato-light-a-8: #db250084;--colors-tomato-light-a-9: #df2600d1;--colors-tomato-light-a-10: #d72400da;--colors-tomato-light-a-11: #cd2200ea;--colors-tomato-light-a-12: #460900e0;--colors-tomato-light-p3-1: color(display-p3 .998 .989 .988);--colors-tomato-light-p3-2: color(display-p3 .994 .974 .969);--colors-tomato-light-p3-3: color(display-p3 .985 .924 .909);--colors-tomato-light-p3-4: color(display-p3 .996 .868 .835);--colors-tomato-light-p3-5: color(display-p3 .98 .812 .77);--colors-tomato-light-p3-6: color(display-p3 .953 .75 .698);--colors-tomato-light-p3-7: color(display-p3 .917 .673 .611);--colors-tomato-light-p3-8: color(display-p3 .875 .575 .502);--colors-tomato-light-p3-9: color(display-p3 .831 .345 .231);--colors-tomato-light-p3-10: color(display-p3 .802 .313 .2);--colors-tomato-light-p3-11: color(display-p3 .755 .259 .152);--colors-tomato-light-p3-12: color(display-p3 .335 .165 .132);--colors-tomato-light-p3-a-1: color(display-p3 .675 .024 .024 / .012);--colors-tomato-light-p3-a-2: color(display-p3 .757 .145 .02 / .032);--colors-tomato-light-p3-a-3: color(display-p3 .831 .184 .012 / .091);--colors-tomato-light-p3-a-4: color(display-p3 .976 .192 .004 / .165);--colors-tomato-light-p3-a-5: color(display-p3 .918 .192 .004 / .232);--colors-tomato-light-p3-a-6: color(display-p3 .847 .173 .004 / .302);--colors-tomato-light-p3-a-7: color(display-p3 .788 .165 .004 / .389);--colors-tomato-light-p3-a-8: color(display-p3 .749 .153 .004 / .499);--colors-tomato-light-p3-a-9: color(display-p3 .78 .149 0 / .769);--colors-tomato-light-p3-a-10: color(display-p3 .757 .141 0 / .8);--colors-tomato-light-p3-a-11: color(display-p3 .755 .259 .152);--colors-tomato-light-p3-a-12: color(display-p3 .335 .165 .132);--colors-tomato-dark-1: #181111;--colors-tomato-dark-2: #1f1513;--colors-tomato-dark-3: #391714;--colors-tomato-dark-4: #4e1511;--colors-tomato-dark-5: #5e1c16;--colors-tomato-dark-6: #6e2920;--colors-tomato-dark-7: #853a2d;--colors-tomato-dark-8: #ac4d39;--colors-tomato-dark-9: #e54d2e;--colors-tomato-dark-10: #ec6142;--colors-tomato-dark-11: #ff977d;--colors-tomato-dark-12: #fbd3cb;--colors-tomato-dark-a-1: #f1121208;--colors-tomato-dark-a-2: #ff55330f;--colors-tomato-dark-a-3: #ff35232b;--colors-tomato-dark-a-4: #fd201142;--colors-tomato-dark-a-5: #fe332153;--colors-tomato-dark-a-6: #ff4f3864;--colors-tomato-dark-a-7: #fd644a7d;--colors-tomato-dark-a-8: #fe6d4ea7;--colors-tomato-dark-a-9: #fe5431e4;--colors-tomato-dark-a-10: #ff6847eb;--colors-tomato-dark-a-11: #ff977d;--colors-tomato-dark-a-12: #ffd6cefb;--colors-tomato-dark-p3-1: color(display-p3 .09 .068 .067);--colors-tomato-dark-p3-2: color(display-p3 .115 .084 .076);--colors-tomato-dark-p3-3: color(display-p3 .205 .097 .083);--colors-tomato-dark-p3-4: color(display-p3 .282 .099 .077);--colors-tomato-dark-p3-5: color(display-p3 .339 .129 .101);--colors-tomato-dark-p3-6: color(display-p3 .398 .179 .141);--colors-tomato-dark-p3-7: color(display-p3 .487 .245 .194);--colors-tomato-dark-p3-8: color(display-p3 .629 .322 .248);--colors-tomato-dark-p3-9: color(display-p3 .831 .345 .231);--colors-tomato-dark-p3-10: color(display-p3 .862 .415 .298);--colors-tomato-dark-p3-11: color(display-p3 1 .585 .455);--colors-tomato-dark-p3-12: color(display-p3 .959 .833 .802);--colors-tomato-dark-p3-a-1: color(display-p3 .973 .071 .071 / .026);--colors-tomato-dark-p3-a-2: color(display-p3 .992 .376 .224 / .051);--colors-tomato-dark-p3-a-3: color(display-p3 .996 .282 .176 / .148);--colors-tomato-dark-p3-a-4: color(display-p3 1 .204 .118 / .232);--colors-tomato-dark-p3-a-5: color(display-p3 1 .286 .192 / .29);--colors-tomato-dark-p3-a-6: color(display-p3 1 .392 .278 / .353);--colors-tomato-dark-p3-a-7: color(display-p3 1 .459 .349 / .45);--colors-tomato-dark-p3-a-8: color(display-p3 1 .49 .369 / .601);--colors-tomato-dark-p3-a-9: color(display-p3 1 .408 .267 / .82);--colors-tomato-dark-p3-a-10: color(display-p3 1 .478 .341 / .853);--colors-tomato-dark-p3-a-11: color(display-p3 1 .585 .455);--colors-tomato-dark-p3-a-12: color(display-p3 .959 .833 .802);--colors-tomato-a-1: var(--colors-tomato-light-a-1);--colors-tomato-a-2: var(--colors-tomato-light-a-2);--colors-tomato-a-3: var(--colors-tomato-light-a-3);--colors-tomato-a-4: var(--colors-tomato-light-a-4);--colors-tomato-a-5: var(--colors-tomato-light-a-5);--colors-tomato-a-6: var(--colors-tomato-light-a-6);--colors-tomato-a-7: var(--colors-tomato-light-a-7);--colors-tomato-a-8: var(--colors-tomato-light-a-8);--colors-tomato-a-9: var(--colors-tomato-light-a-9);--colors-tomato-a-10: var(--colors-tomato-light-a-10);--colors-tomato-a-11: var(--colors-tomato-light-a-11);--colors-tomato-a-12: var(--colors-tomato-light-a-12);--colors-tomato-p3-1: var(--colors-tomato-light-p3-1);--colors-tomato-p3-2: var(--colors-tomato-light-p3-2);--colors-tomato-p3-3: var(--colors-tomato-light-p3-3);--colors-tomato-p3-4: var(--colors-tomato-light-p3-4);--colors-tomato-p3-5: var(--colors-tomato-light-p3-5);--colors-tomato-p3-6: var(--colors-tomato-light-p3-6);--colors-tomato-p3-7: var(--colors-tomato-light-p3-7);--colors-tomato-p3-8: var(--colors-tomato-light-p3-8);--colors-tomato-p3-9: var(--colors-tomato-light-p3-9);--colors-tomato-p3-10: var(--colors-tomato-light-p3-10);--colors-tomato-p3-11: var(--colors-tomato-light-p3-11);--colors-tomato-p3-12: var(--colors-tomato-light-p3-12);--colors-tomato-p3-a-1: var(--colors-tomato-light-p3-a-1);--colors-tomato-p3-a-2: var(--colors-tomato-light-p3-a-2);--colors-tomato-p3-a-3: var(--colors-tomato-light-p3-a-3);--colors-tomato-p3-a-4: var(--colors-tomato-light-p3-a-4);--colors-tomato-p3-a-5: var(--colors-tomato-light-p3-a-5);--colors-tomato-p3-a-6: var(--colors-tomato-light-p3-a-6);--colors-tomato-p3-a-7: var(--colors-tomato-light-p3-a-7);--colors-tomato-p3-a-8: var(--colors-tomato-light-p3-a-8);--colors-tomato-p3-a-9: var(--colors-tomato-light-p3-a-9);--colors-tomato-p3-a-10: var(--colors-tomato-light-p3-a-10);--colors-tomato-p3-a-11: var(--colors-tomato-light-p3-a-11);--colors-tomato-p3-a-12: var(--colors-tomato-light-p3-a-12);--colors-violet-1: var(--colors-violet-light-1);--colors-violet-2: var(--colors-violet-light-2);--colors-violet-3: var(--colors-violet-light-3);--colors-violet-4: var(--colors-violet-light-4);--colors-violet-5: var(--colors-violet-light-5);--colors-violet-6: var(--colors-violet-light-6);--colors-violet-7: var(--colors-violet-light-7);--colors-violet-8: var(--colors-violet-light-8);--colors-violet-9: var(--colors-violet-light-9);--colors-violet-10: var(--colors-violet-light-10);--colors-violet-11: var(--colors-violet-light-11);--colors-violet-12: var(--colors-violet-light-12);--colors-violet-light-1: #fdfcfe;--colors-violet-light-2: #faf8ff;--colors-violet-light-3: #f4f0fe;--colors-violet-light-4: #ebe4ff;--colors-violet-light-5: #e1d9ff;--colors-violet-light-6: #d4cafe;--colors-violet-light-7: #c2b5f5;--colors-violet-light-8: #aa99ec;--colors-violet-light-9: #6e56cf;--colors-violet-light-10: #654dc4;--colors-violet-light-11: #6550b9;--colors-violet-light-12: #2f265f;--colors-violet-light-a-1: #5500aa03;--colors-violet-light-a-2: #4900ff07;--colors-violet-light-a-3: #4400ee0f;--colors-violet-light-a-4: #4300ff1b;--colors-violet-light-a-5: #3600ff26;--colors-violet-light-a-6: #3100fb35;--colors-violet-light-a-7: #2d01dd4a;--colors-violet-light-a-8: #2b00d066;--colors-violet-light-a-9: #2400b7a9;--colors-violet-light-a-10: #2300abb2;--colors-violet-light-a-11: #1f0099af;--colors-violet-light-a-12: #0b0043d9;--colors-violet-light-p3-1: color(display-p3 .991 .988 .995);--colors-violet-light-p3-2: color(display-p3 .978 .974 .998);--colors-violet-light-p3-3: color(display-p3 .953 .943 .993);--colors-violet-light-p3-4: color(display-p3 .916 .897 1);--colors-violet-light-p3-5: color(display-p3 .876 .851 1);--colors-violet-light-p3-6: color(display-p3 .825 .793 .981);--colors-violet-light-p3-7: color(display-p3 .752 .712 .943);--colors-violet-light-p3-8: color(display-p3 .654 .602 .902);--colors-violet-light-p3-9: color(display-p3 .417 .341 .784);--colors-violet-light-p3-10: color(display-p3 .381 .306 .741);--colors-violet-light-p3-11: color(display-p3 .383 .317 .702);--colors-violet-light-p3-12: color(display-p3 .179 .15 .359);--colors-violet-light-p3-a-1: color(display-p3 .349 .024 .675 / .012);--colors-violet-light-p3-a-2: color(display-p3 .161 .024 .863 / .028);--colors-violet-light-p3-a-3: color(display-p3 .204 .004 .871 / .059);--colors-violet-light-p3-a-4: color(display-p3 .196 .004 1 / .102);--colors-violet-light-p3-a-5: color(display-p3 .165 .008 1 / .15);--colors-violet-light-p3-a-6: color(display-p3 .153 .004 .906 / .208);--colors-violet-light-p3-a-7: color(display-p3 .141 .004 .796 / .287);--colors-violet-light-p3-a-8: color(display-p3 .133 .004 .753 / .397);--colors-violet-light-p3-a-9: color(display-p3 .114 0 .675 / .659);--colors-violet-light-p3-a-10: color(display-p3 .11 0 .627 / .695);--colors-violet-light-p3-a-11: color(display-p3 .383 .317 .702);--colors-violet-light-p3-a-12: color(display-p3 .179 .15 .359);--colors-violet-dark-1: #14121f;--colors-violet-dark-2: #1b1525;--colors-violet-dark-3: #291f43;--colors-violet-dark-4: #33255b;--colors-violet-dark-5: #3c2e69;--colors-violet-dark-6: #473876;--colors-violet-dark-7: #56468b;--colors-violet-dark-8: #6958ad;--colors-violet-dark-9: #6e56cf;--colors-violet-dark-10: #7d66d9;--colors-violet-dark-11: #baa7ff;--colors-violet-dark-12: #e2ddfe;--colors-violet-dark-a-1: #4422ff0f;--colors-violet-dark-a-2: #853ff916;--colors-violet-dark-a-3: #8354fe36;--colors-violet-dark-a-4: #7d51fd50;--colors-violet-dark-a-5: #845ffd5f;--colors-violet-dark-a-6: #8f6cfd6d;--colors-violet-dark-a-7: #9879ff83;--colors-violet-dark-a-8: #977dfea8;--colors-violet-dark-a-9: #8668ffcc;--colors-violet-dark-a-10: #9176fed7;--colors-violet-dark-a-11: #baa7ff;--colors-violet-dark-a-12: #e3defffe;--colors-violet-dark-p3-1: color(display-p3 .077 .071 .118);--colors-violet-dark-p3-2: color(display-p3 .101 .084 .141);--colors-violet-dark-p3-3: color(display-p3 .154 .123 .256);--colors-violet-dark-p3-4: color(display-p3 .191 .148 .345);--colors-violet-dark-p3-5: color(display-p3 .226 .182 .396);--colors-violet-dark-p3-6: color(display-p3 .269 .223 .449);--colors-violet-dark-p3-7: color(display-p3 .326 .277 .53);--colors-violet-dark-p3-8: color(display-p3 .399 .346 .656);--colors-violet-dark-p3-9: color(display-p3 .417 .341 .784);--colors-violet-dark-p3-10: color(display-p3 .477 .402 .823);--colors-violet-dark-p3-11: color(display-p3 .72 .65 1);--colors-violet-dark-p3-12: color(display-p3 .883 .867 .986);--colors-violet-dark-p3-a-1: color(display-p3 .282 .141 .996 / .055);--colors-violet-dark-p3-a-2: color(display-p3 .51 .263 1 / .08);--colors-violet-dark-p3-a-3: color(display-p3 .494 .337 .996 / .202);--colors-violet-dark-p3-a-4: color(display-p3 .49 .345 1 / .299);--colors-violet-dark-p3-a-5: color(display-p3 .525 .392 1 / .353);--colors-violet-dark-p3-a-6: color(display-p3 .569 .455 1 / .408);--colors-violet-dark-p3-a-7: color(display-p3 .588 .494 1 / .496);--colors-violet-dark-p3-a-8: color(display-p3 .596 .51 1 / .631);--colors-violet-dark-p3-a-9: color(display-p3 .522 .424 1 / .769);--colors-violet-dark-p3-a-10: color(display-p3 .576 .482 1 / .811);--colors-violet-dark-p3-a-11: color(display-p3 .72 .65 1);--colors-violet-dark-p3-a-12: color(display-p3 .883 .867 .986);--colors-violet-a-1: var(--colors-violet-light-a-1);--colors-violet-a-2: var(--colors-violet-light-a-2);--colors-violet-a-3: var(--colors-violet-light-a-3);--colors-violet-a-4: var(--colors-violet-light-a-4);--colors-violet-a-5: var(--colors-violet-light-a-5);--colors-violet-a-6: var(--colors-violet-light-a-6);--colors-violet-a-7: var(--colors-violet-light-a-7);--colors-violet-a-8: var(--colors-violet-light-a-8);--colors-violet-a-9: var(--colors-violet-light-a-9);--colors-violet-a-10: var(--colors-violet-light-a-10);--colors-violet-a-11: var(--colors-violet-light-a-11);--colors-violet-a-12: var(--colors-violet-light-a-12);--colors-violet-p3-1: var(--colors-violet-light-p3-1);--colors-violet-p3-2: var(--colors-violet-light-p3-2);--colors-violet-p3-3: var(--colors-violet-light-p3-3);--colors-violet-p3-4: var(--colors-violet-light-p3-4);--colors-violet-p3-5: var(--colors-violet-light-p3-5);--colors-violet-p3-6: var(--colors-violet-light-p3-6);--colors-violet-p3-7: var(--colors-violet-light-p3-7);--colors-violet-p3-8: var(--colors-violet-light-p3-8);--colors-violet-p3-9: var(--colors-violet-light-p3-9);--colors-violet-p3-10: var(--colors-violet-light-p3-10);--colors-violet-p3-11: var(--colors-violet-light-p3-11);--colors-violet-p3-12: var(--colors-violet-light-p3-12);--colors-violet-p3-a-1: var(--colors-violet-light-p3-a-1);--colors-violet-p3-a-2: var(--colors-violet-light-p3-a-2);--colors-violet-p3-a-3: var(--colors-violet-light-p3-a-3);--colors-violet-p3-a-4: var(--colors-violet-light-p3-a-4);--colors-violet-p3-a-5: var(--colors-violet-light-p3-a-5);--colors-violet-p3-a-6: var(--colors-violet-light-p3-a-6);--colors-violet-p3-a-7: var(--colors-violet-light-p3-a-7);--colors-violet-p3-a-8: var(--colors-violet-light-p3-a-8);--colors-violet-p3-a-9: var(--colors-violet-light-p3-a-9);--colors-violet-p3-a-10: var(--colors-violet-light-p3-a-10);--colors-violet-p3-a-11: var(--colors-violet-light-p3-a-11);--colors-violet-p3-a-12: var(--colors-violet-light-p3-a-12);--colors-yellow-1: var(--colors-yellow-light-1);--colors-yellow-2: var(--colors-yellow-light-2);--colors-yellow-3: var(--colors-yellow-light-3);--colors-yellow-4: var(--colors-yellow-light-4);--colors-yellow-5: var(--colors-yellow-light-5);--colors-yellow-6: var(--colors-yellow-light-6);--colors-yellow-7: var(--colors-yellow-light-7);--colors-yellow-8: var(--colors-yellow-light-8);--colors-yellow-9: var(--colors-yellow-light-9);--colors-yellow-10: var(--colors-yellow-light-10);--colors-yellow-11: var(--colors-yellow-light-11);--colors-yellow-12: var(--colors-yellow-light-12);--colors-yellow-light-1: #fdfdf9;--colors-yellow-light-2: #fefce9;--colors-yellow-light-3: #fffab8;--colors-yellow-light-4: #fff394;--colors-yellow-light-5: #ffe770;--colors-yellow-light-6: #f3d768;--colors-yellow-light-7: #e4c767;--colors-yellow-light-8: #d5ae39;--colors-yellow-light-9: #ffe629;--colors-yellow-light-10: #ffdc00;--colors-yellow-light-11: #9e6c00;--colors-yellow-light-12: #473b1f;--colors-yellow-light-a-1: #aaaa0006;--colors-yellow-light-a-2: #f4dd0016;--colors-yellow-light-a-3: #ffee0047;--colors-yellow-light-a-4: #ffe3016b;--colors-yellow-light-a-5: #ffd5008f;--colors-yellow-light-a-6: #ebbc0097;--colors-yellow-light-a-7: #d2a10098;--colors-yellow-light-a-8: #c99700c6;--colors-yellow-light-a-9: #ffe100d6;--colors-yellow-light-a-10: #ffdc00;--colors-yellow-light-a-11: #9e6c00;--colors-yellow-light-a-12: #2e2000e0;--colors-yellow-light-p3-1: color(display-p3 .992 .992 .978);--colors-yellow-light-p3-2: color(display-p3 .995 .99 .922);--colors-yellow-light-p3-3: color(display-p3 .997 .982 .749);--colors-yellow-light-p3-4: color(display-p3 .992 .953 .627);--colors-yellow-light-p3-5: color(display-p3 .984 .91 .51);--colors-yellow-light-p3-6: color(display-p3 .934 .847 .474);--colors-yellow-light-p3-7: color(display-p3 .876 .785 .46);--colors-yellow-light-p3-8: color(display-p3 .811 .689 .313);--colors-yellow-light-p3-9: color(display-p3 1 .92 .22);--colors-yellow-light-p3-10: color(display-p3 .977 .868 .291);--colors-yellow-light-p3-11: color(display-p3 .6 .44 0);--colors-yellow-light-p3-12: color(display-p3 .271 .233 .137);--colors-yellow-light-p3-a-1: color(display-p3 .675 .675 .024 / .024);--colors-yellow-light-p3-a-2: color(display-p3 .953 .855 .008 / .079);--colors-yellow-light-p3-a-3: color(display-p3 .988 .925 .004 / .251);--colors-yellow-light-p3-a-4: color(display-p3 .98 .875 .004 / .373);--colors-yellow-light-p3-a-5: color(display-p3 .969 .816 .004 / .491);--colors-yellow-light-p3-a-6: color(display-p3 .875 .71 0 / .526);--colors-yellow-light-p3-a-7: color(display-p3 .769 .604 0 / .542);--colors-yellow-light-p3-a-8: color(display-p3 .725 .549 0 / .687);--colors-yellow-light-p3-a-9: color(display-p3 1 .898 0 / .781);--colors-yellow-light-p3-a-10: color(display-p3 .969 .812 0 / .71);--colors-yellow-light-p3-a-11: color(display-p3 .6 .44 0);--colors-yellow-light-p3-a-12: color(display-p3 .271 .233 .137);--colors-yellow-dark-1: #14120b;--colors-yellow-dark-2: #1b180f;--colors-yellow-dark-3: #2d2305;--colors-yellow-dark-4: #362b00;--colors-yellow-dark-5: #433500;--colors-yellow-dark-6: #524202;--colors-yellow-dark-7: #665417;--colors-yellow-dark-8: #836a21;--colors-yellow-dark-9: #ffe629;--colors-yellow-dark-10: #ffff57;--colors-yellow-dark-11: #f5e147;--colors-yellow-dark-12: #f6eeb4;--colors-yellow-dark-a-1: #d1510004;--colors-yellow-dark-a-2: #f9b4000b;--colors-yellow-dark-a-3: #ffaa001e;--colors-yellow-dark-a-4: #fdb70028;--colors-yellow-dark-a-5: #febb0036;--colors-yellow-dark-a-6: #fec40046;--colors-yellow-dark-a-7: #fdcb225c;--colors-yellow-dark-a-8: #fdca327b;--colors-yellow-dark-a-9: #ffe629;--colors-yellow-dark-a-10: #ffff57;--colors-yellow-dark-a-11: #fee949f5;--colors-yellow-dark-a-12: #fef6baf6;--colors-yellow-dark-p3-1: color(display-p3 .078 .069 .047);--colors-yellow-dark-p3-2: color(display-p3 .103 .094 .063);--colors-yellow-dark-p3-3: color(display-p3 .168 .137 .039);--colors-yellow-dark-p3-4: color(display-p3 .209 .169 0);--colors-yellow-dark-p3-5: color(display-p3 .255 .209 0);--colors-yellow-dark-p3-6: color(display-p3 .31 .261 .07);--colors-yellow-dark-p3-7: color(display-p3 .389 .331 .135);--colors-yellow-dark-p3-8: color(display-p3 .497 .42 .182);--colors-yellow-dark-p3-9: color(display-p3 1 .92 .22);--colors-yellow-dark-p3-10: color(display-p3 1 1 .456);--colors-yellow-dark-p3-11: color(display-p3 .948 .885 .392);--colors-yellow-dark-p3-12: color(display-p3 .959 .934 .731);--colors-yellow-dark-p3-a-1: color(display-p3 .973 .369 0 / .013);--colors-yellow-dark-p3-a-2: color(display-p3 .996 .792 0 / .038);--colors-yellow-dark-p3-a-3: color(display-p3 .996 .71 0 / .11);--colors-yellow-dark-p3-a-4: color(display-p3 .996 .741 0 / .152);--colors-yellow-dark-p3-a-5: color(display-p3 .996 .765 0 / .202);--colors-yellow-dark-p3-a-6: color(display-p3 .996 .816 .082 / .261);--colors-yellow-dark-p3-a-7: color(display-p3 1 .831 .263 / .345);--colors-yellow-dark-p3-a-8: color(display-p3 1 .831 .314 / .463);--colors-yellow-dark-p3-a-9: color(display-p3 1 .922 .22);--colors-yellow-dark-p3-a-10: color(display-p3 1 1 .455);--colors-yellow-dark-p3-a-11: color(display-p3 .948 .885 .392);--colors-yellow-dark-p3-a-12: color(display-p3 .959 .934 .731);--colors-yellow-a-1: var(--colors-yellow-light-a-1);--colors-yellow-a-2: var(--colors-yellow-light-a-2);--colors-yellow-a-3: var(--colors-yellow-light-a-3);--colors-yellow-a-4: var(--colors-yellow-light-a-4);--colors-yellow-a-5: var(--colors-yellow-light-a-5);--colors-yellow-a-6: var(--colors-yellow-light-a-6);--colors-yellow-a-7: var(--colors-yellow-light-a-7);--colors-yellow-a-8: var(--colors-yellow-light-a-8);--colors-yellow-a-9: var(--colors-yellow-light-a-9);--colors-yellow-a-10: var(--colors-yellow-light-a-10);--colors-yellow-a-11: var(--colors-yellow-light-a-11);--colors-yellow-a-12: var(--colors-yellow-light-a-12);--colors-yellow-p3-1: var(--colors-yellow-light-p3-1);--colors-yellow-p3-2: var(--colors-yellow-light-p3-2);--colors-yellow-p3-3: var(--colors-yellow-light-p3-3);--colors-yellow-p3-4: var(--colors-yellow-light-p3-4);--colors-yellow-p3-5: var(--colors-yellow-light-p3-5);--colors-yellow-p3-6: var(--colors-yellow-light-p3-6);--colors-yellow-p3-7: var(--colors-yellow-light-p3-7);--colors-yellow-p3-8: var(--colors-yellow-light-p3-8);--colors-yellow-p3-9: var(--colors-yellow-light-p3-9);--colors-yellow-p3-10: var(--colors-yellow-light-p3-10);--colors-yellow-p3-11: var(--colors-yellow-light-p3-11);--colors-yellow-p3-12: var(--colors-yellow-light-p3-12);--colors-yellow-p3-a-1: var(--colors-yellow-light-p3-a-1);--colors-yellow-p3-a-2: var(--colors-yellow-light-p3-a-2);--colors-yellow-p3-a-3: var(--colors-yellow-light-p3-a-3);--colors-yellow-p3-a-4: var(--colors-yellow-light-p3-a-4);--colors-yellow-p3-a-5: var(--colors-yellow-light-p3-a-5);--colors-yellow-p3-a-6: var(--colors-yellow-light-p3-a-6);--colors-yellow-p3-a-7: var(--colors-yellow-light-p3-a-7);--colors-yellow-p3-a-8: var(--colors-yellow-light-p3-a-8);--colors-yellow-p3-a-9: var(--colors-yellow-light-p3-a-9);--colors-yellow-p3-a-10: var(--colors-yellow-light-p3-a-10);--colors-yellow-p3-a-11: var(--colors-yellow-light-p3-a-11);--colors-yellow-p3-a-12: var(--colors-yellow-light-p3-a-12);--colors-text: var(--mantine-color-text);--colors-text-dimmed: var(--mantine-color-dimmed);--colors-likec4-background: var(--mantine-color-body);--colors-likec4-tag-bg: var(--colors-tomato-9);--colors-likec4-tag-bg-hover: var(--colors-tomato-10);--colors-likec4-tag-border: var(--colors-tomato-8);--colors-likec4-tag-text: var(--colors-tomato-12);--colors-likec4-panel-bg: var(--mantine-color-body);--colors-likec4-panel-border: transparent;--colors-likec4-panel-text: color-mix(in oklab, var(--mantine-color-text) 85%, transparent 15%);--colors-likec4-panel-text-dimmed: var(--mantine-color-dimmed);--colors-likec4-panel-action: color-mix(in oklab, var(--mantine-color-text) 90%, transparent 10%);--colors-likec4-panel-action-disabled: var(--mantine-color-dimmed);--colors-likec4-panel-action-hover: var(--mantine-color-bright);--colors-likec4-panel-action-bg: var(--mantine-color-gray-1);--colors-likec4-panel-action-bg-hover: var(--mantine-color-gray-2);--colors-likec4-panel-action-warning: var(--mantine-color-orange-6);--colors-likec4-panel-action-warning-hover: var(--mantine-color-orange-7);--colors-likec4-panel-action-warning-bg: color-mix(in oklab, var(--mantine-color-orange-1) 90%, transparent 10%);--colors-likec4-panel-action-warning-bg-hover: color-mix(in oklab, var(--mantine-color-orange-3) 70%, transparent 30%);--colors-likec4-dropdown-bg: #FFF;--colors-likec4-dropdown-border: var(--colors-likec4-panel-border);--colors-likec4-overlay-backdrop: rgb(34 34 34);--colors-likec4-overlay-body: var(--mantine-color-body);--colors-likec4-overlay-border: color-mix(in oklab, var(--mantine-color-default-border) 50%, transparent 50%);--colors-likec4-compare-latest: var(--mantine-color-green-6)}[data-mantine-color-scheme=dark]{--colors-amber-1: var(--colors-amber-dark-1);--colors-amber-2: var(--colors-amber-dark-2);--colors-amber-3: var(--colors-amber-dark-3);--colors-amber-4: var(--colors-amber-dark-4);--colors-amber-5: var(--colors-amber-dark-5);--colors-amber-6: var(--colors-amber-dark-6);--colors-amber-7: var(--colors-amber-dark-7);--colors-amber-8: var(--colors-amber-dark-8);--colors-amber-9: var(--colors-amber-dark-9);--colors-amber-10: var(--colors-amber-dark-10);--colors-amber-11: var(--colors-amber-dark-11);--colors-amber-12: var(--colors-amber-dark-12);--colors-amber-a-1: var(--colors-amber-dark-a-1);--colors-amber-a-2: var(--colors-amber-dark-a-2);--colors-amber-a-3: var(--colors-amber-dark-a-3);--colors-amber-a-4: var(--colors-amber-dark-a-4);--colors-amber-a-5: var(--colors-amber-dark-a-5);--colors-amber-a-6: var(--colors-amber-dark-a-6);--colors-amber-a-7: var(--colors-amber-dark-a-7);--colors-amber-a-8: var(--colors-amber-dark-a-8);--colors-amber-a-9: var(--colors-amber-dark-a-9);--colors-amber-a-10: var(--colors-amber-dark-a-10);--colors-amber-a-11: var(--colors-amber-dark-a-11);--colors-amber-a-12: var(--colors-amber-dark-a-12);--colors-amber-p3-1: var(--colors-amber-dark-p3-1);--colors-amber-p3-2: var(--colors-amber-dark-p3-2);--colors-amber-p3-3: var(--colors-amber-dark-p3-3);--colors-amber-p3-4: var(--colors-amber-dark-p3-4);--colors-amber-p3-5: var(--colors-amber-dark-p3-5);--colors-amber-p3-6: var(--colors-amber-dark-p3-6);--colors-amber-p3-7: var(--colors-amber-dark-p3-7);--colors-amber-p3-8: var(--colors-amber-dark-p3-8);--colors-amber-p3-9: var(--colors-amber-dark-p3-9);--colors-amber-p3-10: var(--colors-amber-dark-p3-10);--colors-amber-p3-11: var(--colors-amber-dark-p3-11);--colors-amber-p3-12: var(--colors-amber-dark-p3-12);--colors-amber-p3-a-1: var(--colors-amber-dark-p3-a-1);--colors-amber-p3-a-2: var(--colors-amber-dark-p3-a-2);--colors-amber-p3-a-3: var(--colors-amber-dark-p3-a-3);--colors-amber-p3-a-4: var(--colors-amber-dark-p3-a-4);--colors-amber-p3-a-5: var(--colors-amber-dark-p3-a-5);--colors-amber-p3-a-6: var(--colors-amber-dark-p3-a-6);--colors-amber-p3-a-7: var(--colors-amber-dark-p3-a-7);--colors-amber-p3-a-8: var(--colors-amber-dark-p3-a-8);--colors-amber-p3-a-9: var(--colors-amber-dark-p3-a-9);--colors-amber-p3-a-10: var(--colors-amber-dark-p3-a-10);--colors-amber-p3-a-11: var(--colors-amber-dark-p3-a-11);--colors-amber-p3-a-12: var(--colors-amber-dark-p3-a-12);--colors-blue-1: var(--colors-blue-dark-1);--colors-blue-2: var(--colors-blue-dark-2);--colors-blue-3: var(--colors-blue-dark-3);--colors-blue-4: var(--colors-blue-dark-4);--colors-blue-5: var(--colors-blue-dark-5);--colors-blue-6: var(--colors-blue-dark-6);--colors-blue-7: var(--colors-blue-dark-7);--colors-blue-8: var(--colors-blue-dark-8);--colors-blue-9: var(--colors-blue-dark-9);--colors-blue-10: var(--colors-blue-dark-10);--colors-blue-11: var(--colors-blue-dark-11);--colors-blue-12: var(--colors-blue-dark-12);--colors-blue-a-1: var(--colors-blue-dark-a-1);--colors-blue-a-2: var(--colors-blue-dark-a-2);--colors-blue-a-3: var(--colors-blue-dark-a-3);--colors-blue-a-4: var(--colors-blue-dark-a-4);--colors-blue-a-5: var(--colors-blue-dark-a-5);--colors-blue-a-6: var(--colors-blue-dark-a-6);--colors-blue-a-7: var(--colors-blue-dark-a-7);--colors-blue-a-8: var(--colors-blue-dark-a-8);--colors-blue-a-9: var(--colors-blue-dark-a-9);--colors-blue-a-10: var(--colors-blue-dark-a-10);--colors-blue-a-11: var(--colors-blue-dark-a-11);--colors-blue-a-12: var(--colors-blue-dark-a-12);--colors-blue-p3-1: var(--colors-blue-dark-p3-1);--colors-blue-p3-2: var(--colors-blue-dark-p3-2);--colors-blue-p3-3: var(--colors-blue-dark-p3-3);--colors-blue-p3-4: var(--colors-blue-dark-p3-4);--colors-blue-p3-5: var(--colors-blue-dark-p3-5);--colors-blue-p3-6: var(--colors-blue-dark-p3-6);--colors-blue-p3-7: var(--colors-blue-dark-p3-7);--colors-blue-p3-8: var(--colors-blue-dark-p3-8);--colors-blue-p3-9: var(--colors-blue-dark-p3-9);--colors-blue-p3-10: var(--colors-blue-dark-p3-10);--colors-blue-p3-11: var(--colors-blue-dark-p3-11);--colors-blue-p3-12: var(--colors-blue-dark-p3-12);--colors-blue-p3-a-1: var(--colors-blue-dark-p3-a-1);--colors-blue-p3-a-2: var(--colors-blue-dark-p3-a-2);--colors-blue-p3-a-3: var(--colors-blue-dark-p3-a-3);--colors-blue-p3-a-4: var(--colors-blue-dark-p3-a-4);--colors-blue-p3-a-5: var(--colors-blue-dark-p3-a-5);--colors-blue-p3-a-6: var(--colors-blue-dark-p3-a-6);--colors-blue-p3-a-7: var(--colors-blue-dark-p3-a-7);--colors-blue-p3-a-8: var(--colors-blue-dark-p3-a-8);--colors-blue-p3-a-9: var(--colors-blue-dark-p3-a-9);--colors-blue-p3-a-10: var(--colors-blue-dark-p3-a-10);--colors-blue-p3-a-11: var(--colors-blue-dark-p3-a-11);--colors-blue-p3-a-12: var(--colors-blue-dark-p3-a-12);--colors-crimson-1: var(--colors-crimson-dark-1);--colors-crimson-2: var(--colors-crimson-dark-2);--colors-crimson-3: var(--colors-crimson-dark-3);--colors-crimson-4: var(--colors-crimson-dark-4);--colors-crimson-5: var(--colors-crimson-dark-5);--colors-crimson-6: var(--colors-crimson-dark-6);--colors-crimson-7: var(--colors-crimson-dark-7);--colors-crimson-8: var(--colors-crimson-dark-8);--colors-crimson-9: var(--colors-crimson-dark-9);--colors-crimson-10: var(--colors-crimson-dark-10);--colors-crimson-11: var(--colors-crimson-dark-11);--colors-crimson-12: var(--colors-crimson-dark-12);--colors-crimson-a-1: var(--colors-crimson-dark-a-1);--colors-crimson-a-2: var(--colors-crimson-dark-a-2);--colors-crimson-a-3: var(--colors-crimson-dark-a-3);--colors-crimson-a-4: var(--colors-crimson-dark-a-4);--colors-crimson-a-5: var(--colors-crimson-dark-a-5);--colors-crimson-a-6: var(--colors-crimson-dark-a-6);--colors-crimson-a-7: var(--colors-crimson-dark-a-7);--colors-crimson-a-8: var(--colors-crimson-dark-a-8);--colors-crimson-a-9: var(--colors-crimson-dark-a-9);--colors-crimson-a-10: var(--colors-crimson-dark-a-10);--colors-crimson-a-11: var(--colors-crimson-dark-a-11);--colors-crimson-a-12: var(--colors-crimson-dark-a-12);--colors-crimson-p3-1: var(--colors-crimson-dark-p3-1);--colors-crimson-p3-2: var(--colors-crimson-dark-p3-2);--colors-crimson-p3-3: var(--colors-crimson-dark-p3-3);--colors-crimson-p3-4: var(--colors-crimson-dark-p3-4);--colors-crimson-p3-5: var(--colors-crimson-dark-p3-5);--colors-crimson-p3-6: var(--colors-crimson-dark-p3-6);--colors-crimson-p3-7: var(--colors-crimson-dark-p3-7);--colors-crimson-p3-8: var(--colors-crimson-dark-p3-8);--colors-crimson-p3-9: var(--colors-crimson-dark-p3-9);--colors-crimson-p3-10: var(--colors-crimson-dark-p3-10);--colors-crimson-p3-11: var(--colors-crimson-dark-p3-11);--colors-crimson-p3-12: var(--colors-crimson-dark-p3-12);--colors-crimson-p3-a-1: var(--colors-crimson-dark-p3-a-1);--colors-crimson-p3-a-2: var(--colors-crimson-dark-p3-a-2);--colors-crimson-p3-a-3: var(--colors-crimson-dark-p3-a-3);--colors-crimson-p3-a-4: var(--colors-crimson-dark-p3-a-4);--colors-crimson-p3-a-5: var(--colors-crimson-dark-p3-a-5);--colors-crimson-p3-a-6: var(--colors-crimson-dark-p3-a-6);--colors-crimson-p3-a-7: var(--colors-crimson-dark-p3-a-7);--colors-crimson-p3-a-8: var(--colors-crimson-dark-p3-a-8);--colors-crimson-p3-a-9: var(--colors-crimson-dark-p3-a-9);--colors-crimson-p3-a-10: var(--colors-crimson-dark-p3-a-10);--colors-crimson-p3-a-11: var(--colors-crimson-dark-p3-a-11);--colors-crimson-p3-a-12: var(--colors-crimson-dark-p3-a-12);--colors-grass-1: var(--colors-grass-dark-1);--colors-grass-2: var(--colors-grass-dark-2);--colors-grass-3: var(--colors-grass-dark-3);--colors-grass-4: var(--colors-grass-dark-4);--colors-grass-5: var(--colors-grass-dark-5);--colors-grass-6: var(--colors-grass-dark-6);--colors-grass-7: var(--colors-grass-dark-7);--colors-grass-8: var(--colors-grass-dark-8);--colors-grass-9: var(--colors-grass-dark-9);--colors-grass-10: var(--colors-grass-dark-10);--colors-grass-11: var(--colors-grass-dark-11);--colors-grass-12: var(--colors-grass-dark-12);--colors-grass-a-1: var(--colors-grass-dark-a-1);--colors-grass-a-2: var(--colors-grass-dark-a-2);--colors-grass-a-3: var(--colors-grass-dark-a-3);--colors-grass-a-4: var(--colors-grass-dark-a-4);--colors-grass-a-5: var(--colors-grass-dark-a-5);--colors-grass-a-6: var(--colors-grass-dark-a-6);--colors-grass-a-7: var(--colors-grass-dark-a-7);--colors-grass-a-8: var(--colors-grass-dark-a-8);--colors-grass-a-9: var(--colors-grass-dark-a-9);--colors-grass-a-10: var(--colors-grass-dark-a-10);--colors-grass-a-11: var(--colors-grass-dark-a-11);--colors-grass-a-12: var(--colors-grass-dark-a-12);--colors-grass-p3-1: var(--colors-grass-dark-p3-1);--colors-grass-p3-2: var(--colors-grass-dark-p3-2);--colors-grass-p3-3: var(--colors-grass-dark-p3-3);--colors-grass-p3-4: var(--colors-grass-dark-p3-4);--colors-grass-p3-5: var(--colors-grass-dark-p3-5);--colors-grass-p3-6: var(--colors-grass-dark-p3-6);--colors-grass-p3-7: var(--colors-grass-dark-p3-7);--colors-grass-p3-8: var(--colors-grass-dark-p3-8);--colors-grass-p3-9: var(--colors-grass-dark-p3-9);--colors-grass-p3-10: var(--colors-grass-dark-p3-10);--colors-grass-p3-11: var(--colors-grass-dark-p3-11);--colors-grass-p3-12: var(--colors-grass-dark-p3-12);--colors-grass-p3-a-1: var(--colors-grass-dark-p3-a-1);--colors-grass-p3-a-2: var(--colors-grass-dark-p3-a-2);--colors-grass-p3-a-3: var(--colors-grass-dark-p3-a-3);--colors-grass-p3-a-4: var(--colors-grass-dark-p3-a-4);--colors-grass-p3-a-5: var(--colors-grass-dark-p3-a-5);--colors-grass-p3-a-6: var(--colors-grass-dark-p3-a-6);--colors-grass-p3-a-7: var(--colors-grass-dark-p3-a-7);--colors-grass-p3-a-8: var(--colors-grass-dark-p3-a-8);--colors-grass-p3-a-9: var(--colors-grass-dark-p3-a-9);--colors-grass-p3-a-10: var(--colors-grass-dark-p3-a-10);--colors-grass-p3-a-11: var(--colors-grass-dark-p3-a-11);--colors-grass-p3-a-12: var(--colors-grass-dark-p3-a-12);--colors-indigo-1: var(--colors-indigo-dark-1);--colors-indigo-2: var(--colors-indigo-dark-2);--colors-indigo-3: var(--colors-indigo-dark-3);--colors-indigo-4: var(--colors-indigo-dark-4);--colors-indigo-5: var(--colors-indigo-dark-5);--colors-indigo-6: var(--colors-indigo-dark-6);--colors-indigo-7: var(--colors-indigo-dark-7);--colors-indigo-8: var(--colors-indigo-dark-8);--colors-indigo-9: var(--colors-indigo-dark-9);--colors-indigo-10: var(--colors-indigo-dark-10);--colors-indigo-11: var(--colors-indigo-dark-11);--colors-indigo-12: var(--colors-indigo-dark-12);--colors-indigo-a-1: var(--colors-indigo-dark-a-1);--colors-indigo-a-2: var(--colors-indigo-dark-a-2);--colors-indigo-a-3: var(--colors-indigo-dark-a-3);--colors-indigo-a-4: var(--colors-indigo-dark-a-4);--colors-indigo-a-5: var(--colors-indigo-dark-a-5);--colors-indigo-a-6: var(--colors-indigo-dark-a-6);--colors-indigo-a-7: var(--colors-indigo-dark-a-7);--colors-indigo-a-8: var(--colors-indigo-dark-a-8);--colors-indigo-a-9: var(--colors-indigo-dark-a-9);--colors-indigo-a-10: var(--colors-indigo-dark-a-10);--colors-indigo-a-11: var(--colors-indigo-dark-a-11);--colors-indigo-a-12: var(--colors-indigo-dark-a-12);--colors-indigo-p3-1: var(--colors-indigo-dark-p3-1);--colors-indigo-p3-2: var(--colors-indigo-dark-p3-2);--colors-indigo-p3-3: var(--colors-indigo-dark-p3-3);--colors-indigo-p3-4: var(--colors-indigo-dark-p3-4);--colors-indigo-p3-5: var(--colors-indigo-dark-p3-5);--colors-indigo-p3-6: var(--colors-indigo-dark-p3-6);--colors-indigo-p3-7: var(--colors-indigo-dark-p3-7);--colors-indigo-p3-8: var(--colors-indigo-dark-p3-8);--colors-indigo-p3-9: var(--colors-indigo-dark-p3-9);--colors-indigo-p3-10: var(--colors-indigo-dark-p3-10);--colors-indigo-p3-11: var(--colors-indigo-dark-p3-11);--colors-indigo-p3-12: var(--colors-indigo-dark-p3-12);--colors-indigo-p3-a-1: var(--colors-indigo-dark-p3-a-1);--colors-indigo-p3-a-2: var(--colors-indigo-dark-p3-a-2);--colors-indigo-p3-a-3: var(--colors-indigo-dark-p3-a-3);--colors-indigo-p3-a-4: var(--colors-indigo-dark-p3-a-4);--colors-indigo-p3-a-5: var(--colors-indigo-dark-p3-a-5);--colors-indigo-p3-a-6: var(--colors-indigo-dark-p3-a-6);--colors-indigo-p3-a-7: var(--colors-indigo-dark-p3-a-7);--colors-indigo-p3-a-8: var(--colors-indigo-dark-p3-a-8);--colors-indigo-p3-a-9: var(--colors-indigo-dark-p3-a-9);--colors-indigo-p3-a-10: var(--colors-indigo-dark-p3-a-10);--colors-indigo-p3-a-11: var(--colors-indigo-dark-p3-a-11);--colors-indigo-p3-a-12: var(--colors-indigo-dark-p3-a-12);--colors-lime-1: var(--colors-lime-dark-1);--colors-lime-2: var(--colors-lime-dark-2);--colors-lime-3: var(--colors-lime-dark-3);--colors-lime-4: var(--colors-lime-dark-4);--colors-lime-5: var(--colors-lime-dark-5);--colors-lime-6: var(--colors-lime-dark-6);--colors-lime-7: var(--colors-lime-dark-7);--colors-lime-8: var(--colors-lime-dark-8);--colors-lime-9: var(--colors-lime-dark-9);--colors-lime-10: var(--colors-lime-dark-10);--colors-lime-11: var(--colors-lime-dark-11);--colors-lime-12: var(--colors-lime-dark-12);--colors-lime-a-1: var(--colors-lime-dark-a-1);--colors-lime-a-2: var(--colors-lime-dark-a-2);--colors-lime-a-3: var(--colors-lime-dark-a-3);--colors-lime-a-4: var(--colors-lime-dark-a-4);--colors-lime-a-5: var(--colors-lime-dark-a-5);--colors-lime-a-6: var(--colors-lime-dark-a-6);--colors-lime-a-7: var(--colors-lime-dark-a-7);--colors-lime-a-8: var(--colors-lime-dark-a-8);--colors-lime-a-9: var(--colors-lime-dark-a-9);--colors-lime-a-10: var(--colors-lime-dark-a-10);--colors-lime-a-11: var(--colors-lime-dark-a-11);--colors-lime-a-12: var(--colors-lime-dark-a-12);--colors-lime-p3-1: var(--colors-lime-dark-p3-1);--colors-lime-p3-2: var(--colors-lime-dark-p3-2);--colors-lime-p3-3: var(--colors-lime-dark-p3-3);--colors-lime-p3-4: var(--colors-lime-dark-p3-4);--colors-lime-p3-5: var(--colors-lime-dark-p3-5);--colors-lime-p3-6: var(--colors-lime-dark-p3-6);--colors-lime-p3-7: var(--colors-lime-dark-p3-7);--colors-lime-p3-8: var(--colors-lime-dark-p3-8);--colors-lime-p3-9: var(--colors-lime-dark-p3-9);--colors-lime-p3-10: var(--colors-lime-dark-p3-10);--colors-lime-p3-11: var(--colors-lime-dark-p3-11);--colors-lime-p3-12: var(--colors-lime-dark-p3-12);--colors-lime-p3-a-1: var(--colors-lime-dark-p3-a-1);--colors-lime-p3-a-2: var(--colors-lime-dark-p3-a-2);--colors-lime-p3-a-3: var(--colors-lime-dark-p3-a-3);--colors-lime-p3-a-4: var(--colors-lime-dark-p3-a-4);--colors-lime-p3-a-5: var(--colors-lime-dark-p3-a-5);--colors-lime-p3-a-6: var(--colors-lime-dark-p3-a-6);--colors-lime-p3-a-7: var(--colors-lime-dark-p3-a-7);--colors-lime-p3-a-8: var(--colors-lime-dark-p3-a-8);--colors-lime-p3-a-9: var(--colors-lime-dark-p3-a-9);--colors-lime-p3-a-10: var(--colors-lime-dark-p3-a-10);--colors-lime-p3-a-11: var(--colors-lime-dark-p3-a-11);--colors-lime-p3-a-12: var(--colors-lime-dark-p3-a-12);--colors-orange-1: var(--colors-orange-dark-1);--colors-orange-2: var(--colors-orange-dark-2);--colors-orange-3: var(--colors-orange-dark-3);--colors-orange-4: var(--colors-orange-dark-4);--colors-orange-5: var(--colors-orange-dark-5);--colors-orange-6: var(--colors-orange-dark-6);--colors-orange-7: var(--colors-orange-dark-7);--colors-orange-8: var(--colors-orange-dark-8);--colors-orange-9: var(--colors-orange-dark-9);--colors-orange-10: var(--colors-orange-dark-10);--colors-orange-11: var(--colors-orange-dark-11);--colors-orange-12: var(--colors-orange-dark-12);--colors-orange-a-1: var(--colors-orange-dark-a-1);--colors-orange-a-2: var(--colors-orange-dark-a-2);--colors-orange-a-3: var(--colors-orange-dark-a-3);--colors-orange-a-4: var(--colors-orange-dark-a-4);--colors-orange-a-5: var(--colors-orange-dark-a-5);--colors-orange-a-6: var(--colors-orange-dark-a-6);--colors-orange-a-7: var(--colors-orange-dark-a-7);--colors-orange-a-8: var(--colors-orange-dark-a-8);--colors-orange-a-9: var(--colors-orange-dark-a-9);--colors-orange-a-10: var(--colors-orange-dark-a-10);--colors-orange-a-11: var(--colors-orange-dark-a-11);--colors-orange-a-12: var(--colors-orange-dark-a-12);--colors-orange-p3-1: var(--colors-orange-dark-p3-1);--colors-orange-p3-2: var(--colors-orange-dark-p3-2);--colors-orange-p3-3: var(--colors-orange-dark-p3-3);--colors-orange-p3-4: var(--colors-orange-dark-p3-4);--colors-orange-p3-5: var(--colors-orange-dark-p3-5);--colors-orange-p3-6: var(--colors-orange-dark-p3-6);--colors-orange-p3-7: var(--colors-orange-dark-p3-7);--colors-orange-p3-8: var(--colors-orange-dark-p3-8);--colors-orange-p3-9: var(--colors-orange-dark-p3-9);--colors-orange-p3-10: var(--colors-orange-dark-p3-10);--colors-orange-p3-11: var(--colors-orange-dark-p3-11);--colors-orange-p3-12: var(--colors-orange-dark-p3-12);--colors-orange-p3-a-1: var(--colors-orange-dark-p3-a-1);--colors-orange-p3-a-2: var(--colors-orange-dark-p3-a-2);--colors-orange-p3-a-3: var(--colors-orange-dark-p3-a-3);--colors-orange-p3-a-4: var(--colors-orange-dark-p3-a-4);--colors-orange-p3-a-5: var(--colors-orange-dark-p3-a-5);--colors-orange-p3-a-6: var(--colors-orange-dark-p3-a-6);--colors-orange-p3-a-7: var(--colors-orange-dark-p3-a-7);--colors-orange-p3-a-8: var(--colors-orange-dark-p3-a-8);--colors-orange-p3-a-9: var(--colors-orange-dark-p3-a-9);--colors-orange-p3-a-10: var(--colors-orange-dark-p3-a-10);--colors-orange-p3-a-11: var(--colors-orange-dark-p3-a-11);--colors-orange-p3-a-12: var(--colors-orange-dark-p3-a-12);--colors-pink-1: var(--colors-pink-dark-1);--colors-pink-2: var(--colors-pink-dark-2);--colors-pink-3: var(--colors-pink-dark-3);--colors-pink-4: var(--colors-pink-dark-4);--colors-pink-5: var(--colors-pink-dark-5);--colors-pink-6: var(--colors-pink-dark-6);--colors-pink-7: var(--colors-pink-dark-7);--colors-pink-8: var(--colors-pink-dark-8);--colors-pink-9: var(--colors-pink-dark-9);--colors-pink-10: var(--colors-pink-dark-10);--colors-pink-11: var(--colors-pink-dark-11);--colors-pink-12: var(--colors-pink-dark-12);--colors-pink-a-1: var(--colors-pink-dark-a-1);--colors-pink-a-2: var(--colors-pink-dark-a-2);--colors-pink-a-3: var(--colors-pink-dark-a-3);--colors-pink-a-4: var(--colors-pink-dark-a-4);--colors-pink-a-5: var(--colors-pink-dark-a-5);--colors-pink-a-6: var(--colors-pink-dark-a-6);--colors-pink-a-7: var(--colors-pink-dark-a-7);--colors-pink-a-8: var(--colors-pink-dark-a-8);--colors-pink-a-9: var(--colors-pink-dark-a-9);--colors-pink-a-10: var(--colors-pink-dark-a-10);--colors-pink-a-11: var(--colors-pink-dark-a-11);--colors-pink-a-12: var(--colors-pink-dark-a-12);--colors-pink-p3-1: var(--colors-pink-dark-p3-1);--colors-pink-p3-2: var(--colors-pink-dark-p3-2);--colors-pink-p3-3: var(--colors-pink-dark-p3-3);--colors-pink-p3-4: var(--colors-pink-dark-p3-4);--colors-pink-p3-5: var(--colors-pink-dark-p3-5);--colors-pink-p3-6: var(--colors-pink-dark-p3-6);--colors-pink-p3-7: var(--colors-pink-dark-p3-7);--colors-pink-p3-8: var(--colors-pink-dark-p3-8);--colors-pink-p3-9: var(--colors-pink-dark-p3-9);--colors-pink-p3-10: var(--colors-pink-dark-p3-10);--colors-pink-p3-11: var(--colors-pink-dark-p3-11);--colors-pink-p3-12: var(--colors-pink-dark-p3-12);--colors-pink-p3-a-1: var(--colors-pink-dark-p3-a-1);--colors-pink-p3-a-2: var(--colors-pink-dark-p3-a-2);--colors-pink-p3-a-3: var(--colors-pink-dark-p3-a-3);--colors-pink-p3-a-4: var(--colors-pink-dark-p3-a-4);--colors-pink-p3-a-5: var(--colors-pink-dark-p3-a-5);--colors-pink-p3-a-6: var(--colors-pink-dark-p3-a-6);--colors-pink-p3-a-7: var(--colors-pink-dark-p3-a-7);--colors-pink-p3-a-8: var(--colors-pink-dark-p3-a-8);--colors-pink-p3-a-9: var(--colors-pink-dark-p3-a-9);--colors-pink-p3-a-10: var(--colors-pink-dark-p3-a-10);--colors-pink-p3-a-11: var(--colors-pink-dark-p3-a-11);--colors-pink-p3-a-12: var(--colors-pink-dark-p3-a-12);--colors-purple-1: var(--colors-purple-dark-1);--colors-purple-2: var(--colors-purple-dark-2);--colors-purple-3: var(--colors-purple-dark-3);--colors-purple-4: var(--colors-purple-dark-4);--colors-purple-5: var(--colors-purple-dark-5);--colors-purple-6: var(--colors-purple-dark-6);--colors-purple-7: var(--colors-purple-dark-7);--colors-purple-8: var(--colors-purple-dark-8);--colors-purple-9: var(--colors-purple-dark-9);--colors-purple-10: var(--colors-purple-dark-10);--colors-purple-11: var(--colors-purple-dark-11);--colors-purple-12: var(--colors-purple-dark-12);--colors-purple-a-1: var(--colors-purple-dark-a-1);--colors-purple-a-2: var(--colors-purple-dark-a-2);--colors-purple-a-3: var(--colors-purple-dark-a-3);--colors-purple-a-4: var(--colors-purple-dark-a-4);--colors-purple-a-5: var(--colors-purple-dark-a-5);--colors-purple-a-6: var(--colors-purple-dark-a-6);--colors-purple-a-7: var(--colors-purple-dark-a-7);--colors-purple-a-8: var(--colors-purple-dark-a-8);--colors-purple-a-9: var(--colors-purple-dark-a-9);--colors-purple-a-10: var(--colors-purple-dark-a-10);--colors-purple-a-11: var(--colors-purple-dark-a-11);--colors-purple-a-12: var(--colors-purple-dark-a-12);--colors-purple-p3-1: var(--colors-purple-dark-p3-1);--colors-purple-p3-2: var(--colors-purple-dark-p3-2);--colors-purple-p3-3: var(--colors-purple-dark-p3-3);--colors-purple-p3-4: var(--colors-purple-dark-p3-4);--colors-purple-p3-5: var(--colors-purple-dark-p3-5);--colors-purple-p3-6: var(--colors-purple-dark-p3-6);--colors-purple-p3-7: var(--colors-purple-dark-p3-7);--colors-purple-p3-8: var(--colors-purple-dark-p3-8);--colors-purple-p3-9: var(--colors-purple-dark-p3-9);--colors-purple-p3-10: var(--colors-purple-dark-p3-10);--colors-purple-p3-11: var(--colors-purple-dark-p3-11);--colors-purple-p3-12: var(--colors-purple-dark-p3-12);--colors-purple-p3-a-1: var(--colors-purple-dark-p3-a-1);--colors-purple-p3-a-2: var(--colors-purple-dark-p3-a-2);--colors-purple-p3-a-3: var(--colors-purple-dark-p3-a-3);--colors-purple-p3-a-4: var(--colors-purple-dark-p3-a-4);--colors-purple-p3-a-5: var(--colors-purple-dark-p3-a-5);--colors-purple-p3-a-6: var(--colors-purple-dark-p3-a-6);--colors-purple-p3-a-7: var(--colors-purple-dark-p3-a-7);--colors-purple-p3-a-8: var(--colors-purple-dark-p3-a-8);--colors-purple-p3-a-9: var(--colors-purple-dark-p3-a-9);--colors-purple-p3-a-10: var(--colors-purple-dark-p3-a-10);--colors-purple-p3-a-11: var(--colors-purple-dark-p3-a-11);--colors-purple-p3-a-12: var(--colors-purple-dark-p3-a-12);--colors-red-1: var(--colors-red-dark-1);--colors-red-2: var(--colors-red-dark-2);--colors-red-3: var(--colors-red-dark-3);--colors-red-4: var(--colors-red-dark-4);--colors-red-5: var(--colors-red-dark-5);--colors-red-6: var(--colors-red-dark-6);--colors-red-7: var(--colors-red-dark-7);--colors-red-8: var(--colors-red-dark-8);--colors-red-9: var(--colors-red-dark-9);--colors-red-10: var(--colors-red-dark-10);--colors-red-11: var(--colors-red-dark-11);--colors-red-12: var(--colors-red-dark-12);--colors-red-a-1: var(--colors-red-dark-a-1);--colors-red-a-2: var(--colors-red-dark-a-2);--colors-red-a-3: var(--colors-red-dark-a-3);--colors-red-a-4: var(--colors-red-dark-a-4);--colors-red-a-5: var(--colors-red-dark-a-5);--colors-red-a-6: var(--colors-red-dark-a-6);--colors-red-a-7: var(--colors-red-dark-a-7);--colors-red-a-8: var(--colors-red-dark-a-8);--colors-red-a-9: var(--colors-red-dark-a-9);--colors-red-a-10: var(--colors-red-dark-a-10);--colors-red-a-11: var(--colors-red-dark-a-11);--colors-red-a-12: var(--colors-red-dark-a-12);--colors-red-p3-1: var(--colors-red-dark-p3-1);--colors-red-p3-2: var(--colors-red-dark-p3-2);--colors-red-p3-3: var(--colors-red-dark-p3-3);--colors-red-p3-4: var(--colors-red-dark-p3-4);--colors-red-p3-5: var(--colors-red-dark-p3-5);--colors-red-p3-6: var(--colors-red-dark-p3-6);--colors-red-p3-7: var(--colors-red-dark-p3-7);--colors-red-p3-8: var(--colors-red-dark-p3-8);--colors-red-p3-9: var(--colors-red-dark-p3-9);--colors-red-p3-10: var(--colors-red-dark-p3-10);--colors-red-p3-11: var(--colors-red-dark-p3-11);--colors-red-p3-12: var(--colors-red-dark-p3-12);--colors-red-p3-a-1: var(--colors-red-dark-p3-a-1);--colors-red-p3-a-2: var(--colors-red-dark-p3-a-2);--colors-red-p3-a-3: var(--colors-red-dark-p3-a-3);--colors-red-p3-a-4: var(--colors-red-dark-p3-a-4);--colors-red-p3-a-5: var(--colors-red-dark-p3-a-5);--colors-red-p3-a-6: var(--colors-red-dark-p3-a-6);--colors-red-p3-a-7: var(--colors-red-dark-p3-a-7);--colors-red-p3-a-8: var(--colors-red-dark-p3-a-8);--colors-red-p3-a-9: var(--colors-red-dark-p3-a-9);--colors-red-p3-a-10: var(--colors-red-dark-p3-a-10);--colors-red-p3-a-11: var(--colors-red-dark-p3-a-11);--colors-red-p3-a-12: var(--colors-red-dark-p3-a-12);--colors-ruby-1: var(--colors-ruby-dark-1);--colors-ruby-2: var(--colors-ruby-dark-2);--colors-ruby-3: var(--colors-ruby-dark-3);--colors-ruby-4: var(--colors-ruby-dark-4);--colors-ruby-5: var(--colors-ruby-dark-5);--colors-ruby-6: var(--colors-ruby-dark-6);--colors-ruby-7: var(--colors-ruby-dark-7);--colors-ruby-8: var(--colors-ruby-dark-8);--colors-ruby-9: var(--colors-ruby-dark-9);--colors-ruby-10: var(--colors-ruby-dark-10);--colors-ruby-11: var(--colors-ruby-dark-11);--colors-ruby-12: var(--colors-ruby-dark-12);--colors-ruby-a-1: var(--colors-ruby-dark-a-1);--colors-ruby-a-2: var(--colors-ruby-dark-a-2);--colors-ruby-a-3: var(--colors-ruby-dark-a-3);--colors-ruby-a-4: var(--colors-ruby-dark-a-4);--colors-ruby-a-5: var(--colors-ruby-dark-a-5);--colors-ruby-a-6: var(--colors-ruby-dark-a-6);--colors-ruby-a-7: var(--colors-ruby-dark-a-7);--colors-ruby-a-8: var(--colors-ruby-dark-a-8);--colors-ruby-a-9: var(--colors-ruby-dark-a-9);--colors-ruby-a-10: var(--colors-ruby-dark-a-10);--colors-ruby-a-11: var(--colors-ruby-dark-a-11);--colors-ruby-a-12: var(--colors-ruby-dark-a-12);--colors-ruby-p3-1: var(--colors-ruby-dark-p3-1);--colors-ruby-p3-2: var(--colors-ruby-dark-p3-2);--colors-ruby-p3-3: var(--colors-ruby-dark-p3-3);--colors-ruby-p3-4: var(--colors-ruby-dark-p3-4);--colors-ruby-p3-5: var(--colors-ruby-dark-p3-5);--colors-ruby-p3-6: var(--colors-ruby-dark-p3-6);--colors-ruby-p3-7: var(--colors-ruby-dark-p3-7);--colors-ruby-p3-8: var(--colors-ruby-dark-p3-8);--colors-ruby-p3-9: var(--colors-ruby-dark-p3-9);--colors-ruby-p3-10: var(--colors-ruby-dark-p3-10);--colors-ruby-p3-11: var(--colors-ruby-dark-p3-11);--colors-ruby-p3-12: var(--colors-ruby-dark-p3-12);--colors-ruby-p3-a-1: var(--colors-ruby-dark-p3-a-1);--colors-ruby-p3-a-2: var(--colors-ruby-dark-p3-a-2);--colors-ruby-p3-a-3: var(--colors-ruby-dark-p3-a-3);--colors-ruby-p3-a-4: var(--colors-ruby-dark-p3-a-4);--colors-ruby-p3-a-5: var(--colors-ruby-dark-p3-a-5);--colors-ruby-p3-a-6: var(--colors-ruby-dark-p3-a-6);--colors-ruby-p3-a-7: var(--colors-ruby-dark-p3-a-7);--colors-ruby-p3-a-8: var(--colors-ruby-dark-p3-a-8);--colors-ruby-p3-a-9: var(--colors-ruby-dark-p3-a-9);--colors-ruby-p3-a-10: var(--colors-ruby-dark-p3-a-10);--colors-ruby-p3-a-11: var(--colors-ruby-dark-p3-a-11);--colors-ruby-p3-a-12: var(--colors-ruby-dark-p3-a-12);--colors-teal-1: var(--colors-teal-dark-1);--colors-teal-2: var(--colors-teal-dark-2);--colors-teal-3: var(--colors-teal-dark-3);--colors-teal-4: var(--colors-teal-dark-4);--colors-teal-5: var(--colors-teal-dark-5);--colors-teal-6: var(--colors-teal-dark-6);--colors-teal-7: var(--colors-teal-dark-7);--colors-teal-8: var(--colors-teal-dark-8);--colors-teal-9: var(--colors-teal-dark-9);--colors-teal-10: var(--colors-teal-dark-10);--colors-teal-11: var(--colors-teal-dark-11);--colors-teal-12: var(--colors-teal-dark-12);--colors-teal-a-1: var(--colors-teal-dark-a-1);--colors-teal-a-2: var(--colors-teal-dark-a-2);--colors-teal-a-3: var(--colors-teal-dark-a-3);--colors-teal-a-4: var(--colors-teal-dark-a-4);--colors-teal-a-5: var(--colors-teal-dark-a-5);--colors-teal-a-6: var(--colors-teal-dark-a-6);--colors-teal-a-7: var(--colors-teal-dark-a-7);--colors-teal-a-8: var(--colors-teal-dark-a-8);--colors-teal-a-9: var(--colors-teal-dark-a-9);--colors-teal-a-10: var(--colors-teal-dark-a-10);--colors-teal-a-11: var(--colors-teal-dark-a-11);--colors-teal-a-12: var(--colors-teal-dark-a-12);--colors-teal-p3-1: var(--colors-teal-dark-p3-1);--colors-teal-p3-2: var(--colors-teal-dark-p3-2);--colors-teal-p3-3: var(--colors-teal-dark-p3-3);--colors-teal-p3-4: var(--colors-teal-dark-p3-4);--colors-teal-p3-5: var(--colors-teal-dark-p3-5);--colors-teal-p3-6: var(--colors-teal-dark-p3-6);--colors-teal-p3-7: var(--colors-teal-dark-p3-7);--colors-teal-p3-8: var(--colors-teal-dark-p3-8);--colors-teal-p3-9: var(--colors-teal-dark-p3-9);--colors-teal-p3-10: var(--colors-teal-dark-p3-10);--colors-teal-p3-11: var(--colors-teal-dark-p3-11);--colors-teal-p3-12: var(--colors-teal-dark-p3-12);--colors-teal-p3-a-1: var(--colors-teal-dark-p3-a-1);--colors-teal-p3-a-2: var(--colors-teal-dark-p3-a-2);--colors-teal-p3-a-3: var(--colors-teal-dark-p3-a-3);--colors-teal-p3-a-4: var(--colors-teal-dark-p3-a-4);--colors-teal-p3-a-5: var(--colors-teal-dark-p3-a-5);--colors-teal-p3-a-6: var(--colors-teal-dark-p3-a-6);--colors-teal-p3-a-7: var(--colors-teal-dark-p3-a-7);--colors-teal-p3-a-8: var(--colors-teal-dark-p3-a-8);--colors-teal-p3-a-9: var(--colors-teal-dark-p3-a-9);--colors-teal-p3-a-10: var(--colors-teal-dark-p3-a-10);--colors-teal-p3-a-11: var(--colors-teal-dark-p3-a-11);--colors-teal-p3-a-12: var(--colors-teal-dark-p3-a-12);--colors-tomato-1: var(--colors-tomato-dark-1);--colors-tomato-2: var(--colors-tomato-dark-2);--colors-tomato-3: var(--colors-tomato-dark-3);--colors-tomato-4: var(--colors-tomato-dark-4);--colors-tomato-5: var(--colors-tomato-dark-5);--colors-tomato-6: var(--colors-tomato-dark-6);--colors-tomato-7: var(--colors-tomato-dark-7);--colors-tomato-8: var(--colors-tomato-dark-8);--colors-tomato-9: var(--colors-tomato-dark-9);--colors-tomato-10: var(--colors-tomato-dark-10);--colors-tomato-11: var(--colors-tomato-dark-11);--colors-tomato-12: var(--colors-tomato-dark-12);--colors-tomato-a-1: var(--colors-tomato-dark-a-1);--colors-tomato-a-2: var(--colors-tomato-dark-a-2);--colors-tomato-a-3: var(--colors-tomato-dark-a-3);--colors-tomato-a-4: var(--colors-tomato-dark-a-4);--colors-tomato-a-5: var(--colors-tomato-dark-a-5);--colors-tomato-a-6: var(--colors-tomato-dark-a-6);--colors-tomato-a-7: var(--colors-tomato-dark-a-7);--colors-tomato-a-8: var(--colors-tomato-dark-a-8);--colors-tomato-a-9: var(--colors-tomato-dark-a-9);--colors-tomato-a-10: var(--colors-tomato-dark-a-10);--colors-tomato-a-11: var(--colors-tomato-dark-a-11);--colors-tomato-a-12: var(--colors-tomato-dark-a-12);--colors-tomato-p3-1: var(--colors-tomato-dark-p3-1);--colors-tomato-p3-2: var(--colors-tomato-dark-p3-2);--colors-tomato-p3-3: var(--colors-tomato-dark-p3-3);--colors-tomato-p3-4: var(--colors-tomato-dark-p3-4);--colors-tomato-p3-5: var(--colors-tomato-dark-p3-5);--colors-tomato-p3-6: var(--colors-tomato-dark-p3-6);--colors-tomato-p3-7: var(--colors-tomato-dark-p3-7);--colors-tomato-p3-8: var(--colors-tomato-dark-p3-8);--colors-tomato-p3-9: var(--colors-tomato-dark-p3-9);--colors-tomato-p3-10: var(--colors-tomato-dark-p3-10);--colors-tomato-p3-11: var(--colors-tomato-dark-p3-11);--colors-tomato-p3-12: var(--colors-tomato-dark-p3-12);--colors-tomato-p3-a-1: var(--colors-tomato-dark-p3-a-1);--colors-tomato-p3-a-2: var(--colors-tomato-dark-p3-a-2);--colors-tomato-p3-a-3: var(--colors-tomato-dark-p3-a-3);--colors-tomato-p3-a-4: var(--colors-tomato-dark-p3-a-4);--colors-tomato-p3-a-5: var(--colors-tomato-dark-p3-a-5);--colors-tomato-p3-a-6: var(--colors-tomato-dark-p3-a-6);--colors-tomato-p3-a-7: var(--colors-tomato-dark-p3-a-7);--colors-tomato-p3-a-8: var(--colors-tomato-dark-p3-a-8);--colors-tomato-p3-a-9: var(--colors-tomato-dark-p3-a-9);--colors-tomato-p3-a-10: var(--colors-tomato-dark-p3-a-10);--colors-tomato-p3-a-11: var(--colors-tomato-dark-p3-a-11);--colors-tomato-p3-a-12: var(--colors-tomato-dark-p3-a-12);--colors-violet-1: var(--colors-violet-dark-1);--colors-violet-2: var(--colors-violet-dark-2);--colors-violet-3: var(--colors-violet-dark-3);--colors-violet-4: var(--colors-violet-dark-4);--colors-violet-5: var(--colors-violet-dark-5);--colors-violet-6: var(--colors-violet-dark-6);--colors-violet-7: var(--colors-violet-dark-7);--colors-violet-8: var(--colors-violet-dark-8);--colors-violet-9: var(--colors-violet-dark-9);--colors-violet-10: var(--colors-violet-dark-10);--colors-violet-11: var(--colors-violet-dark-11);--colors-violet-12: var(--colors-violet-dark-12);--colors-violet-a-1: var(--colors-violet-dark-a-1);--colors-violet-a-2: var(--colors-violet-dark-a-2);--colors-violet-a-3: var(--colors-violet-dark-a-3);--colors-violet-a-4: var(--colors-violet-dark-a-4);--colors-violet-a-5: var(--colors-violet-dark-a-5);--colors-violet-a-6: var(--colors-violet-dark-a-6);--colors-violet-a-7: var(--colors-violet-dark-a-7);--colors-violet-a-8: var(--colors-violet-dark-a-8);--colors-violet-a-9: var(--colors-violet-dark-a-9);--colors-violet-a-10: var(--colors-violet-dark-a-10);--colors-violet-a-11: var(--colors-violet-dark-a-11);--colors-violet-a-12: var(--colors-violet-dark-a-12);--colors-violet-p3-1: var(--colors-violet-dark-p3-1);--colors-violet-p3-2: var(--colors-violet-dark-p3-2);--colors-violet-p3-3: var(--colors-violet-dark-p3-3);--colors-violet-p3-4: var(--colors-violet-dark-p3-4);--colors-violet-p3-5: var(--colors-violet-dark-p3-5);--colors-violet-p3-6: var(--colors-violet-dark-p3-6);--colors-violet-p3-7: var(--colors-violet-dark-p3-7);--colors-violet-p3-8: var(--colors-violet-dark-p3-8);--colors-violet-p3-9: var(--colors-violet-dark-p3-9);--colors-violet-p3-10: var(--colors-violet-dark-p3-10);--colors-violet-p3-11: var(--colors-violet-dark-p3-11);--colors-violet-p3-12: var(--colors-violet-dark-p3-12);--colors-violet-p3-a-1: var(--colors-violet-dark-p3-a-1);--colors-violet-p3-a-2: var(--colors-violet-dark-p3-a-2);--colors-violet-p3-a-3: var(--colors-violet-dark-p3-a-3);--colors-violet-p3-a-4: var(--colors-violet-dark-p3-a-4);--colors-violet-p3-a-5: var(--colors-violet-dark-p3-a-5);--colors-violet-p3-a-6: var(--colors-violet-dark-p3-a-6);--colors-violet-p3-a-7: var(--colors-violet-dark-p3-a-7);--colors-violet-p3-a-8: var(--colors-violet-dark-p3-a-8);--colors-violet-p3-a-9: var(--colors-violet-dark-p3-a-9);--colors-violet-p3-a-10: var(--colors-violet-dark-p3-a-10);--colors-violet-p3-a-11: var(--colors-violet-dark-p3-a-11);--colors-violet-p3-a-12: var(--colors-violet-dark-p3-a-12);--colors-yellow-1: var(--colors-yellow-dark-1);--colors-yellow-2: var(--colors-yellow-dark-2);--colors-yellow-3: var(--colors-yellow-dark-3);--colors-yellow-4: var(--colors-yellow-dark-4);--colors-yellow-5: var(--colors-yellow-dark-5);--colors-yellow-6: var(--colors-yellow-dark-6);--colors-yellow-7: var(--colors-yellow-dark-7);--colors-yellow-8: var(--colors-yellow-dark-8);--colors-yellow-9: var(--colors-yellow-dark-9);--colors-yellow-10: var(--colors-yellow-dark-10);--colors-yellow-11: var(--colors-yellow-dark-11);--colors-yellow-12: var(--colors-yellow-dark-12);--colors-yellow-a-1: var(--colors-yellow-dark-a-1);--colors-yellow-a-2: var(--colors-yellow-dark-a-2);--colors-yellow-a-3: var(--colors-yellow-dark-a-3);--colors-yellow-a-4: var(--colors-yellow-dark-a-4);--colors-yellow-a-5: var(--colors-yellow-dark-a-5);--colors-yellow-a-6: var(--colors-yellow-dark-a-6);--colors-yellow-a-7: var(--colors-yellow-dark-a-7);--colors-yellow-a-8: var(--colors-yellow-dark-a-8);--colors-yellow-a-9: var(--colors-yellow-dark-a-9);--colors-yellow-a-10: var(--colors-yellow-dark-a-10);--colors-yellow-a-11: var(--colors-yellow-dark-a-11);--colors-yellow-a-12: var(--colors-yellow-dark-a-12);--colors-yellow-p3-1: var(--colors-yellow-dark-p3-1);--colors-yellow-p3-2: var(--colors-yellow-dark-p3-2);--colors-yellow-p3-3: var(--colors-yellow-dark-p3-3);--colors-yellow-p3-4: var(--colors-yellow-dark-p3-4);--colors-yellow-p3-5: var(--colors-yellow-dark-p3-5);--colors-yellow-p3-6: var(--colors-yellow-dark-p3-6);--colors-yellow-p3-7: var(--colors-yellow-dark-p3-7);--colors-yellow-p3-8: var(--colors-yellow-dark-p3-8);--colors-yellow-p3-9: var(--colors-yellow-dark-p3-9);--colors-yellow-p3-10: var(--colors-yellow-dark-p3-10);--colors-yellow-p3-11: var(--colors-yellow-dark-p3-11);--colors-yellow-p3-12: var(--colors-yellow-dark-p3-12);--colors-yellow-p3-a-1: var(--colors-yellow-dark-p3-a-1);--colors-yellow-p3-a-2: var(--colors-yellow-dark-p3-a-2);--colors-yellow-p3-a-3: var(--colors-yellow-dark-p3-a-3);--colors-yellow-p3-a-4: var(--colors-yellow-dark-p3-a-4);--colors-yellow-p3-a-5: var(--colors-yellow-dark-p3-a-5);--colors-yellow-p3-a-6: var(--colors-yellow-dark-p3-a-6);--colors-yellow-p3-a-7: var(--colors-yellow-dark-p3-a-7);--colors-yellow-p3-a-8: var(--colors-yellow-dark-p3-a-8);--colors-yellow-p3-a-9: var(--colors-yellow-dark-p3-a-9);--colors-yellow-p3-a-10: var(--colors-yellow-dark-p3-a-10);--colors-yellow-p3-a-11: var(--colors-yellow-dark-p3-a-11);--colors-yellow-p3-a-12: var(--colors-yellow-dark-p3-a-12);--colors-likec4-background-pattern: color-mix(in oklab, var(--mantine-color-dark-4) 70%, transparent 30%);--colors-likec4-mix-color: white;--colors-likec4-panel-bg: var(--mantine-color-dark-6);--colors-likec4-panel-action-bg: color-mix(in oklab, var(--mantine-color-dark-7) 70%, transparent 30%);--colors-likec4-panel-action-bg-hover: var(--mantine-color-dark-8);--colors-likec4-panel-action-warning-hover: var(--mantine-color-orange-5);--colors-likec4-panel-action-warning-bg: color-mix(in oklab, var(--mantine-color-orange-9) 10%, transparent 90%);--colors-likec4-panel-action-warning-bg-hover: color-mix(in oklab, var(--mantine-color-orange-9) 20%, transparent 80%);--colors-likec4-dropdown-bg: var(--mantine-color-dark-6);--colors-likec4-overlay-body: var(--mantine-color-dark-6);--colors-likec4-compare-manual: var(--mantine-color-orange-6);--colors-likec4-compare-manual-outline: color-mix(in oklab, var(--mantine-color-orange-6) 80%, transparent 20%) }[data-mantine-color-scheme=light]{--colors-likec4-background-pattern: var(--mantine-color-gray-4);--colors-likec4-mix-color: black;--colors-likec4-panel-border: var(--mantine-color-gray-2);--colors-likec4-overlay-backdrop: rgb(15 15 15);--colors-likec4-compare-manual: var(--mantine-color-orange-8);--colors-likec4-compare-manual-outline: var(--mantine-color-orange-8) }@keyframes indicatorOpacity{0%{opacity:.8;stroke-opacity:.8}to{opacity:.4;stroke-opacity:.4}}@keyframes xyedgeAnimated{0%{stroke-dashoffset:36}to{stroke-dashoffset:0}}}@layer recipes{@layer _base{.likec4-edge-label{background:var(--xy-edge-label-background-color);border:0px solid transparent;padding-block:var(--spacing-1);padding-inline:var(--spacing-1\\.5);gap:var(--spacing-0\\.5);border-radius:4px;font-family:var(--fonts-likec4-relation);display:flex;flex-direction:column;align-items:center;color:var(--xy-edge-label-color);width:max-content;max-width:var(--sizes-100\\%)}.likec4-edge-label .likec4-edge-label__step-number{padding:var(--spacing-1);background:color-mix(in oklab,var(--likec4-palette-relation-label-bg),var(--colors-likec4-mix-color) 10%);flex:0 0 auto;align-self:stretch;font-weight:600;font-size:14px;text-align:center;font-variant-numeric:tabular-nums;min-width:22px;border-top-left-radius:4px;border-bottom-left-radius:4px}.likec4-edge-label .likec4-edge-label__step-number:only-child{border-radius:4px;min-width:24px}[data-mantine-color-scheme=dark] :where([data-likec4-color=gray]) .likec4-edge-label .likec4-edge-label__step-number{background:color-mix(in oklab,var(--likec4-palette-relation-label-bg),var(--colors-likec4-mix-color) 15%)}.likec4-edge-label .likec4-edge-label__text{margin:var(--spacing-0);white-space-collapse:preserve-breaks;font-size:14px;line-height:1.2}.likec4-edge-label .likec4-edge-label__contents{display:contents}.likec4-edge-label .likec4-edge-label__contents:is(:empty,[data-empty]){display:none!important}.likec4-edge-label .likec4-edge-label__technology{text-align:center;white-space-collapse:preserve-breaks;font-size:11px;line-height:var(--line-heights-1);opacity:.75}.likec4-overlay{--_blur: 0px;--_level: 0;--_offset: 0px;--_inset: calc((1 + var(--_level) * .75) * var(--_offset));--_opacity: 0%;--_border-radius: 0px;margin:var(--spacing-0);background:var(--colors-likec4-overlay-border);border:var(--borders-transparent);inset:var(--spacing-0);padding:var(--spacing-0);outline:var(--borders-none);border-radius:var(--_border-radius);box-sizing:border-box;position:fixed;box-shadow:var(--shadows-xl);width:100vw;height:100vh;max-width:100vw;max-height:100vh}.likec4-overlay::backdrop{cursor:zoom-out}.likec4-overlay .likec4-overlay-body{border:var(--borders-transparent);background:var(--colors-likec4-overlay-body);overflow:hidden;position:relative;container-name:likec4-dialog;container-type:size;width:var(--sizes-100\\%);height:var(--sizes-100\\%)}.likec4-markdown-block{--text-fz: 1rem;--text-fz-sm: calc(var(--text-fz) * var(--mantine-scale, 1) / 1.125);--text-fz-md: calc(var(--text-fz) * var(--mantine-scale, 1));--typography-spacing: calc(.75 * var(--text-fz-md));--text-fw-headings: 600;--code-background: var(--mantine-color-gray-2);--code-color: var(--mantine-color-black);font-size:var(--text-fz-md);line-height:var(--mantine-line-height)}[data-mantine-color-scheme=dark] .likec4-markdown-block{--code-background: var(--mantine-color-dark-8);--code-color: var(--mantine-color-white);--color-border-default: #30363d;--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-success-fg: #3fb950;--color-success-emphasis: #238636}[data-mantine-color-scheme=light] .likec4-markdown-block{--color-border-default: #d0d7de;--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-danger-fg: #d1242f;--color-danger-emphasis: #cf222e;--color-attention-fg: #9a6700;--color-attention-emphasis: #9a6700;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-success-fg: #1a7f37;--color-success-emphasis: #1f883d}.likec4-markdown-block :where(hr){border:var(--borders-none);border-bottom:1px solid;border-color:var(--mantine-color-gray-3);margin-top:calc(var(--typography-spacing) / 2);margin-bottom:calc(var(--typography-spacing) / 2)}[data-mantine-color-scheme=dark] .likec4-markdown-block :where(hr){border-color:var(--mantine-color-dark-3)}.likec4-markdown-block :where(pre){margin:var(--spacing-0);padding-inline:var(--spacing-3);padding-block:var(--spacing-2);border-radius:var(--radii-sm);line-height:var(--mantine-line-height-xs);font-family:var(--mantine-font-family-monospace);font-size:var(--text-fz-sm);background-color:var(--code-background);color:var(--code-color);margin-top:var(--typography-spacing);margin-bottom:var(--typography-spacing);overflow-x:auto}.likec4-markdown-block :where(code){padding:1px 4px;border-radius:var(--radii-xs);line-height:var(--line-heights-1);font-family:var(--mantine-font-family-monospace);font-size:var(--text-fz-sm);background-color:var(--code-background);color:var(--code-color)}.likec4-markdown-block :where(pre code){padding:var(--spacing-0);border:0;border-radius:var(--radii-0);background-color:var(--colors-transparent);color:inherit}.likec4-markdown-block :where(blockquote){margin:var(--spacing-0);padding:var(--spacing-xs);border-radius:var(--mantine-radius-sm);font-size:var(--text-fz-md);background-color:var(--mantine-color-gray-1)}[data-mantine-color-scheme=dark] .likec4-markdown-block :where(blockquote){background-color:var(--mantine-color-dark-5)}.likec4-markdown-block :where(blockquote):not(:first-child){margin-top:var(--typography-spacing)}.likec4-markdown-block :where(h1,h2,h3,h4,h5,h6){text-wrap:var(--mantine-heading-text-wrap);line-height:1.5;font-family:var(--mantine-font-family-headings);margin-bottom:var(--typography-spacing)}.likec4-markdown-block :where(a){text-decoration:none;font-size:var(--text-fz-md);color:var(--mantine-color-anchor);font-weight:500}.likec4-markdown-block :where(a):is(:hover,[data-hover]){text-decoration:underline}.likec4-markdown-block .markdown-alert{border-left:.25em solid var(--borderColor-default, var(--color-border-default));color:inherit;margin-bottom:calc(var(--typography-spacing) * 1.5);padding-left:1em;padding-right:.5em}.likec4-markdown-block .markdown-alert .markdown-alert-title{gap:var(--spacing-2);align-items:center;display:flex;font-size:var(--text-fz-md);font-weight:500;line-height:1.5;margin-bottom:.1em}.likec4-markdown-block .markdown-alert .markdown-alert-title svg{fill:currentColor;height:var(--text-fz-md)}.likec4-markdown-block .markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--color-accent-fg)}.likec4-markdown-block .markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--color-success-fg)}.likec4-markdown-block .markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--color-done-fg)}.likec4-markdown-block .markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--color-attention-fg)}.likec4-markdown-block .markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--color-danger-fg)}.likec4-markdown-block .markdown-alert:last-child{margin-bottom:var(--spacing-0)!important}.likec4-markdown-block .markdown-alert.markdown-alert-note{border-left-color:var(--borderColor-accent-emphasis,var(--color-accent-emphasis))}.likec4-markdown-block .markdown-alert.markdown-alert-tip{border-left-color:var(--borderColor-success-emphasis,var(--color-success-emphasis))}.likec4-markdown-block .markdown-alert.markdown-alert-important{border-left-color:var(--borderColor-done-emphasis,var(--color-done-emphasis))}.likec4-markdown-block .markdown-alert.markdown-alert-warning{border-left-color:var(--borderColor-attention-emphasis,var(--color-attention-emphasis))}.likec4-markdown-block .markdown-alert.markdown-alert-caution{border-left-color:var(--borderColor-danger-emphasis,var(--color-danger-emphasis))}.likec4-markdown-block :is(h1){font-size:calc(1.476 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :is(h2){font-size:calc(1.383 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :is(h3){font-size:calc(1.296 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :is(h4){font-size:calc(1.215 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :is(h5){font-size:calc(1.138 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :is(h6){font-size:calc(1.067 * var(--text-fz-md));font-weight:var(--text-fw-headings)}.likec4-markdown-block :where(p){font-size:var(--text-fz-md);margin-top:var(--spacing-0);margin-bottom:var(--typography-spacing)}.likec4-markdown-block :where(strong){font-weight:500}.likec4-markdown-block :where(mark){font-size:var(--text-fz-md);background-color:var(--mantine-color-yellow-2);color:inherit}[data-mantine-color-scheme=dark] .likec4-markdown-block :where(mark){background-color:var(--mantine-color-yellow-5);color:var(--mantine-color-black)}.likec4-markdown-block :where(ul,ol):not([data-type=taskList]){padding-inline-start:var(--typography-spacing);list-style-position:inside;margin-bottom:var(--typography-spacing)}.likec4-markdown-block :where(table){border-collapse:collapse;caption-side:bottom;width:var(--sizes-100\\%);margin-bottom:var(--typography-spacing)}[data-mantine-color-scheme=light] .likec4-markdown-block :where(table){--table-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .likec4-markdown-block :where(table){--table-border-color: var(--mantine-color-dark-4)}.likec4-markdown-block :where(table) :where(th){padding:var(--typography-spacing);text-align:left;font-weight:700;font-size:var(--text-fz-sm)}.likec4-markdown-block :where(table) :where(td){padding:var(--typography-spacing);border-bottom:1px solid;border-color:var(--table-border-color);font-size:var(--text-fz-sm)}.likec4-markdown-block :where(table) :where(thead th){border-bottom:1px solid;border-color:var(--table-border-color)}.likec4-markdown-block :where(table) :where(tfoot th){border-top:1px solid;border-color:var(--table-border-color)}.likec4-markdown-block :where(table) :where(tr:last-of-type td){border-bottom:0}.likec4-markdown-block :where(table) :where(caption){font-size:var(--text-fz-sm);color:var(--mantine-color-dimmed);margin-top:calc(.5 * var(--typography-spacing) + 1px)}.likec4-markdown-block :first-child{margin-top:var(--spacing-0)}.likec4-markdown-block :last-child{margin-bottom:var(--spacing-0)}.likec4-markdown-block :is(h1,h2,h3,h4,h5,h6):not(:first-child){margin-top:var(--typography-spacing)}.likec4-markdown-block :where(img){max-width:var(--sizes-100\\%);margin-bottom:var(--typography-spacing)}.likec4-navigation-panel-icon{color:var(--colors-likec4-panel-action)}.likec4-navigation-panel-icon:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){color:var(--colors-likec4-panel-action-disabled);opacity:.5}.likec4-navigation-panel-icon:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){color:var(--colors-likec4-panel-action-hover)}.action-btn{--actionbtn-color: var(--likec4-palette-loContrast);--actionbtn-color-hovered: var(--likec4-palette-loContrast);--actionbtn-color-hovered-btn: var(--likec4-palette-hiContrast);--actionbtn-bg-idle: color-mix(in oklab , var(--likec4-palette-fill), transparent 99%);--actionbtn-bg-hovered: color-mix(in oklab , var(--likec4-palette-fill) 65%, var(--likec4-palette-stroke));--actionbtn-bg-hovered-btn: color-mix(in oklab , var(--likec4-palette-fill) 50%, var(--likec4-palette-stroke));--ai-bg: var(--actionbtn-bg-idle);background:var(--ai-bg);color:var(--actionbtn-color);opacity:.75}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .action-btn{--ai-bg: var(--actionbtn-bg-hovered);opacity:1;color:var(--actionbtn-color-hovered)}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .action-btn{pointer-events:all;cursor:pointer}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .action-btn{display:none}:where([data-likec4-zoom-small=true]) .action-btn{display:none}.action-btn *{pointer-events:none}.action-btn:is(:hover,[data-hover]){--ai-bg: var(--actionbtn-bg-hovered-btn);opacity:1;color:var(--actionbtn-color-hovered-btn)}.likec4-compound-node{--likec4-palette-outline: oklab(from var(--likec4-palette-stroke) calc(l - .05) a b);--_border-width: 3px;--_border-radius: 6px;--_compound-transparency: 100%;--_border-transparency: 100%;--_indicator-spacing: calc(var(--_border-width) + 1px);--_compound-color: var(--likec4-palette-loContrast);padding:var(--spacing-0);margin:var(--spacing-0);border-style:solid;border-width:var(--_border-width);border-radius:var(--_border-radius);position:relative;pointer-events:none;background-clip:padding-box;-webkit-background-clip:padding-box;box-sizing:border-box;color:var(--_compound-color);width:var(--sizes-100\\%);height:var(--sizes-100\\%)}[data-mantine-color-scheme=dark] .likec4-compound-node{--likec4-palette-outline: oklab(from var(--likec4-palette-stroke) calc(l + .2) a b)}.likec4-compound-node:before{border-style:solid;border-width:calc(var(--_border-width) + 1px);border-radius:calc(var(--_border-radius) + 4px);border-color:var(--likec4-palette-outline);position:absolute;content:" ";pointer-events:none;display:none;animation-duration:1s;animation-iteration-count:infinite;animation-direction:alternate;animation-name:indicatorOpacity;animation-play-state:paused;top:calc(-1 * var(--_indicator-spacing));left:calc(-1 * var(--_indicator-spacing));width:calc(100% + 2 * var(--_indicator-spacing));height:calc(100% + 2 * var(--_indicator-spacing))}:where(.react-flow__node,.react-flow__edge):is(:focus-visible,:focus,:focus-within) .likec4-compound-node:before{display:block;animation-play-state:running}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-compound-node:before{display:block;animation-play-state:running}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-compound-node:before{animation-play-state:paused}.likec4-compound-node:has(.likec4-compound-navigation) .likec4-compound-title-container{padding-left:24px}.likec4-compound-node .action-btn{--actionbtn-color: var(--_compound-color);--actionbtn-color-hovered: var(--_compound-color);--actionbtn-color-hovered-btn: color-mix(in oklab, var(--_compound-color) 80%, #fff);opacity:.6}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-compound-node .action-btn{transition:all var(--durations-fast) var(--easings-in-out)}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-compound-node .action-btn{opacity:.75}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-compound-node .action-btn{opacity:.75}.likec4-compound-node .action-btn:is(:hover,[data-hover]){opacity:1}.likec4-compound-node .likec4-compound-title-container{gap:var(--spacing-1\\.5);position:absolute;display:flex;align-items:center;left:var(--spacing-2\\.5);top:var(--spacing-0\\.5);right:30px;width:auto;min-height:30px}:where(.react-flow__node.draggable) .likec4-compound-node .likec4-compound-title-container{pointer-events:all;cursor:grab}.likec4-compound-node .likec4-compound-title{flex:1 1 0%;font-family:var(--fonts-likec4-compound);font-weight:600;font-size:15px;text-transform:uppercase;letter-spacing:.25px;line-height:var(--line-heights-1);color:var(--_compound-color)}.likec4-compound-node .likec4-compound-icon{flex:0 0 20px;display:flex;align-items:center;justify-content:center;mix-blend-mode:hard-light;height:20px;width:20px}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-compound-node .likec4-compound-icon{mix-blend-mode:normal}.likec4-compound-node .likec4-compound-icon svg,.likec4-compound-node .likec4-compound-icon img{pointer-events:none;filter:drop-shadow(0 0 3px rgb(0 0 0 / 12%)) drop-shadow(0 1px 8px rgb(0 0 0 / 8%)) drop-shadow(1px 1px 16px rgb(0 0 0 / 3%));width:var(--sizes-100\\%);height:auto;max-height:var(--sizes-100\\%)}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-compound-node .likec4-compound-icon svg,.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-compound-node .likec4-compound-icon img{filter:none}.likec4-compound-node .likec4-compound-icon img{object-fit:contain}.likec4-compound-node .likec4-compound-navigation{position:absolute;top:var(--spacing-1);left:var(--spacing-0\\.5)}:where([data-likec4-zoom-small=true]) .likec4-compound-node .likec4-compound-navigation{display:none}.likec4-compound-node .likec4-compound-details{position:absolute;top:var(--spacing-0\\.5);right:var(--spacing-0\\.5)}:where([data-likec4-zoom-small=true]) .likec4-compound-node .likec4-compound-details{display:none}.likec4-edge-action-btn{--ai-bg: transparent;--ai-hover: color-mix(in oklab , var(--xy-edge-label-background-color), var(--colors-likec4-mix-color) 10%);--ai-size: var(--ai-size-sm);--ai-radius: var(--radii-sm);transition:all var(--durations-fast) var(--easings-in-out);pointer-events:all;color:var(--xy-edge-label-color);cursor:pointer;opacity:.75;translate:var(--translate-x) var(--translate-y)}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-edge-action-btn{--ai-bg: var(--xy-edge-label-background-color);opacity:1}.likec4-edge-action-btn .tabler-icon{stroke-width:2;width:80%;height:80%}.likec4-edge-action-btn:is(:hover,[data-hover]){--translate-y: 2px;scale:1.15}.likec4-edge-action-btn:is(:active,[data-active]){--translate-y: -1px;scale:.9}.likec4-element-node-data{margin:0 auto;flex:1 1 0%;overflow:hidden;gap:var(--spacing-3);position:relative;display:flex;align-items:center;justify-content:center;flex-direction:row;pointer-events:none;text-align:center;height:fit-content;width:fit-content;max-height:var(--sizes-100\\%);max-width:var(--sizes-100\\%);padding-top:var(--likec4-spacing);padding-bottom:var(--likec4-spacing);padding-left:calc(var(--likec4-spacing) + 8px);padding-right:calc(var(--likec4-spacing) + 8px)}:where([data-likec4-shape-size=xs]) .likec4-element-node-data{--likec4-icon-size: 24px}:where([data-likec4-shape-size=sm]) .likec4-element-node-data{--likec4-icon-size: 36px}:where([data-likec4-shape-size=md]) .likec4-element-node-data{--likec4-icon-size: 60px}:where([data-likec4-shape-size=lg]) .likec4-element-node-data{--likec4-icon-size: 82px;gap:var(--spacing-4)}:where([data-likec4-shape-size=xl]) .likec4-element-node-data{--likec4-icon-size: 90px;gap:var(--spacing-4)}.likec4-element-node-data:has([data-likec4-icon]){gap:var(--spacing-4);text-align:left}.likec4-element-node-data:has([data-likec4-icon]) .likec4-element-node-content{align-items:flex-start;min-width:calc(50% + var(--likec4-icon-size))}:where([data-likec4-shape=queue]) .likec4-element-node-data{padding-left:46px;padding-right:16px}:where([data-likec4-shape=mobile]) .likec4-element-node-data{padding-left:46px;padding-right:16px}:where([data-likec4-shape=cylinder]) .likec4-element-node-data{padding-top:30px}:where([data-likec4-shape=storage]) .likec4-element-node-data{padding-top:30px}:where([data-likec4-shape=browser]) .likec4-element-node-data{padding-top:32px;padding-bottom:28px}.likec4-element-node-data [data-likec4-icon]{flex:0 0 var(--likec4-icon-size, 48px);display:flex;align-self:flex-start;align-items:center;justify-content:center;mix-blend-mode:hard-light;height:var(--likec4-icon-size, 48px);width:var(--likec4-icon-size, 48px)}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-node-data [data-likec4-icon]{mix-blend-mode:normal}.likec4-element-node-data [data-likec4-icon] svg,.likec4-element-node-data [data-likec4-icon] img{pointer-events:none;filter:drop-shadow(0 0 3px rgb(0 0 0 / 12%));width:var(--sizes-100\\%);height:auto;max-height:var(--sizes-100\\%)}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-node-data [data-likec4-icon] svg,.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-node-data [data-likec4-icon] img{filter:none}.likec4-element-node-data [data-likec4-icon] img{object-fit:contain}.likec4-element-node-data .likec4-element-node-content{flex:0 1 auto;overflow:hidden;gap:var(--spacing-2);display:flex;flex-direction:column;align-items:stretch;justify-content:center;flex-wrap:nowrap;height:fit-content;width:fit-content;max-height:var(--sizes-100\\%);max-width:var(--sizes-100\\%)}.likec4-element-node-data .likec4-element-node-content:has([data-likec4-node-description]):has([data-likec4-node-technology]){gap:var(--spacing-1\\.5)}.likec4-element-node-data [data-likec4-node-title]{flex:0 0 auto;font-family:var(--likec4-element-font, var(--fonts-likec4));font-weight:500;font-size:var(--likec4-text-size);line-height:1.15;text-wrap-style:balance;white-space:preserve-breaks;text-align:var(__text-align);color:var(--likec4-palette-hiContrast)}.likec4-element-node-data [data-likec4-node-description]{overflow:hidden;flex-grow:0;flex-shrink:1;--text-fz: calc(var(--likec4-text-size) * .74);font-family:var(--likec4-element-font, var(--fonts-likec4));font-weight:400;font-size:calc(var(--likec4-text-size) * .74);line-height:1.3;text-wrap-style:pretty;color:var(--likec4-palette-loContrast);text-align:var(__text-align);text-overflow:ellipsis}:where([data-likec4-shape-size=xs]) .likec4-element-node-data [data-likec4-node-description]{display:none}:where([data-likec4-zoom-small=true]) .likec4-element-node-data [data-likec4-node-description]{display:none}.likec4-element-node-data [data-likec4-node-description] a{pointer-events:all}.likec4-element-node-data [data-likec4-node-description] .markdown-alert{mix-blend-mode:screen}.likec4-element-node-data [data-likec4-node-technology]{flex:0 0 auto;text-wrap:balance;--text-fz: calc(var(--likec4-text-size) * .74);font-family:var(--likec4-element-font, var(--fonts-likec4));font-weight:400;font-size:calc(var(--likec4-text-size) * .635);line-height:1.125;text-wrap-style:pretty;color:var(--likec4-palette-loContrast);text-align:var(__text-align);opacity:.92}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-node-data [data-likec4-node-technology]{opacity:1}:where([data-likec4-shape-size=xs]) .likec4-element-node-data [data-likec4-node-technology]{display:none}:where([data-likec4-shape-size=sm]) .likec4-element-node-data [data-likec4-node-technology]{display:none}:where([data-likec4-zoom-small=true]) .likec4-element-node-data [data-likec4-node-technology]{display:none}.likec4-element-shape{--likec4-palette-outline: oklab(from var(--likec4-palette-stroke) calc(l - .05) a b);--likec4-outline-size: 4px;overflow:visible;position:absolute;pointer-events:none;top:var(--spacing-0);left:var(--spacing-0);width:var(--sizes-100\\%);height:var(--sizes-100\\%)}[data-mantine-color-scheme=dark] .likec4-element-shape{--likec4-palette-outline: oklab(from var(--likec4-palette-stroke) calc(l + .2) a b)}.likec4-element-shape .likec4-shape-outline{visibility:hidden;animation-play-state:paused;pointer-events:none}:where([data-likec4-zoom-small=true]) .likec4-element-shape .likec4-shape-outline{visibility:hidden}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-element-shape .likec4-shape-outline{visibility:visible;animation-play-state:running}:where(.react-flow__node,.react-flow__edge):is(:focus-visible,:focus,:focus-within) .likec4-element-shape .likec4-shape-outline{visibility:visible;animation-play-state:running}.group:is(:focus-visible,[data-focus-visible]) .likec4-element-shape .likec4-shape-outline{visibility:visible;animation-play-state:running}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-element-shape .likec4-shape-outline{animation-play-state:paused}.likec4-tag{transition:all var(--durations-fast) var(--easings-in-out);gap:1px;padding-inline:var(--spacing-1);padding-block:var(--spacing-0);pointer-events:all;display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-sizes-xs);cursor:default;font-family:var(--fonts-likec4);font-weight:700;border:var(--borders-none);border-radius:3px;color:var(--colors-likec4-tag-text);background-color:var(--colors-likec4-tag-bg)}.likec4-tag:is(:hover,[data-hover]){background-color:var(--colors-likec4-tag-bg-hover)}.likec4-tag{white-space:nowrap;min-width:40px;width:min-content}@media screen and (min-width:36rem){.likec4-markdown-block .markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--fgColor-accent,var(--color-accent-fg))}.likec4-markdown-block .markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--fgColor-success,var(--color-success-fg))}.likec4-markdown-block .markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--fgColor-done,var(--color-done-fg))}.likec4-markdown-block .markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--fgColor-attention,var(--color-attention-fg))}.likec4-markdown-block .markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--fgColor-danger,var(--color-danger-fg))}.likec4-element-node-data [data-likec4-icon] svg,.likec4-element-node-data [data-likec4-icon] img{filter:drop-shadow(0 1px 8px rgb(0 0 0 / 8%))}}@media screen and (min-width:48rem){.likec4-element-node-data [data-likec4-icon] svg,.likec4-element-node-data [data-likec4-icon] img{filter:drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))}}@media print{.action-btn{display:none}.likec4-compound-node .likec4-compound-icon{mix-blend-mode:normal!important}.likec4-compound-node .action-btn,.likec4-compound-node .likec4-compound-navigation,.likec4-compound-node .likec4-compound-details,.likec4-edge-action-btn{display:none}}}.likec4-edge-label--pointerEvents_all{pointer-events:all}.likec4-edge-label--cursor_default{cursor:default}.likec4-edge-label--cursor_pointer{cursor:pointer}.likec4-edge-label--isStepEdge_true{padding:var(--spacing-0);gap:var(--spacing-1);flex-direction:row}.likec4-edge-label--isStepEdge_true .likec4-edge-label__contents{gap:var(--spacing-0\\.5);display:flex;flex-direction:column;align-items:center;padding-top:var(--spacing-0\\.5);padding-right:var(--spacing-1);padding-bottom:var(--spacing-1)}.likec4-edge-label--isStepEdge_true .likec4-edge-label__text{padding-block:var(--spacing-0\\.5);padding-right:var(--spacing-0\\.5)}.likec4-edge-label--pointerEvents_none{pointer-events:none}.likec4-overlay--withBackdrop_true::backdrop{background:color-mix(in oklab,var(--colors-likec4-overlay-backdrop) var(--_opacity),transparent);backdrop-filter:blur(var(--_blur));-webkit-backdrop-filter:blur(var(--_blur))}.likec4-overlay--fullscreen_true{inset:var(--spacing-0);padding:var(--spacing-0)}.likec4-overlay--withBackdrop_false::backdrop{display:none}.likec4-markdown-block--value_plaintext :where(p){white-space:preserve-breaks}.likec4-markdown-block--uselikec4palette_true{--code-background: color-mix(in oklab , var(--likec4-palette-stroke) 70%, transparent);--code-color: var(--likec4-palette-loContrast);--typography-spacing: calc(.5 * var(--text-fz-md))}.likec4-markdown-block--uselikec4palette_true :where(blockquote){padding:var(--spacing-xxs);--mix-backgroundColor: color-mix(in srgb, var(--likec4-palette-stroke) 65%, transparent);background-color:var(--mix-backgroundColor, var(--likec4-palette-stroke))}.likec4-markdown-block--uselikec4palette_true :where(hr){--mix-borderColor: color-mix(in srgb, var(--likec4-palette-stroke) 85%, transparent);border-color:var(--mix-borderColor, var(--likec4-palette-stroke))}.likec4-markdown-block--uselikec4palette_true :where(a){--mix-color: color-mix(in srgb, var(--likec4-palette-fill) 45%, transparent);color:var(--mix-color, var(--likec4-palette-fill));mix-blend-mode:difference}.likec4-markdown-block--uselikec4palette_true :where(strong){color:color-mix(in oklab,var(--likec4-palette-hiContrast) 50%,var(--likec4-palette-loContrast))}.likec4-navigation-panel-icon--variant_default{background-color:var(--colors-transparent)}.likec4-navigation-panel-icon--variant_default:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){background-color:var(--colors-likec4-panel-action-bg-hover)}.likec4-navigation-panel-icon--variant_filled{background-color:var(--colors-likec4-panel-action-bg)}.likec4-navigation-panel-icon--variant_filled:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){background-color:var(--colors-likec4-panel-action-bg-hover)}.likec4-navigation-panel-icon--type_warning{color:var(--colors-likec4-panel-action-warning)}.likec4-navigation-panel-icon--type_warning:is(:hover,[data-hover]){color:var(--colors-likec4-panel-action-warning-hover)}.action-btn--size_md{--ai-size: var(--ai-size-md)}.action-btn--radius_md{--ai-radius: var(--mantine-radius-md)}.action-btn--variant_transparent{--actionbtn-bg-hovered: var(--actionbtn-bg-idle)}.action-btn--variant_filled{box-shadow:1px 1px 3px 0 transparent}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .action-btn--variant_filled{box-shadow:1px 1px 3px #0003}.likec4-root:is([data-likec4-reduced-graphics]) .action-btn--variant_filled{box-shadow:var(--shadows-none)}.action-btn--size_sm{--ai-size: var(--ai-size-sm)}.action-btn--radius_sm{--ai-radius: var(--mantine-radius-sm)}.likec4-compound-node--borderStyle_dashed{border-style:dashed}.likec4-compound-node--borderStyle_none{--_indicator-spacing: calc(var(--_border-width) * 2);border-color:var(--colors-transparent)!important;background-clip:border-box!important;-webkit-background-clip:border-box!important}.likec4-compound-node--isTransparent_false{border-color:var(--likec4-palette-stroke);background-color:var(--likec4-palette-fill)}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-compound-node--isTransparent_false{box-shadow:0 4px 10px .5px #0000001a,0 2px 2px -1px #0006}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-compound-node--isTransparent_false{box-shadow:var(--shadows-none)}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-compound-node--isTransparent_false{box-shadow:var(--shadows-none)!important}.likec4-compound-node--isTransparent_true{border-color:color-mix(in oklab,var(--likec4-palette-stroke) var(--_border-transparency),transparent);background-color:color-mix(in oklab,var(--likec4-palette-fill) var(--_compound-transparency),transparent)}.likec4-compound-node--inverseColor_true{--_compound-color: var(--likec4-palette-stroke)}[data-mantine-color-scheme=dark] .likec4-compound-node--inverseColor_true{--_compound-color: color-mix(in oklab, var(--likec4-palette-loContrast) 60%, var(--likec4-palette-fill))}[data-mantine-color-scheme=dark] .likec4-compound-node--inverseColor_true .action-btn{--actionbtn-color-hovered-btn: var(--likec4-palette-loContrast)}[data-mantine-color-scheme=light] .likec4-compound-node--inverseColor_true .action-btn{--actionbtn-color: var(--likec4-palette-stroke);--actionbtn-color-hovered: var(--likec4-palette-stroke);--actionbtn-color-hovered-btn: var(--likec4-palette-hiContrast);--actionbtn-bg-hovered: var(--likec4-palette-fill)/50;--actionbtn-bg-hovered-btn: var(--likec4-palette-fill)}.likec4-compound-node--borderStyle_solid{border-style:solid}.likec4-compound-node--borderStyle_dotted{border-style:dotted}.likec4-element-shape--shapetype_html{border-radius:6px;transition:background-color .12s linear,box-shadow .13s var(--easings-in-out);background-color:var(--likec4-palette-fill);box-shadow:0 2px 1px #00000036,0 1px 1px color-mix(in oklab,var(--likec4-palette-stroke) 40%,transparent),0 5px 3px #0000001a;transition-delay:0ms}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-shape--shapetype_html{transition:none}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-shape--shapetype_html{box-shadow:#26394df2 0 20px 30px -10px}[data-mantine-color-scheme=dark] :where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-shape--shapetype_html{box-shadow:#0a0b10e5 0 20px 30px -10px}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-element-shape--shapetype_html{box-shadow:var(--shadows-none)}:where([data-likec4-zoom-small=true]) .likec4-element-shape--shapetype_html{box-shadow:var(--shadows-none)}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-element-shape--shapetype_html{box-shadow:var(--shadows-none)}.likec4-element-shape--shapetype_html .likec4-shape-multiple{border-radius:6px;transition:all var(--durations-fast) var(--easings-in-out);position:absolute;content:" ";background-color:var(--likec4-palette-fill);z-index:var(--z-index--1);filter:brightness(.5)!important;visibility:visible;top:16px;left:16px;width:calc(100% - 6px);height:calc(100% - 6px)}:where([data-likec4-zoom-small=true]) .likec4-element-shape--shapetype_html .likec4-shape-multiple{visibility:hidden}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-element-shape--shapetype_html .likec4-shape-multiple{visibility:hidden}:where(.react-flow__node,.react-flow__edge):is(:focus-visible,:focus,:focus-within) .likec4-element-shape--shapetype_html .likec4-shape-multiple{visibility:hidden}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-shape--shapetype_html .likec4-shape-multiple{visibility:hidden}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-shape--shapetype_html .likec4-shape-multiple{transform:translate(-14px,-14px)}.likec4-element-shape--shapetype_html .likec4-shape-outline{border-style:solid;border-width:var(--likec4-outline-size);border-radius:11px;border-color:var(--likec4-palette-outline);position:absolute;content:" ";animation-duration:1s;animation-iteration-count:infinite;animation-direction:alternate;animation-name:indicatorOpacity;top:calc(-1 * var(--likec4-outline-size) - 1px);left:calc(-1 * var(--likec4-outline-size) - 1px);width:calc(100% + 2 * var(--likec4-outline-size) + 2px);height:calc(100% + 2 * var(--likec4-outline-size) + 2px)}.likec4-element-shape--shapetype_svg{transition:fill .12s linear,filter .13s var(--easings-in-out);fill:var(--likec4-palette-fill);stroke:var(--likec4-palette-stroke);transition-delay:0ms;filter:drop-shadow(0 2px 1px rgba(0,0,0,.21)) drop-shadow(0 1px 1px color-mix(in oklab,var(--likec4-palette-stroke) 40%,transparent)) drop-shadow(0 5px 3px rgba(0,0,0,.1))}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-shape--shapetype_svg{filter:drop-shadow(0 2px 1px rgba(0,0,0,.12)) drop-shadow(0px 4px 2px rgba(0,0,0,.12)) drop-shadow(0px 8px 4px rgba(0,0,0,.12)) drop-shadow(0px 16px 8px rgba(0,0,0,.1)) drop-shadow(0px 32px 16px rgba(0,0,0,.09))}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-element-shape--shapetype_svg{filter:none}:where([data-likec4-zoom-small=true]) .likec4-element-shape--shapetype_svg{filter:none}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-element-shape--shapetype_svg{filter:none}.likec4-element-shape--shapetype_svg [data-likec4-fill=fill]{fill:var(--likec4-palette-fill)}.likec4-element-shape--shapetype_svg [data-likec4-fill=stroke]{fill:var(--likec4-palette-stroke)}.likec4-element-shape--shapetype_svg [data-likec4-fill=mix-stroke]{fill:color-mix(in oklab,var(--likec4-palette-stroke) 90%,var(--likec4-palette-fill))}.likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){transition:all var(--durations-fast) var(--easings-in-out);transform-origin:50% 50%;transform:translate(14px,14px) perspective(200px) translateZ(-4px);filter:brightness(.5)!important;stroke:var(--colors-none)}:where([data-likec4-shape=queue]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){transform-origin:75% 25%}:where([data-likec4-shape=cylinder]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){transform-origin:50% 100%}:where([data-likec4-shape=storage]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){transform-origin:50% 100%}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){transform:translate(2px,2px) perspective(200px) translateZ(-4px)}:where([data-likec4-zoom-small=true]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){display:none}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){display:none}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){display:none}:where(.react-flow__node,.react-flow__edge):is(:focus-visible,:focus,:focus-within) .likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]){display:none}.likec4-element-shape--shapetype_svg:is([data-likec4-shape-multiple=true]) [data-likec4-fill=mix-stroke]{fill:var(--likec4-palette-fill)}.likec4-element-shape--shapetype_svg .likec4-shape-outline{stroke:var(--likec4-palette-outline);fill:var(--colors-none);stroke-width:3;stroke-opacity:.8;animation-duration:1s;animation-iteration-count:infinite;animation-direction:alternate;animation-name:indicatorOpacity}.likec4-tag--autoTextColor_false>span{color:var(--colors-likec4-tag-text)}.likec4-tag--autoTextColor_false>span:first-child{opacity:.65}.likec4-tag--autoTextColor_true>span{background:inherit;color:var(--colors-transparent);filter:invert(1) grayscale(1) brightness(1.3) contrast(1000);background-clip:text;-webkit-background-clip:text;mix-blend-mode:plus-lighter}.hover\\:likec4-tag--autoTextColor_true:is(:hover,[data-hover])>span{background:inherit;color:var(--colors-transparent);filter:invert(1) grayscale(1) brightness(1.3) contrast(1000);background-clip:text;-webkit-background-clip:text;mix-blend-mode:plus-lighter}.hover\\:likec4-tag--autoTextColor_false:is(:hover,[data-hover])>span{color:var(--colors-likec4-tag-text)}.hover\\:likec4-tag--autoTextColor_false:is(:hover,[data-hover])>span:first-child{opacity:.65}@media screen and (min-width:48rem){.likec4-overlay--fullscreen_false{--_border-radius: 6px;--_offset: 1rem;inset:var(--_inset) var(--_inset) var(--_offset) var(--_inset);padding:var(--spacing-1\\.5);border-radius:calc(var(--_border-radius) - 2px);width:calc(100vw - 2 * var(--_inset));height:calc(100vh - var(--_offset) - var(--_inset))}}@media screen and (min-width:62rem){.likec4-overlay--fullscreen_false{--_offset: 1rem}}@media screen and (min-width:75rem){.likec4-overlay--fullscreen_false{--_offset: 2rem}}@media screen and (min-width:88rem){.likec4-overlay--fullscreen_false{--_offset: 4rem}}@media print{.likec4-markdown-block--uselikec4palette_true :where(a){mix-blend-mode:normal!important}}@media print{.likec4-tag--autoTextColor_true>span{mix-blend-mode:normal!important}}@media print{.hover\\:likec4-tag--autoTextColor_true:is(:hover,[data-hover])>span{mix-blend-mode:normal!important}}}@layer recipes.slots{@layer _base{.likec4-navlink__root{border-radius:var(--radii-sm);padding-inline:var(--spacing-xs);padding-block:var(--spacing-xxs)}.likec4-navlink__root:is(:hover,[data-hover]):not([data-active]){background-color:var(--colors-mantine-colors-gray\\[1\\])}[data-mantine-color-scheme=dark] .likec4-navlink__root:is(:hover,[data-hover]):not([data-active]){background-color:var(--colors-mantine-colors-dark\\[5\\])}.likec4-navlink__body{gap:var(--spacing-0\\.5);display:flex;flex-direction:column}.likec4-navlink__section:where([data-position=left]){margin-inline-end:var(--spacing-xxs)}.likec4-navlink__label{display:block;font-size:var(--font-sizes-sm);font-weight:500;line-height:1.2}.likec4-navlink__description{display:block;font-size:var(--font-sizes-xxs);line-height:1.2}.likec4-edge__path{fill:var(--colors-none);stroke-dashoffset:0}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-edge__path{transition:stroke .13s ease-out,stroke-width .13s ease-out;animation-duration:.8s;animation-iteration-count:infinite;animation-timing-function:linear;animation-fill-mode:both;animation-name:xyedgeAnimated;animation-play-state:paused}:where([data-edge-dir=back]) .likec4-edge__path{animation-direction:reverse}:where(.react-flow__node,.react-flow__edge):has([data-likec4-dimmed]) .likec4-edge__path{animation-play-state:paused}:where([data-likec4-zoom-small=true]) .likec4-edge__path{animation-name:none}.likec4-root:is([data-likec4-diagram-panning=true]) .likec4-edge__path{stroke-dasharray:none!important;animation-play-state:paused}.likec4-root:not([data-likec4-reduced-graphics]) :where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-edge__path{animation-play-state:running;animation-delay:.45s}.likec4-root:not([data-likec4-reduced-graphics]) :where(.selected,[data-edge-active=true],[data-edge-animated=true]) .likec4-edge__path{animation-play-state:running;animation-delay:0ms}.likec4-edge__pathBg{pointer-events:none;fill:var(--colors-none);stroke-width:calc(var(--xy-edge-stroke-width) + 2);stroke-opacity:.08}.likec4-root:not([data-likec4-reduced-graphics]) .likec4-edge__pathBg{--transition-prop: stroke-width, stroke-opacity;transition-property:stroke-width,stroke-opacity;--transition-duration: var(--durations-fast);transition-duration:var(--durations-fast);--transition-easing: var(--easings-in-out);transition-timing-function:var(--easings-in-out)}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .likec4-edge__pathBg{--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out);stroke-width:calc(var(--xy-edge-stroke-width) + 4);stroke-opacity:.2}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-edge__pathBg{stroke-width:calc(var(--xy-edge-stroke-width) + 6);stroke-opacity:.25}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) :where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .likec4-edge__pathBg{stroke-opacity:.4}.likec4-edge__markersCtx{fill:var(--xy-edge-stroke);stroke:var(--xy-edge-stroke)}.likec4-edge__middlePoint{visibility:hidden;offset-distance:50%;cx:0;cy:0;r:4px;pointer-events:none}}.likec4-navlink__label--truncateLabel_true,.likec4-navlink__description--truncateLabel_true{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:var(--sizes-100\\%)}}@layer utilities{@layer compositions{.layerStyle_likec4\\.panel{padding:var(--spacing-1);border:1px solid var(--colors-likec4-panel-border);border-radius:var(--radii-0);background-color:var(--colors-likec4-panel-bg)}.layerStyle_likec4\\.dropdown{padding:var(--spacing-2);border:1px solid var(--colors-likec4-dropdown-border);border-radius:var(--radii-md);background-color:var(--colors-likec4-dropdown-bg);box-shadow:var(--shadows-lg)}.layerStyle_likec4\\.tag{border:var(--borders-none);border-radius:3px;color:var(--colors-likec4-tag-text);background-color:var(--colors-likec4-tag-bg)}.layerStyle_likec4\\.tag:is(:hover,[data-hover]){background-color:var(--colors-likec4-tag-bg-hover)}.textStyle_xs{font-size:.75rem;line-height:1rem}.layerStyle_likec4\\.panel\\.action{border:var(--borders-transparent);padding-inline:var(--spacing-xxs);padding-block:var(--spacing-xxs);border-radius:var(--radii-sm);color:var(--colors-likec4-panel-action);cursor:pointer}.layerStyle_likec4\\.panel\\.action:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){color:var(--colors-likec4-panel-action-disabled);cursor:not-allowed}.layerStyle_likec4\\.panel\\.action:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){color:var(--colors-likec4-panel-action-hover);background-color:var(--colors-likec4-panel-action-bg-hover)}.layerStyle_likec4\\.panel\\.action\\.filled{border:var(--borders-transparent);padding-inline:var(--spacing-xxs);padding-block:var(--spacing-xxs);border-radius:var(--radii-sm);color:var(--colors-likec4-panel-action);cursor:pointer;background-color:var(--colors-likec4-panel-action-bg)}.layerStyle_likec4\\.panel\\.action\\.filled:is(:disabled,[disabled],[data-disabled],[aria-disabled=true]){color:var(--colors-likec4-panel-action-disabled);cursor:not-allowed;background-color:var(--colors-likec4-panel-action-bg)}.layerStyle_likec4\\.panel\\.action\\.filled:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){color:var(--colors-likec4-panel-action-hover);background-color:var(--colors-likec4-panel-action-bg-hover)}@container (min-width: 40rem){.layerStyle_likec4\\.panel{border-radius:var(--radii-md);padding-inline:var(--spacing-2);box-shadow:var(--shadows-lg)}}}.--mantine-cursor-pointer_pointer{--mantine-cursor-pointer: pointer}.--thickness_1px{--thickness: 1px}.--bleed-x_token\\(spacing\\.2\\,_2\\){--bleed-x: var(--spacing-2, 2)}.--bleed-y_token\\(spacing\\.2\\,_2\\){--bleed-y: var(--spacing-2, 2)}.--text-fz_\\{fontSizes\\.sm\\}{--text-fz: var(--font-sizes-sm)}.--view-title-color_\\{colors\\.mantine\\.colors\\.dark\\[1\\]\\}{--view-title-color: var(--colors-mantine-colors-dark\\[1\\])}.--likec4-icon-size_24px{--likec4-icon-size: 24px}.--ti-size_var\\(--likec4-icon-size\\,_24px\\){--ti-size: var(--likec4-icon-size, 24px)}.--_color_var\\(--likec4-palette-stroke\\){--_color: var(--likec4-palette-stroke)}.--ai-radius_0px{--ai-radius: 0px}.--badge-radius_2px{--badge-radius: 2px}.--badge-fz_9\\.5px{--badge-fz: 9.5px}.--badge-padding-x_3px{--badge-padding-x: 3px}.--badge-height_13\\.5px{--badge-height: 13.5px}.--badge-lh_1{--badge-lh: 1}.--badge-bg_var\\(--likec4-palette-fill\\){--badge-bg: var(--likec4-palette-fill)}.--badge-color_var\\(--likec4-palette-hiContrast\\){--badge-color: var(--likec4-palette-hiContrast)}.bg_dots{background:dots}.bg_transparent{background:var(--colors-transparent)}.m_0{margin:var(--spacing-0)}.p_0{padding:var(--spacing-0)}.bg_likec4\\.overlay\\.body{background:var(--colors-likec4-overlay-body)}.p_xl{padding:var(--spacing-xl)}.bd_1px_solid{border:1px solid}.bg_mantine\\.colors\\.default{background:var(--colors-mantine-colors-default)}.p_\\[4px_7px\\]{padding:4px 7px}.bg_\\[transparent\\]{background:var(--colors-transparent)}.p_1{padding:var(--spacing-1)}.p_4{padding:var(--spacing-4)}.bg_white{background:#fff}.bd_default{border:var(--borders-default)}.p_0\\.5{padding:var(--spacing-0\\.5)}.m_xs{margin:var(--spacing-xs)}.p_md{padding:var(--spacing-md)}.p_1\\.5{padding:var(--spacing-1\\.5)}.p_8{padding:var(--spacing-8)}.p_xxs{padding:var(--spacing-xxs)}.p_\\[4px_6px\\]{padding:4px 6px}.bg_mantine\\.colors\\.gray\\[2\\]{background:var(--colors-mantine-colors-gray\\[2\\])}.bg_mantine\\.colors\\.gray\\[3\\]{background:var(--colors-mantine-colors-gray\\[3\\])}.bd_2px_solid{border:2px solid}.inset_0{inset:var(--spacing-0)}.bd_transparent{border:var(--borders-transparent)}.bd_none{border:var(--borders-none)}.bg_\\[_linear-gradient\\(180deg\\,_color-mix\\(in_oklab\\,_var\\(--likec4-palette-fill\\)_60\\%\\,_transparent\\)\\,_color-mix\\(in_oklab\\,_var\\(--likec4-palette-fill\\)_20\\%\\,_transparent\\)_8px\\,_color-mix\\(in_oklab\\,_var\\(--likec4-palette-fill\\)_14\\%\\,_transparent\\)_20px\\,_transparent_80px_\\)\\,_linear-gradient\\(180deg\\,_var\\(--likec4-palette-fill\\)\\,_var\\(--likec4-palette-fill\\)_4px\\,_transparent_4px\\)\\,_\\{colors\\.likec4\\.overlay\\.body\\}_\\]{background:linear-gradient(180deg,color-mix(in oklab,var(--likec4-palette-fill) 60%,transparent),color-mix(in oklab,var(--likec4-palette-fill) 20%,transparent) 8px,color-mix(in oklab,var(--likec4-palette-fill) 14%,transparent) 20px,transparent 80px),linear-gradient(180deg,var(--likec4-palette-fill),var(--likec4-palette-fill) 4px,transparent 4px),var(--colors-likec4-overlay-body)}.bg_mantine\\.colors\\.body{background:var(--colors-mantine-colors-body)}.p_\\[10px_8px\\]{padding:10px 8px}.bd_1px_dashed{border:1px dashed}.bg_mantine\\.colors\\.gray\\[1\\]{background:var(--colors-mantine-colors-gray\\[1\\])}.p_\\[6px_8px\\]{padding:6px 8px}.bd_3\\.5px_solid{border:3.5px solid}.p_xs{padding:var(--spacing-xs)}.p_\\[4px_8px\\]{padding:4px 8px}.p_\\[1px_4px\\]{padding:1px 4px}.p_\\[3px_6px\\]{padding:3px 6px}.bg_var\\(--likec4-palette-fill\\)\\/75{--mix-background: color-mix(in srgb, var(--likec4-palette-fill) 75%, transparent);background:var(--mix-background, var(--likec4-palette-fill))}.bd_1px_solid_\\{colors\\.mantine\\.colors\\.defaultBorder\\}{border:1px solid var(--colors-mantine-colors-default-border)}.p_\\[1px_5px\\]{padding:1px 5px}.bg_mantine\\.colors\\.dark\\[7\\]{background:var(--colors-mantine-colors-dark\\[7\\])}.p_\\[6px_2px_0_2px\\]{padding:6px 2px 0}.p_\\[0_4px_5px_4px\\]{padding:0 4px 5px}.bg_mantine\\.colors\\.dark\\[9\\]\\/30{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-dark\\[9\\]) 30%, transparent);background:var(--mix-background, var(--colors-mantine-colors-dark\\[9\\]))}.bg_mantine\\.colors\\.primary\\[8\\]{background:var(--colors-mantine-colors-primary\\[8\\])}.p_\\[12px_8px_12px_14px\\]{padding:12px 8px 12px 14px}.bd_2px_dashed{border:2px dashed}.p_2{padding:var(--spacing-2)}.bd_3px_dashed{border:3px dashed}.gap_20{gap:20px}.bdr_sm{border-radius:var(--radii-sm)}.bd-w_3{border-width:3px}.bd-c_likec4\\.overlay\\.border{border-color:var(--colors-likec4-overlay-border)}.ring_none{outline:var(--borders-none)}.gap_lg{gap:var(--spacing-lg)}.gap_md{gap:var(--spacing-md)}.gap_sm{gap:var(--spacing-sm)}.flex_1{flex:1 1 0%}.transition_fast{transition:all var(--durations-fast) var(--easings-in-out)}.td_none{text-decoration:none}.bd-c_mantine\\.colors\\.defaultBorder{border-color:var(--colors-mantine-colors-default-border)}.gap_xs{gap:var(--spacing-xs)}.gap_xxs{gap:var(--spacing-xxs)}.gap_1{gap:var(--spacing-1)}.ov_hidden{overflow:hidden}.gap_0\\.5{gap:var(--spacing-0\\.5)}.gap_\\[4px\\]{gap:4px}.px_xs{padding-inline:var(--spacing-xs)}.py_xxs{padding-block:var(--spacing-xxs)}.px_sm{padding-inline:var(--spacing-sm)}.gap_8px{gap:8px}.gap_1\\.5{gap:var(--spacing-1\\.5)}.bdr_\\[4px\\]{border-radius:4px}.px_1\\.5{padding-inline:var(--spacing-1\\.5)}.gap_3{gap:var(--spacing-3)}.mx_calc\\(var\\(--bleed-x\\,_0\\)_\\*_-1\\){margin-inline:calc(var(--bleed-x, 0) * -1)}.my_calc\\(var\\(--bleed-y\\,_0\\)_\\*_-1\\){margin-block:calc(var(--bleed-y, 0) * -1)}.py_2\\.5{padding-block:var(--spacing-2\\.5)}.px_2{padding-inline:var(--spacing-2)}.gap_2{gap:var(--spacing-2)}.offset_2{offset:2px}.offset_10{offset:10px}.py_1\\.5{padding-block:var(--spacing-1\\.5)}.bd-l_2px_dotted{border-left:2px dotted}.px_1{padding-inline:var(--spacing-1)}.py_0\\.5{padding-block:var(--spacing-0\\.5)}.bdr_\\[2px\\]{border-radius:2px}.bd-w_4{border-width:4px}.px_4{padding-inline:var(--spacing-4)}.py_1{padding-block:var(--spacing-1)}.gap_\\[1px\\]{gap:1px}.ov_auto{overflow:auto}.ovs-b_contain{overscroll-behavior:contain}.ov_visible{overflow:visible}.px_xxs{padding-inline:var(--spacing-xxs)}.my_10{margin-block:var(--spacing-10)}.flex_1_1_40\\%{flex:1 1 40%}.bd-c_mantine\\.colors\\.gray\\[4\\]{border-color:var(--colors-mantine-colors-gray\\[4\\])}.bd-c_mantine\\.colors\\.gray\\[5\\]{border-color:var(--colors-mantine-colors-gray\\[5\\])}.bdr_3{border-radius:3px}.bd-c_mantine\\.colors\\.orange\\[6\\]{border-color:var(--colors-mantine-colors-orange\\[6\\])}.tw_pretty{text-wrap:pretty}.flex_0{flex:0}.flex_0_0_40px{flex:0 0 40px}.gap_\\[24px_20px\\]{gap:24px 20px}.bd-c_mantine\\.colors\\.dark\\[3\\]{border-color:var(--colors-mantine-colors-dark\\[3\\])}.bd-t_none{border-top:var(--borders-none)}.bd-l_none{border-left:var(--borders-none)}.bdr_2px{border-radius:2px}.gap_4{gap:var(--spacing-4)}.gap_6{gap:var(--spacing-6)}.gap_\\[12px_16px\\]{gap:12px 16px}.bd-c_mantine\\.colors\\.gray\\[3\\]{border-color:var(--colors-mantine-colors-gray\\[3\\])}.flex_0_1_auto{flex:0 1 auto}.transition_all_150ms_ease{transition:all .15s ease}.bdr_xs{border-radius:var(--radii-xs)}.flex_1_1_100\\%{flex:1 1 100%}.offset_0{offset:0}.py_4{padding-block:var(--spacing-4)}.gap_8{gap:var(--spacing-8)}.px_md{padding-inline:var(--spacing-md)}.py_xs{padding-block:var(--spacing-xs)}.grid-c_1{grid-column:1}.grid-c_2{grid-column:2}.grid-c_3{grid-column:3}.bd-b_1px_solid{border-bottom:1px solid}.gap_0{gap:var(--spacing-0)}.gap_\\[10px_12px\\]{gap:10px 12px}.py_3{padding-block:var(--spacing-3)}.offset_4{offset:4px}.flex_1_0_auto{flex:1 0 auto}.ring_none\\!{outline:var(--borders-none)!important}.bdr_4px{border-radius:4px}.mx_auto{margin-inline:auto}.py_md{padding-block:var(--spacing-md)}.bd-c_mantine\\.colors\\.primary\\[9\\]{border-color:var(--colors-mantine-colors-primary\\[9\\])}.flex_0_0_var\\(--likec4-icon-size\\,_24px\\){flex:0 0 var(--likec4-icon-size, 24px)}.bdr_md{border-radius:var(--radii-md)}.py_xl{padding-block:var(--spacing-xl)}.bd-w_1{border-width:1px}.bd-c_\\[var\\(--_color\\)\\/30\\]{--mix-borderColor: color-mix(in srgb, var(--_color) 30%, transparent);border-color:var(--mix-borderColor, var(--_color))}.transition_all_100ms_ease-in{transition:all .1s ease-in}.transition_all_150ms_ease-in-out{transition:all .15s ease-in-out}.py_sm{padding-block:var(--spacing-sm)}.flex_0_0_auto{flex:0 0 auto}.flex_0_0_70px{flex:0 0 70px}.bd-w_3px{border-width:3px}.border-style_dashed{border-style:dashed}.px_3{padding-inline:var(--spacing-3)}.px_5{padding-inline:var(--spacing-5)}.gap_6px{gap:6px}.px_4px{padding-inline:4px}.cursor_pointer{cursor:pointer}.pos_absolute{position:absolute}.z_999{z-index:999}.c_gray{color:gray}.pos_fixed{position:fixed}.bx-sh_xl{box-shadow:var(--shadows-xl)}.d_flex{display:flex}.ai_flex-start{align-items:flex-start}.flex-d_row{flex-direction:row}.flex-wrap_nowrap{flex-wrap:nowrap}.ai_center{align-items:center}.c_red{color:red}.ai_stretch{align-items:stretch}.flex-d_column{flex-direction:column}.c_teal{color:teal}.op_1{opacity:1}.op_0\\.45{opacity:.45}.us_all{-webkit-user-select:all;user-select:all}.bg-c_transparent{background-color:var(--colors-transparent)}.stk_2\\.5{stroke:2.5px}.op_0\\.7{opacity:.7}.fill_\\[\\#FCFBF7\\]{fill:#fcfbf7}.bx-sh_xs{box-shadow:var(--shadows-xs)}.fs_sm{font-size:var(--font-sizes-sm)}.fw_500{font-weight:500}.c_mantine\\.colors\\.placeholder{color:var(--colors-mantine-colors-placeholder)}.fs_11px{font-size:11px}.fw_600{font-weight:600}.lh_1{line-height:var(--line-heights-1)}.stk_2{stroke:2px}.pointer-events_none{pointer-events:none}.main-axis_4{main-axis:4px}.pos_bottom-start{position:bottom-start}.pos_relative{position:relative}.pointer-events_all{pointer-events:all}.us_none{-webkit-user-select:none;user-select:none}.d_none{display:none}.flex-sh_1{flex-shrink:1}.flex-g_1{flex-grow:1}.flex-g_0{flex-grow:0}.op_0\\.3{opacity:.3}.bg-c_mantine\\.colors\\.gray\\[1\\]{background-color:var(--colors-mantine-colors-gray\\[1\\])}.stk_1\\.5{stroke:1.5px}.bd-e-w_var\\(--thickness\\){border-inline-end-width:var(--thickness)}.c_mantine\\.colors\\.gray\\[5\\]{color:var(--colors-mantine-colors-gray\\[5\\])}.bg-c_likec4\\.panel\\.action\\.warning\\.bg{background-color:var(--colors-likec4-panel-action-warning-bg)}.c_likec4\\.panel\\.action{color:var(--colors-likec4-panel-action)}.trunc_true{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c_likec4\\.panel\\.text\\.dimmed{color:var(--colors-likec4-panel-text-dimmed)}.bg-c_\\[rgb\\(34_34_34_\\/_var\\(--_opacity\\,_95\\%\\)\\)\\]{background-color:rgb(34 34 34 / var(--_opacity, 95%))}.bkdp_auto{backdrop-filter:var(--backdrop-blur, ) var(--backdrop-brightness, ) var(--backdrop-contrast, ) var(--backdrop-grayscale, ) var(--backdrop-hue-rotate, ) var(--backdrop-invert, ) var(--backdrop-opacity, ) var(--backdrop-saturate, ) var(--backdrop-sepia, );-webkit-backdrop-filter:var(--backdrop-blur, ) var(--backdrop-brightness, ) var(--backdrop-contrast, ) var(--backdrop-grayscale, ) var(--backdrop-hue-rotate, ) var(--backdrop-invert, ) var(--backdrop-opacity, ) var(--backdrop-saturate, ) var(--backdrop-sepia, )}.bkdp-blur_var\\(--_blur\\,_10px\\){--backdrop-blur: blur(var(--_blur, 10px))}.jc_stretch{justify-content:stretch}.cq-n_likec4-search-elements{container-name:likec4-search-elements}.cq-t_size{container-type:size}.d_contents{display:contents}.d_grid{display:grid}.order_6{order:6}.stk_1\\.8{stroke:1.8px}.trunc_end{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trs-dur_normal{--transition-duration: var(--durations-normal);transition-duration:var(--durations-normal)}.trs-dly_0\\.2s{transition-delay:.2s}.fill_none{fill:var(--colors-none)}.jc_center{justify-content:center}.z_1{z-index:var(--z-index-1)}.ai_flex-end{align-items:flex-end}.justify-items_stretch{justify-items:stretch}.fs_lg{font-size:var(--font-sizes-lg)}.ai_baseline{align-items:baseline}.flex-wrap_wrap{flex-wrap:wrap}.translate_auto{translate:var(--translate-x) var(--translate-y)}.translate-x_\\[-8px\\]{--translate-x: -8px}.bd-be-w_var\\(--thickness\\){border-block-end-width:var(--thickness)}.cursor_default{cursor:default}.c_orange{color:orange}.pos_top-start{position:top-start}.pos_right{position:right}.op_0\\.65{opacity:.65}.d_inline-flex{display:inline-flex}.op_0\\.5{opacity:.5}.d_block{display:block}.fs_xxs{font-size:var(--font-sizes-xxs)}.lh_sm{line-height:var(--line-heights-sm)}.c_mantine\\.colors\\.dimmed{color:var(--colors-mantine-colors-dimmed)}.white-space_nowrap{white-space:nowrap}.white-space-collapse_preserve-breaks{white-space-collapse:preserve-breaks}.fs_xs{font-size:var(--font-sizes-xs)}.fw_medium{font-weight:var(--font-weights-medium)}.trf_translateY\\(-4px\\){transform:translateY(-4px)}.c_mantine\\.colors\\.gray\\[9\\]{color:var(--colors-mantine-colors-gray\\[9\\])}.bx-sh_lg{box-shadow:var(--shadows-lg)}.pos_right-start{position:right-start}.stk_1\\.7{stroke:1.7px}.c_likec4\\.panel\\.text{color:var(--colors-likec4-panel-text)}.c_green{color:green}.pos_bottom-end{position:bottom-end}.op_0\\.8{opacity:.8}.me_0\\.5{margin-inline-end:var(--spacing-0\\.5)}.cross-axis_-22{cross-axis:-22px}.bg-c_none{background-color:var(--colors-none)}.fw_400{font-weight:400}.bx-sh_md{box-shadow:var(--shadows-md)}.main-axis_2{main-axis:2px}.lh_1\\.1{line-height:1.1}.main-axis_10{main-axis:10px}.op_0\\.6{opacity:.6}.pos_top{position:top}.main-axis_12{main-axis:12px}.ta_center{text-align:center}.bx-sh_inset_1px_1px_3px_0px_\\#00000024{box-shadow:inset 1px 1px 3px #00000024}.trf_translate\\(-50\\%\\,_-50\\%\\){transform:translate(-50%,-50%)}.flex-sh_0{flex-shrink:0}.ms_0{margin-inline-start:var(--spacing-0)}.z_9{z-index:9}.ta_left{text-align:left}.lh_1\\.25{line-height:1.25}.bx-s_border-box{box-sizing:border-box}.c_mantine\\.colors\\.text{color:var(--colors-mantine-colors-text)}.cursor_move{cursor:move}.ff_likec4\\.element{font-family:var(--fonts-likec4-element)}.font-optical-sizing_auto{font-optical-sizing:auto}.font-style_normal{font-style:normal}.fs_24px{font-size:24px}.lh_xs{line-height:var(--line-heights-xs)}.as_flex-start{align-self:flex-start}.c_\\[var\\(--view-title-color\\,_\\{colors\\.mantine\\.colors\\.gray\\[7\\]\\}\\)\\]{color:var(--view-title-color, var(--colors-mantine-colors-gray\\[7\\]))}.fs_15px{font-size:15px}.lh_1\\.4{line-height:1.4}.c_mantine\\.colors\\.gray\\[7\\]{color:var(--colors-mantine-colors-gray\\[7\\])}.grid-tc_min-content_1fr{grid-template-columns:min-content 1fr}.grid-ar_min-content_max-content{grid-auto-rows:min-content max-content}.justify-self_end{justify-self:end}.ta_right{text-align:right}.cursor_se-resize{cursor:se-resize}.ai_start{align-items:start}.jc_space-between{justify-content:space-between}.stk_1\\.6{stroke:1.6px}.grid-ar_min-content{grid-auto-rows:min-content}.white-space_pre-wrap{white-space:pre-wrap}.tov_unset{text-overflow:unset}.tov_ellipsis{text-overflow:ellipsis}.wb_break-word{word-break:break-word}.wb_normal{word-break:normal}.bg-c_mantine\\.colors\\.white{background-color:var(--colors-mantine-colors-white)}.jc_flex-end{justify-content:flex-end}.c_mantine\\.colors\\.gray\\[6\\]{color:var(--colors-mantine-colors-gray\\[6\\])}.fw_700{font-weight:700}.justify-self_stretch{justify-self:stretch}.as_start{align-self:start}.ps_\\[16px\\]{padding-inline-start:16px}.pe_2\\.5{padding-inline-end:var(--spacing-2\\.5)}.stk_1\\.2{stroke:1.2px}.d_inline-block{display:inline-block}.lh_1\\.2{line-height:1.2}.c_var\\(--likec4-palette-hiContrast\\){color:var(--likec4-palette-hiContrast)}.fs_xl{font-size:var(--font-sizes-xl)}.c_mantine\\.colors\\.defaultColor{color:var(--colors-mantine-colors-default-color)}.bx-sh_none{box-shadow:var(--shadows-none)}.pos_top-right{position:top-right}.pos_top-left{position:top-left}.grid-cs_1{grid-column-start:1}.grid-ce_4{grid-column-end:4}.grid-tc_1fr_30px_1fr{grid-template-columns:1fr 30px 1fr}.justify-items_start{justify-items:start}.c_dark{color:dark}.stk_3\\.5{stroke:3.5px}.cq-n_likec4-tree{container-name:likec4-tree}.cq-t_inline-size{container-type:inline-size}.fs_10px{font-size:10px}.lh_1\\.3{line-height:1.3}.order_2{order:2}.grayscale_0\\.9{--grayscale: grayscale(.9)}.filter_auto{filter:var(--blur, ) var(--brightness, ) var(--contrast, ) var(--grayscale, ) var(--hue-rotate, ) var(--invert, ) var(--saturate, ) var(--sepia, ) var(--drop-shadow, )}.cross-axis_50{cross-axis:50px}.sr_true{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fs_13px{font-size:13px}.fs_16px{font-size:16px}.c_mantine\\.colors\\.dark\\[1\\]{color:var(--colors-mantine-colors-dark\\[1\\])}.fs_12px{font-size:12px}.fs_md{font-size:var(--font-sizes-md)}.bg-c_\\[rgb\\(34_34_34_\\/_0\\.7\\)\\]{background-color:#222222b3}.z_902{z-index:902}.bkdp-blur_10px{--backdrop-blur: blur(10px)}.trf_translateX\\(-50\\%\\){transform:translate(-50%)}.z_903{z-index:903}.stk_likec4\\.compare\\.manual\\.outline{stroke:var(--colors-likec4-compare-manual-outline)}.stk-w_8px{stroke-width:8px}.stk-op_0\\.5{stroke-opacity:.5}.z_9999{z-index:9999}.fill_\\[var\\(--xy-edge-stroke\\)\\]{fill:var(--xy-edge-stroke)}.stk_transparent{stroke:var(--colors-transparent)}.fill-opacity_0\\.5{fill-opacity:.5}.stk-w_10{stroke-width:10}.r_4{r:4px}.cursor_grab{cursor:grab}.vis_hidden{visibility:hidden}.trs-dur_120ms{--transition-duration: .12s;transition-duration:.12s}.trs-prop_visibility\\,_fill\\,_fill-opacity\\,_r{--transition-prop: visibility, fill, fill-opacity, r;transition-property:visibility,fill,fill-opacity,r}.trs-tmf_inOut{--transition-easing: var(--easings-in-out);transition-timing-function:var(--easings-in-out)}.trs-dly_20ms{transition-delay:20ms}.bg-c_var\\(--likec4-palette-fill\\)\\/15{--mix-backgroundColor: color-mix(in srgb, var(--likec4-palette-fill) 15%, transparent);background-color:var(--mix-backgroundColor, var(--likec4-palette-fill))}.fw_bold{font-weight:700}.ls_\\.75px{letter-spacing:.75px}.c_\\[var\\(--_color\\)\\/75\\]{--mix-color: color-mix(in srgb, var(--_color) 75%, transparent);color:var(--mix-color, var(--_color))}.bg-c_var\\(--likec4-palette-fill\\){background-color:var(--likec4-palette-fill)}.translate-x_-1\\/2{--translate-x: -50%}.translate-y_-1\\/2{--translate-y: -50%}.ring-c_likec4\\.compare\\.manual\\.outline{outline-color:var(--colors-likec4-compare-manual-outline)}.ring-w_4px{outline-width:4px}.outline-style_dashed{outline-style:dashed}.ring-o_1\\.5{outline-offset:var(--spacing-1\\.5)}.bg-c_mantine\\.colors\\.body\\/80{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-body) 80%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-body))}.fill_var\\(--likec4-palette-fill\\){fill:var(--likec4-palette-fill)}.stk_var\\(--likec4-palette-stroke\\){stroke:var(--likec4-palette-stroke)}.stk-w_1{stroke-width:1}.filter_drop-shadow\\(0_2px_3px_rgb\\(0_0_0_\\/_22\\%\\)\\)_drop-shadow\\(0_1px_8px_rgb\\(0_0_0_\\/_10\\%\\)\\){filter:drop-shadow(0 2px 3px rgb(0 0 0 / 22%)) drop-shadow(0 1px 8px rgb(0 0 0 / 10%))}.ls_0\\.2px{letter-spacing:.2px}.tt_lowercase{text-transform:lowercase}.op_0\\.25{opacity:.25}.stk-w_5{stroke-width:5}.pos_right-end{position:right-end}.jc_flex-start{justify-content:flex-start}.pos_left-start{position:left-start}.top_4{top:var(--spacing-4)}.right_4{right:var(--spacing-4)}.top_10{top:var(--spacing-10)}.left_10{left:var(--spacing-10)}.w_\\[calc\\(100vw_-_\\(\\{spacing\\.10\\}_\\*_2\\)\\)\\]{width:calc(100vw - (var(--spacing-10) * 2))}.h_max-content{height:max-content}.max-h_\\[calc\\(100vh_-_\\(\\{spacing\\.10\\}_\\*_3\\)\\)\\]{max-height:calc(100vh - (var(--spacing-10) * 3))}.mt_md{margin-top:var(--spacing-md)}.min-h_24{min-height:24px}.max-w_500{max-width:500px}.pr_0{padding-right:var(--spacing-0)}.h_12{height:12px}.w_12{width:12px}.h_30px{height:30px}.pl_sm{padding-left:var(--spacing-sm)}.pr_1{padding-right:var(--spacing-1)}.w_100\\%{width:var(--sizes-100\\%)}.pr_2\\.5{padding-right:var(--spacing-2\\.5)}.top_0{top:var(--spacing-0)}.left_0{left:var(--spacing-0)}.max-w_calc\\(100vw\\){max-width:100vw}.max-w_200px{max-width:200px}.max-w_calc\\(100vw_-_50px\\){max-width:calc(100vw - 50px)}.max-w_calc\\(100vw_-_250px\\){max-width:calc(100vw - 250px)}.max-h_calc\\(100vh_-_200px\\){max-height:calc(100vh - 200px)}.max-h_calc\\(100vh_-_160px\\){max-height:calc(100vh - 160px)}.h_100\\%{height:var(--sizes-100\\%)}.mb_1{margin-bottom:var(--spacing-1)}.max-h_100vh{max-height:100vh}.pt_\\[20px\\]{padding-top:20px}.pl_md{padding-left:var(--spacing-md)}.pr_md{padding-right:var(--spacing-md)}.pb_sm{padding-bottom:var(--spacing-sm)}.pr_xs{padding-right:var(--spacing-xs)}.lc_5{-webkit-line-clamp:5}.lc_5,.lc_2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.lc_2{-webkit-line-clamp:2}.lc_3{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.top_0\\.5{top:var(--spacing-0\\.5)}.right_0\\.5{right:var(--spacing-0\\.5)}.w_full{width:var(--sizes-full)}.h_full{height:var(--sizes-full)}.bottom_0{bottom:var(--spacing-0)}.max-w_50{max-width:50px}.h_5{height:5px}.w_max-content{width:max-content}.pt_2{padding-top:var(--spacing-2)}.mt_2{margin-top:var(--spacing-2)}.mt_0{margin-top:var(--spacing-0)}.w_350{width:350px}.pl_2\\.5{padding-left:var(--spacing-2\\.5)}.bd-l-c_mantine\\.colors\\.gray\\[3\\]{border-left-color:var(--colors-mantine-colors-gray\\[3\\])}.bdr-bl_sm{border-bottom-left-radius:var(--radii-sm)}.bdr-br_sm{border-bottom-right-radius:var(--radii-sm)}.pl_3{padding-left:var(--spacing-3)}.w_\\[20px\\]{width:20px}.mt_1{margin-top:var(--spacing-1)}.mb_xxs{margin-bottom:var(--spacing-xxs)}.pb_lg{padding-bottom:var(--spacing-lg)}.max-w_calc\\(100cqw_-_52px\\){max-width:calc(100cqw - 52px)}.min-w_200px{min-width:200px}.max-h_calc\\(100cqh_-_100px\\){max-height:calc(100cqh - 100px)}.mt_4{margin-top:var(--spacing-4)}.mt_xs{margin-top:var(--spacing-xs)}.h_auto{height:auto}.pt_6{padding-top:var(--spacing-6)}.mb_10{margin-bottom:var(--spacing-10)}.pt_100\\%{padding-top:100%}.left_2{left:var(--spacing-2)}.bottom_2{bottom:var(--spacing-2)}.top_md{top:var(--spacing-md)}.left_md{left:var(--spacing-md)}.w_8{width:8px}.h_8{height:8px}.mr_sm{margin-right:var(--spacing-sm)}.h_26{height:26px}.top_\\[1px\\]{top:1px}.right_\\[1px\\]{right:1px}.pt_xxs{padding-top:var(--spacing-xxs)}.max-w_calc\\(100cqw_-_32px\\){max-width:calc(100cqw - 32px)}.min-w_calc\\(100cqw_-_50px\\){min-width:calc(100cqw - 50px)}.w_100vw{width:100vw}.h_100vh{height:100vh}.max-w_100vw{max-width:100vw}.h_40px{height:40px}.w_40px{width:40px}.w_14px{width:14px}.h_14px{height:14px}.bottom_0\\.5{bottom:var(--spacing-0\\.5)}.mb_sm{margin-bottom:var(--spacing-sm)}.lc_1{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.mt_6{margin-top:var(--spacing-6)}.pt_xs{padding-top:var(--spacing-xs)}.w_300{width:300px}.min-w_0{min-width:0}.min-h_32px{min-height:32px}.max-w_min\\(200px\\,_100\\%\\){max-width:min(200px,100%)}.min-w_60px{min-width:60px}.mb_0{margin-bottom:var(--spacing-0)}.h_36px{height:36px}.min-w_24{min-width:24px}.mb_4{margin-bottom:var(--spacing-4)}.top_12{top:12px}.right_12{right:12px}.mt_sm{margin-top:var(--spacing-sm)}.ml_sm{margin-left:var(--spacing-sm)}.pl_1{padding-left:var(--spacing-1)}.bd-b-c_mantine\\.colors\\.defaultBorder{border-bottom-color:var(--colors-mantine-colors-default-border)}.max-h_70vh{max-height:70vh}.mb_2{margin-bottom:var(--spacing-2)}.max-w_8xl{max-width:8xl}.pl_\\[48px\\]{padding-left:48px}.mr_1{margin-right:var(--spacing-1)}.min-h_60px{min-height:60px}.h_var\\(--likec4-icon-size\\,_24px\\){height:var(--likec4-icon-size, 24px)}.w_var\\(--likec4-icon-size\\,_24px\\){width:var(--likec4-icon-size, 24px)}.top_\\[2rem\\]{top:2rem}.left_\\[50\\%\\]{left:50%}.max-w_600px{max-width:600px}.pl_2{padding-left:var(--spacing-2)}.pt_0\\.5{padding-top:var(--spacing-0\\.5)}.w_5px{width:5px}.top_1{top:var(--spacing-1)}.right_0{right:var(--spacing-0)}.w_min-content{width:min-content}.h_min-content{height:min-content}.min-w_200{min-width:200px}.max-w_calc\\(100vw_-_20px\\){max-width:calc(100vw - 20px)}.pt_0{padding-top:var(--spacing-0)}.pb_0{padding-bottom:var(--spacing-0)}.ml_2{margin-left:var(--spacing-2)}.h_xs{height:xs}.pb_8{padding-bottom:var(--spacing-8)}.pt_4{padding-top:var(--spacing-4)}.max-w_220px{max-width:220px}.\\[\\&_\\.action-icon\\]\\:--ai-size_2rem .action-icon{--ai-size: 2rem}[data-mantine-color-scheme=light] .light\\:--icon-color_\\{colors\\.mantine\\.colors\\.gray\\[6\\]\\}{--icon-color: var(--colors-mantine-colors-gray\\[6\\])}[data-mantine-color-scheme=light] .light\\:--view-title-color_\\{colors\\.mantine\\.colors\\.gray\\[7\\]\\}{--view-title-color: var(--colors-mantine-colors-gray\\[7\\])}.\\[\\&_\\.mantine-ThemeIcon-root\\]\\:--ti-size_22px .mantine-ThemeIcon-root{--ti-size: 22px}[data-mantine-color-scheme=dark] .dark\\:--_color_\\[color-mix\\(in_oklab\\,_var\\(--likec4-palette-hiContrast\\)_40\\%\\,_var\\(--likec4-palette-fill\\)\\)\\]{--_color: color-mix(in oklab, var(--likec4-palette-hiContrast) 40%, var(--likec4-palette-fill))}.likec4-root:not([data-likec4-reduced-graphics]) .noReduceGraphics\\:--ai-radius_\\{radii\\.md\\}{--ai-radius: var(--radii-md)}.backdrop\\:bg_\\[color-mix\\(in_oklab\\,_\\{colors\\.likec4\\.overlay\\.backdrop\\}_60\\%\\,_transparent\\)\\]::backdrop{background:color-mix(in oklab,var(--colors-likec4-overlay-backdrop) 60%,transparent)}[data-mantine-color-scheme=light] .light\\:bg_mantine\\.colors\\.white{background:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=dark] .dark\\:bg_mantine\\.colors\\.dark\\[6\\]{background:var(--colors-mantine-colors-dark\\[6\\])}[data-mantine-color-scheme=light] .light\\:bg_var\\(--likec4-palette-fill\\)\\/90{--mix-background: color-mix(in srgb, var(--likec4-palette-fill) 90%, transparent);background:var(--mix-background, var(--likec4-palette-fill))}[data-mantine-color-scheme=dark] .dark\\:bg_var\\(--likec4-palette-fill\\)\\/60{--mix-background: color-mix(in srgb, var(--likec4-palette-fill) 60%, transparent);background:var(--mix-background, var(--likec4-palette-fill))}[data-mantine-color-scheme=dark] .dark\\:bg_mantine\\.colors\\.dark\\[5\\]{background:var(--colors-mantine-colors-dark\\[5\\])}[data-mantine-color-scheme=dark] .dark\\:bg_mantine\\.colors\\.dark\\[7\\]{background:var(--colors-mantine-colors-dark\\[7\\])}.\\[\\&\\[data-active\\]\\]\\:bg_mantine\\.colors\\.white[data-active]{background:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .light\\:bg_mantine\\.colors\\.gray\\[1\\]{background:var(--colors-mantine-colors-gray\\[1\\])}.\\[\\&\\[data-missing\\]\\]\\:bg_mantine\\.colors\\.orange\\[8\\]\\/15[data-missing]{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-orange\\[8\\]) 15%, transparent);background:var(--mix-background, var(--colors-mantine-colors-orange\\[8\\]))}.\\[\\&\\[data-missing\\]\\]\\:bg_mantine\\.colors\\.orange\\[8\\]\\/20[data-missing]{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-orange\\[8\\]) 20%, transparent);background:var(--mix-background, var(--colors-mantine-colors-orange\\[8\\]))}[data-mantine-color-scheme=light] .light\\:bg_mantine\\.colors\\.gray\\[3\\]\\/20{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-gray\\[3\\]) 20%, transparent);background:var(--mix-background, var(--colors-mantine-colors-gray\\[3\\]))}[data-mantine-color-scheme=dark] .dark\\:bg_mantine\\.colors\\.dark\\[6\\]\\/80{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-dark\\[6\\]) 80%, transparent);background:var(--mix-background, var(--colors-mantine-colors-dark\\[6\\]))}[data-mantine-color-scheme=light] .light\\:bg_mantine\\.colors\\.white\\/80{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-white) 80%, transparent);background:var(--mix-background, var(--colors-mantine-colors-white))}[data-mantine-color-scheme=light] .light\\:bd-c_mantine\\.colors\\.gray\\[4\\]{border-color:var(--colors-mantine-colors-gray\\[4\\])}[data-mantine-color-scheme=dark] .dark\\:bd-c_mantine\\.colors\\.dark\\[4\\]{border-color:var(--colors-mantine-colors-dark\\[4\\])}.likec4-root:is([data-likec4-diagram-panning=true]) .whenPanning\\:transition_none\\!{transition:none!important}[data-mantine-color-scheme=light] .light\\:bd-c_mantine\\.colors\\.gray\\[2\\]{border-color:var(--colors-mantine-colors-gray\\[2\\])}[data-mantine-color-scheme=dark] .dark\\:bd-c_mantine\\.colors\\.dark\\[7\\]{border-color:var(--colors-mantine-colors-dark\\[7\\])}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .whenHovered\\:bdr_4{border-radius:4px}.\\[\\&_\\.mantine-ThemeIcon-root\\]\\:transition_fast .mantine-ThemeIcon-root{transition:all var(--durations-fast) var(--easings-in-out)}.\\[\\&_\\>_\\*\\]\\:transition_all_130ms_\\{easings\\.inOut\\}>*{transition:all .13s var(--easings-in-out)}.\\[\\&\\[data-active\\]\\]\\:transition_none[data-active]{transition:none}.\\[\\&_\\>_\\*\\]\\:transition_fast>*,.\\[\\&_\\.tabler-icon\\]\\:transition_fast .tabler-icon{transition:all var(--durations-fast) var(--easings-in-out)}.\\[\\&\\[data-missing\\]\\]\\:bd-c_mantine\\.colors\\.orange\\[5\\]\\/20[data-missing]{--mix-borderColor: color-mix(in srgb, var(--colors-mantine-colors-orange\\[5\\]) 20%, transparent);border-color:var(--mix-borderColor, var(--colors-mantine-colors-orange\\[5\\]))}[data-mantine-color-scheme=light] .light\\:bd-c_mantine\\.colors\\.gray\\[3\\]{border-color:var(--colors-mantine-colors-gray\\[3\\])}.\\[\\&\\:last-child_\\.likec4-edge-label\\]\\:bd-b_none:last-child .likec4-edge-label{border-bottom:var(--borders-none)}.\\[\\&_\\>_\\*\\]\\:transition_all_0\\.15s_ease-in>*{transition:all .15s ease-in}[data-mantine-color-scheme=dark] .dark\\:bd-c_transparent{border-color:var(--colors-transparent)}.\\[\\&_\\:where\\(\\.likec4-diagram\\,_\\.likec4-compound-node\\,_\\.likec4-element-node\\)\\]\\:cursor_pointer :where(.likec4-diagram,.likec4-compound-node,.likec4-element-node){cursor:pointer}.backdrop\\:cursor_zoom-out::backdrop{cursor:zoom-out}.backdrop\\:bkdp_blur\\(18px\\)::backdrop{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.\\[\\&\\:is\\(\\[data-position\\=\\"left\\"\\]\\)\\]\\:c_mantine\\.colors\\.dimmed:is([data-position=left]){color:var(--colors-mantine-colors-dimmed)}.\\[\\&\\:is\\(\\[data-position\\=\\"left\\"\\]\\)\\]\\:us_none:is([data-position=left]){-webkit-user-select:none;user-select:none}.\\[\\&\\:is\\(\\[data-position\\=\\"left\\"\\]\\)\\]\\:pointer-events_none:is([data-position=left]){pointer-events:none}[data-mantine-color-scheme=light] .light\\:fill_\\[\\#222221\\]{fill:#222221}.\\[\\&_\\.tabler-icon\\]\\:c_mantine\\.colors\\.text .tabler-icon{color:var(--colors-mantine-colors-text)}.likec4-root:is([data-likec4-diagram-panning=true]) .whenPanning\\:bx-sh_none\\!{box-shadow:var(--shadows-none)!important}[data-mantine-color-scheme=light] .light\\:c_mantine\\.colors\\.gray\\[7\\]{color:var(--colors-mantine-colors-gray\\[7\\])}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.dark\\[0\\]{color:var(--colors-mantine-colors-dark\\[0\\])}[data-mantine-color-scheme=light] .light\\:bg-c_mantine\\.colors\\.gray\\[2\\]\\/70{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-gray\\[2\\]) 70%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-gray\\[2\\]))}[data-mantine-color-scheme=dark] .dark\\:bg-c_mantine\\.colors\\.dark\\[8\\]\\/70{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-dark\\[8\\]) 70%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-dark\\[8\\]))}.empty\\:d_none:is(:empty,[data-empty]){display:none}.\\[\\&_\\>_mark\\]\\:bg-c_mantine\\.colors\\.yellow\\[2\\]\\/90>mark{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-yellow\\[2\\]) 90%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-yellow\\[2\\]))}[data-mantine-color-scheme=dark] .dark\\:op_0\\.5{opacity:.5}[data-mantine-color-scheme=dark] .dark\\:bg-c_mantine\\.colors\\.dark\\[5\\]\\/80{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-dark\\[5\\]) 80%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-dark\\[5\\]))}.placeholder\\:c_mantine\\.colors\\.dimmed::placeholder,.placeholder\\:c_mantine\\.colors\\.dimmed[data-placeholder]{color:var(--colors-mantine-colors-dimmed)}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.dark\\[3\\]{color:var(--colors-mantine-colors-dark\\[3\\])}[data-mantine-color-scheme=light] .light\\:bg-c_\\[rgb\\(250_250_250_\\/_var\\(--_opacity\\,_95\\%\\)\\)\\]{background-color:rgb(250 250 250 / var(--_opacity, 95%))}:where([data-likec4-zoom-small=true]) .smallZoom\\:d_none{display:none}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:pointer-events_all{pointer-events:all}:where(.react-flow__node.selectable:not(.dragging)) .\\[\\:where\\(\\.react-flow__node\\.selectable\\:not\\(\\.dragging\\)\\)_\\&\\]\\:cursor_pointer{cursor:pointer}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .whenHovered\\:trs-dly_\\.08s{transition-delay:.08s}.likec4-root:is([data-likec4-diagram-panning=true]) .whenPanning\\:pointer-events_none{pointer-events:none}[data-mantine-color-scheme=light] .light\\:c_var\\(--likec4-palette-hiContrast\\){color:var(--likec4-palette-hiContrast)}[data-mantine-color-scheme=dark] .dark\\:c_var\\(--likec4-palette-loContrast\\){color:var(--likec4-palette-loContrast)}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.gray\\[4\\]{color:var(--colors-mantine-colors-gray\\[4\\])}[data-mantine-color-scheme=light] .light\\:c_mantine\\.colors\\.gray\\[8\\]{color:var(--colors-mantine-colors-gray\\[8\\])}[data-mantine-color-scheme=light] .light\\:c_mantine\\.colors\\.gray\\[9\\]{color:var(--colors-mantine-colors-gray\\[9\\])}.\\[\\&\\:is\\(\\[data-position\\=\\"right\\"\\]\\)\\]\\:ms_1:is([data-position=right]){margin-inline-start:var(--spacing-1)}.\\[\\&_\\:where\\(button\\,_\\.action-icon\\,_\\[role\\=\\'dialog\\'\\]\\)\\]\\:pointer-events_all :where(button,.action-icon,[role=dialog]){pointer-events:all}.likec4-root:is([data-likec4-diagram-panning=true]) .whenPanning\\:bx-sh_none{box-shadow:var(--shadows-none)}.backdrop\\:bkdp_auto::backdrop{backdrop-filter:var(--backdrop-blur, ) var(--backdrop-brightness, ) var(--backdrop-contrast, ) var(--backdrop-grayscale, ) var(--backdrop-hue-rotate, ) var(--backdrop-invert, ) var(--backdrop-opacity, ) var(--backdrop-saturate, ) var(--backdrop-sepia, );-webkit-backdrop-filter:var(--backdrop-blur, ) var(--backdrop-brightness, ) var(--backdrop-contrast, ) var(--backdrop-grayscale, ) var(--backdrop-hue-rotate, ) var(--backdrop-invert, ) var(--backdrop-opacity, ) var(--backdrop-saturate, ) var(--backdrop-sepia, )}.backdrop\\:bkdp-blur_var\\(--_blur\\)::backdrop{--backdrop-blur: blur(var(--_blur))}.backdrop\\:bg-c_\\[rgb\\(36_36_36_\\/_var\\(--_opacity\\,_5\\%\\)\\)\\]::backdrop{background-color:rgb(36 36 36 / var(--_opacity, 5%))}.\\[\\&_\\.react-flow__attribution\\]\\:d_none .react-flow__attribution{display:none}[data-mantine-color-scheme=dark] .dark\\:mix-bm_hard-light{mix-blend-mode:hard-light}.\\[\\&_\\:where\\(svg\\,_img\\)\\]\\:pointer-events_none :where(svg,img){pointer-events:none}.\\[\\&_\\:where\\(svg\\,_img\\)\\]\\:filter_drop-shadow\\(0_0_3px_rgb\\(0_0_0_\\/_10\\%\\)\\)_drop-shadow\\(0_1px_8px_rgb\\(0_0_0_\\/_5\\%\\)\\)_drop-shadow\\(1px_1px_16px_rgb\\(0_0_0_\\/_2\\%\\)\\) :where(svg,img){filter:drop-shadow(0 0 3px rgb(0 0 0 / 10%)) drop-shadow(0 1px 8px rgb(0 0 0 / 5%)) drop-shadow(1px 1px 16px rgb(0 0 0 / 2%))}.\\[\\&_img\\]\\:obj-f_contain img{object-fit:contain}.\\[\\&_\\.mantine-ThemeIcon-root\\]\\:c_\\[var\\(--icon-color\\,_\\{colors\\.mantine\\.colors\\.dark\\[2\\]\\}\\)\\] .mantine-ThemeIcon-root{color:var(--icon-color, var(--colors-mantine-colors-dark\\[2\\]))}.\\[\\&\\[data-active\\]\\]\\:bx-sh_xs[data-active]{box-shadow:var(--shadows-xs)}.\\[\\&\\[data-active\\]\\]\\:c_mantine\\.colors\\.defaultColor[data-active]{color:var(--colors-mantine-colors-default-color)}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.dark\\[1\\]{color:var(--colors-mantine-colors-dark\\[1\\])}[data-mantine-color-scheme=dark] .dark\\:bg-c_mantine\\.colors\\.dark\\[9\\]{background-color:var(--colors-mantine-colors-dark\\[9\\])}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.text{color:var(--colors-mantine-colors-text)}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.dark\\[2\\]{color:var(--colors-mantine-colors-dark\\[2\\])}[data-mantine-color-scheme=dark] .dark\\:bg-c_mantine\\.colors\\.dark\\[6\\]{background-color:var(--colors-mantine-colors-dark\\[6\\])}[data-mantine-color-scheme=dark] .dark\\:c_mantine\\.colors\\.gray\\.lightColor{color:var(--colors-mantine-colors-gray-light-color)}.\\[\\&_\\.tabler-icon\\]\\:op_0\\.65 .tabler-icon{opacity:.65}.\\[\\&\\[data-missing\\]\\]\\:c_mantine\\.colors\\.orange\\[4\\][data-missing]{color:var(--colors-mantine-colors-orange\\[4\\])}.before\\:content_\\"scope\\:\\":before{content:"scope:"}.before\\:pos_absolute:before{position:absolute}.before\\:fs_xxs:before{font-size:var(--font-sizes-xxs)}.before\\:fw_500:before{font-weight:500}.before\\:lh_1:before{line-height:var(--line-heights-1)}.before\\:c_mantine\\.colors\\.dimmed:before{color:var(--colors-mantine-colors-dimmed)}.before\\:op_0\\.85:before{opacity:.85}.before\\:trf_translateY\\(-100\\%\\)_translateY\\(-2px\\):before{transform:translateY(-100%) translateY(-2px)}.\\[\\&\\[data-zero\\]\\]\\:c_mantine\\.colors\\.dimmed[data-zero]{color:var(--colors-mantine-colors-dimmed)}.\\[\\&_\\.mantine-Text-root\\]\\:c_mantine\\.colors\\.text\\/90 .mantine-Text-root{--mix-color: color-mix(in srgb, var(--colors-mantine-colors-text) 90%, transparent);color:var(--mix-color, var(--colors-mantine-colors-text))}.\\[\\&_\\.mantine-Text-root\\]\\:fs_xs .mantine-Text-root{font-size:var(--font-sizes-xs)}.\\[\\&_\\.mantine-Text-root\\]\\:fw_500 .mantine-Text-root{font-weight:500}.\\[\\&_\\.mantine-Text-root\\]\\:lh_1\\.2 .mantine-Text-root{line-height:1.2}.\\[\\&_\\.mantine-Text-root\\]\\:fs_xxs .mantine-Text-root{font-size:var(--font-sizes-xxs)}.\\[\\&_\\.mantine-Text-root\\]\\:fw_400 .mantine-Text-root{font-weight:400}.\\[\\&_\\.mantine-Text-root\\]\\:lh_xs .mantine-Text-root{line-height:var(--line-heights-xs)}.\\[\\&_\\.mantine-Text-root\\]\\:c_mantine\\.colors\\.dimmed .mantine-Text-root{color:var(--colors-mantine-colors-dimmed)}.\\[\\&\\[data-disabled\\]_\\.mantine-ThemeIcon-root\\]\\:op_0\\.45[data-disabled] .mantine-ThemeIcon-root{opacity:.45}:where(.likec4-view-btn[data-disabled]) .\\[\\:where\\(\\.likec4-view-btn\\[data-disabled\\]\\)_\\&\\]\\:op_0\\.85{opacity:.85}[data-mantine-color-scheme=light] .light\\:c_mantine\\.colors\\.gray\\[5\\]{color:var(--colors-mantine-colors-gray\\[5\\])}.\\[\\&_svg\\,_\\&_img\\]\\:pointer-events_none svg,.\\[\\&_svg\\,_\\&_img\\]\\:pointer-events_none img{pointer-events:none}.\\[\\&\\.likec4-shape-icon_svg\\]\\:stk-w_1\\.5.likec4-shape-icon svg{stroke-width:1.5}:where([data-disabled]) .\\[\\:where\\(\\[data-disabled\\]\\)_\\&\\]\\:op_0\\.4{opacity:.4}:where([data-disabled]) .\\[\\:where\\(\\[data-disabled\\]\\)_\\&\\]\\:op_0\\.85{opacity:.85}[data-mantine-color-scheme=light] .light\\:bg-c_\\[rgb\\(255_255_255_\\/_0\\.6\\)\\]{background-color:#fff9}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .whenHovered\\:stk-w_12px{stroke-width:12px}.\\[\\&_\\.react-flow__edge-interaction\\]\\:cursor_copy .react-flow__edge-interaction{cursor:copy}[data-mantine-color-scheme=dark] .dark\\:mix-bm_screen{mix-blend-mode:screen}[data-mantine-color-scheme=light] .light\\:mix-bm_multiply{mix-blend-mode:multiply}:where([data-likec4-selected=true],[data-likec4-hovered=true]) .\\[\\:where\\(\\[data-likec4-selected\\=\\'true\\'\\]\\,_\\[data-likec4-hovered\\=\\'true\\'\\]\\)_\\&\\]\\:vis_visible{visibility:visible}:where([data-likec4-selected=true],[data-likec4-hovered=true]) .\\[\\:where\\(\\[data-likec4-selected\\=\\'true\\'\\]\\,_\\[data-likec4-hovered\\=\\'true\\'\\]\\)_\\&\\]\\:fill-opacity_1{fill-opacity:1}:where([data-likec4-selected=true],[data-likec4-hovered=true]) .\\[\\:where\\(\\[data-likec4-selected\\=\\'true\\'\\]\\,_\\[data-likec4-hovered\\=\\'true\\'\\]\\)_\\&\\]\\:trs-tmf_out{--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out)}:where([data-likec4-selected=true],[data-likec4-hovered=true]) .\\[\\:where\\(\\[data-likec4-selected\\=\\'true\\'\\]\\,_\\[data-likec4-hovered\\=\\'true\\'\\]\\)_\\&\\]\\:trs-dly_0ms{transition-delay:0ms}:where([data-likec4-selected=true]) .\\[\\:where\\(\\[data-likec4-selected\\=\\'true\\'\\]\\)_\\&\\]\\:r_6{r:6px}:is([data-likec4-hovered=true]) .\\[\\:is\\(\\[data-likec4-hovered\\=\\'true\\'\\]\\)_\\&\\]\\:r_8{r:8px}.\\[\\&_\\+_\\.likec4-element-shape\\]\\:ring-c_likec4\\.compare\\.manual\\.outline+.likec4-element-shape{outline-color:var(--colors-likec4-compare-manual-outline)}.\\[\\&_\\+_\\.likec4-element-shape\\]\\:ring-w_4px+.likec4-element-shape{outline-width:4px}.\\[\\&_\\+_\\.likec4-element-shape\\]\\:outline-style_dashed+.likec4-element-shape{outline-style:dashed}.\\[\\&_\\+_\\.likec4-element-shape\\]\\:ring-o_1\\.5+.likec4-element-shape{outline-offset:var(--spacing-1\\.5)}[data-mantine-color-scheme=dark] .dark\\:bg-c_mantine\\.colors\\.dark\\[6\\]\\/80{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-dark\\[6\\]) 80%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-dark\\[6\\]))}.\\[\\&_\\.mantine-ScrollArea-viewport\\]\\:min-h_100\\% .mantine-ScrollArea-viewport{min-height:var(--sizes-100\\%)}:where([data-likec4-shape=browser]) .shapeBrowser\\:right_\\[5px\\]{right:5px}:where([data-likec4-shape=cylinder]) .shapeCylinder\\:top_\\[14px\\]{top:14px}:where([data-likec4-shape=storage]) .shapeStorage\\:top_\\[14px\\]{top:14px}:where([data-likec4-shape=queue]) .shapeQueue\\:top_\\[1px\\]{top:1px}:where([data-likec4-shape=queue]) .shapeQueue\\:right_3{right:var(--spacing-3)}:where([data-likec4-shape=cylinder]) .shapeCylinder\\:bottom_\\[5px\\]{bottom:5px}:where([data-likec4-shape=storage]) .shapeStorage\\:bottom_\\[5px\\]{bottom:5px}:where([data-likec4-shape=queue]) .shapeQueue\\:bottom_0{bottom:var(--spacing-0)}:where([data-likec4-shape=queue]) .shapeQueue\\:pl_\\[14px\\]{padding-left:14px}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .whenHovered\\:h_12{height:12px}[data-mantine-color-scheme=dark] .dark\\:bd-l-c_mantine\\.colors\\.dark\\[4\\]{border-left-color:var(--colors-mantine-colors-dark\\[4\\])}.\\[\\&_\\>_svg\\]\\:w_70\\%>svg{width:70%}.\\[\\&_\\>_svg\\]\\:h_70\\%>svg{height:70%}.\\[\\&_\\.tabler-icon\\]\\:w_65\\% .tabler-icon{width:65%}.\\[\\&_\\.tabler-icon\\]\\:h_65\\% .tabler-icon{height:65%}.\\[\\&_\\:where\\(svg\\,_img\\)\\]\\:w_100\\% :where(svg,img){width:var(--sizes-100\\%)}.\\[\\&_\\:where\\(svg\\,_img\\)\\]\\:h_auto :where(svg,img){height:auto}.\\[\\&_\\:where\\(svg\\,_img\\)\\]\\:max-h_100\\% :where(svg,img){max-height:var(--sizes-100\\%)}.\\[\\&\\:not\\(\\:has\\(\\.mantine-ScrollArea-root\\)\\)\\]\\:pl_1:not(:has(.mantine-ScrollArea-root)){padding-left:var(--spacing-1)}.\\[\\&\\:not\\(\\:has\\(\\.mantine-ScrollArea-root\\)\\)\\]\\:pr_1:not(:has(.mantine-ScrollArea-root)){padding-right:var(--spacing-1)}.\\[\\&_\\.mantine-ScrollArea-root\\]\\:w_100\\% .mantine-ScrollArea-root{width:var(--sizes-100\\%)}.\\[\\&_\\.mantine-ScrollArea-root\\]\\:h_100\\% .mantine-ScrollArea-root{height:var(--sizes-100\\%)}.\\[\\&\\[data-level\\=\\'1\\'\\]\\]\\:mb_sm[data-level="1"]{margin-bottom:var(--spacing-sm)}.\\[\\&_\\.tabler-icon\\]\\:w_90\\% .tabler-icon{width:90%}.before\\:top_0:before{top:var(--spacing-0)}.before\\:left_2:before{left:var(--spacing-2)}.\\[\\&\\:last-child_\\.likec4-edge-label\\]\\:mb_0:last-child .likec4-edge-label{margin-bottom:var(--spacing-0)}.\\[\\&_svg\\,_\\&_img\\]\\:w_100\\% svg,.\\[\\&_svg\\,_\\&_img\\]\\:w_100\\% img{width:var(--sizes-100\\%)}.\\[\\&_svg\\,_\\&_img\\]\\:h_auto svg,.\\[\\&_svg\\,_\\&_img\\]\\:h_auto img{height:auto}.\\[\\&_svg\\,_\\&_img\\]\\:max-h_100\\% svg,.\\[\\&_svg\\,_\\&_img\\]\\:max-h_100\\% img{max-height:var(--sizes-100\\%)}:is(.\\[\\&_\\+_\\&\\]\\:mt_\\[32px\\])+:is(.\\[\\&_\\+_\\&\\]\\:mt_\\[32px\\]){margin-top:32px}:where(.react-flow__node:has([data-likec4-hovered=true]),.react-flow__edge:has([data-likec4-hovered=true]),.likec4-edge-container[data-likec4-hovered=true]) .whenHovered\\:w_7px{width:7px}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selected) .whenSelected\\:w_7px{width:7px}.focusWithin\\:bg_mantine\\.colors\\.gray\\[4\\]\\/55\\!:focus-within{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-gray\\[4\\]) 55%, transparent) !important;background:var(--mix-background, var(--colors-mantine-colors-gray\\[4\\]))!important}.group:focus-within .groupFocusWithin\\:op_1{opacity:1}.group:focus-within .groupFocusWithin\\:grayscale_0{--grayscale: grayscale(0)}.focus\\:bg_mantine\\.colors\\.primary\\[8\\]:is(:focus,[data-focus]){background:var(--colors-mantine-colors-primary\\[8\\])}.mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:bg_mantine\\.colors\\.primary\\[8\\]{background:var(--colors-mantine-colors-primary\\[8\\])}.group:is(:focus,[data-focus]) .groupFocus\\:transition_none{transition:none}.focus\\:ring_none:is(:focus,[data-focus]){outline:var(--borders-none)}.focusVisible\\:ring_none:is(:focus-visible,[data-focus-visible]){outline:var(--borders-none)}.focus\\:bd-c_mantine\\.colors\\.primary\\[9\\]:is(:focus,[data-focus]){border-color:var(--colors-mantine-colors-primary\\[9\\])}.mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:ring_none{outline:var(--borders-none)}.mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:bd-c_mantine\\.colors\\.primary\\[9\\]{border-color:var(--colors-mantine-colors-primary\\[9\\])}.group:is(:focus,[data-focus]) .groupFocus\\:c_\\[inherit\\]\\!{color:inherit!important}.group:is(:focus,[data-focus]) .groupFocus\\:op_0\\.5{opacity:.5}.group:is(:focus,[data-focus]) .groupFocus\\:op_0\\.8{opacity:.8}.focus\\:bg-c_mantine\\.colors\\.gray\\[2\\]:is(:focus,[data-focus]){background-color:var(--colors-mantine-colors-gray\\[2\\])}.focus\\:c_mantine\\.colors\\.primary\\.lightColor\\!:is(:focus,[data-focus]){color:var(--colors-mantine-colors-primary-light-color)!important}.focus\\:bg-c_mantine\\.colors\\.primary\\.lightHover\\!:is(:focus,[data-focus]){background-color:var(--colors-mantine-colors-primary-light-hover)!important}.group:is(:focus,[data-focus]) .groupFocus\\:c_mantine\\.colors\\.primary\\[0\\]{color:var(--colors-mantine-colors-primary\\[0\\])}.mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:c_mantine\\.colors\\.primary\\[0\\]{color:var(--colors-mantine-colors-primary\\[0\\])}.group:is(:focus,[data-focus]) .groupFocus\\:c_mantine\\.colors\\.primary\\[1\\]{color:var(--colors-mantine-colors-primary\\[1\\])}.mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:c_mantine\\.colors\\.primary\\[1\\]{color:var(--colors-mantine-colors-primary\\[1\\])}.hover\\:--icon-color_\\{colors\\.mantine\\.colors\\.dark\\[1\\]\\}:is(:hover,[data-hover]){--icon-color: var(--colors-mantine-colors-dark\\[1\\])}.hover\\:--view-title-color_\\{colors\\.mantine\\.colors\\.defaultColor\\}:is(:hover,[data-hover]){--view-title-color: var(--colors-mantine-colors-default-color)}.hover\\:bg_mantine\\.colors\\.defaultHover:is(:hover,[data-hover]){background:var(--colors-mantine-colors-default-hover)}.hover\\:bg_mantine\\.colors\\.gray\\[3\\]:is(:hover,[data-hover]){background:var(--colors-mantine-colors-gray\\[3\\])}.hover\\:bg_mantine\\.colors\\.gray\\.lightHover:is(:hover,[data-hover]){background:var(--colors-mantine-colors-gray-light-hover)}.hover\\:bg_mantine\\.colors\\.primary\\[8\\]\\/60:is(:hover,[data-hover]){--mix-background: color-mix(in srgb, var(--colors-mantine-colors-primary\\[8\\]) 60%, transparent);background:var(--mix-background, var(--colors-mantine-colors-primary\\[8\\]))}.group:is(:hover,[data-hover]) .groupHover\\:bg_mantine\\.colors\\.gray\\[3\\]\\/35{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-gray\\[3\\]) 35%, transparent);background:var(--mix-background, var(--colors-mantine-colors-gray\\[3\\]))}.hover\\:td_underline:is(:hover,[data-hover]){text-decoration:underline}.hover\\:bd-c_mantine\\.colors\\.defaultBorder:is(:hover,[data-hover]){border-color:var(--colors-mantine-colors-default-border)}.hover\\:bd-w_4px:is(:hover,[data-hover]){border-width:4px}.hover\\:bd-c_mantine\\.colors\\.dark\\[1\\]:is(:hover,[data-hover]){border-color:var(--colors-mantine-colors-dark\\[1\\])}.hover\\:border-style_solid:is(:hover,[data-hover]){border-style:solid}.\\[\\&\\:is\\(\\:hover\\,_\\[data-selected\\=true\\]\\)_\\>_\\*\\]\\:transition_all_0\\.15s_ease-out:is(:hover,[data-selected=true])>*{transition:all .15s ease-out}.hover\\:ring_none:is(:hover,[data-hover]){outline:var(--borders-none)}.hover\\:bd-c_mantine\\.colors\\.primary\\[9\\]:is(:hover,[data-hover]){border-color:var(--colors-mantine-colors-primary\\[9\\])}.hover\\:transition_all_120ms_ease-out:is(:hover,[data-hover]){transition:all .12s ease-out}.hover\\:op_1:is(:hover,[data-hover]){opacity:1}.hover\\:bg-c_mantine\\.colors\\.gray\\[1\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-gray\\[1\\])}.hover\\:bx-sh_sm:is(:hover,[data-hover]){box-shadow:var(--shadows-sm)}.group:is(:hover,[data-hover]) .groupHover\\:c_mantine\\.colors\\.dimmed{color:var(--colors-mantine-colors-dimmed)}.group:is(:hover,[data-hover]) .groupHover\\:op_0\\.5{opacity:.5}.group:is(:hover,[data-hover]) .groupHover\\:op_0\\.8{opacity:.8}.hover\\:bg-c_mantine\\.colors\\.gray\\[2\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-gray\\[2\\])}.hover\\:bg-c_likec4\\.panel\\.action\\.warning\\.bg\\.hover:is(:hover,[data-hover]){background-color:var(--colors-likec4-panel-action-warning-bg-hover)}.hover\\:c_likec4\\.panel\\.action\\.hover:is(:hover,[data-hover]){color:var(--colors-likec4-panel-action-hover)}.hover\\:c_likec4\\.panel\\.action:is(:hover,[data-hover]){color:var(--colors-likec4-panel-action)}.hover\\:trs-dly_0s:is(:hover,[data-hover]){transition-delay:0s}.hover\\:bg-c_likec4\\.panel\\.action\\.bg\\.hover:is(:hover,[data-hover]){background-color:var(--colors-likec4-panel-action-bg-hover)}.\\[\\&\\:hover_\\>_\\*\\]\\:trs-tmf_out:hover>*{--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out)}.\\[\\&\\:hover_\\>_\\*\\]\\:trf_translateX\\(1\\.6px\\):hover>*{transform:translate(1.6px)}.hover\\:trs-tmf_out:is(:hover,[data-hover]){--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out)}.hover\\:c_mantine\\.colors\\.defaultColor:is(:hover,[data-hover]){color:var(--colors-mantine-colors-default-color)}.hover\\:c_mantine\\.colors\\.primary\\[6\\]:is(:hover,[data-hover]){color:var(--colors-mantine-colors-primary\\[6\\])}.\\[\\&\\:is\\(\\:hover\\,_\\[data-selected\\=true\\]\\)_\\>_\\*\\]\\:cursor_pointer:is(:hover,[data-selected=true])>*{cursor:pointer}.\\[\\&\\:is\\(\\:hover\\,_\\[data-selected\\=true\\]\\)_\\>_\\*\\]\\:bg-c_mantine\\.colors\\.defaultHover:is(:hover,[data-selected=true])>*{background-color:var(--colors-mantine-colors-default-hover)}.hover\\:bg-c_mantine\\.colors\\.gray\\[0\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-gray\\[0\\])}.group:is(:hover,[data-hover]) .groupHover\\:op_1{opacity:1}.group:is(:hover,[data-hover]) .groupHover\\:grayscale_0{--grayscale: grayscale(0)}.group:is(:hover,[data-hover]) .groupHover\\:c_mantine\\.colors\\.primary\\[0\\]{color:var(--colors-mantine-colors-primary\\[0\\])}.group:is(:hover,[data-hover]) .groupHover\\:c_mantine\\.colors\\.primary\\[1\\]{color:var(--colors-mantine-colors-primary\\[1\\])}.hover\\:fill_mantine\\.colors\\.primary\\.filledHover:is(:hover,[data-hover]){fill:var(--colors-mantine-colors-primary-filled-hover)}.hover\\:r_10:is(:hover,[data-hover]){r:10px}.hover\\:trs-dur_100ms:is(:hover,[data-hover]){--transition-duration: .1s;transition-duration:.1s}.hover\\:bg-c_mantine\\.colors\\.primary\\[2\\]\\/50:is(:hover,[data-hover]){--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-primary\\[2\\]) 50%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-primary\\[2\\]))}.group:is(:active,[data-active]) .groupActive\\:op_0\\.5{opacity:.5}.group:is(:active,[data-active]) .groupActive\\:op_0\\.8{opacity:.8}.active\\:trf_translateY\\(-3px\\):is(:active,[data-active]){transform:translateY(-3px)}.group:is(:active,[data-active]) .groupActive\\:cursor_grabbing{cursor:grabbing}.likec4-root:is([data-likec4-reduced-graphics]) .reduceGraphics\\:\\[\\&_\\.action-icon\\]\\:--ai-radius_0px .action-icon{--ai-radius: 0px}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:bg_transparent:before{background:var(--colors-transparent)}[data-mantine-color-scheme=dark] .dark\\:\\[\\&\\:is\\(\\[data-active\\]\\)\\]\\:bg_mantine\\.colors\\.dark\\[5\\]:is([data-active]){background:var(--colors-mantine-colors-dark\\[5\\])}[data-mantine-color-scheme=light] .light\\:\\[\\&_\\.mantine-SegmentedControl-root\\]\\:bg_mantine\\.colors\\.gray\\[3\\] .mantine-SegmentedControl-root{background:var(--colors-mantine-colors-gray\\[3\\])}.group:is(:hover,[data-hover]) .\\[\\&\\:is\\(\\[data-position\\=\\"left\\"\\]\\)\\]\\:groupHover\\:c_\\[var\\(--badge-color\\)\\]:is([data-position=left]){color:var(--badge-color)}.group:is(:hover,[data-hover]) .\\[\\&\\:is\\(\\[data-position\\=\\"left\\"\\]\\)\\]\\:groupHover\\:op_0\\.7:is([data-position=left]){opacity:.7}[data-mantine-color-scheme=dark] .\\[\\&_\\>_mark\\]\\:dark\\:bg-c_mantine\\.colors\\.yellow\\[5\\]\\/80>mark{--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-yellow\\[5\\]) 80%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-yellow\\[5\\]))}.group:is(:focus,[data-focus]) .\\[\\&_\\>_mark\\]\\:groupFocus\\:bg-c_\\[transparent\\]>mark{background-color:var(--colors-transparent)}.group:is(:focus,[data-focus]) .\\[\\&_\\>_mark\\]\\:groupFocus\\:c_\\[inherit\\]\\!>mark{color:inherit!important}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:content_\\"_\\":before{content:" "}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:pos_absolute:before{position:absolute}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:pointer-events_all:before{pointer-events:all}.likec4-root:is([data-likec4-reduced-graphics][data-likec4-diagram-panning=true]) .reduceGraphicsOnPan\\:before\\:d_none:before{display:none}.notDisabled\\:hover\\:bg-c_likec4\\.panel\\.action\\.bg\\.hover:not(:is(:disabled,[disabled],[data-disabled])):is(:hover,[data-hover]){background-color:var(--colors-likec4-panel-action-bg-hover)}.\\[\\&_\\.mantine-ThemeIcon-root\\]\\:hover\\:c_mantine\\.colors\\.defaultColor .mantine-ThemeIcon-root:is(:hover,[data-hover]){color:var(--colors-mantine-colors-default-color)}[data-mantine-color-scheme=dark] .dark\\:\\[\\&\\:is\\(\\[data-active\\]\\)\\]\\:c_mantine\\.colors\\.white:is([data-active]){color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .\\[\\&\\[data-missing\\]\\]\\:light\\:c_mantine\\.colors\\.orange\\[8\\][data-missing]{color:var(--colors-mantine-colors-orange\\[8\\])}.\\[\\&_\\.mantine-ScrollArea-viewport\\]\\:\\[\\&_\\>_div\\]\\:min-h_100\\% .mantine-ScrollArea-viewport>div{min-height:var(--sizes-100\\%)}.\\[\\&_\\.mantine-ScrollArea-viewport\\]\\:\\[\\&_\\>_div\\]\\:h_100\\% .mantine-ScrollArea-viewport>div{height:var(--sizes-100\\%)}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:top_\\[calc\\(100\\%_-_4px\\)\\]:before{top:calc(100% - 4px)}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:left_0:before{left:var(--spacing-0)}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:w_full:before{width:var(--sizes-full)}:where(.react-flow__node,.react-flow__edge,.likec4-edge-container):is(.selectable) .whenSelectable\\:before\\:h_24px:before{height:24px}.\\[\\&_\\.mantine-ScrollArea-root\\]\\:\\[\\&_\\>_div\\]\\:pl_1 .mantine-ScrollArea-root>div{padding-left:var(--spacing-1)}.\\[\\&_\\.mantine-ScrollArea-root\\]\\:\\[\\&_\\>_div\\]\\:pr_1 .mantine-ScrollArea-root>div{padding-right:var(--spacing-1)}[data-mantine-color-scheme=dark] .focusWithin\\:dark\\:bg_mantine\\.colors\\.dark\\[5\\]\\/55\\!:focus-within{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-dark\\[5\\]) 55%, transparent) !important;background:var(--mix-background, var(--colors-mantine-colors-dark\\[5\\]))!important}[data-mantine-color-scheme=dark] .focus\\:dark\\:bg-c_mantine\\.colors\\.dark\\[4\\]:is(:focus,[data-focus]){background-color:var(--colors-mantine-colors-dark\\[4\\])}[data-mantine-color-scheme=light] .group:is(:focus,[data-focus]) .groupFocus\\:light\\:c_mantine\\.colors\\.white{color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .mantine-Tree-node:focus>.mantine-Tree-label .\\[\\.mantine-Tree-node\\:focus_\\>_\\.mantine-Tree-label_\\&\\]\\:light\\:c_mantine\\.colors\\.white{color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .light\\:hover\\:--icon-color_\\{colors\\.mantine\\.colors\\.gray\\[7\\]\\}:is(:hover,[data-hover]){--icon-color: var(--colors-mantine-colors-gray\\[7\\])}[data-mantine-color-scheme=dark] .dark\\:hover\\:bg_mantine\\.colors\\.dark\\[6\\]:is(:hover,[data-hover]){background:var(--colors-mantine-colors-dark\\[6\\])}[data-mantine-color-scheme=dark] .group:is(:hover,[data-hover]) .groupHover\\:dark\\:bg_mantine\\.colors\\.dark\\[5\\]\\/35{--mix-background: color-mix(in srgb, var(--colors-mantine-colors-dark\\[5\\]) 35%, transparent);background:var(--mix-background, var(--colors-mantine-colors-dark\\[5\\]))}[data-mantine-color-scheme=light] .light\\:hover\\:bd-c_mantine\\.colors\\.primary\\[6\\]:is(:hover,[data-hover]){border-color:var(--colors-mantine-colors-primary\\[6\\])}[data-mantine-color-scheme=dark] .hover\\:dark\\:bg-c_mantine\\.colors\\.dark\\[5\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-dark\\[5\\])}[data-mantine-color-scheme=light] .group:is(:hover,[data-hover]) .groupHover\\:light\\:bg-c_mantine\\.colors\\.gray\\[2\\]{background-color:var(--colors-mantine-colors-gray\\[2\\])}[data-mantine-color-scheme=dark] .group:is(:hover,[data-hover]) .groupHover\\:dark\\:bg-c_mantine\\.colors\\.dark\\[8\\]{background-color:var(--colors-mantine-colors-dark\\[8\\])}[data-mantine-color-scheme=dark] .hover\\:dark\\:bg-c_mantine\\.colors\\.dark\\[4\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-dark\\[4\\])}[data-mantine-color-scheme=dark] .hover\\:dark\\:bg-c_mantine\\.colors\\.dark\\[5\\]\\/70:is(:hover,[data-hover]){--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-dark\\[5\\]) 70%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-dark\\[5\\]))}[data-mantine-color-scheme=dark] .dark\\:hover\\:c_mantine\\.colors\\.white:is(:hover,[data-hover]){color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=dark] .hover\\:dark\\:bg-c_mantine\\.colors\\.dark\\[7\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-dark\\[7\\])}[data-mantine-color-scheme=dark] .hover\\:dark\\:c_mantine\\.colors\\.primary\\[4\\]:is(:hover,[data-hover]){color:var(--colors-mantine-colors-primary\\[4\\])}.hover\\:\\[\\&_\\>_\\:not\\(\\[data-no-transform\\]\\)\\]\\:trs-tmf_out:is(:hover,[data-hover])>:not([data-no-transform]){--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out)}.hover\\:\\[\\&_\\>_\\:not\\(\\[data-no-transform\\]\\)\\]\\:trf_translateX\\(1px\\):is(:hover,[data-hover])>:not([data-no-transform]){transform:translate(1px)}.hover\\:\\[\\&_\\>_\\*\\]\\:trs-tmf_out:is(:hover,[data-hover])>*{--transition-easing: var(--easings-out);transition-timing-function:var(--easings-out)}.hover\\:\\[\\&_\\>_\\*\\]\\:trf_translateX\\(1px\\):is(:hover,[data-hover])>*{transform:translate(1px)}[data-mantine-color-scheme=dark] .hover\\:dark\\:bg-c_mantine\\.colors\\.defaultHover:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-default-hover)}[data-mantine-color-scheme=dark] .hover\\:dark\\:c_mantine\\.colors\\.white:is(:hover,[data-hover]){color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .light\\:hover\\:bg-c_mantine\\.colors\\.primary\\[5\\]:is(:hover,[data-hover]){background-color:var(--colors-mantine-colors-primary\\[5\\])}[data-mantine-color-scheme=light] .group:is(:hover,[data-hover]) .groupHover\\:light\\:c_mantine\\.colors\\.white{color:var(--colors-mantine-colors-white)}[data-mantine-color-scheme=light] .group:is(:hover,[data-hover]) .groupHover\\:light\\:c_mantine\\.colors\\.primary\\[0\\]{color:var(--colors-mantine-colors-primary\\[0\\])}[data-mantine-color-scheme=dark] .dark\\:hover\\:bg-c_mantine\\.colors\\.dark\\[3\\]\\/40:is(:hover,[data-hover]){--mix-backgroundColor: color-mix(in srgb, var(--colors-mantine-colors-dark\\[3\\]) 40%, transparent);background-color:var(--mix-backgroundColor, var(--colors-mantine-colors-dark\\[3\\]))}@container (min-width: 24rem){.\\@\\/xs\\:d_flex{display:flex}}@media screen and (min-width:36rem){.xs\\:max-w_calc\\(100cqw\\){max-width:100cqw}.xs\\:max-w_calc\\(100cqw_-_50px\\){max-width:calc(100cqw - 50px)}.xs\\:max-w_calc\\(100cqw_-_250px\\){max-width:calc(100cqw - 250px)}.xs\\:max-h_calc\\(100cqh_-_200px\\){max-height:calc(100cqh - 200px)}.xs\\:max-h_calc\\(100cqh_-_160px\\){max-height:calc(100cqh - 160px)}.xs\\:h_100cqh{height:100cqh}.xs\\:max-h_calc\\(100cqh_-_70px\\){max-height:calc(100cqh - 70px)}}@container (min-width: 40rem){.\\@\\/sm\\:m_xs{margin:var(--spacing-xs)}.\\@\\/sm\\:gap_xs{gap:var(--spacing-xs)}.\\@\\/sm\\:w_max-content{width:max-content}.\\@\\/sm\\:max-w_calc\\(100vw_-_2_\\*_\\{spacing\\.md\\}\\){max-width:calc(100vw - 2 * var(--spacing-md))}.\\@\\/sm\\:min-w_400{min-width:400px}.\\@\\/sm\\:max-w_550{max-width:550px}}@container (min-width: 40rem){@media screen and (min-width:36rem){.\\@\\/sm\\:xs\\:max-w_calc\\(100cqw_-_2_\\*_\\{spacing\\.md\\}\\){max-width:calc(100cqw - 2 * var(--spacing-md))}}}@container (min-width: 48rem){.\\@\\/md\\:d_block{display:block}.\\@\\/md\\:d_flex{display:flex}.\\@\\/md\\:d_none{display:none}.\\@\\/md\\:d_inherit{display:inherit}.\\@\\/md\\:ms_2{margin-inline-start:var(--spacing-2)}.\\@\\/md\\:w_\\[64px\\]{width:64px}}@media screen and (min-width:48rem){.sm\\:pr_\\[30px\\]{padding-right:30px}.sm\\:min-w_300{min-width:300px}.sm\\:max-w_65vw{max-width:65vw}}@media screen and (min-width:62rem){.md\\:--text-fz_\\{fontSizes\\.md\\}{--text-fz: var(--font-sizes-md)}.md\\:bd-w_4{border-width:4px}.md\\:px_6{padding-inline:var(--spacing-6)}.md\\:pr_\\[50px\\]{padding-right:50px}.md\\:max-w_40vw{max-width:40vw}}@container (min-width: 64rem){.\\@\\/lg\\:max-w_700{max-width:700px}}@media screen and (min-width:75rem){.lg\\:px_8{padding-inline:var(--spacing-8)}}@container likec4-tree (max-width: 450px){.\\[\\@container_likec4-tree_\\(max-width\\:_450px\\)\\]\\:--likec4-icon-size_18px{--likec4-icon-size: 18px}.\\[\\@container_likec4-tree_\\(max-width\\:_450px\\)\\]\\:gap_0\\.5{gap:var(--spacing-0\\.5)}.\\[\\@container_likec4-tree_\\(max-width\\:_450px\\)\\]\\:flex-d_column-reverse{flex-direction:column-reverse}.\\[\\@container_likec4-tree_\\(max-width\\:_450px\\)\\]\\:ai_flex-start{align-items:flex-start}.\\[\\@container_likec4-tree_\\(max-width\\:_450px\\)\\]\\:d_none{display:none}}@media print{.print\\:d_none{display:none}}}`,Bre={autoContrast:!0,primaryColor:"indigo",cursorType:"pointer",defaultRadius:"sm",fontFamily:"var(--likec4-app-font, var(--likec4-app-font-default))",headings:{fontWeight:"500",sizes:{h1:{fontWeight:"600"},h2:{fontWeight:"500"}}},components:{Portal:py.extend({defaultProps:{reuseTargetNode:!0}}),Tooltip:_n.extend({defaultProps:{color:"dark"}})}};fe({cursor:"pointer","--mantine-cursor-pointer":"pointer","& :where(.likec4-diagram, .likec4-compound-node, .likec4-element-node)":{cursor:"pointer"}});function UQe(e,r){const[n,o]=S.useState([]);return f7(()=>{if(e&&!document.querySelector("style[data-likec4-font]")){const i=document.createElement("style");i.setAttribute("type","text/css"),i.setAttribute("data-likec4-font",""),pw(r)&&i.setAttribute("nonce",r),ey(r)&&i.setAttribute("nonce",r()),i.appendChild(document.createTextNode(HQe)),document.head.appendChild(i)}},[e]),f7(()=>{const i=new CSSStyleSheet;return i.replaceSync(Nre.replaceAll(":where(:root,:host)",".likec4-shadow-root").replaceAll(":root",".likec4-shadow-root").replaceAll(new RegExp("(?{i.replaceSync("")}},[Nre]),n}const Ire=()=>{try{const e=window.getComputedStyle(document.documentElement).colorScheme??"",r=hf(e.split(" "));if(r==="light"||r==="dark")return r}catch{}return null};function WQe(e){const r=gH(),[n,o]=S.useState(Ire);return $H(bf(()=>o(Ire),100),{attributes:!0,childList:!1,subtree:!1},()=>document.documentElement),e??n??r}function Ore({children:e}){const r=S.useContext(Aw);return S.useEffect(()=>{r||console.warn("LikeC4Diagram must be a child of MantineProvider")},[]),r?y.jsx(y.Fragment,{children:e}):y.jsx(z9,{defaultColorScheme:"auto",theme:Bre,children:e})}Ore.displayName="EnsureMantine";const wz=({reducedMotion:e="user",children:r})=>{const n=np()?.();return y.jsx(sLe,{features:rVe,strict:!0,children:y.jsx(uLe,{reducedMotion:e,...n&&{nonce:n},children:r})})};function Lre({onCanvasClick:e,onCanvasContextMenu:r,onCanvasDblClick:n,onEdgeClick:o,onEdgeContextMenu:i,onNavigateTo:a,onNodeClick:l,onNodeContextMenu:s,onOpenSource:c,onBurgerMenuClick:d,onLayoutTypeChange:u,onInitialized:p,view:f,className:m,controls:v=!0,fitView:w=!0,fitViewPadding:x=v?y2.withControls:y2.default,pannable:k=!0,zoomable:C=!0,background:_="dots",enableElementTags:$=!1,enableFocusMode:R=!1,enableElementDetails:T=!1,enableRelationshipDetails:A=!1,enableRelationshipBrowser:z=!1,enableCompareWithLatest:j=!!u,nodesSelectable:I,enableNotations:N=!1,showNavigationButtons:L=!!a,enableDynamicViewWalkthrough:H=!1,dynamicViewVariant:P,enableSearch:V=!1,initialWidth:B,initialHeight:F,reduceGraphics:q="auto",renderIcon:G,where:U,reactFlowProps:Y,renderNodes:K,children:O}){const W=DG(),Z=S.useRef(null),Q=!!rre(),ie=!Q;I??=Q||R||!!a||!!l;const te=kee(f,P),re=GQe(x);Z.current==null&&(Z.current={defaultEdges:[],defaultNodes:[],initialWidth:B??te.width,initialHeight:F??te.height,initialFitViewOptions:{maxZoom:l$,minZoom:xa,padding:re},initialMaxZoom:l$,initialMinZoom:xa});const ue=q==="auto"?k&&(te.width??1)*(te.height??1)>6e6&&f.nodes.some(_e=>_e.children?.length>0):q;return y.jsx(Ore,{children:y.jsx(wz,{...ue&&{reducedMotion:"always"},children:y.jsx(Uke,{value:G??null,children:y.jsx(gp,{features:{enableFitView:w,enableEditor:Q,enableReadOnly:ie,enableFocusMode:R,enableNavigateTo:!!a,enableElementDetails:T,enableRelationshipDetails:A,enableRelationshipBrowser:z,enableSearch:V,enableNavigationButtons:L&&!!a,enableDynamicViewWalkthrough:f._type==="dynamic"&&H,enableNotations:N,enableVscode:!!c,enableControls:v,enableElementTags:$,enableCompareWithLatest:j&&!!u},children:y.jsxs(eGe,{handlers:{onCanvasClick:e,onCanvasContextMenu:r,onCanvasDblClick:n,onEdgeClick:o,onEdgeContextMenu:i,onNavigateTo:a,onNodeClick:l,onNodeContextMenu:s,onOpenSource:c,onBurgerMenuClick:d,onInitialized:p,onLayoutTypeChange:u},children:[y.jsx(qQe,{id:W}),y.jsx(wMe,{rootSelector:`#${W}`,children:y.jsx(gMe,{id:W,className:m,reduceGraphics:ue,children:y.jsx(lw,{fitView:w,...Z.current,children:y.jsxs($Qe,{view:f,zoomable:C,pannable:k,fitViewPadding:re,nodesDraggable:Q,nodesSelectable:I,where:U??null,dynamicViewVariant:P,children:[y.jsx(_Ze,{background:_,reactFlowProps:Y,renderNodes:K,children:O}),y.jsx(yte,{})]})})})})]})})})})})}const Fre=e=>typeof e=="number"?`${e}px`:e;function GQe(e){return SL(()=>{if(a9(e))return D$e(e,Fre);const r=Fre(e);return{x:r,y:r}},[e],tt)}function YQe({children:e,likec4model:r}){return y.jsx(Sy.Provider,{value:r,children:e})}const kz=({children:e})=>y.jsx("div",{style:{margin:"1rem 0"},children:y.jsx("div",{style:{margin:"0 auto",display:"inline-block",padding:"2rem",background:"rgba(250,82,82,.15)",color:"#ffa8a8"},children:e})}),XQe=({viewId:e})=>y.jsxs(kz,{children:["View ",y.jsx("code",{children:e})," not found"]}),KQe=e=>{throw new Error("LikeC4View is not available SSR")};var Vre={exports:{}},_z,qre;function ZQe(){if(qre)return _z;qre=1;var e="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return _z=e,_z}var Sz,Hre;function QQe(){if(Hre)return Sz;Hre=1;var e=ZQe();function r(){}function n(){}return n.resetWarningCache=r,Sz=function(){function o(l,s,c,d,u,p){if(p!==e){var f=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw f.name="Invariant Violation",f}}o.isRequired=o;function i(){return o}var a={array:o,bigint:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,any:o,arrayOf:i,element:o,elementType:o,instanceOf:i,node:o,objectOf:i,oneOf:i,oneOfType:i,shape:i,exact:i,checkPropTypes:n,resetWarningCache:r};return a.PropTypes=a,a},Sz}var Ure;function JQe(){return Ure||(Ure=1,Vre.exports=QQe()()),Vre.exports}var eJe=JQe();const gl=Y7(eJe);var tJe=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Wre(e,r){return e(r={exports:{}},r.exports),r.exports}var rJe=Wre((function(e){(function(r){var n=function(x,k,C){if(!c(k)||u(k)||p(k)||f(k)||s(k))return k;var _,$=0,R=0;if(d(k))for(_=[],R=k.length;$e.length)&&(r=e.length);for(var n=0,o=new Array(r);n=0||(i[n]=e[n]);return i},Xre=function(e,r){if(e==null)return{};var n,o,i=sJe(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},cJe=S.createContext(null);function Kre(e){var r=e.children,n=r===void 0?"":r,o=Xre(e,["children"]);return typeof n!="string"&&(n=KQe()),Zr.createElement("template",Yre({},o,{dangerouslySetInnerHTML:{__html:n}}))}function Zre(e){var r=e.root,n=e.children;return Va.createPortal(n===void 0?null:n,r)}function dJe(e){var r=S.forwardRef((function(n,o){var i,a,l=n.mode,s=l===void 0?"open":l,c=n.delegatesFocus,d=c!==void 0&&c,u=n.styleSheets,p=u===void 0?[]:u,f=n.ssr,m=f!==void 0&&f,v=n.children,w=Xre(n,["mode","delegatesFocus","styleSheets","ssr","children"]),x=(a=S.useRef((i=o)&&i.current),S.useEffect((function(){i&&(i.current=a.current)}),[i]),a),k=S.useState(null),C=lJe(k,2),_=C[0],$=C[1],R="node_".concat(s).concat(d);return S.useLayoutEffect((function(){if(x.current)try{if(typeof o=="function"&&o(x.current),m){var T=x.current.shadowRoot;return void $(T)}var A=x.current.attachShadow({mode:s,delegatesFocus:d});p.length>0&&(A.adoptedStyleSheets=p),$(A)}catch(z){(function(j){var I=j.error,N=j.styleSheets,L=j.root;switch(I.name){case"NotSupportedError":N.length>0&&(L.adoptedStyleSheets=N);break;default:throw I}})({error:z,styleSheets:p,root:_})}}),[o,x,p]),Zr.createElement(Zr.Fragment,null,Zr.createElement(e.tag,Yre({key:R,ref:x},w),(_||m)&&Zr.createElement(cJe.Provider,{value:_},m?Zr.createElement(Kre,{shadowroot:s,shadowrootmode:s},e.render({root:_,ssr:m,children:v})):Zr.createElement(Zre,{root:_},e.render({root:_,ssr:m,children:v})))))}));return r.propTypes={mode:gl.oneOf(["open","closed"]),delegatesFocus:gl.bool,styleSheets:gl.arrayOf(gl.instanceOf(globalThis.CSSStyleSheet)),ssr:gl.bool,children:gl.node},r}Kre.propTypes={children:gl.oneOfType([gl.string,gl.node])},Zre.propTypes={root:gl.object.isRequired,children:gl.node};var Ez=new Map;function uJe(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"core",n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(o){return o.children};return new Proxy(e,{get:function(o,i){var a=rJe(i,{separator:"-"}),l="".concat(r,"-").concat(a);return Ez.has(l)||Ez.set(l,dJe({tag:a,render:n})),Ez.get(l)}})}var pJe=uJe();const hJe=pJe.div;function fJe(e,r=!1){if(r===!1)return` -:where([data-likec4-instance="${e}"]) { - display: block; - box-sizing: border-box; - border: 0 solid transparent; - background: transparent; - padding: 0; - margin: 0; - overflow: hidden; - width: 100%; - height: 100%; - min-width: 80px; - min-height: 80px; -} - `.trim();const{width:n,height:o}=r,i=n>o;return` -:where([data-likec4-instance="${e}"]) { - display: block; - box-sizing: border-box; - border: 0 solid transparent; - background: transparent; - padding: 0; - overflow: hidden; - aspect-ratio: ${Math.ceil(n)} / ${Math.ceil(o)}; - ${i?"":` - max-width: min(100%, var(--likec4-view-max-width, ${Math.ceil(n)}px)); - margin-left: auto; - margin-right: auto;`} - width: ${i?"100%":"auto"}; - height: ${i?"auto":"100%"}; - ${i?"min-width: 80px;":"min-height: 80px;"} - max-height: min(100%, var(--likec4-view-max-height, ${Math.ceil(o)}px)); -} -`.trim()}const Qre=S.forwardRef(({children:e,theme:r=Bre,injectFontCss:n=!0,styleNonce:o,colorScheme:i,keepAspectRatio:a=!1,...l},s)=>{const c=WQe(i),d=DG(),u=fJe(d,a),p=S.useRef(null),f=UQe(n,o),m=S.useCallback(()=>p.current??void 0,[p]),v=at(()=>{if(ra(o)){if(typeof o=="string")return o;if(typeof o=="function")return o()}return""});let w=ra(o)?v():void 0;return y.jsxs(y.Fragment,{children:[y.jsx("style",{type:"text/css",nonce:w,dangerouslySetInnerHTML:{__html:u}}),y.jsx(hJe,{ssr:!1,...l,styleSheets:f,"data-likec4-instance":d,children:y.jsx("div",{ref:$r(p,s),"data-mantine-color-scheme":c,className:"likec4-shadow-root",children:y.jsx(z9,{...i&&{forceColorScheme:i},defaultColorScheme:c,getRootElement:m,...!!w&&{getStyleNonce:v},cssVariablesSelector:".likec4-shadow-root",theme:r,children:y.jsx(wz,{children:e})})})})]})});Qre.displayName="ShadowRoot";const gJe=fe({cursor:"pointer","--mantine-cursor-pointer":"pointer","& :where(.likec4-diagram, .likec4-compound-node, .likec4-element-node)":{cursor:"pointer"}});function mJe({viewId:e,className:r,pannable:n=!1,zoomable:o=!1,keepAspectRatio:i=!0,colorScheme:a,injectFontCss:l=!0,controls:s=!1,background:c="transparent",browser:d=!0,showNavigationButtons:u=!1,enableNotations:p,enableFocusMode:f=!1,enableDynamicViewWalkthrough:m=!1,enableElementDetails:v=!1,enableRelationshipDetails:w=!1,enableRelationshipBrowser:x=w,reduceGraphics:k="auto",mantineTheme:C,styleNonce:_,style:$,reactFlowProps:R,renderNodes:T,children:A,...z}){const j=S.useRef(null),I=mMe(),[N,L]=S.useState("manual"),[H,P]=S.useState(null),V=at(Q=>{Q&&Q!==H&&L("manual"),P(Q)}),B=at(()=>{V(e)});if(!I)return y.jsx(kz,{children:"LikeC4Model not found. Make sure you provided LikeC4ModelProvider."});const F=I.findView(e)?.$layouted;if(!F)return y.jsx(XQe,{viewId:e});if(F._stage!=="layouted")return y.jsxs(kz,{children:['LikeC4 View "$',e,'" is not layouted. Make sure you have LikeC4ModelProvider with layouted model.']});const q=H?I.findView(H):null,G=N==="manual"?q?.$layouted:q?.$view,U=!!p&&(F.notation?.nodes?.length??0)>0,Y=(G?.notation?.nodes?.length??0)>0,K=d!==!1,O=Nq(d)?{}:d,W=kee(F,z.dynamicViewVariant),Z=j.current?{root:j.current}:void 0;return y.jsx(Qre,{ref:j,injectFontCss:l,theme:C,colorScheme:a,styleNonce:_,keepAspectRatio:i?W:!1,className:Ge("likec4-view",r),style:$,children:y.jsxs(wz,{children:[y.jsx(Lre,{view:F,pannable:n,zoomable:o,background:c,fitView:!0,fitViewPadding:y2.default,enableNotations:U,enableDynamicViewWalkthrough:m,showNavigationButtons:u,enableCompareWithLatest:!1,enableFocusMode:f,enableRelationshipDetails:w,enableElementDetails:v,enableRelationshipBrowser:x,enableElementTags:!1,controls:s,reduceGraphics:k,className:Ge("likec4-static-view",K&&gJe),enableSearch:!1,...K&&{onCanvasClick:B,onNodeClick:B},reactFlowProps:R,renderNodes:T,children:A,...z}),y.jsx(Cn,{...Z,children:G&&y.jsxs(p0,{openDelay:0,onClose:()=>V(null),children:[y.jsx(Lre,{view:G,pannable:!0,zoomable:!0,background:"dots",onNavigateTo:V,showNavigationButtons:!0,enableDynamicViewWalkthrough:!0,enableFocusMode:!0,enableRelationshipBrowser:!0,enableElementDetails:!0,enableRelationshipDetails:!0,enableSearch:!0,enableElementTags:!0,enableCompareWithLatest:!0,controls:!0,fitView:!0,...z,fitViewPadding:y2.withControls,...O,enableNotations:Y&&(O.enableNotations??!0),renderNodes:T,onLayoutTypeChange:L}),y.jsx(hr,{pos:"absolute",top:"4",right:"4",zIndex:"999",children:y.jsx(lr,{variant:"default",color:"gray",onClick:Q=>{Q.stopPropagation(),V(null)},children:y.jsx(fp,{})})})]})})]})})}var yJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 512 131",...e,children:y.jsx("path",{fill:"#2396ED",d:"m140.598 25.715 3.892 2.818c6.77 5.46 10.662 11.625 11.508 18.67 7.277-1.409 16.584-.352 20.646 2.466l3.723 2.29-.677 1.41c-1.185 2.641-1.523 3.346-1.692 3.698-6.6 13.21-19.631 13.386-25.723 13.21-15.4 38.573-48.23 59.885-92.57 59.885-20.476 0-36.045-6.517-46.538-19.375C-.709 93.88-.709 71.862.475 64.817l.339-1.41h122.353c6.43 0 11.339-1.76 13.708-3.17-2.539-3.875-3.385-8.278-3.554-10.744-.508-7.045 1.185-14.443 4.57-19.727zm106.014 8.179q2.048 0 3.468 1.373t1.42 3.467v43.563q0 10.89-7.634 18.43-7.726 7.633-18.43 7.633-10.798 0-18.43-7.633-7.633-7.633-7.633-18.43t7.633-18.43q7.632-7.634 18.43-7.633 9.262 0 16.336 5.724V38.734q0-2.094 1.373-3.467t3.467-1.373m36.49 22.34q10.705 0 18.43 7.632 3.818 3.818 5.702 8.424 1.885 4.608 1.932 10.007 0 10.89-7.633 18.43-7.725 7.633-18.43 7.633-10.798 0-18.43-7.633-7.634-7.633-7.634-18.43t7.633-18.43q7.633-7.634 18.43-7.633m57.574 0q9.82 0 16.988 6.33 1.675 1.488 1.675 3.676 0 2.095-1.373 3.49-1.373 1.397-3.467 1.397a4.93 4.93 0 0 1-3.165-1.117q-2.373-2.002-4.98-3.025t-5.678-1.024q-3.397 0-6.376 1.28a16.7 16.7 0 0 0-5.213 3.49 16.2 16.2 0 0 0-3.514 5.19q-1.28 2.977-1.28 6.376 0 3.397 1.28 6.376a16.2 16.2 0 0 0 3.514 5.19 16.7 16.7 0 0 0 5.213 3.49q2.979 1.28 6.376 1.28 3.072 0 5.678-1 2.607-1.002 4.933-3.003 1.304-.977 3.072-1.024 2.094 0 3.467 1.373t1.373 3.468q0 2.048-1.535 3.583-7.214 6.33-16.988 6.33-10.798 0-18.43-7.633-7.633-7.633-7.633-18.43t7.633-18.43q7.632-7.634 18.43-7.633m29.044-22.34q2.001 0 3.42 1.42 1.42 1.418 1.42 3.467v36.302l27.832-18.105q1.163-.744 2.606-.744 1.024 0 1.908.372.885.372 1.536 1.047t1.047 1.56.396 1.86q0 2.607-1.862 3.864l-19.5 12.66 20.012 22.525q1.35 1.489 1.35 3.398 0 .977-.396 1.861a5.4 5.4 0 0 1-1.047 1.56q-.651.675-1.536 1.046a4.9 4.9 0 0 1-1.908.373q-1.955 0-3.258-1.257l-21.502-24.155-5.678 3.724v16.801q0 2.001-1.42 3.444t-3.42 1.443q-2.048 0-3.468-1.443t-1.42-3.444V38.781q0-2.048 1.42-3.468t3.468-1.42m71.489 22.34q10.704 0 18.43 7.632 3.816 3.77 5.725 8.401 1.908 4.63 1.908 10.03 0 2.094-1.42 3.467t-3.467 1.373h-36.86a15.9 15.9 0 0 0 2.327 4.677 16.3 16.3 0 0 0 3.606 3.63 16.7 16.7 0 0 0 4.562 2.351q2.49.838 5.189.838 3.072 0 5.631-.931 2.56-.93 4.748-2.793a5.1 5.1 0 0 1 3.21-1.21q2.095 0 3.468 1.373t1.373 3.468q0 2.047-1.396 3.49-7.214 6.33-17.034 6.33-10.798 0-18.43-7.633-7.633-7.633-7.633-18.43t7.633-18.43q7.632-7.634 18.43-7.633m57.48 0q2.048 0 4.398.279 2.35.28 4.329 1 1.978.721 3.28 1.978 1.305 1.257 1.304 3.258 0 1.025-.396 1.909a5.4 5.4 0 0 1-1.047 1.559q-.651.675-1.536 1.047a4.9 4.9 0 0 1-1.908.372q-.885 0-2.048-.512-2.932-1.163-6.376-1.163-3.397 0-6.376 1.28-2.978 1.28-5.19 3.49-2.21 2.211-3.49 5.19-1.28 2.977-1.28 6.376v21.223q0 2.001-1.42 3.42t-3.42 1.42q-2.048 0-3.467-1.42t-1.42-3.42V61.074q0-2.002 1.42-3.42 1.42-1.42 3.467-1.42 2.001 0 3.42 1.42 1.42 1.418 1.42 3.42v.93a26.7 26.7 0 0 1 7.586-4.281q4.095-1.49 8.75-1.49M225.436 65.96q-3.444 0-6.423 1.303t-5.166 3.514-3.467 5.19-1.28 6.329 1.28 6.33 3.467 5.189 5.166 3.514q2.979 1.302 6.423 1.303 3.397 0 6.376-1.303a16.6 16.6 0 0 0 5.19-3.538 16.8 16.8 0 0 0 3.49-5.189q1.28-2.955 1.28-6.306t-1.28-6.307a16.8 16.8 0 0 0-3.49-5.189 16.6 16.6 0 0 0-5.19-3.537q-2.978-1.303-6.376-1.303m57.667 0q-3.444 0-6.423 1.303t-5.166 3.514-3.468 5.19-1.28 6.329 1.28 6.33q1.281 2.978 3.468 5.189t5.166 3.514 6.423 1.303q3.397 0 6.376-1.303a16.6 16.6 0 0 0 5.19-3.538 16.8 16.8 0 0 0 3.49-5.189q1.28-2.955 1.28-6.306t-1.28-6.307a16.8 16.8 0 0 0-3.49-5.189 16.6 16.6 0 0 0-5.19-3.537q-2.979-1.303-6.376-1.303m158.106 0q-2.653 0-5.166.837a17 17 0 0 0-4.608 2.35 16.1 16.1 0 0 0-3.63 3.631 15.1 15.1 0 0 0-2.28 4.677h31.368a15.6 15.6 0 0 0-2.35-4.677 16.8 16.8 0 0 0-3.63-3.63 16.7 16.7 0 0 0-4.561-2.35 16 16 0 0 0-5.143-.838M32.629 42.27v17.614H14.014V42.272zm22 0v17.614H36.014V42.272zm22 0v17.614H58.013V42.272zm22 0v17.614H80.013V42.272zm22 0v17.614h-18.616V42.272zm-22-21.135v17.613H80.013V21.136zm-22 0v17.613H58.013V21.136zm-22 0v17.613H36.014V21.136zM98.629 0v17.613H80.013V0z"})}),vJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 288",...e,children:[y.jsx("path",{fill:"#343741",d:"M0 143.82c0 12.44 1.744 24.441 4.71 35.956h175.067c19.856 0 35.955-16.1 35.955-35.956 0-19.865-16.1-35.955-35.955-35.955H4.71C1.744 119.371 0 131.38 0 143.82"}),y.jsx("path",{fill:"#FEC514",d:"M242.013 68.863c5.025-4.629 9.7-9.6 13.987-14.93C229.636 21.079 189.213 0 143.82 0 87 0 38.101 33.052 14.775 80.9h196.559c11.38 0 22.319-4.324 30.678-12.037"}),y.jsx("path",{fill:"#00BFB3",d:"M211.334 206.742H14.774c23.336 47.839 72.226 80.9 129.045 80.9 45.393 0 85.816-21.088 112.18-53.933a136.6 136.6 0 0 0-13.987-14.94c-8.36-7.721-19.299-12.027-30.678-12.027"})]}),bJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 278",...e,children:y.jsx("path",{fill:"#47848F",d:"M90.317 59.645c-36.264-6.605-64.936.308-76.364 20.101-8.527 14.77-6.09 34.353 5.912 55.285a3.719 3.719 0 1 0 6.452-3.699c-10.811-18.856-12.915-35.757-5.923-47.867 9.493-16.442 35.068-22.608 68.59-16.503a3.719 3.719 0 1 0 1.333-7.317m53.63-33.684c-2.959 5.723-8.932 9.635-15.819 9.635-9.83 0-17.798-7.969-17.798-17.798C110.33 7.968 118.3 0 128.128 0c9.83 0 17.798 7.968 17.798 17.798q0 .386-.016.767c29.461 15.237 49.933 67.197 49.933 127.226 0 24.69-3.452 48.382-9.879 68.92a3.719 3.719 0 1 1-7.097-2.221c6.196-19.802 9.539-42.747 9.539-66.699 0-56.524-18.789-105.163-44.458-119.83M16.469 193.319a18 18 0 0 1 1.33-.05c9.83 0 17.798 7.97 17.798 17.799s-7.969 17.797-17.798 17.797C7.968 228.865 0 220.897 0 211.068c0-6.692 3.693-12.52 9.151-15.56-2.68-33.265 32.283-77.855 85.12-108.36 21.946-12.671 44.798-21.665 66.267-26.265a3.719 3.719 0 0 1 1.558 7.273c-20.69 4.433-42.817 13.141-64.107 25.433-49.759 28.728-82.66 70.134-81.52 99.73m206.26 26.546a17.7 17.7 0 0 1-2.324-8.797c0-9.83 7.969-17.798 17.798-17.798 9.83 0 17.798 7.968 17.798 17.798s-7.968 17.797-17.798 17.797a17.7 17.7 0 0 1-10.38-3.338c-28.392 16.703-82.625 8.184-133.66-21.282-21.726-12.543-40.776-27.657-55.439-43.77a3.719 3.719 0 0 1 5.5-5.006c14.134 15.532 32.581 30.167 53.657 42.335 48.165 27.808 98.886 36.084 124.847 22.061m-1.166-63.914a3.719 3.719 0 0 1-5.676-4.805c21.946-25.926 29.34-51.086 19.867-67.492-6.876-11.91-22.159-18.52-43.362-18.796a3.719 3.719 0 1 1 .097-7.437c23.575.307 41.315 7.98 49.706 22.514 11.404 19.752 3.113 47.965-20.632 76.016M72.564 221.49a3.719 3.719 0 0 1 7.001-2.507c11.476 32.045 29.591 51.082 48.563 51.082 13.645 0 26.91-9.774 37.71-27.74a3.719 3.719 0 0 1 6.375 3.832c-12.018 19.99-27.428 31.345-44.085 31.345-22.839 0-43.15-21.344-55.564-56.011m175.999-10.423c0-5.722-4.639-10.361-10.36-10.361-5.723 0-10.362 4.639-10.362 10.36 0 5.723 4.64 10.361 10.361 10.361s10.36-4.638 10.36-10.36m-230.765 10.36c5.722 0 10.36-4.638 10.36-10.36s-4.638-10.361-10.36-10.361-10.36 4.639-10.36 10.36c0 5.723 4.638 10.361 10.36 10.361m110.33-193.27c5.722 0 10.36-4.638 10.36-10.36s-4.638-10.36-10.36-10.36-10.36 4.638-10.36 10.36 4.638 10.36 10.36 10.36m2.718 130.22c-6.951 1.502-13.8-2.916-15.305-9.868-1.499-6.952 2.916-13.8 9.868-15.305 6.951-1.502 13.8 2.915 15.305 9.867 1.502 6.952-2.916 13.8-9.868 15.305"})}),xJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 108",...e,children:[y.jsx("path",{fill:"#2F2707",d:"M152.984 37.214c-5.597 0-9.765 2.748-9.765 9.362 0 4.983 2.747 8.443 9.463 8.443 5.693 0 9.56-3.355 9.56-8.65 0-6-3.46-9.155-9.258-9.155m-11.19 46.701c-1.325 1.625-2.645 3.353-2.645 5.39 0 4.067 5.186 5.291 12.31 5.291 5.9 0 13.938-.414 13.938-5.9 0-3.261-3.867-3.462-8.753-3.768zm30.113-46.394c1.828 2.34 3.764 5.597 3.764 10.276 0 11.292-8.851 17.904-21.667 17.904-3.259 0-6.209-.406-8.038-.914l-3.359 5.39 9.969.61c17.602 1.122 27.975 1.632 27.975 15.157 0 11.702-10.272 18.311-27.975 18.311-18.413 0-25.433-4.68-25.433-12.716 0-4.578 2.035-7.015 5.596-10.378-3.358-1.419-4.476-3.961-4.476-6.71 0-2.24 1.118-4.273 2.952-6.208 1.83-1.93 3.864-3.865 6.306-6.103-4.984-2.442-8.75-7.732-8.75-15.262 0-11.697 7.733-19.731 23.295-19.731 4.376 0 7.022.402 9.362 1.017h19.84v8.644zM199.166 19.034c-5.8 0-9.157-3.36-9.157-9.161 0-5.793 3.356-8.95 9.157-8.95 5.9 0 9.258 3.157 9.258 8.95 0 5.801-3.357 9.161-9.258 9.161M186.04 80.171v-8.033l5.19-.71c1.425-.205 1.627-.509 1.627-2.038V39.48c0-1.116-.304-1.832-1.325-2.134l-5.492-1.935 1.118-8.238h21.061V69.39c0 1.63.098 1.833 1.629 2.039l5.188.71v8.032zM255.267 76.227c-4.376 2.135-10.785 4.068-16.586 4.068-12.106 0-16.682-4.878-16.682-16.38V37.264c0-.61 0-1.017-.817-1.017h-7.12V27.19c8.955-1.02 12.513-5.496 13.632-16.585h9.666v14.45c0 .71 0 1.017.815 1.017h14.343v10.173H237.36v24.313c0 6.002 1.426 8.34 6.917 8.34 2.852 0 5.799-.71 8.24-1.626z"}),y.jsx("path",{fill:"#DE4C36",d:"M104.529 49.53 58.013 3.017a6.86 6.86 0 0 0-9.703 0l-9.659 9.66 12.253 12.252a8.15 8.15 0 0 1 8.383 1.953 8.16 8.16 0 0 1 1.936 8.434L73.03 47.125c2.857-.984 6.154-.347 8.435 1.938a8.16 8.16 0 0 1 0 11.545 8.164 8.164 0 0 1-13.324-8.88L57.129 40.716l-.001 28.98a8.3 8.3 0 0 1 2.159 1.544 8.164 8.164 0 0 1 0 11.547c-3.19 3.19-8.36 3.19-11.545 0a8.164 8.164 0 0 1 2.672-13.328v-29.25a8.1 8.1 0 0 1-2.672-1.782c-2.416-2.413-2.997-5.958-1.759-8.925l-12.078-12.08L2.011 49.314a6.863 6.863 0 0 0 0 9.706l46.516 46.514a6.86 6.86 0 0 0 9.703 0l46.299-46.297a6.866 6.866 0 0 0 0-9.707"})]}),wJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 512 139",...e,children:y.jsx("path",{fill:"#11110F",d:"M98.696 59.312h-43.06c-1.111 0-2.013.903-2.013 2.014v21.053c0 1.111.902 2.015 2.012 2.015h16.799v26.157s-3.772 1.286-14.2 1.286c-12.303 0-29.49-4.496-29.49-42.288 0-37.8 17.897-42.773 34.698-42.773 14.543 0 20.809 2.56 24.795 3.794 1.253.384 2.412-.863 2.412-1.975l4.803-20.342c0-.52-.176-1.146-.769-1.571C93.064 5.527 83.187 0 58.233 0 29.488 0 0 12.23 0 71.023c0 58.795 33.76 67.556 62.21 67.556 23.555 0 37.844-10.066 37.844-10.066.59-.325.653-1.148.653-1.526V61.326c0-1.11-.9-2.014-2.01-2.014m221.8-51.953c0-1.12-.888-2.024-1.999-2.024h-24.246a2.016 2.016 0 0 0-2.008 2.024l.006 46.856h-37.792V7.36c0-1.12-.892-2.024-2.001-2.024H228.21a2.014 2.014 0 0 0-2.003 2.024v126.872c0 1.12.9 2.03 2.003 2.03h24.245c1.109 0 2-.91 2-2.03V79.964h37.793l-.066 54.267c0 1.12.9 2.03 2.008 2.03h24.304c1.11 0 1.998-.91 2-2.03zM144.37 24.322c0-8.73-7-15.786-15.635-15.786-8.627 0-15.632 7.055-15.632 15.786 0 8.72 7.005 15.795 15.632 15.795 8.635 0 15.635-7.075 15.635-15.795m-1.924 83.212V48.97c0-1.112-.897-2.021-2.006-2.021h-24.169c-1.109 0-2.1 1.144-2.1 2.256v83.905c0 2.466 1.536 3.199 3.525 3.199h21.775c2.39 0 2.975-1.173 2.975-3.239zM413.162 46.95h-24.06c-1.104 0-2.002.909-2.002 2.028v62.21s-6.112 4.472-14.788 4.472-10.977-3.937-10.977-12.431v-54.25c0-1.12-.897-2.03-2.001-2.03h-24.419c-1.102 0-2.005.91-2.005 2.03v58.358c0 25.23 14.063 31.403 33.408 31.403 15.87 0 28.665-8.767 28.665-8.767s.61 4.62.885 5.168c.276.547.994 1.098 1.77 1.098l15.535-.068c1.102 0 2.005-.911 2.005-2.025l-.008-85.168c0-1.119-.9-2.028-2.008-2.028m55.435 68.758c-8.345-.254-14.006-4.041-14.006-4.041V71.488s5.585-3.423 12.436-4.035c8.664-.776 17.013 1.841 17.013 22.51 0 21.795-3.768 26.096-15.443 25.744m9.49-71.483c-13.665 0-22.96 6.097-22.96 6.097V7.359a2.01 2.01 0 0 0-2-2.024h-24.315a2.013 2.013 0 0 0-2.004 2.024v126.872c0 1.12.898 2.03 2.007 2.03h16.87c.76 0 1.335-.39 1.76-1.077.419-.682 1.024-5.85 1.024-5.85s9.942 9.422 28.763 9.422c22.096 0 34.768-11.208 34.768-50.315s-20.238-44.217-33.913-44.217M212.229 46.73h-18.187l-.028-24.027c0-.909-.468-1.364-1.52-1.364H167.71c-.964 0-1.481.424-1.481 1.35v24.83s-12.42 2.998-13.26 3.24a2.01 2.01 0 0 0-1.452 1.934v15.603c0 1.122.896 2.027 2.005 2.027h12.707v37.536c0 27.88 19.556 30.619 32.753 30.619 6.03 0 13.243-1.937 14.434-2.376.72-.265 1.138-1.01 1.138-1.82l.02-17.164c0-1.119-.945-2.025-2.01-2.025-1.06 0-3.77.431-6.562.431-8.933 0-11.96-4.154-11.96-9.53l-.001-35.67h18.188a2.014 2.014 0 0 0 2.006-2.028V48.753c0-1.12-.897-2.022-2.006-2.022"})}),kJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 512 192",...e,children:y.jsx("path",{fill:"#00ACD7",d:"m292.533 13.295 1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224H223.36c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a105 105 0 0 1-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464M411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332M116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247z"})}),_Je=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 279",...e,children:[y.jsx("defs",{children:y.jsxs("linearGradient",{id:"Grafana_svg__a",x1:"49.995%",x2:"49.995%",y1:"122.45%",y2:"31.139%",children:[y.jsx("stop",{offset:"0%",stopColor:"#FFF100"}),y.jsx("stop",{offset:"100%",stopColor:"#F05A28"})]})}),y.jsx("path",{fill:"url(#Grafana_svg__a)",d:"M255.59 122.775c-.46-4.675-1.226-10.04-2.759-16.017a98 98 0 0 0-7.204-19.16 106.7 106.7 0 0 0-13.412-20.54c-2.222-2.681-4.675-5.287-7.28-7.816 3.908-15.558-4.752-29.046-4.752-29.046-14.945-.92-24.448 4.675-27.973 7.204-.613-.23-1.15-.537-1.763-.767-2.529-.996-5.135-1.992-7.894-2.835a130 130 0 0 0-8.277-2.3c-2.835-.69-5.67-1.226-8.583-1.686-.537-.076-.996-.153-1.533-.23C157.646 8.738 138.946 0 138.946 0c-20.922 13.258-24.831 31.805-24.831 31.805s-.077.383-.23 1.073c-1.15.307-2.299.69-3.449.996-1.609.46-3.218 1.073-4.751 1.686a123 123 0 0 0-4.752 1.916 117 117 0 0 0-9.35 4.599c-2.989 1.686-5.9 3.525-8.737 5.441l-.766-.307c-28.97-11.036-54.643 2.223-54.643 2.223-2.376 30.809 11.572 50.198 14.331 53.724-.69 1.916-1.303 3.832-1.916 5.748-2.146 6.974-3.755 14.101-4.751 21.535-.154 1.073-.307 2.146-.384 3.219C7.894 146.916 0 173.97 0 173.97c22.302 25.674 48.359 27.283 48.359 27.283l.077-.076c3.295 5.9 7.127 11.495 11.419 16.783a112 112 0 0 0 5.671 6.362c-8.124 23.298 1.15 42.61 1.15 42.61 24.83.92 41.155-10.882 44.603-13.564a85 85 0 0 0 7.511 2.222 109.7 109.7 0 0 0 23.298 3.449c1.916.076 3.909.153 5.825.076h2.759l1.226-.076v.076c11.726 16.708 32.265 19.084 32.265 19.084 14.638-15.405 15.48-30.733 15.48-34.028v-1.38c3.066-2.145 5.979-4.445 8.738-6.974 5.824-5.288 10.959-11.342 15.25-17.857l1.15-1.839c16.554.92 28.28-10.27 28.28-10.27-2.759-17.243-12.569-25.673-14.638-27.283 0 0-.077-.076-.23-.153s-.153-.153-.153-.153c-.077-.077-.23-.154-.383-.23.076-1.073.153-2.07.23-3.142.153-1.84.153-3.756.153-5.595v-2.913l-.077-1.149-.076-1.533c0-.536-.077-.996-.154-1.456-.076-.46-.076-.996-.153-1.456l-.153-1.456-.23-1.456c-.307-1.916-.613-3.756-1.073-5.672-1.763-7.433-4.675-14.484-8.43-20.845a70.4 70.4 0 0 0-14.025-16.707c-5.365-4.752-11.42-8.584-17.704-11.42-6.36-2.835-12.952-4.675-19.543-5.518-3.295-.46-6.59-.613-9.886-.536h-2.453l-1.226.077c-.46 0-.92.076-1.303.076a52 52 0 0 0-4.981.69c-6.591 1.226-12.799 3.602-18.24 6.897s-10.193 7.358-14.025 11.956a54.7 54.7 0 0 0-8.89 15.021 52.9 52.9 0 0 0-3.525 16.094c-.077 1.303-.077 2.683-.077 3.986v.996l.077 1.073c.076.613.076 1.303.153 1.916.23 2.682.766 5.288 1.456 7.74 1.456 4.982 3.755 9.503 6.59 13.335s6.285 6.975 9.887 9.504c3.602 2.452 7.51 4.215 11.343 5.364 3.832 1.15 7.664 1.61 11.266 1.61h1.993c.23 0 .46 0 .689-.077.383 0 .766-.077 1.15-.077.076 0 .23 0 .306-.076l.383-.077c.23 0 .46-.076.69-.076.46-.077.843-.154 1.303-.23s.843-.154 1.226-.307c.843-.153 1.61-.46 2.376-.69 1.533-.536 3.066-1.15 4.368-1.839 1.38-.69 2.606-1.533 3.832-2.3.307-.23.69-.459.997-.766 1.226-.996 1.456-2.835.46-4.061-.844-1.073-2.376-1.38-3.603-.69l-.92.46a25 25 0 0 1-3.295 1.38c-1.15.382-2.375.689-3.602.919-.613.076-1.226.153-1.916.23-.306 0-.613.076-.996.076h-1.84c-.383 0-.766 0-1.149-.076h-.46c-.153 0-.383 0-.536-.077-.383-.077-.69-.077-1.073-.153-2.836-.383-5.671-1.226-8.354-2.453a29.3 29.3 0 0 1-7.74-5.058c-2.376-2.146-4.445-4.675-6.055-7.587s-2.759-6.131-3.295-9.503c-.23-1.686-.383-3.449-.307-5.135 0-.46.077-.92.077-1.38v-.613c0-.23.077-.46.077-.69.076-.919.23-1.839.383-2.758 1.303-7.358 4.981-14.562 10.653-20.003 1.456-1.38 2.988-2.606 4.598-3.755a31.7 31.7 0 0 1 5.211-2.99 36 36 0 0 1 5.672-2.068c1.915-.537 3.908-.844 5.977-1.073.997-.077 1.993-.154 3.066-.154h2.376l.843.077c2.222.153 4.368.46 6.514.996 4.292.92 8.507 2.53 12.415 4.675 7.818 4.369 14.485 11.113 18.547 19.237 2.07 4.061 3.525 8.43 4.215 12.951.153 1.15.307 2.3.383 3.45l.077.842.077.843v3.296c0 .536-.077 1.456-.077 1.992-.077 1.227-.23 2.53-.383 3.756s-.383 2.452-.613 3.678a50 50 0 0 1-.843 3.602 64 64 0 0 1-2.3 7.128 62.4 62.4 0 0 1-7.204 13.105c-5.9 8.124-13.948 14.715-23.144 18.93-4.599 2.069-9.427 3.602-14.408 4.368-2.453.46-4.982.69-7.511.766h-3.832a36 36 0 0 1-4.062-.23c-5.365-.383-10.653-1.379-15.864-2.835-5.135-1.456-10.116-3.525-14.868-5.978-9.427-5.058-17.933-11.956-24.524-20.31a79 79 0 0 1-8.584-13.334 79 79 0 0 1-5.671-14.638c-1.38-5.058-2.223-10.193-2.606-15.405l-.077-.996v-6.821c.077-2.529.307-5.211.614-7.817.306-2.606.766-5.288 1.302-7.894.537-2.605 1.15-5.211 1.916-7.817a103 103 0 0 1 5.442-14.791c4.368-9.35 10.04-17.704 16.86-24.371 1.686-1.686 3.449-3.22 5.288-4.752a78 78 0 0 1 5.748-4.138c1.916-1.303 3.985-2.453 6.055-3.526a40 40 0 0 1 3.142-1.533l3.219-1.379c2.146-.92 4.368-1.686 6.667-2.376.537-.153 1.15-.306 1.686-.536.537-.154 1.15-.307 1.686-.46 1.15-.307 2.3-.613 3.45-.843.536-.153 1.149-.23 1.762-.383.613-.154 1.15-.23 1.763-.384.613-.076 1.15-.23 1.762-.306l.843-.153.92-.154c.613-.076 1.15-.153 1.763-.23.69-.076 1.302-.153 1.992-.23.537-.076 1.456-.153 1.993-.23.383-.076.843-.076 1.226-.153l.843-.076.383-.077h.46c.69-.077 1.303-.077 1.993-.153l.996-.077h.767c.536 0 1.149-.076 1.685-.076a99 99 0 0 1 6.745 0c4.445.153 8.813.69 13.028 1.456 8.507 1.61 16.478 4.291 23.758 7.893 7.28 3.526 13.719 7.894 19.39 12.646.383.306.69.613 1.073.92.306.306.69.613.996.92.69.612 1.303 1.225 1.993 1.838.69.614 1.303 1.227 1.916 1.84a44 44 0 0 1 1.839 1.916c2.376 2.529 4.598 5.058 6.59 7.664a99 99 0 0 1 9.734 15.25l.46.92.46.92c.306.613.613 1.226.843 1.84.306.613.536 1.149.843 1.762.23.613.536 1.15.766 1.763.92 2.299 1.84 4.521 2.53 6.59 1.149 3.373 1.992 6.362 2.682 8.967a2.043 2.043 0 0 0 2.299 1.61c1.15-.077 1.992-.996 1.992-2.146.077-2.759 0-6.054-.383-9.81"})]}),SJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 346",...e,children:[y.jsx("path",{fill:"#5382A1",d:"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532"}),y.jsx("path",{fill:"#E76F00",d:"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6"}),y.jsx("path",{fill:"#5382A1",d:"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697"}),y.jsx("path",{fill:"#E76F00",d:"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37"}),y.jsx("path",{fill:"#5382A1",d:"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201"})]}),EJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 249",...e,children:[y.jsx("path",{fill:"#326DE6",d:"M82.085 244.934c-5.946 0-11.561-2.642-15.36-7.432L8.92 165.657c-3.799-4.79-5.285-10.9-3.799-16.847l20.645-89.682c1.321-5.946 5.285-10.736 10.736-13.378l83.571-39.97c2.643-1.32 5.616-1.981 8.589-1.981s5.945.66 8.588 1.982l83.572 39.804c5.45 2.642 9.414 7.432 10.735 13.378l20.645 89.682c1.322 5.946 0 12.057-3.798 16.847l-57.807 71.845c-3.799 4.624-9.414 7.432-15.36 7.432z"}),y.jsx("path",{fill:"#FFF",d:"M128.495 7.928c2.313 0 4.625.495 6.772 1.486l83.572 39.804c4.294 2.147 7.597 6.111 8.588 10.736l20.645 89.682c1.156 4.79 0 9.745-3.138 13.543l-57.806 71.846c-2.973 3.798-7.598 5.945-12.387 5.945H82.085c-4.79 0-9.414-2.147-12.387-5.945l-57.806-71.846c-2.973-3.798-4.13-8.753-3.138-13.543l20.645-89.682c1.156-4.79 4.294-8.754 8.588-10.736L121.56 9.25c2.147-.826 4.624-1.321 6.936-1.321m0-7.763c-3.468 0-6.936.826-10.24 2.312l-83.571 39.97c-6.607 3.138-11.231 8.918-12.883 16.02L1.156 148.15c-1.651 7.102 0 14.369 4.625 20.15l57.806 71.845c4.46 5.615 11.231 8.753 18.333 8.753h92.655c7.102 0 13.874-3.138 18.333-8.753l57.807-71.846c4.624-5.615 6.276-13.047 4.624-20.15l-20.645-89.682c-1.651-7.102-6.276-12.882-12.882-16.02L138.57 2.476C135.432.991 131.964.165 128.495.165"}),y.jsx("path",{fill:"#FFF",d:"M212.232 142.534q-.248 0 0 0h-.165c-.165 0-.33 0-.33-.165-.33 0-.66-.165-.991-.165-1.156-.165-2.147-.33-3.138-.33-.496 0-.991 0-1.652-.166h-.165c-3.468-.33-6.276-.66-8.919-1.486-1.156-.496-1.486-1.156-1.817-1.817 0-.165-.165-.165-.165-.33l-2.147-.66a65.3 65.3 0 0 0-1.156-23.289 68 68 0 0 0-9.249-21.636l1.652-1.486v-.33c0-.826.165-1.652.825-2.478 1.982-1.817 4.46-3.303 7.433-5.12.495-.33.99-.495 1.486-.826.991-.495 1.817-.99 2.808-1.651.165-.165.495-.33.826-.66.165-.166.33-.166.33-.331 2.312-1.982 2.808-5.285 1.156-7.433-.826-1.156-2.312-1.816-3.799-1.816-1.32 0-2.477.495-3.633 1.321l-.33.33c-.33.165-.496.496-.826.661-.826.826-1.487 1.486-2.147 2.312-.33.33-.66.826-1.156 1.156-2.313 2.478-4.46 4.46-6.607 5.946q-.742.495-1.486.496c-.33 0-.661 0-.991-.166h-.33l-1.983 1.322c-2.147-2.312-4.459-4.294-6.771-6.276a65.96 65.96 0 0 0-34.519-13.709l-.165-2.147-.33-.33c-.496-.496-1.156-.991-1.322-2.147-.165-2.643.166-5.616.496-8.919v-.165c0-.496.165-1.156.33-1.652.165-.99.33-1.982.496-3.138v-1.486c0-2.973-2.313-5.45-5.12-5.45-1.322 0-2.643.66-3.634 1.651-.99.991-1.486 2.312-1.486 3.799v1.321c0 1.156.165 2.147.495 3.138.165.496.165.991.33 1.652v.165c.33 3.303.826 6.276.496 8.919-.165 1.156-.826 1.651-1.321 2.147l-.33.33-.166 2.147c-2.973.33-5.946.66-8.919 1.321-12.717 2.808-23.948 9.25-32.701 18.498l-1.652-1.156h-.33c-.33 0-.661.165-.991.165q-.743 0-1.487-.495c-2.147-1.486-4.294-3.634-6.606-6.111-.33-.33-.66-.826-1.156-1.156-.661-.826-1.322-1.487-2.148-2.312-.165-.166-.495-.33-.825-.661-.165-.165-.33-.165-.33-.33a5.77 5.77 0 0 0-3.634-1.322c-1.487 0-2.973.661-3.799 1.817-1.652 2.147-1.156 5.45 1.156 7.432.165 0 .165.166.33.166.33.165.496.495.826.66.991.66 1.817 1.156 2.808 1.652.496.165.991.495 1.487.826 2.972 1.816 5.45 3.303 7.432 5.12.826.825.826 1.651.826 2.477v.33l1.651 1.487c-.33.495-.66.826-.826 1.321-8.258 13.048-11.396 28.408-9.249 43.603l-2.147.66c0 .166-.165.166-.165.33-.33.661-.826 1.322-1.817 1.817-2.477.826-5.45 1.157-8.918 1.487h-.166c-.495 0-1.156 0-1.651.165-.991 0-1.982.165-3.138.33-.33 0-.66.166-.991.166-.165 0-.33 0-.496.165-2.973.66-4.79 3.468-4.294 6.11.496 2.313 2.643 3.8 5.285 3.8.496 0 .826 0 1.322-.166.165 0 .33 0 .33-.165.33 0 .66-.165.99-.165 1.157-.33 1.983-.66 2.974-1.156.495-.165.99-.496 1.486-.66h.165c3.138-1.157 5.946-2.148 8.589-2.478h.33c.991 0 1.652.495 2.147.826.165 0 .165.165.33.165l2.313-.33c3.964 12.221 11.561 23.122 21.636 31.05 2.312 1.816 4.624 3.303 7.102 4.79l-.991 2.146c0 .166.165.166.165.33.33.661.66 1.487.33 2.643-.99 2.478-2.477 4.955-4.294 7.763v.165c-.33.496-.66.826-.99 1.321-.661.826-1.157 1.652-1.818 2.643-.165.165-.33.495-.495.826 0 .165-.165.33-.165.33-1.321 2.808-.33 5.946 2.147 7.102q.99.496 1.982.496c1.982 0 3.964-1.322 4.955-3.139 0-.165.165-.33.165-.33.165-.33.33-.66.495-.826.496-1.156.661-1.982.991-2.973l.496-1.486c1.156-3.303 1.982-5.946 3.468-8.258.66-.991 1.487-1.156 2.147-1.487.165 0 .165 0 .33-.165l1.157-2.147c7.267 2.808 15.195 4.294 23.122 4.294 4.79 0 9.745-.495 14.37-1.651a73 73 0 0 0 8.588-2.478l.99 1.817c.166 0 .166 0 .331.165.826.165 1.486.496 2.147 1.487 1.321 2.312 2.312 5.12 3.468 8.258v.165l.496 1.486c.33.991.495 1.982.99 2.973.166.33.331.496.496.826 0 .165.166.33.166.33.99 1.982 2.972 3.139 4.954 3.139q.992 0 1.982-.496c1.156-.66 2.147-1.652 2.478-2.973.33-1.321.33-2.808-.33-4.129 0-.165-.166-.165-.166-.33-.165-.33-.33-.66-.495-.826-.496-.991-1.156-1.817-1.817-2.643-.33-.495-.66-.825-.99-1.32v-.166c-1.818-2.808-3.47-5.285-4.295-7.763-.33-1.156 0-1.816.165-2.642 0-.165.165-.165.165-.33l-.826-1.982c8.754-5.12 16.186-12.388 21.802-21.306 2.973-4.625 5.285-9.745 6.936-14.865l1.982.33c.166 0 .166-.165.33-.165.661-.33 1.157-.825 2.148-.825h.33c2.643.33 5.45 1.32 8.589 2.477h.165c.495.165.99.495 1.486.66.991.496 1.817.826 2.973 1.157.33 0 .66.165.991.165.165 0 .33 0 .495.165.496.165.826.165 1.322.165 2.477 0 4.624-1.651 5.285-3.798 0-1.982-1.817-4.625-4.79-5.45m-76.47-8.093-7.267 3.469-7.267-3.469-1.816-7.762 4.954-6.276h8.093l4.955 6.276zm43.108-17.176a52.1 52.1 0 0 1 1.156 16.68l-25.27-7.266c-2.312-.66-3.633-2.973-3.138-5.285.165-.661.496-1.322.991-1.817l19.985-18.003c2.807 4.625 4.954 9.91 6.276 15.69m-14.204-25.6-21.636 15.36c-1.817 1.156-4.295.825-5.781-.991-.495-.496-.66-1.157-.826-1.817l-1.486-26.922a50.13 50.13 0 0 1 29.729 14.37M116.769 78.12c1.817-.33 3.468-.66 5.285-.99l-1.486 26.425c-.165 2.312-1.982 4.294-4.46 4.294-.66 0-1.486-.165-1.982-.495L92.16 91.665c6.772-6.772 15.195-11.397 24.609-13.544m-32.537 23.453 19.654 17.507c1.817 1.487 1.982 4.294.496 6.111-.496.66-1.156 1.156-1.982 1.322l-25.6 7.432c-.991-11.231 1.486-22.627 7.432-32.372m-4.46 44.759 26.262-4.46c2.147-.165 4.129 1.322 4.624 3.469.165.99.165 1.817-.165 2.643l-10.075 24.278c-9.249-5.946-16.681-15.03-20.645-25.93m60.285 32.867c-3.799.826-7.598 1.321-11.562 1.321-5.78 0-11.396-.99-16.68-2.642l13.047-23.618c1.321-1.487 3.468-2.147 5.285-1.156a7 7 0 0 1 1.982 1.816l12.717 22.958c-1.486.495-3.138.826-4.79 1.321m32.206-22.957c-4.129 6.606-9.58 11.891-15.855 16.02l-10.405-24.94c-.496-1.981.33-4.128 2.312-5.12.66-.33 1.486-.495 2.312-.495l26.426 4.46c-.991 3.633-2.643 6.937-4.79 10.075"})]}),CJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 291",...e,children:[y.jsx("path",{fill:"#009639",d:"M2.054 218.187c1.32 2.347 3.227 4.108 5.575 5.428l112.962 65.137c4.695 2.787 10.416 2.787 14.964 0l112.963-65.137c4.695-2.64 7.482-7.629 7.482-13.057V80.284c0-5.428-2.787-10.416-7.482-13.056L135.555 2.09c-4.694-2.788-10.416-2.788-14.964 0L7.63 67.228C2.787 69.868 0 74.856 0 80.284v130.42c0 2.642.587 5.136 2.054 7.483"}),y.jsx("path",{fill:"#FFF",d:"M91.837 195.154a14.463 14.463 0 0 1-14.524 14.524 14.463 14.463 0 0 1-14.523-14.524V95.542c0-7.776 6.895-14.084 16.43-14.084 6.896 0 14.965 2.787 19.806 8.802l4.4 5.282 60.737 72.618V95.835a14.463 14.463 0 0 1 14.524-14.524 14.463 14.463 0 0 1 14.523 14.524v99.613c0 7.775-6.895 14.083-16.43 14.083-6.896 0-14.965-2.787-19.806-8.802l-65.137-77.754z"})]}),$Je=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 264",...e,children:[y.jsx("path",{d:"M255.008 158.086c-1.535-4.649-5.556-7.887-10.756-8.664-2.452-.366-5.26-.21-8.583.475-5.792 1.195-10.089 1.65-13.225 1.738 11.837-19.985 21.462-42.775 27.003-64.228 8.96-34.689 4.172-50.492-1.423-57.64C233.217 10.847 211.614.683 185.552.372c-13.903-.17-26.108 2.575-32.475 4.549-5.928-1.046-12.302-1.63-18.99-1.738-12.537-.2-23.614 2.533-33.079 8.15-5.24-1.772-13.65-4.27-23.362-5.864-22.842-3.75-41.252-.828-54.718 8.685C6.622 25.672-.937 45.684.461 73.634c.444 8.874 5.408 35.874 13.224 61.48 4.492 14.718 9.282 26.94 14.237 36.33 7.027 13.315 14.546 21.156 22.987 23.972 4.731 1.576 13.327 2.68 22.368-4.85 1.146 1.388 2.675 2.767 4.704 4.048 2.577 1.625 5.728 2.953 8.875 3.74 11.341 2.835 21.964 2.126 31.027-1.848.056 1.612.099 3.152.135 4.482.06 2.157.12 4.272.199 6.25.537 13.374 1.447 23.773 4.143 31.049.148.4.347 1.01.557 1.657 1.345 4.118 3.594 11.012 9.316 16.411 5.925 5.593 13.092 7.308 19.656 7.308 3.292 0 6.433-.432 9.188-1.022 9.82-2.105 20.973-5.311 29.041-16.799 7.628-10.86 11.336-27.217 12.007-52.99q.13-1.094.244-2.088l.16-1.362 1.797.158.463.031c10.002.456 22.232-1.665 29.743-5.154 5.935-2.754 24.954-12.795 20.476-26.351"}),y.jsx("path",{fill:"#336791",d:"M237.906 160.722c-29.74 6.135-31.785-3.934-31.785-3.934 31.4-46.593 44.527-105.736 33.2-120.211-30.904-39.485-84.399-20.811-85.292-20.327l-.287.052c-5.876-1.22-12.451-1.946-19.842-2.067-13.456-.22-23.664 3.528-31.41 9.402 0 0-95.43-39.314-90.991 49.444.944 18.882 27.064 142.873 58.218 105.422 11.387-13.695 22.39-25.274 22.39-25.274 5.464 3.63 12.006 5.482 18.864 4.817l.533-.452c-.166 1.7-.09 3.363.213 5.332-8.026 8.967-5.667 10.541-21.711 13.844-16.235 3.346-6.698 9.302-.471 10.86 7.549 1.887 25.013 4.561 36.813-11.958l-.47 1.885c3.144 2.519 5.352 16.383 4.982 28.952-.37 12.568-.617 21.197 1.86 27.937 2.479 6.74 4.948 21.905 26.04 17.386 17.623-3.777 26.756-13.564 28.027-29.89.901-11.606 2.942-9.89 3.07-20.267l1.637-4.912c1.887-15.733.3-20.809 11.157-18.448l2.64.232c7.99.363 18.45-1.286 24.589-4.139 13.218-6.134 21.058-16.377 8.024-13.686z"}),y.jsx("path",{fill:"#FFF",d:"M108.076 81.525c-2.68-.373-5.107-.028-6.335.902-.69.523-.904 1.129-.962 1.546-.154 1.105.62 2.327 1.096 2.957 1.346 1.784 3.312 3.01 5.258 3.28q.423.059.842.058c3.245 0 6.196-2.527 6.456-4.392.325-2.336-3.066-3.893-6.355-4.35M196.86 81.599c-.256-1.831-3.514-2.353-6.606-1.923-3.088.43-6.082 1.824-5.832 3.659.2 1.427 2.777 3.863 5.827 3.863q.387 0 .78-.054c2.036-.282 3.53-1.575 4.24-2.32 1.08-1.136 1.706-2.402 1.591-3.225"}),y.jsx("path",{fill:"#FFF",d:"M247.802 160.025c-1.134-3.429-4.784-4.532-10.848-3.28-18.005 3.716-24.453 1.142-26.57-.417 13.995-21.32 25.508-47.092 31.719-71.137 2.942-11.39 4.567-21.968 4.7-30.59.147-9.463-1.465-16.417-4.789-20.665-13.402-17.125-33.072-26.311-56.882-26.563-16.369-.184-30.199 4.005-32.88 5.183-5.646-1.404-11.801-2.266-18.502-2.376-12.288-.199-22.91 2.743-31.704 8.74-3.82-1.422-13.692-4.811-25.765-6.756-20.872-3.36-37.458-.814-49.294 7.571-14.123 10.006-20.643 27.892-19.38 53.16.425 8.501 5.269 34.653 12.913 59.698 10.062 32.964 21 51.625 32.508 55.464 1.347.449 2.9.763 4.613.763 4.198 0 9.345-1.892 14.7-8.33a530 530 0 0 1 20.261-22.926c4.524 2.428 9.494 3.784 14.577 3.92q.016.2.035.398a118 118 0 0 0-2.57 3.175c-3.522 4.471-4.255 5.402-15.592 7.736-3.225.666-11.79 2.431-11.916 8.435-.136 6.56 10.125 9.315 11.294 9.607 4.074 1.02 7.999 1.523 11.742 1.523 9.103 0 17.114-2.992 23.516-8.781-.197 23.386.778 46.43 3.586 53.451 2.3 5.748 7.918 19.795 25.664 19.794 2.604 0 5.47-.303 8.623-.979 18.521-3.97 26.564-12.156 29.675-30.203 1.665-9.645 4.522-32.676 5.866-45.03 2.836.885 6.487 1.29 10.434 1.289 8.232 0 17.731-1.749 23.688-4.514 6.692-3.108 18.768-10.734 16.578-17.36m-44.106-83.48c-.061 3.647-.563 6.958-1.095 10.414-.573 3.717-1.165 7.56-1.314 12.225-.147 4.54.42 9.26.968 13.825 1.108 9.22 2.245 18.712-2.156 28.078a37 37 0 0 1-1.95-4.009c-.547-1.326-1.735-3.456-3.38-6.404-6.399-11.476-21.384-38.35-13.713-49.316 2.285-3.264 8.084-6.62 22.64-4.813m-17.644-61.787c21.334.471 38.21 8.452 50.158 23.72 9.164 11.711-.927 64.998-30.14 110.969a171 171 0 0 0-.886-1.117l-.37-.462c7.549-12.467 6.073-24.802 4.759-35.738-.54-4.488-1.05-8.727-.92-12.709.134-4.22.692-7.84 1.232-11.34.663-4.313 1.338-8.776 1.152-14.037.139-.552.195-1.204.122-1.978-.475-5.045-6.235-20.144-17.975-33.81-6.422-7.475-15.787-15.84-28.574-21.482 5.5-1.14 13.021-2.203 21.442-2.016M66.674 175.778c-5.9 7.094-9.974 5.734-11.314 5.288-8.73-2.912-18.86-21.364-27.791-50.624-7.728-25.318-12.244-50.777-12.602-57.916-1.128-22.578 4.345-38.313 16.268-46.769 19.404-13.76 51.306-5.524 64.125-1.347-.184.182-.376.352-.558.537-21.036 21.244-20.537 57.54-20.485 59.759-.002.856.07 2.068.168 3.735.362 6.105 1.036 17.467-.764 30.334-1.672 11.957 2.014 23.66 10.111 32.109a36 36 0 0 0 2.617 2.468c-3.604 3.86-11.437 12.396-19.775 22.426m22.479-29.993c-6.526-6.81-9.49-16.282-8.133-25.99 1.9-13.592 1.199-25.43.822-31.79-.053-.89-.1-1.67-.127-2.285 3.073-2.725 17.314-10.355 27.47-8.028 4.634 1.061 7.458 4.217 8.632 9.645 6.076 28.103.804 39.816-3.432 49.229-.873 1.939-1.698 3.772-2.402 5.668l-.546 1.466c-1.382 3.706-2.668 7.152-3.465 10.424-6.938-.02-13.687-2.984-18.819-8.34m1.065 37.9c-2.026-.506-3.848-1.385-4.917-2.114.893-.42 2.482-.992 5.238-1.56 13.337-2.745 15.397-4.683 19.895-10.394 1.031-1.31 2.2-2.794 3.819-4.602l.002-.002c2.411-2.7 3.514-2.242 5.514-1.412 1.621.67 3.2 2.702 3.84 4.938.303 1.056.643 3.06-.47 4.62-9.396 13.156-23.088 12.987-32.921 10.526m69.799 64.952c-16.316 3.496-22.093-4.829-25.9-14.346-2.457-6.144-3.665-33.85-2.808-64.447.011-.407-.047-.8-.159-1.17a15.4 15.4 0 0 0-.456-2.162c-1.274-4.452-4.379-8.176-8.104-9.72-1.48-.613-4.196-1.738-7.46-.903.696-2.868 1.903-6.107 3.212-9.614l.549-1.475c.618-1.663 1.394-3.386 2.214-5.21 4.433-9.848 10.504-23.337 3.915-53.81-2.468-11.414-10.71-16.988-23.204-15.693-7.49.775-14.343 3.797-17.761 5.53-.735.372-1.407.732-2.035 1.082.954-11.5 4.558-32.992 18.04-46.59 8.489-8.56 19.794-12.788 33.568-12.56 27.14.444 44.544 14.372 54.366 25.979 8.464 10.001 13.047 20.076 14.876 25.51-13.755-1.399-23.11 1.316-27.852 8.096-10.317 14.748 5.644 43.372 13.315 57.129 1.407 2.521 2.621 4.7 3.003 5.626 2.498 6.054 5.732 10.096 8.093 13.046.724.904 1.426 1.781 1.96 2.547-4.166 1.201-11.649 3.976-10.967 17.847-.55 6.96-4.461 39.546-6.448 51.059-2.623 15.21-8.22 20.875-23.957 24.25m68.104-77.936c-4.26 1.977-11.389 3.46-18.161 3.779-7.48.35-11.288-.838-12.184-1.569-.42-8.644 2.797-9.547 6.202-10.503.535-.15 1.057-.297 1.561-.473q.469.383 1.032.756c6.012 3.968 16.735 4.396 31.874 1.271l.166-.033c-2.042 1.909-5.536 4.471-10.49 6.772"})]}),RJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 257",...e,children:y.jsx("path",{fill:"#DA4E31",d:"M128.001.667C57.311.667 0 57.971 0 128.664c0 70.69 57.311 127.998 128.001 127.998S256 199.354 256 128.664C256 57.97 198.689.667 128.001.667m0 239.56c-20.112 0-36.419-13.435-36.419-30.004h72.838c0 16.566-16.306 30.004-36.419 30.004m60.153-39.94H67.842V178.47h120.314v21.816zm-.432-33.045H68.185c-.398-.458-.804-.91-1.188-1.375-12.315-14.954-15.216-22.76-18.032-30.716-.048-.262 14.933 3.06 25.556 5.45 0 0 5.466 1.265 13.458 2.722-7.673-8.994-12.23-20.428-12.23-32.116 0-25.658 19.68-48.079 12.58-66.201 6.91.562 14.3 14.583 14.8 36.505 7.346-10.152 10.42-28.69 10.42-40.056 0-11.769 7.755-25.44 15.512-25.907-6.915 11.396 1.79 21.165 9.53 45.4 2.902 9.103 2.532 24.423 4.772 34.138.744-20.178 4.213-49.62 17.014-59.784-5.647 12.8.836 28.818 5.27 36.518 7.154 12.424 11.49 21.836 11.49 39.638 0 11.936-4.407 23.173-11.84 31.958 8.452-1.586 14.289-3.016 14.289-3.016l27.45-5.355c.002-.002-3.987 16.401-19.314 32.197"})}),zJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 228",...e,children:y.jsx("path",{fill:"#00D8FF",d:"M210.483 73.824a172 172 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621 6.238-30.281 2.16-54.676-11.769-62.708-13.355-7.7-35.196.329-57.254 19.526a171 171 0 0 0-6.375 5.848 156 156 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233 50.33 10.957 46.379 33.89 51.995 62.588a171 171 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a146 146 0 0 0 6.921 2.165 168 168 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266 13.744 7.926 36.812-.22 59.273-19.855a146 146 0 0 0 5.342-4.923 168 168 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586 13.731-7.949 18.194-32.003 12.4-61.268a145 145 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488 29.348-9.723 48.443-25.443 48.443-41.52 0-15.417-17.868-30.326-45.517-39.844m-6.365 70.984c-1.4.463-2.836.91-4.3 1.345-3.24-10.257-7.612-21.163-12.963-32.432 5.106-11 9.31-21.767 12.459-31.957 2.619.758 5.16 1.557 7.61 2.4 23.69 8.156 38.14 20.213 38.14 29.504 0 9.896-15.606 22.743-40.946 31.14m-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787-1.524 8.219-4.59 13.698-8.382 15.893-8.067 4.67-25.32-1.4-43.927-17.412a157 157 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246 12.376-1.098 24.068-2.894 34.671-5.345q.785 3.162 1.386 6.193M87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675-8.075-4.657-11.432-22.636-6.853-46.752a157 157 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994 7.084 9.967 14.501 19.128 21.976 27.15a135 135 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94M50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863-6.35-5.437-9.555-10.836-9.555-15.216 0-9.322 13.897-21.212 37.076-29.293 2.813-.98 5.757-1.905 8.812-2.773 3.204 10.42 7.406 21.315 12.477 32.332-5.137 11.18-9.399 22.249-12.634 32.792a135 135 0 0 1-6.318-1.979m12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789 8.564-4.958 27.502 2.111 47.463 19.835a144 144 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988-12.04 1.116-23.565 2.908-34.161 5.309a160 160 0 0 1-1.76-7.887m110.427 27.268a348 348 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08-2.206 7.072-4.956 14.465-8.193 22.045a381 381 0 0 0-7.365-13.322m-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322 322 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18M82.802 87.83a323 323 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152 7.304-1.634 15.093-2.97 23.209-3.984a322 322 0 0 0-7.848 12.897m8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793 2.26-7.3 5.045-14.885 8.298-22.6a321 321 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147m37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433 4.902.192 9.899.29 14.978.29 5.218 0 10.376-.117 15.453-.343-4.985 6.774-10.018 12.97-15.028 18.486m52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52-7.422 1.694-15.436 3.058-23.88 4.071a382 382 0 0 0 7.859-13.026 347 347 0 0 0 7.425-13.565m-16.898 8.101a359 359 0 0 1-12.281 19.815 329 329 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310 310 0 0 1-12.513-19.846h.001a307 307 0 0 1-10.923-20.627 310 310 0 0 1 10.89-20.637l-.001.001a307 307 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329 329 0 0 1 12.335 19.695 359 359 0 0 1 11.036 20.54 330 330 0 0 1-11 20.722m22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026q-.518 2.504-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408-7.034-10.017-14.323-19.124-21.64-27.008a161 161 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3M128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86-22.86-10.235-22.86-22.86 10.235-22.86 22.86-22.86"})}),TJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 220",...e,children:[y.jsx("path",{fill:"#912626",d:"M245.97 168.943c-13.662 7.121-84.434 36.22-99.501 44.075s-23.437 7.78-35.34 2.09c-11.902-5.69-87.216-36.112-100.783-42.597C3.566 169.271 0 166.535 0 163.951v-25.876s98.05-21.345 113.879-27.024c15.828-5.679 21.32-5.884 34.79-.95 13.472 4.936 94.018 19.468 107.331 24.344l-.006 25.51c.002 2.558-3.07 5.364-10.024 8.988"}),y.jsx("path",{fill:"#C6302B",d:"M245.965 143.22c-13.661 7.118-84.431 36.218-99.498 44.072-15.066 7.857-23.436 7.78-35.338 2.09-11.903-5.686-87.214-36.113-100.78-42.594-13.566-6.485-13.85-10.948-.524-16.166 13.326-5.22 88.224-34.605 104.055-40.284 15.828-5.677 21.319-5.884 34.789-.948 13.471 4.934 83.819 32.935 97.13 37.81 13.316 4.881 13.827 8.9.166 16.02"}),y.jsx("path",{fill:"#912626",d:"M245.97 127.074c-13.662 7.122-84.434 36.22-99.501 44.078-15.067 7.853-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.112-100.783-42.597C3.566 127.402 0 124.67 0 122.085V96.206s98.05-21.344 113.879-27.023c15.828-5.679 21.32-5.885 34.79-.95C162.142 73.168 242.688 87.697 256 92.574l-.006 25.513c.002 2.557-3.07 5.363-10.024 8.987"}),y.jsx("path",{fill:"#C6302B",d:"M245.965 101.351c-13.661 7.12-84.431 36.218-99.498 44.075-15.066 7.854-23.436 7.777-35.338 2.087-11.903-5.686-87.214-36.112-100.78-42.594-13.566-6.483-13.85-10.947-.524-16.167C23.151 83.535 98.05 54.148 113.88 48.47c15.828-5.678 21.319-5.884 34.789-.949 13.471 4.934 83.819 32.933 97.13 37.81 13.316 4.88 13.827 8.9.166 16.02"}),y.jsx("path",{fill:"#912626",d:"M245.97 83.653c-13.662 7.12-84.434 36.22-99.501 44.078-15.067 7.854-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.113-100.783-42.595C3.566 83.98 0 81.247 0 78.665v-25.88s98.05-21.343 113.879-27.021c15.828-5.68 21.32-5.884 34.79-.95C162.142 29.749 242.688 44.278 256 49.155l-.006 25.512c.002 2.555-3.07 5.361-10.024 8.986"}),y.jsx("path",{fill:"#C6302B",d:"M245.965 57.93c-13.661 7.12-84.431 36.22-99.498 44.074-15.066 7.854-23.436 7.777-35.338 2.09C99.227 98.404 23.915 67.98 10.35 61.497S-3.5 50.55 9.825 45.331C23.151 40.113 98.05 10.73 113.88 5.05c15.828-5.679 21.319-5.883 34.789-.948s83.819 32.934 97.13 37.811c13.316 4.876 13.827 8.897.166 16.017"}),y.jsx("path",{fill:"#FFF",d:"m159.283 32.757-22.01 2.285-4.927 11.856-7.958-13.23-25.415-2.284 18.964-6.839-5.69-10.498 17.755 6.944 16.738-5.48-4.524 10.855zM131.032 90.275 89.955 73.238l58.86-9.035zM74.082 39.347c17.375 0 31.46 5.46 31.46 12.194 0 6.736-14.085 12.195-31.46 12.195s-31.46-5.46-31.46-12.195c0-6.734 14.085-12.194 31.46-12.194"}),y.jsx("path",{fill:"#621B1C",d:"m185.295 35.998 34.836 13.766-34.806 13.753z"}),y.jsx("path",{fill:"#9A2928",d:"m146.755 51.243 38.54-15.245.03 27.519-3.779 1.478z"})]}),jJe=e=>y.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 258",...e,children:y.jsxs("g",{fill:"#FFA64D",children:[y.jsx("path",{d:"M13.222 183.045C30.007 165.978 244.278 4.782 247.936 8.44c2.813 2.813-156.507 219.616-173.387 236.589s-44.26 16.785-61.14-.282c-16.972-17.066-16.972-44.73-.187-61.702",opacity:.5}),y.jsx("path",{d:"M22.693 175.45c20.63-12.098 230.119-95.18 232.65-90.68 1.97 3.47-168.79 154.538-189.514 166.541-20.63 12.003-46.98 4.783-58.89-16.222-11.909-20.818-4.876-47.543 15.754-59.64",opacity:.3}),y.jsx("path",{d:"M82.051 235.276C94.054 214.46 176.387 3.47 171.98.938 168.51-1.032 18.661 171.042 6.658 191.859c-11.91 20.818-4.689 47.356 16.129 59.265C43.51 263.127 70.048 256 82.05 235.276",opacity:.3}),y.jsx("path",{d:"M32.727 171.042c23.068-6.283 216.521-30.195 217.928-25.225 1.031 3.845-172.73 103.431-195.798 109.714s-46.699-7.595-52.794-30.945 7.69-47.261 30.664-53.544",opacity:.2}),y.jsx("path",{d:"M32.727 171.042c23.068-6.283 179.387 29.07 180.7 33.946 1.032 3.844-135.595 44.167-158.664 50.45-23.068 6.282-46.699-7.596-52.794-30.946-6.001-23.255 7.783-47.167 30.758-53.45",opacity:.1}),y.jsx("path",{d:"M86.459 225.055c6.282-23.256-28.882-180.7-33.852-182.013C48.762 42.01 8.815 179.575 2.626 202.83c-6.19 23.255 7.595 47.074 30.757 53.075 23.068 6.19 46.887-7.595 53.076-30.851",opacity:.1}),y.jsx("path",{d:"M86.459 225.055C92.74 201.799 116.372 6.939 111.496 5.626 107.651 4.595 8.908 179.576 2.626 202.925-3.564 226.18 10.22 249.999 33.383 256c23.068 6.189 46.887-7.69 53.076-30.945",opacity:.2})]})}),AJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",...e,children:[y.jsx("path",{fill:"#85EA2D",d:"M127.999 249.895c-67.215 0-121.9-54.68-121.9-121.896S60.785 6.102 128 6.102c67.214 0 121.899 54.685 121.899 121.9 0 67.214-54.685 121.893-121.9 121.893"}),y.jsx("path",{fill:"#173647",d:"M127.999 12.202c63.954 0 115.797 51.842 115.797 115.797 0 63.952-51.843 115.797-115.797 115.797-63.952 0-115.797-51.845-115.797-115.797S64.047 12.202 127.999 12.202m0-12.202C57.419 0 0 57.42 0 127.999s57.42 127.998 127.999 127.998S256 198.577 256 128C256 57.419 198.578 0 127.999 0"}),y.jsx("path",{fill:"#173647",d:"M80.598 86.619c-.394 4.38.146 8.909-.146 13.338-.345 4.431-.887 8.811-1.773 13.192-1.23 6.25-5.12 10.976-10.482 14.914 10.436 6.793 11.616 17.324 12.304 28.006.345 5.76.197 11.567.788 17.276.443 4.429 2.165 5.562 6.745 5.708 1.87.048 3.786 0 5.956 0v13.683c-13.535 2.313-24.708-1.525-27.467-12.992-.887-4.184-1.478-8.467-1.673-12.798-.297-4.578.195-9.155-.148-13.732-.985-12.553-2.61-16.785-14.618-17.376v-15.602a24 24 0 0 1 2.608-.443c6.596-.345 9.4-2.364 10.828-8.86.69-3.641 1.084-7.333 1.23-11.074.494-7.136.297-14.42 1.525-21.507C67.997 68.163 74.3 63.24 84.785 62.65c2.952-.149 5.955 0 9.35 0v13.98c-1.427.1-2.658.294-3.937.294-8.515-.297-8.96 2.607-9.6 9.695m16.39 32.386h-.196c-4.923-.245-9.155 3.593-9.403 8.515-.246 4.972 3.592 9.206 8.515 9.45h.59c4.875.296 9.056-3.447 9.352-8.319v-.491c.1-4.971-3.886-9.055-8.857-9.155m30.862 0c-4.774-.148-8.763 3.593-8.909 8.318 0 .297 0 .543.051.837 0 5.365 3.641 8.812 9.155 8.812 5.414 0 8.812-3.544 8.812-9.106-.051-5.366-3.646-8.91-9.109-8.86m31.602 0c-5.02-.1-9.206 3.89-9.352 8.91a9.03 9.03 0 0 0 9.055 9.054h.1c4.528.788 9.106-3.592 9.402-8.858.243-4.874-4.186-9.106-9.205-9.106m43.363.737c-5.711-.245-8.567-2.164-9.992-7.581a55 55 0 0 1-1.624-10.582c-.395-6.596-.346-13.241-.789-19.837-1.033-15.651-12.352-21.114-28.794-18.41V76.92c2.607 0 4.626 0 6.645.049 3.495.048 6.153 1.379 6.496 5.268.345 3.543.345 7.136.69 10.73.692 7.139 1.083 14.372 2.314 21.41 1.085 5.809 5.07 10.14 10.04 13.684-8.71 5.857-11.27 14.223-11.714 23.626-.245 6.448-.394 12.944-.736 19.443-.297 5.905-2.362 7.824-8.318 7.972-1.674.05-3.298.198-5.169.297v13.93c3.495 0 6.694.196 9.892 0 9.942-.592 15.947-5.415 17.918-15.063a126 126 0 0 0 1.476-16.045c.343-4.923.297-9.894.788-14.766.737-7.63 4.232-10.78 11.862-11.27.739-.1 1.427-.246 2.118-.492v-15.604c-1.282-.149-2.17-.295-3.103-.346"})]}),DJe=e=>y.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 512 123",...e,children:[y.jsx("path",{d:"M207.785 45.398c15.276 0 18.696 8.908 18.696 19.188v10.239H199.86v2.457c.102 5.693 2.15 7.945 9.399 7.945a50 50 0 0 0 14.58-2.252l1.863 9.01a51.2 51.2 0 0 1-17.528 3.03c-14.97 0-20.17-6.942-20.17-18.43V63.993c0-10.075 4.504-18.594 19.78-18.594m100.38-.02c14.97 0 19.392 5.283 19.392 17.222l-.04 31.432h-9.789l-.88-3.235a26.06 26.06 0 0 1-14.191 4.218c-8.703 0-12.43-5.98-12.43-14.19 0-9.686 4.218-13.413 13.904-13.413h11.447v-4.997c0-5.283-1.474-7.146-9.113-7.146-4.443.049-8.866.544-13.208 1.474l-1.474-9.112a62.4 62.4 0 0 1 16.382-2.253m79.35 0c16.341 0 20.744 9.01 20.744 18.798v12.041c.02 9.788-4.403 18.798-20.744 18.798-16.382 0-20.743-9.01-20.743-18.798v-12.04c0-9.789 4.402-18.799 20.743-18.799M198.017 28.832v10.874h-18.225v54.326h-12.286l-.041-54.326H149.26V28.832zm157.205-3.911c3.46-.012 6.905.45 10.239 1.372l-1.25 9.194a35 35 0 0 0-6.86-.778c-4.688 0-5.385 2.048-5.385 5.673v5.979h12.143l-.675 9.501h-11.447v38.17h-11.939v-38.17h-7.638v-9.501h7.638v-6.655c0-9.89 4.608-14.785 15.174-14.785M482.04 50.477a46.8 46.8 0 0 1 19.187-5.099c7.925 0 10.772 5.57 10.772 14.089v34.565h-11.939V60.757c0-2.54-1.085-3.81-3.809-3.81a31.6 31.6 0 0 0-12.43 4.096v32.99H471.8V60.756c0-2.54-1.085-3.81-3.808-3.81-4.376.52-8.601 1.913-12.43 4.096v32.99h-11.939V46.36h9.113l1.167 4.095a47.7 47.7 0 0 1 19.126-5.078 9.05 9.05 0 0 1 9.01 5.099m-224.863-5.099 1.229 10.976a94 94 0 0 0-12.676 6.942v30.716h-11.938V46.361h10.075l.778 5.283a53.5 53.5 0 0 1 12.532-6.266m29.201 0 1.188 10.976a94 94 0 0 0-12.635 6.942v30.716h-11.938V46.361h10.075l.778 5.283a53.5 53.5 0 0 1 12.532-6.266m151.43 0 1.188 10.976a94 94 0 0 0-12.634 6.942v30.716h-11.938V46.361h10.074l.779 5.283a53.4 53.4 0 0 1 12.532-6.266m-122.23 30.634h-8.804c-3.912 0-4.997 1.086-4.997 4.69s1.085 4.791 4.792 4.791a18.8 18.8 0 0 0 9.01-2.457zm71.938-20.457c-6.368 0-8.805 2.847-8.805 8.191v12.82c0 5.385 2.457 8.19 8.805 8.19s8.805-2.846 8.805-8.19V63.786c0-5.385-2.436-8.232-8.805-8.232m-179.628-.389c-5.877 0-7.925 3.133-7.925 7.638v2.417h15.174v-2.417c0-4.505-1.372-7.638-7.249-7.638"}),y.jsx("path",{fill:"#4040B2",d:"M74.538 79.821 108.12 60.45V21.645L74.538 41.057z"}),y.jsx("path",{fill:"#5C4EE5",d:"m37.269 21.645 33.583 19.412v38.764L37.269 60.43M0 38.784l33.583 19.392V19.392L0 0m37.269 103.473 33.583 19.392V84.08L37.269 64.688"})]});const PJe={"tech:docker":yJe,"tech:elasticsearch":vJe,"tech:electron":bJe,"tech:git":xJe,"tech:github":wJe,"tech:go":kJe,"tech:grafana":_Je,"tech:java":SJe,"tech:kubernetes":EJe,"tech:nginx":CJe,"tech:postgresql":$Je,"tech:prometheus":RJe,"tech:react":zJe,"tech:redis":TJe,"tech:spark":jJe,"tech:swagger":AJe,"tech:terraform":DJe};function MJe(e){const r=PJe[e.node.icon??""];return r?y.jsx(r,e):null}function NJe(e,r,n){let o=i=>e(i,...r);return n===void 0?o:Object.assign(o,{lazy:n,lazyArgs:r})}function Jre(e,r,n){let o=e.length-r.length;if(o===0)return e(...r);if(o===1)return NJe(e,r,n);throw Error("Wrong number of arguments")}function BJe(...e){return Jre(IJe,e)}function IJe(e,r){let n={};for(let[o,i]of Object.entries(e))n[o]=r(i,o,e);return n}function ene(...e){return Jre(z0,e)}function z0(e,r){if(e===r||Object.is(e,r))return!0;if(typeof e!="object"||typeof r!="object"||e===null||r===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(r))return!1;if(Array.isArray(e))return OJe(e,r);if(e instanceof Map)return LJe(e,r);if(e instanceof Set)return FJe(e,r);if(e instanceof Date)return e.getTime()===r.getTime();if(e instanceof RegExp)return e.toString()===r.toString();if(Object.keys(e).length!==Object.keys(r).length)return!1;for(let[n,o]of Object.entries(e))if(!(n in r)||!z0(o,r[n]))return!1;return!0}function OJe(e,r){if(e.length!==r.length)return!1;for(let[n,o]of e.entries())if(!z0(o,r[n]))return!1;return!0}function LJe(e,r){if(e.size!==r.size)return!1;for(let[n,o]of e.entries())if(!r.has(n)||!z0(o,r.get(n)))return!1;return!0}function FJe(e,r){if(e.size!==r.size)return!1;let n=[...r];for(let o of e){let i=!1;for(let[a,l]of n.entries())if(z0(o,l)){i=!0,n.splice(a,1);break}if(!i)return!1}return!0}let ml=[],Fd=0;const g4=4;let m4=0;const tne=e=>{let r=[],n={get(){return n.lc||n.listen(()=>{})(),n.value},lc:0,listen(o){return n.lc=r.push(o),()=>{for(let a=Fd+g4;a(e.events=e.events||{},e.events[n+v4]||(e.events[n+v4]=o(i=>{e.events[n].reduceRight((a,l)=>(l(a),a),{shared:{},...i})})),e.events[n]=e.events[n]||[],e.events[n].push(r),()=>{let i=e.events[n],a=i.indexOf(r);i.splice(a,1),i.length||(delete e.events[n],e.events[n+v4](),delete e.events[n+v4])}),HJe=1e3,UJe=(e,r)=>qJe(e,n=>{let o=r(n);o&&e.events[y4].push(o)},VJe,n=>{let o=e.listen;e.listen=(...a)=>(!e.lc&&!e.active&&(e.active=!0,n()),o(...a));let i=e.off;return e.events[y4]=[],e.off=()=>{i(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let a of e.events[y4])a();e.events[y4]=[]}},HJe)},()=>{e.listen=o,e.off=i}}),WJe=(e,r,n)=>{Array.isArray(e)||(e=[e]);let o,i,a=()=>{if(i===m4)return;i=m4;let d=e.map(u=>u.get());if(!o||d.some((u,p)=>u!==o[p])){o=d;let u=r(...d);u&&u.then&&u.t?u.then(p=>{o===d&&l.set(p)}):(l.set(u),i=m4)}},l=tne(void 0),s=l.get;l.get=()=>(a(),s());let c=a;return UJe(l,()=>{let d=e.map(u=>u.listen(c));return a(),()=>{for(let u of d)u()}}),l};const rne=(e,r)=>WJe(e,r);function GJe(e,r,n){let o=new Set(r).add(void 0);return e.listen((i,a,l)=>{o.has(l)&&n(i,a,l)})}let Cz=(e,r)=>n=>{e.current!==n&&(e.current=n,r())};function nne(e,{keys:r,deps:n=[e,r]}={}){let o=S.useRef();o.current=e.get();let i=S.useCallback(l=>(Cz(o,l)(e.value),r?.length>0?GJe(e,r,Cz(o,l)):e.listen(Cz(o,l))),n),a=()=>o.current;return S.useSyncExternalStore(i,a,a)}const YJe=e=>{const r=rne(e,s=>Fu.create(s));function n(s){const c=e.get();if(ene(c,s))return;const d={...s,views:BJe(s.views,u=>{const p=c.views[u.id];return ene(p,u)?p:u})};e.set(d)}const o=rne(e,s=>Object.values(s.views));function i(){return nne(r)}function a(){return nne(o)}function l(s){const[c,d]=S.useState(e.value?.views[s]??null);return S.useEffect(()=>e.subscribe(u=>{d(u.views[s]??null)}),[s]),c}return{updateModel:n,$likec4model:r,useLikeC4Model:i,useLikeC4Views:a,useLikeC4View:l}},XJe=tne({_stage:"layouted",projectId:"architecture",project:{id:"architecture",title:"architecture"},specification:{tags:{internal:{color:"tomato"}},elements:{actor:{style:{shape:"person",color:"green"}},person:{style:{shape:"person",color:"green"}},component:{style:{}},container:{style:{opacity:20}},internalComponent:{style:{color:"muted",opacity:15}},schema:{style:{}},step:{style:{}},system:{style:{}},workflow:{style:{}},tool:{style:{}},process:{style:{}},repository:{style:{shape:"storage"}}},relationships:{},deployments:{cloud:{style:{}},environment:{style:{}},computeressource:{style:{}},paas:{style:{}},kubernetes:{style:{}},cluster:{style:{}},namespace:{style:{}}},customColors:{magenta:{elements:{fill:"#b100ff",stroke:"#9e00e4",hiContrast:"#ffffff",loContrast:"#fff2ff"},relationships:{line:"#c137fe",label:"#d064ff",labelBg:"#7a00b3"}}}},elements:{edfbuilder_workflow:{style:{},title:"EDFbuilder",kind:"workflow",id:"edfbuilder_workflow"},argocdworkflow:{style:{},title:"EDP ArgoCD Setup Workflow",kind:"workflow",id:"argocdworkflow"},edpworkflow:{style:{},title:"EDP Infrastructure Setup Workflow",kind:"workflow",id:"edpworkflow"},applicationspecification:{style:{},description:{txt:"The application specification describes the application and its components. It is used to generate the application and its components."},title:"application-specification",kind:"component",id:"applicationspecification"},forgejoRunner:{style:{},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},title:"Forgejo Runner",kind:"component",id:"forgejoRunner"},forgejoRunnerWorker:{style:{},description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},title:"Forgejo Runner Worker",kind:"component",id:"forgejoRunnerWorker"},promtail:{style:{},description:{txt:"Log shipper agent for Loki"},title:"Promtail",kind:"component",id:"promtail"},edfbuilder:{style:{shape:"rectangle",icon:"tech:go"},technology:"Golang",description:{txt:"EDP Foundry Builder"},title:"edfbuilder",kind:"component",id:"edfbuilder"},idpbuilder:{style:{shape:"rectangle",icon:"tech:go"},technology:"Golang",description:{txt:"Bootstrap tool for initial platform provisioning"},title:"idpbuilder",kind:"component",id:"idpbuilder"},terraform:{style:{shape:"rectangle"},technology:"Terraform",description:{txt:"Infrastructure provisioning (IaC)"},title:"Terraform",kind:"component",id:"terraform"},edgeConnect:{style:{},description:{txt:"Provides an API and control plane to run applications on the edge"},title:"EdgeConnect Cloud",kind:"system",id:"edgeConnect"},edgeCli:{style:{},description:{txt:"Command-line client for interactive usage"},title:"EdgeConnect CLI",kind:"component",id:"edgeCli"},edgeSdk:{style:{},description:{txt:"SDK for programmatic integration"},title:"EdgeConnect SDK",kind:"component",id:"edgeSdk"},edgeTerraformProvider:{style:{},description:{txt:"Terraform provider enabling declarative provisioning"},title:"Terraform Edge provider",kind:"component",id:"edgeTerraformProvider"},elasticsearch:{style:{opacity:20,icon:"tech:elasticsearch"},technology:"Elasticsearch",description:{txt:`Elasticsearch is a distributed, RESTful search and analytics engine capable of -addressing a growing number of use cases. It centrally stores your data so you can -discover the expected and uncover the unexpected.`},title:"Elasticsearch",kind:"container",id:"elasticsearch"},objectstorage:{style:{opacity:20},technology:"S3 Object Storage",description:{txt:"s3 Object Storage"},title:"s3 Object Storage",kind:"container",id:"objectstorage"},postgres:{style:{opacity:20,icon:"tech:postgresql"},technology:"PostgreSQL",description:{txt:`PostgreSQL is a powerful, open source object-relational database system. -It has more than 15 years of active development and a proven architecture -that has earned it a strong reputation for reliability, data integrity, -and correctness.`},title:"PostgreSQL",kind:"container",id:"postgres"},redis:{style:{opacity:20,icon:"tech:redis"},technology:"Redis",description:{txt:"Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker."},title:"Redis",kind:"container",id:"redis"},developer:{style:{shape:"person",color:"green"},description:{txt:"The regular user of the platform"},title:"Developer",kind:"actor",id:"developer"},platformdeveloper:{style:{shape:"person",color:"gray"},description:{txt:"The EDP engineer"},title:"Platform Developer",kind:"actor",id:"platformdeveloper"},otherProductLifecycleRoles:{style:{shape:"person",color:"green"},description:{txt:"Coworking roles in the outer loop"},title:"Reviewer, Tester, Auditors, Operators",kind:"actor",id:"otherProductLifecycleRoles"},customers:{style:{shape:"person",color:"amber"},description:{txt:"Consumers of your Application"},title:"End Customers",kind:"actor",id:"customers"},runtimeCluster:{style:{},technology:"Kubernetes",description:{txt:"Target cluster where applications are deployed"},title:"Kubernetes Cluster",kind:"system",id:"runtimeCluster"},cloud:{style:{},technology:"IaaS/PaaS",description:{txt:"Cloud environments"},title:"Cloud",kind:"system",id:"cloud"},enterprise:{style:{},description:{txt:"The customers' enterprise systems"},title:"Customers' Enterprise Systems",kind:"system",id:"enterprise"},documentation:{style:{icon:"tech:electron"},technology:"Static Site Generator",description:{txt:"Documentation system for EDP LikeC4 platform."},title:"Documentation",kind:"system",id:"documentation"},edf:{style:{icon:"tech:kubernetes"},technology:"Kubernetes",description:{txt:"EDP Foundry is a platform for building and deploying EDPs tenantwise."},title:"EDF",kind:"system",id:"edf"},edp:{style:{icon:"tech:kubernetes"},technology:"Kubernetes",description:{txt:"EDP Edge Development Platform"},title:"EDP",kind:"system",id:"edp"},localbox:{style:{},technology:"Linux/Windows/Mac",description:{txt:"A local development system"},title:"localbox",kind:"system",id:"localbox"},"edfbuilder_workflow.runEDP":{style:{opacity:25},title:"Run edpbuilder script",kind:"step",id:"edfbuilder_workflow.runEDP"},"edfbuilder_workflow.applyEDFBuilder":{style:{opacity:15},title:"Applies EDFbuilder resource (and triggers creation)",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder"},"applicationspecification.application_gitrepo":{style:{icon:"tech:git"},technology:"Git",description:{txt:"Git Application Repository"},title:"Git App Repo",kind:"component",id:"applicationspecification.application_gitrepo"},"applicationspecification.applicationspec_gitrepo":{style:{icon:"tech:git"},technology:"Git",description:{txt:"Git Application Specification Repository"},title:"Git AppSpec Repo",kind:"component",id:"applicationspecification.applicationspec_gitrepo"},"edp.api":{style:{opacity:20,icon:"tech:swagger"},description:{txt:"API for the EDP platform"},title:"API",kind:"container",id:"edp.api"},"edp.argoCD":{style:{opacity:20},description:{txt:"GitOps Service"},title:"ArgoCD",kind:"container",id:"edp.argoCD"},"edp.ui":{style:{opacity:20},description:{txt:"Developer Portal"},title:"Backstage",kind:"container",id:"edp.ui"},"edp.crossplane":{style:{opacity:20},tags:["internal"],description:{txt:"Declarative management of ressources"},title:"Crossplane",kind:"container",id:"edp.crossplane"},"edgeConnect.api":{style:{opacity:20},description:{txt:"Single entry point for provisioning and lifecycle management"},title:"Edge Cloud API",kind:"container",id:"edgeConnect.api"},"edgeConnect.resources":{style:{opacity:20},description:{txt:"Managed resources such as App, AppInstance, etc."},title:"Edge Resources",kind:"container",id:"edgeConnect.resources"},"edgeConnect.controllers":{style:{opacity:20},description:{txt:"Reconciles desired state and drives deployments"},title:"Controllers / Scheduler",kind:"container",id:"edgeConnect.controllers"},"edgeConnect.runtime":{style:{opacity:20},description:{txt:"Runtime where applications actually run"},title:"Edge Clusters",kind:"container",id:"edgeConnect.runtime"},"edp.externalSecrets":{style:{opacity:20},tags:["internal"],description:{txt:"Provider to access externally stored Kubernetes secrets"},title:"external-secrets",kind:"container",id:"edp.externalSecrets"},"edp.forgejo":{style:{opacity:20,icon:"tech:go"},technology:"Golang",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},title:"Forgejo",kind:"container",id:"edp.forgejo"},"edp.forgejoActions":{style:{icon:"tech:go"},technology:"Golang",description:{txt:"Continuous Integration like Github Actions"},title:"Forgejo Actions",kind:"component",id:"edp.forgejoActions"},"edp.imageregistry":{style:{icon:"tech:go"},technology:"Golang",description:{txt:"Container Image Registry"},title:"Forgejo OCI Image Registry",kind:"component",id:"edp.imageregistry"},"edp.forgejogit":{style:{icon:"tech:git"},title:"ForgejoGit",kind:"component",id:"edp.forgejogit"},"edp.garm":{style:{opacity:20,icon:"tech:docker"},title:"Garm Image",kind:"container",id:"edp.garm"},"edp.grafana":{style:{opacity:20,icon:"tech:grafana"},description:{txt:"Data visualization and monitoring"},title:"Grafana",kind:"container",id:"edp.grafana"},"edp.ingressNginx":{style:{opacity:20},tags:["internal"],description:{txt:"Ingress Controller for incoming http(s) traffic"},title:"Ingress",kind:"container",id:"edp.ingressNginx"},"edp.keycloak":{style:{opacity:20},description:{txt:"Single Sign On for all EDP products"},title:"Keycloak",kind:"container",id:"edp.keycloak"},"edp.kyverno":{style:{opacity:20},tags:["internal"],description:{txt:"Policy-as-Code"},title:"Kyverno",kind:"container",id:"edp.kyverno"},"edp.loki":{style:{opacity:20},description:{txt:"Log aggregation system"},title:"Loki",kind:"container",id:"edp.loki"},"edp.mailhog":{style:{opacity:20},description:{txt:"Web and API based SMTP testing"},title:"Mailhog",kind:"container",id:"edp.mailhog"},"edp.minio":{style:{opacity:20},description:{txt:"S3 compatible blob storage"},title:"Minio",kind:"container",id:"edp.minio"},"edp.monitoring":{style:{opacity:20},description:{txt:"Observability system to monitor deployed components"},title:"Monitoring",kind:"container",id:"edp.monitoring"},"edp.openbao":{style:{opacity:20},description:{txt:"Secure secret storage"},title:"OpenBao",kind:"container",id:"edp.openbao"},"edp.prometheus":{style:{opacity:20,icon:"tech:prometheus"},description:{txt:"Monitoring and alerting toolkit"},title:"Prometheus",kind:"container",id:"edp.prometheus"},"edp.spark":{style:{opacity:20},tags:["internal"],description:{txt:"Allows running Spark applications on K8s"},title:"Spark",kind:"container",id:"edp.spark"},"edp.velero":{style:{opacity:20},tags:["internal"],description:{txt:"Backup Kubernetes resources"},title:"Velero",kind:"container",id:"edp.velero"},"runtimeCluster.runningApplication":{style:{opacity:20},description:{txt:"Deployed workload"},title:"Running Application",kind:"container",id:"runtimeCluster.runningApplication"},"cloud.application":{style:{color:"primary"},technology:"DSL",description:{txt:"An application description"},title:"application",kind:"schema",id:"cloud.application"},"edp.application":{style:{color:"primary"},technology:"DSL",description:{txt:"An application description"},title:"application",kind:"schema",id:"edp.application"},"edp.testApp":{style:{opacity:20},description:{txt:"Testapp to validate deployments"},title:"Fibonacci",kind:"container",id:"edp.testApp"},"localbox.application":{style:{color:"primary"},technology:"DSL",description:{txt:"An application description"},title:"application",kind:"schema",id:"localbox.application"},"localbox.git":{style:{icon:"tech:git"},technology:"Git",description:{txt:"local git"},title:"git",kind:"component",id:"localbox.git"},"edfbuilder_workflow.runEDP.createCrossplaneNS":{style:{},title:"Create Crossplane namespace",kind:"step",id:"edfbuilder_workflow.runEDP.createCrossplaneNS"},"edfbuilder_workflow.runEDP.installCrossplaneHelm":{style:{},title:"Install Crossplane Helm Chart",kind:"step",id:"edfbuilder_workflow.runEDP.installCrossplaneHelm"},"edfbuilder_workflow.runEDP.installCrossplaneFunctionsAndProviders":{style:{},title:"Install Crossplane Functions and Providers",kind:"step",id:"edfbuilder_workflow.runEDP.installCrossplaneFunctionsAndProviders"},"edfbuilder_workflow.runEDP.waitForCrossplaneFunctionsAndProviders":{style:{},title:"Wait for Crossplane Functions and Providers to become available",kind:"step",id:"edfbuilder_workflow.runEDP.waitForCrossplaneFunctionsAndProviders"},"edfbuilder_workflow.runEDP.setupCrossplaneServiceAccount":{style:{},title:"Apply cluster-admin role to crossplane shell provider service account",kind:"step",id:"edfbuilder_workflow.runEDP.setupCrossplaneServiceAccount"},"edfbuilder_workflow.runEDP.createArgoCdNS":{style:{},title:"Create ArgoCD namespace",kind:"step",id:"edfbuilder_workflow.runEDP.createArgoCdNS"},"edfbuilder_workflow.runEDP.createGiteaNS":{style:{},title:"Create Gitea namespace",kind:"step",id:"edfbuilder_workflow.runEDP.createGiteaNS"},"edfbuilder_workflow.runEDP.createArgoCdTlsCert":{style:{},title:"Create TLS Cert for Argo",kind:"step",id:"edfbuilder_workflow.runEDP.createArgoCdTlsCert"},"edfbuilder_workflow.runEDP.createGiteaTlsCert":{style:{},title:"Create TLS Cert for Forgejo",kind:"step",id:"edfbuilder_workflow.runEDP.createGiteaTlsCert"},"edfbuilder_workflow.runEDP.createEDFBuilderDefinition":{style:{},title:"Create EDFbuilder crossplane definition (defines API)",kind:"step",id:"edfbuilder_workflow.runEDP.createEDFBuilderDefinition"},"edfbuilder_workflow.runEDP.createEDFBuilderComposition":{style:{},title:"Create EDFbuilder crossplane composition (defines what happens when EDFbuilder is applied)",kind:"step",id:"edfbuilder_workflow.runEDP.createEDFBuilderComposition"},"edfbuilder_workflow.applyEDFBuilder.setEnvVars":{style:{},title:"Set required environment variables",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.setEnvVars"},"edfbuilder_workflow.applyEDFBuilder.readWriteKubeConf":{style:{},title:"Make kube.conf write/readbale",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.readWriteKubeConf"},"edfbuilder_workflow.applyEDFBuilder.setWorkDir":{style:{},title:"Set workdir to /tmp/rundir",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.setWorkDir"},"edfbuilder_workflow.applyEDFBuilder.cloneStacksRepo":{style:{},title:"Clone steps repo and checkout desired branch",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.cloneStacksRepo"},"edfbuilder_workflow.applyEDFBuilder.hydrateStacksWithValues":{style:{},title:"Hydrate Stacks with values",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.hydrateStacksWithValues"},"edfbuilder_workflow.applyEDFBuilder.createNamespaces":{style:{},title:"Create all required namespaces",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createNamespaces"},"edfbuilder_workflow.applyEDFBuilder.createGiteaAdminPass":{style:{},title:"Create Admin Password for Forgejo",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createGiteaAdminPass"},"edfbuilder_workflow.applyEDFBuilder.createGrafanaPass":{style:{},title:"Create Grafana Admin Password",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createGrafanaPass"},"edfbuilder_workflow.applyEDFBuilder.applyServiceMonitorCRD":{style:{},title:"Apply ServiceMonitor CRDs for Prometheus",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.applyServiceMonitorCRD"},"edfbuilder_workflow.applyEDFBuilder.cloneIngressNginxChart":{style:{},title:"Git clone ingress-nginx helm chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.cloneIngressNginxChart"},"edfbuilder_workflow.applyEDFBuilder.isntallIngressNginx":{style:{},title:"Install ingress-nginx from cloned chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.isntallIngressNginx"},"edfbuilder_workflow.applyEDFBuilder.waitForIngress":{style:{},title:"Wait till ingress-nginx is ready",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.waitForIngress"},"edfbuilder_workflow.applyEDFBuilder.cloneArgoCDHelm":{style:{},title:"Git clone ArgoCD Helm Chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.cloneArgoCDHelm"},"edfbuilder_workflow.applyEDFBuilder.installArgoCD":{style:{},title:"Install ArgoCD Helm Chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installArgoCD"},"edfbuilder_workflow.applyEDFBuilder.installArgoCDIngress":{style:{},title:"Install ingress for ArgoCD",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installArgoCDIngress"},"edfbuilder_workflow.applyEDFBuilder.cloneForgejoHelmChart":{style:{},title:"Git clone Forgejo Helm Chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.cloneForgejoHelmChart"},"edfbuilder_workflow.applyEDFBuilder.installForgejo":{style:{},title:"Install Forgejo Helm Chart",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installForgejo"},"edfbuilder_workflow.applyEDFBuilder.installForgejoIngress":{style:{},title:"Install ingress for Forgejo",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installForgejoIngress"},"edfbuilder_workflow.applyEDFBuilder.waitForArgoCD":{style:{},title:"Wait till ArgoCD is available",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.waitForArgoCD"},"edfbuilder_workflow.applyEDFBuilder.waitForForgejo":{style:{},title:"Wait till Forgejo is available",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.waitForForgejo"},"edfbuilder_workflow.applyEDFBuilder.createForgejoUser":{style:{},title:"Create technical user for Forgejo",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createForgejoUser"},"edfbuilder_workflow.applyEDFBuilder.createForgejoRepo":{style:{},title:"Create repository for EDP state in Forgejo",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createForgejoRepo"},"edfbuilder_workflow.applyEDFBuilder.installForgejoRunner":{style:{},title:"Install Forgejo Runner deployment",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installForgejoRunner"},"edfbuilder_workflow.applyEDFBuilder.registerForgejoRunner":{style:{},title:"Create registration token secret for runner",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.registerForgejoRunner"},"edfbuilder_workflow.applyEDFBuilder.configGitIdentity":{style:{},title:"Configure Git identity",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.configGitIdentity"},"edfbuilder_workflow.applyEDFBuilder.configCrossplaneArgoCDProvider":{style:{},title:"Configure Crossplane ArgoCD provider",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneArgoCDProvider"},"edfbuilder_workflow.applyEDFBuilder.configCrossplaneKindProvider":{style:{},title:"Configure Crossplane Kind provider",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneKindProvider"},"edfbuilder_workflow.applyEDFBuilder.uploadStacksToForgjo":{style:{},title:"Git push hydrated stacks to Forgejo isntance",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.uploadStacksToForgjo"},"edfbuilder_workflow.applyEDFBuilder.configArgoDockerRegistry":{style:{},title:"Configure Docker Registry for Argo Workflows",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.configArgoDockerRegistry"},"edfbuilder_workflow.applyEDFBuilder.createPackagesForgejoUser":{style:{},title:"Create packages user and token in Forgejo (unused?)",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.createPackagesForgejoUser"},"edfbuilder_workflow.applyEDFBuilder.installArgoCDStacks":{style:{},title:"Apply all selected ArgoCD stacks",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.installArgoCDStacks"},"edfbuilder_workflow.applyEDFBuilder.cleanup":{style:{},title:"Cleanup work folder and unset all env vars",kind:"step",id:"edfbuilder_workflow.applyEDFBuilder.cleanup"},"edp.argoCD.argocdServer":{style:{},title:"ArgoCD Server",kind:"component",id:"edp.argoCD.argocdServer"},"edp.argoCD.argocdAppController":{style:{},title:"ApplicationController",kind:"component",id:"edp.argoCD.argocdAppController"},"edp.argoCD.argocdAppSetController":{style:{},title:"ApplicationSeetController",kind:"component",id:"edp.argoCD.argocdAppSetController"},"edp.argoCD.argocdRedis":{style:{icon:"tech:redis"},technology:"Redis",title:"Redis",kind:"component",id:"edp.argoCD.argocdRedis"},"edp.argoCD.argocdRepoServer":{style:{},title:"Repo Server",kind:"component",id:"edp.argoCD.argocdRepoServer"},"edp.ui.backstage":{style:{icon:"tech:react",shape:"browser"},title:"Backstage",kind:"component",id:"edp.ui.backstage"},"edp.ui.database":{style:{shape:"storage",icon:"tech:postgresql"},technology:"Postgresql",title:"Database",kind:"component",id:"edp.ui.database"},"edp.crossplane.crossplane":{style:{},title:"Crossplane",kind:"component",id:"edp.crossplane.crossplane"},"edp.crossplane.crossplaneFunction":{style:{},title:"Function Patch and Transform",kind:"component",id:"edp.crossplane.crossplaneFunction"},"edp.crossplane.crossplaneRbacManager":{style:{},title:"RBAC Manager",kind:"component",id:"edp.crossplane.crossplaneRbacManager"},"edp.crossplane.providerArgoCD":{style:{},title:"ArgoCD Provider",kind:"component",id:"edp.crossplane.providerArgoCD"},"edp.crossplane.providerKind":{style:{},title:"Kind Provider",kind:"component",id:"edp.crossplane.providerKind"},"edp.crossplane.providerShell":{style:{},title:"Shell Provider",kind:"component",id:"edp.crossplane.providerShell"},"edp.externalSecrets.externalSecrets":{style:{},title:"external-secrets controller",kind:"component",id:"edp.externalSecrets.externalSecrets"},"edp.externalSecrets.certController":{style:{},title:"cert-controller",kind:"component",id:"edp.externalSecrets.certController"},"edp.externalSecrets.webhook":{style:{},title:"webhook",kind:"component",id:"edp.externalSecrets.webhook"},"edp.forgejo.forgejocollaboration":{style:{icon:"tech:github"},title:"Collaboration",kind:"component",id:"edp.forgejo.forgejocollaboration"},"edp.forgejo.forgejoproject":{style:{icon:"tech:github"},title:"Project Mgmt",kind:"component",id:"edp.forgejo.forgejoproject"},"edp.garm.garm":{style:{icon:"tech:go"},description:{txt:"Provisions runners for Forgejo"},title:"Garm",kind:"component",id:"edp.garm.garm"},"edp.garm.providerEdgeConnect":{style:{icon:"tech:go"},description:{txt:"Acts as abstraction layer for EdgeConnect"},title:"Garm Provider for EdgeConnect",kind:"component",id:"edp.garm.providerEdgeConnect"},"edp.garm.providerKubernetes":{style:{icon:"tech:go"},description:{txt:"Acts as abstraction layer for Kubernetes"},title:"Garm Provider for Kubernetes",kind:"component",id:"edp.garm.providerKubernetes"},"edp.ingressNginx.ingressNginx":{style:{icon:"tech:nginx"},technology:"Nginx",title:"ingress-nginx",kind:"component",id:"edp.ingressNginx.ingressNginx"},"edp.keycloak.keycloak":{style:{icon:"tech:java"},technology:"Java",title:"Keycloak",kind:"component",id:"edp.keycloak.keycloak"},"edp.keycloak.keycloakDB":{style:{shape:"storage",icon:"tech:postgresql"},technology:"Postgresql",title:"Database",kind:"component",id:"edp.keycloak.keycloakDB"},"edp.mailhog.mailhog":{style:{icon:"tech:go"},technology:"Golang",title:"Mailhog",kind:"component",id:"edp.mailhog.mailhog"},"edp.minio.minio":{style:{shape:"storage"},technology:"Minio",title:"S3 Blob Storage",kind:"component",id:"edp.minio.minio"},"edp.monitoring.alloy":{style:{icon:"tech:grafana",multiple:!0},description:{txt:"Open Telemetry Collector"},title:"Alloy",kind:"component",id:"edp.monitoring.alloy"},"edp.monitoring.loki":{style:{opacity:20,icon:"tech:grafana"},description:{txt:"Log aggregation system"},title:"Loki",kind:"container",id:"edp.monitoring.loki"},"edp.openbao.openbao":{style:{shape:"storage"},technology:"Openbao",title:"Openbao",kind:"component",id:"edp.openbao.openbao"},"edp.openbao.agentInjector":{style:{},title:"Agent Injector",kind:"component",id:"edp.openbao.agentInjector"},"edp.spark.sparkoperator":{style:{icon:"tech:spark"},technology:"Spark",title:"Spark Operator",kind:"component",id:"edp.spark.sparkoperator"},"edp.velero.velero":{style:{},title:"Velero",kind:"component",id:"edp.velero.velero"},"runtimeCluster.runningApplication.pods":{style:{},title:"Pods",kind:"component",id:"runtimeCluster.runningApplication.pods"},"runtimeCluster.runningApplication.services":{style:{},title:"Services",kind:"component",id:"runtimeCluster.runningApplication.services"},"runtimeCluster.runningApplication.ingress":{style:{},title:"Ingress",kind:"component",id:"runtimeCluster.runningApplication.ingress"},"edp.testApp.fibonacci":{style:{icon:"tech:go"},technology:"Golang",title:"Fibonacci",kind:"component",id:"edp.testApp.fibonacci"},"edp.monitoring.loki.queryFrontend":{style:{},title:"Query Frontend",kind:"component",id:"edp.monitoring.loki.queryFrontend"},"edp.monitoring.loki.distributor":{style:{},title:"Distributor",kind:"component",id:"edp.monitoring.loki.distributor"},"edp.monitoring.loki.gateway":{style:{},title:"Gateway",kind:"component",id:"edp.monitoring.loki.gateway"},"edp.monitoring.loki.ingestor":{style:{},title:"Ingestor",kind:"component",id:"edp.monitoring.loki.ingestor"},"edp.monitoring.loki.querier":{style:{},title:"Querier",kind:"component",id:"edp.monitoring.loki.querier"}},relations:{zgprrj:{title:"",source:{model:"edfbuilder_workflow.runEDP.createCrossplaneNS"},target:{model:"edfbuilder_workflow.runEDP.installCrossplaneHelm"},id:"zgprrj"},hkqe1q:{title:"",source:{model:"edfbuilder_workflow.runEDP.installCrossplaneHelm"},target:{model:"edfbuilder_workflow.runEDP.installCrossplaneFunctionsAndProviders"},id:"hkqe1q"},"7hhs3w":{title:"",source:{model:"edfbuilder_workflow.runEDP.installCrossplaneFunctionsAndProviders"},target:{model:"edfbuilder_workflow.runEDP.waitForCrossplaneFunctionsAndProviders"},id:"7hhs3w"},xjeqlb:{title:"",source:{model:"edfbuilder_workflow.runEDP.waitForCrossplaneFunctionsAndProviders"},target:{model:"edfbuilder_workflow.runEDP.setupCrossplaneServiceAccount"},id:"xjeqlb"},"1nhvr49":{title:"",source:{model:"edfbuilder_workflow.runEDP.setupCrossplaneServiceAccount"},target:{model:"edfbuilder_workflow.runEDP.createArgoCdNS"},id:"1nhvr49"},i203to:{title:"",source:{model:"edfbuilder_workflow.runEDP.createArgoCdNS"},target:{model:"edfbuilder_workflow.runEDP.createGiteaNS"},id:"i203to"},"1b9cczp":{title:"",source:{model:"edfbuilder_workflow.runEDP.createGiteaNS"},target:{model:"edfbuilder_workflow.runEDP.createArgoCdTlsCert"},id:"1b9cczp"},i514he:{title:"",source:{model:"edfbuilder_workflow.runEDP.createArgoCdTlsCert"},target:{model:"edfbuilder_workflow.runEDP.createGiteaTlsCert"},id:"i514he"},"13ashxq":{title:"",source:{model:"edfbuilder_workflow.runEDP.createGiteaTlsCert"},target:{model:"edfbuilder_workflow.runEDP.createEDFBuilderDefinition"},id:"13ashxq"},"14kigg4":{title:"",source:{model:"edfbuilder_workflow.runEDP.createEDFBuilderDefinition"},target:{model:"edfbuilder_workflow.runEDP.createEDFBuilderComposition"},id:"14kigg4"},"1y9fees":{title:"",source:{model:"edfbuilder_workflow.runEDP.createEDFBuilderComposition"},target:{model:"edfbuilder_workflow.applyEDFBuilder"},id:"1y9fees"},"1pfgmn3":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.setEnvVars"},target:{model:"edfbuilder_workflow.applyEDFBuilder.readWriteKubeConf"},id:"1pfgmn3"},"11gwuq3":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.readWriteKubeConf"},target:{model:"edfbuilder_workflow.applyEDFBuilder.setWorkDir"},id:"11gwuq3"},"1ddvozk":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.setWorkDir"},target:{model:"edfbuilder_workflow.applyEDFBuilder.cloneStacksRepo"},id:"1ddvozk"},c4bphp:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.cloneStacksRepo"},target:{model:"edfbuilder_workflow.applyEDFBuilder.hydrateStacksWithValues"},id:"c4bphp"},"22u12c":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.hydrateStacksWithValues"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createNamespaces"},id:"22u12c"},"1veymj5":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createNamespaces"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createGiteaAdminPass"},id:"1veymj5"},"1bx48yr":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createGiteaAdminPass"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createGrafanaPass"},id:"1bx48yr"},pbq0ly:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createGrafanaPass"},target:{model:"edfbuilder_workflow.applyEDFBuilder.applyServiceMonitorCRD"},id:"pbq0ly"},"1tj029j":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.applyServiceMonitorCRD"},target:{model:"edfbuilder_workflow.applyEDFBuilder.cloneIngressNginxChart"},id:"1tj029j"},ukdpc6:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.cloneIngressNginxChart"},target:{model:"edfbuilder_workflow.applyEDFBuilder.isntallIngressNginx"},id:"ukdpc6"},tm63b8:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.isntallIngressNginx"},target:{model:"edfbuilder_workflow.applyEDFBuilder.waitForIngress"},id:"tm63b8"},mnqt5q:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.waitForIngress"},target:{model:"edfbuilder_workflow.applyEDFBuilder.cloneArgoCDHelm"},id:"mnqt5q"},c3zfur:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.cloneArgoCDHelm"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCD"},id:"c3zfur"},"157ptzn":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCD"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCDIngress"},id:"157ptzn"},"8kcuka":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCDIngress"},target:{model:"edfbuilder_workflow.applyEDFBuilder.cloneForgejoHelmChart"},id:"8kcuka"},"5sub2k":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.cloneForgejoHelmChart"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejo"},id:"5sub2k"},z8qrfi:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejo"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejoIngress"},id:"z8qrfi"},"1dqe9ri":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejoIngress"},target:{model:"edfbuilder_workflow.applyEDFBuilder.waitForArgoCD"},id:"1dqe9ri"},"12iu5vk":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.waitForArgoCD"},target:{model:"edfbuilder_workflow.applyEDFBuilder.waitForForgejo"},id:"12iu5vk"},"1xhuuis":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.waitForForgejo"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createForgejoUser"},id:"1xhuuis"},vhezff:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createForgejoUser"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createForgejoRepo"},id:"vhezff"},"1dow3tq":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createForgejoRepo"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejoRunner"},id:"1dow3tq"},"1k46mx8":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installForgejoRunner"},target:{model:"edfbuilder_workflow.applyEDFBuilder.registerForgejoRunner"},id:"1k46mx8"},f5bybq:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.registerForgejoRunner"},target:{model:"edfbuilder_workflow.applyEDFBuilder.configGitIdentity"},id:"f5bybq"},"8g1uqn":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.configGitIdentity"},target:{model:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneArgoCDProvider"},id:"8g1uqn"},"9c504z":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneArgoCDProvider"},target:{model:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneKindProvider"},id:"9c504z"},"19gp6kf":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.configCrossplaneKindProvider"},target:{model:"edfbuilder_workflow.applyEDFBuilder.uploadStacksToForgjo"},id:"19gp6kf"},h55zvp:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.uploadStacksToForgjo"},target:{model:"edfbuilder_workflow.applyEDFBuilder.configArgoDockerRegistry"},id:"h55zvp"},"1b7dj03":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.configArgoDockerRegistry"},target:{model:"edfbuilder_workflow.applyEDFBuilder.createPackagesForgejoUser"},id:"1b7dj03"},"1bk65oi":{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.createPackagesForgejoUser"},target:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCDStacks"},id:"1bk65oi"},rsncrl:{title:"",source:{model:"edfbuilder_workflow.applyEDFBuilder.installArgoCDStacks"},target:{model:"edfbuilder_workflow.applyEDFBuilder.cleanup"},id:"rsncrl"},"18dtot7":{title:"register",source:{model:"forgejoRunner"},target:{model:"edp.forgejoActions"},id:"18dtot7"},"1oxlsu0":{title:"boots one",source:{model:"edfbuilder"},target:{model:"edf"},id:"1oxlsu0"},s1l7g7:{title:"runs",source:{model:"platformdeveloper"},target:{model:"edfbuilder"},id:"s1l7g7"},"8fwa3r":{title:"installs",source:{model:"idpbuilder"},target:{model:"edp.argoCD"},id:"8fwa3r"},"1ai9t9i":{title:"installs",source:{model:"idpbuilder"},target:{model:"edp.forgejo"},id:"1ai9t9i"},"1lc9jrs":{title:"installs",source:{model:"idpbuilder"},target:{model:"edp.ingressNginx"},id:"1lc9jrs"},kv3vny:{title:"runs",source:{model:"platformdeveloper"},target:{model:"idpbuilder"},id:"kv3vny"},yfhhi5:{title:"read/write",source:{model:"edp.argoCD.argocdServer"},target:{model:"edp.argoCD.argocdRedis"},id:"yfhhi5"},iullhy:{title:"read/write",source:{model:"edp.argoCD.argocdRepoServer"},target:{model:"edp.argoCD.argocdRedis"},id:"iullhy"},"10vkxaf":{title:"read/write",source:{model:"edp.argoCD.argocdAppController"},target:{model:"edp.argoCD.argocdRedis"},id:"10vkxaf"},i8z0mi:{title:"read/write",source:{model:"edp.argoCD.argocdAppSetController"},target:{model:"edp.argoCD.argocdRedis"},id:"i8z0mi"},"6mupa0":{title:"Syncs git repo",source:{model:"edp.argoCD.argocdRepoServer"},target:{model:"edp.forgejogit"},id:"6mupa0"},c23sak:{title:"reads/writes",source:{model:"edp.ui.backstage"},target:{model:"edp.ui.database"},id:"c23sak"},h84u7y:{title:"calls",source:{model:"edgeCli"},target:{model:"edgeConnect.api"},id:"h84u7y"},"1elpzvp":{title:"calls",source:{model:"edgeSdk"},target:{model:"edgeConnect.api"},id:"1elpzvp"},"6h5xnh":{title:"provisions via",source:{model:"edgeTerraformProvider"},target:{model:"edgeConnect.api"},id:"6h5xnh"},wx4vwc:{title:"creates/updates",source:{model:"edgeConnect.api"},target:{model:"edgeConnect.resources"},id:"wx4vwc"},qufboq:{title:"reconciles",source:{model:"edgeConnect.controllers"},target:{model:"edgeConnect.resources"},id:"qufboq"},"1a9x5zg":{title:"deploys",source:{model:"edgeConnect.controllers"},target:{model:"edgeConnect.runtime"},id:"1a9x5zg"},"1pbc22f":{title:"runs workflows",source:{model:"edp.forgejoActions"},target:{model:"forgejoRunner"},id:"1pbc22f"},"1olxwwi":{title:"calls binary",source:{model:"edp.garm.garm"},target:{model:"edp.garm.providerEdgeConnect"},id:"1olxwwi"},iu7wve:{title:"calls binary",source:{model:"edp.garm.garm"},target:{model:"edp.garm.providerKubernetes"},id:"iu7wve"},"13uvtiq":{title:"get metrics and alerts",source:{model:"edp.grafana"},target:{model:"edp.prometheus"},id:"13uvtiq"},"1n1utzc":{title:"get logs",source:{model:"edp.grafana"},target:{model:"edp.loki"},id:"1n1utzc"},"123efwn":{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.forgejo"},id:"123efwn"},h3rut2:{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.keycloak.keycloak"},id:"h3rut2"},"1p30hav":{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.openbao.openbao"},id:"1p30hav"},"1yssos5":{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.argoCD.argocdServer"},id:"1yssos5"},v8c8aq:{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.ui.backstage"},id:"v8c8aq"},fe65w2:{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.minio.minio"},id:"fe65w2"},"1jvab2g":{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.monitoring.alloy"},id:"1jvab2g"},fs60l7:{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.monitoring.loki.queryFrontend"},id:"fs60l7"},"1i5f8um":{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.testApp.fibonacci"},id:"1i5f8um"},ofdedh:{title:"https",source:{model:"edp.ingressNginx.ingressNginx"},target:{model:"edp.mailhog.mailhog"},id:"ofdedh"},"18zxrhs":{title:"reads/writes",source:{model:"edp.keycloak.keycloak"},target:{model:"edp.keycloak.keycloakDB"},id:"18zxrhs"},"11ollyi":{title:"pushes logs",source:{model:"edp.monitoring.alloy"},target:{model:"edp.monitoring.loki.distributor"},id:"11ollyi"},"1mazt1x":{title:"store backups",source:{model:"edp.velero.velero"},target:{model:"edp.minio.minio"},id:"1mazt1x"},"5hkplj":{title:"inner loop",source:{model:"developer"},target:{model:"localbox"},id:"5hkplj"},"1pp73vj":{title:"outer loop",source:{model:"developer"},target:{model:"edp"},id:"1pp73vj"},"3rnruw":{title:"uses",source:{model:"developer"},target:{model:"edgeCli"},id:"3rnruw"},"1ks7amr":{title:"uses",source:{model:"developer"},target:{model:"edgeSdk"},id:"1ks7amr"},"1l0aei7":{title:"uses",source:{model:"developer"},target:{model:"edgeTerraformProvider"},id:"1l0aei7"},nb1ag9:{title:"manages project",source:{model:"developer"},target:{model:"edp.ui"},id:"nb1ag9"},"14tsadm":{title:"manages code",source:{model:"developer"},target:{model:"edp.forgejo"},id:"14tsadm"},"129xciy":{title:"authenticates",source:{model:"developer"},target:{model:"edp.keycloak"},id:"129xciy"},"1l7h8as":{title:"manages deployments",source:{model:"developer"},target:{model:"edp.argoCD"},id:"1l7h8as"},dol85h:{title:"monitors",source:{model:"developer"},target:{model:"edp.grafana"},id:"dol85h"},"65iq0s":{title:"create and maintain apps",source:{model:"developer"},target:{model:"edp.ui.backstage"},id:"65iq0s"},u2ppde:{title:"pushes and pull images",source:{model:"developer"},target:{model:"edp.imageregistry"},id:"u2ppde"},"1dgd663":{title:"uses API",source:{model:"developer"},target:{model:"edp.api"},id:"1dgd663"},"1k2mvqc":{title:"uses git",source:{model:"developer"},target:{model:"edp.forgejogit"},id:"1k2mvqc"},"4pplfw":{title:"operates",source:{model:"platformdeveloper"},target:{model:"edgeConnect"},id:"4pplfw"},lb4xas:{title:"review / operate",source:{model:"otherProductLifecycleRoles"},target:{model:"edp"},id:"lb4xas"},"1g2ebwc":{title:"uses your app",source:{model:"customers"},target:{model:"cloud"},id:"1g2ebwc"},vxxbwa:{title:"git push",source:{model:"developer"},target:{model:"edp.forgejogit"},id:"vxxbwa"},"1yai3r5":{title:"triggers",source:{model:"edp.forgejogit"},target:{model:"edp.forgejoActions"},id:"1yai3r5"},"21d2gk":{title:"push image",source:{model:"edp.forgejoActions"},target:{model:"edp.imageregistry"},id:"21d2gk"},yorv62:{title:"watches manifests",source:{model:"edp.forgejogit"},target:{model:"edp.argoCD"},id:"yorv62"},"1f6l7ms":{title:"deploys",source:{model:"edp.argoCD"},target:{model:"runtimeCluster"},id:"1f6l7ms"},nc44l9:{title:"app specific dependencies",source:{model:"enterprise"},target:{model:"cloud"},id:"nc44l9"},xw0pne:{title:"provides documentation for",source:{model:"documentation"},target:{model:"edp"},id:"xw0pne"},"3sz3k3":{title:"creates and maintains documentation",source:{model:"platformdeveloper"},target:{model:"documentation"},id:"3sz3k3"},wsm3kf:{title:"builds many",source:{model:"edf"},target:{model:"edp"},id:"wsm3kf"},v8v12:{title:"develops EDP and EDF",source:{model:"platformdeveloper"},target:{model:"edf"},id:"v8v12"},"615gvx":{title:"integrates",source:{model:"edp"},target:{model:"enterprise"},id:"615gvx"},gerdx4:{title:"deploy & observe",source:{model:"edp"},target:{model:"cloud"},id:"gerdx4"},"1t93kj2":{title:"automates",source:{model:"edp"},target:{model:"edgeTerraformProvider"},id:"1t93kj2"},"96ogr7":{title:"",source:{model:"edp"},target:{model:"localbox"},id:"96ogr7"},"1mp9fps":{title:"sync",source:{model:"localbox"},target:{model:"edp"},id:"1mp9fps"},"1abvxlh":{title:"company integration",source:{model:"localbox"},target:{model:"enterprise"},id:"1abvxlh"}},globals:{predicates:{},dynamicPredicates:{},styles:{text_large:[{targets:[{wildcard:!0}],style:{size:"xl"}}]}},views:{provider:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/edge/provider.c4",description:null,title:"Terraform Edge provider",id:"provider",autoLayout:{direction:"TB"},hash:"9f510e70e35a21871bc85c1a535584598e768d47",bounds:{x:0,y:0,width:1059,height:1265},nodes:[{id:"edgeProvider",parent:null,level:0,children:[],inEdges:[],outEdges:["u9omtf","r4j4sg","1xqlhup"],deploymentRef:"edgeProvider",title:"Terraform Edge provider",kind:"paas",color:"primary",shape:"rectangle",icon:"tech:terraform",description:{txt:"Unlocks the terraform ecosystem"},tags:[],style:{opacity:15,size:"md"},x:242,y:0,width:343,height:180,labelBBox:{x:46,y:63,width:282,height:48}},{id:"edgeSdk",parent:null,level:0,children:[],inEdges:["1xqlhup"],outEdges:["14pfq5a","lw6otg"],deploymentRef:"edgeSdk",title:"Edge Cloud SDK",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",icon:"tech:go",description:{txt:"Wrapper around API"},tags:[],style:{opacity:15,size:"md"},x:86,y:347,width:320,height:180,labelBBox:{x:68,y:53,width:214,height:67}},{id:"edgeProviderHost",parent:null,level:0,children:["edgeProviderHost.terralist","edgeProviderHost.edp"],inEdges:["14pfq5a","u9omtf","r4j4sg"],outEdges:[],deploymentRef:"edgeProviderHost",title:"OTC",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:478,y:276,width:466,height:648,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edgeCloud",parent:null,level:0,children:["edgeCloud.edgeApi","edgeCloud.edgeResources"],inEdges:["lw6otg"],outEdges:[],deploymentRef:"edgeCloud",title:"Edge cloud",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:8,y:623,width:420,height:634,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edgeProviderHost.terralist",parent:"edgeProviderHost",level:1,children:[],inEdges:["r4j4sg"],outEdges:["c8rye7"],deploymentRef:"edgeProviderHost.terralist",title:"Terralist",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",icon:"tech:terraform",description:{txt:"Terraform provider private hosting"},tags:[],style:{opacity:15,size:"md"},x:536,y:347,width:350,height:180,labelBBox:{x:46,y:53,width:288,height:67}},{id:"edgeCloud.edgeApi",parent:"edgeCloud",level:1,children:[],inEdges:["lw6otg"],outEdges:["1toht4t"],deploymentRef:"edgeCloud.edgeApi",title:"Edge Cloud API",kind:"paas",technology:"Edge Cloud (managed)",links:[{url:"https://swagger.edge.platform.mg3.mdb.osc.live",title:"Documentation"}],color:"primary",shape:"rectangle",icon:"tech:swagger",tags:[],style:{opacity:15,size:"md"},x:58,y:694,width:320,height:180,labelBBox:{x:73,y:64,width:204,height:46}},{id:"edgeProviderHost.edp",parent:"edgeProviderHost",level:1,children:[],inEdges:["c8rye7","14pfq5a","u9omtf"],outEdges:[],deploymentRef:"edgeProviderHost.edp",title:"Forgejo for all EDP-tenants",kind:"cluster",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",icon:"tech:git",tags:[],style:{opacity:15,size:"md"},description:{txt:"edp.buildth.ing"},technology:"Golang",navigateTo:"forgejo",x:528,y:694,width:365,height:180,labelBBox:{x:46,y:53,width:304,height:67}},{id:"edgeCloud.edgeResources",parent:"edgeCloud",level:1,children:[],inEdges:["1toht4t"],outEdges:[],deploymentRef:"edgeCloud.edgeResources",title:"Edge Cloud Resources",kind:"paas",technology:"Edge Cloud (managed)",color:"primary",shape:"rectangle",description:{txt:"App, AppInstance, etc."},tags:[],style:{opacity:15,size:"md"},x:58,y:1027,width:320,height:180,labelBBox:{x:55,y:53,width:210,height:67}}],edges:[{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[218,874],[218,918],[218,971],[218,1016]],labelBBox:{x:219,y:939,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[711,527],[711,575],[711,634],[711,684]],labelBBox:{x:712,y:592,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[366,527],[432,576],[515,638],[583,688]],labelBBox:{x:480,y:592,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[239,527],[235,575],[230,634],[226,684]],labelBBox:{x:234,y:592,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[585,100],[709,116],[869,160],[951,276],[1016,367],[992,423],[951,527],[927,588],[880,644],[834,687]],labelBBox:{x:992,y:425,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[490,180],[532,229],[585,289],[628,339]],labelBBox:{x:564,y:245,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[371,180],[347,228],[318,288],[294,338]],labelBBox:{x:336,y:245,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"}]},index:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/kind/kind.c4",description:null,title:"Local Kind Deployment",id:"index",autoLayout:{direction:"TB"},hash:"09f216bdb503c31a28c16dff8a1c12da0a0c4cf1",bounds:{x:0,y:0,width:19320,height:1791},nodes:[{id:"otc-faas",parent:null,level:0,children:[],inEdges:[],outEdges:[],deploymentRef:"otc-faas",title:"OTC prototype FaaS",kind:"cloud",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:"OTC environments for Prototype FaaS."},tags:[],style:{opacity:15,size:"md"},x:0,y:150,width:320,height:180,labelBBox:{x:28,y:54,width:264,height:67}},{id:"edge",parent:null,level:0,children:[],inEdges:[],outEdges:[],deploymentRef:"edge",title:"Edge Cloud",kind:"cloud",technology:"Edge",color:"primary",shape:"rectangle",description:{txt:"Edge environments for distributed workloads."},tags:[],style:{opacity:15,size:"md"},x:450,y:150,width:340,height:180,labelBBox:{x:18,y:54,width:304,height:67}},{id:"edgeProvider",parent:null,level:0,children:[],inEdges:[],outEdges:["1xqlhup","u9omtf","r4j4sg"],deploymentRef:"edgeProvider",title:"Terraform Edge provider",kind:"paas",color:"primary",shape:"rectangle",icon:"tech:terraform",description:{txt:"Unlocks the terraform ecosystem"},tags:[],style:{opacity:15,size:"md"},x:920,y:150,width:343,height:180,labelBBox:{x:46,y:63,width:282,height:48}},{id:"edgeConnectEnv",parent:null,level:0,children:[],inEdges:["i6v3n"],outEdges:["1ogkmfn"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},x:5425,y:150,width:347,height:180,labelBBox:{x:46,y:45,width:286,height:85}},{id:"otc-edpFoundry",parent:null,level:0,children:["otc-edpFoundry.forgejoRunnerInfrastructure","otc-edpFoundry.cce","otc-edpFoundry.workflowSetupEDPInfrastructure","otc-edpFoundry.workflowSetupArgoCDInfrastructure"],inEdges:["c2grk6","1ean8sr","l1c2z3"],outEdges:["r3wxut","1sng0q0","e3benz","9r557q","rivecr","1lrp92n"],deploymentRef:"otc-edpFoundry",title:"OTC EDP Foundry Central Service clusters",kind:"cloud",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. - -A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},tags:[],style:{opacity:15,size:"md"},depth:1,x:3577,y:79,width:870,height:995,labelBBox:{x:6,y:0,width:280,height:15}},{id:"otcTenantProd",parent:null,level:0,children:["otcTenantProd.otcTenantEdpBuildthing","otcTenantProd.otcTenantObservability","otcTenantProd.otcTenantCustomerA"],inEdges:[],outEdges:["1ypat9q","1oiku86"],deploymentRef:"otcTenantProd",title:"Prod - builth.ing",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:17522,y:79,width:870,height:648,labelBBox:{x:6,y:0,width:108,height:15}},{id:"local",parent:null,level:0,children:["local.ingressNginx","local.velero","local.crossplane","local.externalSecrets","local.monitoring","local.backstage","local.argocd","local.keycloak","local.openbao","local.fibonacci","local.mailhog","local.minio","local.gitea","local.spark.sparkoperator"],inEdges:["1m1lj8s"],outEdges:["se5brg"],deploymentRef:"local",title:"Local kind-cluster",kind:"environment",technology:"Kind",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"Local kind-cluster environment for EDP, typically run by edpbuilder"},tags:[],style:{opacity:15,size:"md"},depth:2,x:6508,y:8,width:10964,height:1449,labelBBox:{x:6,y:0,width:127,height:15}},{id:"local.ingressNginx",parent:"local",level:1,children:["local.ingressNginx.ingressNginx"],inEdges:[],outEdges:["15juth8","p2br4p","o229dq","2vnvvg","4ix58c","1hr2s5j","1nksp5g","m2japo","4drflo","ihlgsc"],deploymentRef:"local.ingressNginx",title:"ingress-nginx",kind:"namespace",color:"primary",shape:"rectangle",modelRef:"edp.ingressNginx.ingressNginx",tags:[],style:{opacity:15,size:"md"},depth:1,x:10434,y:444,width:384,height:265,labelBBox:{x:6,y:0,width:92,height:15}},{id:"local.velero",parent:"local",level:1,children:["local.velero.velero"],inEdges:[],outEdges:["3znaik"],deploymentRef:"local.velero",title:"velero",kind:"namespace",color:"primary",shape:"rectangle",modelRef:"edp.velero.velero",tags:[],style:{opacity:15,size:"md"},depth:1,x:12058,y:444,width:384,height:265,labelBBox:{x:6,y:0,width:49,height:15}},{id:"edgeSdk",parent:null,level:0,children:[],inEdges:["1xqlhup"],outEdges:["14pfq5a","lw6otg"],deploymentRef:"edgeSdk",title:"Edge Cloud SDK",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",icon:"tech:go",description:{txt:"Wrapper around API"},tags:[],style:{opacity:15,size:"md"},x:731,y:497,width:320,height:180,labelBBox:{x:68,y:54,width:214,height:67}},{id:"otc-edpFoundry.forgejoRunnerInfrastructure",parent:"otc-edpFoundry",level:1,children:[],inEdges:["l1c2z3"],outEdges:["109g3jm","1lrp92n"],deploymentRef:"otc-edpFoundry.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},technology:null,x:4055,y:150,width:342,height:180,labelBBox:{x:18,y:54,width:306,height:66}},{id:"otcTenantProd.otcTenantEdpBuildthing",parent:"otcTenantProd",level:1,children:[],inEdges:[],outEdges:["rj56uy","u7ohgi","1ypat9q","1oiku86"],deploymentRef:"otcTenantProd.otcTenantEdpBuildthing",title:"edp.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Primary Instance"},tags:[],style:{opacity:15,size:"md"},x:18022,y:150,width:320,height:180,labelBBox:{x:85,y:63,width:181,height:48}},{id:"local.crossplane",parent:"local",level:1,children:["local.crossplane.crossplane","local.crossplane.crossplaneFunction","local.crossplane.crossplaneRbacManager","local.crossplane.providerArgoCD","local.crossplane.providerKind","local.crossplane.providerShell"],inEdges:[],outEdges:[],deploymentRef:"local.crossplane",title:"crossplane-system",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:12982,y:79,width:2670,height:301,labelBBox:{x:6,y:0,width:129,height:15}},{id:"local.crossplane.crossplane",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Crossplane",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.crossplane",modelRef:"edp.crossplane.crossplane",x:13032,y:150,width:320,height:180,labelBBox:{x:107,y:74,width:105,height:24}},{id:"local.crossplane.crossplaneFunction",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Function Patch and Transform",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.crossplaneFunction",modelRef:"edp.crossplane.crossplaneFunction",x:13482,y:150,width:320,height:180,labelBBox:{x:24,y:74,width:273,height:24}},{id:"local.crossplane.crossplaneRbacManager",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"RBAC Manager",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.crossplaneRbacManager",modelRef:"edp.crossplane.crossplaneRbacManager",x:13932,y:150,width:320,height:180,labelBBox:{x:88,y:74,width:144,height:24}},{id:"local.crossplane.providerArgoCD",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"ArgoCD Provider",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.providerArgoCD",modelRef:"edp.crossplane.providerArgoCD",x:14382,y:150,width:320,height:180,labelBBox:{x:82,y:74,width:155,height:24}},{id:"local.crossplane.providerKind",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Kind Provider",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.providerKind",modelRef:"edp.crossplane.providerKind",x:14832,y:150,width:320,height:180,labelBBox:{x:98,y:74,width:124,height:24}},{id:"local.crossplane.providerShell",parent:"local.crossplane",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Shell Provider",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.crossplane.providerShell",modelRef:"edp.crossplane.providerShell",x:15282,y:150,width:320,height:180,labelBBox:{x:96,y:74,width:129,height:24}},{id:"local.externalSecrets",parent:"local",level:1,children:["local.externalSecrets.certController","local.externalSecrets.externalSecrets","local.externalSecrets.webhook"],inEdges:[],outEdges:[],deploymentRef:"local.externalSecrets",title:"external-secrets",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:15702,y:79,width:1320,height:301,labelBBox:{x:6,y:0,width:119,height:15}},{id:"local.externalSecrets.certController",parent:"local.externalSecrets",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"cert-controller",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.externalSecrets.certController",modelRef:"edp.externalSecrets.certController",x:15752,y:150,width:320,height:180,labelBBox:{x:97,y:74,width:126,height:24}},{id:"local.externalSecrets.externalSecrets",parent:"local.externalSecrets",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets controller",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.externalSecrets.externalSecrets",modelRef:"edp.externalSecrets.externalSecrets",x:16202,y:150,width:320,height:180,labelBBox:{x:43,y:74,width:234,height:24}},{id:"local.externalSecrets.webhook",parent:"local.externalSecrets",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"webhook",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.externalSecrets.webhook",modelRef:"edp.externalSecrets.webhook",x:16652,y:150,width:320,height:180,labelBBox:{x:118,y:74,width:84,height:24}},{id:"local.monitoring",parent:"local",level:1,children:["local.monitoring.gateway","local.monitoring.ingestor","local.monitoring.querier","local.monitoring.alloy","local.monitoring.queryFrontend","local.monitoring.distributor"],inEdges:["1hr2s5j","1nksp5g"],outEdges:[],deploymentRef:"local.monitoring",title:"monitoring",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:7028,y:79,width:1320,height:1328,labelBBox:{x:6,y:0,width:75,height:15}},{id:"local.monitoring.gateway",parent:"local.monitoring",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Gateway",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.monitoring.gateway",modelRef:"edp.monitoring.loki.gateway",x:7078,y:150,width:320,height:180,labelBBox:{x:119,y:74,width:83,height:24}},{id:"local.monitoring.ingestor",parent:"local.monitoring",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Ingestor",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.monitoring.ingestor",modelRef:"edp.monitoring.loki.ingestor",x:7528,y:150,width:320,height:180,labelBBox:{x:122,y:74,width:76,height:24}},{id:"local.monitoring.querier",parent:"local.monitoring",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Querier",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.monitoring.querier",modelRef:"edp.monitoring.loki.querier",x:7978,y:150,width:320,height:180,labelBBox:{x:125,y:74,width:71,height:24}},{id:"local.ingressNginx.ingressNginx",parent:"local.ingressNginx",level:2,children:[],inEdges:[],outEdges:["15juth8","p2br4p","o229dq","2vnvvg","4ix58c","1hr2s5j","1nksp5g","m2japo","4drflo","ihlgsc"],kind:"instance",title:"ingress-nginx",technology:"Nginx",tags:[],icon:"tech:nginx",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.ingressNginx.ingressNginx",modelRef:"edp.ingressNginx.ingressNginx",x:10466,y:497,width:320,height:180,labelBBox:{x:85,y:65,width:181,height:45}},{id:"local.velero.velero",parent:"local.velero",level:2,children:[],inEdges:[],outEdges:["3znaik"],kind:"instance",title:"Velero",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.velero.velero",modelRef:"edp.velero.velero",x:12090,y:497,width:320,height:180,labelBBox:{x:129,y:74,width:62,height:24}},{id:"edgeProviderHost",parent:null,level:0,children:["edgeProviderHost.terralist","edgeProviderHost.edp"],inEdges:["u9omtf","r4j4sg","14pfq5a"],outEdges:[],deploymentRef:"edgeProviderHost",title:"OTC",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:1123,y:426,width:466,height:648,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edgeCloud",parent:null,level:0,children:["edgeCloud.edgeApi","edgeCloud.edgeResources"],inEdges:["lw6otg"],outEdges:[],deploymentRef:"edgeCloud",title:"Edge cloud",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:653,y:773,width:420,height:634,labelBBox:{x:6,y:0,width:77,height:15}},{id:"otc-edpFoundry.cce",parent:"otc-edpFoundry",level:1,children:[],inEdges:["109g3jm"],outEdges:["llfvob","fil3na"],deploymentRef:"otc-edpFoundry.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},x:4062,y:497,width:327,height:180,labelBBox:{x:46,y:54,width:266,height:67}},{id:"otcTenantProd.otcTenantObservability",parent:"otcTenantProd",level:1,children:[],inEdges:["rj56uy"],outEdges:[],deploymentRef:"otcTenantProd.otcTenantObservability",title:"observability.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Observability Instance"},tags:[],style:{opacity:15,size:"md"},x:17572,y:497,width:320,height:180,labelBBox:{x:46,y:63,width:258,height:48}},{id:"otcTenantProd.otcTenantCustomerA",parent:"otcTenantProd",level:1,children:[],inEdges:["u7ohgi"],outEdges:[],deploymentRef:"otcTenantProd.otcTenantCustomerA",title:"customer-a.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Customer Instance"},tags:[],style:{opacity:15,size:"md"},x:18022,y:497,width:320,height:180,labelBBox:{x:51,y:63,width:248,height:48}},{id:"otcTenantNonProd",parent:null,level:0,children:["otcTenantNonProd.otcTenantDev1","otcTenantNonProd.otcTenantTestX"],inEdges:["1ypat9q","1oiku86"],outEdges:[],deploymentRef:"otcTenantNonProd",title:"Non-Prod - t09.de",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:18442,y:426,width:870,height:301,labelBBox:{x:6,y:0,width:111,height:15}},{id:"local.backstage",parent:"local",level:1,children:["local.backstage.backstage","local.backstage.database"],inEdges:["15juth8"],outEdges:[],deploymentRef:"local.backstage",title:"backstage",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:8398,y:773,width:420,height:634,labelBBox:{x:6,y:0,width:74,height:15}},{id:"local.argocd",parent:"local",level:1,children:["local.argocd.argocdAppController","local.argocd.argocdAppSetController","local.argocd.argocdRepoServer","local.argocd.argocdServer","local.argocd.argocdRedis"],inEdges:["p2br4p"],outEdges:[],deploymentRef:"local.argocd",title:"argocd",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:8868,y:773,width:1770,height:634,labelBBox:{x:6,y:0,width:53,height:15}},{id:"local.keycloak",parent:"local",level:1,children:["local.keycloak.keycloak","local.keycloak.keycloakDB"],inEdges:["2vnvvg"],outEdges:[],deploymentRef:"local.keycloak",title:"keycloak",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:10688,y:773,width:420,height:634,labelBBox:{x:6,y:0,width:66,height:15}},{id:"local.openbao",parent:"local",level:1,children:["local.openbao.openbao","local.openbao.agentInjector"],inEdges:["m2japo"],outEdges:[],deploymentRef:"local.openbao",title:"openbao",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:6558,y:79,width:420,height:995,labelBBox:{x:6,y:0,width:60,height:15}},{id:"local.fibonacci",parent:"local",level:1,children:["local.fibonacci.fibonacci"],inEdges:["4drflo"],outEdges:[],deploymentRef:"local.fibonacci",title:"fibonacci-app",kind:"namespace",color:"primary",shape:"rectangle",modelRef:"edp.testApp.fibonacci",tags:[],style:{opacity:15,size:"md"},depth:1,x:11158,y:791,width:384,height:265,labelBBox:{x:6,y:0,width:91,height:15}},{id:"local.mailhog",parent:"local",level:1,children:["local.mailhog.mailhog"],inEdges:["ihlgsc"],outEdges:[],deploymentRef:"local.mailhog",title:"mailhog",kind:"namespace",color:"primary",shape:"rectangle",modelRef:"edp.mailhog.mailhog",tags:[],style:{opacity:15,size:"md"},depth:1,x:11608,y:791,width:384,height:265,labelBBox:{x:6,y:0,width:56,height:15}},{id:"local.minio",parent:"local",level:1,children:["local.minio.minio"],inEdges:["3znaik","4ix58c"],outEdges:[],deploymentRef:"local.minio",title:"minio-backup",kind:"namespace",color:"primary",shape:"rectangle",modelRef:"edp.minio.minio",tags:[],style:{opacity:15,size:"md"},depth:1,x:12058,y:791,width:384,height:265,labelBBox:{x:6,y:0,width:86,height:15}},{id:"edgeProviderHost.terralist",parent:"edgeProviderHost",level:1,children:[],inEdges:["r4j4sg"],outEdges:["c8rye7"],deploymentRef:"edgeProviderHost.terralist",title:"Terralist",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",icon:"tech:terraform",description:{txt:"Terraform provider private hosting"},tags:[],style:{opacity:15,size:"md"},x:1181,y:497,width:350,height:180,labelBBox:{x:46,y:54,width:288,height:67}},{id:"edgeCloud.edgeApi",parent:"edgeCloud",level:1,children:[],inEdges:["lw6otg"],outEdges:["1toht4t"],deploymentRef:"edgeCloud.edgeApi",title:"Edge Cloud API",kind:"paas",technology:"Edge Cloud (managed)",links:[{url:"https://swagger.edge.platform.mg3.mdb.osc.live",title:"Documentation"}],color:"primary",shape:"rectangle",icon:"tech:swagger",tags:[],style:{opacity:15,size:"md"},x:703,y:844,width:320,height:180,labelBBox:{x:73,y:65,width:204,height:45}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure",parent:"otc-edpFoundry",level:1,children:[],inEdges:["llfvob","c2grk6"],outEdges:["r3wxut","e3benz","9r557q"],deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure",title:"EDP infrastructure Workflow",kind:"computeressource",color:"primary",shape:"rectangle",description:{txt:"EDP infrastructure Workflow"},tags:[],style:{opacity:15,size:"md"},x:3627,y:844,width:320,height:180,labelBBox:{x:32,y:63,width:255,height:48}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",parent:"otc-edpFoundry",level:1,children:[],inEdges:["fil3na","1ean8sr"],outEdges:["1sng0q0","rivecr"],deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",title:"EDP ArgoCD Workflow",kind:"computeressource",color:"primary",shape:"rectangle",description:{txt:"EDP Setup ArgoCD Workflow"},tags:[],style:{opacity:15,size:"md"},x:4077,y:844,width:320,height:180,labelBBox:{x:55,y:63,width:210,height:48}},{id:"otcTenantNonProd.otcTenantDev1",parent:"otcTenantNonProd",level:1,children:[],inEdges:["1ypat9q"],outEdges:[],deploymentRef:"otcTenantNonProd.otcTenantDev1",title:"dev1.t09.de",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Development Instance"},tags:[],style:{opacity:15,size:"md"},x:18492,y:497,width:320,height:180,labelBBox:{x:69,y:63,width:212,height:48}},{id:"otcTenantNonProd.otcTenantTestX",parent:"otcTenantNonProd",level:1,children:[],inEdges:["1oiku86"],outEdges:[],deploymentRef:"otcTenantNonProd.otcTenantTestX",title:"test-x.t09.de",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Testing Instance"},tags:[],style:{opacity:15,size:"md"},x:18942,y:497,width:320,height:180,labelBBox:{x:89,y:63,width:172,height:48}},{id:"local.backstage.backstage",parent:"local.backstage",level:2,children:[],inEdges:["15juth8"],outEdges:["19kg5y"],kind:"instance",title:"Backstage",tags:[],icon:"tech:react",color:"primary",shape:"browser",style:{opacity:15,size:"md"},deploymentRef:"local.backstage.backstage",modelRef:"edp.ui.backstage",x:8448,y:844,width:320,height:180,labelBBox:{x:97,y:74,width:156,height:24}},{id:"local.argocd.argocdAppController",parent:"local.argocd",level:2,children:[],inEdges:[],outEdges:["1gfgfhk"],kind:"instance",title:"ApplicationController",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.argocd.argocdAppController",modelRef:"edp.argoCD.argocdAppController",x:8918,y:844,width:320,height:180,labelBBox:{x:66,y:74,width:189,height:24}},{id:"local.argocd.argocdAppSetController",parent:"local.argocd",level:2,children:[],inEdges:[],outEdges:["qfu5xm"],kind:"instance",title:"ApplicationSeetController",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.argocd.argocdAppSetController",modelRef:"edp.argoCD.argocdAppSetController",x:9368,y:844,width:320,height:180,labelBBox:{x:45,y:74,width:230,height:24}},{id:"local.argocd.argocdRepoServer",parent:"local.argocd",level:2,children:[],inEdges:[],outEdges:["g7xnzs"],kind:"instance",title:"Repo Server",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.argocd.argocdRepoServer",modelRef:"edp.argoCD.argocdRepoServer",x:9818,y:844,width:320,height:180,labelBBox:{x:102,y:74,width:116,height:24}},{id:"local.argocd.argocdServer",parent:"local.argocd",level:2,children:[],inEdges:["p2br4p"],outEdges:["fon3rk"],kind:"instance",title:"ArgoCD Server",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.argocd.argocdServer",modelRef:"edp.argoCD.argocdServer",x:10268,y:844,width:320,height:180,labelBBox:{x:90,y:74,width:140,height:24}},{id:"local.keycloak.keycloak",parent:"local.keycloak",level:2,children:[],inEdges:["2vnvvg"],outEdges:["4zwy1m"],kind:"instance",title:"Keycloak",technology:"Java",tags:[],icon:"tech:java",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.keycloak.keycloak",modelRef:"edp.keycloak.keycloak",x:10738,y:844,width:320,height:180,labelBBox:{x:104,y:65,width:143,height:45}},{id:"local.monitoring.alloy",parent:"local.monitoring",level:2,children:[],inEdges:["1hr2s5j"],outEdges:["sb2j38"],kind:"instance",title:"Alloy",description:{txt:"Open Telemetry Collector"},tags:[],icon:"tech:grafana",color:"primary",shape:"rectangle",style:{opacity:15,size:"md",multiple:!0},deploymentRef:"local.monitoring.alloy",modelRef:"edp.monitoring.alloy",x:7528,y:844,width:320,height:180,labelBBox:{x:59,y:63,width:233,height:48}},{id:"local.monitoring.queryFrontend",parent:"local.monitoring",level:2,children:[],inEdges:["1nksp5g"],outEdges:[],kind:"instance",title:"Query Frontend",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.monitoring.queryFrontend",modelRef:"edp.monitoring.loki.queryFrontend",x:7978,y:844,width:320,height:180,labelBBox:{x:88,y:74,width:144,height:24}},{id:"local.openbao.openbao",parent:"local.openbao",level:2,children:[],inEdges:["m2japo"],outEdges:[],kind:"instance",title:"Openbao",technology:"Openbao",tags:[],color:"primary",shape:"storage",style:{opacity:15,size:"md"},deploymentRef:"local.openbao.openbao",modelRef:"edp.openbao.openbao",x:6608,y:844,width:320,height:180,labelBBox:{x:117,y:65,width:86,height:45}},{id:"local.openbao.agentInjector",parent:"local.openbao",level:2,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Agent Injector",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.openbao.agentInjector",modelRef:"edp.openbao.agentInjector",x:6608,y:150,width:320,height:180,labelBBox:{x:96,y:74,width:127,height:24}},{id:"local.fibonacci.fibonacci",parent:"local.fibonacci",level:2,children:[],inEdges:["4drflo"],outEdges:[],kind:"instance",title:"Fibonacci",technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.fibonacci.fibonacci",modelRef:"edp.testApp.fibonacci",x:11190,y:844,width:320,height:180,labelBBox:{x:101,y:65,width:148,height:45}},{id:"local.mailhog.mailhog",parent:"local.mailhog",level:2,children:[],inEdges:["ihlgsc"],outEdges:[],kind:"instance",title:"Mailhog",technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.mailhog.mailhog",modelRef:"edp.mailhog.mailhog",x:11640,y:844,width:320,height:180,labelBBox:{x:109,y:65,width:132,height:45}},{id:"local.minio.minio",parent:"local.minio",level:2,children:[],inEdges:["3znaik","4ix58c"],outEdges:[],kind:"instance",title:"S3 Blob Storage",technology:"Minio",tags:[],color:"primary",shape:"storage",style:{opacity:15,size:"md"},deploymentRef:"local.minio.minio",modelRef:"edp.minio.minio",x:12090,y:844,width:320,height:180,labelBBox:{x:85,y:65,width:150,height:45}},{id:"edgeProviderHost.edp",parent:"edgeProviderHost",level:1,children:[],inEdges:["u9omtf","14pfq5a","c8rye7"],outEdges:[],deploymentRef:"edgeProviderHost.edp",title:"Forgejo for all EDP-tenants",kind:"cluster",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",icon:"tech:git",tags:[],style:{opacity:15,size:"md"},description:{txt:"edp.buildth.ing"},technology:"Golang",navigateTo:"forgejo",x:1173,y:844,width:365,height:180,labelBBox:{x:46,y:54,width:304,height:67}},{id:"edgeCloud.edgeResources",parent:"edgeCloud",level:1,children:[],inEdges:["1toht4t"],outEdges:[],deploymentRef:"edgeCloud.edgeResources",title:"Edge Cloud Resources",kind:"paas",technology:"Edge Cloud (managed)",color:"primary",shape:"rectangle",description:{txt:"App, AppInstance, etc."},tags:[],style:{opacity:15,size:"md"},x:703,y:1177,width:320,height:180,labelBBox:{x:55,y:53,width:210,height:68}},{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:["r3wxut","1sng0q0","p2umm7","e3benz","126mt75"],outEdges:["b27cdb","1mbuxdd"],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. - - This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},tags:[],style:{opacity:15,size:"md"},depth:1,x:2913,y:79,width:442,height:1704,labelBBox:{x:6,y:0,width:181,height:15}},{id:"local.backstage.database",parent:"local.backstage",level:2,children:[],inEdges:["19kg5y"],outEdges:[],kind:"instance",title:"Database",technology:"Postgresql",tags:[],icon:"tech:postgresql",color:"primary",shape:"storage",style:{opacity:15,size:"md"},deploymentRef:"local.backstage.database",modelRef:"edp.ui.database",x:8448,y:1177,width:320,height:180,labelBBox:{x:101,y:64,width:148,height:46}},{id:"local.argocd.argocdRedis",parent:"local.argocd",level:2,children:[],inEdges:["1gfgfhk","qfu5xm","g7xnzs","fon3rk"],outEdges:[],kind:"instance",title:"Redis",technology:"Redis",tags:[],icon:"tech:redis",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.argocd.argocdRedis",modelRef:"edp.argoCD.argocdRedis",x:10043,y:1177,width:320,height:180,labelBBox:{x:119,y:64,width:113,height:46}},{id:"local.keycloak.keycloakDB",parent:"local.keycloak",level:2,children:[],inEdges:["4zwy1m"],outEdges:[],kind:"instance",title:"Database",technology:"Postgresql",tags:[],icon:"tech:postgresql",color:"primary",shape:"storage",style:{opacity:15,size:"md"},deploymentRef:"local.keycloak.keycloakDB",modelRef:"edp.keycloak.keycloakDB",x:10738,y:1177,width:320,height:180,labelBBox:{x:101,y:64,width:148,height:46}},{id:"local.monitoring.distributor",parent:"local.monitoring",level:2,children:[],inEdges:["sb2j38"],outEdges:[],kind:"instance",title:"Distributor",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.monitoring.distributor",modelRef:"edp.monitoring.loki.distributor",x:7528,y:1177,width:320,height:180,labelBBox:{x:112,y:74,width:95,height:24}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure",parent:"otc-edp-per-tenant",level:1,children:[],inEdges:["126mt75"],outEdges:["fkkf8y","1mbuxdd"],deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},technology:null,x:2963,y:150,width:342,height:180,labelBBox:{x:18,y:54,width:306,height:66}},{id:"otc-edp-per-tenant.cce",parent:"otc-edp-per-tenant",level:1,children:[],inEdges:["fkkf8y","r3wxut","1sng0q0","p2umm7"],outEdges:["pit45i","b27cdb"],deploymentRef:"otc-edp-per-tenant.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},x:2977,y:1177,width:327,height:180,labelBBox:{x:46,y:53,width:266,height:68}},{id:"otc-edp-per-tenant.cloudServices",parent:"otc-edp-per-tenant",level:1,children:[],inEdges:["pit45i","e3benz"],outEdges:[],deploymentRef:"otc-edp-per-tenant.cloudServices",title:"EDP Cloud Services",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",description:{txt:"EDP Cloud Services"},tags:[],style:{opacity:15,size:"md"},x:2963,y:1553,width:320,height:180,labelBBox:{x:67,y:53,width:185,height:67}},{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["1ogkmfn","b27cdb","1mbuxdd","9r557q","rivecr","1lrp92n","se5brg"],outEdges:["i6v3n","p2umm7","126mt75","c2grk6","1ean8sr","l1c2z3","1m1lj8s"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:1,x:4224,y:1500,width:384,height:265,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:[],inEdges:["1ogkmfn","b27cdb","1mbuxdd","9r557q","rivecr","1lrp92n","se5brg"],outEdges:["i6v3n","p2umm7","126mt75","c2grk6","1ean8sr","l1c2z3","1m1lj8s"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},x:4256,y:1553,width:320,height:180,labelBBox:{x:89,y:63,width:142,height:48}},{id:"local.gitea",parent:"local",level:1,children:["local.gitea.forgejo","local.gitea.forgejoRunner"],inEdges:["1m1lj8s","o229dq"],outEdges:["se5brg"],deploymentRef:"local.gitea",title:"gitea",kind:"namespace",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:12492,y:79,width:440,height:995,labelBBox:{x:6,y:0,width:38,height:15}},{id:"local.gitea.forgejo",parent:"local.gitea",level:2,children:[],inEdges:["o229dq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"local.gitea.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:12542,y:844,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"local.gitea.forgejoRunner",parent:"local.gitea",level:2,children:[],inEdges:["1m1lj8s"],outEdges:["se5brg"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.gitea.forgejoRunner",modelRef:"forgejoRunner",x:12542,y:150,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"local.spark.sparkoperator",parent:"local",level:1,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Spark Operator",technology:"Spark",tags:[],icon:"tech:spark",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.spark.sparkoperator",modelRef:"edp.spark.sparkoperator",x:17102,y:150,width:320,height:180,labelBBox:{x:76,y:65,width:198,height:45}}],edges:[{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[1035,330],[1021,352],[1007,374],[995,395],[977,425],[959,458],[943,489]],labelBBox:{x:996,y:395,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[1264,255],[1378,274],[1522,320],[1596,426],[1673,536],[1652,606],[1596,727],[1576,770],[1543,808],[1507,838]],labelBBox:{x:1647,y:576,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[1160,330],[1197,379],[1244,439],[1282,489]],labelBBox:{x:1225,y:395,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[1011,677],[1077,727],[1160,788],[1228,838]],labelBBox:{x:1125,y:742,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[884,677],[880,725],[875,785],[871,834]],labelBBox:{x:879,y:742,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"1ogkmfn",source:"edgeConnectEnv",target:"otcKubernetes.edpCluster",label:"[...]",points:[[5676,330],[5725,397],[5779,491],[5779,586],[5779,586],[5779,586],[5779,1268],[5779,1420],[5657,1426],[5518,1488],[5355,1561],[4853,1609],[4586,1630]],labelBBox:{x:5780,y:922,width:25,height:18},parent:null,relations:["18dtot7","1k6h7jf","15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"i6v3n",source:"otcKubernetes.edpCluster",target:"edgeConnectEnv",label:"runs workflows",points:[[4576,1629],[4742,1611],[5004,1565],[5205,1457],[5317,1397],[5420,1395],[5420,1268],[5420,586],[5420,586],[5420,586],[5420,495],[5470,404],[5517,338]],labelBBox:{x:5421,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"pit45i",source:"otc-edp-per-tenant.cce",target:"otc-edp-per-tenant.cloudServices",label:null,points:[[3134,1357],[3132,1391],[3130,1430],[3128,1465],[3127,1490],[3126,1518],[3125,1543]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9","15njmlz","hks76r","1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"b27cdb",source:"otc-edp-per-tenant.cce",target:"otcKubernetes.edpCluster",label:"register",points:[[3155,1357],[3167,1404],[3190,1457],[3232,1488],[3246,1498],[3370,1498],[3387,1500],[3691,1532],[4043,1584],[4246,1615]],labelBBox:{x:3233,y:1465,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"fkkf8y",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otc-edp-per-tenant.cce",label:"registers",points:[[3135,330],[3136,521],[3139,968],[3140,1167]],labelBBox:{x:3139,y:742,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"r3wxut",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cce",label:"deploys edp to otc.cce",points:[[3627,990],[3508,1031],[3363,1082],[3350,1089],[3311,1112],[3272,1142],[3239,1170]],labelBBox:{x:3351,y:1089,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"},{id:"1sng0q0",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otc-edp-per-tenant.cce",label:null,points:[[4112,1024],[4081,1043],[4046,1062],[4012,1074],[3755,1171],[3669,1110],[3403,1177],[3374,1184],[3344,1193],[3315,1203]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"p2umm7",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.cce",label:"runs workflows",points:[[4256,1627],[4014,1603],[3567,1552],[3420,1488],[3353,1459],[3287,1409],[3237,1364]],labelBBox:{x:3421,y:1465,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"e3benz",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[3627,949],[3366,976],[2865,1043],[2758,1177],[2681,1275],[2693,1351],[2758,1457],[2801,1527],[2880,1572],[2953,1599]],labelBBox:{x:2759,y:1255,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1mbuxdd",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[2963,245],[2782,254],[2493,287],[2269,395],[2154,451],[2054,459],[2054,586],[2054,586],[2054,586],[2054,1268],[2054,1395],[2152,1408],[2269,1457],[2374,1501],[3333,1496],[3387,1500],[3691,1523],[4043,1578],[4246,1612]],labelBBox:{x:2055,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"126mt75",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4256,1616],[4054,1584],[3696,1530],[3387,1500],[3294,1491],[3270,1493],[3177,1488],[3065,1481],[2774,1507],[2673,1457],[2486,1365],[2367,1310],[2367,1102],[2367,586],[2367,586],[2367,586],[2367,331],[2726,263],[2952,246]],labelBBox:{x:2368,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"llfvob",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"invokes",points:[[4113,677],[4050,727],[3972,788],[3908,838]],labelBBox:{x:4021,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"fil3na",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"invokes",points:[[4229,677],[4230,725],[4232,785],[4234,834]],labelBBox:{x:4233,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"109g3jm",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otc-edpFoundry.cce",label:"registers",points:[[4226,330],[4226,378],[4226,438],[4226,487]],labelBBox:{x:4227,y:395,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"9r557q",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[3725,1024],[3656,1136],[3565,1330],[3663,1457],[3734,1548],[4046,1600],[4246,1625]],labelBBox:{x:3664,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"c2grk6",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"runs workflows",points:[[4256,1580],[4193,1550],[4124,1509],[4071,1457],[3948,1335],[3864,1148],[3821,1034]],labelBBox:{x:4072,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"rivecr",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4298,1024],[4311,1045],[4324,1068],[4335,1089],[4408,1235],[4420,1428],[4420,1543]],labelBBox:{x:4419,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1ean8sr",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"runs workflows",points:[[4307,1553],[4281,1526],[4256,1493],[4241,1457],[4186,1319],[4200,1143],[4217,1034]],labelBBox:{x:4242,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1lrp92n",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4397,272],[4653,324],[5107,436],[5107,586],[5107,586],[5107,586],[5107,1268],[5107,1504],[4791,1592],[4586,1624]],labelBBox:{x:5108,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"l1c2z3",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4486,1553],[4498,1533],[4509,1510],[4516,1488],[4519,1478],[4516,1475],[4516,1465],[4505,1003],[4667,837],[4455,426],[4437,392],[4411,362],[4381,337]],labelBBox:{x:4566,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[1356,677],[1356,725],[1356,785],[1356,834]],labelBBox:{x:1357,y:742,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[863,1024],[863,1068],[863,1121],[863,1167]],labelBBox:{x:864,y:1089,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[18066,330],[18002,380],[17922,441],[17856,491]],labelBBox:{x:17972,y:395,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[18182,330],[18182,378],[18182,438],[18182,487]],labelBBox:{x:18183,y:395,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[18303,330],[18370,380],[18454,441],[18523,491]],labelBBox:{x:18418,y:395,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[18342,301],[18507,363],[18764,460],[18933,523]],labelBBox:{x:18643,y:395,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"},{id:"1m1lj8s",source:"otcKubernetes.edpCluster",target:"local.gitea.forgejoRunner",label:"runs workflows",points:[[4576,1640],[4990,1629],[6066,1572],[6066,1268],[6066,586],[6066,586],[6066,586],[6066,443],[6191,441],[6327,395],[6381,377],[8323,382],[8380,380],[9996,349],[11952,272],[12532,248]],labelBBox:{x:6067,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"19kg5y",source:"local.backstage.backstage",target:"local.backstage.database",label:"reads/writes",points:[[8608,1024],[8608,1068],[8608,1121],[8608,1166]],labelBBox:{x:8609,y:1089,width:79,height:18},parent:"local.backstage",relations:["c23sak"],color:"gray",line:"dashed",head:"normal"},{id:"1gfgfhk",source:"local.argocd.argocdAppController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9205,1024],[9236,1043],[9270,1061],[9303,1074],[9547,1172],[9848,1223],[10033,1248]],labelBBox:{x:9397,y:1089,width:65,height:18},parent:"local.argocd",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"qfu5xm",source:"local.argocd.argocdAppSetController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9665,1024],[9693,1042],[9724,1059],[9753,1074],[9844,1121],[9948,1166],[10034,1201]],labelBBox:{x:9826,y:1089,width:65,height:18},parent:"local.argocd",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"g7xnzs",source:"local.argocd.argocdRepoServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10038,1024],[10069,1069],[10106,1123],[10137,1169]],labelBBox:{x:10098,y:1089,width:65,height:18},parent:"local.argocd",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"fon3rk",source:"local.argocd.argocdServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10368,1024],[10337,1069],[10300,1123],[10269,1169]],labelBBox:{x:10323,y:1089,width:65,height:18},parent:"local.argocd",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"4zwy1m",source:"local.keycloak.keycloak",target:"local.keycloak.keycloakDB",label:"reads/writes",points:[[10898,1024],[10898,1068],[10898,1121],[10898,1166]],labelBBox:{x:10899,y:1089,width:79,height:18},parent:"local.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"},{id:"sb2j38",source:"local.monitoring.alloy",target:"local.monitoring.distributor",label:"pushes logs",points:[[7688,1024],[7688,1068],[7688,1121],[7688,1167]],labelBBox:{x:7689,y:1089,width:79,height:18},parent:"local.monitoring",relations:["11ollyi"],color:"gray",line:"dashed",head:"normal"},{id:"15juth8",source:"local.ingressNginx.ingressNginx",target:"local.backstage.backstage",label:"https",points:[[10543,677],[10519,697],[10491,716],[10462,727],[10345,772],[9461,762],[9336,765],[9308,766],[8862,765],[8836,773],[8793,787],[8751,812],[8715,839]],labelBBox:{x:10373,y:742,width:34,height:18},parent:"local",relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"p2br4p",source:"local.ingressNginx.ingressNginx",target:"local.argocd.argocdServer",label:"https",points:[[10575,677],[10547,726],[10513,786],[10484,836]],labelBBox:{x:10534,y:742,width:34,height:18},parent:"local",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"o229dq",source:"local.ingressNginx.ingressNginx",target:"local.gitea.forgejo",label:"https",points:[[10786,594],[11175,611],[12165,662],[12474,773],[12517,789],[12559,813],[12596,839]],labelBBox:{x:12450,y:742,width:34,height:18},parent:"local",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"2vnvvg",source:"local.ingressNginx.ingressNginx",target:"local.keycloak.keycloak",label:"https",points:[[10696,677],[10734,726],[10782,786],[10821,836]],labelBBox:{x:10763,y:742,width:34,height:18},parent:"local",relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"3znaik",source:"local.velero.velero",target:"local.minio.minio",label:"store backups",points:[[12250,677],[12250,725],[12250,784],[12250,833]],labelBBox:{x:12251,y:742,width:91,height:18},parent:"local",relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"4ix58c",source:"local.ingressNginx.ingressNginx",target:"local.minio.minio",label:"https",points:[[10786,600],[11103,624],[11801,686],[12024,773],[12064,789],[12104,814],[12139,839]],labelBBox:{x:11986,y:742,width:34,height:18},parent:"local",relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"1hr2s5j",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.alloy",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10197,827],[8182,685],[7913,773],[7871,787],[7829,812],[7794,838]],labelBBox:{x:10397,y:742,width:34,height:18},parent:"local",relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"1nksp5g",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.queryFrontend",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10244,810],[8587,701],[8366,773],[8323,787],[8281,812],[8245,839]],labelBBox:{x:10385,y:742,width:34,height:18},parent:"local",relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"m2japo",source:"local.ingressNginx.ingressNginx",target:"local.openbao.openbao",label:"https",points:[[10544,677],[10520,698],[10492,716],[10462,727],[10435,738],[8382,742],[8353,742],[8202,745],[7139,726],[6996,773],[6953,787],[6911,812],[6875,839]],labelBBox:{x:8354,y:742,width:34,height:18},parent:"local",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"4drflo",source:"local.ingressNginx.ingressNginx",target:"local.fibonacci.fibonacci",label:"https",points:[[10786,632],[10890,664],[11027,712],[11140,773],[11174,792],[11208,815],[11239,838]],labelBBox:{x:11115,y:742,width:34,height:18},parent:"local",relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"},{id:"ihlgsc",source:"local.ingressNginx.ingressNginx",target:"local.mailhog.mailhog",label:"https",points:[[10786,599],[10980,616],[11312,660],[11574,773],[11613,790],[11652,814],[11686,839]],labelBBox:{x:11551,y:742,width:34,height:18},parent:"local",relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"se5brg",source:"local.gitea.forgejoRunner",target:"otcKubernetes.edpCluster",label:"register",points:[[12542,246],[11564,274],[6425,428],[6425,586],[6425,586],[6425,586],[6425,1268],[6425,1411],[6297,1404],[6164,1457],[5880,1571],[4968,1620],[4586,1636]],labelBBox:{x:6426,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"edp-per-tenant":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/edp.c4",description:null,title:"EDP per tenant",id:"edp-per-tenant",autoLayout:{direction:"TB"},hash:"1767a1203e463aa5c6283c309b8414cd4b5d1b8f",bounds:{x:0,y:0,width:2010,height:1175},nodes:[{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. - - This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1994,height:1159,labelBBox:{x:6,y:0,width:181,height:15}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["1dcszi5"],deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:321,y:150,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edp-per-tenant.cce",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cce.edp"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:755,y:79,width:954,height:719,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edp-per-tenant.cce.edp",parent:"otc-edp-per-tenant.cce",level:2,children:["otc-edp-per-tenant.cce.edp.externalSecrets","otc-edp-per-tenant.cce.edp.ingressNginx","otc-edp-per-tenant.cce.edp.argoCD","otc-edp-per-tenant.cce.edp.forgejo"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce.edp",title:"EDP",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:787,y:132,width:890,height:634,labelBBox:{x:6,y:0,width:27,height:15}},{id:"otc-edp-per-tenant.cce.edp.externalSecrets",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:837,y:204,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:65}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edp-per-tenant.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["1dcszi5"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:353,y:204,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edp-per-tenant.cce.edp.ingressNginx",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:["1ir70dd","1kr1wg1"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:1287,y:204,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edp-per-tenant.cce.edp.argoCD",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1ir70dd"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:1307,y:536,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edp-per-tenant.cce.edp.forgejo",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1kr1wg1","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:837,y:536,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"otc-edp-per-tenant.cloudServices",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cloudServices.postgres","otc-edp-per-tenant.cloudServices.redis","otc-edp-per-tenant.cloudServices.objectstorage","otc-edp-per-tenant.cloudServices.elasticsearch"],inEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],outEdges:[],deploymentRef:"otc-edp-per-tenant.cloudServices",title:"EDP Cloud Services",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",description:{txt:"EDP Cloud Services"},tags:[],style:{opacity:15,size:"md"},depth:1,x:58,y:815,width:1894,height:302,labelBBox:{x:6,y:0,width:127,height:15}},{id:"otc-edp-per-tenant.cloudServices.postgres",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["8msu1q"],outEdges:[],kind:"instance",title:"PostgreSQL",description:{txt:`PostgreSQL is a powerful, open source object-relational database system. -It has more than 15 years of active development and a proven architecture -that has earned it a strong reputation for reliability, data integrity, -and correctness.`},technology:"PostgreSQL",tags:[],icon:"tech:postgresql",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.postgres",modelRef:"postgres",x:108,y:887,width:354,height:180,labelBBox:{x:46,y:17,width:292,height:139}},{id:"otc-edp-per-tenant.cloudServices.redis",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["120qe5o"],outEdges:[],kind:"instance",title:"Redis",description:{txt:"Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker."},technology:"Redis",tags:[],icon:"tech:redis",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.redis",modelRef:"redis",x:592,y:887,width:359,height:180,labelBBox:{x:47,y:26,width:297,height:121}},{id:"otc-edp-per-tenant.cloudServices.objectstorage",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["ealiax"],outEdges:[],kind:"instance",title:"s3 Object Storage",description:{txt:"s3 Object Storage"},technology:"S3 Object Storage",tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.objectstorage",modelRef:"objectstorage",x:1082,y:887,width:320,height:180,labelBBox:{x:78,y:53,width:164,height:67}},{id:"otc-edp-per-tenant.cloudServices.elasticsearch",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["1trj5u6"],outEdges:[],kind:"instance",title:"Elasticsearch",description:{txt:`Elasticsearch is a distributed, RESTful search and analytics engine capable of -addressing a growing number of use cases. It centrally stores your data so you can -discover the expected and uncover the unexpected.`},technology:"Elasticsearch",tags:[],icon:"tech:elasticsearch",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.elasticsearch",modelRef:"elasticsearch",x:1532,y:887,width:370,height:180,labelBBox:{x:46,y:17,width:308,height:139}}],edges:[{id:"1ir70dd",source:"otc-edp-per-tenant.cce.edp.ingressNginx",target:"otc-edp-per-tenant.cce.edp.argoCD",label:"https",points:[[1452,383],[1455,427],[1458,481],[1461,526]],labelBBox:{x:1459,y:448,width:34,height:18},parent:"otc-edp-per-tenant.cce.edp",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"1kr1wg1",source:"otc-edp-per-tenant.cce.edp.ingressNginx",target:"otc-edp-per-tenant.cce.edp.forgejo",label:"https",points:[[1329,383],[1268,429],[1195,484],[1133,530]],labelBBox:{x:1241,y:448,width:34,height:18},parent:"otc-edp-per-tenant.cce.edp",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"1dcszi5",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",target:"otc-edp-per-tenant.cce.edp.forgejo",label:"registers",points:[[646,383],[714,429],[797,485],[866,531]],labelBBox:{x:776,y:448,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"8msu1q",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.postgres",label:null,points:[[837,684],[743,718],[626,764],[527,815],[490,835],[452,858],[417,881]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["hks76r"],color:"gray",line:"dashed",head:"normal"},{id:"120qe5o",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.redis",label:null,points:[[947,716],[914,766],[872,827],[838,878]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"ealiax",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.objectstorage",label:null,points:[[1067,716],[1100,766],[1142,827],[1176,878]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["15njmlz"],color:"gray",line:"dashed",head:"normal"},{id:"1trj5u6",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.elasticsearch",label:null,points:[[1104,716],[1144,748],[1192,780],[1242,798],[1336,833],[1372,784],[1467,815],[1512,830],[1557,855],[1596,881]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9"],color:"gray",line:"dashed",head:"normal"}]},"edp-foundry-central-service":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/foundry.c4",description:null,title:"EDP Foundry Central Service",id:"edp-foundry-central-service",autoLayout:{direction:"TB"},hash:"8f8eb235b0e8ff555a22ed61d124ba68e67e5ee2",bounds:{x:0,y:0,width:3894,height:1218},nodes:[{id:"otc-edpFoundry",parent:null,level:0,children:["otc-edpFoundry.cce","otc-edpFoundry.forgejoRunnerInfrastructure","otc-edpFoundry.workflowSetupEDPInfrastructure","otc-edpFoundry.workflowSetupArgoCDInfrastructure"],inEdges:[],outEdges:[],deploymentRef:"otc-edpFoundry",title:"OTC EDP Foundry Central Service clusters",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. - -A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:3878,height:1202,labelBBox:{x:6,y:0,width:280,height:15}},{id:"otc-edpFoundry.cce",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.cce.internalServices","otc-edpFoundry.cce.centralObservability"],inEdges:["628xl1"],outEdges:["84397w","1oz2va9"],deploymentRef:"otc-edpFoundry.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:58,y:79,width:2360,height:755,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edpFoundry.cce.internalServices",parent:"otc-edpFoundry.cce",level:2,children:["otc-edpFoundry.cce.internalServices.externalSecrets","otc-edpFoundry.cce.internalServices.ingressNginx","otc-edpFoundry.cce.internalServices.argoCD","otc-edpFoundry.cce.internalServices.forgejo","otc-edpFoundry.cce.internalServices.openbao"],inEdges:["628xl1"],outEdges:["84397w","1oz2va9"],deploymentRef:"otc-edpFoundry.cce.internalServices",title:"EDP Foundry Internal Services",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:1028,y:150,width:1340,height:634,labelBBox:{x:6,y:0,width:201,height:15}},{id:"otc-edpFoundry.cce.internalServices.externalSecrets",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:1308,y:222,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:65}},{id:"otc-edpFoundry.cce.centralObservability",parent:"otc-edpFoundry.cce",level:2,children:["otc-edpFoundry.cce.centralObservability.grafana","otc-edpFoundry.cce.centralObservability.prometheus","otc-edpFoundry.cce.centralObservability.loki"],inEdges:[],outEdges:[],deploymentRef:"otc-edpFoundry.cce.centralObservability",title:"EDP Foundry Central Observability",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:108,y:150,width:870,height:634,labelBBox:{x:6,y:0,width:232,height:15}},{id:"otc-edpFoundry.forgejoRunnerInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["628xl1"],deploymentRef:"otc-edpFoundry.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"green",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:2468,y:168,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edpFoundry.cce.centralObservability.grafana",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:[],outEdges:["qykxlm","yv49z5"],kind:"instance",title:"Grafana",description:{txt:"Data visualization and monitoring"},tags:[],icon:"tech:grafana",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.grafana",modelRef:"edp.grafana",x:289,y:222,width:345,height:180,labelBBox:{x:47,y:63,width:283,height:47}},{id:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edpFoundry.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["628xl1"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:2500,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.cce.centralObservability.prometheus",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:["qykxlm"],outEdges:[],kind:"instance",title:"Prometheus",description:{txt:"Monitoring and alerting toolkit"},tags:[],icon:"tech:prometheus",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.prometheus",modelRef:"edp.prometheus",x:158,y:554,width:320,height:180,labelBBox:{x:46,y:63,width:258,height:48}},{id:"otc-edpFoundry.cce.centralObservability.loki",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:["yv49z5"],outEdges:[],kind:"instance",title:"Loki",description:{txt:"Log aggregation system"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.loki",modelRef:"edp.loki",x:608,y:554,width:320,height:180,labelBBox:{x:78,y:63,width:164,height:48}},{id:"otc-edpFoundry.cce.internalServices.ingressNginx",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:[],outEdges:["17kru01","170pc3l","u5oqat"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:1988,y:222,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edpFoundry.cce.internalServices.argoCD",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["17kru01"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:1078,y:554,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edpFoundry.cce.internalServices.forgejo",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["170pc3l","628xl1"],outEdges:["84397w","1oz2va9"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:1978,y:554,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"otc-edpFoundry.cce.internalServices.openbao",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["u5oqat"],outEdges:[],kind:"instance",title:"OpenBao",description:{txt:"Secure secret storage"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.openbao",modelRef:"edp.openbao",x:1528,y:554,width:320,height:180,labelBBox:{x:85,y:63,width:151,height:48}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner","otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker","otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"],inEdges:["84397w"],outEdges:[],deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure",title:"EDP infrastructure Workflow",kind:"computeressource",color:"amber",shape:"rectangle",description:{txt:"EDP infrastructure Workflow"},tags:[],style:{opacity:15,size:"md"},depth:1,x:2902,y:150,width:442,height:1010,labelBBox:{x:6,y:0,width:201,height:15}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner","otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker","otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"],inEdges:["1oz2va9"],outEdges:[],deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",title:"EDP ArgoCD Workflow",kind:"computeressource",color:"amber",shape:"rectangle",description:{txt:"EDP Setup ArgoCD Workflow"},tags:[],style:{opacity:15,size:"md"},depth:1,x:3394,y:150,width:442,height:1010,labelBBox:{x:6,y:0,width:149,height:15}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["84397w"],outEdges:["1hnil62"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:2961,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["1oz2va9"],outEdges:["1gtxobu"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:3466,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["1hnil62"],outEdges:["ekzztw"],kind:"instance",title:"Forgejo Runner Worker",description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",modelRef:"forgejoRunnerWorker",x:2954,y:554,width:333,height:180,labelBBox:{x:18,y:45,width:297,height:84}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["1gtxobu"],outEdges:["b9ntr8"],kind:"instance",title:"Forgejo Runner Worker",description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",modelRef:"forgejoRunnerWorker",x:3452,y:554,width:333,height:180,labelBBox:{x:18,y:45,width:297,height:84}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["ekzztw"],outEdges:[],kind:"instance",title:"EDP Infrastructure Setup Workflow",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",modelRef:"edpworkflow",x:2952,y:930,width:342,height:180,labelBBox:{x:14,y:74,width:314,height:24}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["b9ntr8"],outEdges:[],kind:"instance",title:"EDP Infrastructure Setup Workflow",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",modelRef:"edpworkflow",x:3444,y:930,width:342,height:180,labelBBox:{x:14,y:74,width:314,height:24}}],edges:[{id:"17kru01",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.argoCD",label:"https",points:[[1988,367],[1849,415],[1642,487],[1463,554],[1445,561],[1426,568],[1408,576]],labelBBox:{x:1689,y:466,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"170pc3l",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.forgejo",label:"https",points:[[2148,401],[2148,445],[2148,499],[2148,544]],labelBBox:{x:2149,y:466,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"u5oqat",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.openbao",label:"https",points:[[2024,401],[1961,447],[1884,502],[1820,549]],labelBBox:{x:1933,y:466,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"qykxlm",source:"otc-edpFoundry.cce.centralObservability.grafana",target:"otc-edpFoundry.cce.centralObservability.prometheus",label:"get metrics and alerts",points:[[423,401],[404,446],[381,499],[361,545]],labelBBox:{x:395,y:466,width:138,height:18},parent:"otc-edpFoundry.cce.centralObservability",relations:["13uvtiq"],color:"gray",line:"dashed",head:"normal"},{id:"yv49z5",source:"otc-edpFoundry.cce.centralObservability.grafana",target:"otc-edpFoundry.cce.centralObservability.loki",label:"get logs",points:[[544,401],[586,446],[636,501],[679,547]],labelBBox:{x:625,y:466,width:53,height:18},parent:"otc-edpFoundry.cce.centralObservability",relations:["1n1utzc"],color:"gray",line:"dashed",head:"normal"},{id:"84397w",source:"otc-edpFoundry.cce.internalServices.forgejo",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",label:"invokes",points:[[2318,605],[2470,568],[2695,508],[2884,434],[2906,425],[2929,415],[2952,404]],labelBBox:{x:2787,y:466,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"1hnil62",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",label:"runs",points:[[3121,401],[3121,445],[3121,499],[3121,544]],labelBBox:{x:3122,y:466,width:31,height:18},parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",relations:["7kqly3"],color:"gray",line:"dashed",head:"normal"},{id:"ekzztw",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",label:"executes",points:[[3121,734],[3122,790],[3122,862],[3122,920]],labelBBox:{x:3123,y:842,width:60,height:18},parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",relations:["12hf1w4"],color:"gray",line:"dashed",head:"normal"},{id:"1oz2va9",source:"otc-edpFoundry.cce.internalServices.forgejo",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",label:"invokes",points:[[2318,622],[2654,581],[3370,492],[3376,489],[3426,470],[3475,439],[3517,408]],labelBBox:{x:3422,y:466,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"1gtxobu",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",label:"runs",points:[[3624,401],[3623,445],[3622,499],[3621,544]],labelBBox:{x:3624,y:466,width:31,height:18},parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",relations:["hqie0"],color:"gray",line:"dashed",head:"normal"},{id:"b9ntr8",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",label:"executes",points:[[3618,734],[3617,790],[3617,862],[3616,920]],labelBBox:{x:3618,y:842,width:60,height:18},parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",relations:["1j16hqv"],color:"gray",line:"dashed",head:"normal"},{id:"628xl1",source:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",target:"otc-edpFoundry.cce.internalServices.forgejo",label:"registers",points:[[2522,401],[2452,447],[2366,503],[2294,549]],labelBBox:{x:2420,y:466,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"}]},"forgejo-as-a-service":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/foundry-and-edp.c4",description:null,title:"Forgejo as a Service",id:"forgejo-as-a-service",autoLayout:{direction:"TB"},hash:"7a905e08830b8bdb7ac1b61e8977611bb4f29345",bounds:{x:0,y:0,width:5468,height:1994},nodes:[{id:"otc-edpFoundry",parent:null,level:0,children:["otc-edpFoundry.cce","otc-edpFoundry.forgejoRunnerInfrastructure","otc-edpFoundry.workflowSetupEDPInfrastructure","otc-edpFoundry.workflowSetupArgoCDInfrastructure"],inEdges:[],outEdges:["1asm38z","1or831y","ejqwjt"],deploymentRef:"otc-edpFoundry",title:"OTC EDP Foundry Central Service clusters",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. - -A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},tags:[],style:{opacity:15,size:"md"},depth:3,x:2052,y:8,width:3408,height:1609,labelBBox:{x:6,y:0,width:280,height:15}},{id:"otc-edpFoundry.cce",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.cce.internalServices","otc-edpFoundry.cce.centralObservability"],inEdges:["628xl1"],outEdges:["84397w","1oz2va9"],deploymentRef:"otc-edpFoundry.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:2594,y:79,width:1890,height:1488,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edpFoundry.cce.internalServices",parent:"otc-edpFoundry.cce",level:2,children:["otc-edpFoundry.cce.internalServices.externalSecrets","otc-edpFoundry.cce.internalServices.ingressNginx","otc-edpFoundry.cce.internalServices.argoCD","otc-edpFoundry.cce.internalServices.forgejo","otc-edpFoundry.cce.internalServices.openbao"],inEdges:["628xl1"],outEdges:["84397w","1oz2va9"],deploymentRef:"otc-edpFoundry.cce.internalServices",title:"EDP Foundry Internal Services",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:2644,y:883,width:1790,height:634,labelBBox:{x:6,y:0,width:201,height:15}},{id:"otc-edpFoundry.cce.internalServices.externalSecrets",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:2694,y:1287,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:66}},{id:"otc-edpFoundry.cce.centralObservability",parent:"otc-edpFoundry.cce",level:2,children:["otc-edpFoundry.cce.centralObservability.grafana","otc-edpFoundry.cce.centralObservability.prometheus","otc-edpFoundry.cce.centralObservability.loki"],inEdges:[],outEdges:[],deploymentRef:"otc-edpFoundry.cce.centralObservability",title:"EDP Foundry Central Observability",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:3349,y:150,width:870,height:634,labelBBox:{x:6,y:0,width:232,height:15}},{id:"otc-edpFoundry.forgejoRunnerInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["628xl1"],deploymentRef:"otc-edpFoundry.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"green",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:5026,y:168,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:["1asm38z","1or831y","ejqwjt"],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. - - This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:97,width:1994,height:1889,labelBBox:{x:6,y:0,width:181,height:15}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["1dcszi5"],deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:608,y:168,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edpFoundry.cce.centralObservability.grafana",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:[],outEdges:["qykxlm","yv49z5"],kind:"instance",title:"Grafana",description:{txt:"Data visualization and monitoring"},tags:[],icon:"tech:grafana",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.grafana",modelRef:"edp.grafana",x:3530,y:222,width:345,height:180,labelBBox:{x:47,y:63,width:283,height:47}},{id:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edpFoundry.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["628xl1"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:5058,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edp-per-tenant.cce",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cce.edp"],inEdges:["1or831y","ejqwjt","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:548,y:830,width:1404,height:719,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edp-per-tenant.cce.edp",parent:"otc-edp-per-tenant.cce",level:2,children:["otc-edp-per-tenant.cce.edp.externalSecrets","otc-edp-per-tenant.cce.edp.ingressNginx","otc-edp-per-tenant.cce.edp.argoCD","otc-edp-per-tenant.cce.edp.forgejo"],inEdges:["1or831y","ejqwjt","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce.edp",title:"EDP",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:580,y:883,width:1340,height:634,labelBBox:{x:6,y:0,width:27,height:15}},{id:"otc-edp-per-tenant.cce.edp.externalSecrets",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:1550,y:1287,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:66}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edp-per-tenant.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["1dcszi5"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:640,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.cce.centralObservability.prometheus",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:["qykxlm"],outEdges:[],kind:"instance",title:"Prometheus",description:{txt:"Monitoring and alerting toolkit"},tags:[],icon:"tech:prometheus",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.prometheus",modelRef:"edp.prometheus",x:3399,y:554,width:320,height:180,labelBBox:{x:46,y:63,width:258,height:48}},{id:"otc-edpFoundry.cce.centralObservability.loki",parent:"otc-edpFoundry.cce.centralObservability",level:3,children:[],inEdges:["yv49z5"],outEdges:[],kind:"instance",title:"Loki",description:{txt:"Log aggregation system"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.centralObservability.loki",modelRef:"edp.loki",x:3849,y:554,width:320,height:180,labelBBox:{x:78,y:63,width:164,height:48}},{id:"otc-edpFoundry.cce.internalServices.ingressNginx",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:[],outEdges:["17kru01","170pc3l","u5oqat"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:4054,y:955,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edpFoundry.cce.internalServices.argoCD",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["17kru01"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:3144,y:1287,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edpFoundry.cce.internalServices.forgejo",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["170pc3l","628xl1"],outEdges:["84397w","1oz2va9"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:4044,y:1287,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"otc-edpFoundry.cce.internalServices.openbao",parent:"otc-edpFoundry.cce.internalServices",level:3,children:[],inEdges:["u5oqat"],outEdges:[],kind:"instance",title:"OpenBao",description:{txt:"Secure secret storage"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edpFoundry.cce.internalServices.openbao",modelRef:"edp.openbao",x:3594,y:1287,width:320,height:180,labelBBox:{x:85,y:63,width:151,height:48}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner","otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker","otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"],inEdges:["84397w"],outEdges:["1asm38z","1or831y"],deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure",title:"EDP infrastructure Workflow",kind:"computeressource",color:"amber",shape:"rectangle",description:{txt:"EDP infrastructure Workflow"},tags:[],style:{opacity:15,size:"md"},depth:1,x:4534,y:150,width:442,height:1035,labelBBox:{x:6,y:0,width:201,height:15}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",parent:"otc-edpFoundry",level:1,children:["otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner","otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker","otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"],inEdges:["1oz2va9"],outEdges:["ejqwjt"],deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",title:"EDP ArgoCD Workflow",kind:"computeressource",color:"amber",shape:"rectangle",description:{txt:"EDP Setup ArgoCD Workflow"},tags:[],style:{opacity:15,size:"md"},depth:1,x:2102,y:150,width:442,height:1035,labelBBox:{x:6,y:0,width:149,height:15}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["84397w"],outEdges:["1hnil62"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:4595,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["1oz2va9"],outEdges:["1gtxobu"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:2163,y:222,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["1hnil62"],outEdges:["ekzztw"],kind:"instance",title:"Forgejo Runner Worker",description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",modelRef:"forgejoRunnerWorker",x:4588,y:554,width:333,height:180,labelBBox:{x:18,y:45,width:297,height:84}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["1gtxobu"],outEdges:["b9ntr8"],kind:"instance",title:"Forgejo Runner Worker",description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",modelRef:"forgejoRunnerWorker",x:2156,y:554,width:333,height:180,labelBBox:{x:18,y:45,width:297,height:84}},{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",level:2,children:[],inEdges:["ekzztw"],outEdges:["1asm38z","1or831y"],kind:"instance",title:"EDP Infrastructure Setup Workflow",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",modelRef:"edpworkflow",x:4584,y:955,width:342,height:180,labelBBox:{x:14,y:74,width:314,height:24}},{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",level:2,children:[],inEdges:["b9ntr8"],outEdges:["ejqwjt"],kind:"instance",title:"EDP Infrastructure Setup Workflow",tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",modelRef:"edpworkflow",x:2152,y:955,width:342,height:180,labelBBox:{x:14,y:74,width:314,height:24}},{id:"otc-edp-per-tenant.cce.edp.ingressNginx",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:["1ir70dd","1kr1wg1"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:1100,y:955,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edp-per-tenant.cce.edp.argoCD",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["ejqwjt","1ir70dd"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:1100,y:1287,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edp-per-tenant.cce.edp.forgejo",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1kr1wg1","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:630,y:1287,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"otc-edp-per-tenant.cloudServices",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cloudServices.postgres","otc-edp-per-tenant.cloudServices.redis","otc-edp-per-tenant.cloudServices.objectstorage","otc-edp-per-tenant.cloudServices.elasticsearch"],inEdges:["1asm38z","8msu1q","120qe5o","ealiax","1trj5u6"],outEdges:[],deploymentRef:"otc-edp-per-tenant.cloudServices",title:"EDP Cloud Services",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",description:{txt:"EDP Cloud Services"},tags:[],style:{opacity:15,size:"md"},depth:1,x:58,y:1634,width:1894,height:302,labelBBox:{x:6,y:0,width:127,height:15}},{id:"otc-edp-per-tenant.cloudServices.postgres",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["8msu1q"],outEdges:[],kind:"instance",title:"PostgreSQL",description:{txt:`PostgreSQL is a powerful, open source object-relational database system. -It has more than 15 years of active development and a proven architecture -that has earned it a strong reputation for reliability, data integrity, -and correctness.`},technology:"PostgreSQL",tags:[],icon:"tech:postgresql",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.postgres",modelRef:"postgres",x:1548,y:1706,width:354,height:180,labelBBox:{x:46,y:17,width:292,height:139}},{id:"otc-edp-per-tenant.cloudServices.redis",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["120qe5o"],outEdges:[],kind:"instance",title:"Redis",description:{txt:"Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker."},technology:"Redis",tags:[],icon:"tech:redis",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.redis",modelRef:"redis",x:608,y:1706,width:359,height:180,labelBBox:{x:47,y:26,width:297,height:121}},{id:"otc-edp-per-tenant.cloudServices.objectstorage",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["ealiax"],outEdges:[],kind:"instance",title:"s3 Object Storage",description:{txt:"s3 Object Storage"},technology:"S3 Object Storage",tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.objectstorage",modelRef:"objectstorage",x:1098,y:1706,width:320,height:180,labelBBox:{x:78,y:53,width:164,height:67}},{id:"otc-edp-per-tenant.cloudServices.elasticsearch",parent:"otc-edp-per-tenant.cloudServices",level:2,children:[],inEdges:["1trj5u6"],outEdges:[],kind:"instance",title:"Elasticsearch",description:{txt:`Elasticsearch is a distributed, RESTful search and analytics engine capable of -addressing a growing number of use cases. It centrally stores your data so you can -discover the expected and uncover the unexpected.`},technology:"Elasticsearch",tags:[],icon:"tech:elasticsearch",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cloudServices.elasticsearch",modelRef:"elasticsearch",x:108,y:1706,width:370,height:180,labelBBox:{x:46,y:17,width:308,height:139}}],edges:[{id:"17kru01",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.argoCD",label:"https",points:[[4054,1100],[3915,1148],[3708,1220],[3529,1287],[3511,1294],[3492,1301],[3474,1309]],labelBBox:{x:3755,y:1199,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"170pc3l",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.forgejo",label:"https",points:[[4214,1134],[4214,1178],[4214,1232],[4214,1277]],labelBBox:{x:4215,y:1199,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"u5oqat",source:"otc-edpFoundry.cce.internalServices.ingressNginx",target:"otc-edpFoundry.cce.internalServices.openbao",label:"https",points:[[4090,1134],[4027,1180],[3950,1235],[3886,1282]],labelBBox:{x:3999,y:1199,width:34,height:18},parent:"otc-edpFoundry.cce.internalServices",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"qykxlm",source:"otc-edpFoundry.cce.centralObservability.grafana",target:"otc-edpFoundry.cce.centralObservability.prometheus",label:"get metrics and alerts",points:[[3664,401],[3645,446],[3622,499],[3602,545]],labelBBox:{x:3636,y:466,width:138,height:18},parent:"otc-edpFoundry.cce.centralObservability",relations:["13uvtiq"],color:"gray",line:"dashed",head:"normal"},{id:"yv49z5",source:"otc-edpFoundry.cce.centralObservability.grafana",target:"otc-edpFoundry.cce.centralObservability.loki",label:"get logs",points:[[3785,401],[3827,446],[3877,501],[3920,547]],labelBBox:{x:3866,y:466,width:53,height:18},parent:"otc-edpFoundry.cce.centralObservability",relations:["1n1utzc"],color:"gray",line:"dashed",head:"normal"},{id:"84397w",source:"otc-edpFoundry.cce.internalServices.forgejo",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",label:"invokes",points:[[4384,1359],[4590,1333],[4917,1279],[4991,1185],[5006,1165],[5006,601],[4987,554],[4964,499],[4922,448],[4880,408]],labelBBox:{x:5002,y:799,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"1hnil62",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",label:"runs",points:[[4755,401],[4755,445],[4755,499],[4755,544]],labelBBox:{x:4756,y:466,width:31,height:18},parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",relations:["7kqly3"],color:"gray",line:"dashed",head:"normal"},{id:"ekzztw",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",target:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",label:"executes",points:[[4755,734],[4755,797],[4755,880],[4755,944]],labelBBox:{x:4756,y:799,width:60,height:18},parent:"otc-edpFoundry.workflowSetupEDPInfrastructure",relations:["12hf1w4"],color:"gray",line:"dashed",head:"normal"},{id:"1oz2va9",source:"otc-edpFoundry.cce.internalServices.forgejo",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",label:"invokes",points:[[4044,1309],[4022,1301],[4e3,1294],[3979,1287],[3850,1249],[3808,1275],[3684,1222],[3176,1006],[2655,594],[2433,408]],labelBBox:{x:2970,y:799,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"1gtxobu",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",label:"runs",points:[[2323,401],[2323,445],[2323,499],[2323,544]],labelBBox:{x:2324,y:466,width:31,height:18},parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",relations:["hqie0"],color:"gray",line:"dashed",head:"normal"},{id:"b9ntr8",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",label:"executes",points:[[2323,734],[2323,797],[2323,880],[2323,944]],labelBBox:{x:2324,y:799,width:60,height:18},parent:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",relations:["1j16hqv"],color:"gray",line:"dashed",head:"normal"},{id:"628xl1",source:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",target:"otc-edpFoundry.cce.internalServices.forgejo",label:"registers",points:[[5231,401],[5255,597],[5278,1062],[4995,1222],[4808,1328],[4561,1362],[4395,1373]],labelBBox:{x:5232,y:799,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"ejqwjt",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",target:"otc-edp-per-tenant.cce.edp.argoCD",label:null,points:[[2152,1115],[2090,1139],[2018,1165],[1952,1185],[1748,1245],[1688,1225],[1485,1287],[1467,1293],[1448,1299],[1430,1306]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"1ir70dd",source:"otc-edp-per-tenant.cce.edp.ingressNginx",target:"otc-edp-per-tenant.cce.edp.argoCD",label:"https",points:[[1260,1134],[1260,1178],[1260,1232],[1260,1277]],labelBBox:{x:1261,y:1199,width:34,height:18},parent:"otc-edp-per-tenant.cce.edp",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"1kr1wg1",source:"otc-edp-per-tenant.cce.edp.ingressNginx",target:"otc-edp-per-tenant.cce.edp.forgejo",label:"https",points:[[1136,1134],[1073,1180],[996,1235],[932,1282]],labelBBox:{x:1045,y:1199,width:34,height:18},parent:"otc-edp-per-tenant.cce.edp",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"1dcszi5",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",target:"otc-edp-per-tenant.cce.edp.forgejo",label:"registers",points:[[800,401],[800,598],[800,1070],[800,1277]],labelBBox:{x:801,y:799,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"8msu1q",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.postgres",label:null,points:[[860,1467],[902,1521],[963,1586],[1035,1617],[1081,1638],[1436,1619],[1483,1634],[1527,1649],[1571,1674],[1610,1700]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["hks76r"],color:"gray",line:"dashed",head:"normal"},{id:"120qe5o",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.redis",label:null,points:[[797,1467],[796,1534],[793,1626],[791,1695]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"ealiax",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.objectstorage",label:null,points:[[882,1467],[926,1513],[982,1570],[1035,1617],[1066,1645],[1100,1673],[1132,1699]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["15njmlz"],color:"gray",line:"dashed",head:"normal"},{id:"1trj5u6",source:"otc-edp-per-tenant.cce.edp.forgejo",target:"otc-edp-per-tenant.cloudServices.elasticsearch",label:null,points:[[692,1467],[609,1535],[495,1629],[410,1699]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9"],color:"gray",line:"dashed",head:"normal"},{id:"1asm38z",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[4739,1134],[4709,1265],[4634,1506],[4466,1617],[4260,1754],[2590,1785],[1962,1793]],labelBBox:{x:3219,y:1730,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1or831y",source:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",target:"otc-edp-per-tenant.cce.edp",label:"deploys edp to otc.cce",points:[[4602,1134],[4559,1155],[4512,1174],[4466,1185],[4366,1208],[2714,1189],[2612,1200],[2377,1223],[2112,1279],[1930,1321]],labelBBox:{x:3117,y:1173,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"}]},"otc-faas":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/otc-faas.c4",description:null,title:"OTC Prototype FaaS",id:"otc-faas",autoLayout:{direction:"TB"},hash:"e2904f0dec8c25765884ff1970493408959739a3",bounds:{x:0,y:0,width:2086,height:802},nodes:[{id:"otc-faas",parent:null,level:0,children:["otc-faas.dev","otc-faas.prod"],inEdges:[],outEdges:[],deploymentRef:"otc-faas",title:"OTC prototype FaaS",kind:"cloud",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:"OTC environments for Prototype FaaS."},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:2070,height:786,labelBBox:{x:6,y:0,width:131,height:15}},{id:"otc-faas.dev",parent:"otc-faas",level:1,children:["otc-faas.dev.cce","otc-faas.dev.observability","otc-faas.dev.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-faas.dev",title:"tenant Dev",kind:"environment",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:"*.t09.de"},tags:[],style:{opacity:15,size:"md"},depth:2,x:58,y:79,width:972,height:665,labelBBox:{x:6,y:0,width:74,height:15}},{id:"otc-faas.dev.cce",parent:"otc-faas.dev",level:2,children:["otc-faas.dev.cce.edp"],inEdges:[],outEdges:["p747qx"],deploymentRef:"otc-faas.dev.cce",title:"Central Forgejo",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",icon:"tech:kubernetes",description:{txt:"*.t09.de"},tags:[],style:{opacity:15,size:"md"},depth:1,navigateTo:"forgejo",x:108,y:150,width:454,height:266,labelBBox:{x:6,y:0,width:113,height:15}},{id:"otc-faas.dev.observability",parent:"otc-faas.dev",level:2,children:[],inEdges:[],outEdges:[],deploymentRef:"otc-faas.dev.observability",title:"Observability",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"*.t09.de"},tags:[],style:{opacity:15,size:"md"},x:660,y:204,width:320,height:180,labelBBox:{x:86,y:53,width:178,height:67}},{id:"otc-faas.prod",parent:"otc-faas",level:1,children:["otc-faas.prod.cce","otc-faas.prod.observability","otc-faas.prod.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-faas.prod",title:"Tenant Prod",kind:"environment",technology:"OTC",color:"primary",shape:"rectangle",description:{txt:"*.buildth.ing"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1080,y:79,width:948,height:665,labelBBox:{x:6,y:0,width:83,height:15}},{id:"otc-faas.prod.cce",parent:"otc-faas.prod",level:2,children:["otc-faas.prod.cce.edp"],inEdges:[],outEdges:["tb8sk9"],deploymentRef:"otc-faas.prod.cce",title:"Central Forgejo",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",icon:"tech:kubernetes",description:{txt:"*.buildth.ing"},tags:[],style:{opacity:15,size:"md"},depth:1,navigateTo:"forgejo",x:1130,y:150,width:430,height:266,labelBBox:{x:6,y:0,width:113,height:15}},{id:"otc-faas.dev.cce.edp",parent:"otc-faas.dev.cce",level:3,children:[],inEdges:[],outEdges:["p747qx"],deploymentRef:"otc-faas.dev.cce.edp",title:"Forgejo Dev for platform team",kind:"cluster",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",description:{txt:"t09.de"},tags:[],style:{opacity:15,size:"md"},technology:"Golang",icon:"tech:go",navigateTo:"forgejo",x:140,y:204,width:389,height:180,labelBBox:{x:46,y:53,width:328,height:67}},{id:"otc-faas.prod.observability",parent:"otc-faas.prod",level:2,children:[],inEdges:[],outEdges:[],deploymentRef:"otc-faas.prod.observability",title:"Observability",kind:"kubernetes",technology:"Kubernetes",color:"primary",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"*.buildth.ing"},tags:[],style:{opacity:15,size:"md"},x:1658,y:204,width:320,height:180,labelBBox:{x:86,y:53,width:178,height:67}},{id:"otc-faas.prod.cce.edp",parent:"otc-faas.prod.cce",level:3,children:[],inEdges:[],outEdges:["tb8sk9"],deploymentRef:"otc-faas.prod.cce.edp",title:"Forgejo for all EDP-tenants",kind:"cluster",color:"primary",shape:"rectangle",modelRef:"edp.forgejo",tags:[],style:{opacity:15,size:"md"},description:{txt:"buildth.ing"},technology:"Golang",icon:"tech:go",navigateTo:"forgejo",x:1162,y:204,width:365,height:180,labelBBox:{x:46,y:53,width:304,height:67}},{id:"otc-faas.dev.cloudServices",parent:"otc-faas.dev",level:2,children:[],inEdges:["p747qx"],outEdges:[],deploymentRef:"otc-faas.dev.cloudServices",title:"EDP Cloud Services",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},tags:[],style:{opacity:15,size:"md"},x:171,y:514,width:328,height:180,labelBBox:{x:18,y:53,width:292,height:67}},{id:"otc-faas.prod.cloudServices",parent:"otc-faas.prod",level:2,children:[],inEdges:["tb8sk9"],outEdges:[],deploymentRef:"otc-faas.prod.cloudServices",title:"EDP Cloud Services",kind:"paas",technology:"Cloud Services",color:"primary",shape:"rectangle",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},tags:[],style:{opacity:15,size:"md"},x:1181,y:514,width:328,height:180,labelBBox:{x:18,y:53,width:292,height:67}}],edges:[{id:"p747qx",source:"otc-faas.dev.cce.edp",target:"otc-faas.dev.cloudServices",label:null,points:[[335,383],[335,421],[335,465],[335,504]],labelBBox:null,parent:"otc-faas.dev",relations:["dz2rdn"],color:"gray",line:"dashed",head:"normal"},{id:"tb8sk9",source:"otc-faas.prod.cce.edp",target:"otc-faas.prod.cloudServices",label:null,points:[[1345,383],[1345,421],[1345,465],[1345,504]],labelBBox:null,parent:"otc-faas.prod",relations:["2shw6y"],color:"gray",line:"dashed",head:"normal"}]},otcTenants:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/otc-tenants.c4",description:null,title:"OTC tenants",id:"otcTenants",autoLayout:{direction:"TB"},hash:"add46ec8104dd3bb1ee71380040278f665c245c2",bounds:{x:0,y:0,width:1806,height:664},nodes:[{id:"otcTenantProd",parent:null,level:0,children:["otcTenantProd.otcTenantEdpBuildthing","otcTenantProd.otcTenantObservability","otcTenantProd.otcTenantCustomerA"],inEdges:[],outEdges:["1ypat9q","1oiku86"],deploymentRef:"otcTenantProd",title:"Prod - builth.ing",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:8,y:8,width:870,height:648,labelBBox:{x:6,y:0,width:108,height:15}},{id:"otcTenantProd.otcTenantEdpBuildthing",parent:"otcTenantProd",level:1,children:[],inEdges:[],outEdges:["rj56uy","u7ohgi","1ypat9q","1oiku86"],deploymentRef:"otcTenantProd.otcTenantEdpBuildthing",title:"edp.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Primary Instance"},tags:[],style:{opacity:15,size:"md"},x:508,y:79,width:320,height:180,labelBBox:{x:85,y:63,width:181,height:48}},{id:"otcTenantProd.otcTenantObservability",parent:"otcTenantProd",level:1,children:[],inEdges:["rj56uy"],outEdges:[],deploymentRef:"otcTenantProd.otcTenantObservability",title:"observability.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Observability Instance"},tags:[],style:{opacity:15,size:"md"},x:58,y:426,width:320,height:180,labelBBox:{x:46,y:63,width:258,height:48}},{id:"otcTenantProd.otcTenantCustomerA",parent:"otcTenantProd",level:1,children:[],inEdges:["u7ohgi"],outEdges:[],deploymentRef:"otcTenantProd.otcTenantCustomerA",title:"customer-a.builth.ing",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Customer Instance"},tags:[],style:{opacity:15,size:"md"},x:508,y:426,width:320,height:180,labelBBox:{x:51,y:63,width:248,height:48}},{id:"otcTenantNonProd",parent:null,level:0,children:["otcTenantNonProd.otcTenantDev1","otcTenantNonProd.otcTenantTestX"],inEdges:["1ypat9q","1oiku86"],outEdges:[],deploymentRef:"otcTenantNonProd",title:"Non-Prod - t09.de",kind:"environment",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:928,y:355,width:870,height:301,labelBBox:{x:6,y:0,width:111,height:15}},{id:"otcTenantNonProd.otcTenantDev1",parent:"otcTenantNonProd",level:1,children:[],inEdges:["1ypat9q"],outEdges:[],deploymentRef:"otcTenantNonProd.otcTenantDev1",title:"dev1.t09.de",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Development Instance"},tags:[],style:{opacity:15,size:"md"},x:978,y:426,width:320,height:180,labelBBox:{x:69,y:63,width:212,height:48}},{id:"otcTenantNonProd.otcTenantTestX",parent:"otcTenantNonProd",level:1,children:[],inEdges:["1oiku86"],outEdges:[],deploymentRef:"otcTenantNonProd.otcTenantTestX",title:"test-x.t09.de",kind:"cluster",color:"primary",shape:"rectangle",icon:"tech:git",description:{txt:"Testing Instance"},tags:[],style:{opacity:15,size:"md"},x:1428,y:426,width:320,height:180,labelBBox:{x:89,y:63,width:172,height:48}}],edges:[{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[552,259],[488,308],[408,370],[342,420]],labelBBox:{x:457,y:324,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[668,259],[668,307],[668,366],[668,416]],labelBBox:{x:669,y:324,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[789,259],[856,308],[940,370],[1009,420]],labelBBox:{x:904,y:324,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[828,196],[972,223],[1189,273],[1363,355],[1400,373],[1438,396],[1471,420]],labelBBox:{x:1347,y:324,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"}]},"components-template-documentation":{_type:"element",tags:null,links:null,viewOf:"documentation",_stage:"layouted",sourcePath:"views/documentation/components-template-documentation.c4",description:{txt:"Documentation System Context View"},title:"Documentation",id:"components-template-documentation",autoLayout:{direction:"TB"},hash:"b411a2274eea9b4e4f881a62211880ca09920b61",bounds:{x:0,y:0,width:431,height:503},nodes:[{id:"platformdeveloper",parent:null,level:0,children:[],inEdges:[],outEdges:["1kjl8ep"],title:"Technical Writer",modelRef:"platformdeveloper",shape:"person",color:"gray",style:{opacity:15,size:"md"},description:{txt:"Could be an engineer, but in this case it's the Technical Writer"},tags:[],kind:"actor",isCustomized:!0,x:32,y:0,width:320,height:180,labelBBox:{x:21,y:54,width:278,height:66}},{id:"documentation",parent:null,level:0,children:[],inEdges:["1kjl8ep"],outEdges:[],title:"Documentation",modelRef:"documentation",shape:"rectangle",color:"primary",icon:"tech:electron",style:{opacity:15,size:"md"},description:{txt:"Documentation system for EDP LikeC4 platform."},tags:[],technology:"Static Site Generator",kind:"system",x:0,y:323,width:384,height:180,labelBBox:{x:46,y:44,width:322,height:85}}],edges:[{id:"1kjl8ep",source:"platformdeveloper",target:"documentation",label:"creates and maintains documentation",points:[[192,180],[192,221],[192,270],[192,313]],labelBBox:{x:193,y:240,width:237,height:18},parent:null,relations:["3sz3k3"],color:"gray",line:"dashed",head:"normal"}]},forgejoGarmInteraction:{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/forgejo-garm.c4",description:null,title:"Forgejo <-> Garm",id:"forgejoGarmInteraction",variant:"diagram",autoLayout:{direction:"LR"},hash:"d3ebbc1ee40326db9ca9240c8d8d71315f8c5651",sequenceLayout:{actors:[{id:"edp.forgejo",x:32,y:92,width:340,height:180,ports:[{id:"step-01_source",cx:170,cy:370,height:40,type:"source",position:"right"},{id:"step-07_target",cx:170,cy:644,height:24,type:"target",position:"right"},{id:"step-08_source",cx:170,cy:737,height:40,type:"source",position:"right"},{id:"step-10_target",cx:170,cy:852,height:24,type:"target",position:"right"},{id:"step-11_target",cx:170,cy:945,height:24,type:"target",position:"right"},{id:"step-13_target",cx:170,cy:1153,height:24,type:"target",position:"right"},{id:"step-14_source",cx:170,cy:1175,height:40,type:"source",position:"right"},{id:"step-14_target",cx:170,cy:1312,height:24,type:"target",position:"right"},{id:"step-16_source",cx:170,cy:1521,height:40,type:"source",position:"right"}]},{id:"edp.garm.garm",x:436,y:92,width:325,height:180,ports:[{id:"step-01_target",cx:163,cy:370,height:24,type:"target",position:"left"},{id:"step-02_source",cx:163,cy:392,height:40,type:"source",position:"right"},{id:"step-06_target",cx:163,cy:622,height:24,type:"target",position:"right"},{id:"step-07_source",cx:163,cy:644,height:40,type:"source",position:"left"},{id:"step-08_target",cx:163,cy:737,height:24,type:"target",position:"left"},{id:"step-09_source",cx:163,cy:759,height:40,type:"source",position:"right"},{id:"step-16_target",cx:163,cy:1521,height:24,type:"target",position:"left"},{id:"step-17_source",cx:163,cy:1543,height:40,type:"source",position:"right"}]},{id:"edp.garm.providerEdgeConnect",x:821,y:92,width:409,height:180,ports:[{id:"step-02_target",cx:205,cy:392,height:24,type:"target",position:"left"},{id:"step-03_source",cx:205,cy:414,height:40,type:"source",position:"right"},{id:"step-04_source",cx:205,cy:507,height:40,type:"source",position:"right"},{id:"step-17_target",cx:205,cy:1543,height:24,type:"target",position:"left"},{id:"step-18_source",cx:205,cy:1565,height:40,type:"source",position:"right"},{id:"step-19_source",cx:205,cy:1658,height:40,type:"source",position:"right"}]},{id:"edgeConnect",x:1326,y:92,width:320,height:180,ports:[{id:"step-03_target",cx:160,cy:414,height:24,type:"target",position:"left"},{id:"step-04_target",cx:160,cy:507,height:24,type:"target",position:"left"},{id:"step-05_source",cx:160,cy:529,height:40,type:"source",position:"right"},{id:"step-18_target",cx:160,cy:1565,height:24,type:"target",position:"left"},{id:"step-19_target",cx:160,cy:1658,height:24,type:"target",position:"left"}]},{id:"forgejoRunner",x:1706,y:92,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:529,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:622,height:40,type:"source",position:"left"},{id:"step-09_target",cx:160,cy:759,height:24,type:"target",position:"left"},{id:"step-10_source",cx:160,cy:852,height:40,type:"source",position:"left"},{id:"step-11_source",cx:160,cy:945,height:40,type:"source",position:"left"},{id:"step-12_source",cx:160,cy:1038,height:40,type:"source",position:"right"},{id:"step-12_target",cx:160,cy:1131,height:24,type:"target",position:"right"},{id:"step-13_source",cx:160,cy:1153,height:40,type:"source",position:"left"},{id:"step-15_source",cx:160,cy:1348,height:40,type:"source",position:"right"},{id:"step-15_target",cx:160,cy:1441,height:24,type:"target",position:"right"}]}],compounds:[{depth:1,x:0,y:0,width:1294,height:1875,id:"edp",origin:"edp"},{depth:0,x:404,y:40,width:858,height:1803,id:"edp.garm",origin:"edp.garm"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:244,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:157,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:172,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:225,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:93,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:220,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:220,height:27}},{id:"step-08",sourceHandle:"step-08_source",targetHandle:"step-08_target",labelBBox:{width:81,height:27}},{id:"step-09",sourceHandle:"step-09_source",targetHandle:"step-09_target",labelBBox:{width:81,height:27}},{id:"step-10",sourceHandle:"step-10_source",targetHandle:"step-10_target",labelBBox:{width:145,height:27}},{id:"step-11",sourceHandle:"step-11_source",targetHandle:"step-11_target",labelBBox:{width:108,height:27}},{id:"step-12",sourceHandle:"step-12_source",targetHandle:"step-12_target",labelBBox:{width:125,height:27}},{id:"step-13",sourceHandle:"step-13_source",targetHandle:"step-13_target",labelBBox:{width:120,height:27}},{id:"step-14",sourceHandle:"step-14_source",targetHandle:"step-14_target",labelBBox:{width:164,height:27}},{id:"step-15",sourceHandle:"step-15_source",targetHandle:"step-15_target",labelBBox:{width:113,height:27}},{id:"step-16",sourceHandle:"step-16_source",targetHandle:"step-16_target",labelBBox:{width:205,height:27}},{id:"step-17",sourceHandle:"step-17_source",targetHandle:"step-17_target",labelBBox:{width:135,height:27}},{id:"step-18",sourceHandle:"step-18_source",targetHandle:"step-18_target",labelBBox:{width:231,height:27}},{id:"step-19",sourceHandle:"step-19_source",targetHandle:"step-19_target",labelBBox:{width:177,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2041,height:1875}},bounds:{x:0,y:0,width:2985,height:1512},nodes:[{id:"edp",parent:null,level:0,children:["edp.forgejo","edp.garm"],inEdges:["step-06","step-10","step-11","step-13"],outEdges:["step-03","step-04","step-09","step-18","step-19"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:2,navigateTo:"edp",x:8,y:81,width:1831,height:712,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:["step-07","step-10","step-11","step-13","step-14"],outEdges:["step-01","step-08","step-14","step-16"],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:48,y:553,width:340,height:180,labelBBox:{x:46,y:17,width:279,height:139}},{id:"edp.garm",parent:"edp",level:1,children:["edp.garm.garm","edp.garm.providerEdgeConnect"],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-03","step-04","step-07","step-09","step-18","step-19"],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:20,size:"md"},tags:[],kind:"container",depth:1,x:709,y:142,width:1090,height:404,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edp.garm.garm",parent:"edp.garm",level:2,children:[],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-02","step-07","step-09","step-17"],title:"Garm",modelRef:"edp.garm.garm",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Provisions runners for Forgejo"},tags:[],kind:"component",x:749,y:316,width:325,height:180,labelBBox:{x:47,y:63,width:262,height:47}},{id:"edp.garm.providerEdgeConnect",parent:"edp.garm",level:2,children:[],inEdges:["step-02","step-17"],outEdges:["step-03","step-04","step-18","step-19"],title:"Garm Provider for EdgeConnect",modelRef:"edp.garm.providerEdgeConnect",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Acts as abstraction layer for EdgeConnect"},tags:[],kind:"component",x:1349,y:203,width:409,height:180,labelBBox:{x:47,y:54,width:347,height:65}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["step-03","step-04","step-18","step-19"],outEdges:["step-05"],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:2135,y:169,width:320,height:180,labelBBox:{x:24,y:54,width:273,height:65}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-05","step-09","step-12","step-15"],outEdges:["step-06","step-10","step-11","step-12","step-13","step-15"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2665,y:810,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}}],edges:[{id:"step-01",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A new job is pending",points:[[389,687],[482,703],[596,707],[689,664],[761,631],[818,563],[857,504]],labelBBox:{x:458,y:632,width:228,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Create new runner",points:[[1074,428],[1142,433],[1220,433],[1289,417],[1321,410],[1352,399],[1383,387]],labelBBox:{x:1144,y:385,width:141,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create App (Runner)",points:[[1639,203],[1692,152],[1767,92],[1847,65],[1943,32],[1980,29],[2075,65],[2128,85],[2176,124],[2214,162]],labelBBox:{x:1886,y:7,width:156,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create AppInstance (Runner)",points:[[1759,234],[1788,228],[1818,222],[1847,219],[1948,206],[1974,210],[2075,219],[2091,220],[2108,222],[2125,225]],labelBBox:{x:1859,y:178,width:209,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edgeConnect",target:"forgejoRunner",label:"Deploys",points:[[2448,349],[2502,386],[2560,432],[2605,484],[2687,579],[2750,711],[2787,800]],labelBBox:{x:2524,y:372,width:77,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"forgejoRunner",target:"edp.garm.garm",label:"Get runner registration token",points:[[1084,448],[1101,452],[1118,455],[1134,459],[1784,591],[2007,420],[2605,706],[2657,731],[2706,772],[2745,810]],labelBBox:{x:1862,y:491,width:204,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"edp.garm.garm",target:"edp.forgejo",label:"Get runner registration token",points:[[399,600],[488,577],[595,546],[689,510],[709,503],[730,495],[750,486]],labelBBox:{x:470,y:478,width:204,height:19},dir:"back",parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"},{id:"step-08",source:"edp.forgejo",target:"edp.garm.garm",label:"Token",points:[[300,553],[341,514],[393,472],[449,449],[540,410],[650,399],[739,397]],labelBBox:{x:539,y:368,width:65,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@7"},{id:"step-09",source:"edp.garm.garm",target:"forgejoRunner",label:"Token",points:[[1074,487],[1094,496],[1115,504],[1134,511],[1676,699],[2346,822],[2654,873]],labelBBox:{x:1931,y:682,width:65,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@8"},{id:"step-10",source:"forgejoRunner",target:"edp.forgejo",label:"Register runner",points:[[399,713],[415,718],[432,722],[449,726],[1184,886],[1385,807],[2135,865],[2304,878],[2346,883],[2515,892],[2564,894],[2617,896],[2665,897]],labelBBox:{x:1492,y:803,width:129,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@9"},{id:"step-11",source:"forgejoRunner",target:"edp.forgejo",label:"Fetch job",points:[[272,741],[371,914],[606,1253],[911,1253],[911,1253],[911,1253],[2296,1253],[2485,1253],[2658,1094],[2751,990]],labelBBox:{x:1511,y:1220,width:92,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@10"},{id:"step-12",source:"forgejoRunner",target:"forgejoRunner",label:"Work on job",points:[[2802,810],[2796,753],[2804,700],[2825,700],[2845,700],[2852,747],[2849,799]],labelBBox:{x:2773,y:667,width:109,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@11"},{id:"step-13",source:"forgejoRunner",target:"edp.forgejo",label:"Send result",points:[[240,743],[268,866],[332,1075],[449,1217],[604,1404],[667,1512],[911,1512],[911,1512],[911,1512],[2296,1512],[2568,1512],[2731,1160],[2794,990]],labelBBox:{x:1505,y:1479,width:104,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@12"},{id:"step-14",source:"edp.forgejo",target:"edp.forgejo",label:"Deregister Runner",points:[[157,553],[142,496],[163,443],[218,443],[271,443],[292,490],[282,542]],labelBBox:{x:147,y:410,width:148,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@13"},{id:"step-15",source:"forgejoRunner",target:"forgejoRunner",label:"Terminate",points:[[2788,810],[2763,708],[2775,590],[2825,590],[2873,590],[2886,700],[2864,800]],labelBBox:{x:2779,y:557,width:97,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@14"},{id:"step-16",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A job finished",points:[[258,553],[295,479],[358,379],[449,334],[538,289],[649,304],[740,332]],labelBBox:{x:477,y:273,width:189,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@15"},{id:"step-17",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Delete runner",points:[[1074,368],[1094,363],[1115,359],[1134,356],[1201,343],[1274,332],[1340,322]],labelBBox:{x:1155,y:298,width:119,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@16"},{id:"step-18",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete AppInstance (Runner)",points:[[1759,294],[1855,294],[1971,291],[2075,284],[2091,283],[2108,282],[2125,280]],labelBBox:{x:1856,y:252,width:215,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@17"},{id:"step-19",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete App (Runner)",points:[[1759,350],[1856,369],[1972,381],[2075,358],[2092,355],[2109,350],[2126,344]],labelBBox:{x:1883,y:326,width:161,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@18"}]},forgejoGarmArchitecture:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/garm-arch.c4",description:{txt:"Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions"},title:"Architecture of Forgejo, Garm and Edge Connect",id:"forgejoGarmArchitecture",autoLayout:{direction:"TB"},hash:"c704c24d8449d144021a9ce47b0047cf36a1a865",bounds:{x:0,y:0,width:1588,height:1521},nodes:[{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"blue",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1074,height:1505,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:["otcKubernetes.edpCluster.forgejoActions","otcKubernetes.edpCluster.edpCluster","otcKubernetes.edpCluster.forgejo"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},depth:2,x:40,y:61,width:1010,height:1420,labelBBox:{x:6,y:0,width:82,height:15}},{id:"otcKubernetes.edpCluster.forgejoActions",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["9r08on"],outEdges:["dvpbhz"],kind:"instance",title:"Forgejo Actions",description:{txt:"CI/CD orchestration for Forgejo"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejoActions",modelRef:"edp.forgejoActions",x:668,y:132,width:332,height:180,labelBBox:{x:46,y:54,width:270,height:67}},{id:"edgeConnectEnv",parent:null,level:0,children:["edgeConnectEnv.runnerInfrastructure"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"green",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1132,y:408,width:448,height:351,labelBBox:{x:6,y:0,width:93,height:15}},{id:"edgeConnectEnv.runnerInfrastructure",parent:"edgeConnectEnv",level:1,children:["edgeConnectEnv.runnerInfrastructure.forgejoRunner"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv.runnerInfrastructure",title:"Runner Infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Dynamically provisioned runner instances"},tags:[],style:{opacity:15,size:"md"},depth:1,x:1164,y:461,width:384,height:266,labelBBox:{x:6,y:0,width:156,height:15}},{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",parent:"edgeConnectEnv.runnerInfrastructure",level:2,children:[],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],kind:"instance",title:"Forgejo Runner",description:{txt:"Ephemeral Forgejo Actions runner"},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:1196,y:515,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:47}},{id:"otcKubernetes.edpCluster.edpCluster",parent:"otcKubernetes.edpCluster",level:2,children:["otcKubernetes.edpCluster.edpCluster.garmService","otcKubernetes.edpCluster.edpCluster.providerEdgeConnect"],inEdges:["ldqgs7"],outEdges:[],deploymentRef:"otcKubernetes.edpCluster.edpCluster",title:"GARM pod",kind:"environment",technology:"Kubernetes",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:90,y:797,width:510,height:634,labelBBox:{x:6,y:0,width:65,height:15}},{id:"otcKubernetes.edpCluster.edpCluster.garmService",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["ldqgs7"],outEdges:["9d8wuc"],kind:"instance",title:"Garm",description:{txt:"GARM - Runner lifecycle manager"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.garmService",modelRef:"edp.garm.garm",x:168,y:869,width:352,height:180,labelBBox:{x:46,y:63,width:290,height:47}},{id:"otcKubernetes.edpCluster.forgejo",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["gly1kq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:"Forgejo - Git platform with Actions"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:650,y:869,width:350,height:180,labelBBox:{x:46,y:53,width:288,height:67}},{id:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["9d8wuc"],outEdges:[],kind:"instance",title:"Garm Provider for EdgeConnect",description:{txt:"GARM Provider for Edge Connect"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",modelRef:"edp.garm.providerEdgeConnect",x:140,y:1201,width:409,height:180,labelBBox:{x:46,y:63,width:348,height:48}}],edges:[{id:"9d8wuc",source:"otcKubernetes.edpCluster.edpCluster.garmService",target:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",label:"calls binary",points:[[344,1048],[344,1092],[345,1146],[345,1191]],labelBBox:{x:346,y:1113,width:74,height:18},parent:"otcKubernetes.edpCluster.edpCluster",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal"},{id:"dvpbhz",source:"otcKubernetes.edpCluster.forgejoActions",target:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",label:"runs workflows",points:[[1e3,292],[1063,323],[1134,362],[1192,408],[1227,436],[1260,473],[1287,507]],labelBBox:{x:1176,y:377,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"ldqgs7",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.edpCluster.garmService",label:"retrieves bootstrap information",points:[[1283,695],[1257,720],[1226,744],[1192,759],[1055,817],[661,741],[524,797],[489,812],[456,836],[429,861]],labelBBox:{x:1166,y:766,width:193,height:18},parent:null,relations:["15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"gly1kq",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejo",label:"registers with and picks up jobs",points:[[1269,695],[1245,717],[1218,740],[1192,759],[1135,799],[1069,838],[1009,870]],labelBBox:{x:1175,y:766,width:199,height:18},parent:null,relations:["1k6h7jf"],color:"gray",line:"dashed",head:"normal"},{id:"9r08on",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejoActions",label:"register",points:[[1289,515],[1261,480],[1227,441],[1192,408],[1140,359],[1072,320],[1009,290]],labelBBox:{x:1177,y:377,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"view_gitops-inner-outer-loop_15":{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/gitops-inner-outer-loop.c4",description:null,title:"outer-ci-loop",id:"view_gitops-inner-outer-loop_15",variant:"diagram",autoLayout:{direction:"LR"},hash:"d85bdffdca5f49220457db75761ae8ba47744c16",sequenceLayout:{actors:[{id:"localbox.git",x:32,y:52,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:338,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:448,y:52,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:338,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:360,height:40,type:"source",position:"right"},{id:"step-04_target",cx:160,cy:475,height:24,type:"target",position:"right"},{id:"step-05_source",cx:160,cy:568,height:40,type:"source",position:"right"}]},{id:"forgejoRunner",x:832,y:52,width:320,height:180,ports:[{id:"step-02_target",cx:160,cy:360,height:24,type:"target",position:"left"},{id:"step-03_source",cx:160,cy:382,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:475,height:40,type:"source",position:"left"}]},{id:"edp.imageregistry",x:1216,y:52,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:382,height:24,type:"target",position:"left"},{id:"step-07_target",cx:187,cy:683,height:24,type:"target",position:"right"}]},{id:"edp.argoCD",x:1649,y:52,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:568,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:590,height:40,type:"source",position:"right"}]},{id:"cloud",x:2033,y:52,width:320,height:180,ports:[{id:"step-06_target",cx:160,cy:590,height:24,type:"target",position:"left"},{id:"step-07_source",cx:160,cy:683,height:40,type:"source",position:"left"}]}],compounds:[{depth:0,x:0,y:0,width:384,height:527,id:"localbox",origin:"localbox"},{depth:0,x:416,y:0,width:384,height:735,id:"edp-1",origin:"edp"},{depth:0,x:1184,y:0,width:817,height:828,id:"edp-2",origin:"edp"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:92,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:159,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:174,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:164,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:161,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:113,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2353,height:828}},bounds:{x:0,y:0,width:2150,height:1243},nodes:[{id:"localbox",parent:null,level:0,children:["localbox.git"],inEdges:[],outEdges:["step-01"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:8,y:306,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.git",parent:"localbox",level:1,children:[],inEdges:[],outEdges:["step-01"],title:"git",modelRef:"localbox.git",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},description:{txt:"local git"},tags:[],technology:"Git",kind:"component",x:40,y:359,width:320,height:180,labelBBox:{x:119,y:53,width:113,height:67}},{id:"edp",parent:null,level:0,children:["edp.forgejogit","edp.imageregistry","edp.argoCD","edp.forgejo"],inEdges:["step-01","step-03","step-04","step-07"],outEdges:["step-02","step-06"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"secondary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:528,y:8,width:1064,height:861,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["step-01","step-04"],outEdges:["step-02","step-05"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"secondary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:595,y:359,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03","step-04"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:1232,y:909,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["step-03","step-07"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"secondary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:568,y:649,width:373,height:180,labelBBox:{x:46,y:53,width:311,height:67}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["step-05"],outEdges:["step-06"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"secondary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1232,y:495,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:48}},{id:"cloud",parent:null,level:0,children:[],inEdges:["step-06"],outEdges:["step-07"],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:1830,y:1063,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"gray",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:585,y:69,width:340,height:180,labelBBox:{x:45,y:17,width:279,height:139}}],edges:[{id:"step-01",source:"localbox.git",target:"edp.forgejogit",label:"git push",points:[[360,449],[430,449],[513,449],[585,449]],labelBBox:{x:429,y:417,width:75,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.forgejogit",target:"forgejoRunner",label:"on push",points:[[896,539],[1008,612],[1151,708],[1172,734],[1219,795],[1184,836],[1232,896],[1233,898],[1235,900],[1236,901]],labelBBox:{x:1051,y:582,width:76,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"forgejoRunner",target:"edp.imageregistry",label:"pushes new image",points:[[1232,1012],[1159,1012],[1073,1003],[1001,972],[934,942],[874,886],[830,837]],labelBBox:{x:1018,y:940,width:143,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"forgejoRunner",target:"edp.forgejogit",label:"pushes new appspec",points:[[900,546],[915,561],[930,577],[941,594],[995,673],[940,726],[1001,800],[1034,839],[1139,892],[1232,933]],labelBBox:{x:1010,y:768,width:158,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edp.forgejogit",target:"edp.argoCD",label:"triggers deployment",points:[[914,483],[1008,503],[1126,528],[1222,549]],labelBBox:{x:1015,y:473,width:148,height:19},parent:"edp",relations:["yorv62"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"edp.argoCD",target:"cloud",label:"deploys application",points:[[1487,675],[1596,779],[1775,949],[1887,1056]],labelBBox:{x:1621,y:769,width:145,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"cloud",target:"edp.imageregistry",label:"pulls image",points:[[818,837],[897,950],[1047,1129],[1232,1183],[1432,1241],[1674,1216],[1830,1188]],labelBBox:{x:1346,y:1151,width:97,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"}]},orchestration_workflow:{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/orchestration/orchestration-workflow.c4",description:null,title:"Orchestration Workflow",id:"orchestration_workflow",variant:"diagram",autoLayout:{direction:"TB"},hash:"df518980b33cdcc56c4e56c7c6fe04f37b4e95bb",sequenceLayout:{actors:[{id:"developer",x:0,y:0,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:306,height:40,type:"source",position:"right"}]},{id:"edp.forgejo",x:380,y:0,width:340,height:180,ports:[{id:"step-01_target",cx:170,cy:306,height:24,type:"target",position:"left"},{id:"step-02_source",cx:170,cy:328,height:40,type:"source",position:"right"},{id:"step-03_source",cx:170,cy:421,height:40,type:"source",position:"right"}]},{id:"edp.forgejoActions",x:780,y:0,width:350,height:180,ports:[{id:"step-02_target",cx:175,cy:328,height:24,type:"target",position:"left"}]},{id:"edp.forgejogit",x:1190,y:0,width:320,height:180,ports:[{id:"step-03_target",cx:160,cy:421,height:24,type:"target",position:"left"},{id:"step-04_source",cx:160,cy:443,height:40,type:"source",position:"right"}]},{id:"edp.argoCD",x:1570,y:0,width:320,height:180,ports:[{id:"step-04_target",cx:160,cy:443,height:24,type:"target",position:"left"},{id:"step-05_source",cx:160,cy:465,height:40,type:"source",position:"right"}]},{id:"runtimeCluster",x:1950,y:0,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:465,height:24,type:"target",position:"left"},{id:"step-06_target",cx:160,cy:558,height:24,type:"target",position:"right"}]},{id:"terraform",x:2330,y:0,width:320,height:180,ports:[{id:"step-06_source",cx:160,cy:558,height:40,type:"source",position:"left"}]}],compounds:[],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:156,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:96,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:122,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:114,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:90,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:105,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2650,height:635}},bounds:{x:0,y:0,width:780,height:1874},nodes:[{id:"developer",parent:null,level:0,children:[],inEdges:[],outEdges:["step-01"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"md"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:178,y:0,width:320,height:180,labelBBox:{x:53,y:63,width:214,height:48}},{id:"edp.forgejo",parent:null,level:0,children:[],inEdges:["step-01"],outEdges:["step-02","step-03"],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",navigateTo:"forgejo",x:168,y:339,width:340,height:180,labelBBox:{x:46,y:17,width:278,height:139}},{id:"edp.forgejoActions",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:[],title:"Forgejo Actions",modelRef:"edp.forgejoActions",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Continuous Integration like Github Actions"},tags:[],technology:"Golang",kind:"component",x:0,y:678,width:350,height:180,labelBBox:{x:46,y:44,width:288,height:85}},{id:"edp.forgejogit",parent:null,level:0,children:[],inEdges:["step-03"],outEdges:["step-04"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:460,y:678,width:320,height:180,labelBBox:{x:97,y:74,width:156,height:24}},{id:"edp.argoCD",parent:null,level:0,children:[],inEdges:["step-04"],outEdges:["step-05"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:460,y:1016,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"runtimeCluster",parent:null,level:0,children:[],inEdges:["step-05","step-06"],outEdges:[],title:"Kubernetes Cluster",modelRef:"runtimeCluster",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Target cluster where applications are deployed"},tags:[],technology:"Kubernetes",kind:"system",x:460,y:1355,width:320,height:180,labelBBox:{x:35,y:44,width:250,height:86}},{id:"terraform",parent:null,level:0,children:[],inEdges:[],outEdges:["step-06"],title:"Terraform",modelRef:"terraform",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Infrastructure provisioning (IaC)"},tags:[],technology:"Terraform",kind:"component",x:460,y:1694,width:320,height:180,labelBBox:{x:53,y:53,width:214,height:67}}],edges:[{id:"step-01",source:"developer",target:"edp.forgejo",label:"defines & commits",points:[[338,180],[338,226],[338,281],[338,328]],labelBBox:{x:347,y:247,width:140,height:19},parent:null,relations:["14tsadm"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.forgejo",target:"edp.forgejoActions",label:"pipelines",points:[[295,519],[273,565],[245,621],[223,668]],labelBBox:{x:271,y:585,width:80,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.forgejo",target:"edp.forgejogit",label:"git repository",points:[[413,519],[451,565],[499,622],[539,670]],labelBBox:{x:497,y:585,width:106,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.forgejogit",target:"edp.argoCD",label:"sync trigger",points:[[620,858],[620,903],[620,959],[620,1006]],labelBBox:{x:629,y:924,width:98,height:19},parent:null,relations:["yorv62"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edp.argoCD",target:"runtimeCluster",label:"deploys",points:[[620,1196],[620,1242],[620,1298],[620,1345]],labelBBox:{x:629,y:1263,width:74,height:19},parent:null,relations:["1f6l7ms"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"terraform",target:"runtimeCluster",label:"provisions",points:[[620,1546],[620,1593],[620,1649],[620,1694]],labelBBox:{x:629,y:1602,width:89,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"}]},application_deployment_flow:{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/edp/application-deployment-flow.c4",description:null,title:"Application Deployment Flow",id:"application_deployment_flow",variant:"diagram",autoLayout:{direction:"TB"},hash:"9401c5e464791c7578a947fb92e26f302d46d9f5",sequenceLayout:{actors:[{id:"developer",x:0,y:0,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:306,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:380,y:0,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:306,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:328,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:443,height:40,type:"source",position:"right"}]},{id:"edp.forgejoActions",x:760,y:0,width:350,height:180,ports:[{id:"step-02_target",cx:175,cy:328,height:24,type:"target",position:"left"},{id:"step-03_source",cx:175,cy:350,height:40,type:"source",position:"right"}]},{id:"edp.imageregistry",x:1170,y:0,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:350,height:24,type:"target",position:"left"}]},{id:"edp.argoCD",x:1603,y:0,width:320,height:180,ports:[{id:"step-04_target",cx:160,cy:443,height:24,type:"target",position:"left"},{id:"step-05_source",cx:160,cy:465,height:40,type:"source",position:"right"}]},{id:"runtimeCluster",x:1983,y:0,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:465,height:24,type:"target",position:"left"}]}],compounds:[],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:89,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:114,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:157,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:90,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2303,height:542}},bounds:{x:0,y:0,width:1022,height:1196},nodes:[{id:"developer",parent:null,level:0,children:[],inEdges:[],outEdges:["step-01"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"md"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:252,y:0,width:320,height:180,labelBBox:{x:53,y:63,width:214,height:48}},{id:"edp.forgejogit",parent:null,level:0,children:[],inEdges:["step-01"],outEdges:["step-02","step-04"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:252,y:339,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"edp.forgejoActions",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03"],title:"Forgejo Actions",modelRef:"edp.forgejoActions",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Continuous Integration like Github Actions"},tags:[],technology:"Golang",kind:"component",x:15,y:678,width:350,height:180,labelBBox:{x:46,y:44,width:288,height:85}},{id:"edp.imageregistry",parent:null,level:0,children:[],inEdges:["step-03"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:0,y:1016,width:373,height:180,labelBBox:{x:46,y:54,width:311,height:67}},{id:"edp.argoCD",parent:null,level:0,children:[],inEdges:["step-04"],outEdges:["step-05"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:481,y:678,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:47}},{id:"runtimeCluster",parent:null,level:0,children:[],inEdges:["step-05"],outEdges:[],title:"Kubernetes Cluster",modelRef:"runtimeCluster",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Target cluster where applications are deployed"},tags:[],technology:"Kubernetes",kind:"system",x:484,y:1016,width:320,height:180,labelBBox:{x:35,y:45,width:250,height:85}},{id:"edp.forgejo",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",navigateTo:"forgejo",x:682,y:0,width:340,height:180,labelBBox:{x:45,y:17,width:279,height:139}}],edges:[{id:"step-01",source:"developer",target:"edp.forgejogit",label:"git push",points:[[412,180],[412,226],[412,281],[412,328]],labelBBox:{x:421,y:247,width:75,height:19},parent:null,relations:["1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.forgejogit",target:"edp.forgejoActions",label:"triggers",points:[[353,519],[322,565],[285,622],[254,669]],labelBBox:{x:316,y:585,width:73,height:19},parent:null,relations:["1yai3r5"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.forgejoActions",target:"edp.imageregistry",label:"push image",points:[[189,858],[188,903],[188,959],[187,1006]],labelBBox:{x:197,y:924,width:98,height:19},parent:null,relations:["21d2gk"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.forgejogit",target:"edp.argoCD",label:"watches manifests",points:[[472,519],[504,565],[542,622],[574,669]],labelBBox:{x:542,y:585,width:141,height:19},parent:null,relations:["yorv62"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edp.argoCD",target:"runtimeCluster",label:"deploys",points:[[641,858],[642,903],[642,959],[643,1006]],labelBBox:{x:651,y:924,width:74,height:19},parent:null,relations:["1f6l7ms"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"}]},edpbuilderworkflow:{_type:"element",tags:null,links:null,viewOf:"edfbuilder",_stage:"layouted",sourcePath:"views/edp/edfbuilder.c4",description:{txt:"Describes the process how to create an EDP instance"},title:"edfbuilder",id:"edpbuilderworkflow",autoLayout:{direction:"LR",nodeSep:110,rankSep:120},hash:"40921acf4f52bd8d6d2ac3a0d1810b3b7bc13b2a",bounds:{x:0,y:0,width:320,height:180},nodes:[{id:"edfbuilder",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"edfbuilder",modelRef:"edfbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"EDP Foundry Builder"},tags:[],technology:"Golang",kind:"component",x:0,y:0,width:320,height:180,labelBBox:{x:74,y:53,width:203,height:67}}],edges:[]},edp:{_type:"element",tags:null,links:null,viewOf:"edp",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Context view",id:"edp",autoLayout:{direction:"TB"},hash:"61cc384ce5746ebd89897cb187c94a7d651e3960",bounds:{x:0,y:0,width:5177,height:1588},nodes:[{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["stl3mw"],outEdges:["1cy1y20"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:15,y:1360,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"idpbuilder",parent:null,level:0,children:[],inEdges:[],outEdges:["1dvclx1","hjkafp"],title:"idpbuilder",modelRef:"idpbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:25,size:"md"},description:{txt:"Bootstrap tool for initial platform provisioning"},tags:[],technology:"Golang",kind:"component",x:4411,y:69,width:335,height:180,labelBBox:{x:47,y:44,width:273,height:86}},{id:"developer",parent:null,level:0,children:[],inEdges:[],outEdges:["1y3lcyj","1ttqc1r","170qzun","1bt83vj","1nv0w41","1agven9","3nxrq7","bfgapq"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:25,size:"md"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:4857,y:69,width:320,height:180,labelBBox:{x:53,y:63,width:214,height:48}},{id:"edp",parent:null,level:0,children:["edp.argoCD","edp.forgejo","edp.api","edp.ui","edp.grafana","edp.keycloak","edp.forgejogit","edp.mailhog","edp.minio","edp.monitoring","edp.openbao","edp.testApp","edp.garm","edp.application","edp.loki","edp.prometheus","edp.forgejoActions","edp.imageregistry"],inEdges:["1cy1y20","1dvclx1","hjkafp","1y3lcyj","1ttqc1r","170qzun","1bt83vj","1nv0w41","1agven9","3nxrq7","bfgapq"],outEdges:["1e6lbxb","stl3mw"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:25,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"idp",x:375,y:8,width:3996,height:1572,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["1dvclx1","1ttqc1r","1qfsohc"],outEdges:["f6xyb4","1e6lbxb"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1815,y:392,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:["hjkafp","1bt83vj"],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:25,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",navigateTo:"forgejo",x:2245,y:392,width:340,height:180,labelBBox:{x:46,y:17,width:278,height:139}},{id:"edp.api",parent:"edp",level:1,children:[],inEdges:["1y3lcyj"],outEdges:[],title:"API",modelRef:"edp.api",shape:"rectangle",color:"primary",icon:"tech:swagger",style:{opacity:25,size:"md"},description:{txt:"API for the EDP platform"},tags:[],kind:"container",x:3581,y:392,width:320,height:180,labelBBox:{x:62,y:63,width:226,height:48}},{id:"edp.ui",parent:"edp",level:1,children:[],inEdges:["170qzun"],outEdges:[],title:"Backstage",modelRef:"edp.ui",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Developer Portal"},tags:[],kind:"container",x:4011,y:392,width:320,height:180,labelBBox:{x:102,y:63,width:116,height:48}},{id:"edp.grafana",parent:"edp",level:1,children:[],inEdges:["3nxrq7"],outEdges:["1tfxhhz","1adt45o"],title:"Grafana",modelRef:"edp.grafana",shape:"rectangle",color:"primary",icon:"tech:grafana",style:{opacity:25,size:"md"},description:{txt:"Data visualization and monitoring"},tags:[],kind:"container",x:2695,y:392,width:345,height:180,labelBBox:{x:47,y:63,width:283,height:48}},{id:"edp.keycloak",parent:"edp",level:1,children:[],inEdges:["bfgapq"],outEdges:[],title:"Keycloak",modelRef:"edp.keycloak",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Single Sign On for all EDP products"},tags:[],kind:"container",navigateTo:"keycloak",x:3151,y:392,width:320,height:180,labelBBox:{x:39,y:63,width:242,height:48}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["1agven9","f6xyb4"],outEdges:["1qfsohc","on1qgt"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:25,size:"md"},tags:[],kind:"component",x:1815,y:715,width:320,height:180,labelBBox:{x:97,y:74,width:156,height:24}},{id:"edp.mailhog",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Mailhog",modelRef:"edp.mailhog",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Web and API based SMTP testing"},tags:[],kind:"container",navigateTo:"mailhog",x:415,y:69,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:48}},{id:"edp.minio",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Minio",modelRef:"edp.minio",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"S3 compatible blob storage"},tags:[],kind:"container",navigateTo:"minio",x:845,y:69,width:320,height:180,labelBBox:{x:67,y:63,width:186,height:48}},{id:"edp.monitoring",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Monitoring",modelRef:"edp.monitoring",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Observability system to monitor deployed components"},tags:[],kind:"container",navigateTo:"monitoring",x:1385,y:69,width:320,height:180,labelBBox:{x:21,y:54,width:278,height:66}},{id:"edp.openbao",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"OpenBao",modelRef:"edp.openbao",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Secure secret storage"},tags:[],kind:"container",x:415,y:392,width:320,height:180,labelBBox:{x:85,y:63,width:151,height:48}},{id:"edp.testApp",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Fibonacci",modelRef:"edp.testApp",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Testapp to validate deployments"},tags:[],kind:"container",navigateTo:"testapp",x:845,y:392,width:320,height:180,labelBBox:{x:50,y:63,width:220,height:48}},{id:"edp.garm",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:25,size:"md"},tags:[],kind:"container",x:1385,y:392,width:320,height:180,labelBBox:{x:89,y:74,width:173,height:24}},{id:"edp.application",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"application",modelRef:"edp.application",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"An application description"},tags:[],technology:"DSL",kind:"schema",x:430,y:715,width:320,height:180,labelBBox:{x:73,y:53,width:175,height:67}},{id:"runtimeCluster",parent:null,level:0,children:[],inEdges:["1e6lbxb"],outEdges:[],title:"Kubernetes Cluster",modelRef:"runtimeCluster",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Target cluster where applications are deployed"},tags:[],technology:"Kubernetes",kind:"system",x:0,y:715,width:320,height:180,labelBBox:{x:35,y:44,width:250,height:85}},{id:"edp.loki",parent:"edp",level:1,children:[],inEdges:["1tfxhhz"],outEdges:[],title:"Loki",modelRef:"edp.loki",shape:"rectangle",color:"primary",style:{opacity:25,size:"md"},description:{txt:"Log aggregation system"},tags:[],kind:"container",x:2525,y:715,width:320,height:180,labelBBox:{x:78,y:63,width:164,height:47}},{id:"edp.prometheus",parent:"edp",level:1,children:[],inEdges:["1adt45o"],outEdges:[],title:"Prometheus",modelRef:"edp.prometheus",shape:"rectangle",color:"primary",icon:"tech:prometheus",style:{opacity:25,size:"md"},description:{txt:"Monitoring and alerting toolkit"},tags:[],kind:"container",x:2955,y:715,width:320,height:180,labelBBox:{x:46,y:63,width:258,height:47}},{id:"edp.forgejoActions",parent:"edp",level:1,children:[],inEdges:["1cy1y20","on1qgt"],outEdges:["17h4y09","stl3mw"],title:"Forgejo Actions",modelRef:"edp.forgejoActions",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:25,size:"md"},description:{txt:"Continuous Integration like Github Actions"},tags:[],technology:"Golang",kind:"component",x:1800,y:1038,width:350,height:180,labelBBox:{x:46,y:44,width:288,height:85}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["1nv0w41","17h4y09"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:25,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:1788,y:1360,width:373,height:180,labelBBox:{x:47,y:54,width:311,height:67}}],edges:[{id:"1cy1y20",source:"forgejoRunner",target:"edp.forgejoActions",label:"register",points:[[335,1365],[339,1363],[344,1362],[348,1360],[547,1298],[607,1329],[813,1300],[1159,1253],[1561,1192],[1790,1157]],labelBBox:{x:972,y:1277,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1dvclx1",source:"idpbuilder",target:"edp.argoCD",label:"installs",points:[[4412,245],[4407,247],[4403,248],[4398,249],[3981,353],[2889,240],[2465,309],[2355,327],[2237,368],[2145,405]],labelBBox:{x:2466,y:309,width:47,height:18},parent:null,relations:["8fwa3r"],color:"gray",line:"dashed",head:"normal"},{id:"hjkafp",source:"idpbuilder",target:"edp.forgejo",label:"installs",points:[[4412,245],[4407,247],[4403,248],[4398,249],[4202,298],[2765,227],[2580,309],[2543,326],[2510,355],[2484,384]],labelBBox:{x:2581,y:309,width:47,height:18},parent:null,relations:["1ai9t9i"],color:"gray",line:"dashed",head:"normal"},{id:"1y3lcyj",source:"developer",target:"edp.api",label:"uses API",points:[[4857,232],[4839,238],[4820,244],[4802,249],[4606,302],[4550,275],[4350,309],[4174,339],[4127,339],[3956,392],[3941,397],[3926,402],[3910,407]],labelBBox:{x:4351,y:309,width:60,height:18},parent:null,relations:["1dgd663"],color:"gray",line:"dashed",head:"normal"},{id:"1ttqc1r",source:"developer",target:"edp.argoCD",label:"manages deployments",points:[[4857,234],[4839,240],[4820,245],[4802,249],[4368,342],[3248,270],[2806,309],[2737,315],[2721,322],[2652,332],[2447,360],[2390,339],[2190,392],[2175,396],[2160,401],[2145,406]],labelBBox:{x:2807,y:309,width:145,height:18},parent:null,relations:["1l7h8as"],color:"gray",line:"dashed",head:"normal"},{id:"170qzun",source:"developer",target:"edp.ui",label:"manages project",points:[[4857,230],[4839,237],[4820,244],[4802,249],[4669,289],[4626,263],[4495,309],[4437,330],[4377,359],[4325,387]],labelBBox:{x:4496,y:309,width:108,height:18},parent:null,relations:["nb1ag9","65iq0s"],color:"gray",line:"dashed",head:"normal"},{id:"1bt83vj",source:"developer",target:"edp.forgejo",label:"manages code",points:[[4857,233],[4839,240],[4820,245],[4802,249],[4482,320],[3654,283],[3327,309],[3021,334],[2938,316],[2640,392],[2625,396],[2610,400],[2595,405]],labelBBox:{x:3328,y:309,width:96,height:18},parent:null,relations:["14tsadm"],color:"gray",line:"dashed",head:"normal"},{id:"1nv0w41",source:"developer",target:"edp.imageregistry",label:"pushes and pull images",points:[[4987,249],[4969,313],[4948,401],[4948,481],[4948,481],[4948,481],[4948,1129],[4948,1409],[2835,1445],[2172,1449]],labelBBox:{x:4949,y:793,width:151,height:18},parent:null,relations:["u2ppde"],color:"gray",line:"dashed",head:"normal"},{id:"1agven9",source:"developer",target:"edp.forgejogit",label:"[...]",points:[[4917,249],[4799,348],[4593,502],[4386,572],[3577,846],[3317,607],[2470,715],[2361,729],[2240,750],[2145,769]],labelBBox:{x:4728,y:469,width:25,height:18},parent:null,relations:["1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"3nxrq7",source:"developer",target:"edp.grafana",label:"monitors",points:[[4857,233],[4839,239],[4820,245],[4802,249],[4354,352],[4227,268],[3769,309],[3469,336],[3388,318],[3096,392],[3081,396],[3065,400],[3050,405]],labelBBox:{x:3770,y:309,width:58,height:18},parent:null,relations:["dol85h"],color:"gray",line:"dashed",head:"normal"},{id:"bfgapq",source:"developer",target:"edp.keycloak",label:"authenticates",points:[[4857,233],[4839,239],[4820,245],[4802,249],[4496,324],[4409,273],[4096,309],[3842,338],[3773,324],[3526,392],[3511,396],[3496,401],[3480,406]],labelBBox:{x:4097,y:309,width:87,height:18},parent:null,relations:["129xciy"],color:"gray",line:"dashed",head:"normal"},{id:"f6xyb4",source:"edp.argoCD",target:"edp.forgejogit",label:"Syncs git repo",points:[[1883,572],[1869,590],[1856,611],[1848,632],[1839,658],[1846,683],[1860,706]],labelBBox:{x:1849,y:632,width:93,height:18},parent:"edp",relations:["6mupa0"],color:"gray",line:"dashed",head:"normal"},{id:"1qfsohc",source:"edp.forgejogit",target:"edp.argoCD",label:"watches manifests",points:[[1975,715],[1975,674],[1975,625],[1975,582]],labelBBox:{x:1976,y:632,width:119,height:18},parent:"edp",relations:["yorv62"],color:"gray",line:"dashed",head:"normal"},{id:"17h4y09",source:"edp.forgejoActions",target:"edp.imageregistry",label:"push image",points:[[1975,1218],[1975,1259],[1975,1308],[1975,1350]],labelBBox:{x:1976,y:1277,width:76,height:18},parent:"edp",relations:["21d2gk"],color:"gray",line:"dashed",head:"normal"},{id:"on1qgt",source:"edp.forgejogit",target:"edp.forgejoActions",label:"triggers",points:[[1975,895],[1975,936],[1975,985],[1975,1027]],labelBBox:{x:1976,y:954,width:51,height:18},parent:"edp",relations:["1yai3r5"],color:"gray",line:"dashed",head:"normal"},{id:"1tfxhhz",source:"edp.grafana",target:"edp.loki",label:"get logs",points:[[2817,572],[2794,614],[2765,663],[2741,706]],labelBBox:{x:2783,y:632,width:53,height:18},parent:"edp",relations:["1n1utzc"],color:"gray",line:"dashed",head:"normal"},{id:"1adt45o",source:"edp.grafana",target:"edp.prometheus",label:"get metrics and alerts",points:[[2937,572],[2969,614],[3007,664],[3040,707]],labelBBox:{x:3e3,y:632,width:138,height:18},parent:"edp",relations:["13uvtiq"],color:"gray",line:"dashed",head:"normal"},{id:"1e6lbxb",source:"edp.argoCD",target:"runtimeCluster",label:"deploys",points:[[1815,555],[1797,562],[1778,567],[1760,572],[1148,726],[956,546],[348,715],[342,717],[336,718],[330,720]],labelBBox:{x:1409,y:632,width:52,height:18},parent:null,relations:["1f6l7ms"],color:"gray",line:"dashed",head:"normal"},{id:"stl3mw",source:"edp.forgejoActions",target:"forgejoRunner",label:"runs workflows",points:[[1800,1142],[1552,1162],[1082,1207],[687,1278],[535,1305],[494,1306],[348,1360],[347,1361],[346,1361],[344,1362]],labelBBox:{x:688,y:1277,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"}]},keycloak:{_type:"element",tags:null,links:null,viewOf:"edp.keycloak",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Keycloak",id:"keycloak",autoLayout:{direction:"TB"},hash:"528a426001df41ee3034ded0cc7ae02a1bd96842",bounds:{x:0,y:0,width:927,height:560},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["119ru5h"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:48,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.keycloak",parent:null,level:0,children:["edp.keycloak.keycloak","edp.keycloak.keycloakDB"],inEdges:["119ru5h"],outEdges:[],title:"Keycloak",modelRef:"edp.keycloak",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Single Sign On for all EDP products"},tags:[],kind:"container",depth:1,x:8,y:271,width:911,height:281,labelBBox:{x:6,y:0,width:66,height:15}},{id:"edp.keycloak.keycloak",parent:"edp.keycloak",level:1,children:[],inEdges:["119ru5h"],outEdges:["kn0x70"],title:"Keycloak",modelRef:"edp.keycloak.keycloak",shape:"rectangle",color:"primary",icon:"tech:java",style:{opacity:15,size:"md"},tags:[],technology:"Java",kind:"component",x:48,y:332,width:320,height:180,labelBBox:{x:103,y:64,width:144,height:46}},{id:"edp.keycloak.keycloakDB",parent:"edp.keycloak",level:1,children:[],inEdges:["kn0x70"],outEdges:[],title:"Database",modelRef:"edp.keycloak.keycloakDB",shape:"storage",color:"primary",icon:"tech:postgresql",style:{opacity:15,size:"md"},tags:[],technology:"Postgresql",kind:"component",x:559,y:332,width:320,height:180,labelBBox:{x:101,y:64,width:148,height:46}}],edges:[{id:"119ru5h",source:"edp.ingressNginx",target:"edp.keycloak.keycloak",label:"https",points:[[208,180],[208,224],[208,277],[208,322]],labelBBox:{x:209,y:240,width:34,height:18},parent:null,relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"kn0x70",source:"edp.keycloak.keycloak",target:"edp.keycloak.keycloakDB",label:"reads/writes",points:[[368,422],[425,422],[490,422],[548,422]],labelBBox:{x:424,y:396,width:79,height:18},parent:"edp.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"}]},forgejo:{_type:"element",tags:null,links:null,viewOf:"edp.forgejo",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Forgejo",id:"forgejo",autoLayout:{direction:"TB"},hash:"e58fa1188b5809568e6fb20b5adc1584fef396d8",bounds:{x:0,y:0,width:846,height:528},nodes:[{id:"edp.forgejo",parent:null,level:0,children:["edp.forgejo.forgejocollaboration","edp.forgejo.forgejoproject"],inEdges:["1dgzzfb"],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",depth:1,x:8,y:239,width:830,height:281,labelBBox:{x:6,y:0,width:58,height:15}},{id:"edp.forgejo.forgejocollaboration",parent:"edp.forgejo",level:1,children:[],inEdges:[],outEdges:[],title:"Collaboration",modelRef:"edp.forgejo.forgejocollaboration",shape:"rectangle",color:"primary",icon:"tech:github",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:300,width:320,height:180,labelBBox:{x:85,y:74,width:180,height:24}},{id:"edp.forgejo.forgejoproject",parent:"edp.forgejo",level:1,children:[],inEdges:[],outEdges:[],title:"Project Mgmt",modelRef:"edp.forgejo.forgejoproject",shape:"rectangle",color:"primary",icon:"tech:github",style:{opacity:15,size:"md"},tags:[],kind:"component",x:478,y:300,width:320,height:180,labelBBox:{x:85,y:74,width:180,height:24}},{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["1dgzzfb"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:48,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}}],edges:[{id:"1dgzzfb",source:"edp.ingressNginx",target:"edp.forgejo",label:"https",points:[[208,180],[208,195],[208,212],[208,228]],labelBBox:{x:173,y:186,width:34,height:18},parent:null,relations:["123efwn"],color:"gray",line:"dashed",head:"normal"}]},crossplane:{_type:"element",tags:null,links:null,viewOf:"edp.crossplane",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Crossplane",id:"crossplane",autoLayout:{direction:"TB"},hash:"21cafdc6d03bbe02437c3a01524d368cfd652a88",bounds:{x:0,y:0,width:1276,height:597},nodes:[{id:"edp.crossplane",parent:null,level:0,children:["edp.crossplane.crossplane","edp.crossplane.crossplaneFunction","edp.crossplane.crossplaneRbacManager","edp.crossplane.providerArgoCD","edp.crossplane.providerKind","edp.crossplane.providerShell"],inEdges:[],outEdges:[],title:"Crossplane",modelRef:"edp.crossplane",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Declarative management of ressources"},tags:["internal"],kind:"container",depth:1,x:8,y:8,width:1260,height:581,labelBBox:{x:6,y:0,width:80,height:15}},{id:"edp.crossplane.crossplane",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"Crossplane",modelRef:"edp.crossplane.crossplane",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:69,width:320,height:180,labelBBox:{x:107,y:74,width:105,height:24}},{id:"edp.crossplane.crossplaneFunction",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"Function Patch and Transform",modelRef:"edp.crossplane.crossplaneFunction",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:478,y:69,width:320,height:180,labelBBox:{x:23,y:74,width:273,height:24}},{id:"edp.crossplane.crossplaneRbacManager",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"RBAC Manager",modelRef:"edp.crossplane.crossplaneRbacManager",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:908,y:69,width:320,height:180,labelBBox:{x:88,y:74,width:144,height:24}},{id:"edp.crossplane.providerArgoCD",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"ArgoCD Provider",modelRef:"edp.crossplane.providerArgoCD",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:369,width:320,height:180,labelBBox:{x:82,y:74,width:155,height:24}},{id:"edp.crossplane.providerKind",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"Kind Provider",modelRef:"edp.crossplane.providerKind",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:478,y:369,width:320,height:180,labelBBox:{x:98,y:74,width:124,height:24}},{id:"edp.crossplane.providerShell",parent:"edp.crossplane",level:1,children:[],inEdges:[],outEdges:[],title:"Shell Provider",modelRef:"edp.crossplane.providerShell",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:908,y:369,width:320,height:180,labelBBox:{x:96,y:74,width:129,height:24}}],edges:[]},externalSecrets:{_type:"element",tags:null,links:null,viewOf:"edp.externalSecrets",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"external-secrets",id:"externalSecrets",autoLayout:{direction:"TB"},hash:"b3af3338d1f389aa939be93f7233de72e9cf818b",bounds:{x:0,y:0,width:846,height:597},nodes:[{id:"edp.externalSecrets",parent:null,level:0,children:["edp.externalSecrets.externalSecrets","edp.externalSecrets.certController","edp.externalSecrets.webhook"],inEdges:[],outEdges:[],title:"external-secrets",modelRef:"edp.externalSecrets",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],kind:"container",depth:1,x:8,y:8,width:830,height:581,labelBBox:{x:6,y:0,width:119,height:15}},{id:"edp.externalSecrets.externalSecrets",parent:"edp.externalSecrets",level:1,children:[],inEdges:[],outEdges:[],title:"external-secrets controller",modelRef:"edp.externalSecrets.externalSecrets",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:69,width:320,height:180,labelBBox:{x:43,y:74,width:234,height:24}},{id:"edp.externalSecrets.certController",parent:"edp.externalSecrets",level:1,children:[],inEdges:[],outEdges:[],title:"cert-controller",modelRef:"edp.externalSecrets.certController",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:478,y:69,width:320,height:180,labelBBox:{x:97,y:74,width:126,height:24}},{id:"edp.externalSecrets.webhook",parent:"edp.externalSecrets",level:1,children:[],inEdges:[],outEdges:[],title:"webhook",modelRef:"edp.externalSecrets.webhook",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:369,width:320,height:180,labelBBox:{x:118,y:74,width:84,height:24}}],edges:[]},velero:{_type:"element",tags:null,links:null,viewOf:"edp.velero",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Velero",id:"velero",autoLayout:{direction:"TB"},hash:"31cb339645f3556f63935e842bc8b051e3e17e78",bounds:{x:0,y:0,width:826,height:564},nodes:[{id:"edp.velero",parent:null,level:0,children:["edp.velero.velero"],inEdges:[],outEdges:["13dald4"],title:"Velero",modelRef:"edp.velero",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Backup Kubernetes resources"},tags:["internal"],kind:"container",depth:1,x:434,y:8,width:384,height:265,labelBBox:{x:6,y:0,width:49,height:15}},{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["mcc3r"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:0,y:384,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.velero.velero",parent:"edp.velero",level:1,children:[],inEdges:[],outEdges:["13dald4"],title:"Velero",modelRef:"edp.velero.velero",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:466,y:61,width:320,height:180,labelBBox:{x:129,y:74,width:62,height:24}},{id:"edp.minio",parent:null,level:0,children:[],inEdges:["13dald4","mcc3r"],outEdges:[],title:"Minio",modelRef:"edp.minio",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"S3 compatible blob storage"},tags:[],kind:"container",navigateTo:"minio",x:466,y:384,width:320,height:180,labelBBox:{x:67,y:63,width:186,height:48}}],edges:[{id:"13dald4",source:"edp.velero.velero",target:"edp.minio",label:"store backups",points:[[626,241],[626,282],[626,331],[626,374]],labelBBox:{x:627,y:301,width:91,height:18},parent:null,relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"mcc3r",source:"edp.ingressNginx",target:"edp.minio",label:"https",points:[[320,474],[364,474],[411,474],[456,474]],labelBBox:{x:376,y:448,width:34,height:18},parent:null,relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"}]},minio:{_type:"element",tags:null,links:null,viewOf:"edp.minio",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Minio",id:"minio",autoLayout:{direction:"TB"},hash:"0fb400499e182662d442885af28e9f6c9738a4da",bounds:{x:0,y:0,width:750,height:544},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["jfb4ud"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:0,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.velero",parent:null,level:0,children:[],inEdges:[],outEdges:["wqj1c3"],title:"Velero",modelRef:"edp.velero",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Backup Kubernetes resources"},tags:["internal"],kind:"container",navigateTo:"velero",x:430,y:0,width:320,height:180,labelBBox:{x:58,y:63,width:205,height:48}},{id:"edp.minio",parent:null,level:0,children:["edp.minio.minio"],inEdges:["jfb4ud","wqj1c3"],outEdges:[],title:"Minio",modelRef:"edp.minio",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"S3 compatible blob storage"},tags:[],kind:"container",depth:1,x:183,y:271,width:384,height:265,labelBBox:{x:6,y:0,width:36,height:15}},{id:"edp.minio.minio",parent:"edp.minio",level:1,children:[],inEdges:["jfb4ud","wqj1c3"],outEdges:[],title:"S3 Blob Storage",modelRef:"edp.minio.minio",shape:"storage",color:"primary",style:{opacity:15,size:"md"},tags:[],technology:"Minio",kind:"component",x:215,y:324,width:320,height:180,labelBBox:{x:85,y:64,width:150,height:46}}],edges:[{id:"jfb4ud",source:"edp.ingressNginx",target:"edp.minio.minio",label:"https",points:[[219,180],[247,222],[281,272],[309,315]],labelBBox:{x:275,y:240,width:34,height:18},parent:null,relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"wqj1c3",source:"edp.velero",target:"edp.minio.minio",label:"store backups",points:[[531,180],[503,222],[469,272],[441,315]],labelBBox:{x:490,y:240,width:91,height:18},parent:null,relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"}]},monitoring:{_type:"element",tags:null,links:null,viewOf:"edp.monitoring",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Monitoring",id:"monitoring",autoLayout:{direction:"TB"},hash:"0eedaf64b05f32fb962d9b885c9c7febad53741c",bounds:{x:0,y:0,width:878,height:645},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["j52jq6","15c9gki"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:510,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.monitoring",parent:null,level:0,children:["edp.monitoring.loki","edp.monitoring.alloy"],inEdges:["j52jq6","15c9gki"],outEdges:[],title:"Monitoring",modelRef:"edp.monitoring",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Observability system to monitor deployed components"},tags:[],kind:"container",depth:2,x:8,y:271,width:862,height:366,labelBBox:{x:6,y:0,width:75,height:15}},{id:"edp.monitoring.loki",parent:"edp.monitoring",level:1,children:["edp.monitoring.loki.queryFrontend"],inEdges:["15c9gki"],outEdges:[],title:"Loki",modelRef:"edp.monitoring.loki",shape:"rectangle",color:"primary",icon:"tech:grafana",style:{opacity:20,size:"md"},description:{txt:"Log aggregation system"},tags:[],kind:"container",depth:1,x:48,y:332,width:384,height:265,labelBBox:{x:6,y:0,width:30,height:15}},{id:"edp.monitoring.alloy",parent:"edp.monitoring",level:1,children:[],inEdges:["j52jq6"],outEdges:[],title:"Alloy",modelRef:"edp.monitoring.alloy",shape:"rectangle",color:"primary",icon:"tech:grafana",style:{opacity:15,size:"md",multiple:!0},description:{txt:"Open Telemetry Collector"},tags:[],kind:"component",x:510,y:385,width:320,height:180,labelBBox:{x:59,y:63,width:233,height:48}},{id:"edp.monitoring.loki.queryFrontend",parent:"edp.monitoring.loki",level:2,children:[],inEdges:["15c9gki"],outEdges:[],title:"Query Frontend",modelRef:"edp.monitoring.loki.queryFrontend",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:80,y:385,width:320,height:180,labelBBox:{x:88,y:74,width:144,height:24}}],edges:[{id:"j52jq6",source:"edp.ingressNginx",target:"edp.monitoring.alloy",label:"https",points:[[670,180],[670,238],[670,315],[670,375]],labelBBox:{x:671,y:240,width:34,height:18},parent:null,relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"15c9gki",source:"edp.ingressNginx",target:"edp.monitoring.loki.queryFrontend",label:"https",points:[[522,180],[482,207],[440,238],[404,271],[369,303],[336,342],[309,377]],labelBBox:{x:438,y:240,width:34,height:18},parent:null,relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"}]},ingressNginx:{_type:"element",tags:null,links:null,viewOf:"edp.ingressNginx",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Ingress",id:"ingressNginx",autoLayout:{direction:"TB"},hash:"7a821addac59ba362551aa1d990ed1be9968679c",bounds:{x:0,y:0,width:3780,height:564},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:["edp.ingressNginx.ingressNginx"],inEdges:[],outEdges:["1poylyw","llqgvs","75xltk","dh7ut5","1bv0wod","68hu20","nx2xew","momp7g","8cmkj7"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",depth:1,x:1708,y:8,width:384,height:265,labelBBox:{x:6,y:0,width:54,height:15}},{id:"edp.ingressNginx.ingressNginx",parent:"edp.ingressNginx",level:1,children:[],inEdges:[],outEdges:["1poylyw","llqgvs","75xltk","dh7ut5","1bv0wod","68hu20","nx2xew","momp7g","8cmkj7"],title:"ingress-nginx",modelRef:"edp.ingressNginx.ingressNginx",shape:"rectangle",color:"primary",icon:"tech:nginx",style:{opacity:15,size:"md"},tags:[],technology:"Nginx",kind:"component",x:1740,y:61,width:320,height:180,labelBBox:{x:85,y:64,width:181,height:46}},{id:"edp.argoCD",parent:null,level:0,children:[],inEdges:["1poylyw"],outEdges:[],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:0,y:384,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"edp.ui",parent:null,level:0,children:[],inEdges:["llqgvs"],outEdges:[],title:"Backstage",modelRef:"edp.ui",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Developer Portal"},tags:[],kind:"container",x:430,y:384,width:320,height:180,labelBBox:{x:102,y:63,width:116,height:48}},{id:"edp.forgejo",parent:null,level:0,children:[],inEdges:["75xltk"],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",navigateTo:"forgejo",x:860,y:384,width:340,height:180,labelBBox:{x:46,y:17,width:278,height:139}},{id:"edp.keycloak",parent:null,level:0,children:[],inEdges:["dh7ut5"],outEdges:[],title:"Keycloak",modelRef:"edp.keycloak",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Single Sign On for all EDP products"},tags:[],kind:"container",navigateTo:"keycloak",x:1310,y:384,width:320,height:180,labelBBox:{x:39,y:63,width:242,height:48}},{id:"edp.mailhog",parent:null,level:0,children:[],inEdges:["1bv0wod"],outEdges:[],title:"Mailhog",modelRef:"edp.mailhog",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Web and API based SMTP testing"},tags:[],kind:"container",navigateTo:"mailhog",x:1740,y:384,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:48}},{id:"edp.minio",parent:null,level:0,children:[],inEdges:["68hu20"],outEdges:[],title:"Minio",modelRef:"edp.minio",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"S3 compatible blob storage"},tags:[],kind:"container",navigateTo:"minio",x:2170,y:384,width:320,height:180,labelBBox:{x:67,y:63,width:186,height:48}},{id:"edp.monitoring",parent:null,level:0,children:[],inEdges:["nx2xew"],outEdges:[],title:"Monitoring",modelRef:"edp.monitoring",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Observability system to monitor deployed components"},tags:[],kind:"container",navigateTo:"monitoring",x:2600,y:384,width:320,height:180,labelBBox:{x:21,y:54,width:278,height:66}},{id:"edp.openbao",parent:null,level:0,children:[],inEdges:["momp7g"],outEdges:[],title:"OpenBao",modelRef:"edp.openbao",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Secure secret storage"},tags:[],kind:"container",x:3030,y:384,width:320,height:180,labelBBox:{x:85,y:63,width:151,height:48}},{id:"edp.testApp",parent:null,level:0,children:[],inEdges:["8cmkj7"],outEdges:[],title:"Fibonacci",modelRef:"edp.testApp",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Testapp to validate deployments"},tags:[],kind:"container",navigateTo:"testapp",x:3460,y:384,width:320,height:180,labelBBox:{x:50,y:63,width:220,height:48}}],edges:[{id:"1poylyw",source:"edp.ingressNginx.ingressNginx",target:"edp.argoCD",label:"https",points:[[1740,164],[1459,187],[862,248],[375,384],[360,388],[345,393],[329,398]],labelBBox:{x:704,y:301,width:34,height:18},parent:null,relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"llqgvs",source:"edp.ingressNginx.ingressNginx",target:"edp.ui",label:"https",points:[[1740,177],[1525,211],[1131,283],[805,384],[790,389],[775,394],[759,400]],labelBBox:{x:1102,y:301,width:34,height:18},parent:null,relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"75xltk",source:"edp.ingressNginx.ingressNginx",target:"edp.forgejo",label:"https",points:[[1740,208],[1609,254],[1420,322],[1255,384],[1240,390],[1225,395],[1210,401]],labelBBox:{x:1468,y:301,width:34,height:18},parent:null,relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"dh7ut5",source:"edp.ingressNginx.ingressNginx",target:"edp.keycloak",label:"https",points:[[1781,241],[1724,284],[1655,335],[1597,378]],labelBBox:{x:1699,y:301,width:34,height:18},parent:null,relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"1bv0wod",source:"edp.ingressNginx.ingressNginx",target:"edp.mailhog",label:"https",points:[[1900,241],[1900,282],[1900,331],[1900,374]],labelBBox:{x:1901,y:301,width:34,height:18},parent:null,relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"68hu20",source:"edp.ingressNginx.ingressNginx",target:"edp.minio",label:"https",points:[[2019,241],[2076,284],[2145,335],[2203,378]],labelBBox:{x:2129,y:301,width:34,height:18},parent:null,relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"nx2xew",source:"edp.ingressNginx.ingressNginx",target:"edp.monitoring",label:"https",points:[[2060,207],[2191,253],[2381,321],[2545,384],[2560,390],[2575,396],[2591,402]],labelBBox:{x:2370,y:301,width:34,height:18},parent:null,relations:["1jvab2g","fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"momp7g",source:"edp.ingressNginx.ingressNginx",target:"edp.openbao",label:"https",points:[[2060,177],[2272,213],[2657,285],[2975,384],[2990,389],[3005,394],[3021,400]],labelBBox:{x:2744,y:301,width:34,height:18},parent:null,relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"8cmkj7",source:"edp.ingressNginx.ingressNginx",target:"edp.testApp",label:"https",points:[[2060,164],[2338,188],[2926,250],[3405,384],[3420,388],[3435,393],[3451,399]],labelBBox:{x:3165,y:301,width:34,height:18},parent:null,relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"}]},testapp:{_type:"element",tags:null,links:null,viewOf:"edp.testApp",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Fibonacci",id:"testapp",autoLayout:{direction:"TB"},hash:"d8f40f5cfab10e6e91c79feeef6be3240922c723",bounds:{x:0,y:0,width:400,height:544},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["1tefjx2"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:40,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.testApp",parent:null,level:0,children:["edp.testApp.fibonacci"],inEdges:["1tefjx2"],outEdges:[],title:"Fibonacci",modelRef:"edp.testApp",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Testapp to validate deployments"},tags:[],kind:"container",depth:1,x:8,y:271,width:384,height:265,labelBBox:{x:6,y:0,width:65,height:15}},{id:"edp.testApp.fibonacci",parent:"edp.testApp",level:1,children:[],inEdges:["1tefjx2"],outEdges:[],title:"Fibonacci",modelRef:"edp.testApp.fibonacci",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},tags:[],technology:"Golang",kind:"component",x:40,y:324,width:320,height:180,labelBBox:{x:101,y:64,width:148,height:46}}],edges:[{id:"1tefjx2",source:"edp.ingressNginx",target:"edp.testApp.fibonacci",label:"https",points:[[200,180],[200,221],[200,271],[200,314]],labelBBox:{x:201,y:240,width:34,height:18},parent:null,relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"}]},mailhog:{_type:"element",tags:null,links:null,viewOf:"edp.mailhog",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Mailhog",id:"mailhog",autoLayout:{direction:"TB"},hash:"b9e703c2ceb2b2a400194d90ac7caa94525ac068",bounds:{x:0,y:0,width:400,height:544},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["axipfp"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:40,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.mailhog",parent:null,level:0,children:["edp.mailhog.mailhog"],inEdges:["axipfp"],outEdges:[],title:"Mailhog",modelRef:"edp.mailhog",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Web and API based SMTP testing"},tags:[],kind:"container",depth:1,x:8,y:271,width:384,height:265,labelBBox:{x:6,y:0,width:56,height:15}},{id:"edp.mailhog.mailhog",parent:"edp.mailhog",level:1,children:[],inEdges:["axipfp"],outEdges:[],title:"Mailhog",modelRef:"edp.mailhog.mailhog",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},tags:[],technology:"Golang",kind:"component",x:40,y:324,width:320,height:180,labelBBox:{x:109,y:64,width:132,height:46}}],edges:[{id:"axipfp",source:"edp.ingressNginx",target:"edp.mailhog.mailhog",label:"https",points:[[200,180],[200,221],[200,271],[200,314]],labelBBox:{x:201,y:240,width:34,height:18},parent:null,relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"}]},spark:{_type:"element",tags:null,links:null,viewOf:"edp.spark",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"Spark",id:"spark",autoLayout:{direction:"TB"},hash:"1ec41779bad408405a96c4063aa06b24ec2aace8",bounds:{x:0,y:0,width:400,height:281},nodes:[{id:"edp.spark",parent:null,level:0,children:["edp.spark.sparkoperator"],inEdges:[],outEdges:[],title:"Spark",modelRef:"edp.spark",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Allows running Spark applications on K8s"},tags:["internal"],kind:"container",depth:1,x:8,y:8,width:384,height:265,labelBBox:{x:6,y:0,width:43,height:15}},{id:"edp.spark.sparkoperator",parent:"edp.spark",level:1,children:[],inEdges:[],outEdges:[],title:"Spark Operator",modelRef:"edp.spark.sparkoperator",shape:"rectangle",color:"primary",icon:"tech:spark",style:{opacity:15,size:"md"},tags:[],technology:"Spark",kind:"component",x:40,y:61,width:320,height:180,labelBBox:{x:76,y:64,width:198,height:46}}],edges:[]},argoCD:{_type:"element",tags:null,links:null,viewOf:"edp.argoCD",_stage:"layouted",sourcePath:"views/edp/edp.c4",description:null,title:"ArgoCD",id:"argoCD",autoLayout:{direction:"TB"},hash:"53d798ca0a34dbe3ebf9b43318a151943ecaec33",bounds:{x:0,y:0,width:2058,height:883},nodes:[{id:"edp.ingressNginx",parent:null,level:0,children:[],inEdges:[],outEdges:["ce0h9c"],title:"Ingress",modelRef:"edp.ingressNginx",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],kind:"container",navigateTo:"ingressNginx",x:48,y:0,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edp.argoCD",parent:null,level:0,children:["edp.argoCD.argocdServer","edp.argoCD.argocdAppController","edp.argoCD.argocdAppSetController","edp.argoCD.argocdRepoServer","edp.argoCD.argocdRedis"],inEdges:["ce0h9c"],outEdges:["1e5s57z"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",depth:1,x:8,y:271,width:1690,height:604,labelBBox:{x:6,y:0,width:53,height:15}},{id:"edp.argoCD.argocdServer",parent:"edp.argoCD",level:1,children:[],inEdges:["ce0h9c"],outEdges:["124uc06"],title:"ArgoCD Server",modelRef:"edp.argoCD.argocdServer",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:48,y:332,width:320,height:180,labelBBox:{x:90,y:74,width:140,height:24}},{id:"edp.argoCD.argocdAppController",parent:"edp.argoCD",level:1,children:[],inEdges:[],outEdges:["doh0se"],title:"ApplicationController",modelRef:"edp.argoCD.argocdAppController",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:478,y:332,width:320,height:180,labelBBox:{x:66,y:74,width:189,height:24}},{id:"edp.argoCD.argocdAppSetController",parent:"edp.argoCD",level:1,children:[],inEdges:[],outEdges:["ekc7mk"],title:"ApplicationSeetController",modelRef:"edp.argoCD.argocdAppSetController",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:908,y:332,width:320,height:180,labelBBox:{x:45,y:74,width:230,height:24}},{id:"edp.argoCD.argocdRepoServer",parent:"edp.argoCD",level:1,children:[],inEdges:[],outEdges:["173l3xq","1e5s57z"],title:"Repo Server",modelRef:"edp.argoCD.argocdRepoServer",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},tags:[],kind:"component",x:1338,y:332,width:320,height:180,labelBBox:{x:102,y:74,width:116,height:24}},{id:"edp.argoCD.argocdRedis",parent:"edp.argoCD",level:1,children:[],inEdges:["124uc06","doh0se","ekc7mk","173l3xq"],outEdges:[],title:"Redis",modelRef:"edp.argoCD.argocdRedis",shape:"rectangle",color:"primary",icon:"tech:redis",style:{opacity:15,size:"md"},tags:[],technology:"Redis",kind:"component",x:693,y:655,width:320,height:180,labelBBox:{x:118,y:64,width:114,height:46}},{id:"edp.forgejogit",parent:null,level:0,children:[],inEdges:["1e5s57z"],outEdges:[],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:1738,y:655,width:320,height:180,labelBBox:{x:97,y:74,width:156,height:24}}],edges:[{id:"ce0h9c",source:"edp.ingressNginx",target:"edp.argoCD.argocdServer",label:"https",points:[[208,180],[208,224],[208,277],[208,322]],labelBBox:{x:209,y:240,width:34,height:18},parent:null,relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"124uc06",source:"edp.argoCD.argocdServer",target:"edp.argoCD.argocdRedis",label:"read/write",points:[[368,503],[464,550],[586,611],[684,660]],labelBBox:{x:551,y:572,width:65,height:18},parent:"edp.argoCD",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"doh0se",source:"edp.argoCD.argocdAppController",target:"edp.argoCD.argocdRedis",label:"read/write",points:[[688,512],[704,539],[722,568],[740,595],[751,612],[764,630],[776,647]],labelBBox:{x:741,y:572,width:65,height:18},parent:"edp.argoCD",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"ekc7mk",source:"edp.argoCD.argocdAppSetController",target:"edp.argoCD.argocdRedis",label:"read/write",points:[[1008,512],[980,554],[947,603],[918,646]],labelBBox:{x:968,y:572,width:65,height:18},parent:"edp.argoCD",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"173l3xq",source:"edp.argoCD.argocdRepoServer",target:"edp.argoCD.argocdRedis",label:"read/write",points:[[1338,503],[1242,550],[1120,611],[1022,660]],labelBBox:{x:1196,y:572,width:65,height:18},parent:"edp.argoCD",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"1e5s57z",source:"edp.argoCD.argocdRepoServer",target:"edp.forgejogit",label:"Syncs git repo",points:[[1609,512],[1662,554],[1725,605],[1779,649]],labelBBox:{x:1711,y:572,width:93,height:18},parent:null,relations:["6mupa0"],color:"gray",line:"dashed",head:"normal"}]},idp:{_type:"element",tags:null,links:null,viewOf:"edp",_stage:"layouted",sourcePath:"views/edp/edp-as-idp.c4",description:null,title:"EDP as IDP",id:"idp",autoLayout:{direction:"TB"},hash:"7440ad8a1e185be7bca7133b9432ab2276b005cf",bounds:{x:0,y:0,width:6408,height:1862},nodes:[{id:"developer",parent:null,level:0,children:[],inEdges:[],outEdges:["1w9cpb2","1y3lcyj","1agven9","1nv0w41","3nxrq7","bfgapq"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:25,size:"xl"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:5888,y:192,width:520,height:290,labelBBox:{x:111,y:108,width:298,height:64}},{id:"@gr1",parent:null,kind:"@group",title:"EDP",color:"primary",shape:"rectangle",children:["@gr2","@gr5","@gr6","@gr7"],inEdges:["1w9cpb2","1y3lcyj","1agven9","1nv0w41","3nxrq7","bfgapq"],outEdges:[],level:0,depth:3,tags:[],style:{border:"dashed",opacity:15},x:8,y:8,width:5840,height:1846,labelBBox:{x:6,y:0,width:27,height:15}},{id:"@gr2",parent:"@gr1",kind:"@group",title:"Developer Control Plane",color:"primary",shape:"rectangle",children:["@gr3","@gr4"],inEdges:["1w9cpb2","1y3lcyj","1agven9"],outEdges:[],level:0,depth:2,tags:[],style:{border:"dashed",opacity:15},x:48,y:69,width:2580,height:935,labelBBox:{x:6,y:0,width:170,height:15}},{id:"@gr3",parent:"@gr2",kind:"@group",title:"Frontend",color:"primary",shape:"rectangle",children:["edp.ui.backstage","edp.api"],inEdges:["1w9cpb2","1y3lcyj"],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:1358,y:572,width:1230,height:392,labelBBox:{x:6,y:0,width:65,height:15}},{id:"@gr4",parent:"@gr2",kind:"@group",title:"Version Control",color:"primary",shape:"rectangle",children:["applicationspecification.application_gitrepo","applicationspecification.applicationspec_gitrepo","edp.forgejogit"],inEdges:["1agven9"],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:88,y:130,width:1230,height:834,labelBBox:{x:6,y:0,width:111,height:15}},{id:"@gr5",parent:"@gr1",kind:"@group",title:"Integration & Delivery Plane",color:"primary",shape:"rectangle",children:["forgejoRunner","edp.imageregistry","edp.argoCD"],inEdges:["1nv0w41"],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:3308,y:572,width:600,height:1242,labelBBox:{x:6,y:0,width:189,height:15}},{id:"@gr6",parent:"@gr1",kind:"@group",title:"Monitoring Plane",color:"primary",shape:"rectangle",children:["edp.monitoring","edp.grafana"],inEdges:["3nxrq7"],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:2668,y:130,width:600,height:834,labelBBox:{x:6,y:0,width:116,height:15}},{id:"@gr7",parent:"@gr1",kind:"@group",title:"Security Plane",color:"primary",shape:"rectangle",children:["edp.keycloak","edp.kyverno","edp.externalSecrets","edp.openbao"],inEdges:["bfgapq"],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:3948,y:572,width:1860,height:831,labelBBox:{x:6,y:0,width:100,height:15}},{id:"edp.ui.backstage",parent:"@gr3",level:1,children:[],inEdges:["1w9cpb2"],outEdges:[],title:"Backstage",modelRef:"edp.ui.backstage",shape:"browser",color:"primary",icon:"tech:react",style:{opacity:25,size:"xl"},tags:[],kind:"component",x:1398,y:634,width:520,height:290,labelBBox:{x:179,y:123,width:192,height:32}},{id:"edp.api",parent:"@gr3",level:1,children:[],inEdges:["1y3lcyj"],outEdges:[],title:"API",modelRef:"edp.api",shape:"rectangle",color:"primary",icon:"tech:swagger",style:{opacity:25,size:"xl"},description:{txt:"API for the EDP platform"},tags:[],kind:"container",x:2028,y:634,width:520,height:290,labelBBox:{x:129,y:108,width:292,height:64}},{id:"applicationspecification.application_gitrepo",parent:"@gr4",level:1,children:[],inEdges:[],outEdges:[],title:"Git App Repo",modelRef:"applicationspecification.application_gitrepo",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:25,size:"xl"},description:{txt:"Git Application Repository"},tags:[],technology:"Git",kind:"component",x:128,y:192,width:520,height:290,labelBBox:{x:123,y:96,width:304,height:89}},{id:"applicationspecification.applicationspec_gitrepo",parent:"@gr4",level:1,children:[],inEdges:[],outEdges:[],title:"Git AppSpec Repo",modelRef:"applicationspecification.applicationspec_gitrepo",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:25,size:"xl"},description:{txt:"Git Application Specification Repository"},tags:[],technology:"Git",kind:"component",x:128,y:634,width:520,height:290,labelBBox:{x:114,y:83,width:322,height:114}},{id:"edp.forgejogit",parent:"@gr4",level:1,children:[],inEdges:["1agven9"],outEdges:[],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:25,size:"xl"},tags:[],kind:"component",x:758,y:634,width:520,height:290,labelBBox:{x:179,y:123,width:192,height:32}},{id:"forgejoRunner",parent:"@gr5",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:3348,y:1073,width:520,height:290,labelBBox:{x:69,y:71,width:382,height:139}},{id:"edp.imageregistry",parent:"@gr5",level:1,children:[],inEdges:["1nv0w41"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:25,size:"xl"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:3348,y:634,width:520,height:290,labelBBox:{x:70,y:96,width:410,height:89}},{id:"edp.argoCD",parent:"@gr5",level:1,children:[],inEdges:[],outEdges:[],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:3348,y:1484,width:520,height:290,labelBBox:{x:187,y:108,width:145,height:64}},{id:"edp.monitoring",parent:"@gr6",level:1,children:[],inEdges:[],outEdges:[],title:"Monitoring",modelRef:"edp.monitoring",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Observability system to monitor deployed components"},tags:[],kind:"container",navigateTo:"monitoring",x:2708,y:192,width:520,height:290,labelBBox:{x:66,y:96,width:388,height:88}},{id:"edp.grafana",parent:"@gr6",level:1,children:[],inEdges:["3nxrq7"],outEdges:[],title:"Grafana",modelRef:"edp.grafana",shape:"rectangle",color:"primary",icon:"tech:grafana",style:{opacity:25,size:"xl"},description:{txt:"Data visualization and monitoring"},tags:[],kind:"container",x:2708,y:634,width:520,height:290,labelBBox:{x:89,y:108,width:372,height:64}},{id:"edp.keycloak",parent:"@gr7",level:1,children:[],inEdges:["bfgapq"],outEdges:[],title:"Keycloak",modelRef:"edp.keycloak",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Single Sign On for all EDP products"},tags:[],kind:"container",navigateTo:"keycloak",x:5248,y:634,width:520,height:290,labelBBox:{x:92,y:108,width:337,height:64}},{id:"edp.kyverno",parent:"@gr7",level:1,children:[],inEdges:[],outEdges:[],title:"Kyverno",modelRef:"edp.kyverno",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Policy-as-Code"},tags:["internal"],kind:"container",x:3988,y:634,width:520,height:290,labelBBox:{x:187,y:108,width:146,height:64}},{id:"edp.externalSecrets",parent:"@gr7",level:1,children:[],inEdges:[],outEdges:[],title:"external-secrets",modelRef:"edp.externalSecrets",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],kind:"container",navigateTo:"externalSecrets",x:4618,y:634,width:520,height:290,labelBBox:{x:92,y:96,width:337,height:88}},{id:"edp.openbao",parent:"@gr7",level:1,children:[],inEdges:[],outEdges:[],title:"OpenBao",modelRef:"edp.openbao",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Secure secret storage"},tags:[],kind:"container",x:3988,y:1073,width:520,height:290,labelBBox:{x:155,y:108,width:209,height:64}}],edges:[{id:"1w9cpb2",source:"developer",target:"edp.ui.backstage",label:"create and maintain apps",points:[[5888,380],[5535,435],[4884,529],[4324,564],[4291,566],[2004,563],[1973,572],[1931,585],[1888,605],[1850,629]],labelBBox:{x:4574,y:541,width:161,height:18},parent:null,relations:["65iq0s"],color:"gray",line:"dashed",head:"normal"},{id:"1y3lcyj",source:"developer",target:"edp.api",label:"uses API",points:[[5888,397],[5630,453],[5222,532],[4864,564],[4833,567],[2671,564],[2641,572],[2594,585],[2548,606],[2504,629]],labelBBox:{x:5041,y:541,width:60,height:18},parent:null,relations:["1dgd663"],color:"gray",line:"dashed",head:"normal"},{id:"1agven9",source:"developer",target:"edp.forgejogit",label:"[...]",points:[[5888,369],[5436,421],[4473,526],[3657,564],[3625,566],[1362,563],[1331,572],[1289,585],[1247,605],[1209,628]],labelBBox:{x:3998,y:540,width:25,height:18},parent:null,relations:["1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"1nv0w41",source:"developer",target:"edp.imageregistry",label:"pushes and pull images",points:[[5888,438],[5750,487],[5575,540],[5413,564],[5372,571],[3961,560],[3921,572],[3879,585],[3837,605],[3799,628]],labelBBox:{x:5517,y:541,width:151,height:18},parent:null,relations:["u2ppde"],color:"gray",line:"dashed",head:"normal"},{id:"3nxrq7",source:"developer",target:"edp.grafana",label:"monitors",points:[[5888,415],[5693,469],[5418,536],[5172,564],[5120,571],[3331,557],[3281,572],[3239,585],[3197,605],[3159,628]],labelBBox:{x:5308,y:541,width:58,height:18},parent:null,relations:["dol85h"],color:"gray",line:"dashed",head:"normal"},{id:"bfgapq",source:"developer",target:"edp.keycloak",label:"authenticates",points:[[5939,481],[5871,528],[5795,581],[5726,628]],labelBBox:{x:5848,y:541,width:87,height:18},parent:null,relations:["129xciy"],color:"gray",line:"dashed",head:"normal"}]},edporchestrator:{_type:"element",tags:null,links:null,viewOf:"edp",_stage:"layouted",sourcePath:"views/edp/edp-as-orchestrator.c4",description:null,title:"EDP as Orchestrator",id:"edporchestrator",autoLayout:{direction:"TB"},hash:"3b527fd6f99efa02fc730d4569c0a0ccc75b4ef3",bounds:{x:0,y:0,width:846,height:1457},nodes:[{id:"@gr1",parent:null,kind:"@group",title:"EDP",color:"primary",shape:"rectangle",children:["@gr2","@gr3","@gr4","@gr5","@gr6"],inEdges:[],outEdges:[],level:0,depth:2,tags:[],style:{border:"dashed",opacity:15},x:8,y:8,width:830,height:1441,labelBBox:{x:6,y:0,width:27,height:15}},{id:"@gr2",parent:"@gr1",kind:"@group",title:"Developer Control Plane",color:"primary",shape:"rectangle",children:[],inEdges:[],outEdges:[],level:0,depth:0,tags:[],style:{border:"dashed",opacity:15},x:48,y:69,width:320,height:180,labelBBox:{x:49,y:74,width:222,height:24}},{id:"@gr3",parent:"@gr1",kind:"@group",title:"Integration & Delivery Plane",color:"primary",shape:"rectangle",children:[],inEdges:[],outEdges:[],level:0,depth:0,tags:[],style:{border:"dashed",opacity:15},x:478,y:69,width:320,height:180,labelBBox:{x:34,y:74,width:252,height:24}},{id:"@gr4",parent:"@gr1",kind:"@group",title:"Monitoring Plane",color:"primary",shape:"rectangle",children:[],inEdges:[],outEdges:[],level:0,depth:0,tags:[],style:{border:"dashed",opacity:15},x:48,y:369,width:320,height:180,labelBBox:{x:83,y:74,width:154,height:24}},{id:"@gr5",parent:"@gr1",kind:"@group",title:"Security Plane",color:"primary",shape:"rectangle",children:[],inEdges:[],outEdges:[],level:0,depth:0,tags:[],style:{border:"dashed",opacity:15},x:478,y:369,width:320,height:180,labelBBox:{x:94,y:74,width:133,height:24}},{id:"@gr6",parent:"@gr1",kind:"@group",title:"Backend",color:"primary",shape:"rectangle",children:["edp.argoCD","edp.crossplane"],inEdges:[],outEdges:[],level:0,depth:1,tags:[],style:{border:"dashed",opacity:15},x:198,y:608,width:600,height:801,labelBBox:{x:6,y:0,width:59,height:15}},{id:"edp.argoCD",parent:"@gr6",level:1,children:[],inEdges:[],outEdges:[],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Declarative management of platform tools"},tags:[],kind:"container",isCustomized:!0,navigateTo:"argoCD",x:238,y:669,width:520,height:290,labelBBox:{x:64,y:109,width:393,height:63}},{id:"edp.crossplane",parent:"@gr6",level:1,children:[],inEdges:[],outEdges:[],title:"Crossplane",modelRef:"edp.crossplane",shape:"rectangle",color:"primary",style:{opacity:25,size:"xl"},description:{txt:"Declarative management of ressources"},tags:["internal"],kind:"container",navigateTo:"crossplane",x:238,y:1079,width:520,height:290,labelBBox:{x:75,y:109,width:369,height:63}}],edges:[]},platform_orchestration_flow:{_type:"element",tags:null,links:null,viewOf:"edp",_stage:"layouted",sourcePath:"views/edp/platform-orchestration-flow.c4",description:null,title:"Platform Orchestration Flow",id:"platform_orchestration_flow",autoLayout:{direction:"TB"},hash:"14eb082fcf4b1c9a9d95bd8ba1840f10c233d072",bounds:{x:0,y:0,width:1296,height:861},nodes:[{id:"idpbuilder",parent:null,level:0,children:[],inEdges:[],outEdges:["1dvclx1","hjkafp"],title:"idpbuilder",modelRef:"idpbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Bootstrap tool for initial platform provisioning"},tags:[],technology:"Golang",kind:"component",x:260,y:0,width:335,height:180,labelBBox:{x:47,y:44,width:273,height:85}},{id:"edp",parent:null,level:0,children:["edp.argoCD","edp.forgejo","edp.keycloak","edp.monitoring"],inEdges:["1dvclx1","hjkafp"],outEdges:[],title:"EDP",modelRef:"edp",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:8,y:271,width:1280,height:582,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["1dvclx1"],outEdges:[],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:48,y:332,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:["hjkafp"],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform -offering capabilities like -code version controling -collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",navigateTo:"forgejo",x:478,y:332,width:340,height:180,labelBBox:{x:46,y:17,width:278,height:139}},{id:"edp.keycloak",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Keycloak",modelRef:"edp.keycloak",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Single Sign On for all EDP products"},tags:[],kind:"container",navigateTo:"keycloak",x:928,y:332,width:320,height:180,labelBBox:{x:39,y:63,width:242,height:48}},{id:"edp.monitoring",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Monitoring",modelRef:"edp.monitoring",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Observability system to monitor deployed components"},tags:[],kind:"container",navigateTo:"monitoring",x:928,y:633,width:320,height:180,labelBBox:{x:21,y:54,width:278,height:66}}],edges:[{id:"1dvclx1",source:"idpbuilder",target:"edp.argoCD",label:"installs",points:[[369,180],[339,224],[303,278],[273,324]],labelBBox:{x:326,y:240,width:47,height:18},parent:null,relations:["8fwa3r"],color:"gray",line:"dashed",head:"normal"},{id:"hjkafp",source:"idpbuilder",target:"edp.forgejo",label:"installs",points:[[487,180],[517,224],[553,278],[583,324]],labelBBox:{x:539,y:240,width:47,height:18},parent:null,relations:["1ai9t9i"],color:"gray",line:"dashed",head:"normal"}]},"application-transition":{_type:"element",tags:null,links:null,_stage:"layouted",sourcePath:"views/high-level-concept/application-transition.c4",description:null,title:"application-transistion",id:"application-transition",autoLayout:{direction:"LR",nodeSep:140,rankSep:180},hash:"273e521fc8ecb88776ebeada66d26bce21c3c2e5",bounds:{x:0,y:0,width:1297,height:857},nodes:[{id:"@gr1",parent:null,kind:"@group",title:"developer-scope",color:"green",shape:"rectangle",children:["@gr2","@gr3","developer","otherProductLifecycleRoles"],inEdges:[],outEdges:["17brhnu"],level:0,depth:3,tags:[],style:{border:"none",opacity:20},x:8,y:8,width:853,height:841,labelBBox:{x:6,y:0,width:114,height:15}},{id:"@gr2",parent:"@gr1",kind:"@group",title:"Devops inner-loop",color:"gray",shape:"rectangle",children:["localbox"],inEdges:["zjg544","6szgsj"],outEdges:["1uo6k6b"],level:0,depth:2,tags:[],style:{border:"none",opacity:30},x:373,y:459,width:448,height:350,labelBBox:{x:6,y:0,width:122,height:15}},{id:"@gr3",parent:"@gr1",kind:"@group",title:"Devops outer-loop",color:"gray",shape:"rectangle",children:["edp"],inEdges:["1okgiq5","1wupl5x","1uo6k6b"],outEdges:["17brhnu","6szgsj"],level:0,depth:2,tags:[],style:{border:"none",opacity:30},x:373,y:69,width:448,height:350,labelBBox:{x:6,y:0,width:126,height:15}},{id:"cloud",parent:null,level:0,children:["cloud.application"],inEdges:["17brhnu"],outEdges:[],title:"EdgeConnect Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",depth:1,isCustomized:!0,x:905,y:122,width:384,height:265,labelBBox:{x:6,y:0,width:132,height:15}},{id:"cloud.application",parent:"cloud",level:1,children:[],inEdges:[],outEdges:[],title:"application",modelRef:"cloud.application",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"An application description"},tags:[],technology:"DSL",kind:"schema",x:937,y:175,width:320,height:180,labelBBox:{x:73,y:53,width:175,height:67}},{id:"developer",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["zjg544","1okgiq5"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"xs",textSize:"sm"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:63,y:530,width:180,height:100,labelBBox:{x:51,y:37,width:77,height:20}},{id:"otherProductLifecycleRoles",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["1wupl5x"],title:"Reviewer, Tester, Auditors, Operators",modelRef:"otherProductLifecycleRoles",shape:"person",color:"green",style:{opacity:15,size:"xs",textSize:"sm"},description:{txt:"Coworking roles in the outer loop"},tags:[],kind:"actor",x:48,y:215,width:209,height:100,labelBBox:{x:6,y:37,width:197,height:20}},{id:"localbox",parent:"@gr2",level:1,children:["localbox.application"],inEdges:["zjg544","6szgsj"],outEdges:["1uo6k6b"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:405,y:512,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.application",parent:"localbox",level:2,children:[],inEdges:[],outEdges:[],title:"application",modelRef:"localbox.application",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"An application description"},tags:[],technology:"DSL",kind:"schema",x:437,y:565,width:320,height:180,labelBBox:{x:73,y:53,width:175,height:67}},{id:"edp",parent:"@gr3",level:1,children:["edp.application"],inEdges:["1okgiq5","1wupl5x","1uo6k6b"],outEdges:["17brhnu","6szgsj"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"magenta",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:405,y:122,width:384,height:265,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.application",parent:"edp",level:2,children:[],inEdges:[],outEdges:[],title:"application",modelRef:"edp.application",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"An application description"},tags:[],technology:"DSL",kind:"schema",x:437,y:175,width:320,height:180,labelBBox:{x:73,y:53,width:175,height:67}}],edges:[{id:"zjg544",source:"developer",target:"localbox",label:"inner loop",points:[[242,595],[286,602],[341,612],[395,621]],labelBBox:{x:257,y:608,width:65,height:18},parent:"@gr1",relations:["5hkplj"],color:"gray",line:"dashed",head:"normal"},{id:"1okgiq5",source:"developer",target:"edp",label:"outer loop",points:[[224,530],[276,493],[349,441],[416,393]],labelBBox:{x:257,y:458,width:66,height:18},parent:"@gr1",relations:["1pp73vj","nb1ag9","14tsadm","129xciy","1l7h8as","dol85h","65iq0s","u2ppde","1dgd663","1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"1wupl5x",source:"otherProductLifecycleRoles",target:"edp",label:"review / operate",points:[[257,265],[298,265],[347,265],[395,265]],labelBBox:{x:332,y:265,width:104,height:18},parent:"@gr1",relations:["lb4xas"],color:"gray",line:"dashed",head:"normal"},{id:"1uo6k6b",source:"localbox",target:"edp",label:"sync",points:[[597,512],[597,474],[597,436],[597,397]],labelBBox:{x:563,y:449,width:33,height:18},parent:"@gr1",relations:["1mp9fps"],color:"gray",line:"dashed",head:"normal"},{id:"17brhnu",source:"edp",target:"cloud",label:"deploy & observe",points:[[789,265],[824,265],[860,265],[895,265]],labelBBox:{x:848,y:253,width:112,height:18},parent:null,relations:["gerdx4"],color:"gray",line:"dashed",head:"normal"},{id:"6szgsj",source:"edp",target:"localbox",label:null,points:[[597,387],[597,425],[597,463],[597,502]],labelBBox:null,parent:"@gr1",relations:["96ogr7"],color:"gray",line:"dashed",head:"normal"}]},"edgeconnect-context":{_type:"element",tags:null,links:null,_stage:"layouted",sourcePath:"views/high-level-concept/edgeconnect-context.c4",description:null,title:"EdgeConnect Context",id:"edgeconnect-context",autoLayout:{direction:"LR",nodeSep:140,rankSep:180},hash:"0da428d75abcb0d77c2e60e7bb97a2c635e491fb",bounds:{x:0,y:0,width:2626,height:1201},nodes:[{id:"developer",parent:null,level:0,children:[],inEdges:[],outEdges:["1okgiq5","1yfrmvt","1yfr9mr","162qbqw"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"xs",textSize:"sm"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:0,y:293,width:180,height:100,labelBBox:{x:52,y:37,width:77,height:20}},{id:"platformdeveloper",parent:null,level:0,children:[],inEdges:[],outEdges:["vyep7i"],title:"Platform / Cloud Operator",modelRef:"platformdeveloper",shape:"person",color:"gray",style:{opacity:15,size:"xs",textSize:"sm"},description:{txt:"The EDP engineer"},tags:[],kind:"actor",isCustomized:!0,x:1087,y:1101,width:198,height:100,labelBBox:{x:6,y:37,width:186,height:20}},{id:"edp",parent:null,level:0,children:[],inEdges:["1okgiq5"],outEdges:["1ivh6bj"],title:"EDP / CI Automation",modelRef:"edp",shape:"rectangle",color:"magenta",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",isCustomized:!0,navigateTo:"edp",x:429,y:623,width:346,height:180,labelBBox:{x:45,y:53,width:285,height:67}},{id:"edgeCli",parent:null,level:0,children:[],inEdges:["1yfrmvt"],outEdges:["1vb6n5w"],title:"EdgeConnect CLI",modelRef:"edgeCli",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Command-line client for interactive usage"},tags:[],kind:"component",x:442,y:0,width:320,height:180,labelBBox:{x:20,y:63,width:280,height:48}},{id:"edgeSdk",parent:null,level:0,children:[],inEdges:["1yfr9mr"],outEdges:["1tutg7y"],title:"EdgeConnect SDK",modelRef:"edgeSdk",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"SDK for programmatic integration"},tags:[],kind:"component",x:442,y:943,width:320,height:180,labelBBox:{x:46,y:63,width:227,height:48}},{id:"edgeTerraformProvider",parent:null,level:0,children:[],inEdges:["162qbqw","1ivh6bj"],outEdges:["1vakg11"],title:"Terraform Edge provider",modelRef:"edgeTerraformProvider",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Terraform provider enabling declarative provisioning"},tags:[],kind:"component",x:1026,y:478,width:320,height:180,labelBBox:{x:28,y:54,width:266,height:66}},{id:"edgeConnect",parent:null,level:0,children:["edgeConnect.api","edgeConnect.controllers","edgeConnect.resources","edgeConnect.runtime"],inEdges:["vyep7i","1vb6n5w","1tutg7y","1vakg11"],outEdges:[],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"magenta",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",depth:1,x:1577,y:233,width:1041,height:651,labelBBox:{x:6,y:0,width:132,height:15}},{id:"edgeConnect.api",parent:"edgeConnect",level:1,children:[],inEdges:["1vb6n5w","1tutg7y","1vakg11"],outEdges:["17py4dn"],title:"Edge Cloud API",modelRef:"edgeConnect.api",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Single entry point for provisioning and lifecycle management"},tags:[],kind:"container",x:1617,y:614,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:66}},{id:"edgeConnect.controllers",parent:"edgeConnect",level:1,children:[],inEdges:[],outEdges:["1fx2ku4","16qtg61"],title:"Controllers / Scheduler",modelRef:"edgeConnect.controllers",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Reconciles desired state and drives deployments"},tags:[],kind:"container",x:1617,y:294,width:320,height:180,labelBBox:{x:40,y:54,width:241,height:66}},{id:"edgeConnect.resources",parent:"edgeConnect",level:1,children:[],inEdges:["17py4dn","1fx2ku4"],outEdges:[],title:"Edge Resources",modelRef:"edgeConnect.resources",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Managed resources such as App, AppInstance, etc."},tags:[],kind:"container",x:2223,y:614,width:355,height:180,labelBBox:{x:18,y:54,width:319,height:66}},{id:"edgeConnect.runtime",parent:"edgeConnect",level:1,children:[],inEdges:["16qtg61"],outEdges:[],title:"Edge Clusters",modelRef:"edgeConnect.runtime",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"Runtime where applications actually run"},tags:[],kind:"container",x:2241,y:294,width:320,height:180,labelBBox:{x:25,y:63,width:269,height:48}}],edges:[{id:"1okgiq5",source:"developer",target:"edp",label:"outer loop",points:[[160,393],[239,450],[370,545],[469,617]],labelBBox:{x:271,y:450,width:66,height:18},parent:null,relations:["1pp73vj","nb1ag9","14tsadm","129xciy","1l7h8as","dol85h","65iq0s","u2ppde","1dgd663","1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"1yfrmvt",source:"developer",target:"edgeCli",label:"uses",points:[[180,298],[208,284],[241,268],[270,253],[323,227],[381,198],[433,172]],labelBBox:{x:287,y:198,width:34,height:18},parent:null,relations:["3rnruw"],color:"gray",line:"dashed",head:"normal"},{id:"1yfr9mr",source:"developer",target:"edgeSdk",label:"uses",points:[[117,393],[169,490],[293,711],[428,873],[446,895],[467,916],[488,936]],labelBBox:{x:287,y:641,width:34,height:18},parent:null,relations:["1ks7amr"],color:"gray",line:"dashed",head:"normal"},{id:"162qbqw",source:"developer",target:"edgeTerraformProvider",label:"uses",points:[[180,361],[362,399],[781,485],[1017,533]],labelBBox:{x:585,y:392,width:34,height:18},parent:null,relations:["1l0aei7"],color:"gray",line:"dashed",head:"normal"},{id:"1ivh6bj",source:"edp",target:"edgeTerraformProvider",label:"automates",points:[[775,670],[851,651],[941,629],[1016,610]],labelBBox:{x:866,y:609,width:69,height:18},parent:null,relations:["1t93kj2"],color:"gray",line:"dashed",head:"normal"},{id:"1vb6n5w",source:"edgeCli",target:"edgeConnect.api",label:"calls",points:[[761,147],[915,205],[1152,301],[1346,408],[1454,467],[1568,546],[1651,608]],labelBBox:{x:1170,y:235,width:32,height:18},parent:null,relations:["h84u7y"],color:"gray",line:"dashed",head:"normal"},{id:"1tutg7y",source:"edgeSdk",target:"edgeConnect.api",label:"calls",points:[[762,988],[983,926],[1381,815],[1607,751]],labelBBox:{x:1170,y:802,width:32,height:18},parent:null,relations:["1elpzvp"],color:"gray",line:"dashed",head:"normal"},{id:"1vakg11",source:"edgeTerraformProvider",target:"edgeConnect.api",label:"provisions via",points:[[1346,605],[1427,623],[1525,646],[1607,665]],labelBBox:{x:1437,y:605,width:89,height:18},parent:null,relations:["6h5xnh"],color:"gray",line:"dashed",head:"normal"},{id:"17py4dn",source:"edgeConnect.api",target:"edgeConnect.resources",label:"creates/updates",points:[[1937,713],[1967,715],[1998,716],[2027,717],[2088,718],[2153,717],[2213,715]],labelBBox:{x:2028,y:694,width:104,height:18},parent:"edgeConnect",relations:["wx4vwc"],color:"gray",line:"dashed",head:"normal"},{id:"1fx2ku4",source:"edgeConnect.controllers",target:"edgeConnect.resources",label:"reconciles",points:[[1937,466],[2022,510],[2127,564],[2216,609]],labelBBox:{x:2047,y:492,width:67,height:18},parent:"edgeConnect",relations:["qufboq"],color:"gray",line:"dashed",head:"normal"},{id:"16qtg61",source:"edgeConnect.controllers",target:"edgeConnect.runtime",label:"deploys",points:[[1937,384],[2027,384],[2139,384],[2230,384]],labelBBox:{x:2054,y:361,width:52,height:18},parent:"edgeConnect",relations:["1a9x5zg"],color:"gray",line:"dashed",head:"normal"},{id:"vyep7i",source:"platformdeveloper",target:"edgeConnect",label:"operates",points:[[1270,1101],[1341,1058],[1443,992],[1527,927],[1542,915],[1557,903],[1573,891]],labelBBox:{x:1370,y:998,width:58,height:18},parent:null,relations:["4pplfw"],color:"gray",line:"dashed",head:"normal"}]},landscape:{_type:"element",tags:null,links:null,_stage:"layouted",sourcePath:"views/high-level-concept/platform-context/developer-landscape.c4",description:null,title:"Developer Landscape View",id:"landscape",autoLayout:{direction:"LR",nodeSep:100,rankSep:100},hash:"b38716b0a8652d3a87edbd32cc5d99cc254dbcdc",bounds:{x:0,y:0,width:3368,height:2923},nodes:[{id:"applicationspecification",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"application-specification",modelRef:"applicationspecification",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"The application specification describes the application and its components. It is used to generate the application and its components."},tags:[],kind:"component",x:16,y:280,width:338,height:180,labelBBox:{x:18,y:45,width:303,height:84}},{id:"forgejoRunnerWorker",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Forgejo Runner Worker",modelRef:"forgejoRunnerWorker",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],kind:"component",x:734,y:280,width:333,height:180,labelBBox:{x:18,y:45,width:297,height:84}},{id:"promtail",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Promtail",modelRef:"promtail",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Log shipper agent for Loki"},tags:[],kind:"component",x:1288,y:280,width:320,height:180,labelBBox:{x:72,y:63,width:177,height:48}},{id:"terraform",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Terraform",modelRef:"terraform",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Infrastructure provisioning (IaC)"},tags:[],technology:"Terraform",kind:"component",x:1862,y:280,width:320,height:180,labelBBox:{x:52,y:53,width:214,height:67}},{id:"elasticsearch",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Elasticsearch",modelRef:"elasticsearch",shape:"rectangle",color:"primary",icon:"tech:elasticsearch",style:{opacity:20,size:"md"},description:{txt:`Elasticsearch is a distributed, RESTful search and analytics engine capable of -addressing a growing number of use cases. It centrally stores your data so you can -discover the expected and uncover the unexpected.`},tags:[],technology:"Elasticsearch",kind:"container",x:0,y:0,width:370,height:180,labelBBox:{x:46,y:17,width:308,height:139}},{id:"objectstorage",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"s3 Object Storage",modelRef:"objectstorage",shape:"rectangle",color:"primary",style:{opacity:20,size:"md"},description:{txt:"s3 Object Storage"},tags:[],technology:"S3 Object Storage",kind:"container",x:741,y:0,width:320,height:180,labelBBox:{x:78,y:53,width:164,height:67}},{id:"postgres",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"PostgreSQL",modelRef:"postgres",shape:"rectangle",color:"primary",icon:"tech:postgresql",style:{opacity:20,size:"md"},description:{txt:`PostgreSQL is a powerful, open source object-relational database system. -It has more than 15 years of active development and a proven architecture -that has earned it a strong reputation for reliability, data integrity, -and correctness.`},tags:[],technology:"PostgreSQL",kind:"container",x:1271,y:0,width:354,height:180,labelBBox:{x:46,y:17,width:293,height:139}},{id:"redis",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Redis",modelRef:"redis",shape:"rectangle",color:"primary",icon:"tech:redis",style:{opacity:20,size:"md"},description:{txt:"Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker."},tags:[],technology:"Redis",kind:"container",x:1842,y:0,width:359,height:180,labelBBox:{x:46,y:26,width:297,height:121}},{id:"platformdeveloper",parent:null,level:0,children:[],inEdges:[],outEdges:["mox1r9","1tdgkqn","vyep7i","1kjl8ep","x7to90"],title:"Platform Developer",modelRef:"platformdeveloper",shape:"person",color:"gray",style:{opacity:15,size:"md"},description:{txt:"The EDP engineer"},tags:[],kind:"actor",x:25,y:1053,width:320,height:180,labelBBox:{x:72,y:63,width:175,height:48}},{id:"customers",parent:null,level:0,children:[],inEdges:[],outEdges:["8fboq4"],title:"End Customers",modelRef:"customers",shape:"person",color:"amber",style:{opacity:15,size:"md"},description:{txt:"Consumers of your Application"},tags:[],kind:"actor",x:2457,y:1866,width:320,height:180,labelBBox:{x:56,y:63,width:208,height:48}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["5mpoyf"],outEdges:["1lyfj4n"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2457,y:1306,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edfbuilder",parent:null,level:0,children:[],inEdges:["mox1r9"],outEdges:["lnq8uj"],title:"edfbuilder",modelRef:"edfbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"EDP Foundry Builder"},tags:[],technology:"Golang",kind:"component",navigateTo:"edpbuilderworkflow",x:741,y:1343,width:320,height:180,labelBBox:{x:74,y:53,width:202,height:67}},{id:"idpbuilder",parent:null,level:0,children:[],inEdges:["1tdgkqn"],outEdges:["1v8vv2f"],title:"idpbuilder",modelRef:"idpbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Bootstrap tool for initial platform provisioning"},tags:[],technology:"Golang",kind:"component",x:733,y:560,width:335,height:180,labelBBox:{x:47,y:44,width:272,height:85}},{id:"documentation",parent:null,level:0,children:[],inEdges:["1kjl8ep"],outEdges:["14bjpe1"],title:"Documentation",modelRef:"documentation",shape:"rectangle",color:"primary",icon:"tech:electron",style:{opacity:15,size:"md"},description:{txt:"Documentation system for EDP LikeC4 platform."},tags:[],technology:"Static Site Generator",kind:"system",navigateTo:"components-template-documentation",x:709,y:840,width:384,height:180,labelBBox:{x:46,y:44,width:322,height:85}},{id:"edf",parent:null,level:0,children:[],inEdges:["lnq8uj","x7to90"],outEdges:["109bf6k"],title:"EDF",modelRef:"edf",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Foundry is a platform for building and deploying EDPs tenantwise."},tags:[],technology:"Kubernetes",kind:"system",x:1287,y:1073,width:321,height:180,labelBBox:{x:47,y:35,width:259,height:103}},{id:"@gr1",parent:null,kind:"@group",title:"developer-scope",color:"green",shape:"rectangle",children:["developer","otherProductLifecycleRoles","@gr2","@gr3"],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k"],outEdges:["1yfrmvt","1yfr9mr","162qbqw","1tbee2v","5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e"],level:0,depth:2,tags:[],style:{border:"none",opacity:20},x:1221,y:1293,width:1046,height:746,labelBBox:{x:6,y:0,width:114,height:15}},{id:"developer",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["1yfrmvt","1yfr9mr","162qbqw","zjg544","1okgiq5"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"md"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:1288,y:1787,width:320,height:180,labelBBox:{x:53,y:63,width:214,height:48}},{id:"otherProductLifecycleRoles",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["1wupl5x"],title:"Reviewer, Tester, Auditors, Operators",modelRef:"otherProductLifecycleRoles",shape:"person",color:"green",style:{opacity:15,size:"md"},description:{txt:"Coworking roles in the outer loop"},tags:[],kind:"actor",x:1260,y:1407,width:375,height:180,labelBBox:{x:19,y:63,width:340,height:48}},{id:"edgeCli",parent:null,level:0,children:[],inEdges:["1yfrmvt"],outEdges:["fyb6c2"],title:"EdgeConnect CLI",modelRef:"edgeCli",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Command-line client for interactive usage"},tags:[],kind:"component",x:1862,y:2079,width:320,height:180,labelBBox:{x:20,y:63,width:280,height:48}},{id:"edgeSdk",parent:null,level:0,children:[],inEdges:["1yfr9mr"],outEdges:["1jfbsco"],title:"EdgeConnect SDK",modelRef:"edgeSdk",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"SDK for programmatic integration"},tags:[],kind:"component",x:1862,y:2582,width:320,height:180,labelBBox:{x:46,y:63,width:227,height:48}},{id:"@gr2",parent:"@gr1",kind:"@group",title:"Devops inner-loop",color:"gray",shape:"rectangle",children:["localbox"],inEdges:["zjg544","6szgsj"],outEdges:["1tbee2v","1uo6k6b"],level:0,depth:1,tags:[],style:{border:"none",opacity:30},x:1830,y:1734,width:384,height:265,labelBBox:{x:6,y:0,width:122,height:15}},{id:"localbox",parent:"@gr2",level:1,children:[],inEdges:["zjg544","6szgsj"],outEdges:["1tbee2v","1uo6k6b"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",x:1862,y:1787,width:320,height:180,labelBBox:{x:64,y:53,width:191,height:67}},{id:"@gr3",parent:"@gr1",kind:"@group",title:"Devops outer-loop",color:"gray",shape:"rectangle",children:["edp"],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k","1okgiq5","1wupl5x","1uo6k6b"],outEdges:["5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e","6szgsj"],level:0,depth:1,tags:[],style:{border:"none",opacity:30},x:1816,y:1354,width:411,height:265,labelBBox:{x:6,y:0,width:126,height:15}},{id:"edp",parent:"@gr3",level:1,children:[],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k","1okgiq5","1wupl5x","1uo6k6b"],outEdges:["5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e","6szgsj"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",navigateTo:"edp",x:1849,y:1407,width:346,height:180,labelBBox:{x:45,y:53,width:285,height:67}},{id:"edgeTerraformProvider",parent:null,level:0,children:[],inEdges:["162qbqw","1ivh6bj"],outEdges:["e75f7"],title:"Terraform Edge provider",modelRef:"edgeTerraformProvider",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Terraform provider enabling declarative provisioning"},tags:[],kind:"component",x:2457,y:2369,width:320,height:180,labelBBox:{x:27,y:54,width:266,height:66}},{id:"runtimeCluster",parent:null,level:0,children:[],inEdges:["gl7qul"],outEdges:[],title:"Kubernetes Cluster",modelRef:"runtimeCluster",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Target cluster where applications are deployed"},tags:[],technology:"Kubernetes",kind:"system",x:2457,y:1586,width:320,height:180,labelBBox:{x:35,y:44,width:250,height:85}},{id:"enterprise",parent:null,level:0,children:[],inEdges:["1tbee2v","35ru8e"],outEdges:["iwd51q"],title:"Customers' Enterprise Systems",modelRef:"enterprise",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"The customers' enterprise systems"},tags:[],kind:"system",x:2457,y:803,width:320,height:180,labelBBox:{x:18,y:63,width:283,height:48}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["fyb6c2","1jfbsco","e75f7","vyep7i"],outEdges:[],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:3048,y:2503,width:320,height:180,labelBBox:{x:23,y:54,width:273,height:66}},{id:"cloud",parent:null,level:0,children:[],inEdges:["8fboq4","iwd51q","17brhnu"],outEdges:[],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:3048,y:1016,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}}],edges:[{id:"lnq8uj",source:"edfbuilder",target:"edf",label:"boots one",points:[[1061,1349],[1112,1323],[1168,1294],[1221,1268],[1239,1259],[1259,1249],[1278,1240]],labelBBox:{x:1144,y:1253,width:66,height:18},parent:null,relations:["1oxlsu0"],color:"gray",line:"dashed",head:"normal"},{id:"mox1r9",source:"platformdeveloper",target:"edfbuilder",label:"runs",points:[[345,1211],[370,1221],[396,1232],[420,1242],[523,1284],[639,1330],[731,1367]],labelBBox:{x:524,y:1219,width:31,height:18},parent:null,relations:["s1l7g7"],color:"gray",line:"dashed",head:"normal"},{id:"1tdgkqn",source:"platformdeveloper",target:"idpbuilder",label:"runs",points:[[289,1053],[329,1020],[376,982],[420,950],[522,877],[642,802],[736,745]],labelBBox:{x:524,y:773,width:31,height:18},parent:null,relations:["kv3vny"],color:"gray",line:"dashed",head:"normal"},{id:"fyb6c2",source:"edgeCli",target:"edgeConnect",label:"calls",points:[[2181,2183],[2337,2201],[2580,2240],[2777,2319],[2888,2364],[3002,2437],[3084,2497]],labelBBox:{x:2601,y:2205,width:32,height:18},parent:null,relations:["h84u7y"],color:"gray",line:"dashed",head:"normal"},{id:"1jfbsco",source:"edgeSdk",target:"edgeConnect",label:"calls",points:[[2181,2661],[2334,2651],[2571,2636],[2777,2622],[2863,2616],[2959,2610],[3038,2604]],labelBBox:{x:2601,y:2599,width:32,height:18},parent:null,relations:["1elpzvp"],color:"gray",line:"dashed",head:"normal"},{id:"e75f7",source:"edgeTerraformProvider",target:"edgeConnect",label:"provisions via",points:[[2777,2495],[2858,2514],[2956,2536],[3038,2555]],labelBBox:{x:2868,y:2487,width:89,height:18},parent:null,relations:["6h5xnh"],color:"gray",line:"dashed",head:"normal"},{id:"vyep7i",source:"platformdeveloper",target:"edgeConnect",label:"operates",points:[[202,1233],[267,1594],[532,2923],[900,2923],[900,2923],[900,2923],[2618,2923],[2811,2923],[2999,2787],[3109,2690]],labelBBox:{x:1710,y:2900,width:58,height:18},parent:null,relations:["4pplfw"],color:"gray",line:"dashed",head:"normal"},{id:"1kjl8ep",source:"platformdeveloper",target:"documentation",label:"creates and maintains documentation",points:[[345,1091],[370,1083],[396,1074],[420,1067],[511,1039],[613,1010],[699,986]],labelBBox:{x:421,y:975,width:237,height:18},parent:null,relations:["3sz3k3"],color:"gray",line:"dashed",head:"normal"},{id:"x7to90",source:"platformdeveloper",target:"edf",label:"develops EDP and EDF",points:[[345,1146],[583,1149],[1032,1156],[1277,1160]],labelBBox:{x:825,y:1128,width:152,height:18},parent:null,relations:["v8v12"],color:"gray",line:"dashed",head:"normal"},{id:"8fboq4",source:"customers",target:"cloud",label:"uses your app",points:[[2729,1866],[2746,1850],[2763,1833],[2777,1816],[2943,1618],[3088,1348],[3159,1205]],labelBBox:{x:2867,y:1477,width:92,height:18},parent:null,relations:["1g2ebwc"],color:"gray",line:"dashed",head:"normal"},{id:"iwd51q",source:"enterprise",target:"cloud",label:"app specific dependencies",points:[[2777,950],[2845,975],[2925,1004],[2998,1030],[3011,1035],[3025,1040],[3039,1045]],labelBBox:{x:2828,y:947,width:169,height:18},parent:null,relations:["nc44l9"],color:"gray",line:"dashed",head:"normal"},{id:"1yfrmvt",source:"developer",target:"edgeCli",label:"uses",points:[[1608,1958],[1684,1997],[1775,2044],[1852,2083]],labelBBox:{x:1722,y:1982,width:34,height:18},parent:null,relations:["3rnruw"],color:"gray",line:"dashed",head:"normal"},{id:"1yfr9mr",source:"developer",target:"edgeSdk",label:"uses",points:[[1465,1967],[1491,2094],[1555,2328],[1686,2481],[1731,2533],[1794,2574],[1853,2604]],labelBBox:{x:1722,y:2458,width:34,height:18},parent:null,relations:["1ks7amr"],color:"gray",line:"dashed",head:"normal"},{id:"162qbqw",source:"developer",target:"edgeTerraformProvider",label:"uses",points:[[1495,1967],[1554,2073],[1667,2245],[1816,2332],[2012,2445],[2277,2466],[2447,2466]],labelBBox:{x:2005,y:2309,width:34,height:18},parent:null,relations:["1l0aei7"],color:"gray",line:"dashed",head:"normal"},{id:"zjg544",source:"developer",target:"localbox",label:"inner loop",points:[[1608,1877],[1684,1877],[1774,1877],[1851,1877]],labelBBox:{x:1706,y:1854,width:65,height:18},parent:"@gr1",relations:["5hkplj"],color:"gray",line:"dashed",head:"normal"},{id:"1tbee2v",source:"localbox",target:"enterprise",label:"company integration",points:[[2152,1787],[2197,1749],[2242,1700],[2267,1644],[2279,1618],[2267,1412],[2275,1384],[2319,1224],[2358,1191],[2457,1058],[2474,1035],[2494,1012],[2514,990]],labelBBox:{x:2276,y:1105,width:130,height:18},parent:null,relations:["1abvxlh"],color:"gray",line:"dashed",head:"normal"},{id:"1lyfj4n",source:"forgejoRunner",target:"edp",label:"register",points:[[2457,1423],[2379,1436],[2285,1452],[2205,1466]],labelBBox:{x:2316,y:1409,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1v8vv2f",source:"idpbuilder",target:"edp",label:"installs",points:[[1068,676],[1224,706],[1457,765],[1636,871],[1835,989],[1945,1253],[1992,1397]],labelBBox:{x:1425,y:689,width:47,height:18},parent:null,relations:["8fwa3r","1ai9t9i","1lc9jrs"],color:"gray",line:"dashed",head:"normal"},{id:"14bjpe1",source:"documentation",target:"edp",label:"provides documentation for",points:[[1093,916],[1248,914],[1469,930],[1636,1023],[1792,1110],[1909,1287],[1971,1399]],labelBBox:{x:1362,y:896,width:173,height:18},parent:null,relations:["xw0pne"],color:"gray",line:"dashed",head:"normal"},{id:"109bf6k",source:"edf",target:"edp",label:"builds many",points:[[1609,1252],[1618,1258],[1627,1263],[1636,1268],[1711,1311],[1794,1360],[1863,1402]],labelBBox:{x:1700,y:1275,width:79,height:18},parent:null,relations:["wsm3kf"],color:"gray",line:"dashed",head:"normal"},{id:"1okgiq5",source:"developer",target:"edp",label:"outer loop",points:[[1584,1787],[1672,1729],[1787,1652],[1877,1593]],labelBBox:{x:1706,y:1630,width:66,height:18},parent:"@gr1",relations:["1pp73vj","nb1ag9","14tsadm","129xciy","1l7h8as","dol85h","65iq0s","u2ppde","1dgd663","1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"1wupl5x",source:"otherProductLifecycleRoles",target:"edp",label:"review / operate",points:[[1636,1497],[1701,1497],[1774,1497],[1838,1497]],labelBBox:{x:1687,y:1474,width:104,height:18},parent:"@gr1",relations:["lb4xas"],color:"gray",line:"dashed",head:"normal"},{id:"1uo6k6b",source:"localbox",target:"edp",label:"sync",points:[[2022,1787],[2022,1730],[2022,1656],[2022,1597]],labelBBox:{x:1991,y:1675,width:33,height:18},parent:"@gr1",relations:["1mp9fps"],color:"gray",line:"dashed",head:"normal"},{id:"5mpoyf",source:"edp",target:"forgejoRunner",label:"runs workflows",points:[[2195,1517],[2262,1520],[2339,1518],[2407,1502],[2420,1499],[2434,1494],[2447,1489]],labelBBox:{x:2293,y:1479,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1ivh6bj",source:"edp",target:"edgeTerraformProvider",label:"automates",points:[[2152,1587],[2193,1621],[2236,1663],[2267,1709],[2418,1937],[2316,2060],[2457,2294],[2471,2318],[2489,2341],[2508,2362]],labelBBox:{x:2306,y:1699,width:69,height:18},parent:null,relations:["1t93kj2"],color:"gray",line:"dashed",head:"normal"},{id:"gl7qul",source:"edp",target:"runtimeCluster",label:"deploys",points:[[2195,1549],[2274,1573],[2368,1601],[2447,1625]],labelBBox:{x:2315,y:1550,width:52,height:18},parent:null,relations:["1f6l7ms"],color:"gray",line:"dashed",head:"normal"},{id:"17brhnu",source:"edp",target:"cloud",label:"deploy & observe",points:[[2062,1407],[2103,1327],[2175,1215],[2275,1161],[2515,1032],[2842,1049],[3038,1075]],labelBBox:{x:2561,y:1034,width:112,height:18},parent:null,relations:["gerdx4"],color:"gray",line:"dashed",head:"normal"},{id:"35ru8e",source:"edp",target:"enterprise",label:"integrates",points:[[2050,1407],[2086,1304],[2159,1134],[2275,1030],[2324,987],[2388,956],[2447,935]],labelBBox:{x:2308,y:929,width:65,height:18},parent:null,relations:["615gvx"],color:"gray",line:"dashed",head:"normal"},{id:"6szgsj",source:"edp",target:"localbox",label:null,points:[[2022,1587],[2022,1650],[2022,1714],[2022,1777]],labelBBox:null,parent:"@gr1",relations:["96ogr7"],color:"gray",line:"dashed",head:"normal"}]},"developer-landscape-with-foundry":{_type:"element",tags:null,links:null,_stage:"layouted",sourcePath:"views/high-level-concept/platform-context/developer-landscape-with-foundry.c4",description:null,title:"Developer Landscape View (with Foundry)",id:"developer-landscape-with-foundry",autoLayout:{direction:"LR",nodeSep:100,rankSep:100},hash:"3ba54ee560da6b05535f9deb06b6e39effb810ef",bounds:{x:0,y:0,width:4387,height:3828},nodes:[{id:"applicationspecification",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"application-specification",modelRef:"applicationspecification",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"The application specification describes the application and its components. It is used to generate the application and its components."},tags:[],kind:"component",x:0,y:390,width:520,height:290,labelBBox:{x:49,y:84,width:422,height:113}},{id:"forgejoRunnerWorker",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Forgejo Runner Worker",modelRef:"forgejoRunnerWorker",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"A worker is a service that runs a job invoked by a runner. A worker typically is a container."},tags:[],kind:"component",x:859,y:390,width:520,height:290,labelBBox:{x:52,y:84,width:415,height:113}},{id:"promtail",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Promtail",modelRef:"promtail",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Log shipper agent for Loki"},tags:[],kind:"component",x:1557,y:390,width:520,height:290,labelBBox:{x:137,y:109,width:247,height:63}},{id:"terraform",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Terraform",modelRef:"terraform",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Infrastructure provisioning (IaC)"},tags:[],technology:"Terraform",kind:"component",x:2294,y:390,width:520,height:290,labelBBox:{x:111,y:96,width:298,height:89}},{id:"elasticsearch",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Elasticsearch",modelRef:"elasticsearch",shape:"rectangle",color:"primary",icon:"tech:elasticsearch",style:{opacity:20,size:"xl"},description:{txt:`Elasticsearch is a distributed, RESTful search and analytics engine capable of -addressing a growing number of use cases. It centrally stores your data so you can -discover the expected and uncover the unexpected.`},tags:[],technology:"Elasticsearch",kind:"container",x:0,y:0,width:520,height:290,labelBBox:{x:72,y:46,width:406,height:189}},{id:"objectstorage",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"s3 Object Storage",modelRef:"objectstorage",shape:"rectangle",color:"primary",style:{opacity:20,size:"xl"},description:{txt:"s3 Object Storage"},tags:[],technology:"S3 Object Storage",kind:"container",x:859,y:0,width:520,height:290,labelBBox:{x:146,y:96,width:228,height:89}},{id:"postgres",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"PostgreSQL",modelRef:"postgres",shape:"rectangle",color:"primary",icon:"tech:postgresql",style:{opacity:20,size:"xl"},description:{txt:`PostgreSQL is a powerful, open source object-relational database system. -It has more than 15 years of active development and a proven architecture -that has earned it a strong reputation for reliability, data integrity, -and correctness.`},tags:[],technology:"PostgreSQL",kind:"container",x:1557,y:0,width:520,height:290,labelBBox:{x:83,y:46,width:384,height:189}},{id:"redis",parent:null,level:0,children:[],inEdges:[],outEdges:[],title:"Redis",modelRef:"redis",shape:"rectangle",color:"primary",icon:"tech:redis",style:{opacity:20,size:"xl"},description:{txt:"Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker."},tags:[],technology:"Redis",kind:"container",x:2294,y:0,width:520,height:290,labelBBox:{x:79,y:58,width:392,height:165}},{id:"platformdeveloper",parent:null,level:0,children:[],inEdges:[],outEdges:["mox1r9","1tdgkqn","vyep7i","1kjl8ep","x7to90"],title:"Platform Developer",modelRef:"platformdeveloper",shape:"person",color:"gray",style:{opacity:15,size:"xl"},description:{txt:"The EDP engineer"},tags:[],kind:"actor",x:0,y:1438,width:520,height:290,labelBBox:{x:138,y:109,width:244,height:63}},{id:"customers",parent:null,level:0,children:[],inEdges:[],outEdges:["8fboq4"],title:"End Customers",modelRef:"customers",shape:"person",color:"amber",style:{opacity:15,size:"xl"},description:{txt:"Consumers of your Application"},tags:[],kind:"actor",x:3076,y:2534,width:520,height:290,labelBBox:{x:115,y:109,width:290,height:63}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["5mpoyf"],outEdges:["1lyfj4n"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:3076,y:1754,width:520,height:290,labelBBox:{x:69,y:71,width:382,height:139}},{id:"edfbuilder",parent:null,level:0,children:[],inEdges:["mox1r9"],outEdges:["lnq8uj"],title:"edfbuilder",modelRef:"edfbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"xl"},description:{txt:"EDP Foundry Builder"},tags:[],technology:"Golang",kind:"component",navigateTo:"edpbuilderworkflow",x:859,y:1783,width:520,height:290,labelBBox:{x:145,y:96,width:259,height:89}},{id:"idpbuilder",parent:null,level:0,children:[],inEdges:["1tdgkqn"],outEdges:["1v8vv2f"],title:"idpbuilder",modelRef:"idpbuilder",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"xl"},description:{txt:"Bootstrap tool for initial platform provisioning"},tags:[],technology:"Golang",kind:"component",x:859,y:780,width:520,height:290,labelBBox:{x:96,y:83,width:357,height:115}},{id:"documentation",parent:null,level:0,children:[],inEdges:["1kjl8ep"],outEdges:["14bjpe1"],title:"Documentation",modelRef:"documentation",shape:"rectangle",color:"primary",icon:"tech:electron",style:{opacity:15,size:"xl"},description:{txt:"Documentation system for EDP LikeC4 platform."},tags:[],technology:"Static Site Generator",kind:"system",navigateTo:"components-template-documentation",x:859,y:1170,width:520,height:290,labelBBox:{x:62,y:83,width:426,height:115}},{id:"edf",parent:null,level:0,children:[],inEdges:["lnq8uj","x7to90"],outEdges:["109bf6k"],title:"EDF",modelRef:"edf",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"xl"},description:{txt:"EDP Foundry is a platform for building and deploying EDPs tenantwise."},tags:[],technology:"Kubernetes",kind:"system",x:1557,y:1438,width:520,height:290,labelBBox:{x:106,y:71,width:339,height:139}},{id:"@gr1",parent:null,kind:"@group",title:"developer-scope",color:"green",shape:"rectangle",children:["developer","otherProductLifecycleRoles","@gr2","@gr3"],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k"],outEdges:["1yfrmvt","1yfr9mr","162qbqw","1tbee2v","5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e"],level:0,depth:2,tags:[],style:{border:"none",opacity:20},x:1506,y:1768,width:1380,height:966,labelBBox:{x:6,y:0,width:114,height:15}},{id:"developer",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["1yfrmvt","1yfr9mr","162qbqw","zjg544","1okgiq5"],title:"Developer",modelRef:"developer",shape:"person",color:"green",style:{opacity:15,size:"xl"},description:{txt:"The regular user of the platform"},tags:[],kind:"actor",x:1557,y:2372,width:520,height:290,labelBBox:{x:111,y:109,width:298,height:63}},{id:"otherProductLifecycleRoles",parent:"@gr1",level:1,children:[],inEdges:[],outEdges:["1wupl5x"],title:"Reviewer, Tester, Auditors, Operators",modelRef:"otherProductLifecycleRoles",shape:"person",color:"green",style:{opacity:15,size:"xl"},description:{txt:"Coworking roles in the outer loop"},tags:[],kind:"actor",x:1546,y:1882,width:542,height:290,labelBBox:{x:34,y:109,width:474,height:63}},{id:"edgeCli",parent:null,level:0,children:[],inEdges:["1yfrmvt"],outEdges:["fyb6c2"],title:"EdgeConnect CLI",modelRef:"edgeCli",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Command-line client for interactive usage"},tags:[],kind:"component",x:2294,y:2774,width:520,height:290,labelBBox:{x:65,y:109,width:390,height:63}},{id:"edgeSdk",parent:null,level:0,children:[],inEdges:["1yfr9mr"],outEdges:["1jfbsco"],title:"EdgeConnect SDK",modelRef:"edgeSdk",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"SDK for programmatic integration"},tags:[],kind:"component",x:2294,y:3387,width:520,height:290,labelBBox:{x:102,y:109,width:316,height:63}},{id:"@gr2",parent:"@gr1",kind:"@group",title:"Devops inner-loop",color:"gray",shape:"rectangle",children:["localbox"],inEdges:["zjg544","6szgsj"],outEdges:["1tbee2v","1uo6k6b"],level:0,depth:1,tags:[],style:{border:"none",opacity:30},x:2262,y:2319,width:584,height:375,labelBBox:{x:6,y:0,width:122,height:15}},{id:"localbox",parent:"@gr2",level:1,children:[],inEdges:["zjg544","6szgsj"],outEdges:["1tbee2v","1uo6k6b"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",x:2294,y:2372,width:520,height:290,labelBBox:{x:127,y:96,width:265,height:89}},{id:"@gr3",parent:"@gr1",kind:"@group",title:"Devops outer-loop",color:"gray",shape:"rectangle",children:["edp"],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k","1okgiq5","1wupl5x","1uo6k6b"],outEdges:["5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e","6szgsj"],level:0,depth:1,tags:[],style:{border:"none",opacity:30},x:2262,y:1829,width:584,height:375,labelBBox:{x:6,y:0,width:126,height:15}},{id:"edp",parent:"@gr3",level:1,children:[],inEdges:["1lyfj4n","1v8vv2f","14bjpe1","109bf6k","1okgiq5","1wupl5x","1uo6k6b"],outEdges:["5mpoyf","1ivh6bj","gl7qul","17brhnu","35ru8e","6szgsj"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"primary",icon:"tech:kubernetes",style:{opacity:15,size:"xl"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",navigateTo:"edp",x:2294,y:1882,width:520,height:290,labelBBox:{x:88,y:96,width:374,height:89}},{id:"edgeTerraformProvider",parent:null,level:0,children:[],inEdges:["162qbqw","1ivh6bj"],outEdges:["e75f7"],title:"Terraform Edge provider",modelRef:"edgeTerraformProvider",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Terraform provider enabling declarative provisioning"},tags:[],kind:"component",x:3076,y:3147,width:520,height:290,labelBBox:{x:75,y:96,width:371,height:89}},{id:"runtimeCluster",parent:null,level:0,children:[],inEdges:["gl7qul"],outEdges:[],title:"Kubernetes Cluster",modelRef:"runtimeCluster",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Target cluster where applications are deployed"},tags:[],technology:"Kubernetes",kind:"system",x:3076,y:2144,width:520,height:290,labelBBox:{x:86,y:83,width:348,height:115}},{id:"enterprise",parent:null,level:0,children:[],inEdges:["1tbee2v","35ru8e"],outEdges:["iwd51q"],title:"Customers' Enterprise Systems",modelRef:"enterprise",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"The customers' enterprise systems"},tags:[],kind:"system",x:3076,y:1141,width:520,height:290,labelBBox:{x:62,y:109,width:395,height:63}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["fyb6c2","1jfbsco","e75f7","vyep7i"],outEdges:[],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:3867,y:3337,width:520,height:290,labelBBox:{x:70,y:96,width:381,height:89}},{id:"cloud",parent:null,level:0,children:[],inEdges:["8fboq4","iwd51q","17brhnu"],outEdges:[],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"xl"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:3867,y:1409,width:520,height:290,labelBBox:{x:165,y:96,width:191,height:89}}],edges:[{id:"lnq8uj",source:"edfbuilder",target:"edf",label:"boots one",points:[[1379,1800],[1434,1772],[1493,1743],[1548,1716]],labelBBox:{x:1430,y:1722,width:66,height:18},parent:null,relations:["1oxlsu0"],color:"gray",line:"dashed",head:"normal"},{id:"mox1r9",source:"platformdeveloper",target:"edfbuilder",label:"runs",points:[[520,1687],[624,1729],[744,1778],[849,1820]],labelBBox:{x:674,y:1691,width:31,height:18},parent:null,relations:["s1l7g7"],color:"gray",line:"dashed",head:"normal"},{id:"1tdgkqn",source:"platformdeveloper",target:"idpbuilder",label:"runs",points:[[447,1438],[564,1347],[720,1226],[859,1120],[877,1106],[897,1091],[916,1076]],labelBBox:{x:674,y:1147,width:31,height:18},parent:null,relations:["kv3vny"],color:"gray",line:"dashed",head:"normal"},{id:"fyb6c2",source:"edgeCli",target:"edgeConnect",label:"calls",points:[[2814,2930],[3030,2948],[3343,2990],[3596,3097],[3730,3153],[3861,3249],[3960,3331]],labelBBox:{x:3320,y:2939,width:32,height:18},parent:null,relations:["h84u7y"],color:"gray",line:"dashed",head:"normal"},{id:"1jfbsco",source:"edgeSdk",target:"edgeConnect",label:"calls",points:[[2814,3529],[3025,3526],[3330,3520],[3596,3510],[3681,3507],[3773,3502],[3857,3498]],labelBBox:{x:3320,y:3487,width:32,height:18},parent:null,relations:["1elpzvp"],color:"gray",line:"dashed",head:"normal"},{id:"e75f7",source:"edgeTerraformProvider",target:"edgeConnect",label:"provisions via",points:[[3596,3354],[3680,3375],[3773,3397],[3857,3417]],labelBBox:{x:3687,y:3347,width:89,height:18},parent:null,relations:["6h5xnh"],color:"gray",line:"dashed",head:"normal"},{id:"vyep7i",source:"platformdeveloper",target:"edgeConnect",label:"operates",points:[[284,1728],[366,2224],[666,3828],[1118,3828],[1118,3828],[1118,3828],[3337,3828],[3545,3828],[3761,3726],[3913,3632]],labelBBox:{x:2162,y:3805,width:58,height:18},parent:null,relations:["4pplfw"],color:"gray",line:"dashed",head:"normal"},{id:"1kjl8ep",source:"platformdeveloper",target:"documentation",label:"creates and maintains documentation",points:[[520,1502],[624,1469],[744,1432],[849,1399]],labelBBox:{x:571,y:1394,width:237,height:18},parent:null,relations:["3sz3k3"],color:"gray",line:"dashed",head:"normal"},{id:"x7to90",source:"platformdeveloper",target:"edf",label:"develops EDP and EDF",points:[[520,1583],[804,1583],[1259,1583],[1547,1583]],labelBBox:{x:1043,y:1560,width:152,height:18},parent:null,relations:["v8v12"],color:"gray",line:"dashed",head:"normal"},{id:"8fboq4",source:"customers",target:"cloud",label:"uses your app",points:[[3546,2534],[3564,2518],[3581,2501],[3596,2484],[3808,2243],[3976,1904],[4062,1708]],labelBBox:{x:3686,y:2177,width:92,height:18},parent:null,relations:["1g2ebwc"],color:"gray",line:"dashed",head:"normal"},{id:"iwd51q",source:"enterprise",target:"cloud",label:"app specific dependencies",points:[[3596,1374],[3680,1402],[3773,1434],[3857,1463]],labelBBox:{x:3647,y:1373,width:169,height:18},parent:null,relations:["nc44l9"],color:"gray",line:"dashed",head:"normal"},{id:"1yfrmvt",source:"developer",target:"edgeCli",label:"uses",points:[[2077,2659],[2145,2696],[2217,2735],[2285,2772]],labelBBox:{x:2174,y:2671,width:34,height:18},parent:null,relations:["3rnruw"],color:"gray",line:"dashed",head:"normal"},{id:"1yfr9mr",source:"developer",target:"edgeSdk",label:"uses",points:[[1849,2662],[1891,2828],[1979,3102],[2138,3286],[2179,3333],[2232,3374],[2285,3408]],labelBBox:{x:2174,y:3263,width:34,height:18},parent:null,relations:["1ks7amr"],color:"gray",line:"dashed",head:"normal"},{id:"162qbqw",source:"developer",target:"edgeTerraformProvider",label:"uses",points:[[1880,2662],[1950,2807],[2079,3026],[2262,3137],[2505,3285],[2836,3312],[3066,3310]],labelBBox:{x:2537,y:3114,width:34,height:18},parent:null,relations:["1l0aei7"],color:"gray",line:"dashed",head:"normal"},{id:"zjg544",source:"developer",target:"localbox",label:"inner loop",points:[[2077,2517],[2144,2517],[2216,2517],[2284,2517]],labelBBox:{x:2158,y:2494,width:65,height:18},parent:"@gr1",relations:["5hkplj"],color:"gray",line:"dashed",head:"normal"},{id:"1tbee2v",source:"localbox",target:"enterprise",label:"company integration",points:[[2775,2372],[2819,2331],[2860,2283],[2886,2229],[2901,2196],[2886,1939],[2894,1904],[2938,1714],[2959,1661],[3076,1506],[3094,1482],[3115,1459],[3137,1438]],labelBBox:{x:2895,y:1558,width:130,height:18},parent:null,relations:["1abvxlh"],color:"gray",line:"dashed",head:"normal"},{id:"1lyfj4n",source:"forgejoRunner",target:"edp",label:"register",points:[[3076,1941],[2995,1955],[2906,1969],[2824,1983]],labelBBox:{x:2935,y:1928,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1v8vv2f",source:"idpbuilder",target:"edp",label:"installs",points:[[1379,967],[1583,1009],[1869,1087],[2088,1223],[2324,1370],[2453,1683],[2512,1872]],labelBBox:{x:1794,y:974,width:47,height:18},parent:null,relations:["8fwa3r","1ai9t9i","1lc9jrs"],color:"gray",line:"dashed",head:"normal"},{id:"14bjpe1",source:"documentation",target:"edp",label:"provides documentation for",points:[[1379,1278],[1584,1261],[1872,1267],[2088,1388],[2281,1496],[2415,1721],[2488,1873]],labelBBox:{x:1731,y:1248,width:173,height:18},parent:null,relations:["xw0pne"],color:"gray",line:"dashed",head:"normal"},{id:"109bf6k",source:"edf",target:"edp",label:"builds many",points:[[2063,1728],[2072,1733],[2080,1738],[2088,1743],[2160,1786],[2238,1833],[2309,1877]],labelBBox:{x:2152,y:1750,width:79,height:18},parent:null,relations:["wsm3kf"],color:"gray",line:"dashed",head:"normal"},{id:"1okgiq5",source:"developer",target:"edp",label:"outer loop",points:[[2035,2372],[2127,2311],[2234,2240],[2327,2178]],labelBBox:{x:2158,y:2219,width:66,height:18},parent:"@gr1",relations:["1pp73vj","nb1ag9","14tsadm","129xciy","1l7h8as","dol85h","65iq0s","u2ppde","1dgd663","1k2mvqc","vxxbwa"],color:"gray",line:"dashed",head:"normal"},{id:"1wupl5x",source:"otherProductLifecycleRoles",target:"edp",label:"review / operate",points:[[2088,2027],[2152,2027],[2220,2027],[2284,2027]],labelBBox:{x:2139,y:2004,width:104,height:18},parent:"@gr1",relations:["lb4xas"],color:"gray",line:"dashed",head:"normal"},{id:"1uo6k6b",source:"localbox",target:"edp",label:"sync",points:[[2554,2372],[2554,2313],[2554,2243],[2554,2182]],labelBBox:{x:2523,y:2260,width:33,height:18},parent:"@gr1",relations:["1mp9fps"],color:"gray",line:"dashed",head:"normal"},{id:"5mpoyf",source:"edp",target:"forgejoRunner",label:"runs workflows",points:[[2814,2039],[2883,2038],[2958,2032],[3026,2019],[3039,2016],[3053,2013],[3066,2010]],labelBBox:{x:2912,y:1996,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1ivh6bj",source:"edp",target:"edgeTerraformProvider",label:"automates",points:[[2777,2172],[2818,2208],[2857,2249],[2886,2294],[3077,2594],[2889,2769],[3076,3072],[3091,3096],[3109,3119],[3129,3140]],labelBBox:{x:2925,y:2289,width:69,height:18},parent:null,relations:["1t93kj2"],color:"gray",line:"dashed",head:"normal"},{id:"gl7qul",source:"edp",target:"runtimeCluster",label:"deploys",points:[[2814,2114],[2895,2141],[2985,2171],[3066,2199]],labelBBox:{x:2934,y:2119,width:52,height:18},parent:null,relations:["1f6l7ms"],color:"gray",line:"dashed",head:"normal"},{id:"17brhnu",source:"edp",target:"cloud",label:"deploy & observe",points:[[2630,1882],[2688,1786],[2778,1668],[2894,1609],[3056,1527],[3546,1530],[3857,1541]],labelBBox:{x:3280,y:1512,width:112,height:18},parent:null,relations:["gerdx4"],color:"gray",line:"dashed",head:"normal"},{id:"35ru8e",source:"edp",target:"enterprise",label:"integrates",points:[[2614,1882],[2671,1760],[2766,1589],[2894,1478],[2944,1435],[3006,1399],[3067,1372]],labelBBox:{x:2927,y:1369,width:65,height:18},parent:null,relations:["615gvx"],color:"gray",line:"dashed",head:"normal"},{id:"6szgsj",source:"edp",target:"localbox",label:null,points:[[2554,2172],[2554,2235],[2554,2299],[2554,2362]],labelBBox:null,parent:"@gr1",relations:["96ogr7"],color:"gray",line:"dashed",head:"normal"}]}},deployments:{elements:{local:{style:{icon:"tech:kubernetes"},kind:"environment",description:{txt:"Local kind-cluster environment for EDP, typically run by edpbuilder"},technology:"Kind",title:"Local kind-cluster",id:"local"},"otc-edp-per-tenant":{style:{},kind:"cloud",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. - - This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},technology:"OTC",title:"OTC EDP per tenant cluster",id:"otc-edp-per-tenant"},"otc-faas":{style:{},kind:"cloud",description:{txt:"OTC environments for Prototype FaaS."},technology:"OTC",title:"OTC prototype FaaS",id:"otc-faas"},edge:{style:{},kind:"cloud",description:{txt:"Edge environments for distributed workloads."},technology:"Edge",title:"Edge Cloud",id:"edge"},"otc-edpFoundry":{style:{},kind:"cloud",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. - -A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},technology:"OTC",title:"OTC EDP Foundry Central Service clusters",id:"otc-edpFoundry"},edgeProvider:{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Unlocks the terraform ecosystem"},title:"Terraform Edge provider",id:"edgeProvider"},edgeProviderHost:{style:{},kind:"environment",title:"OTC",id:"edgeProviderHost"},edgeSdk:{style:{icon:"tech:go"},kind:"paas",description:{txt:"Wrapper around API"},technology:"Cloud Services",title:"Edge Cloud SDK",id:"edgeSdk"},edgeCloud:{style:{},kind:"environment",title:"Edge cloud",id:"edgeCloud"},otcTenantProd:{style:{},kind:"environment",title:"Prod - builth.ing",id:"otcTenantProd"},otcTenantNonProd:{style:{},kind:"environment",title:"Non-Prod - t09.de",id:"otcTenantNonProd"},otcKubernetes:{style:{icon:"tech:kubernetes"},kind:"environment",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},technology:"Kubernetes",title:"OTC Kubernetes",id:"otcKubernetes"},edgeConnectEnv:{style:{icon:"tech:docker"},kind:"environment",description:{txt:"Edge infrastructure for ephemeral runner deployment"},technology:"Edge Connect Platform",title:"Edge Connect",id:"edgeConnectEnv"},"local.backstage":{style:{},kind:"namespace",title:"backstage",id:"local.backstage"},"local.argocd":{style:{},kind:"namespace",title:"argocd",id:"local.argocd"},"local.gitea":{style:{},kind:"namespace",title:"gitea",id:"local.gitea"},"local.keycloak":{style:{},kind:"namespace",title:"keycloak",id:"local.keycloak"},"local.crossplane":{style:{},kind:"namespace",title:"crossplane-system",id:"local.crossplane"},"local.externalSecrets":{style:{},kind:"namespace",title:"external-secrets",id:"local.externalSecrets"},"local.velero":{style:{},kind:"namespace",title:"velero",id:"local.velero"},"local.minio":{style:{},kind:"namespace",title:"minio-backup",id:"local.minio"},"local.monitoring":{style:{},kind:"namespace",title:"monitoring",id:"local.monitoring"},"local.ingressNginx":{style:{},kind:"namespace",title:"ingress-nginx",id:"local.ingressNginx"},"local.openbao":{style:{},kind:"namespace",title:"openbao",id:"local.openbao"},"local.fibonacci":{style:{},kind:"namespace",title:"fibonacci-app",id:"local.fibonacci"},"local.mailhog":{style:{},kind:"namespace",title:"mailhog",id:"local.mailhog"},"local.spark":{style:{},kind:"namespace",title:"spark",id:"local.spark"},"otc-edp-per-tenant.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edp-per-tenant.cce"},"otc-edp-per-tenant.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-edp-per-tenant.cloudServices"},"otc-edp-per-tenant.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edp-per-tenant.forgejoRunnerInfrastructure"},"otc-faas.dev":{style:{},kind:"environment",description:{txt:"*.t09.de"},technology:"OTC",title:"tenant Dev",id:"otc-faas.dev"},"otc-faas.prod":{style:{},kind:"environment",description:{txt:"*.buildth.ing"},technology:"OTC",title:"Tenant Prod",id:"otc-faas.prod"},"edge.edge-dev":{style:{},kind:"environment",description:{txt:"Edge development environment"},technology:"Edge",title:"Edge Dev",id:"edge.edge-dev"},"edge.edge-prod":{style:{},kind:"environment",description:{txt:"Edge production environment"},technology:"Edge",title:"Edge Prod",id:"edge.edge-prod"},"otc-edpFoundry.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edpFoundry.cce"},"otc-edpFoundry.workflowSetupEDPInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP infrastructure Workflow"},title:"EDP infrastructure Workflow",id:"otc-edpFoundry.workflowSetupEDPInfrastructure"},"otc-edpFoundry.workflowSetupArgoCDInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP Setup ArgoCD Workflow"},title:"EDP ArgoCD Workflow",id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure"},"otc-edpFoundry.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edpFoundry.forgejoRunnerInfrastructure"},"edgeProviderHost.edp":{style:{icon:"tech:git"},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"edgeProviderHost.edp"},"edgeProviderHost.terralist":{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Terraform provider private hosting"},technology:"Cloud Services",title:"Terralist",id:"edgeProviderHost.terralist"},"edgeCloud.edgeApi":{style:{icon:"tech:swagger"},kind:"paas",technology:"Edge Cloud (managed)",links:[{url:"https://swagger.edge.platform.mg3.mdb.osc.live",title:"Documentation"}],title:"Edge Cloud API",id:"edgeCloud.edgeApi"},"edgeCloud.edgeResources":{style:{},kind:"paas",description:{txt:"App, AppInstance, etc."},technology:"Edge Cloud (managed)",title:"Edge Cloud Resources",id:"edgeCloud.edgeResources"},"otcTenantProd.otcTenantEdpBuildthing":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Primary Instance"},title:"edp.builth.ing",id:"otcTenantProd.otcTenantEdpBuildthing"},"otcTenantProd.otcTenantObservability":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Observability Instance"},title:"observability.builth.ing",id:"otcTenantProd.otcTenantObservability"},"otcTenantProd.otcTenantCustomerA":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Customer Instance"},title:"customer-a.builth.ing",id:"otcTenantProd.otcTenantCustomerA"},"otcTenantNonProd.otcTenantDev1":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Development Instance"},title:"dev1.t09.de",id:"otcTenantNonProd.otcTenantDev1"},"otcTenantNonProd.otcTenantTestX":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Testing Instance"},title:"test-x.t09.de",id:"otcTenantNonProd.otcTenantTestX"},"otcKubernetes.edpCluster":{style:{},kind:"cluster",description:{txt:"EDP platform cluster"},title:"EDP Cluster",id:"otcKubernetes.edpCluster"},"edgeConnectEnv.runnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Dynamically provisioned runner instances"},title:"Runner Infrastructure",id:"edgeConnectEnv.runnerInfrastructure"},"local.backstage.backstage":{id:"local.backstage.backstage",element:"edp.ui.backstage",style:{}},"local.backstage.database":{id:"local.backstage.database",element:"edp.ui.database",style:{}},"local.argocd.argocdAppController":{id:"local.argocd.argocdAppController",element:"edp.argoCD.argocdAppController",style:{}},"local.argocd.argocdAppSetController":{id:"local.argocd.argocdAppSetController",element:"edp.argoCD.argocdAppSetController",style:{}},"local.argocd.argocdRedis":{id:"local.argocd.argocdRedis",element:"edp.argoCD.argocdRedis",style:{}},"local.argocd.argocdRepoServer":{id:"local.argocd.argocdRepoServer",element:"edp.argoCD.argocdRepoServer",style:{}},"local.argocd.argocdServer":{id:"local.argocd.argocdServer",element:"edp.argoCD.argocdServer",style:{}},"local.gitea.forgejo":{id:"local.gitea.forgejo",element:"edp.forgejo",style:{}},"local.gitea.forgejoRunner":{id:"local.gitea.forgejoRunner",element:"forgejoRunner",style:{}},"local.keycloak.keycloak":{id:"local.keycloak.keycloak",element:"edp.keycloak.keycloak",style:{}},"local.keycloak.keycloakDB":{id:"local.keycloak.keycloakDB",element:"edp.keycloak.keycloakDB",style:{}},"local.crossplane.crossplane":{id:"local.crossplane.crossplane",element:"edp.crossplane.crossplane",style:{}},"local.crossplane.crossplaneFunction":{id:"local.crossplane.crossplaneFunction",element:"edp.crossplane.crossplaneFunction",style:{}},"local.crossplane.crossplaneRbacManager":{id:"local.crossplane.crossplaneRbacManager",element:"edp.crossplane.crossplaneRbacManager",style:{}},"local.crossplane.providerArgoCD":{id:"local.crossplane.providerArgoCD",element:"edp.crossplane.providerArgoCD",style:{}},"local.crossplane.providerKind":{id:"local.crossplane.providerKind",element:"edp.crossplane.providerKind",style:{}},"local.crossplane.providerShell":{id:"local.crossplane.providerShell",element:"edp.crossplane.providerShell",style:{}},"local.externalSecrets.certController":{id:"local.externalSecrets.certController",element:"edp.externalSecrets.certController",style:{}},"local.externalSecrets.externalSecrets":{id:"local.externalSecrets.externalSecrets",element:"edp.externalSecrets.externalSecrets",style:{}},"local.externalSecrets.webhook":{id:"local.externalSecrets.webhook",element:"edp.externalSecrets.webhook",style:{}},"local.velero.velero":{id:"local.velero.velero",element:"edp.velero.velero",style:{}},"local.minio.minio":{id:"local.minio.minio",element:"edp.minio.minio",style:{}},"local.monitoring.alloy":{id:"local.monitoring.alloy",element:"edp.monitoring.alloy",style:{}},"local.monitoring.distributor":{id:"local.monitoring.distributor",element:"edp.monitoring.loki.distributor",style:{}},"local.monitoring.gateway":{id:"local.monitoring.gateway",element:"edp.monitoring.loki.gateway",style:{}},"local.monitoring.ingestor":{id:"local.monitoring.ingestor",element:"edp.monitoring.loki.ingestor",style:{}},"local.monitoring.querier":{id:"local.monitoring.querier",element:"edp.monitoring.loki.querier",style:{}},"local.monitoring.queryFrontend":{id:"local.monitoring.queryFrontend",element:"edp.monitoring.loki.queryFrontend",style:{}},"local.ingressNginx.ingressNginx":{id:"local.ingressNginx.ingressNginx",element:"edp.ingressNginx.ingressNginx",style:{}},"local.openbao.openbao":{id:"local.openbao.openbao",element:"edp.openbao.openbao",style:{}},"local.openbao.agentInjector":{id:"local.openbao.agentInjector",element:"edp.openbao.agentInjector",style:{}},"local.fibonacci.fibonacci":{id:"local.fibonacci.fibonacci",element:"edp.testApp.fibonacci",style:{}},"local.mailhog.mailhog":{id:"local.mailhog.mailhog",element:"edp.mailhog.mailhog",style:{}},"local.spark.sparkoperator":{id:"local.spark.sparkoperator",element:"edp.spark.sparkoperator",style:{}},"otc-edp-per-tenant.cce.edp":{style:{},kind:"cluster",title:"EDP",id:"otc-edp-per-tenant.cce.edp"},"otc-edp-per-tenant.cloudServices.postgres":{id:"otc-edp-per-tenant.cloudServices.postgres",element:"postgres",style:{}},"otc-edp-per-tenant.cloudServices.redis":{id:"otc-edp-per-tenant.cloudServices.redis",element:"redis",style:{}},"otc-edp-per-tenant.cloudServices.objectstorage":{id:"otc-edp-per-tenant.cloudServices.objectstorage",element:"objectstorage",style:{}},"otc-edp-per-tenant.cloudServices.elasticsearch":{id:"otc-edp-per-tenant.cloudServices.elasticsearch",element:"elasticsearch",style:{}},"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-faas.dev.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.dev.cce"},"otc-faas.dev.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.dev.cloudServices"},"otc-faas.dev.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Observability",id:"otc-faas.dev.observability"},"otc-faas.prod.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.prod.cce"},"otc-faas.prod.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.prod.cloudServices"},"otc-faas.prod.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Observability",id:"otc-faas.prod.observability"},"otc-edpFoundry.cce.internalServices":{style:{},kind:"cluster",title:"EDP Foundry Internal Services",id:"otc-edpFoundry.cce.internalServices"},"otc-edpFoundry.cce.centralObservability":{style:{},kind:"cluster",title:"EDP Foundry Central Observability",id:"otc-edpFoundry.cce.centralObservability"},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"edgeProviderHost.edp.forgejo":{id:"edgeProviderHost.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"edp.buildth.ing"},style:{}},"otcKubernetes.edpCluster.forgejo":{id:"otcKubernetes.edpCluster.forgejo",element:"edp.forgejo",description:{txt:"Forgejo - Git platform with Actions"},style:{}},"otcKubernetes.edpCluster.forgejoActions":{id:"otcKubernetes.edpCluster.forgejoActions",element:"edp.forgejoActions",description:{txt:"CI/CD orchestration for Forgejo"},style:{}},"otcKubernetes.edpCluster.garmContainer":{id:"otcKubernetes.edpCluster.garmContainer",element:"edp.garm",description:{txt:"GARM container with runner orchestration"},style:{}},"otcKubernetes.edpCluster.edpCluster":{style:{},kind:"environment",technology:"Kubernetes",title:"GARM pod",id:"otcKubernetes.edpCluster.edpCluster"},"edgeConnectEnv.runnerInfrastructure.forgejoRunner":{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",element:"forgejoRunner",description:{txt:"Ephemeral Forgejo Actions runner"},style:{}},"otc-edp-per-tenant.cce.edp.argoCD":{id:"otc-edp-per-tenant.cce.edp.argoCD",element:"edp.argoCD",style:{}},"otc-edp-per-tenant.cce.edp.forgejoRunner":{id:"otc-edp-per-tenant.cce.edp.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edp-per-tenant.cce.edp.forgejo":{id:"otc-edp-per-tenant.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-edp-per-tenant.cce.edp.externalSecrets":{id:"otc-edp-per-tenant.cce.edp.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edp-per-tenant.cce.edp.ingressNginx":{id:"otc-edp-per-tenant.cce.edp.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edp-per-tenant.cce.edp.garm":{id:"otc-edp-per-tenant.cce.edp.garm",element:"edp.garm",style:{}},"otc-faas.dev.cce.edp":{style:{},kind:"cluster",description:{txt:"t09.de"},title:"Forgejo Dev for platform team",id:"otc-faas.dev.cce.edp"},"otc-faas.prod.cce.edp":{style:{},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"otc-faas.prod.cce.edp"},"otc-edpFoundry.cce.internalServices.argoCD":{id:"otc-edpFoundry.cce.internalServices.argoCD",element:"edp.argoCD",style:{}},"otc-edpFoundry.cce.internalServices.forgejo":{id:"otc-edpFoundry.cce.internalServices.forgejo",element:"edp.forgejo",style:{}},"otc-edpFoundry.cce.internalServices.externalSecrets":{id:"otc-edpFoundry.cce.internalServices.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edpFoundry.cce.internalServices.openbao":{id:"otc-edpFoundry.cce.internalServices.openbao",element:"edp.openbao",style:{}},"otc-edpFoundry.cce.internalServices.ingressNginx":{id:"otc-edpFoundry.cce.internalServices.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edpFoundry.cce.centralObservability.grafana":{id:"otc-edpFoundry.cce.centralObservability.grafana",element:"edp.grafana",style:{}},"otc-edpFoundry.cce.centralObservability.prometheus":{id:"otc-edpFoundry.cce.centralObservability.prometheus",element:"edp.prometheus",style:{}},"otc-edpFoundry.cce.centralObservability.loki":{id:"otc-edpFoundry.cce.centralObservability.loki",element:"edp.loki",style:{}},"otcKubernetes.edpCluster.edpCluster.garmService":{id:"otcKubernetes.edpCluster.edpCluster.garmService",element:"edp.garm.garm",description:{txt:"GARM - Runner lifecycle manager"},style:{}},"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect":{id:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",element:"edp.garm.providerEdgeConnect",description:{txt:"GARM Provider for Edge Connect"},style:{}},"otc-faas.dev.cce.edp.forgejo":{id:"otc-faas.dev.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-faas.prod.cce.edp.forgejo":{id:"otc-faas.prod.cce.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"buildth.ing"},style:{}}},relations:{g9oj4f:{title:"registers",source:{deployment:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},id:"g9oj4f"},"1fzhjm9":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.elasticsearch"},id:"1fzhjm9"},"15njmlz":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.objectstorage"},id:"15njmlz"},hks76r:{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.postgres"},id:"hks76r"},"1w18ve8":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.redis"},id:"1w18ve8"},dz2rdn:{source:{deployment:"otc-faas.dev.cce.edp.forgejo"},target:{deployment:"otc-faas.dev.cloudServices"},id:"dz2rdn"},"2shw6y":{source:{deployment:"otc-faas.prod.cce.edp.forgejo"},target:{deployment:"otc-faas.prod.cloudServices"},id:"2shw6y"},"7kqly3":{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},id:"7kqly3"},"12hf1w4":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},id:"12hf1w4"},uk77s5:{title:"deploys edp to otc.cce",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp"},id:"uk77s5"},"1pfc6bl":{title:"deploys edp to otc.paas",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cloudServices"},id:"1pfc6bl"},hqie0:{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},id:"hqie0"},"1j16hqv":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},id:"1j16hqv"},jde35l:{source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp.argoCD"},id:"jde35l"},"1umzqdy":{title:"registers",source:{deployment:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},id:"1umzqdy"},dola40:{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},id:"dola40"},"1f5y9gc":{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},id:"1f5y9gc"},"1wlvsb5":{title:"built using",source:{deployment:"edgeProvider"},target:{deployment:"edgeSdk"},id:"1wlvsb5"},"1mpjz5d":{title:"published to",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.terralist"},id:"1mpjz5d"},"12ssq9":{title:"hosted on",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.edp"},id:"12ssq9"},vfhcba:{title:"calls",source:{deployment:"edgeSdk"},target:{deployment:"edgeCloud.edgeApi"},id:"vfhcba"},"1sm6ifh":{title:"hosted on",source:{deployment:"edgeSdk"},target:{deployment:"edgeProviderHost.edp"},id:"1sm6ifh"},"1q6ftvm":{title:"authenticates via",source:{deployment:"edgeProviderHost.terralist"},target:{deployment:"edgeProviderHost.edp"},id:"1q6ftvm"},rr0lcz:{title:"creates/destroys",source:{deployment:"edgeCloud.edgeApi"},target:{deployment:"edgeCloud.edgeResources"},id:"rr0lcz"},"1fxu52d":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantObservability"},id:"1fxu52d"},"6gfo3g":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantCustomerA"},id:"6gfo3g"},s1ie0n:{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantDev1"},id:"s1ie0n"},"77azfi":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantTestX"},id:"77azfi"},"1k6h7jf":{title:"registers with and picks up jobs",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.forgejo"},id:"1k6h7jf"},"15ss7lz":{title:"retrieves bootstrap information",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.edpCluster.garmService"},id:"15ss7lz"}}},imports:{}}),{useLikeC4Model:KJe}=YJe(XJe);function ZJe({children:e}){const r=KJe();return y.jsx(YQe,{likec4model:r,children:e})}function QJe(e){return y.jsx(ZJe,{children:y.jsx(mJe,{renderIcon:MJe,...e})})}var $z={exports:{}},T0={},Rz={exports:{}},zz={};var one;function JJe(){return one||(one=1,(function(e){function r(B,F){var q=B.length;B.push(F);e:for(;0>>1,U=B[G];if(0>>1;Gi(O,q))Wi(Z,O)?(B[G]=Z,B[W]=q,G=W):(B[G]=O,B[K]=q,G=K);else if(Wi(Z,q))B[G]=Z,B[W]=q,G=W;else break e}}return F}function i(B,F){var q=B.sortIndex-F.sortIndex;return q!==0?q:B.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var c=[],d=[],u=1,p=null,f=3,m=!1,v=!1,w=!1,x=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;function $(B){for(var F=n(d);F!==null;){if(F.callback===null)o(d);else if(F.startTime<=B)o(d),F.sortIndex=F.expirationTime,r(c,F);else break;F=n(d)}}function R(B){if(w=!1,$(B),!v)if(n(c)!==null)v=!0,T||(T=!0,L());else{var F=n(d);F!==null&&V(R,F.startTime-B)}}var T=!1,A=-1,z=5,j=-1;function I(){return x?!0:!(e.unstable_now()-jB&&I());){var G=p.callback;if(typeof G=="function"){p.callback=null,f=p.priorityLevel;var U=G(p.expirationTime<=B);if(B=e.unstable_now(),typeof U=="function"){p.callback=U,$(B),F=!0;break t}p===n(c)&&o(c),$(B)}else o(c);p=n(c)}if(p!==null)F=!0;else{var Y=n(d);Y!==null&&V(R,Y.startTime-B),F=!1}}break e}finally{p=null,f=q,m=!1}F=void 0}}finally{F?L():T=!1}}}var L;if(typeof _=="function")L=function(){_(N)};else if(typeof MessageChannel<"u"){var H=new MessageChannel,P=H.port2;H.port1.onmessage=N,L=function(){P.postMessage(null)}}else L=function(){k(N,0)};function V(B,F){A=k(function(){B(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125G?(B.sortIndex=q,r(d,B),n(c)===null&&B===n(d)&&(w?(C(A),A=-1):w=!0,V(R,q-G))):(B.sortIndex=U,r(c,B),v||m||(v=!0,T||(T=!0,L()))),B},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(B){var F=f;return function(){var q=f;f=F;try{return B.apply(this,arguments)}finally{f=q}}}})(zz)),zz}var ine;function eet(){return ine||(ine=1,Rz.exports=JJe()),Rz.exports}var ane;function tet(){if(ane)return T0;ane=1;var e=eet(),r=Z6(),n=GM();function o(h){var g="https://react.dev/errors/"+h;if(1U||(h.current=G[U],G[U]=null,U--)}function O(h,g){U++,G[U]=h.current,h.current=g}var W=Y(null),Z=Y(null),Q=Y(null),ie=Y(null);function te(h,g){switch(O(Q,g),O(Z,h),O(W,null),g.nodeType){case 9:case 11:h=(h=g.documentElement)&&(h=h.namespaceURI)?cme(h):0;break;default:if(h=g.tagName,g=g.namespaceURI)g=cme(g),h=dme(g,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}K(W),O(W,h)}function re(){K(W),K(Z),K(Q)}function ue(h){h.memoizedState!==null&&O(ie,h);var g=W.current,b=dme(g,h.type);g!==b&&(O(Z,h),O(W,b))}function _e(h){Z.current===h&&(K(W),K(Z)),ie.current===h&&(K(ie),pb._currentValue=q)}var ce,pe;function xe(h){if(ce===void 0)try{throw Error()}catch(b){var g=b.stack.trim().match(/\n( *(at )?)/);ce=g&&g[1]||"",pe=-1)":-1D||se[E]!==me[D]){var Ee=` -`+se[E].replace(" at new "," at ");return h.displayName&&Ee.includes("")&&(Ee=Ee.replace("",h.displayName)),Ee}while(1<=E&&0<=D);break}}}finally{je=!1,Error.prepareStackTrace=b}return(b=h?h.displayName||h.name:"")?xe(b):""}function Je(h,g){switch(h.tag){case 26:case 27:case 5:return xe(h.type);case 16:return xe("Lazy");case 13:return h.child!==g&&g!==null?xe("Suspense Fallback"):xe("Suspense");case 19:return xe("SuspenseList");case 0:case 15:return Be(h.type,!1);case 11:return Be(h.type.render,!1);case 1:return Be(h.type,!0);case 31:return xe("Activity");default:return""}}function st(h){try{var g="",b=null;do g+=Je(h,b),b=h,h=h.return;while(h);return g}catch(E){return` -Error generating stack: `+E.message+` -`+E.stack}}var Le=Object.prototype.hasOwnProperty,St=e.unstable_scheduleCallback,Ve=e.unstable_cancelCallback,qe=e.unstable_shouldYield,Xe=e.unstable_requestPaint,It=e.unstable_now,Et=e.unstable_getCurrentPriorityLevel,be=e.unstable_ImmediatePriority,ke=e.unstable_UserBlockingPriority,Ye=e.unstable_NormalPriority,yt=e.unstable_LowPriority,xt=e.unstable_IdlePriority,Tr=e.log,er=e.unstable_setDisableYieldValue,qt=null,Ht=null;function Kr(h){if(typeof Tr=="function"&&er(h),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(qt,h)}catch{}}var Gt=Math.clz32?Math.clz32:fn,ln=Math.log,Wn=Math.LN2;function fn(h){return h>>>=0,h===0?32:31-(ln(h)/Wn|0)|0}var oo=256,Yo=262144,jo=4194304;function ui(h){var g=h&42;if(g!==0)return g;switch(h&-h){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return h&261888;case 262144:case 524288:case 1048576:case 2097152:return h&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return h&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return h}}function Dl(h,g,b){var E=h.pendingLanes;if(E===0)return 0;var D=0,M=h.suspendedLanes,X=h.pingedLanes;h=h.warmLanes;var ne=E&134217727;return ne!==0?(E=ne&~M,E!==0?D=ui(E):(X&=ne,X!==0?D=ui(X):b||(b=ne&~h,b!==0&&(D=ui(b))))):(ne=E&~M,ne!==0?D=ui(ne):X!==0?D=ui(X):b||(b=E&~h,b!==0&&(D=ui(b)))),D===0?0:g!==0&&g!==D&&(g&M)===0&&(M=D&-D,b=g&-g,M>=b||M===32&&(b&4194048)!==0)?g:D}function Ao(h,g){return(h.pendingLanes&~(h.suspendedLanes&~h.pingedLanes)&g)===0}function xs(h,g){switch(h){case 1:case 2:case 4:case 8:case 64:return g+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return g+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ws(){var h=jo;return jo<<=1,(jo&62914560)===0&&(jo=4194304),h}function zc(h){for(var g=[],b=0;31>b;b++)g.push(h);return g}function Pl(h,g){h.pendingLanes|=g,g!==268435456&&(h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0)}function lh(h,g,b,E,D,M){var X=h.pendingLanes;h.pendingLanes=b,h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0,h.expiredLanes&=b,h.entangledLanes&=b,h.errorRecoveryDisabledLanes&=b,h.shellSuspendCounter=0;var ne=h.entanglements,se=h.expirationTimes,me=h.hiddenUpdates;for(b=X&~b;0"u")return null;try{return h.activeElement||h.body}catch{return h.body}}var lu=/[\n"\\]/g;function J(h){return h.replace(lu,function(g){return"\\"+g.charCodeAt(0).toString(16)+" "})}function ee(h,g,b,E,D,M,X,ne){h.name="",X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"?h.type=X:h.removeAttribute("type"),g!=null?X==="number"?(g===0&&h.value===""||h.value!=g)&&(h.value=""+Gr(g)):h.value!==""+Gr(g)&&(h.value=""+Gr(g)):X!=="submit"&&X!=="reset"||h.removeAttribute("value"),g!=null?ae(h,X,Gr(g)):b!=null?ae(h,X,Gr(b)):E!=null&&h.removeAttribute("value"),D==null&&M!=null&&(h.defaultChecked=!!M),D!=null&&(h.checked=D&&typeof D!="function"&&typeof D!="symbol"),ne!=null&&typeof ne!="function"&&typeof ne!="symbol"&&typeof ne!="boolean"?h.name=""+Gr(ne):h.removeAttribute("name")}function oe(h,g,b,E,D,M,X,ne){if(M!=null&&typeof M!="function"&&typeof M!="symbol"&&typeof M!="boolean"&&(h.type=M),g!=null||b!=null){if(!(M!=="submit"&&M!=="reset"||g!=null)){Aa(h);return}b=b!=null?""+Gr(b):"",g=g!=null?""+Gr(g):b,ne||g===h.value||(h.value=g),h.defaultValue=g}E=E??D,E=typeof E!="function"&&typeof E!="symbol"&&!!E,h.checked=ne?h.checked:!!E,h.defaultChecked=!!E,X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"&&(h.name=X),Aa(h)}function ae(h,g,b){g==="number"&&Da(h.ownerDocument)===h||h.defaultValue===""+b||(h.defaultValue=""+b)}function le(h,g,b,E){if(h=h.options,g){g={};for(var D=0;D"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),OD=!1;if(Pc)try{var Tv={};Object.defineProperty(Tv,"passive",{get:function(){OD=!0}}),window.addEventListener("test",Tv,Tv),window.removeEventListener("test",Tv,Tv)}catch{OD=!1}var cu=null,LD=null,Lk=null;function dhe(){if(Lk)return Lk;var h,g=LD,b=g.length,E,D="value"in cu?cu.value:cu.textContent,M=D.length;for(h=0;h=Dv),mhe=" ",yhe=!1;function vhe(h,g){switch(h){case"keyup":return Kbt.indexOf(g.keyCode)!==-1;case"keydown":return g.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function bhe(h){return h=h.detail,typeof h=="object"&&"data"in h?h.data:null}var xm=!1;function Qbt(h,g){switch(h){case"compositionend":return bhe(g);case"keypress":return g.which!==32?null:(yhe=!0,mhe);case"textInput":return h=g.data,h===mhe&&yhe?null:h;default:return null}}function Jbt(h,g){if(xm)return h==="compositionend"||!UD&&vhe(h,g)?(h=dhe(),Lk=LD=cu=null,xm=!1,h):null;switch(h){case"paste":return null;case"keypress":if(!(g.ctrlKey||g.altKey||g.metaKey)||g.ctrlKey&&g.altKey){if(g.char&&1=g)return{node:b,offset:g-h};h=E}e:{for(;b;){if(b.nextSibling){b=b.nextSibling;break e}b=b.parentNode}b=void 0}b=$he(b)}}function zhe(h,g){return h&&g?h===g?!0:h&&h.nodeType===3?!1:g&&g.nodeType===3?zhe(h,g.parentNode):"contains"in h?h.contains(g):h.compareDocumentPosition?!!(h.compareDocumentPosition(g)&16):!1:!1}function The(h){h=h!=null&&h.ownerDocument!=null&&h.ownerDocument.defaultView!=null?h.ownerDocument.defaultView:window;for(var g=Da(h.document);g instanceof h.HTMLIFrameElement;){try{var b=typeof g.contentWindow.location.href=="string"}catch{b=!1}if(b)h=g.contentWindow;else break;g=Da(h.document)}return g}function YD(h){var g=h&&h.nodeName&&h.nodeName.toLowerCase();return g&&(g==="input"&&(h.type==="text"||h.type==="search"||h.type==="tel"||h.type==="url"||h.type==="password")||g==="textarea"||h.contentEditable==="true")}var lxt=Pc&&"documentMode"in document&&11>=document.documentMode,wm=null,XD=null,Bv=null,KD=!1;function jhe(h,g,b){var E=b.window===b?b.document:b.nodeType===9?b:b.ownerDocument;KD||wm==null||wm!==Da(E)||(E=wm,"selectionStart"in E&&YD(E)?E={start:E.selectionStart,end:E.selectionEnd}:(E=(E.ownerDocument&&E.ownerDocument.defaultView||window).getSelection(),E={anchorNode:E.anchorNode,anchorOffset:E.anchorOffset,focusNode:E.focusNode,focusOffset:E.focusOffset}),Bv&&Nv(Bv,E)||(Bv=E,E=D6(XD,"onSelect"),0>=X,D-=X,Rs=1<<32-Gt(g)+D|b<Nt?(Xt=nt,nt=null):Xt=nt.sibling;var ir=ye(he,nt,ge[Nt],Ce);if(ir===null){nt===null&&(nt=Xt);break}h&&nt&&ir.alternate===null&&g(he,nt),de=M(ir,de,Nt),or===null?ct=ir:or.sibling=ir,or=ir,nt=Xt}if(Nt===ge.length)return b(he,nt),Kt&&Nc(he,Nt),ct;if(nt===null){for(;NtNt?(Xt=nt,nt=null):Xt=nt.sibling;var ju=ye(he,nt,ir.value,Ce);if(ju===null){nt===null&&(nt=Xt);break}h&&nt&&ju.alternate===null&&g(he,nt),de=M(ju,de,Nt),or===null?ct=ju:or.sibling=ju,or=ju,nt=Xt}if(ir.done)return b(he,nt),Kt&&Nc(he,Nt),ct;if(nt===null){for(;!ir.done;Nt++,ir=ge.next())ir=Re(he,ir.value,Ce),ir!==null&&(de=M(ir,de,Nt),or===null?ct=ir:or.sibling=ir,or=ir);return Kt&&Nc(he,Nt),ct}for(nt=E(nt);!ir.done;Nt++,ir=ge.next())ir=we(nt,he,Nt,ir.value,Ce),ir!==null&&(h&&ir.alternate!==null&&nt.delete(ir.key===null?Nt:ir.key),de=M(ir,de,Nt),or===null?ct=ir:or.sibling=ir,or=ir);return h&&nt.forEach(function($wt){return g(he,$wt)}),Kt&&Nc(he,Nt),ct}function _r(he,de,ge,Ce){if(typeof ge=="object"&&ge!==null&&ge.type===w&&ge.key===null&&(ge=ge.props.children),typeof ge=="object"&&ge!==null){switch(ge.$$typeof){case m:e:{for(var ct=ge.key;de!==null;){if(de.key===ct){if(ct=ge.type,ct===w){if(de.tag===7){b(he,de.sibling),Ce=D(de,ge.props.children),Ce.return=he,he=Ce;break e}}else if(de.elementType===ct||typeof ct=="object"&&ct!==null&&ct.$$typeof===z&&wh(ct)===de.type){b(he,de.sibling),Ce=D(de,ge.props),qv(Ce,ge),Ce.return=he,he=Ce;break e}b(he,de);break}else g(he,de);de=de.sibling}ge.type===w?(Ce=mh(ge.props.children,he.mode,Ce,ge.key),Ce.return=he,he=Ce):(Ce=Kk(ge.type,ge.key,ge.props,null,he.mode,Ce),qv(Ce,ge),Ce.return=he,he=Ce)}return X(he);case v:e:{for(ct=ge.key;de!==null;){if(de.key===ct)if(de.tag===4&&de.stateNode.containerInfo===ge.containerInfo&&de.stateNode.implementation===ge.implementation){b(he,de.sibling),Ce=D(de,ge.children||[]),Ce.return=he,he=Ce;break e}else{b(he,de);break}else g(he,de);de=de.sibling}Ce=nP(ge,he.mode,Ce),Ce.return=he,he=Ce}return X(he);case z:return ge=wh(ge),_r(he,de,ge,Ce)}if(V(ge))return et(he,de,ge,Ce);if(L(ge)){if(ct=L(ge),typeof ct!="function")throw Error(o(150));return ge=ct.call(ge),bt(he,de,ge,Ce)}if(typeof ge.then=="function")return _r(he,de,n6(ge),Ce);if(ge.$$typeof===_)return _r(he,de,Jk(he,ge),Ce);o6(he,ge)}return typeof ge=="string"&&ge!==""||typeof ge=="number"||typeof ge=="bigint"?(ge=""+ge,de!==null&&de.tag===6?(b(he,de.sibling),Ce=D(de,ge),Ce.return=he,he=Ce):(b(he,de),Ce=rP(ge,he.mode,Ce),Ce.return=he,he=Ce),X(he)):b(he,de)}return function(he,de,ge,Ce){try{Vv=0;var ct=_r(he,de,ge,Ce);return Am=null,ct}catch(nt){if(nt===jm||nt===t6)throw nt;var or=Hi(29,nt,null,he.mode);return or.lanes=Ce,or.return=he,or}}}var _h=efe(!0),tfe=efe(!1),fu=!1;function gP(h){h.updateQueue={baseState:h.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function mP(h,g){h=h.updateQueue,g.updateQueue===h&&(g.updateQueue={baseState:h.baseState,firstBaseUpdate:h.firstBaseUpdate,lastBaseUpdate:h.lastBaseUpdate,shared:h.shared,callbacks:null})}function gu(h){return{lane:h,tag:0,payload:null,callback:null,next:null}}function mu(h,g,b){var E=h.updateQueue;if(E===null)return null;if(E=E.shared,(cr&2)!==0){var D=E.pending;return D===null?g.next=g:(g.next=D.next,D.next=g),E.pending=g,g=Xk(h),Ihe(h,null,b),g}return Yk(h,E,g,b),Xk(h)}function Hv(h,g,b){if(g=g.updateQueue,g!==null&&(g=g.shared,(b&4194048)!==0)){var E=g.lanes;E&=h.pendingLanes,b|=E,g.lanes=b,tu(h,b)}}function yP(h,g){var b=h.updateQueue,E=h.alternate;if(E!==null&&(E=E.updateQueue,b===E)){var D=null,M=null;if(b=b.firstBaseUpdate,b!==null){do{var X={lane:b.lane,tag:b.tag,payload:b.payload,callback:null,next:null};M===null?D=M=X:M=M.next=X,b=b.next}while(b!==null);M===null?D=M=g:M=M.next=g}else D=M=g;b={baseState:E.baseState,firstBaseUpdate:D,lastBaseUpdate:M,shared:E.shared,callbacks:E.callbacks},h.updateQueue=b;return}h=b.lastBaseUpdate,h===null?b.firstBaseUpdate=g:h.next=g,b.lastBaseUpdate=g}var vP=!1;function Uv(){if(vP){var h=Tm;if(h!==null)throw h}}function Wv(h,g,b,E){vP=!1;var D=h.updateQueue;fu=!1;var M=D.firstBaseUpdate,X=D.lastBaseUpdate,ne=D.shared.pending;if(ne!==null){D.shared.pending=null;var se=ne,me=se.next;se.next=null,X===null?M=me:X.next=me,X=se;var Ee=h.alternate;Ee!==null&&(Ee=Ee.updateQueue,ne=Ee.lastBaseUpdate,ne!==X&&(ne===null?Ee.firstBaseUpdate=me:ne.next=me,Ee.lastBaseUpdate=se))}if(M!==null){var Re=D.baseState;X=0,Ee=me=se=null,ne=M;do{var ye=ne.lane&-536870913,we=ye!==ne.lane;if(we?(Yt&ye)===ye:(E&ye)===ye){ye!==0&&ye===zm&&(vP=!0),Ee!==null&&(Ee=Ee.next={lane:0,tag:ne.tag,payload:ne.payload,callback:null,next:null});e:{var et=h,bt=ne;ye=g;var _r=b;switch(bt.tag){case 1:if(et=bt.payload,typeof et=="function"){Re=et.call(_r,Re,ye);break e}Re=et;break e;case 3:et.flags=et.flags&-65537|128;case 0:if(et=bt.payload,ye=typeof et=="function"?et.call(_r,Re,ye):et,ye==null)break e;Re=p({},Re,ye);break e;case 2:fu=!0}}ye=ne.callback,ye!==null&&(h.flags|=64,we&&(h.flags|=8192),we=D.callbacks,we===null?D.callbacks=[ye]:we.push(ye))}else we={lane:ye,tag:ne.tag,payload:ne.payload,callback:ne.callback,next:null},Ee===null?(me=Ee=we,se=Re):Ee=Ee.next=we,X|=ye;if(ne=ne.next,ne===null){if(ne=D.shared.pending,ne===null)break;we=ne,ne=we.next,we.next=null,D.lastBaseUpdate=we,D.shared.pending=null}}while(!0);Ee===null&&(se=Re),D.baseState=se,D.firstBaseUpdate=me,D.lastBaseUpdate=Ee,M===null&&(D.shared.lanes=0),wu|=X,h.lanes=X,h.memoizedState=Re}}function rfe(h,g){if(typeof h!="function")throw Error(o(191,h));h.call(g)}function nfe(h,g){var b=h.callbacks;if(b!==null)for(h.callbacks=null,h=0;hM?M:8;var X=B.T,ne={};B.T=ne,BP(h,!1,g,b);try{var se=D(),me=B.S;if(me!==null&&me(ne,se),se!==null&&typeof se=="object"&&typeof se.then=="function"){var Ee=mxt(se,E);Xv(h,g,Ee,Xi(h))}else Xv(h,g,E,Xi(h))}catch(Re){Xv(h,g,{then:function(){},status:"rejected",reason:Re},Xi())}finally{F.p=M,X!==null&&ne.types!==null&&(X.types=ne.types),B.T=X}}function kxt(){}function MP(h,g,b,E){if(h.tag!==5)throw Error(o(476));var D=Mfe(h).queue;Pfe(h,D,g,q,b===null?kxt:function(){return Nfe(h),b(E)})}function Mfe(h){var g=h.memoizedState;if(g!==null)return g;g={memoizedState:q,baseState:q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Lc,lastRenderedState:q},next:null};var b={};return g.next={memoizedState:b,baseState:b,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Lc,lastRenderedState:b},next:null},h.memoizedState=g,h=h.alternate,h!==null&&(h.memoizedState=g),g}function Nfe(h){var g=Mfe(h);g.next===null&&(g=h.alternate.memoizedState),Xv(h,g.next.queue,{},Xi())}function NP(){return go(pb)}function Bfe(){return mn().memoizedState}function Ife(){return mn().memoizedState}function _xt(h){for(var g=h.return;g!==null;){switch(g.tag){case 24:case 3:var b=Xi();h=gu(b);var E=mu(g,h,b);E!==null&&(vi(E,g,b),Hv(E,g,b)),g={cache:uP()},h.payload=g;return}g=g.return}}function Sxt(h,g,b){var E=Xi();b={lane:E,revertLane:0,gesture:null,action:b,hasEagerState:!1,eagerState:null,next:null},f6(h)?Lfe(g,b):(b=eP(h,g,b,E),b!==null&&(vi(b,h,E),Ffe(b,g,E)))}function Ofe(h,g,b){var E=Xi();Xv(h,g,b,E)}function Xv(h,g,b,E){var D={lane:E,revertLane:0,gesture:null,action:b,hasEagerState:!1,eagerState:null,next:null};if(f6(h))Lfe(g,D);else{var M=h.alternate;if(h.lanes===0&&(M===null||M.lanes===0)&&(M=g.lastRenderedReducer,M!==null))try{var X=g.lastRenderedState,ne=M(X,b);if(D.hasEagerState=!0,D.eagerState=ne,qi(ne,X))return Yk(h,g,D,0),Er===null&&Gk(),!1}catch{}if(b=eP(h,g,D,E),b!==null)return vi(b,h,E),Ffe(b,g,E),!0}return!1}function BP(h,g,b,E){if(E={lane:2,revertLane:gM(),gesture:null,action:E,hasEagerState:!1,eagerState:null,next:null},f6(h)){if(g)throw Error(o(479))}else g=eP(h,b,E,2),g!==null&&vi(g,h,2)}function f6(h){var g=h.alternate;return h===Pt||g!==null&&g===Pt}function Lfe(h,g){Pm=l6=!0;var b=h.pending;b===null?g.next=g:(g.next=b.next,b.next=g),h.pending=g}function Ffe(h,g,b){if((b&4194048)!==0){var E=g.lanes;E&=h.pendingLanes,b|=E,g.lanes=b,tu(h,b)}}var Kv={readContext:go,use:d6,useCallback:sn,useContext:sn,useEffect:sn,useImperativeHandle:sn,useLayoutEffect:sn,useInsertionEffect:sn,useMemo:sn,useReducer:sn,useRef:sn,useState:sn,useDebugValue:sn,useDeferredValue:sn,useTransition:sn,useSyncExternalStore:sn,useId:sn,useHostTransitionStatus:sn,useFormState:sn,useActionState:sn,useOptimistic:sn,useMemoCache:sn,useCacheRefresh:sn};Kv.useEffectEvent=sn;var Vfe={readContext:go,use:d6,useCallback:function(h,g){return Zo().memoizedState=[h,g===void 0?null:g],h},useContext:go,useEffect:Efe,useImperativeHandle:function(h,g,b){b=b!=null?b.concat([h]):null,p6(4194308,4,zfe.bind(null,g,h),b)},useLayoutEffect:function(h,g){return p6(4194308,4,h,g)},useInsertionEffect:function(h,g){p6(4,2,h,g)},useMemo:function(h,g){var b=Zo();g=g===void 0?null:g;var E=h();if(Sh){Kr(!0);try{h()}finally{Kr(!1)}}return b.memoizedState=[E,g],E},useReducer:function(h,g,b){var E=Zo();if(b!==void 0){var D=b(g);if(Sh){Kr(!0);try{b(g)}finally{Kr(!1)}}}else D=g;return E.memoizedState=E.baseState=D,h={pending:null,lanes:0,dispatch:null,lastRenderedReducer:h,lastRenderedState:D},E.queue=h,h=h.dispatch=Sxt.bind(null,Pt,h),[E.memoizedState,h]},useRef:function(h){var g=Zo();return h={current:h},g.memoizedState=h},useState:function(h){h=TP(h);var g=h.queue,b=Ofe.bind(null,Pt,g);return g.dispatch=b,[h.memoizedState,b]},useDebugValue:DP,useDeferredValue:function(h,g){var b=Zo();return PP(b,h,g)},useTransition:function(){var h=TP(!1);return h=Pfe.bind(null,Pt,h.queue,!0,!1),Zo().memoizedState=h,[!1,h]},useSyncExternalStore:function(h,g,b){var E=Pt,D=Zo();if(Kt){if(b===void 0)throw Error(o(407));b=b()}else{if(b=g(),Er===null)throw Error(o(349));(Yt&127)!==0||cfe(E,g,b)}D.memoizedState=b;var M={value:b,getSnapshot:g};return D.queue=M,Efe(ufe.bind(null,E,M,h),[h]),E.flags|=2048,Nm(9,{destroy:void 0},dfe.bind(null,E,M,b,g),null),b},useId:function(){var h=Zo(),g=Er.identifierPrefix;if(Kt){var b=zs,E=Rs;b=(E&~(1<<32-Gt(E)-1)).toString(32)+b,g="_"+g+"R_"+b,b=s6++,0<\/script>",M=M.removeChild(M.firstChild);break;case"select":M=typeof E.is=="string"?X.createElement("select",{is:E.is}):X.createElement("select"),E.multiple?M.multiple=!0:E.size&&(M.size=E.size);break;default:M=typeof E.is=="string"?X.createElement(D,{is:E.is}):X.createElement(D)}}M[Mr]=g,M[Pn]=E;e:for(X=g.child;X!==null;){if(X.tag===5||X.tag===6)M.appendChild(X.stateNode);else if(X.tag!==4&&X.tag!==27&&X.child!==null){X.child.return=X,X=X.child;continue}if(X===g)break e;for(;X.sibling===null;){if(X.return===null||X.return===g)break e;X=X.return}X.sibling.return=X.return,X=X.sibling}g.stateNode=M;e:switch(yo(M,D,E),D){case"button":case"input":case"select":case"textarea":E=!!E.autoFocus;break e;case"img":E=!0;break e;default:E=!1}E&&Vc(g)}}return Br(g),ZP(g,g.type,h===null?null:h.memoizedProps,g.pendingProps,b),null;case 6:if(h&&g.stateNode!=null)h.memoizedProps!==E&&Vc(g);else{if(typeof E!="string"&&g.stateNode===null)throw Error(o(166));if(h=Q.current,$m(g)){if(h=g.stateNode,b=g.memoizedProps,E=null,D=fo,D!==null)switch(D.tag){case 27:case 5:E=D.memoizedProps}h[Mr]=g,h=!!(h.nodeValue===b||E!==null&&E.suppressHydrationWarning===!0||lme(h.nodeValue,b)),h||pu(g,!0)}else h=P6(h).createTextNode(E),h[Mr]=g,g.stateNode=h}return Br(g),null;case 31:if(b=g.memoizedState,h===null||h.memoizedState!==null){if(E=$m(g),b!==null){if(h===null){if(!E)throw Error(o(318));if(h=g.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(o(557));h[Mr]=g}else yh(),(g.flags&128)===0&&(g.memoizedState=null),g.flags|=4;Br(g),h=!1}else b=lP(),h!==null&&h.memoizedState!==null&&(h.memoizedState.hydrationErrors=b),h=!0;if(!h)return g.flags&256?(Wi(g),g):(Wi(g),null);if((g.flags&128)!==0)throw Error(o(558))}return Br(g),null;case 13:if(E=g.memoizedState,h===null||h.memoizedState!==null&&h.memoizedState.dehydrated!==null){if(D=$m(g),E!==null&&E.dehydrated!==null){if(h===null){if(!D)throw Error(o(318));if(D=g.memoizedState,D=D!==null?D.dehydrated:null,!D)throw Error(o(317));D[Mr]=g}else yh(),(g.flags&128)===0&&(g.memoizedState=null),g.flags|=4;Br(g),D=!1}else D=lP(),h!==null&&h.memoizedState!==null&&(h.memoizedState.hydrationErrors=D),D=!0;if(!D)return g.flags&256?(Wi(g),g):(Wi(g),null)}return Wi(g),(g.flags&128)!==0?(g.lanes=b,g):(b=E!==null,h=h!==null&&h.memoizedState!==null,b&&(E=g.child,D=null,E.alternate!==null&&E.alternate.memoizedState!==null&&E.alternate.memoizedState.cachePool!==null&&(D=E.alternate.memoizedState.cachePool.pool),M=null,E.memoizedState!==null&&E.memoizedState.cachePool!==null&&(M=E.memoizedState.cachePool.pool),M!==D&&(E.flags|=2048)),b!==h&&b&&(g.child.flags|=8192),b6(g,g.updateQueue),Br(g),null);case 4:return re(),h===null&&bM(g.stateNode.containerInfo),Br(g),null;case 10:return Ic(g.type),Br(g),null;case 19:if(K(gn),E=g.memoizedState,E===null)return Br(g),null;if(D=(g.flags&128)!==0,M=E.rendering,M===null)if(D)Qv(E,!1);else{if(cn!==0||h!==null&&(h.flags&128)!==0)for(h=g.child;h!==null;){if(M=a6(h),M!==null){for(g.flags|=128,Qv(E,!1),h=M.updateQueue,g.updateQueue=h,b6(g,h),g.subtreeFlags=0,h=b,b=g.child;b!==null;)Ohe(b,h),b=b.sibling;return O(gn,gn.current&1|2),Kt&&Nc(g,E.treeForkCount),g.child}h=h.sibling}E.tail!==null&&It()>S6&&(g.flags|=128,D=!0,Qv(E,!1),g.lanes=4194304)}else{if(!D)if(h=a6(M),h!==null){if(g.flags|=128,D=!0,h=h.updateQueue,g.updateQueue=h,b6(g,h),Qv(E,!0),E.tail===null&&E.tailMode==="hidden"&&!M.alternate&&!Kt)return Br(g),null}else 2*It()-E.renderingStartTime>S6&&b!==536870912&&(g.flags|=128,D=!0,Qv(E,!1),g.lanes=4194304);E.isBackwards?(M.sibling=g.child,g.child=M):(h=E.last,h!==null?h.sibling=M:g.child=M,E.last=M)}return E.tail!==null?(h=E.tail,E.rendering=h,E.tail=h.sibling,E.renderingStartTime=It(),h.sibling=null,b=gn.current,O(gn,D?b&1|2:b&1),Kt&&Nc(g,E.treeForkCount),h):(Br(g),null);case 22:case 23:return Wi(g),xP(),E=g.memoizedState!==null,h!==null?h.memoizedState!==null!==E&&(g.flags|=8192):E&&(g.flags|=8192),E?(b&536870912)!==0&&(g.flags&128)===0&&(Br(g),g.subtreeFlags&6&&(g.flags|=8192)):Br(g),b=g.updateQueue,b!==null&&b6(g,b.retryQueue),b=null,h!==null&&h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(b=h.memoizedState.cachePool.pool),E=null,g.memoizedState!==null&&g.memoizedState.cachePool!==null&&(E=g.memoizedState.cachePool.pool),E!==b&&(g.flags|=2048),h!==null&&K(xh),null;case 24:return b=null,h!==null&&(b=h.memoizedState.cache),g.memoizedState.cache!==b&&(g.flags|=2048),Ic(Mn),Br(g),null;case 25:return null;case 30:return null}throw Error(o(156,g.tag))}function zxt(h,g){switch(iP(g),g.tag){case 1:return h=g.flags,h&65536?(g.flags=h&-65537|128,g):null;case 3:return Ic(Mn),re(),h=g.flags,(h&65536)!==0&&(h&128)===0?(g.flags=h&-65537|128,g):null;case 26:case 27:case 5:return _e(g),null;case 31:if(g.memoizedState!==null){if(Wi(g),g.alternate===null)throw Error(o(340));yh()}return h=g.flags,h&65536?(g.flags=h&-65537|128,g):null;case 13:if(Wi(g),h=g.memoizedState,h!==null&&h.dehydrated!==null){if(g.alternate===null)throw Error(o(340));yh()}return h=g.flags,h&65536?(g.flags=h&-65537|128,g):null;case 19:return K(gn),null;case 4:return re(),null;case 10:return Ic(g.type),null;case 22:case 23:return Wi(g),xP(),h!==null&&K(xh),h=g.flags,h&65536?(g.flags=h&-65537|128,g):null;case 24:return Ic(Mn),null;case 25:return null;default:return null}}function pge(h,g){switch(iP(g),g.tag){case 3:Ic(Mn),re();break;case 26:case 27:case 5:_e(g);break;case 4:re();break;case 31:g.memoizedState!==null&&Wi(g);break;case 13:Wi(g);break;case 19:K(gn);break;case 10:Ic(g.type);break;case 22:case 23:Wi(g),xP(),h!==null&&K(xh);break;case 24:Ic(Mn)}}function Jv(h,g){try{var b=g.updateQueue,E=b!==null?b.lastEffect:null;if(E!==null){var D=E.next;b=D;do{if((b.tag&h)===h){E=void 0;var M=b.create,X=b.inst;E=M(),X.destroy=E}b=b.next}while(b!==D)}}catch(ne){mr(g,g.return,ne)}}function bu(h,g,b){try{var E=g.updateQueue,D=E!==null?E.lastEffect:null;if(D!==null){var M=D.next;E=M;do{if((E.tag&h)===h){var X=E.inst,ne=X.destroy;if(ne!==void 0){X.destroy=void 0,D=g;var se=b,me=ne;try{me()}catch(Ee){mr(D,se,Ee)}}}E=E.next}while(E!==M)}}catch(Ee){mr(g,g.return,Ee)}}function hge(h){var g=h.updateQueue;if(g!==null){var b=h.stateNode;try{nfe(g,b)}catch(E){mr(h,h.return,E)}}}function fge(h,g,b){b.props=Eh(h.type,h.memoizedProps),b.state=h.memoizedState;try{b.componentWillUnmount()}catch(E){mr(h,g,E)}}function eb(h,g){try{var b=h.ref;if(b!==null){switch(h.tag){case 26:case 27:case 5:var E=h.stateNode;break;case 30:E=h.stateNode;break;default:E=h.stateNode}typeof b=="function"?h.refCleanup=b(E):b.current=E}}catch(D){mr(h,g,D)}}function Ts(h,g){var b=h.ref,E=h.refCleanup;if(b!==null)if(typeof E=="function")try{E()}catch(D){mr(h,g,D)}finally{h.refCleanup=null,h=h.alternate,h!=null&&(h.refCleanup=null)}else if(typeof b=="function")try{b(null)}catch(D){mr(h,g,D)}else b.current=null}function gge(h){var g=h.type,b=h.memoizedProps,E=h.stateNode;try{e:switch(g){case"button":case"input":case"select":case"textarea":b.autoFocus&&E.focus();break e;case"img":b.src?E.src=b.src:b.srcSet&&(E.srcset=b.srcSet)}}catch(D){mr(h,h.return,D)}}function QP(h,g,b){try{var E=h.stateNode;Zxt(E,h.type,b,g),E[Pn]=g}catch(D){mr(h,h.return,D)}}function mge(h){return h.tag===5||h.tag===3||h.tag===26||h.tag===27&&Cu(h.type)||h.tag===4}function JP(h){e:for(;;){for(;h.sibling===null;){if(h.return===null||mge(h.return))return null;h=h.return}for(h.sibling.return=h.return,h=h.sibling;h.tag!==5&&h.tag!==6&&h.tag!==18;){if(h.tag===27&&Cu(h.type)||h.flags&2||h.child===null||h.tag===4)continue e;h.child.return=h,h=h.child}if(!(h.flags&2))return h.stateNode}}function eM(h,g,b){var E=h.tag;if(E===5||E===6)h=h.stateNode,g?(b.nodeType===9?b.body:b.nodeName==="HTML"?b.ownerDocument.body:b).insertBefore(h,g):(g=b.nodeType===9?b.body:b.nodeName==="HTML"?b.ownerDocument.body:b,g.appendChild(h),b=b._reactRootContainer,b!=null||g.onclick!==null||(g.onclick=Lt));else if(E!==4&&(E===27&&Cu(h.type)&&(b=h.stateNode,g=null),h=h.child,h!==null))for(eM(h,g,b),h=h.sibling;h!==null;)eM(h,g,b),h=h.sibling}function x6(h,g,b){var E=h.tag;if(E===5||E===6)h=h.stateNode,g?b.insertBefore(h,g):b.appendChild(h);else if(E!==4&&(E===27&&Cu(h.type)&&(b=h.stateNode),h=h.child,h!==null))for(x6(h,g,b),h=h.sibling;h!==null;)x6(h,g,b),h=h.sibling}function yge(h){var g=h.stateNode,b=h.memoizedProps;try{for(var E=h.type,D=g.attributes;D.length;)g.removeAttributeNode(D[0]);yo(g,E,b),g[Mr]=h,g[Pn]=b}catch(M){mr(h,h.return,M)}}var qc=!1,In=!1,tM=!1,vge=typeof WeakSet=="function"?WeakSet:Set,io=null;function Txt(h,g){if(h=h.containerInfo,kM=F6,h=The(h),YD(h)){if("selectionStart"in h)var b={start:h.selectionStart,end:h.selectionEnd};else e:{b=(b=h.ownerDocument)&&b.defaultView||window;var E=b.getSelection&&b.getSelection();if(E&&E.rangeCount!==0){b=E.anchorNode;var D=E.anchorOffset,M=E.focusNode;E=E.focusOffset;try{b.nodeType,M.nodeType}catch{b=null;break e}var X=0,ne=-1,se=-1,me=0,Ee=0,Re=h,ye=null;t:for(;;){for(var we;Re!==b||D!==0&&Re.nodeType!==3||(ne=X+D),Re!==M||E!==0&&Re.nodeType!==3||(se=X+E),Re.nodeType===3&&(X+=Re.nodeValue.length),(we=Re.firstChild)!==null;)ye=Re,Re=we;for(;;){if(Re===h)break t;if(ye===b&&++me===D&&(ne=X),ye===M&&++Ee===E&&(se=X),(we=Re.nextSibling)!==null)break;Re=ye,ye=Re.parentNode}Re=we}b=ne===-1||se===-1?null:{start:ne,end:se}}else b=null}b=b||{start:0,end:0}}else b=null;for(_M={focusedElem:h,selectionRange:b},F6=!1,io=g;io!==null;)if(g=io,h=g.child,(g.subtreeFlags&1028)!==0&&h!==null)h.return=g,io=h;else for(;io!==null;){switch(g=io,M=g.alternate,h=g.flags,g.tag){case 0:if((h&4)!==0&&(h=g.updateQueue,h=h!==null?h.events:null,h!==null))for(b=0;b title"))),yo(M,E,b),M[Mr]=h,Wr(M),E=M;break e;case"link":var X=Sme("link","href",D).get(E+(b.href||""));if(X){for(var ne=0;ne_r&&(X=_r,_r=bt,bt=X);var he=Rhe(ne,bt),de=Rhe(ne,_r);if(he&&de&&(we.rangeCount!==1||we.anchorNode!==he.node||we.anchorOffset!==he.offset||we.focusNode!==de.node||we.focusOffset!==de.offset)){var ge=Re.createRange();ge.setStart(he.node,he.offset),we.removeAllRanges(),bt>_r?(we.addRange(ge),we.extend(de.node,de.offset)):(ge.setEnd(de.node,de.offset),we.addRange(ge))}}}}for(Re=[],we=ne;we=we.parentNode;)we.nodeType===1&&Re.push({element:we,left:we.scrollLeft,top:we.scrollTop});for(typeof ne.focus=="function"&&ne.focus(),ne=0;neb?32:b,B.T=null,b=sM,sM=null;var M=_u,X=Yc;if(Gn=0,Fm=_u=null,Yc=0,(cr&6)!==0)throw Error(o(331));var ne=cr;if(cr|=4,zge(M.current),Cge(M,M.current,X,b),cr=ne,ab(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(qt,M)}catch{}return!0}finally{F.p=D,B.T=E,Gge(h,g)}}function Xge(h,g,b){g=Ma(b,g),g=FP(h.stateNode,g,2),h=mu(h,g,2),h!==null&&(Pl(h,2),js(h))}function mr(h,g,b){if(h.tag===3)Xge(h,h,b);else for(;g!==null;){if(g.tag===3){Xge(g,h,b);break}else if(g.tag===1){var E=g.stateNode;if(typeof g.type.getDerivedStateFromError=="function"||typeof E.componentDidCatch=="function"&&(ku===null||!ku.has(E))){h=Ma(b,h),b=Kfe(2),E=mu(g,b,2),E!==null&&(Zfe(b,E,g,h),Pl(E,2),js(E));break}}g=g.return}}function pM(h,g,b){var E=h.pingCache;if(E===null){E=h.pingCache=new Dxt;var D=new Set;E.set(g,D)}else D=E.get(g),D===void 0&&(D=new Set,E.set(g,D));D.has(b)||(oM=!0,D.add(b),h=Ixt.bind(null,h,g,b),g.then(h,h))}function Ixt(h,g,b){var E=h.pingCache;E!==null&&E.delete(g),h.pingedLanes|=h.suspendedLanes&b,h.warmLanes&=~b,Er===h&&(Yt&b)===b&&(cn===4||cn===3&&(Yt&62914560)===Yt&&300>It()-_6?(cr&2)===0&&Vm(h,0):iM|=b,Lm===Yt&&(Lm=0)),js(h)}function Kge(h,g){g===0&&(g=ws()),h=gh(h,g),h!==null&&(Pl(h,g),js(h))}function Oxt(h){var g=h.memoizedState,b=0;g!==null&&(b=g.retryLane),Kge(h,b)}function Lxt(h,g){var b=0;switch(h.tag){case 31:case 13:var E=h.stateNode,D=h.memoizedState;D!==null&&(b=D.retryLane);break;case 19:E=h.stateNode;break;case 22:E=h.stateNode._retryCache;break;default:throw Error(o(314))}E!==null&&E.delete(g),Kge(h,b)}function Fxt(h,g){return St(h,g)}var T6=null,Hm=null,hM=!1,j6=!1,fM=!1,Eu=0;function js(h){h!==Hm&&h.next===null&&(Hm===null?T6=Hm=h:Hm=Hm.next=h),j6=!0,hM||(hM=!0,qxt())}function ab(h,g){if(!fM&&j6){fM=!0;do for(var b=!1,E=T6;E!==null;){if(h!==0){var D=E.pendingLanes;if(D===0)var M=0;else{var X=E.suspendedLanes,ne=E.pingedLanes;M=(1<<31-Gt(42|h)+1)-1,M&=D&~(X&~ne),M=M&201326741?M&201326741|1:M?M|2:0}M!==0&&(b=!0,eme(E,M))}else M=Yt,M=Dl(E,E===Er?M:0,E.cancelPendingCommit!==null||E.timeoutHandle!==-1),(M&3)===0||Ao(E,M)||(b=!0,eme(E,M));E=E.next}while(b);fM=!1}}function Vxt(){Zge()}function Zge(){j6=hM=!1;var h=0;Eu!==0&&Jxt()&&(h=Eu);for(var g=It(),b=null,E=T6;E!==null;){var D=E.next,M=Qge(E,g);M===0?(E.next=null,b===null?T6=D:b.next=D,D===null&&(Hm=b)):(b=E,(h!==0||(M&3)!==0)&&(j6=!0)),E=D}Gn!==0&&Gn!==5||ab(h),Eu!==0&&(Eu=0)}function Qge(h,g){for(var b=h.suspendedLanes,E=h.pingedLanes,D=h.expirationTimes,M=h.pendingLanes&-62914561;0ne)break;var Ee=se.transferSize,Re=se.initiatorType;Ee&&sme(Re)&&(se=se.responseEnd,X+=Ee*(se"u"?null:document;function xme(h,g,b){var E=Um;if(E&&typeof g=="string"&&g){var D=J(g);D='link[rel="'+h+'"][href="'+D+'"]',typeof b=="string"&&(D+='[crossorigin="'+b+'"]'),bme.has(D)||(bme.add(D),h={rel:h,crossOrigin:b,href:g},E.querySelector(D)===null&&(g=E.createElement("link"),yo(g,"link",h),Wr(g),E.head.appendChild(g)))}}function swt(h){Xc.D(h),xme("dns-prefetch",h,null)}function cwt(h,g){Xc.C(h,g),xme("preconnect",h,g)}function dwt(h,g,b){Xc.L(h,g,b);var E=Um;if(E&&h&&g){var D='link[rel="preload"][as="'+J(g)+'"]';g==="image"&&b&&b.imageSrcSet?(D+='[imagesrcset="'+J(b.imageSrcSet)+'"]',typeof b.imageSizes=="string"&&(D+='[imagesizes="'+J(b.imageSizes)+'"]')):D+='[href="'+J(h)+'"]';var M=D;switch(g){case"style":M=Wm(h);break;case"script":M=Gm(h)}Fa.has(M)||(h=p({rel:"preload",href:g==="image"&&b&&b.imageSrcSet?void 0:h,as:g},b),Fa.set(M,h),E.querySelector(D)!==null||g==="style"&&E.querySelector(db(M))||g==="script"&&E.querySelector(ub(M))||(g=E.createElement("link"),yo(g,"link",h),Wr(g),E.head.appendChild(g)))}}function uwt(h,g){Xc.m(h,g);var b=Um;if(b&&h){var E=g&&typeof g.as=="string"?g.as:"script",D='link[rel="modulepreload"][as="'+J(E)+'"][href="'+J(h)+'"]',M=D;switch(E){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":M=Gm(h)}if(!Fa.has(M)&&(h=p({rel:"modulepreload",href:h},g),Fa.set(M,h),b.querySelector(D)===null)){switch(E){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(b.querySelector(ub(M)))return}E=b.createElement("link"),yo(E,"link",h),Wr(E),b.head.appendChild(E)}}}function pwt(h,g,b){Xc.S(h,g,b);var E=Um;if(E&&h){var D=ho(E).hoistableStyles,M=Wm(h);g=g||"default";var X=D.get(M);if(!X){var ne={loading:0,preload:null};if(X=E.querySelector(db(M)))ne.loading=5;else{h=p({rel:"stylesheet",href:h,"data-precedence":g},b),(b=Fa.get(M))&&TM(h,b);var se=X=E.createElement("link");Wr(se),yo(se,"link",h),se._p=new Promise(function(me,Ee){se.onload=me,se.onerror=Ee}),se.addEventListener("load",function(){ne.loading|=1}),se.addEventListener("error",function(){ne.loading|=2}),ne.loading|=4,N6(X,g,E)}X={type:"stylesheet",instance:X,count:1,state:ne},D.set(M,X)}}}function hwt(h,g){Xc.X(h,g);var b=Um;if(b&&h){var E=ho(b).hoistableScripts,D=Gm(h),M=E.get(D);M||(M=b.querySelector(ub(D)),M||(h=p({src:h,async:!0},g),(g=Fa.get(D))&&jM(h,g),M=b.createElement("script"),Wr(M),yo(M,"link",h),b.head.appendChild(M)),M={type:"script",instance:M,count:1,state:null},E.set(D,M))}}function fwt(h,g){Xc.M(h,g);var b=Um;if(b&&h){var E=ho(b).hoistableScripts,D=Gm(h),M=E.get(D);M||(M=b.querySelector(ub(D)),M||(h=p({src:h,async:!0,type:"module"},g),(g=Fa.get(D))&&jM(h,g),M=b.createElement("script"),Wr(M),yo(M,"link",h),b.head.appendChild(M)),M={type:"script",instance:M,count:1,state:null},E.set(D,M))}}function wme(h,g,b,E){var D=(D=Q.current)?M6(D):null;if(!D)throw Error(o(446));switch(h){case"meta":case"title":return null;case"style":return typeof b.precedence=="string"&&typeof b.href=="string"?(g=Wm(b.href),b=ho(D).hoistableStyles,E=b.get(g),E||(E={type:"style",instance:null,count:0,state:null},b.set(g,E)),E):{type:"void",instance:null,count:0,state:null};case"link":if(b.rel==="stylesheet"&&typeof b.href=="string"&&typeof b.precedence=="string"){h=Wm(b.href);var M=ho(D).hoistableStyles,X=M.get(h);if(X||(D=D.ownerDocument||D,X={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},M.set(h,X),(M=D.querySelector(db(h)))&&!M._p&&(X.instance=M,X.state.loading=5),Fa.has(h)||(b={rel:"preload",as:"style",href:b.href,crossOrigin:b.crossOrigin,integrity:b.integrity,media:b.media,hrefLang:b.hrefLang,referrerPolicy:b.referrerPolicy},Fa.set(h,b),M||gwt(D,h,b,X.state))),g&&E===null)throw Error(o(528,""));return X}if(g&&E!==null)throw Error(o(529,""));return null;case"script":return g=b.async,b=b.src,typeof b=="string"&&g&&typeof g!="function"&&typeof g!="symbol"?(g=Gm(b),b=ho(D).hoistableScripts,E=b.get(g),E||(E={type:"script",instance:null,count:0,state:null},b.set(g,E)),E):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,h))}}function Wm(h){return'href="'+J(h)+'"'}function db(h){return'link[rel="stylesheet"]['+h+"]"}function kme(h){return p({},h,{"data-precedence":h.precedence,precedence:null})}function gwt(h,g,b,E){h.querySelector('link[rel="preload"][as="style"]['+g+"]")?E.loading=1:(g=h.createElement("link"),E.preload=g,g.addEventListener("load",function(){return E.loading|=1}),g.addEventListener("error",function(){return E.loading|=2}),yo(g,"link",b),Wr(g),h.head.appendChild(g))}function Gm(h){return'[src="'+J(h)+'"]'}function ub(h){return"script[async]"+h}function _me(h,g,b){if(g.count++,g.instance===null)switch(g.type){case"style":var E=h.querySelector('style[data-href~="'+J(b.href)+'"]');if(E)return g.instance=E,Wr(E),E;var D=p({},b,{"data-href":b.href,"data-precedence":b.precedence,href:null,precedence:null});return E=(h.ownerDocument||h).createElement("style"),Wr(E),yo(E,"style",D),N6(E,b.precedence,h),g.instance=E;case"stylesheet":D=Wm(b.href);var M=h.querySelector(db(D));if(M)return g.state.loading|=4,g.instance=M,Wr(M),M;E=kme(b),(D=Fa.get(D))&&TM(E,D),M=(h.ownerDocument||h).createElement("link"),Wr(M);var X=M;return X._p=new Promise(function(ne,se){X.onload=ne,X.onerror=se}),yo(M,"link",E),g.state.loading|=4,N6(M,b.precedence,h),g.instance=M;case"script":return M=Gm(b.src),(D=h.querySelector(ub(M)))?(g.instance=D,Wr(D),D):(E=b,(D=Fa.get(M))&&(E=p({},b),jM(E,D)),h=h.ownerDocument||h,D=h.createElement("script"),Wr(D),yo(D,"link",E),h.head.appendChild(D),g.instance=D);case"void":return null;default:throw Error(o(443,g.type))}else g.type==="stylesheet"&&(g.state.loading&4)===0&&(E=g.instance,g.state.loading|=4,N6(E,b.precedence,h));return g.instance}function N6(h,g,b){for(var E=b.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),D=E.length?E[E.length-1]:null,M=D,X=0;X title"):null)}function mwt(h,g,b){if(b===1||g.itemProp!=null)return!1;switch(h){case"meta":case"title":return!0;case"style":if(typeof g.precedence!="string"||typeof g.href!="string"||g.href==="")break;return!0;case"link":if(typeof g.rel!="string"||typeof g.href!="string"||g.href===""||g.onLoad||g.onError)break;switch(g.rel){case"stylesheet":return h=g.disabled,typeof g.precedence=="string"&&h==null;default:return!0}case"script":if(g.async&&typeof g.async!="function"&&typeof g.async!="symbol"&&!g.onLoad&&!g.onError&&g.src&&typeof g.src=="string")return!0}return!1}function Cme(h){return!(h.type==="stylesheet"&&(h.state.loading&3)===0)}function ywt(h,g,b,E){if(b.type==="stylesheet"&&(typeof E.media!="string"||matchMedia(E.media).matches!==!1)&&(b.state.loading&4)===0){if(b.instance===null){var D=Wm(E.href),M=g.querySelector(db(D));if(M){g=M._p,g!==null&&typeof g=="object"&&typeof g.then=="function"&&(h.count++,h=I6.bind(h),g.then(h,h)),b.state.loading|=4,b.instance=M,Wr(M);return}M=g.ownerDocument||g,E=kme(E),(D=Fa.get(D))&&TM(E,D),M=M.createElement("link"),Wr(M);var X=M;X._p=new Promise(function(ne,se){X.onload=ne,X.onerror=se}),yo(M,"link",E),b.instance=M}h.stylesheets===null&&(h.stylesheets=new Map),h.stylesheets.set(b,g),(g=b.state.preload)&&(b.state.loading&3)===0&&(h.count++,b=I6.bind(h),g.addEventListener("load",b),g.addEventListener("error",b))}}var AM=0;function vwt(h,g){return h.stylesheets&&h.count===0&&L6(h,h.stylesheets),0AM?50:800)+g);return h.unsuspend=b,function(){h.unsuspend=null,clearTimeout(E),clearTimeout(D)}}:null}function I6(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)L6(this,this.stylesheets);else if(this.unsuspend){var h=this.unsuspend;this.unsuspend=null,h()}}}var O6=null;function L6(h,g){h.stylesheets=null,h.unsuspend!==null&&(h.count++,O6=new Map,g.forEach(bwt,h),O6=null,I6.call(h))}function bwt(h,g){if(!(g.state.loading&4)){var b=O6.get(h);if(b)var E=b.get(null);else{b=new Map,O6.set(h,b);for(var D=h.querySelectorAll("link[data-precedence],style[data-precedence]"),M=0;M"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(r){console.error(r)}}return e(),$z.exports=tet(),$z.exports}var net=ret();const oet={View:"likec4-view"};let Tz="/";Tz.endsWith("/")||(Tz=Tz+"/");var ls=function(){return ls=Object.assign||function(e){for(var r,n=1,o=arguments.length;n"u")return ket;var r=_et(e),n=document.documentElement.clientWidth,o=window.innerWidth;return{left:r[0],top:r[1],right:r[2],gap:Math.max(0,o-n+r[2]-r[0])}},Cet=pne(),Pg="data-scroll-locked",$et=function(e,r,n,o){var i=e.left,a=e.top,l=e.right,s=e.gap;return n===void 0&&(n="margin"),` - .`.concat(aet,` { - overflow: hidden `).concat(o,`; - padding-right: `).concat(s,"px ").concat(o,`; - } - body[`).concat(Pg,`] { - overflow: hidden `).concat(o,`; - overscroll-behavior: contain; - `).concat([r&&"position: relative ".concat(o,";"),n==="margin"&&` - padding-left: `.concat(i,`px; - padding-top: `).concat(a,`px; - padding-right: `).concat(l,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(s,"px ").concat(o,`; - `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(o,";")].filter(Boolean).join(""),` - } - - .`).concat(b4,` { - right: `).concat(s,"px ").concat(o,`; - } - - .`).concat(x4,` { - margin-right: `).concat(s,"px ").concat(o,`; - } - - .`).concat(b4," .").concat(b4,` { - right: 0 `).concat(o,`; - } - - .`).concat(x4," .").concat(x4,` { - margin-right: 0 `).concat(o,`; - } - - body[`).concat(Pg,`] { - `).concat(set,": ").concat(s,`px; - } -`)},hne=function(){var e=parseInt(document.body.getAttribute(Pg)||"0",10);return isFinite(e)?e:0},Ret=function(){S.useEffect(function(){return document.body.setAttribute(Pg,(hne()+1).toString()),function(){var e=hne()-1;e<=0?document.body.removeAttribute(Pg):document.body.setAttribute(Pg,e.toString())}},[])},zet=function(e){var r=e.noRelative,n=e.noImportant,o=e.gapMode,i=o===void 0?"margin":o;Ret();var a=S.useMemo(function(){return Eet(i)},[i]);return S.createElement(Cet,{styles:$et(a,!r,i,n?"":"!important")})},Pz=!1;if(typeof window<"u")try{var k4=Object.defineProperty({},"passive",{get:function(){return Pz=!0,!0}});window.addEventListener("test",k4,k4),window.removeEventListener("test",k4,k4)}catch{Pz=!1}var Mg=Pz?{passive:!1}:!1,Tet=function(e){return e.tagName==="TEXTAREA"},fne=function(e,r){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[r]!=="hidden"&&!(n.overflowY===n.overflowX&&!Tet(e)&&n[r]==="visible")},jet=function(e){return fne(e,"overflowY")},Aet=function(e){return fne(e,"overflowX")},gne=function(e,r){var n=r.ownerDocument,o=r;do{typeof ShadowRoot<"u"&&o instanceof ShadowRoot&&(o=o.host);var i=mne(e,o);if(i){var a=yne(e,o),l=a[1],s=a[2];if(l>s)return!0}o=o.parentNode}while(o&&o!==n.body);return!1},Det=function(e){var r=e.scrollTop,n=e.scrollHeight,o=e.clientHeight;return[r,n,o]},Pet=function(e){var r=e.scrollLeft,n=e.scrollWidth,o=e.clientWidth;return[r,n,o]},mne=function(e,r){return e==="v"?jet(r):Aet(r)},yne=function(e,r){return e==="v"?Det(r):Pet(r)},Met=function(e,r){return e==="h"&&r==="rtl"?-1:1},Net=function(e,r,n,o,i){var a=Met(e,window.getComputedStyle(r).direction),l=a*o,s=n.target,c=r.contains(s),d=!1,u=l>0,p=0,f=0;do{if(!s)break;var m=yne(e,s),v=m[0],w=m[1],x=m[2],k=w-x-a*v;(v||k)&&mne(e,s)&&(p+=k,f+=v);var C=s.parentNode;s=C&&C.nodeType===Node.DOCUMENT_FRAGMENT_NODE?C.host:C}while(!c&&s!==document.body||c&&(r.contains(s)||r===s));return(u&&Math.abs(p)<1||!u&&Math.abs(f)<1)&&(d=!0),d},_4=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},vne=function(e){return[e.deltaX,e.deltaY]},bne=function(e){return e&&"current"in e?e.current:e},Bet=function(e,r){return e[0]===r[0]&&e[1]===r[1]},Iet=function(e){return` - .block-interactivity-`.concat(e,` {pointer-events: none;} - .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},Oet=0,Ng=[];function Let(e){var r=S.useRef([]),n=S.useRef([0,0]),o=S.useRef(),i=S.useState(Oet++)[0],a=S.useState(pne)[0],l=S.useRef(e);S.useEffect(function(){l.current=e},[e]),S.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var w=iet([e.lockRef.current],(e.shards||[]).map(bne)).filter(Boolean);return w.forEach(function(x){return x.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),w.forEach(function(x){return x.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var s=S.useCallback(function(w,x){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!l.current.allowPinchZoom;var k=_4(w),C=n.current,_="deltaX"in w?w.deltaX:C[0]-k[0],$="deltaY"in w?w.deltaY:C[1]-k[1],R,T=w.target,A=Math.abs(_)>Math.abs($)?"h":"v";if("touches"in w&&A==="h"&&T.type==="range")return!1;var z=gne(A,T);if(!z)return!0;if(z?R=A:(R=A==="v"?"h":"v",z=gne(A,T)),!z)return!1;if(!o.current&&"changedTouches"in w&&(_||$)&&(o.current=R),!R)return!0;var j=o.current||R;return Net(j,x,w,j==="h"?_:$)},[]),c=S.useCallback(function(w){var x=w;if(!(!Ng.length||Ng[Ng.length-1]!==a)){var k="deltaY"in x?vne(x):_4(x),C=r.current.filter(function(R){return R.name===x.type&&(R.target===x.target||x.target===R.shadowParent)&&Bet(R.delta,k)})[0];if(C&&C.should){x.cancelable&&x.preventDefault();return}if(!C){var _=(l.current.shards||[]).map(bne).filter(Boolean).filter(function(R){return R.contains(x.target)}),$=_.length>0?s(x,_[0]):!l.current.noIsolation;$&&x.cancelable&&x.preventDefault()}}},[]),d=S.useCallback(function(w,x,k,C){var _={name:w,delta:x,target:k,should:C,shadowParent:Fet(k)};r.current.push(_),setTimeout(function(){r.current=r.current.filter(function($){return $!==_})},1)},[]),u=S.useCallback(function(w){n.current=_4(w),o.current=void 0},[]),p=S.useCallback(function(w){d(w.type,vne(w),w.target,s(w,e.lockRef.current))},[]),f=S.useCallback(function(w){d(w.type,_4(w),w.target,s(w,e.lockRef.current))},[]);S.useEffect(function(){return Ng.push(a),e.setCallbacks({onScrollCapture:p,onWheelCapture:p,onTouchMoveCapture:f}),document.addEventListener("wheel",c,Mg),document.addEventListener("touchmove",c,Mg),document.addEventListener("touchstart",u,Mg),function(){Ng=Ng.filter(function(w){return w!==a}),document.removeEventListener("wheel",c,Mg),document.removeEventListener("touchmove",c,Mg),document.removeEventListener("touchstart",u,Mg)}},[]);var m=e.removeScrollBar,v=e.inert;return S.createElement(S.Fragment,null,v?S.createElement(a,{styles:Iet(i)}):null,m?S.createElement(zet,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Fet(e){for(var r=null;e!==null;)e instanceof ShadowRoot&&(r=e.host,e=e.host),e=e.parentNode;return r}const Vet=get(une,Let);var xne=S.forwardRef(function(e,r){return S.createElement(w4,ls({},e,{ref:r,sideCar:Vet}))});xne.classNames=w4.classNames;function Ro(e){return Object.keys(e)}function qet(e){return e.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`)}function Het(e){return typeof e!="string"||!e.includes("var(--mantine-scale)")?e:e.match(/^calc\((.*?)\)$/)?.[1].split("*")[0].trim()}function S4(e){const r=Het(e);return typeof r=="number"?r:typeof r=="string"?r.includes("calc")||r.includes("var")?r:r.includes("px")?Number(r.replace("px","")):r.includes("rem")?Number(r.replace("rem",""))*16:r.includes("em")?Number(r.replace("em",""))*16:Number(r):NaN}function wne(e){return e==="0rem"?"0rem":`calc(${e} * var(--mantine-scale))`}function kne(e,{shouldScale:r=!1}={}){function n(o){if(o===0||o==="0")return`0${e}`;if(typeof o=="number"){const i=`${o/16}${e}`;return r?wne(i):i}if(typeof o=="string"){if(o===""||o.startsWith("calc(")||o.startsWith("clamp(")||o.includes("rgba("))return o;if(o.includes(","))return o.split(",").map(a=>n(a)).join(",");if(o.includes(" "))return o.split(" ").map(a=>n(a)).join(" ");const i=o.replace("px","");if(!Number.isNaN(Number(i))){const a=`${Number(i)/16}${e}`;return r?wne(a):a}}return o}return n}const Ne=kne("rem",{shouldScale:!0});kne("em");function Vd(e){return Object.keys(e).reduce((r,n)=>(e[n]!==void 0&&(r[n]=e[n]),r),{})}function _ne(e){if(typeof e=="number")return!0;if(typeof e=="string"){if(e.startsWith("calc(")||e.startsWith("var(")||e.includes(" ")&&e.trim()!=="")return!0;const r=/^[+-]?[0-9]+(\.[0-9]+)?(px|em|rem|ex|ch|lh|rlh|vw|vh|vmin|vmax|vb|vi|svw|svh|lvw|lvh|dvw|dvh|cm|mm|in|pt|pc|q|cqw|cqh|cqi|cqb|cqmin|cqmax|%)?$/;return e.trim().split(/\s+/).every(n=>r.test(n))}return!1}function E4(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==S.Fragment:!1}function Di(e){const r=S.createContext(null);return[({children:n,value:o})=>y.jsx(r.Provider,{value:o,children:n}),()=>{const n=S.useContext(r);if(n===null)throw new Error(e);return n}]}function Bg(e=null){const r=S.createContext(e);return[({children:n,value:o})=>y.jsx(r.Provider,{value:o,children:n}),()=>S.useContext(r)]}function Sne(e,r){return n=>{if(typeof n!="string"||n.trim().length===0)throw new Error(r);return`${e}-${n}`}}function j0(e,r){let n=e;for(;(n=n.parentElement)&&!n.matches(r););return n}function Uet(e,r,n){for(let o=e-1;o>=0;o-=1)if(!r[o].disabled)return o;if(n){for(let o=r.length-1;o>-1;o-=1)if(!r[o].disabled)return o}return e}function Wet(e,r,n){for(let o=e+1;o{n?.(s);const c=Array.from(j0(s.currentTarget,e)?.querySelectorAll(r)||[]).filter(v=>Get(s.currentTarget,v,e)),d=c.findIndex(v=>s.currentTarget===v),u=Wet(d,c,o),p=Uet(d,c,o),f=a==="rtl"?p:u,m=a==="rtl"?u:p;switch(s.key){case"ArrowRight":{l==="horizontal"&&(s.stopPropagation(),s.preventDefault(),c[f].focus(),i&&c[f].click());break}case"ArrowLeft":{l==="horizontal"&&(s.stopPropagation(),s.preventDefault(),c[m].focus(),i&&c[m].click());break}case"ArrowUp":{l==="vertical"&&(s.stopPropagation(),s.preventDefault(),c[p].focus(),i&&c[p].click());break}case"ArrowDown":{l==="vertical"&&(s.stopPropagation(),s.preventDefault(),c[u].focus(),i&&c[u].click());break}case"Home":{s.stopPropagation(),s.preventDefault(),!c[0].disabled&&c[0].focus();break}case"End":{s.stopPropagation(),s.preventDefault();const v=c.length-1;!c[v].disabled&&c[v].focus();break}}}}const Yet={app:100,modal:200,popover:300,overlay:400,max:9999};function yl(e){return Yet[e]}const Xet=()=>{};function Ket(e,r={active:!0}){return typeof e!="function"||!r.active?r.onKeyDown||Xet:n=>{n.key==="Escape"&&(e(n),r.onTrigger?.())}}function Qt(e,r="size",n=!0){if(e!==void 0)return _ne(e)?n?Ne(e):e:`var(--${r}-${e})`}function ro(e){return Qt(e,"mantine-spacing")}function hn(e){return e===void 0?"var(--mantine-radius-default)":Qt(e,"mantine-radius")}function zo(e){return Qt(e,"mantine-font-size")}function Zet(e){return Qt(e,"mantine-line-height",!1)}function Nz(e){if(e)return Qt(e,"mantine-shadow",!1)}function Tn(e,r){return n=>{e?.(n),r?.(n)}}function Qet(e,r){return e in r?S4(r[e]):S4(e)}function Bz(e,r){const n=e.map(o=>({value:o,px:Qet(o,r)}));return n.sort((o,i)=>o.px-i.px),n}function vl(e){return typeof e=="object"&&e!==null?"base"in e?e.base:void 0:e}function Ig(e,r,n){return r===void 0&&n===void 0?e:r!==void 0&&n===void 0?Math.max(e,r):Math.min(r===void 0&&n!==void 0?e:Math.max(e,r),n)}function Iz(e="mantine-"){return`${e}${Math.random().toString(36).slice(2,11)}`}function Jet(e,r){if(e===r||Number.isNaN(e)&&Number.isNaN(r))return!0;if(!(e instanceof Object)||!(r instanceof Object))return!1;const n=Object.keys(e),{length:o}=n;if(o!==Object.keys(r).length)return!1;for(let i=0;i{r.current=e}),S.useMemo(()=>((...n)=>r.current?.(...n)),[])}function C4(e,r){const{delay:n,flushOnUnmount:o,leading:i}=typeof r=="number"?{delay:r,flushOnUnmount:!1,leading:!1}:r,a=Mp(e),l=S.useRef(0),s=S.useMemo(()=>{const c=Object.assign((...d)=>{window.clearTimeout(l.current);const u=c._isFirstCall;c._isFirstCall=!1;function p(){window.clearTimeout(l.current),l.current=0,c._isFirstCall=!0}if(i&&u){a(...d);const v=()=>{p()},w=()=>{l.current!==0&&(p(),a(...d))},x=()=>{p()};c.flush=w,c.cancel=x,l.current=window.setTimeout(v,n);return}if(i&&!u){const v=()=>{l.current!==0&&(p(),a(...d))},w=()=>{p()};c.flush=v,c.cancel=w;const x=()=>{p()};l.current=window.setTimeout(x,n);return}const f=()=>{l.current!==0&&(p(),a(...d))},m=()=>{p()};c.flush=f,c.cancel=m,l.current=window.setTimeout(f,n)},{flush:()=>{},cancel:()=>{},_isFirstCall:!0});return c},[a,n,i]);return S.useEffect(()=>()=>{o?s.flush():s.cancel()},[s,o]),s}const ett=["mousedown","touchstart"];function Ene(e,r,n){const o=S.useRef(null),i=r||ett;return S.useEffect(()=>{const a=l=>{const{target:s}=l??{};if(Array.isArray(n)){const c=!document.body.contains(s)&&s?.tagName!=="HTML";n.every(d=>!!d&&!l.composedPath().includes(d))&&!c&&e(l)}else o.current&&!o.current.contains(s)&&e(l)};return i.forEach(l=>document.addEventListener(l,a)),()=>{i.forEach(l=>document.removeEventListener(l,a))}},[o,e,n]),o}function ttt(e,r){try{return e.addEventListener("change",r),()=>e.removeEventListener("change",r)}catch{return e.addListener(r),()=>e.removeListener(r)}}function rtt(e,r){return typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function ntt(e,r,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[o,i]=S.useState(n?r:rtt(e));return S.useEffect(()=>{try{const a=window.matchMedia(e);return i(a.matches),ttt(a,l=>i(l.matches))}catch{return}},[e]),o||!1}const $4=typeof document<"u"?S.useLayoutEffect:S.useEffect;function Og(e,r){const n=S.useRef(!1);S.useEffect(()=>()=>{n.current=!1},[]),S.useEffect(()=>{if(n.current)return e();n.current=!0},r)}function Cne({opened:e,shouldReturnFocus:r=!0}){const n=S.useRef(null),o=()=>{n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&n.current?.focus({preventScroll:!0})};return Og(()=>{let i=-1;const a=l=>{l.key==="Tab"&&window.clearTimeout(i)};return document.addEventListener("keydown",a),e?n.current=document.activeElement:r&&(i=window.setTimeout(o,10)),()=>{window.clearTimeout(i),document.removeEventListener("keydown",a)}},[e,r]),o}const ott=/input|select|textarea|button|object/,$ne="a, input, select, textarea, button, object, [tabindex]";function itt(e){return e.style.display==="none"}function att(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let r=e;for(;r&&!(r===document.body||r.nodeType===11);){if(itt(r))return!1;r=r.parentNode}return!0}function Rne(e){let r=e.getAttribute("tabindex");return r===null&&(r=void 0),parseInt(r,10)}function Oz(e){const r=e.nodeName.toLowerCase(),n=!Number.isNaN(Rne(e));return(ott.test(r)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&att(e)}function zne(e){const r=Rne(e);return(Number.isNaN(r)||r>=0)&&Oz(e)}function ltt(e){return Array.from(e.querySelectorAll($ne)).filter(zne)}function stt(e,r){const n=ltt(e);if(!n.length){r.preventDefault();return}const o=n[r.shiftKey?0:n.length-1],i=e.getRootNode();let a=o===i.activeElement||e===i.activeElement;const l=i.activeElement;if(l.tagName==="INPUT"&&l.getAttribute("type")==="radio"&&(a=n.filter(c=>c.getAttribute("type")==="radio"&&c.getAttribute("name")===l.getAttribute("name")).includes(o)),!a)return;r.preventDefault();const s=n[r.shiftKey?n.length-1:0];s&&s.focus()}function ctt(e=!0){const r=S.useRef(null),n=i=>{let a=i.querySelector("[data-autofocus]");if(!a){const l=Array.from(i.querySelectorAll($ne));a=l.find(zne)||l.find(Oz)||null,!a&&Oz(i)&&(a=i)}a&&a.focus({preventScroll:!0})},o=S.useCallback(i=>{e&&i!==null&&r.current!==i&&(i?(setTimeout(()=>{i.getRootNode()&&n(i)}),r.current=i):r.current=null)},[e]);return S.useEffect(()=>{if(!e)return;r.current&&setTimeout(()=>n(r.current));const i=a=>{a.key==="Tab"&&r.current&&stt(r.current,a)};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[e]),o}const dtt=Zr.useId||(()=>{});function utt(){const e=dtt();return e?`mantine-${e.replace(/:/g,"")}`:""}function bl(e){const r=utt(),[n,o]=S.useState(r);return $4(()=>{o(Iz())},[]),typeof e=="string"?e:typeof window>"u"?r:n}function ptt(e,r,n){S.useEffect(()=>(window.addEventListener(e,r,n),()=>window.removeEventListener(e,r,n)),[e,r])}function Lz(e,r){if(typeof e=="function")return e(r);typeof e=="object"&&e!==null&&"current"in e&&(e.current=r)}function Tne(...e){const r=new Map;return n=>{if(e.forEach(o=>{const i=Lz(o,n);i&&r.set(o,i)}),r.size>0)return()=>{e.forEach(o=>{const i=r.get(o);i&&typeof i=="function"?i():Lz(o,null)}),r.clear()}}}function on(...e){return S.useCallback(Tne(...e),e)}function htt(e,r,n="ltr"){const o=S.useRef(!1),i=S.useRef(!1),a=S.useRef(0),[l,s]=S.useState(!1),c=S.useRef(null);return S.useEffect(()=>{o.current=!0},[]),{ref:S.useCallback(d=>{if(c.current&&(c.current(),c.current=null),!d)return;const u=({x:_,y:$})=>{cancelAnimationFrame(a.current),a.current=requestAnimationFrame(()=>{if(o.current&&d){d.style.userSelect="none";const R=d.getBoundingClientRect();if(R.width&&R.height){const T=Ig((_-R.left)/R.width,0,1);e({x:n==="ltr"?T:1-T,y:Ig(($-R.top)/R.height,0,1)})}}})},p=()=>{document.addEventListener("mousemove",x),document.addEventListener("mouseup",v),document.addEventListener("touchmove",C,{passive:!1}),document.addEventListener("touchend",v)},f=()=>{document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",v),document.removeEventListener("touchmove",C),document.removeEventListener("touchend",v)},m=()=>{!i.current&&o.current&&(i.current=!0,typeof r?.onScrubStart=="function"&&r.onScrubStart(),s(!0),p())},v=()=>{i.current&&o.current&&(i.current=!1,s(!1),f(),setTimeout(()=>{typeof r?.onScrubEnd=="function"&&r.onScrubEnd()},0))},w=_=>{m(),_.preventDefault(),x(_)},x=_=>u({x:_.clientX,y:_.clientY}),k=_=>{_.cancelable&&_.preventDefault(),m(),C(_)},C=_=>{_.cancelable&&_.preventDefault(),u({x:_.changedTouches[0].clientX,y:_.changedTouches[0].clientY})};d.addEventListener("mousedown",w),d.addEventListener("touchstart",k,{passive:!1}),c.current=()=>{d.removeEventListener("mousedown",w),d.removeEventListener("touchstart",k)}},[n,e]),active:l}}function qd({value:e,defaultValue:r,finalValue:n,onChange:o=()=>{}}){const[i,a]=S.useState(r!==void 0?r:n);return e!==void 0?[e,o,!0]:[i,(s,...c)=>{a(s),o?.(s,...c)},!1]}function Fz(e,r){return ntt("(prefers-reduced-motion: reduce)",e,r)}function ftt(e,r){if(!e||!r)return!1;if(e===r)return!0;if(e.length!==r.length)return!1;for(let n=0;n{o(s=>s||(r.onOpen?.(),!0))},[r.onOpen]),a=S.useCallback(()=>{o(s=>s&&(r.onClose?.(),!1))},[r.onClose]),l=S.useCallback(()=>{n?a():i()},[a,i,n]);return[n,{open:i,close:a,toggle:l}]}function vtt(e,r,n={autoInvoke:!1}){const o=S.useRef(null),i=S.useCallback((...l)=>{o.current||(o.current=window.setTimeout(()=>{e(l),o.current=null},r))},[r]),a=S.useCallback(()=>{o.current&&(window.clearTimeout(o.current),o.current=null)},[]);return S.useEffect(()=>(n.autoInvoke&&i(),a),[a,i]),{start:i,clear:a}}function btt(e){const r=S.useRef(void 0);return S.useEffect(()=>{r.current=e},[e]),r.current}function xtt(e,r,n){const o=S.useRef(null),i=S.useRef(null);return S.useEffect(()=>{const a=typeof n=="function"?n():n;return(a||i.current)&&(o.current=new MutationObserver(e),o.current.observe(a||i.current,r)),()=>{o.current?.disconnect()}},[e,r]),i}function wtt(){const[e,r]=S.useState(!1);return S.useEffect(()=>r(!0),[]),e}function ktt(){return typeof process<"u"&&process.env?"production":"development"}function jne(e){const r=new Map;return(...n)=>{const o=JSON.stringify(n);if(r.has(o))return r.get(o);const i=e(...n);return r.set(o,i),i}}function Ane(e,r){return r.length===0?e:r.reduce((n,o)=>Math.abs(o-e){Object.entries(n).forEach(([o,i])=>{r[o]?r[o]=no(r[o],i):r[o]=i})}),r}function T4({theme:e,classNames:r,props:n,stylesCtx:o}){const i=(Array.isArray(r)?r:[r]).map(a=>typeof a=="function"?a(e,n,o):a||_tt);return Stt(i)}function j4({theme:e,styles:r,props:n,stylesCtx:o}){return(Array.isArray(r)?r:[r]).reduce((i,a)=>typeof a=="function"?{...i,...a(e,n,o)}:{...i,...a},{})}const Ett=S.createContext(null);function Np(){const e=S.useContext(Ett);if(!e)throw new Error("[@mantine/core] MantineProvider was not found in tree");return e}function Ctt(){return Np().classNamesPrefix}function $tt(){return Np().getStyleNonce}function Rtt(){return Np().withStaticClasses}function ztt(){return Np().headless}function Ttt(){return Np().stylesTransform?.sx}function jtt(){return Np().stylesTransform?.styles}function A4(){return Np().env||"default"}function Att(e){return/^#?([0-9A-F]{3}){1,2}([0-9A-F]{2})?$/i.test(e)}function Dtt(e){let r=e.replace("#","");if(r.length===3){const l=r.split("");r=[l[0],l[0],l[1],l[1],l[2],l[2]].join("")}if(r.length===8){const l=parseInt(r.slice(6,8),16)/255;return{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:l}}const n=parseInt(r,16),o=n>>16&255,i=n>>8&255,a=n&255;return{r:o,g:i,b:a,a:1}}function Ptt(e){const[r,n,o,i]=e.replace(/[^0-9,./]/g,"").split(/[/,]/).map(Number);return{r,g:n,b:o,a:i===void 0?1:i}}function Mtt(e){const r=/^hsla?\(\s*(\d+)\s*,\s*(\d+%)\s*,\s*(\d+%)\s*(,\s*(0?\.\d+|\d+(\.\d+)?))?\s*\)$/i,n=e.match(r);if(!n)return{r:0,g:0,b:0,a:1};const o=parseInt(n[1],10),i=parseInt(n[2],10)/100,a=parseInt(n[3],10)/100,l=n[5]?parseFloat(n[5]):void 0,s=(1-Math.abs(2*a-1))*i,c=o/60,d=s*(1-Math.abs(c%2-1)),u=a-s/2;let p,f,m;return c>=0&&c<1?(p=s,f=d,m=0):c>=1&&c<2?(p=d,f=s,m=0):c>=2&&c<3?(p=0,f=s,m=d):c>=3&&c<4?(p=0,f=d,m=s):c>=4&&c<5?(p=d,f=0,m=s):(p=s,f=0,m=d),{r:Math.round((p+u)*255),g:Math.round((f+u)*255),b:Math.round((m+u)*255),a:l||1}}function Pne(e){return Att(e)?Dtt(e):e.startsWith("rgb")?Ptt(e):e.startsWith("hsl")?Mtt(e):{r:0,g:0,b:0,a:1}}function A0(e,r){return typeof e.primaryShade=="number"?e.primaryShade:r==="dark"?e.primaryShade.dark:e.primaryShade.light}function Vz(e){return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function Ntt(e){const r=e.match(/oklch\((.*?)%\s/);return r?parseFloat(r[1]):null}function Btt(e){if(e.startsWith("oklch("))return(Ntt(e)||0)/100;const{r,g:n,b:o}=Pne(e),i=r/255,a=n/255,l=o/255,s=Vz(i),c=Vz(a),d=Vz(l);return .2126*s+.7152*c+.0722*d}function D0(e,r=.179){return e.startsWith("var(")?!1:Btt(e)>r}function Bp({color:e,theme:r,colorScheme:n}){if(typeof e!="string")throw new Error(`[@mantine/core] Failed to parse color. Expected color to be a string, instead got ${typeof e}`);if(e==="bright")return{color:e,value:n==="dark"?r.white:r.black,shade:void 0,isThemeColor:!1,isLight:D0(n==="dark"?r.white:r.black,r.luminanceThreshold),variable:"--mantine-color-bright"};if(e==="dimmed")return{color:e,value:n==="dark"?r.colors.dark[2]:r.colors.gray[7],shade:void 0,isThemeColor:!1,isLight:D0(n==="dark"?r.colors.dark[2]:r.colors.gray[6],r.luminanceThreshold),variable:"--mantine-color-dimmed"};if(e==="white"||e==="black")return{color:e,value:e==="white"?r.white:r.black,shade:void 0,isThemeColor:!1,isLight:D0(e==="white"?r.white:r.black,r.luminanceThreshold),variable:`--mantine-color-${e}`};const[o,i]=e.split("."),a=i?Number(i):void 0,l=o in r.colors;if(l){const s=a!==void 0?r.colors[o][a]:r.colors[o][A0(r,n||"light")];return{color:o,value:s,shade:a,isThemeColor:l,isLight:D0(s,r.luminanceThreshold),variable:i?`--mantine-color-${o}-${a}`:`--mantine-color-${o}-filled`}}return{color:e,value:e,isThemeColor:l,isLight:D0(e,r.luminanceThreshold),shade:a,variable:void 0}}function Uo(e,r){const n=Bp({color:e||r.primaryColor,theme:r});return n.variable?`var(${n.variable})`:e}function Itt(e,r){const n={from:e?.from||r.defaultGradient.from,to:e?.to||r.defaultGradient.to,deg:e?.deg??r.defaultGradient.deg??0},o=Uo(n.from,r),i=Uo(n.to,r);return`linear-gradient(${n.deg}deg, ${o} 0%, ${i} 100%)`}function Mne(e,r){if(typeof e!="string"||r>1||r<0)return"rgba(0, 0, 0, 1)";if(e.startsWith("var(")){const a=(1-r)*100;return`color-mix(in srgb, ${e}, transparent ${a}%)`}if(e.startsWith("oklch"))return e.includes("/")?e.replace(/\/\s*[\d.]+\s*\)/,`/ ${r})`):e.replace(")",` / ${r})`);const{r:n,g:o,b:i}=Pne(e);return`rgba(${n}, ${o}, ${i}, ${r})`}const Lg=Mne,Ott={dark:["#C9C9C9","#b8b8b8","#828282","#696969","#424242","#3b3b3b","#2e2e2e","#242424","#1f1f1f","#141414"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]},Nne="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",Ltt={scale:1,fontSmoothing:!0,white:"#fff",black:"#000",colors:Ott,primaryShade:{light:6,dark:8},primaryColor:"blue",autoContrast:!1,luminanceThreshold:.3,fontFamily:Nne,fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",cursorType:"default",defaultRadius:"sm",headings:{fontFamily:Nne,fontWeight:"700",textWrap:"wrap",sizes:{h1:{fontSize:Ne(34),lineHeight:"1.3"},h2:{fontSize:Ne(26),lineHeight:"1.35"},h3:{fontSize:Ne(22),lineHeight:"1.4"},h4:{fontSize:Ne(18),lineHeight:"1.45"},h5:{fontSize:Ne(16),lineHeight:"1.5"},h6:{fontSize:Ne(14),lineHeight:"1.5"}}},fontSizes:{xs:Ne(12),sm:Ne(14),md:Ne(16),lg:Ne(18),xl:Ne(20)},lineHeights:{xs:"1.4",sm:"1.45",md:"1.55",lg:"1.6",xl:"1.65"},radius:{xs:Ne(2),sm:Ne(4),md:Ne(8),lg:Ne(16),xl:Ne(32)},spacing:{xs:Ne(10),sm:Ne(12),md:Ne(16),lg:Ne(20),xl:Ne(32)},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},shadows:{xs:`0 ${Ne(1)} ${Ne(3)} rgba(0, 0, 0, 0.05), 0 ${Ne(1)} ${Ne(2)} rgba(0, 0, 0, 0.1)`,sm:`0 ${Ne(1)} ${Ne(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${Ne(10)} ${Ne(15)} ${Ne(-5)}, rgba(0, 0, 0, 0.04) 0 ${Ne(7)} ${Ne(7)} ${Ne(-5)}`,md:`0 ${Ne(1)} ${Ne(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${Ne(20)} ${Ne(25)} ${Ne(-5)}, rgba(0, 0, 0, 0.04) 0 ${Ne(10)} ${Ne(10)} ${Ne(-5)}`,lg:`0 ${Ne(1)} ${Ne(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${Ne(28)} ${Ne(23)} ${Ne(-7)}, rgba(0, 0, 0, 0.04) 0 ${Ne(12)} ${Ne(12)} ${Ne(-7)}`,xl:`0 ${Ne(1)} ${Ne(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${Ne(36)} ${Ne(28)} ${Ne(-7)}, rgba(0, 0, 0, 0.04) 0 ${Ne(17)} ${Ne(17)} ${Ne(-7)}`}},Ftt=S.createContext(null);function uo(){const e=S.useContext(Ftt);if(!e)throw new Error("@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app");return e}function qz({color:e,theme:r,autoContrast:n}){return(typeof n=="boolean"?n:r.autoContrast)&&Bp({color:e||r.primaryColor,theme:r}).isLight?"var(--mantine-color-black)":"var(--mantine-color-white)"}function Bne(e,r){return qz({color:e.colors[e.primaryColor][A0(e,r)],theme:e,autoContrast:null})}function D4({theme:e,color:r,colorScheme:n,name:o=r,withColorValues:i=!0}){if(!e.colors[r])return{};if(n==="light"){const s=A0(e,"light"),c={[`--mantine-color-${o}-text`]:`var(--mantine-color-${o}-filled)`,[`--mantine-color-${o}-filled`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-filled-hover`]:`var(--mantine-color-${o}-${s===9?8:s+1})`,[`--mantine-color-${o}-light`]:Lg(e.colors[r][s],.1),[`--mantine-color-${o}-light-hover`]:Lg(e.colors[r][s],.12),[`--mantine-color-${o}-light-color`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-outline`]:`var(--mantine-color-${o}-${s})`,[`--mantine-color-${o}-outline-hover`]:Lg(e.colors[r][s],.05)};return i?{[`--mantine-color-${o}-0`]:e.colors[r][0],[`--mantine-color-${o}-1`]:e.colors[r][1],[`--mantine-color-${o}-2`]:e.colors[r][2],[`--mantine-color-${o}-3`]:e.colors[r][3],[`--mantine-color-${o}-4`]:e.colors[r][4],[`--mantine-color-${o}-5`]:e.colors[r][5],[`--mantine-color-${o}-6`]:e.colors[r][6],[`--mantine-color-${o}-7`]:e.colors[r][7],[`--mantine-color-${o}-8`]:e.colors[r][8],[`--mantine-color-${o}-9`]:e.colors[r][9],...c}:c}const a=A0(e,"dark"),l={[`--mantine-color-${o}-text`]:`var(--mantine-color-${o}-4)`,[`--mantine-color-${o}-filled`]:`var(--mantine-color-${o}-${a})`,[`--mantine-color-${o}-filled-hover`]:`var(--mantine-color-${o}-${a===9?8:a+1})`,[`--mantine-color-${o}-light`]:Lg(e.colors[r][Math.max(0,a-2)],.15),[`--mantine-color-${o}-light-hover`]:Lg(e.colors[r][Math.max(0,a-2)],.2),[`--mantine-color-${o}-light-color`]:`var(--mantine-color-${o}-${Math.max(a-5,0)})`,[`--mantine-color-${o}-outline`]:`var(--mantine-color-${o}-${Math.max(a-4,0)})`,[`--mantine-color-${o}-outline-hover`]:Lg(e.colors[r][Math.max(a-4,0)],.05)};return i?{[`--mantine-color-${o}-0`]:e.colors[r][0],[`--mantine-color-${o}-1`]:e.colors[r][1],[`--mantine-color-${o}-2`]:e.colors[r][2],[`--mantine-color-${o}-3`]:e.colors[r][3],[`--mantine-color-${o}-4`]:e.colors[r][4],[`--mantine-color-${o}-5`]:e.colors[r][5],[`--mantine-color-${o}-6`]:e.colors[r][6],[`--mantine-color-${o}-7`]:e.colors[r][7],[`--mantine-color-${o}-8`]:e.colors[r][8],[`--mantine-color-${o}-9`]:e.colors[r][9],...l}:l}function Vtt(e){return!!e&&typeof e=="object"&&"mantine-virtual-color"in e}function Fg(e,r,n){Ro(r).forEach(o=>Object.assign(e,{[`--mantine-${n}-${o}`]:r[o]}))}(e=>{const r=A0(e,"light"),n=e.defaultRadius in e.radius?e.radius[e.defaultRadius]:Ne(e.defaultRadius),o={variables:{"--mantine-z-index-app":"100","--mantine-z-index-modal":"200","--mantine-z-index-popover":"300","--mantine-z-index-overlay":"400","--mantine-z-index-max":"9999","--mantine-scale":e.scale.toString(),"--mantine-cursor-type":e.cursorType,"--mantine-webkit-font-smoothing":e.fontSmoothing?"antialiased":"unset","--mantine-moz-font-smoothing":e.fontSmoothing?"grayscale":"unset","--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-line-height":e.lineHeights.md,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":e.headings.fontWeight,"--mantine-heading-text-wrap":e.headings.textWrap,"--mantine-radius-default":n,"--mantine-primary-color-filled":`var(--mantine-color-${e.primaryColor}-filled)`,"--mantine-primary-color-filled-hover":`var(--mantine-color-${e.primaryColor}-filled-hover)`,"--mantine-primary-color-light":`var(--mantine-color-${e.primaryColor}-light)`,"--mantine-primary-color-light-hover":`var(--mantine-color-${e.primaryColor}-light-hover)`,"--mantine-primary-color-light-color":`var(--mantine-color-${e.primaryColor}-light-color)`},light:{"--mantine-color-scheme":"light","--mantine-primary-color-contrast":Bne(e,"light"),"--mantine-color-bright":"var(--mantine-color-black)","--mantine-color-text":e.black,"--mantine-color-body":e.white,"--mantine-color-error":"var(--mantine-color-red-6)","--mantine-color-placeholder":"var(--mantine-color-gray-5)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-${r})`,"--mantine-color-default":"var(--mantine-color-white)","--mantine-color-default-hover":"var(--mantine-color-gray-0)","--mantine-color-default-color":"var(--mantine-color-black)","--mantine-color-default-border":"var(--mantine-color-gray-4)","--mantine-color-dimmed":"var(--mantine-color-gray-6)","--mantine-color-disabled":"var(--mantine-color-gray-2)","--mantine-color-disabled-color":"var(--mantine-color-gray-5)","--mantine-color-disabled-border":"var(--mantine-color-gray-3)"},dark:{"--mantine-color-scheme":"dark","--mantine-primary-color-contrast":Bne(e,"dark"),"--mantine-color-bright":"var(--mantine-color-white)","--mantine-color-text":"var(--mantine-color-dark-0)","--mantine-color-body":"var(--mantine-color-dark-7)","--mantine-color-error":"var(--mantine-color-red-8)","--mantine-color-placeholder":"var(--mantine-color-dark-3)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-4)`,"--mantine-color-default":"var(--mantine-color-dark-6)","--mantine-color-default-hover":"var(--mantine-color-dark-5)","--mantine-color-default-color":"var(--mantine-color-white)","--mantine-color-default-border":"var(--mantine-color-dark-4)","--mantine-color-dimmed":"var(--mantine-color-dark-2)","--mantine-color-disabled":"var(--mantine-color-dark-6)","--mantine-color-disabled-color":"var(--mantine-color-dark-3)","--mantine-color-disabled-border":"var(--mantine-color-dark-4)"}};Fg(o.variables,e.breakpoints,"breakpoint"),Fg(o.variables,e.spacing,"spacing"),Fg(o.variables,e.fontSizes,"font-size"),Fg(o.variables,e.lineHeights,"line-height"),Fg(o.variables,e.shadows,"shadow"),Fg(o.variables,e.radius,"radius"),e.colors[e.primaryColor].forEach((a,l)=>{o.variables[`--mantine-primary-color-${l}`]=`var(--mantine-color-${e.primaryColor}-${l})`}),Ro(e.colors).forEach(a=>{const l=e.colors[a];if(Vtt(l)){Object.assign(o.light,D4({theme:e,name:l.name,color:l.light,colorScheme:"light",withColorValues:!0})),Object.assign(o.dark,D4({theme:e,name:l.name,color:l.dark,colorScheme:"dark",withColorValues:!0}));return}l.forEach((s,c)=>{o.variables[`--mantine-color-${a}-${c}`]=s}),Object.assign(o.light,D4({theme:e,color:a,colorScheme:"light",withColorValues:!1})),Object.assign(o.dark,D4({theme:e,color:a,colorScheme:"dark",withColorValues:!1}))});const i=e.headings.sizes;return Ro(i).forEach(a=>{o.variables[`--mantine-${a}-font-size`]=i[a].fontSize,o.variables[`--mantine-${a}-line-height`]=i[a].lineHeight,o.variables[`--mantine-${a}-font-weight`]=i[a].fontWeight||e.headings.fontWeight}),o})(Ltt);function Hz({classNames:e,styles:r,props:n,stylesCtx:o}){const i=uo();return{resolvedClassNames:T4({theme:i,classNames:e,props:n,stylesCtx:o||void 0}),resolvedStyles:j4({theme:i,styles:r,props:n,stylesCtx:o||void 0})}}const qtt={always:"mantine-focus-always",auto:"mantine-focus-auto",never:"mantine-focus-never"};function Htt({theme:e,options:r,unstyled:n}){return no(r?.focusable&&!n&&(e.focusClassName||qtt[e.focusRing]),r?.active&&!n&&e.activeClassName)}function Utt({selector:e,stylesCtx:r,options:n,props:o,theme:i}){return T4({theme:i,classNames:n?.classNames,props:n?.props||o,stylesCtx:r})[e]}function Ine({selector:e,stylesCtx:r,theme:n,classNames:o,props:i}){return T4({theme:n,classNames:o,props:i,stylesCtx:r})[e]}function Wtt({rootSelector:e,selector:r,className:n}){return e===r?n:void 0}function Gtt({selector:e,classes:r,unstyled:n}){return n?void 0:r[e]}function Ytt({themeName:e,classNamesPrefix:r,selector:n,withStaticClass:o}){return o===!1?[]:e.map(i=>`${r}-${i}-${n}`)}function Xtt({themeName:e,theme:r,selector:n,props:o,stylesCtx:i}){return e.map(a=>T4({theme:r,classNames:r.components[a]?.classNames,props:o,stylesCtx:i})?.[n])}function Ktt({options:e,classes:r,selector:n,unstyled:o}){return e?.variant&&!o?r[`${n}--${e.variant}`]:void 0}function Ztt({theme:e,options:r,themeName:n,selector:o,classNamesPrefix:i,classNames:a,classes:l,unstyled:s,className:c,rootSelector:d,props:u,stylesCtx:p,withStaticClasses:f,headless:m,transformedStyles:v}){return no(Htt({theme:e,options:r,unstyled:s||m}),Xtt({theme:e,themeName:n,selector:o,props:u,stylesCtx:p}),Ktt({options:r,classes:l,selector:o,unstyled:s}),Ine({selector:o,stylesCtx:p,theme:e,classNames:a,props:u}),Ine({selector:o,stylesCtx:p,theme:e,classNames:v,props:u}),Utt({selector:o,stylesCtx:p,options:r,props:u,theme:e}),Wtt({rootSelector:d,selector:o,className:c}),Gtt({selector:o,classes:l,unstyled:s||m}),f&&!m&&Ytt({themeName:n,classNamesPrefix:i,selector:o,withStaticClass:r?.withStaticClass}),r?.className)}function Qtt({theme:e,themeName:r,props:n,stylesCtx:o,selector:i}){return r.map(a=>j4({theme:e,styles:e.components[a]?.styles,props:n,stylesCtx:o})[i]).reduce((a,l)=>({...a,...l}),{})}function Uz({style:e,theme:r}){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...Uz({style:o,theme:r})}),{}):typeof e=="function"?e(r):e??{}}function Jtt(e){return e.reduce((r,n)=>(n&&Object.keys(n).forEach(o=>{r[o]={...r[o],...Vd(n[o])}}),r),{})}function ert({vars:e,varsResolver:r,theme:n,props:o,stylesCtx:i,selector:a,themeName:l,headless:s}){return Jtt([s?{}:r?.(n,o,i),...l.map(c=>n.components?.[c]?.vars?.(n,o,i)),e?.(n,o,i)])?.[a]}function trt({theme:e,themeName:r,selector:n,options:o,props:i,stylesCtx:a,rootSelector:l,styles:s,style:c,vars:d,varsResolver:u,headless:p,withStylesTransform:f}){return{...!f&&Qtt({theme:e,themeName:r,props:i,stylesCtx:a,selector:n}),...!f&&j4({theme:e,styles:s,props:i,stylesCtx:a})[n],...!f&&j4({theme:e,styles:o?.styles,props:o?.props||i,stylesCtx:a})[n],...ert({theme:e,props:i,stylesCtx:a,vars:d,varsResolver:u,selector:n,themeName:r,headless:p}),...l===n?Uz({style:c,theme:e}):null,...Uz({style:o?.style,theme:e})}}function rrt({props:e,stylesCtx:r,themeName:n}){const o=uo(),i=jtt()?.();return{getTransformedStyles:a=>i?[...a.map(l=>i(l,{props:e,theme:o,ctx:r})),...n.map(l=>i(o.components[l]?.styles,{props:e,theme:o,ctx:r}))].filter(Boolean):[],withStylesTransform:!!i}}function dt({name:e,classes:r,props:n,stylesCtx:o,className:i,style:a,rootSelector:l="root",unstyled:s,classNames:c,styles:d,vars:u,varsResolver:p,attributes:f}){const m=uo(),v=Ctt(),w=Rtt(),x=ztt(),k=(Array.isArray(e)?e:[e]).filter($=>$),{withStylesTransform:C,getTransformedStyles:_}=rrt({props:n,stylesCtx:o,themeName:k});return($,R)=>({className:Ztt({theme:m,options:R,themeName:k,selector:$,classNamesPrefix:v,classNames:c,classes:r,unstyled:s,className:i,rootSelector:l,props:n,stylesCtx:o,withStaticClasses:w,headless:x,transformedStyles:_([R?.styles,d])}),style:trt({theme:m,themeName:k,selector:$,options:R,props:n,stylesCtx:o,rootSelector:l,styles:d,style:a,vars:u,varsResolver:p,headless:x,withStylesTransform:C}),...f?.[$]})}function nrt(e,r){return typeof e=="boolean"?e:r.autoContrast}function ze(e,r,n){const o=uo(),i=o.components[e]?.defaultProps,a=typeof i=="function"?i(o):i;return{...r,...a,...Vd(n)}}function Wz(e){return Ro(e).reduce((r,n)=>e[n]!==void 0?`${r}${qet(n)}:${e[n]};`:r,"").trim()}function ort({selector:e,styles:r,media:n,container:o}){const i=r?Wz(r):"",a=Array.isArray(n)?n.map(s=>`@media${s.query}{${e}{${Wz(s.styles)}}}`):[],l=Array.isArray(o)?o.map(s=>`@container ${s.query}{${e}{${Wz(s.styles)}}}`):[];return`${i?`${e}{${i}}`:""}${a.join("")}${l.join("")}`.trim()}function Vg(e){const r=$tt();return y.jsx("style",{"data-mantine-styles":"inline",nonce:r?.(),dangerouslySetInnerHTML:{__html:ort(e)}})}function Gz(e){const{m:r,mx:n,my:o,mt:i,mb:a,ml:l,mr:s,me:c,ms:d,p:u,px:p,py:f,pt:m,pb:v,pl:w,pr:x,pe:k,ps:C,bd:_,bdrs:$,bg:R,c:T,opacity:A,ff:z,fz:j,fw:I,lts:N,ta:L,lh:H,fs:P,tt:V,td:B,w:F,miw:q,maw:G,h:U,mih:Y,mah:K,bgsz:O,bgp:W,bgr:Z,bga:Q,pos:ie,top:te,left:re,bottom:ue,right:_e,inset:ce,display:pe,flex:xe,hiddenFrom:je,visibleFrom:Be,lightHidden:Je,darkHidden:st,sx:Le,...St}=e;return{styleProps:Vd({m:r,mx:n,my:o,mt:i,mb:a,ml:l,mr:s,me:c,ms:d,p:u,px:p,py:f,pt:m,pb:v,pl:w,pr:x,pe:k,ps:C,bd:_,bg:R,c:T,opacity:A,ff:z,fz:j,fw:I,lts:N,ta:L,lh:H,fs:P,tt:V,td:B,w:F,miw:q,maw:G,h:U,mih:Y,mah:K,bgsz:O,bgp:W,bgr:Z,bga:Q,pos:ie,top:te,left:re,bottom:ue,right:_e,inset:ce,display:pe,flex:xe,bdrs:$,hiddenFrom:je,visibleFrom:Be,lightHidden:Je,darkHidden:st,sx:Le}),rest:St}}const irt={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},ms:{type:"spacing",property:"marginInlineStart"},me:{type:"spacing",property:"marginInlineEnd"},mx:{type:"spacing",property:"marginInline"},my:{type:"spacing",property:"marginBlock"},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},ps:{type:"spacing",property:"paddingInlineStart"},pe:{type:"spacing",property:"paddingInlineEnd"},px:{type:"spacing",property:"paddingInline"},py:{type:"spacing",property:"paddingBlock"},bd:{type:"border",property:"border"},bdrs:{type:"radius",property:"borderRadius"},bg:{type:"color",property:"background"},c:{type:"textColor",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"fontFamily",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"lineHeight",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"size",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"},flex:{type:"identity",property:"flex"}};function Yz(e,r){const n=Bp({color:e,theme:r});return n.color==="dimmed"?"var(--mantine-color-dimmed)":n.color==="bright"?"var(--mantine-color-bright)":n.variable?`var(${n.variable})`:n.color}function art(e,r){const n=Bp({color:e,theme:r});return n.isThemeColor&&n.shade===void 0?`var(--mantine-color-${n.color}-text)`:Yz(e,r)}function lrt(e,r){if(typeof e=="number")return Ne(e);if(typeof e=="string"){const[n,o,...i]=e.split(" ").filter(l=>l.trim()!=="");let a=`${Ne(n)}`;return o&&(a+=` ${o}`),i.length>0&&(a+=` ${Yz(i.join(" "),r)}`),a.trim()}return e}const One={text:"var(--mantine-font-family)",mono:"var(--mantine-font-family-monospace)",monospace:"var(--mantine-font-family-monospace)",heading:"var(--mantine-font-family-headings)",headings:"var(--mantine-font-family-headings)"};function srt(e){return typeof e=="string"&&e in One?One[e]:e}const crt=["h1","h2","h3","h4","h5","h6"];function drt(e,r){return typeof e=="string"&&e in r.fontSizes?`var(--mantine-font-size-${e})`:typeof e=="string"&&crt.includes(e)?`var(--mantine-${e}-font-size)`:typeof e=="number"||typeof e=="string"?Ne(e):e}function urt(e){return e}const prt=["h1","h2","h3","h4","h5","h6"];function hrt(e,r){return typeof e=="string"&&e in r.lineHeights?`var(--mantine-line-height-${e})`:typeof e=="string"&&prt.includes(e)?`var(--mantine-${e}-line-height)`:e}function frt(e,r){return typeof e=="string"&&e in r.radius?`var(--mantine-radius-${e})`:typeof e=="number"||typeof e=="string"?Ne(e):e}function grt(e){return typeof e=="number"?Ne(e):e}function mrt(e,r){if(typeof e=="number")return Ne(e);if(typeof e=="string"){const n=e.replace("-","");if(!(n in r.spacing))return Ne(e);const o=`--mantine-spacing-${n}`;return e.startsWith("-")?`calc(var(${o}) * -1)`:`var(${o})`}return e}const Xz={color:Yz,textColor:art,fontSize:drt,spacing:mrt,radius:frt,identity:urt,size:grt,lineHeight:hrt,fontFamily:srt,border:lrt};function Lne(e){return e.replace("(min-width: ","").replace("em)","")}function yrt({media:e,...r}){const n=Object.keys(e).sort((o,i)=>Number(Lne(o))-Number(Lne(i))).map(o=>({query:o,styles:e[o]}));return{...r,media:n}}function vrt(e){if(typeof e!="object"||e===null)return!1;const r=Object.keys(e);return!(r.length===1&&r[0]==="base")}function brt(e){return typeof e=="object"&&e!==null?"base"in e?e.base:void 0:e}function xrt(e){return typeof e=="object"&&e!==null?Ro(e).filter(r=>r!=="base"):[]}function wrt(e,r){return typeof e=="object"&&e!==null&&r in e?e[r]:e}function Fne({styleProps:e,data:r,theme:n}){return yrt(Ro(e).reduce((o,i)=>{if(i==="hiddenFrom"||i==="visibleFrom"||i==="sx")return o;const a=r[i],l=Array.isArray(a.property)?a.property:[a.property],s=brt(e[i]);if(!vrt(e[i]))return l.forEach(d=>{o.inlineStyles[d]=Xz[a.type](s,n)}),o;o.hasResponsiveStyles=!0;const c=xrt(e[i]);return l.forEach(d=>{s!=null&&(o.styles[d]=Xz[a.type](s,n)),c.forEach(u=>{const p=`(min-width: ${n.breakpoints[u]})`;o.media[p]={...o.media[p],[d]:Xz[a.type](wrt(e[i],u),n)}})}),o},{hasResponsiveStyles:!1,styles:{},inlineStyles:{},media:{}}))}function P0(){return`__m__-${S.useId().replace(/[:«»]/g,"")}`}function Kz(e,r){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...Kz(o,r)}),{}):typeof e=="function"?e(r):e??{}}function Vne(e){return e.startsWith("data-")?e:`data-${e}`}function krt(e){return Object.keys(e).reduce((r,n)=>{const o=e[n];return o===void 0||o===""||o===!1||o===null||(r[Vne(n)]=e[n]),r},{})}function qne(e){return e?typeof e=="string"?{[Vne(e)]:!0}:Array.isArray(e)?[...e].reduce((r,n)=>({...r,...qne(n)}),{}):krt(e):null}function Zz(e,r){return Array.isArray(e)?[...e].reduce((n,o)=>({...n,...Zz(o,r)}),{}):typeof e=="function"?e(r):e??{}}function _rt({theme:e,style:r,vars:n,styleProps:o}){const i=Zz(r,e),a=Zz(n,e);return{...i,...a,...o}}const Hne=S.forwardRef(({component:e,style:r,__vars:n,className:o,variant:i,mod:a,size:l,hiddenFrom:s,visibleFrom:c,lightHidden:d,darkHidden:u,renderRoot:p,__size:f,...m},v)=>{const w=uo(),x=e||"div",{styleProps:k,rest:C}=Gz(m),_=Ttt()?.()?.(k.sx),$=P0(),R=Fne({styleProps:k,theme:w,data:irt}),T={ref:v,style:_rt({theme:w,style:r,vars:n,styleProps:R.inlineStyles}),className:no(o,_,{[$]:R.hasResponsiveStyles,"mantine-light-hidden":d,"mantine-dark-hidden":u,[`mantine-hidden-from-${s}`]:s,[`mantine-visible-from-${c}`]:c}),"data-variant":i,"data-size":_ne(l)?void 0:l||void 0,size:f,...qne(a),...C};return y.jsxs(y.Fragment,{children:[R.hasResponsiveStyles&&y.jsx(Vg,{selector:`.${$}`,styles:R.styles,media:R.media}),typeof p=="function"?p(T):y.jsx(x,{...T})]})});Hne.displayName="@mantine/core/Box";const Ae=Hne;function Une(e){return e}function We(e){const r=S.forwardRef(e);return r.extend=Une,r.withProps=n=>{const o=S.forwardRef((i,a)=>y.jsx(r,{...n,...i,ref:a}));return o.extend=r.extend,o.displayName=`WithProps(${r.displayName})`,o},r}function Un(e){const r=S.forwardRef(e);return r.withProps=n=>{const o=S.forwardRef((i,a)=>y.jsx(r,{...n,...i,ref:a}));return o.extend=r.extend,o.displayName=`WithProps(${r.displayName})`,o},r.extend=Une,r}const Srt=S.createContext({dir:"ltr",toggleDirection:()=>{},setDirection:()=>{}});function mc(){return S.useContext(Srt)}function Ert(e){if(!e||typeof e=="string")return 0;const r=e/36;return Math.round((4+15*r**.25+r/5)*10)}function Qz(e){return e?.current?e.current.scrollHeight:"auto"}const P4=typeof window<"u"&&window.requestAnimationFrame,Wne=0,Crt=e=>({height:0,overflow:"hidden",...e?{}:{display:"none"}});function $rt({transitionDuration:e,transitionTimingFunction:r="ease",onTransitionEnd:n=()=>{},opened:o,keepMounted:i=!1}){const a=S.useRef(null),l=Crt(i),[s,c]=S.useState(o?{}:l),d=v=>{Va.flushSync(()=>c(v))},u=v=>{d(w=>({...w,...v}))};function p(v){const w=e||Ert(v);return{transition:`height ${w}ms ${r}, opacity ${w}ms ${r}`}}Og(()=>{typeof P4=="function"&&P4(o?()=>{u({willChange:"height",display:"block",overflow:"hidden"}),P4(()=>{const v=Qz(a);u({...p(v),height:v})})}:()=>{const v=Qz(a);u({...p(v),willChange:"height",height:v}),P4(()=>u({height:Wne,overflow:"hidden"}))})},[o]);const f=v=>{if(!(v.target!==a.current||v.propertyName!=="height"))if(o){const w=Qz(a);w===s.height?d({}):u({height:w}),n()}else s.height===Wne&&(d(l),n())};function m({style:v={},refKey:w="ref",...x}={}){const k=x[w],C={"aria-hidden":!o,...x,[w]:Tne(a,k),onTransitionEnd:f,style:{boxSizing:"border-box",...v,...s}};return Zr.version.startsWith("18")?o||(C.inert=""):C.inert=!o,C}return m}const Rrt={transitionDuration:200,transitionTimingFunction:"ease",animateOpacity:!0},Gne=We((e,r)=>{const{children:n,in:o,transitionDuration:i,transitionTimingFunction:a,style:l,onTransitionEnd:s,animateOpacity:c,keepMounted:d,...u}=ze("Collapse",Rrt,e),p=uo(),f=Fz(),m=p.respectReducedMotion&&f?0:i,v=$rt({opened:o,transitionDuration:m,transitionTimingFunction:a,onTransitionEnd:s,keepMounted:d});return m===0?o?y.jsx(Ae,{...u,children:n}):null:y.jsx(Ae,{...v({style:{opacity:o||!c?1:0,transition:c?`opacity ${m}ms ${a}`:"none",...Kz(l,p)},ref:r,...u}),children:n})});Gne.displayName="@mantine/core/Collapse";function M4(){return typeof window<"u"}function qg(e){return Yne(e)?(e.nodeName||"").toLowerCase():"#document"}function si(e){var r;return(e==null||(r=e.ownerDocument)==null?void 0:r.defaultView)||window}function ss(e){var r;return(r=(Yne(e)?e.ownerDocument:e.document)||window.document)==null?void 0:r.documentElement}function Yne(e){return M4()?e instanceof Node||e instanceof si(e).Node:!1}function Pr(e){return M4()?e instanceof Element||e instanceof si(e).Element:!1}function Pi(e){return M4()?e instanceof HTMLElement||e instanceof si(e).HTMLElement:!1}function Jz(e){return!M4()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof si(e).ShadowRoot}const zrt=new Set(["inline","contents"]);function M0(e){const{overflow:r,overflowX:n,overflowY:o,display:i}=_a(e);return/auto|scroll|overlay|hidden|clip/.test(r+o+n)&&!zrt.has(i)}const Trt=new Set(["table","td","th"]);function jrt(e){return Trt.has(qg(e))}const Art=[":popover-open",":modal"];function N4(e){return Art.some(r=>{try{return e.matches(r)}catch{return!1}})}const Drt=["transform","translate","scale","rotate","perspective"],Prt=["transform","translate","scale","rotate","perspective","filter"],Mrt=["paint","layout","strict","content"];function eT(e){const r=B4(),n=Pr(e)?_a(e):e;return Drt.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!r&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!r&&(n.filter?n.filter!=="none":!1)||Prt.some(o=>(n.willChange||"").includes(o))||Mrt.some(o=>(n.contain||"").includes(o))}function Nrt(e){let r=vc(e);for(;Pi(r)&&!yc(r);){if(eT(r))return r;if(N4(r))return null;r=vc(r)}return null}function B4(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Brt=new Set(["html","body","#document"]);function yc(e){return Brt.has(qg(e))}function _a(e){return si(e).getComputedStyle(e)}function I4(e){return Pr(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function vc(e){if(qg(e)==="html")return e;const r=e.assignedSlot||e.parentNode||Jz(e)&&e.host||ss(e);return Jz(r)?r.host:r}function Xne(e){const r=vc(e);return yc(r)?e.ownerDocument?e.ownerDocument.body:e.body:Pi(r)&&M0(r)?r:Xne(r)}function bc(e,r,n){var o;r===void 0&&(r=[]),n===void 0&&(n=!0);const i=Xne(e),a=i===((o=e.ownerDocument)==null?void 0:o.body),l=si(i);if(a){const s=tT(l);return r.concat(l,l.visualViewport||[],M0(i)?i:[],s&&n?bc(s):[])}return r.concat(i,bc(i,[],n))}function tT(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const Irt=["top","right","bottom","left"],xl=Math.min,To=Math.max,O4=Math.round,L4=Math.floor,cs=e=>({x:e,y:e}),Ort={left:"right",right:"left",bottom:"top",top:"bottom"},Lrt={start:"end",end:"start"};function rT(e,r,n){return To(e,xl(r,n))}function ds(e,r){return typeof e=="function"?e(r):e}function wl(e){return e.split("-")[0]}function Hg(e){return e.split("-")[1]}function nT(e){return e==="x"?"y":"x"}function oT(e){return e==="y"?"height":"width"}const Frt=new Set(["top","bottom"]);function kl(e){return Frt.has(wl(e))?"y":"x"}function iT(e){return nT(kl(e))}function Vrt(e,r,n){n===void 0&&(n=!1);const o=Hg(e),i=iT(e),a=oT(i);let l=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return r.reference[a]>r.floating[a]&&(l=F4(l)),[l,F4(l)]}function qrt(e){const r=F4(e);return[aT(e),r,aT(r)]}function aT(e){return e.replace(/start|end/g,r=>Lrt[r])}const Kne=["left","right"],Zne=["right","left"],Hrt=["top","bottom"],Urt=["bottom","top"];function Wrt(e,r,n){switch(e){case"top":case"bottom":return n?r?Zne:Kne:r?Kne:Zne;case"left":case"right":return r?Hrt:Urt;default:return[]}}function Grt(e,r,n,o){const i=Hg(e);let a=Wrt(wl(e),n==="start",o);return i&&(a=a.map(l=>l+"-"+i),r&&(a=a.concat(a.map(aT)))),a}function F4(e){return e.replace(/left|right|bottom|top/g,r=>Ort[r])}function Yrt(e){return{top:0,right:0,bottom:0,left:0,...e}}function lT(e){return typeof e!="number"?Yrt(e):{top:e,right:e,bottom:e,left:e}}function Ug(e){const{x:r,y:n,width:o,height:i}=e;return{width:o,height:i,top:n,left:r,right:r+o,bottom:n+i,x:r,y:n}}function Xrt(){const e=navigator.userAgentData;return e!=null&&e.platform?e.platform:navigator.platform}function Krt(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(r=>{let{brand:n,version:o}=r;return n+"/"+o}).join(" "):navigator.userAgent}function Zrt(){return/apple/i.test(navigator.vendor)}function Qrt(){return Xrt().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function Jrt(){return Krt().includes("jsdom/")}const Qne="data-floating-ui-focusable",ent="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";function Jne(e){let r=e.activeElement;for(;((n=r)==null||(n=n.shadowRoot)==null?void 0:n.activeElement)!=null;){var n;r=r.shadowRoot.activeElement}return r}function N0(e,r){if(!e||!r)return!1;const n=r.getRootNode==null?void 0:r.getRootNode();if(e.contains(r))return!0;if(n&&Jz(n)){let o=r;for(;o;){if(e===o)return!0;o=o.parentNode||o.host}}return!1}function Wg(e){return"composedPath"in e?e.composedPath()[0]:e.target}function sT(e,r){if(r==null)return!1;if("composedPath"in e)return e.composedPath().includes(r);const n=e;return n.target!=null&&r.contains(n.target)}function tnt(e){return e.matches("html,body")}function Ip(e){return e?.ownerDocument||document}function rnt(e){return Pi(e)&&e.matches(ent)}function nnt(e){if(!e||Jrt())return!0;try{return e.matches(":focus-visible")}catch{return!0}}function ont(e){return e?e.hasAttribute(Qne)?e:e.querySelector("["+Qne+"]")||e:null}function V4(e,r,n){return n===void 0&&(n=!0),e.filter(o=>{var i;return o.parentId===r&&(!n||((i=o.context)==null?void 0:i.open))}).flatMap(o=>[o,...V4(e,o.id,n)])}function int(e){return"nativeEvent"in e}function cT(e,r){const n=["mouse","pen"];return n.push("",void 0),n.includes(e)}var ant=typeof document<"u",lnt=function(){},us=ant?S.useLayoutEffect:lnt;const snt={...mb};function q4(e){const r=S.useRef(e);return us(()=>{r.current=e}),r}const cnt=snt.useInsertionEffect,dnt=cnt||(e=>e());function ps(e){const r=S.useRef(()=>{});return dnt(()=>{r.current=e}),S.useCallback(function(){for(var n=arguments.length,o=new Array(n),i=0;i{const{placement:o="bottom",strategy:i="absolute",middleware:a=[],platform:l}=n,s=a.filter(Boolean),c=await(l.isRTL==null?void 0:l.isRTL(r));let d=await l.getElementRects({reference:e,floating:r,strategy:i}),{x:u,y:p}=eoe(d,o,c),f=o,m={},v=0;for(let w=0;w({name:"arrow",options:e,async fn(r){const{x:n,y:o,placement:i,rects:a,platform:l,elements:s,middlewareData:c}=r,{element:d,padding:u=0}=ds(e,r)||{};if(d==null)return{};const p=lT(u),f={x:n,y:o},m=iT(i),v=oT(m),w=await l.getDimensions(d),x=m==="y",k=x?"top":"left",C=x?"bottom":"right",_=x?"clientHeight":"clientWidth",$=a.reference[v]+a.reference[m]-f[m]-a.floating[v],R=f[m]-a.reference[m],T=await(l.getOffsetParent==null?void 0:l.getOffsetParent(d));let A=T?T[_]:0;(!A||!await(l.isElement==null?void 0:l.isElement(T)))&&(A=s.floating[_]||a.floating[v]);const z=$/2-R/2,j=A/2-w[v]/2-1,I=xl(p[k],j),N=xl(p[C],j),L=I,H=A-w[v]-N,P=A/2-w[v]/2+z,V=rT(L,P,H),B=!c.arrow&&Hg(i)!=null&&P!==V&&a.reference[v]/2-(PP<=0)){var N,L;const P=(((N=a.flip)==null?void 0:N.index)||0)+1,V=A[P];if(V&&(!(p==="alignment"&&C!==kl(V))||I.every(F=>kl(F.placement)===C?F.overflows[0]>0:!0)))return{data:{index:P,overflows:I},reset:{placement:V}};let B=(L=I.filter(F=>F.overflows[0]<=0).sort((F,q)=>F.overflows[1]-q.overflows[1])[0])==null?void 0:L.placement;if(!B)switch(m){case"bestFit":{var H;const F=(H=I.filter(q=>{if(T){const G=kl(q.placement);return G===C||G==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(G=>G>0).reduce((G,U)=>G+U,0)]).sort((q,G)=>q[1]-G[1])[0])==null?void 0:H[0];F&&(B=F);break}case"initialPlacement":B=s;break}if(i!==B)return{reset:{placement:B}}}return{}}}};function toe(e,r){return{top:e.top-r.height,right:e.right-r.width,bottom:e.bottom-r.height,left:e.left-r.width}}function roe(e){return Irt.some(r=>e[r]>=0)}const fnt=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(r){const{rects:n}=r,{strategy:o="referenceHidden",...i}=ds(e,r);switch(o){case"referenceHidden":{const a=await B0(r,{...i,elementContext:"reference"}),l=toe(a,n.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:roe(l)}}}case"escaped":{const a=await B0(r,{...i,altBoundary:!0}),l=toe(a,n.floating);return{data:{escapedOffsets:l,escaped:roe(l)}}}default:return{}}}}};function noe(e){const r=xl(...e.map(a=>a.left)),n=xl(...e.map(a=>a.top)),o=To(...e.map(a=>a.right)),i=To(...e.map(a=>a.bottom));return{x:r,y:n,width:o-r,height:i-n}}function gnt(e){const r=e.slice().sort((i,a)=>i.y-a.y),n=[];let o=null;for(let i=0;io.height/2?n.push([a]):n[n.length-1].push(a),o=a}return n.map(i=>Ug(noe(i)))}const mnt=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(r){const{placement:n,elements:o,rects:i,platform:a,strategy:l}=r,{padding:s=2,x:c,y:d}=ds(e,r),u=Array.from(await(a.getClientRects==null?void 0:a.getClientRects(o.reference))||[]),p=gnt(u),f=Ug(noe(u)),m=lT(s);function v(){if(p.length===2&&p[0].left>p[1].right&&c!=null&&d!=null)return p.find(x=>c>x.left-m.left&&cx.top-m.top&&d=2){if(kl(n)==="y"){const I=p[0],N=p[p.length-1],L=wl(n)==="top",H=I.top,P=N.bottom,V=L?I.left:N.left,B=L?I.right:N.right,F=B-V,q=P-H;return{top:H,bottom:P,left:V,right:B,width:F,height:q,x:V,y:H}}const x=wl(n)==="left",k=To(...p.map(I=>I.right)),C=xl(...p.map(I=>I.left)),_=p.filter(I=>x?I.left===C:I.right===k),$=_[0].top,R=_[_.length-1].bottom,T=C,A=k,z=A-T,j=R-$;return{top:$,bottom:R,left:T,right:A,width:z,height:j,x:T,y:$}}return f}const w=await a.getElementRects({reference:{getBoundingClientRect:v},floating:o.floating,strategy:l});return i.reference.x!==w.reference.x||i.reference.y!==w.reference.y||i.reference.width!==w.reference.width||i.reference.height!==w.reference.height?{reset:{rects:w}}:{}}}},ooe=new Set(["left","top"]);async function ynt(e,r){const{placement:n,platform:o,elements:i}=e,a=await(o.isRTL==null?void 0:o.isRTL(i.floating)),l=wl(n),s=Hg(n),c=kl(n)==="y",d=ooe.has(l)?-1:1,u=a&&c?-1:1,p=ds(r,e);let{mainAxis:f,crossAxis:m,alignmentAxis:v}=typeof p=="number"?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return s&&typeof v=="number"&&(m=s==="end"?v*-1:v),c?{x:m*u,y:f*d}:{x:f*d,y:m*u}}const vnt=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(r){var n,o;const{x:i,y:a,placement:l,middlewareData:s}=r,c=await ynt(r,e);return l===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:i+c.x,y:a+c.y,data:{...c,placement:l}}}}},bnt=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(r){const{x:n,y:o,placement:i}=r,{mainAxis:a=!0,crossAxis:l=!1,limiter:s={fn:x=>{let{x:k,y:C}=x;return{x:k,y:C}}},...c}=ds(e,r),d={x:n,y:o},u=await B0(r,c),p=kl(wl(i)),f=nT(p);let m=d[f],v=d[p];if(a){const x=f==="y"?"top":"left",k=f==="y"?"bottom":"right",C=m+u[x],_=m-u[k];m=rT(C,m,_)}if(l){const x=p==="y"?"top":"left",k=p==="y"?"bottom":"right",C=v+u[x],_=v-u[k];v=rT(C,v,_)}const w=s.fn({...r,[f]:m,[p]:v});return{...w,data:{x:w.x-n,y:w.y-o,enabled:{[f]:a,[p]:l}}}}}},xnt=function(e){return e===void 0&&(e={}),{options:e,fn(r){const{x:n,y:o,placement:i,rects:a,middlewareData:l}=r,{offset:s=0,mainAxis:c=!0,crossAxis:d=!0}=ds(e,r),u={x:n,y:o},p=kl(i),f=nT(p);let m=u[f],v=u[p];const w=ds(s,r),x=typeof w=="number"?{mainAxis:w,crossAxis:0}:{mainAxis:0,crossAxis:0,...w};if(c){const _=f==="y"?"height":"width",$=a.reference[f]-a.floating[_]+x.mainAxis,R=a.reference[f]+a.reference[_]-x.mainAxis;m<$?m=$:m>R&&(m=R)}if(d){var k,C;const _=f==="y"?"width":"height",$=ooe.has(wl(i)),R=a.reference[p]-a.floating[_]+($&&((k=l.offset)==null?void 0:k[p])||0)+($?0:x.crossAxis),T=a.reference[p]+a.reference[_]+($?0:((C=l.offset)==null?void 0:C[p])||0)-($?x.crossAxis:0);vT&&(v=T)}return{[f]:m,[p]:v}}}},wnt=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(r){var n,o;const{placement:i,rects:a,platform:l,elements:s}=r,{apply:c=()=>{},...d}=ds(e,r),u=await B0(r,d),p=wl(i),f=Hg(i),m=kl(i)==="y",{width:v,height:w}=a.floating;let x,k;p==="top"||p==="bottom"?(x=p,k=f===(await(l.isRTL==null?void 0:l.isRTL(s.floating))?"start":"end")?"left":"right"):(k=p,x=f==="end"?"top":"bottom");const C=w-u.top-u.bottom,_=v-u.left-u.right,$=xl(w-u[x],C),R=xl(v-u[k],_),T=!r.middlewareData.shift;let A=$,z=R;if((n=r.middlewareData.shift)!=null&&n.enabled.x&&(z=_),(o=r.middlewareData.shift)!=null&&o.enabled.y&&(A=C),T&&!f){const I=To(u.left,0),N=To(u.right,0),L=To(u.top,0),H=To(u.bottom,0);m?z=v-2*(I!==0||N!==0?I+N:To(u.left,u.right)):A=w-2*(L!==0||H!==0?L+H:To(u.top,u.bottom))}await c({...r,availableWidth:z,availableHeight:A});const j=await l.getDimensions(s.floating);return v!==j.width||w!==j.height?{reset:{rects:!0}}:{}}}};function ioe(e){const r=_a(e);let n=parseFloat(r.width)||0,o=parseFloat(r.height)||0;const i=Pi(e),a=i?e.offsetWidth:n,l=i?e.offsetHeight:o,s=O4(n)!==a||O4(o)!==l;return s&&(n=a,o=l),{width:n,height:o,$:s}}function dT(e){return Pr(e)?e:e.contextElement}function Gg(e){const r=dT(e);if(!Pi(r))return cs(1);const n=r.getBoundingClientRect(),{width:o,height:i,$:a}=ioe(r);let l=(a?O4(n.width):n.width)/o,s=(a?O4(n.height):n.height)/i;return(!l||!Number.isFinite(l))&&(l=1),(!s||!Number.isFinite(s))&&(s=1),{x:l,y:s}}const knt=cs(0);function aoe(e){const r=si(e);return!B4()||!r.visualViewport?knt:{x:r.visualViewport.offsetLeft,y:r.visualViewport.offsetTop}}function _nt(e,r,n){return r===void 0&&(r=!1),!n||r&&n!==si(e)?!1:r}function Op(e,r,n,o){r===void 0&&(r=!1),n===void 0&&(n=!1);const i=e.getBoundingClientRect(),a=dT(e);let l=cs(1);r&&(o?Pr(o)&&(l=Gg(o)):l=Gg(e));const s=_nt(a,n,o)?aoe(a):cs(0);let c=(i.left+s.x)/l.x,d=(i.top+s.y)/l.y,u=i.width/l.x,p=i.height/l.y;if(a){const f=si(a),m=o&&Pr(o)?si(o):o;let v=f,w=tT(v);for(;w&&o&&m!==v;){const x=Gg(w),k=w.getBoundingClientRect(),C=_a(w),_=k.left+(w.clientLeft+parseFloat(C.paddingLeft))*x.x,$=k.top+(w.clientTop+parseFloat(C.paddingTop))*x.y;c*=x.x,d*=x.y,u*=x.x,p*=x.y,c+=_,d+=$,v=si(w),w=tT(v)}}return Ug({width:u,height:p,x:c,y:d})}function H4(e,r){const n=I4(e).scrollLeft;return r?r.left+n:Op(ss(e)).left+n}function loe(e,r){const n=e.getBoundingClientRect(),o=n.left+r.scrollLeft-H4(e,n),i=n.top+r.scrollTop;return{x:o,y:i}}function Snt(e){let{elements:r,rect:n,offsetParent:o,strategy:i}=e;const a=i==="fixed",l=ss(o),s=r?N4(r.floating):!1;if(o===l||s&&a)return n;let c={scrollLeft:0,scrollTop:0},d=cs(1);const u=cs(0),p=Pi(o);if((p||!p&&!a)&&((qg(o)!=="body"||M0(l))&&(c=I4(o)),Pi(o))){const m=Op(o);d=Gg(o),u.x=m.x+o.clientLeft,u.y=m.y+o.clientTop}const f=l&&!p&&!a?loe(l,c):cs(0);return{width:n.width*d.x,height:n.height*d.y,x:n.x*d.x-c.scrollLeft*d.x+u.x+f.x,y:n.y*d.y-c.scrollTop*d.y+u.y+f.y}}function Ent(e){return Array.from(e.getClientRects())}function Cnt(e){const r=ss(e),n=I4(e),o=e.ownerDocument.body,i=To(r.scrollWidth,r.clientWidth,o.scrollWidth,o.clientWidth),a=To(r.scrollHeight,r.clientHeight,o.scrollHeight,o.clientHeight);let l=-n.scrollLeft+H4(e);const s=-n.scrollTop;return _a(o).direction==="rtl"&&(l+=To(r.clientWidth,o.clientWidth)-i),{width:i,height:a,x:l,y:s}}const soe=25;function $nt(e,r){const n=si(e),o=ss(e),i=n.visualViewport;let a=o.clientWidth,l=o.clientHeight,s=0,c=0;if(i){a=i.width,l=i.height;const u=B4();(!u||u&&r==="fixed")&&(s=i.offsetLeft,c=i.offsetTop)}const d=H4(o);if(d<=0){const u=o.ownerDocument,p=u.body,f=getComputedStyle(p),m=u.compatMode==="CSS1Compat"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,v=Math.abs(o.clientWidth-p.clientWidth-m);v<=soe&&(a-=v)}else d<=soe&&(a+=d);return{width:a,height:l,x:s,y:c}}const Rnt=new Set(["absolute","fixed"]);function znt(e,r){const n=Op(e,!0,r==="fixed"),o=n.top+e.clientTop,i=n.left+e.clientLeft,a=Pi(e)?Gg(e):cs(1),l=e.clientWidth*a.x,s=e.clientHeight*a.y,c=i*a.x,d=o*a.y;return{width:l,height:s,x:c,y:d}}function coe(e,r,n){let o;if(r==="viewport")o=$nt(e,n);else if(r==="document")o=Cnt(ss(e));else if(Pr(r))o=znt(r,n);else{const i=aoe(e);o={x:r.x-i.x,y:r.y-i.y,width:r.width,height:r.height}}return Ug(o)}function doe(e,r){const n=vc(e);return n===r||!Pr(n)||yc(n)?!1:_a(n).position==="fixed"||doe(n,r)}function Tnt(e,r){const n=r.get(e);if(n)return n;let o=bc(e,[],!1).filter(s=>Pr(s)&&qg(s)!=="body"),i=null;const a=_a(e).position==="fixed";let l=a?vc(e):e;for(;Pr(l)&&!yc(l);){const s=_a(l),c=eT(l);!c&&s.position==="fixed"&&(i=null),(a?!c&&!i:!c&&s.position==="static"&&i&&Rnt.has(i.position)||M0(l)&&!c&&doe(e,l))?o=o.filter(d=>d!==l):i=s,l=vc(l)}return r.set(e,o),o}function jnt(e){let{element:r,boundary:n,rootBoundary:o,strategy:i}=e;const a=[...n==="clippingAncestors"?N4(r)?[]:Tnt(r,this._c):[].concat(n),o],l=a[0],s=a.reduce((c,d)=>{const u=coe(r,d,i);return c.top=To(u.top,c.top),c.right=xl(u.right,c.right),c.bottom=xl(u.bottom,c.bottom),c.left=To(u.left,c.left),c},coe(r,l,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}}function Ant(e){const{width:r,height:n}=ioe(e);return{width:r,height:n}}function Dnt(e,r,n){const o=Pi(r),i=ss(r),a=n==="fixed",l=Op(e,!0,a,r);let s={scrollLeft:0,scrollTop:0};const c=cs(0);function d(){c.x=H4(i)}if(o||!o&&!a)if((qg(r)!=="body"||M0(i))&&(s=I4(r)),o){const m=Op(r,!0,a,r);c.x=m.x+r.clientLeft,c.y=m.y+r.clientTop}else i&&d();a&&!o&&i&&d();const u=i&&!o&&!a?loe(i,s):cs(0),p=l.left+s.scrollLeft-c.x-u.x,f=l.top+s.scrollTop-c.y-u.y;return{x:p,y:f,width:l.width,height:l.height}}function uT(e){return _a(e).position==="static"}function uoe(e,r){if(!Pi(e)||_a(e).position==="fixed")return null;if(r)return r(e);let n=e.offsetParent;return ss(e)===n&&(n=n.ownerDocument.body),n}function poe(e,r){const n=si(e);if(N4(e))return n;if(!Pi(e)){let i=vc(e);for(;i&&!yc(i);){if(Pr(i)&&!uT(i))return i;i=vc(i)}return n}let o=uoe(e,r);for(;o&&jrt(o)&&uT(o);)o=uoe(o,r);return o&&yc(o)&&uT(o)&&!eT(o)?n:o||Nrt(e)||n}const Pnt=async function(e){const r=this.getOffsetParent||poe,n=this.getDimensions,o=await n(e.floating);return{reference:Dnt(e.reference,await r(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Mnt(e){return _a(e).direction==="rtl"}const Nnt={convertOffsetParentRelativeRectToViewportRelativeRect:Snt,getDocumentElement:ss,getClippingRect:jnt,getOffsetParent:poe,getElementRects:Pnt,getClientRects:Ent,getDimensions:Ant,getScale:Gg,isElement:Pr,isRTL:Mnt};function hoe(e,r){return e.x===r.x&&e.y===r.y&&e.width===r.width&&e.height===r.height}function Bnt(e,r){let n=null,o;const i=ss(e);function a(){var s;clearTimeout(o),(s=n)==null||s.disconnect(),n=null}function l(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();const d=e.getBoundingClientRect(),{left:u,top:p,width:f,height:m}=d;if(s||r(),!f||!m)return;const v=L4(p),w=L4(i.clientWidth-(u+f)),x=L4(i.clientHeight-(p+m)),k=L4(u),C={rootMargin:-v+"px "+-w+"px "+-x+"px "+-k+"px",threshold:To(0,xl(1,c))||1};let _=!0;function $(R){const T=R[0].intersectionRatio;if(T!==c){if(!_)return l();T?l(!1,T):o=setTimeout(()=>{l(!1,1e-7)},1e3)}T===1&&!hoe(d,e.getBoundingClientRect())&&l(),_=!1}try{n=new IntersectionObserver($,{...C,root:i.ownerDocument})}catch{n=new IntersectionObserver($,C)}n.observe(e)}return l(!0),a}function pT(e,r,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,d=dT(e),u=i||a?[...d?bc(d):[],...bc(r)]:[];u.forEach(k=>{i&&k.addEventListener("scroll",n,{passive:!0}),a&&k.addEventListener("resize",n)});const p=d&&s?Bnt(d,n):null;let f=-1,m=null;l&&(m=new ResizeObserver(k=>{let[C]=k;C&&C.target===d&&m&&(m.unobserve(r),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var _;(_=m)==null||_.observe(r)})),n()}),d&&!c&&m.observe(d),m.observe(r));let v,w=c?Op(e):null;c&&x();function x(){const k=Op(e);w&&!hoe(w,k)&&n(),w=k,v=requestAnimationFrame(x)}return n(),()=>{var k;u.forEach(C=>{i&&C.removeEventListener("scroll",n),a&&C.removeEventListener("resize",n)}),p?.(),(k=m)==null||k.disconnect(),m=null,c&&cancelAnimationFrame(v)}}const Int=vnt,Ont=bnt,Lnt=hnt,Fnt=wnt,Vnt=fnt,foe=pnt,qnt=mnt,Hnt=xnt,Unt=(e,r,n)=>{const o=new Map,i={platform:Nnt,...n},a={...i.platform,_c:o};return unt(e,r,{...i,platform:a})};var Wnt=typeof document<"u",Gnt=function(){},U4=Wnt?S.useLayoutEffect:Gnt;function W4(e,r){if(e===r)return!0;if(typeof e!=typeof r)return!1;if(typeof e=="function"&&e.toString()===r.toString())return!0;let n,o,i;if(e&&r&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==r.length)return!1;for(o=n;o--!==0;)if(!W4(e[o],r[o]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(r,i[o]))return!1;for(o=n;o--!==0;){const a=i[o];if(!(a==="_owner"&&e.$$typeof)&&!W4(e[a],r[a]))return!1}return!0}return e!==e&&r!==r}function goe(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function moe(e,r){const n=goe(e);return Math.round(r*n)/n}function hT(e){const r=S.useRef(e);return U4(()=>{r.current=e}),r}function Ynt(e){e===void 0&&(e={});const{placement:r="bottom",strategy:n="absolute",middleware:o=[],platform:i,elements:{reference:a,floating:l}={},transform:s=!0,whileElementsMounted:c,open:d}=e,[u,p]=S.useState({x:0,y:0,strategy:n,placement:r,middlewareData:{},isPositioned:!1}),[f,m]=S.useState(o);W4(f,o)||m(o);const[v,w]=S.useState(null),[x,k]=S.useState(null),C=S.useCallback(q=>{q!==T.current&&(T.current=q,w(q))},[]),_=S.useCallback(q=>{q!==A.current&&(A.current=q,k(q))},[]),$=a||v,R=l||x,T=S.useRef(null),A=S.useRef(null),z=S.useRef(u),j=c!=null,I=hT(c),N=hT(i),L=hT(d),H=S.useCallback(()=>{if(!T.current||!A.current)return;const q={placement:r,strategy:n,middleware:f};N.current&&(q.platform=N.current),Unt(T.current,A.current,q).then(G=>{const U={...G,isPositioned:L.current!==!1};P.current&&!W4(z.current,U)&&(z.current=U,Va.flushSync(()=>{p(U)}))})},[f,r,n,N,L]);U4(()=>{d===!1&&z.current.isPositioned&&(z.current.isPositioned=!1,p(q=>({...q,isPositioned:!1})))},[d]);const P=S.useRef(!1);U4(()=>(P.current=!0,()=>{P.current=!1}),[]),U4(()=>{if($&&(T.current=$),R&&(A.current=R),$&&R){if(I.current)return I.current($,R,H);H()}},[$,R,H,I,j]);const V=S.useMemo(()=>({reference:T,floating:A,setReference:C,setFloating:_}),[C,_]),B=S.useMemo(()=>({reference:$,floating:R}),[$,R]),F=S.useMemo(()=>{const q={position:n,left:0,top:0};if(!B.floating)return q;const G=moe(B.floating,u.x),U=moe(B.floating,u.y);return s?{...q,transform:"translate("+G+"px, "+U+"px)",...goe(B.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:G,top:U}},[n,s,B.floating,u.x,u.y]);return S.useMemo(()=>({...u,update:H,refs:V,elements:B,floatingStyles:F}),[u,H,V,B,F])}const Xnt=e=>{function r(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:o,padding:i}=typeof e=="function"?e(n):e;return o&&r(o)?o.current!=null?foe({element:o.current,padding:i}).fn(n):{}:o?foe({element:o,padding:i}).fn(n):{}}}},yoe=(e,r)=>({...Int(e),options:[e,r]}),fT=(e,r)=>({...Ont(e),options:[e,r]}),voe=(e,r)=>({...Hnt(e),options:[e,r]}),G4=(e,r)=>({...Lnt(e),options:[e,r]}),Knt=(e,r)=>({...Fnt(e),options:[e,r]}),Znt=(e,r)=>({...Vnt(e),options:[e,r]}),I0=(e,r)=>({...qnt(e),options:[e,r]}),boe=(e,r)=>({...Xnt(e),options:[e,r]});function xoe(e){const r=S.useRef(void 0),n=S.useCallback(o=>{const i=e.map(a=>{if(a!=null){if(typeof a=="function"){const l=a,s=l(o);return typeof s=="function"?s:()=>{l(null)}}return a.current=o,()=>{a.current=null}}});return()=>{i.forEach(a=>a?.())}},e);return S.useMemo(()=>e.every(o=>o==null)?null:o=>{r.current&&(r.current(),r.current=void 0),o!=null&&(r.current=n(o))},e)}const Qnt="data-floating-ui-focusable",woe="active",koe="selected",Jnt={...mb};let _oe=!1,eot=0;const Soe=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+eot++;function tot(){const[e,r]=S.useState(()=>_oe?Soe():void 0);return us(()=>{e==null&&r(Soe())},[]),S.useEffect(()=>{_oe=!0},[]),e}const rot=Jnt.useId,Eoe=rot||tot;function not(){const e=new Map;return{emit(r,n){var o;(o=e.get(r))==null||o.forEach(i=>i(n))},on(r,n){e.has(r)||e.set(r,new Set),e.get(r).add(n)},off(r,n){var o;(o=e.get(r))==null||o.delete(n)}}}const oot=S.createContext(null),iot=S.createContext(null),gT=()=>{var e;return((e=S.useContext(oot))==null?void 0:e.id)||null},mT=()=>S.useContext(iot);function yT(e){return"data-floating-ui-"+e}function Sa(e){e.current!==-1&&(clearTimeout(e.current),e.current=-1)}const Coe=yT("safe-polygon");function Y4(e,r,n){if(n&&!cT(n))return 0;if(typeof e=="number")return e;if(typeof e=="function"){const o=e();return typeof o=="number"?o:o?.[r]}return e?.[r]}function vT(e){return typeof e=="function"?e():e}function aot(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,dataRef:i,events:a,elements:l}=e,{enabled:s=!0,delay:c=0,handleClose:d=null,mouseOnly:u=!1,restMs:p=0,move:f=!0}=r,m=mT(),v=gT(),w=q4(d),x=q4(c),k=q4(n),C=q4(p),_=S.useRef(),$=S.useRef(-1),R=S.useRef(),T=S.useRef(-1),A=S.useRef(!0),z=S.useRef(!1),j=S.useRef(()=>{}),I=S.useRef(!1),N=ps(()=>{var F;const q=(F=i.current.openEvent)==null?void 0:F.type;return q?.includes("mouse")&&q!=="mousedown"});S.useEffect(()=>{if(!s)return;function F(q){let{open:G}=q;G||(Sa($),Sa(T),A.current=!0,I.current=!1)}return a.on("openchange",F),()=>{a.off("openchange",F)}},[s,a]),S.useEffect(()=>{if(!s||!w.current||!n)return;function F(G){N()&&o(!1,G,"hover")}const q=Ip(l.floating).documentElement;return q.addEventListener("mouseleave",F),()=>{q.removeEventListener("mouseleave",F)}},[l.floating,n,o,s,w,N]);const L=S.useCallback(function(F,q,G){q===void 0&&(q=!0),G===void 0&&(G="hover");const U=Y4(x.current,"close",_.current);U&&!R.current?(Sa($),$.current=window.setTimeout(()=>o(!1,F,G),U)):q&&(Sa($),o(!1,F,G))},[x,o]),H=ps(()=>{j.current(),R.current=void 0}),P=ps(()=>{if(z.current){const F=Ip(l.floating).body;F.style.pointerEvents="",F.removeAttribute(Coe),z.current=!1}}),V=ps(()=>i.current.openEvent?["click","mousedown"].includes(i.current.openEvent.type):!1);S.useEffect(()=>{if(!s)return;function F(K){if(Sa($),A.current=!1,u&&!cT(_.current)||vT(C.current)>0&&!Y4(x.current,"open"))return;const O=Y4(x.current,"open",_.current);O?$.current=window.setTimeout(()=>{k.current||o(!0,K,"hover")},O):n||o(!0,K,"hover")}function q(K){if(V()){P();return}j.current();const O=Ip(l.floating);if(Sa(T),I.current=!1,w.current&&i.current.floatingContext){n||Sa($),R.current=w.current({...i.current.floatingContext,tree:m,x:K.clientX,y:K.clientY,onClose(){P(),H(),V()||L(K,!0,"safe-polygon")}});const W=R.current;O.addEventListener("mousemove",W),j.current=()=>{O.removeEventListener("mousemove",W)};return}(_.current!=="touch"||!N0(l.floating,K.relatedTarget))&&L(K)}function G(K){V()||i.current.floatingContext&&(w.current==null||w.current({...i.current.floatingContext,tree:m,x:K.clientX,y:K.clientY,onClose(){P(),H(),V()||L(K)}})(K))}function U(){Sa($)}function Y(K){V()||L(K,!1)}if(Pr(l.domReference)){const K=l.domReference,O=l.floating;return n&&K.addEventListener("mouseleave",G),f&&K.addEventListener("mousemove",F,{once:!0}),K.addEventListener("mouseenter",F),K.addEventListener("mouseleave",q),O&&(O.addEventListener("mouseleave",G),O.addEventListener("mouseenter",U),O.addEventListener("mouseleave",Y)),()=>{n&&K.removeEventListener("mouseleave",G),f&&K.removeEventListener("mousemove",F),K.removeEventListener("mouseenter",F),K.removeEventListener("mouseleave",q),O&&(O.removeEventListener("mouseleave",G),O.removeEventListener("mouseenter",U),O.removeEventListener("mouseleave",Y))}}},[l,s,e,u,f,L,H,P,o,n,k,m,x,w,i,V,C]),us(()=>{var F;if(s&&n&&(F=w.current)!=null&&(F=F.__options)!=null&&F.blockPointerEvents&&N()){z.current=!0;const G=l.floating;if(Pr(l.domReference)&&G){var q;const U=Ip(l.floating).body;U.setAttribute(Coe,"");const Y=l.domReference,K=m==null||(q=m.nodesRef.current.find(O=>O.id===v))==null||(q=q.context)==null?void 0:q.elements.floating;return K&&(K.style.pointerEvents=""),U.style.pointerEvents="none",Y.style.pointerEvents="auto",G.style.pointerEvents="auto",()=>{U.style.pointerEvents="",Y.style.pointerEvents="",G.style.pointerEvents=""}}}},[s,n,v,l,m,w,N]),us(()=>{n||(_.current=void 0,I.current=!1,H(),P())},[n,H,P]),S.useEffect(()=>()=>{H(),Sa($),Sa(T),P()},[s,l.domReference,H,P]);const B=S.useMemo(()=>{function F(q){_.current=q.pointerType}return{onPointerDown:F,onPointerEnter:F,onMouseMove(q){const{nativeEvent:G}=q;function U(){!A.current&&!k.current&&o(!0,G,"hover")}u&&!cT(_.current)||n||vT(C.current)===0||I.current&&q.movementX**2+q.movementY**2<2||(Sa(T),_.current==="touch"?U():(I.current=!0,T.current=window.setTimeout(U,vT(C.current))))}}},[u,o,n,k,C]);return S.useMemo(()=>s?{reference:B}:{},[s,B])}const bT=()=>{},$oe=S.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:bT,setState:bT,isInstantPhase:!1}),lot=()=>S.useContext($oe);function Roe(e){const{children:r,delay:n,timeoutMs:o=0}=e,[i,a]=S.useReducer((c,d)=>({...c,...d}),{delay:n,timeoutMs:o,initialDelay:n,currentId:null,isInstantPhase:!1}),l=S.useRef(null),s=S.useCallback(c=>{a({currentId:c})},[]);return us(()=>{i.currentId?l.current===null?l.current=i.currentId:i.isInstantPhase||a({isInstantPhase:!0}):(i.isInstantPhase&&a({isInstantPhase:!1}),l.current=null)},[i.currentId,i.isInstantPhase]),y.jsx($oe.Provider,{value:S.useMemo(()=>({...i,setState:a,setCurrentId:s}),[i,s]),children:r})}function sot(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,floatingId:i}=e,{id:a,enabled:l=!0}=r,s=a??i,c=lot(),{currentId:d,setCurrentId:u,initialDelay:p,setState:f,timeoutMs:m}=c;return us(()=>{l&&d&&(f({delay:{open:1,close:Y4(p,"close")}}),d!==s&&o(!1))},[l,s,o,f,d,p]),us(()=>{function v(){o(!1),f({delay:p,currentId:null})}if(l&&d&&!n&&d===s){if(m){const w=window.setTimeout(v,m);return()=>{clearTimeout(w)}}v()}},[l,n,f,d,s,o,p,m]),us(()=>{l&&(u===bT||!n||u(s))},[l,n,u,s]),c}const cot={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},dot={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},zoe=e=>{var r,n;return{escapeKey:typeof e=="boolean"?e:(r=e?.escapeKey)!=null?r:!1,outsidePress:typeof e=="boolean"?e:(n=e?.outsidePress)!=null?n:!0}};function uot(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,elements:i,dataRef:a}=e,{enabled:l=!0,escapeKey:s=!0,outsidePress:c=!0,outsidePressEvent:d="pointerdown",referencePress:u=!1,referencePressEvent:p="pointerdown",ancestorScroll:f=!1,bubbles:m,capture:v}=r,w=mT(),x=ps(typeof c=="function"?c:()=>!1),k=typeof c=="function"?x:c,C=S.useRef(!1),{escapeKey:_,outsidePress:$}=zoe(m),{escapeKey:R,outsidePress:T}=zoe(v),A=S.useRef(!1),z=ps(P=>{var V;if(!n||!l||!s||P.key!=="Escape"||A.current)return;const B=(V=a.current.floatingContext)==null?void 0:V.nodeId,F=w?V4(w.nodesRef.current,B):[];if(!_&&(P.stopPropagation(),F.length>0)){let q=!0;if(F.forEach(G=>{var U;if((U=G.context)!=null&&U.open&&!G.context.dataRef.current.__escapeKeyBubbles){q=!1;return}}),!q)return}o(!1,int(P)?P.nativeEvent:P,"escape-key")}),j=ps(P=>{var V;const B=()=>{var F;z(P),(F=Wg(P))==null||F.removeEventListener("keydown",B)};(V=Wg(P))==null||V.addEventListener("keydown",B)}),I=ps(P=>{var V;const B=a.current.insideReactTree;a.current.insideReactTree=!1;const F=C.current;if(C.current=!1,d==="click"&&F||B||typeof k=="function"&&!k(P))return;const q=Wg(P),G="["+yT("inert")+"]",U=Ip(i.floating).querySelectorAll(G);let Y=Pr(q)?q:null;for(;Y&&!yc(Y);){const Z=vc(Y);if(yc(Z)||!Pr(Z))break;Y=Z}if(U.length&&Pr(q)&&!tnt(q)&&!N0(q,i.floating)&&Array.from(U).every(Z=>!N0(Y,Z)))return;if(Pi(q)&&H){const Z=yc(q),Q=_a(q),ie=/auto|scroll/,te=Z||ie.test(Q.overflowX),re=Z||ie.test(Q.overflowY),ue=te&&q.clientWidth>0&&q.scrollWidth>q.clientWidth,_e=re&&q.clientHeight>0&&q.scrollHeight>q.clientHeight,ce=Q.direction==="rtl",pe=_e&&(ce?P.offsetX<=q.offsetWidth-q.clientWidth:P.offsetX>q.clientWidth),xe=ue&&P.offsetY>q.clientHeight;if(pe||xe)return}const K=(V=a.current.floatingContext)==null?void 0:V.nodeId,O=w&&V4(w.nodesRef.current,K).some(Z=>{var Q;return sT(P,(Q=Z.context)==null?void 0:Q.elements.floating)});if(sT(P,i.floating)||sT(P,i.domReference)||O)return;const W=w?V4(w.nodesRef.current,K):[];if(W.length>0){let Z=!0;if(W.forEach(Q=>{var ie;if((ie=Q.context)!=null&&ie.open&&!Q.context.dataRef.current.__outsidePressBubbles){Z=!1;return}}),!Z)return}o(!1,P,"outside-press")}),N=ps(P=>{var V;const B=()=>{var F;I(P),(F=Wg(P))==null||F.removeEventListener(d,B)};(V=Wg(P))==null||V.addEventListener(d,B)});S.useEffect(()=>{if(!n||!l)return;a.current.__escapeKeyBubbles=_,a.current.__outsidePressBubbles=$;let P=-1;function V(U){o(!1,U,"ancestor-scroll")}function B(){window.clearTimeout(P),A.current=!0}function F(){P=window.setTimeout(()=>{A.current=!1},B4()?5:0)}const q=Ip(i.floating);s&&(q.addEventListener("keydown",R?j:z,R),q.addEventListener("compositionstart",B),q.addEventListener("compositionend",F)),k&&q.addEventListener(d,T?N:I,T);let G=[];return f&&(Pr(i.domReference)&&(G=bc(i.domReference)),Pr(i.floating)&&(G=G.concat(bc(i.floating))),!Pr(i.reference)&&i.reference&&i.reference.contextElement&&(G=G.concat(bc(i.reference.contextElement)))),G=G.filter(U=>{var Y;return U!==((Y=q.defaultView)==null?void 0:Y.visualViewport)}),G.forEach(U=>{U.addEventListener("scroll",V,{passive:!0})}),()=>{s&&(q.removeEventListener("keydown",R?j:z,R),q.removeEventListener("compositionstart",B),q.removeEventListener("compositionend",F)),k&&q.removeEventListener(d,T?N:I,T),G.forEach(U=>{U.removeEventListener("scroll",V)}),window.clearTimeout(P)}},[a,i,s,k,d,n,o,f,l,_,$,z,R,j,I,T,N]),S.useEffect(()=>{a.current.insideReactTree=!1},[a,k,d]);const L=S.useMemo(()=>({onKeyDown:z,...u&&{[cot[p]]:P=>{o(!1,P.nativeEvent,"reference-press")},...p!=="click"&&{onClick(P){o(!1,P.nativeEvent,"reference-press")}}}}),[z,o,u,p]),H=S.useMemo(()=>({onKeyDown:z,onMouseDown(){C.current=!0},onMouseUp(){C.current=!0},[dot[d]]:()=>{a.current.insideReactTree=!0}}),[z,d,a]);return S.useMemo(()=>l?{reference:L,floating:H}:{},[l,L,H])}function pot(e){const{open:r=!1,onOpenChange:n,elements:o}=e,i=Eoe(),a=S.useRef({}),[l]=S.useState(()=>not()),s=gT()!=null,[c,d]=S.useState(o.reference),u=ps((m,v,w)=>{a.current.openEvent=m?v:void 0,l.emit("openchange",{open:m,event:v,reason:w,nested:s}),n?.(m,v,w)}),p=S.useMemo(()=>({setPositionReference:d}),[]),f=S.useMemo(()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference}),[c,o.reference,o.floating]);return S.useMemo(()=>({dataRef:a,open:r,onOpenChange:u,elements:f,events:l,floatingId:i,refs:p}),[r,u,f,l,i,p])}function xT(e){e===void 0&&(e={});const{nodeId:r}=e,n=pot({...e,elements:{reference:null,floating:null,...e.elements}}),o=e.rootContext||n,i=o.elements,[a,l]=S.useState(null),[s,c]=S.useState(null),d=i?.domReference||a,u=S.useRef(null),p=mT();us(()=>{d&&(u.current=d)},[d]);const f=Ynt({...e,elements:{...i,...s&&{reference:s}}}),m=S.useCallback(C=>{const _=Pr(C)?{getBoundingClientRect:()=>C.getBoundingClientRect(),getClientRects:()=>C.getClientRects(),contextElement:C}:C;c(_),f.refs.setReference(_)},[f.refs]),v=S.useCallback(C=>{(Pr(C)||C===null)&&(u.current=C,l(C)),(Pr(f.refs.reference.current)||f.refs.reference.current===null||C!==null&&!Pr(C))&&f.refs.setReference(C)},[f.refs]),w=S.useMemo(()=>({...f.refs,setReference:v,setPositionReference:m,domReference:u}),[f.refs,v,m]),x=S.useMemo(()=>({...f.elements,domReference:d}),[f.elements,d]),k=S.useMemo(()=>({...f,...o,refs:w,elements:x,nodeId:r}),[f,w,x,r,o]);return us(()=>{o.dataRef.current.floatingContext=k;const C=p?.nodesRef.current.find(_=>_.id===r);C&&(C.context=k)}),S.useMemo(()=>({...f,context:k,refs:w,elements:x}),[f,w,x,k])}function wT(){return Qrt()&&Zrt()}function hot(e,r){r===void 0&&(r={});const{open:n,onOpenChange:o,events:i,dataRef:a,elements:l}=e,{enabled:s=!0,visibleOnly:c=!0}=r,d=S.useRef(!1),u=S.useRef(-1),p=S.useRef(!0);S.useEffect(()=>{if(!s)return;const m=si(l.domReference);function v(){!n&&Pi(l.domReference)&&l.domReference===Jne(Ip(l.domReference))&&(d.current=!0)}function w(){p.current=!0}function x(){p.current=!1}return m.addEventListener("blur",v),wT()&&(m.addEventListener("keydown",w,!0),m.addEventListener("pointerdown",x,!0)),()=>{m.removeEventListener("blur",v),wT()&&(m.removeEventListener("keydown",w,!0),m.removeEventListener("pointerdown",x,!0))}},[l.domReference,n,s]),S.useEffect(()=>{if(!s)return;function m(v){let{reason:w}=v;(w==="reference-press"||w==="escape-key")&&(d.current=!0)}return i.on("openchange",m),()=>{i.off("openchange",m)}},[i,s]),S.useEffect(()=>()=>{Sa(u)},[]);const f=S.useMemo(()=>({onMouseLeave(){d.current=!1},onFocus(m){if(d.current)return;const v=Wg(m.nativeEvent);if(c&&Pr(v)){if(wT()&&!m.relatedTarget){if(!p.current&&!rnt(v))return}else if(!nnt(v))return}o(!0,m.nativeEvent,"focus")},onBlur(m){d.current=!1;const v=m.relatedTarget,w=m.nativeEvent,x=Pr(v)&&v.hasAttribute(yT("focus-guard"))&&v.getAttribute("data-type")==="outside";u.current=window.setTimeout(()=>{var k;const C=Jne(l.domReference?l.domReference.ownerDocument:document);!v&&C===l.domReference||N0((k=a.current.floatingContext)==null?void 0:k.refs.floating.current,C)||N0(l.domReference,C)||x||o(!1,w,"focus")})}}),[a,l.domReference,o,c]);return S.useMemo(()=>s?{reference:f}:{},[s,f])}function kT(e,r,n){const o=new Map,i=n==="item";let a=e;if(i&&e){const{[woe]:l,[koe]:s,...c}=e;a=c}return{...n==="floating"&&{tabIndex:-1,[Qnt]:""},...a,...r.map(l=>{const s=l?l[n]:null;return typeof s=="function"?e?s(e):null:s}).concat(e).reduce((l,s)=>(s&&Object.entries(s).forEach(c=>{let[d,u]=c;if(!(i&&[woe,koe].includes(d)))if(d.indexOf("on")===0){if(o.has(d)||o.set(d,[]),typeof u=="function"){var p;(p=o.get(d))==null||p.push(u),l[d]=function(){for(var f,m=arguments.length,v=new Array(m),w=0;wx(...v)).find(x=>x!==void 0)}}}else l[d]=u}),l),{})}}function fot(e){e===void 0&&(e=[]);const r=e.map(s=>s?.reference),n=e.map(s=>s?.floating),o=e.map(s=>s?.item),i=S.useCallback(s=>kT(s,e,"reference"),r),a=S.useCallback(s=>kT(s,e,"floating"),n),l=S.useCallback(s=>kT(s,e,"item"),o);return S.useMemo(()=>({getReferenceProps:i,getFloatingProps:a,getItemProps:l}),[i,a,l])}const got=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function mot(e,r){var n,o;r===void 0&&(r={});const{open:i,elements:a,floatingId:l}=e,{enabled:s=!0,role:c="dialog"}=r,d=Eoe(),u=((n=a.domReference)==null?void 0:n.id)||d,p=S.useMemo(()=>{var k;return((k=ont(a.floating))==null?void 0:k.id)||l},[a.floating,l]),f=(o=got.get(c))!=null?o:c,m=gT()!=null,v=S.useMemo(()=>f==="tooltip"||c==="label"?{["aria-"+(c==="label"?"labelledby":"describedby")]:i?p:void 0}:{"aria-expanded":i?"true":"false","aria-haspopup":f==="alertdialog"?"dialog":f,"aria-controls":i?p:void 0,...f==="listbox"&&{role:"combobox"},...f==="menu"&&{id:u},...f==="menu"&&m&&{role:"menuitem"},...c==="select"&&{"aria-autocomplete":"none"},...c==="combobox"&&{"aria-autocomplete":"list"}},[f,p,m,i,u,c]),w=S.useMemo(()=>{const k={id:p,...f&&{role:f}};return f==="tooltip"||c==="label"?k:{...k,...f==="menu"&&{"aria-labelledby":u}}},[f,p,u,c]),x=S.useCallback(k=>{let{active:C,selected:_}=k;const $={role:"option",...C&&{id:p+"-fui-option"}};switch(c){case"select":case"combobox":return{...$,"aria-selected":_}}return{}},[p,c]);return S.useMemo(()=>s?{reference:v,floating:w,item:x}:{},[s,v,w,x])}const[yot,Ea]=Di("ScrollArea.Root component was not found in tree");function Yg(e,r){const n=Mp(r);$4(()=>{let o=0;if(e){const i=new ResizeObserver(()=>{cancelAnimationFrame(o),o=window.requestAnimationFrame(n)});return i.observe(e),()=>{window.cancelAnimationFrame(o),i.unobserve(e)}}},[e,n])}const vot=S.forwardRef((e,r)=>{const{style:n,...o}=e,i=Ea(),[a,l]=S.useState(0),[s,c]=S.useState(0),d=!!(a&&s);return Yg(i.scrollbarX,()=>{const u=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(u),c(u)}),Yg(i.scrollbarY,()=>{const u=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(u),l(u)}),d?y.jsx("div",{...o,ref:r,style:{...n,width:a,height:s}}):null}),bot=S.forwardRef((e,r)=>{const n=Ea(),o=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&o?y.jsx(vot,{...e,ref:r}):null}),xot={scrollHideDelay:1e3,type:"hover"},Toe=S.forwardRef((e,r)=>{const{type:n,scrollHideDelay:o,scrollbars:i,getStyles:a,...l}=ze("ScrollAreaRoot",xot,e),[s,c]=S.useState(null),[d,u]=S.useState(null),[p,f]=S.useState(null),[m,v]=S.useState(null),[w,x]=S.useState(null),[k,C]=S.useState(0),[_,$]=S.useState(0),[R,T]=S.useState(!1),[A,z]=S.useState(!1),j=on(r,I=>c(I));return y.jsx(yot,{value:{type:n,scrollHideDelay:o,scrollArea:s,viewport:d,onViewportChange:u,content:p,onContentChange:f,scrollbarX:m,onScrollbarXChange:v,scrollbarXEnabled:R,onScrollbarXEnabledChange:T,scrollbarY:w,onScrollbarYChange:x,scrollbarYEnabled:A,onScrollbarYEnabledChange:z,onCornerWidthChange:C,onCornerHeightChange:$,getStyles:a},children:y.jsx(Ae,{...l,ref:j,__vars:{"--sa-corner-width":i!=="xy"?"0px":`${k}px`,"--sa-corner-height":i!=="xy"?"0px":`${_}px`}})})});Toe.displayName="@mantine/core/ScrollAreaRoot";function joe(e,r){const n=e/r;return Number.isNaN(n)?0:n}function X4(e){const r=joe(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,o=(e.scrollbar.size-n)*r;return Math.max(o,18)}function Aoe(e,r){return n=>{if(e[0]===e[1]||r[0]===r[1])return r[0];const o=(r[1]-r[0])/(e[1]-e[0]);return r[0]+o*(n-e[0])}}function wot(e,[r,n]){return Math.min(n,Math.max(r,e))}function Doe(e,r,n="ltr"){const o=X4(r),i=r.scrollbar.paddingStart+r.scrollbar.paddingEnd,a=r.scrollbar.size-i,l=r.content-r.viewport,s=a-o,c=n==="ltr"?[0,l]:[l*-1,0],d=wot(e,c);return Aoe([0,l],[0,s])(d)}function kot(e,r,n,o="ltr"){const i=X4(n),a=i/2,l=r||a,s=i-l,c=n.scrollbar.paddingStart+l,d=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,p=o==="ltr"?[0,u]:[u*-1,0];return Aoe([c,d],p)(e)}function Poe(e,r){return e>0&&e{e?.(o),(n===!1||!o.defaultPrevented)&&r?.(o)}}const[_ot,Moe]=Di("ScrollAreaScrollbar was not found in tree"),Noe=S.forwardRef((e,r)=>{const{sizes:n,hasThumb:o,onThumbChange:i,onThumbPointerUp:a,onThumbPointerDown:l,onThumbPositionChange:s,onDragScroll:c,onWheelScroll:d,onResize:u,...p}=e,f=Ea(),[m,v]=S.useState(null),w=on(r,z=>v(z)),x=S.useRef(null),k=S.useRef(""),{viewport:C}=f,_=n.content-n.viewport,$=Mp(d),R=Mp(s),T=C4(u,10),A=z=>{if(x.current){const j=z.clientX-x.current.left,I=z.clientY-x.current.top;c({x:j,y:I})}};return S.useEffect(()=>{const z=j=>{const I=j.target;m?.contains(I)&&$(j,_)};return document.addEventListener("wheel",z,{passive:!1}),()=>document.removeEventListener("wheel",z,{passive:!1})},[C,m,_,$]),S.useEffect(R,[n,R]),Yg(m,T),Yg(f.content,T),y.jsx(_ot,{value:{scrollbar:m,hasThumb:o,onThumbChange:Mp(i),onThumbPointerUp:Mp(a),onThumbPositionChange:R,onThumbPointerDown:Mp(l)},children:y.jsx("div",{...p,ref:w,"data-mantine-scrollbar":!0,style:{position:"absolute",...p.style},onPointerDown:Lp(e.onPointerDown,z=>{z.preventDefault(),z.button===0&&(z.target.setPointerCapture(z.pointerId),x.current=m.getBoundingClientRect(),k.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",A(z))}),onPointerMove:Lp(e.onPointerMove,A),onPointerUp:Lp(e.onPointerUp,z=>{const j=z.target;j.hasPointerCapture(z.pointerId)&&(z.preventDefault(),j.releasePointerCapture(z.pointerId))}),onLostPointerCapture:()=>{document.body.style.webkitUserSelect=k.current,x.current=null}})})}),Boe=S.forwardRef((e,r)=>{const{sizes:n,onSizesChange:o,style:i,...a}=e,l=Ea(),[s,c]=S.useState(),d=S.useRef(null),u=on(r,d,l.onScrollbarXChange);return S.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),y.jsx(Noe,{"data-orientation":"horizontal",...a,ref:u,sizes:n,style:{...i,"--sa-thumb-width":`${X4(n)}px`},onThumbPointerDown:p=>e.onThumbPointerDown(p.x),onDragScroll:p=>e.onDragScroll(p.x),onWheelScroll:(p,f)=>{if(l.viewport){const m=l.viewport.scrollLeft+p.deltaX;e.onWheelScroll(m),Poe(m,f)&&p.preventDefault()}},onResize:()=>{d.current&&l.viewport&&s&&o({content:l.viewport.scrollWidth,viewport:l.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:Gd(s.paddingLeft),paddingEnd:Gd(s.paddingRight)}})}})});Boe.displayName="@mantine/core/ScrollAreaScrollbarX";const Ioe=S.forwardRef((e,r)=>{const{sizes:n,onSizesChange:o,style:i,...a}=e,l=Ea(),[s,c]=S.useState(),d=S.useRef(null),u=on(r,d,l.onScrollbarYChange);return S.useEffect(()=>{d.current&&c(window.getComputedStyle(d.current))},[]),y.jsx(Noe,{...a,"data-orientation":"vertical",ref:u,sizes:n,style:{"--sa-thumb-height":`${X4(n)}px`,...i},onThumbPointerDown:p=>e.onThumbPointerDown(p.y),onDragScroll:p=>e.onDragScroll(p.y),onWheelScroll:(p,f)=>{if(l.viewport){const m=l.viewport.scrollTop+p.deltaY;e.onWheelScroll(m),Poe(m,f)&&p.preventDefault()}},onResize:()=>{d.current&&l.viewport&&s&&o({content:l.viewport.scrollHeight,viewport:l.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:Gd(s.paddingTop),paddingEnd:Gd(s.paddingBottom)}})}})});Ioe.displayName="@mantine/core/ScrollAreaScrollbarY";const K4=S.forwardRef((e,r)=>{const{orientation:n="vertical",...o}=e,{dir:i}=mc(),a=Ea(),l=S.useRef(null),s=S.useRef(0),[c,d]=S.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=joe(c.viewport,c.content),p={...o,sizes:c,onSizesChange:d,hasThumb:u>0&&u<1,onThumbChange:m=>{l.current=m},onThumbPointerUp:()=>{s.current=0},onThumbPointerDown:m=>{s.current=m}},f=(m,v)=>kot(m,s.current,c,v);return n==="horizontal"?y.jsx(Boe,{...p,ref:r,onThumbPositionChange:()=>{if(a.viewport&&l.current){const m=a.viewport.scrollLeft,v=Doe(m,c,i);l.current.style.transform=`translate3d(${v}px, 0, 0)`}},onWheelScroll:m=>{a.viewport&&(a.viewport.scrollLeft=m)},onDragScroll:m=>{a.viewport&&(a.viewport.scrollLeft=f(m,i))}}):n==="vertical"?y.jsx(Ioe,{...p,ref:r,onThumbPositionChange:()=>{if(a.viewport&&l.current){const m=a.viewport.scrollTop,v=Doe(m,c);c.scrollbar.size===0?l.current.style.setProperty("--thumb-opacity","0"):l.current.style.setProperty("--thumb-opacity","1"),l.current.style.transform=`translate3d(0, ${v}px, 0)`}},onWheelScroll:m=>{a.viewport&&(a.viewport.scrollTop=m)},onDragScroll:m=>{a.viewport&&(a.viewport.scrollTop=f(m))}}):null});K4.displayName="@mantine/core/ScrollAreaScrollbarVisible";const _T=S.forwardRef((e,r)=>{const n=Ea(),{forceMount:o,...i}=e,[a,l]=S.useState(!1),s=e.orientation==="horizontal",c=C4(()=>{if(n.viewport){const d=n.viewport.offsetWidth{const{forceMount:n,...o}=e,i=Ea(),[a,l]=S.useState(!1);return S.useEffect(()=>{const{scrollArea:s}=i;let c=0;if(s){const d=()=>{window.clearTimeout(c),l(!0)},u=()=>{c=window.setTimeout(()=>l(!1),i.scrollHideDelay)};return s.addEventListener("pointerenter",d),s.addEventListener("pointerleave",u),()=>{window.clearTimeout(c),s.removeEventListener("pointerenter",d),s.removeEventListener("pointerleave",u)}}},[i.scrollArea,i.scrollHideDelay]),n||a?y.jsx(_T,{"data-state":a?"visible":"hidden",...o,ref:r}):null});Ooe.displayName="@mantine/core/ScrollAreaScrollbarHover";const Sot=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=Ea(),a=e.orientation==="horizontal",[l,s]=S.useState("hidden"),c=C4(()=>s("idle"),100);return S.useEffect(()=>{if(l==="idle"){const d=window.setTimeout(()=>s("hidden"),i.scrollHideDelay);return()=>window.clearTimeout(d)}},[l,i.scrollHideDelay]),S.useEffect(()=>{const{viewport:d}=i,u=a?"scrollLeft":"scrollTop";if(d){let p=d[u];const f=()=>{const m=d[u];p!==m&&(s("scrolling"),c()),p=m};return d.addEventListener("scroll",f),()=>d.removeEventListener("scroll",f)}},[i.viewport,a,c]),n||l!=="hidden"?y.jsx(K4,{"data-state":l==="hidden"?"hidden":"visible",...o,ref:r,onPointerEnter:Lp(e.onPointerEnter,()=>s("interacting")),onPointerLeave:Lp(e.onPointerLeave,()=>s("idle"))}):null}),ST=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=Ea(),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:l}=i,s=e.orientation==="horizontal";return S.useEffect(()=>(s?a(!0):l(!0),()=>{s?a(!1):l(!1)}),[s,a,l]),i.type==="hover"?y.jsx(Ooe,{...o,ref:r,forceMount:n}):i.type==="scroll"?y.jsx(Sot,{...o,ref:r,forceMount:n}):i.type==="auto"?y.jsx(_T,{...o,ref:r,forceMount:n}):i.type==="always"?y.jsx(K4,{...o,ref:r}):null});ST.displayName="@mantine/core/ScrollAreaScrollbar";function Eot(e,r=()=>{}){let n={left:e.scrollLeft,top:e.scrollTop},o=0;return(function i(){const a={left:e.scrollLeft,top:e.scrollTop},l=n.left!==a.left,s=n.top!==a.top;(l||s)&&r(),n=a,o=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(o)}const Loe=S.forwardRef((e,r)=>{const{style:n,...o}=e,i=Ea(),a=Moe(),{onThumbPositionChange:l}=a,s=on(r,u=>a.onThumbChange(u)),c=S.useRef(void 0),d=C4(()=>{c.current&&(c.current(),c.current=void 0)},100);return S.useEffect(()=>{const{viewport:u}=i;if(u){const p=()=>{if(d(),!c.current){const f=Eot(u,l);c.current=f,l()}};return l(),u.addEventListener("scroll",p),()=>u.removeEventListener("scroll",p)}},[i.viewport,d,l]),y.jsx("div",{"data-state":a.hasThumb?"visible":"hidden",...o,ref:s,style:{width:"var(--sa-thumb-width)",height:"var(--sa-thumb-height)",...n},onPointerDownCapture:Lp(e.onPointerDownCapture,u=>{const p=u.target.getBoundingClientRect(),f=u.clientX-p.left,m=u.clientY-p.top;a.onThumbPointerDown({x:f,y:m})}),onPointerUp:Lp(e.onPointerUp,a.onThumbPointerUp)})});Loe.displayName="@mantine/core/ScrollAreaThumb";const ET=S.forwardRef((e,r)=>{const{forceMount:n,...o}=e,i=Moe();return n||i.hasThumb?y.jsx(Loe,{ref:r,...o}):null});ET.displayName="@mantine/core/ScrollAreaThumb";const Foe=S.forwardRef(({children:e,style:r,...n},o)=>{const i=Ea(),a=on(o,i.onViewportChange);return y.jsx(Ae,{...n,ref:a,style:{overflowX:i.scrollbarXEnabled?"scroll":"hidden",overflowY:i.scrollbarYEnabled?"scroll":"hidden",...r},children:y.jsx("div",{...i.getStyles("content"),ref:i.onContentChange,children:e})})});Foe.displayName="@mantine/core/ScrollAreaViewport";var CT={root:"m_d57069b5",content:"m_b1336c6",viewport:"m_c0783ff9",viewportInner:"m_f8f631dd",scrollbar:"m_c44ba933",thumb:"m_d8b5e363",corner:"m_21657268"};const Voe={scrollHideDelay:1e3,type:"hover",scrollbars:"xy"},Cot=(e,{scrollbarSize:r,overscrollBehavior:n})=>({root:{"--scrollarea-scrollbar-size":Ne(r),"--scrollarea-over-scroll-behavior":n}}),Fp=We((e,r)=>{const n=ze("ScrollArea",Voe,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,scrollbarSize:c,vars:d,type:u,scrollHideDelay:p,viewportProps:f,viewportRef:m,onScrollPositionChange:v,children:w,offsetScrollbars:x,scrollbars:k,onBottomReached:C,onTopReached:_,overscrollBehavior:$,attributes:R,...T}=n,[A,z]=S.useState(!1),[j,I]=S.useState(!1),[N,L]=S.useState(!1),H=dt({name:"ScrollArea",props:n,classes:CT,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:R,vars:d,varsResolver:Cot}),P=S.useRef(null),V=xoe([m,P]);return S.useEffect(()=>{if(!P.current||x!=="present")return;const B=P.current,F=new ResizeObserver(()=>{const{scrollHeight:q,clientHeight:G,scrollWidth:U,clientWidth:Y}=B;I(q>G),L(U>Y)});return F.observe(B),()=>F.disconnect()},[P,x]),y.jsxs(Toe,{getStyles:H,type:u==="never"?"always":u,scrollHideDelay:p,ref:r,scrollbars:k,...H("root"),...T,children:[y.jsx(Foe,{...f,...H("viewport",{style:f?.style}),ref:V,"data-offset-scrollbars":x===!0?"xy":x||void 0,"data-scrollbars":k||void 0,"data-horizontal-hidden":x==="present"&&!N?"true":void 0,"data-vertical-hidden":x==="present"&&!j?"true":void 0,onScroll:B=>{f?.onScroll?.(B),v?.({x:B.currentTarget.scrollLeft,y:B.currentTarget.scrollTop});const{scrollTop:F,scrollHeight:q,clientHeight:G}=B.currentTarget;F-(q-G)>=-.6&&C?.(),F===0&&_?.()},children:w}),(k==="xy"||k==="x")&&y.jsx(ST,{...H("scrollbar"),orientation:"horizontal","data-hidden":u==="never"||x==="present"&&!N?!0:void 0,forceMount:!0,onMouseEnter:()=>z(!0),onMouseLeave:()=>z(!1),children:y.jsx(ET,{...H("thumb")})}),(k==="xy"||k==="y")&&y.jsx(ST,{...H("scrollbar"),orientation:"vertical","data-hidden":u==="never"||x==="present"&&!j?!0:void 0,forceMount:!0,onMouseEnter:()=>z(!0),onMouseLeave:()=>z(!1),children:y.jsx(ET,{...H("thumb")})}),y.jsx(bot,{...H("corner"),"data-hovered":A||void 0,"data-hidden":u==="never"||void 0})]})});Fp.displayName="@mantine/core/ScrollArea";const $T=We((e,r)=>{const{children:n,classNames:o,styles:i,scrollbarSize:a,scrollHideDelay:l,type:s,dir:c,offsetScrollbars:d,viewportRef:u,onScrollPositionChange:p,unstyled:f,variant:m,viewportProps:v,scrollbars:w,style:x,vars:k,onBottomReached:C,onTopReached:_,onOverflowChange:$,...R}=ze("ScrollAreaAutosize",Voe,e),T=S.useRef(null),A=xoe([u,T]),[z,j]=S.useState(!1),I=S.useRef(!1);return S.useEffect(()=>{if(!$)return;const N=T.current;if(!N)return;const L=()=>{const P=N.scrollHeight>N.clientHeight;P!==z&&(I.current?$?.(P):(I.current=!0,P&&$?.(!0)),j(P))};L();const H=new ResizeObserver(L);return H.observe(N),()=>H.disconnect()},[$,z]),y.jsx(Ae,{...R,ref:r,style:[{display:"flex",overflow:"hidden"},x],children:y.jsx(Ae,{style:{display:"flex",flexDirection:"column",flex:1,overflow:"hidden",...w==="y"&&{minWidth:0},...w==="x"&&{minHeight:0},...w==="xy"&&{minWidth:0,minHeight:0},...w===!1&&{minWidth:0,minHeight:0}},children:y.jsx(Fp,{classNames:o,styles:i,scrollHideDelay:l,scrollbarSize:a,type:s,dir:c,offsetScrollbars:d,viewportRef:A,onScrollPositionChange:p,unstyled:f,variant:m,viewportProps:v,vars:k,scrollbars:w,onBottomReached:C,onTopReached:_,"data-autosize":"true",children:n})})})});Fp.classes=CT,$T.displayName="@mantine/core/ScrollAreaAutosize",$T.classes=CT,Fp.Autosize=$T;var qoe={root:"m_87cf2631"};const $ot={__staticSelector:"UnstyledButton"},hs=Un((e,r)=>{const n=ze("UnstyledButton",$ot,e),{className:o,component:i="button",__staticSelector:a,unstyled:l,classNames:s,styles:c,style:d,attributes:u,...p}=n,f=dt({name:a,props:n,classes:qoe,className:o,style:d,classNames:s,styles:c,unstyled:l,attributes:u});return y.jsx(Ae,{...f("root",{focusable:!0}),component:i,ref:r,type:i==="button"?"button":void 0,...p})});hs.classes=qoe,hs.displayName="@mantine/core/UnstyledButton";var Hoe={root:"m_515a97f8"};const RT=We((e,r)=>{const n=ze("VisuallyHidden",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,attributes:d,...u}=n,p=dt({name:"VisuallyHidden",classes:Hoe,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:d});return y.jsx(Ae,{component:"span",ref:r,...p("root"),...u})});RT.classes=Hoe,RT.displayName="@mantine/core/VisuallyHidden";var Uoe={root:"m_1b7284a3"};const Rot=(e,{radius:r,shadow:n})=>({root:{"--paper-radius":r===void 0?void 0:hn(r),"--paper-shadow":Nz(n)}}),Z4=Un((e,r)=>{const n=ze("Paper",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,withBorder:c,vars:d,radius:u,shadow:p,variant:f,mod:m,attributes:v,...w}=n,x=dt({name:"Paper",props:n,classes:Uoe,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:d,varsResolver:Rot});return y.jsx(Ae,{ref:r,mod:[{"data-with-border":c},m],...x("root"),variant:f,...w})});Z4.classes=Uoe,Z4.displayName="@mantine/core/Paper";function Woe(e,r,n,o){return e==="center"||o==="center"?{top:r}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function Goe(e,r,n,o,i){return e==="center"||o==="center"?{left:r}:e==="end"?{[i==="ltr"?"right":"left"]:n}:e==="start"?{[i==="ltr"?"left":"right"]:n}:{}}const zot={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function Tot({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,arrowX:a,arrowY:l,dir:s}){const[c,d="center"]=e.split("-"),u={width:r,height:r,transform:"rotate(45deg)",position:"absolute",[zot[c]]:o},p=-r/2;return c==="left"?{...u,...Woe(d,l,n,i),right:p,borderLeftColor:"transparent",borderBottomColor:"transparent",clipPath:"polygon(100% 0, 0 0, 100% 100%)"}:c==="right"?{...u,...Woe(d,l,n,i),left:p,borderRightColor:"transparent",borderTopColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 100%)"}:c==="top"?{...u,...Goe(d,a,n,i,s),bottom:p,borderTopColor:"transparent",borderLeftColor:"transparent",clipPath:"polygon(0 100%, 100% 100%, 100% 0)"}:c==="bottom"?{...u,...Goe(d,a,n,i,s),top:p,borderBottomColor:"transparent",borderRightColor:"transparent",clipPath:"polygon(0 100%, 0 0, 100% 0)"}:{}}const Q4=S.forwardRef(({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,visible:a,arrowX:l,arrowY:s,style:c,...d},u)=>{const{dir:p}=mc();return a?y.jsx("div",{...d,ref:u,style:{...c,...Tot({position:e,arrowSize:r,arrowOffset:n,arrowRadius:o,arrowPosition:i,dir:p,arrowX:l,arrowY:s})}}):null});Q4.displayName="@mantine/core/FloatingArrow";function Yoe(e,r){if(e==="rtl"&&(r.includes("right")||r.includes("left"))){const[n,o]=r.split("-"),i=n==="right"?"left":"right";return o===void 0?i:`${i}-${o}`}return r}var Xoe={root:"m_9814e45f"};const jot={zIndex:yl("modal")},Aot=(e,{gradient:r,color:n,backgroundOpacity:o,blur:i,radius:a,zIndex:l})=>({root:{"--overlay-bg":r||(n!==void 0||o!==void 0)&&Mne(n||"#000",o??.6)||void 0,"--overlay-filter":i?`blur(${Ne(i)})`:void 0,"--overlay-radius":a===void 0?void 0:hn(a),"--overlay-z-index":l?.toString()}}),Xg=Un((e,r)=>{const n=ze("Overlay",jot,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,fixed:d,center:u,children:p,radius:f,zIndex:m,gradient:v,blur:w,color:x,backgroundOpacity:k,mod:C,attributes:_,...$}=n,R=dt({name:"Overlay",props:n,classes:Xoe,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:_,vars:c,varsResolver:Aot});return y.jsx(Ae,{ref:r,...R("root"),mod:[{center:u,fixed:d},C],...$,children:p})});Xg.classes=Xoe,Xg.displayName="@mantine/core/Overlay";function zT(e){const r=document.createElement("div");return r.setAttribute("data-portal","true"),typeof e.className=="string"&&r.classList.add(...e.className.split(" ").filter(Boolean)),typeof e.style=="object"&&Object.assign(r.style,e.style),typeof e.id=="string"&&r.setAttribute("id",e.id),r}function Dot({target:e,reuseTargetNode:r,...n}){if(e)return typeof e=="string"?document.querySelector(e)||zT(n):e;if(r){const o=document.querySelector("[data-mantine-shared-portal-node]");if(o)return o;const i=zT(n);return i.setAttribute("data-mantine-shared-portal-node","true"),document.body.appendChild(i),i}return zT(n)}const Pot={reuseTargetNode:!0},Koe=We((e,r)=>{const{children:n,target:o,reuseTargetNode:i,...a}=ze("Portal",Pot,e),[l,s]=S.useState(!1),c=S.useRef(null);return $4(()=>(s(!0),c.current=Dot({target:o,reuseTargetNode:i,...a}),Lz(r,c.current),!o&&!i&&c.current&&document.body.appendChild(c.current),()=>{!o&&!i&&c.current&&document.body.removeChild(c.current)}),[o]),!l||!c.current?null:Va.createPortal(y.jsx(y.Fragment,{children:n}),c.current)});Koe.displayName="@mantine/core/Portal";const Vp=We(({withinPortal:e=!0,children:r,...n},o)=>A4()==="test"||!e?y.jsx(y.Fragment,{children:r}):y.jsx(Koe,{ref:o,...n,children:r}));Vp.displayName="@mantine/core/OptionalPortal";const O0=e=>({in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${e==="bottom"?10:-10}px)`},transitionProperty:"transform, opacity"}),J4={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},"fade-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(30px)"},transitionProperty:"opacity, transform"},"fade-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-30px)"},transitionProperty:"opacity, transform"},"fade-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(30px)"},transitionProperty:"opacity, transform"},"fade-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-30px)"},transitionProperty:"opacity, transform"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(-20px) skew(-10deg, -5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:"translateY(20px) skew(-10deg, -5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(-5deg)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:"translateY(20px) rotate(5deg)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:{...O0("bottom"),common:{transformOrigin:"center center"}},"pop-bottom-left":{...O0("bottom"),common:{transformOrigin:"bottom left"}},"pop-bottom-right":{...O0("bottom"),common:{transformOrigin:"bottom right"}},"pop-top-left":{...O0("top"),common:{transformOrigin:"top left"}},"pop-top-right":{...O0("top"),common:{transformOrigin:"top right"}}},Zoe={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function Mot({transition:e,state:r,duration:n,timingFunction:o}){const i={WebkitBackfaceVisibility:"hidden",transitionDuration:`${n}ms`,transitionTimingFunction:o};return typeof e=="string"?e in J4?{transitionProperty:J4[e].transitionProperty,...i,...J4[e].common,...J4[e][Zoe[r]]}:{}:{transitionProperty:e.transitionProperty,...i,...e.common,...e[Zoe[r]]}}function Not({duration:e,exitDuration:r,timingFunction:n,mounted:o,onEnter:i,onExit:a,onEntered:l,onExited:s,enterDelay:c,exitDelay:d}){const u=uo(),p=Fz(),f=u.respectReducedMotion?p:!1,[m,v]=S.useState(f?0:e),[w,x]=S.useState(o?"entered":"exited"),k=S.useRef(-1),C=S.useRef(-1),_=S.useRef(-1);function $(){window.clearTimeout(k.current),window.clearTimeout(C.current),cancelAnimationFrame(_.current)}const R=A=>{$();const z=A?i:a,j=A?l:s,I=f?0:A?e:r;v(I),I===0?(typeof z=="function"&&z(),typeof j=="function"&&j(),x(A?"entered":"exited")):_.current=requestAnimationFrame(()=>{YM.flushSync(()=>{x(A?"pre-entering":"pre-exiting")}),_.current=requestAnimationFrame(()=>{typeof z=="function"&&z(),x(A?"entering":"exiting"),k.current=window.setTimeout(()=>{typeof j=="function"&&j(),x(A?"entered":"exited")},I)})})},T=A=>{if($(),typeof(A?c:d)!="number"){R(A);return}C.current=window.setTimeout(()=>{R(A)},A?c:d)};return Og(()=>{T(o)},[o]),S.useEffect(()=>()=>{$()},[]),{transitionDuration:m,transitionStatus:w,transitionTimingFunction:n||"ease"}}function _l({keepMounted:e,transition:r="fade",duration:n=250,exitDuration:o=n,mounted:i,children:a,timingFunction:l="ease",onExit:s,onEntered:c,onEnter:d,onExited:u,enterDelay:p,exitDelay:f}){const m=A4(),{transitionDuration:v,transitionStatus:w,transitionTimingFunction:x}=Not({mounted:i,exitDuration:o,duration:n,timingFunction:l,onExit:s,onEntered:c,onEnter:d,onExited:u,enterDelay:p,exitDelay:f});return v===0||m==="test"?i?y.jsx(y.Fragment,{children:a({})}):e?a({display:"none"}):null:w==="exited"?e?a({display:"none"}):null:y.jsx(y.Fragment,{children:a(Mot({transition:r,duration:v,state:w,timingFunction:x}))})}_l.displayName="@mantine/core/Transition";const[Bot,Qoe]=Di("Popover component was not found in the tree");function e5({children:e,active:r=!0,refProp:n="ref",innerRef:o}){const i=ctt(r),a=on(i,o),l=Wd(e);return l?S.cloneElement(l,{[n]:a}):e}function Joe(e){return y.jsx(RT,{tabIndex:-1,"data-autofocus":!0,...e})}e5.displayName="@mantine/core/FocusTrap",Joe.displayName="@mantine/core/FocusTrapInitialFocus",e5.InitialFocus=Joe;var eie={dropdown:"m_38a85659",arrow:"m_a31dc6c1",overlay:"m_3d7bc908"};const TT=We((e,r)=>{const n=ze("PopoverDropdown",null,e),{className:o,style:i,vars:a,children:l,onKeyDownCapture:s,variant:c,classNames:d,styles:u,...p}=n,f=Qoe(),m=Cne({opened:f.opened,shouldReturnFocus:f.returnFocus}),v=f.withRoles?{"aria-labelledby":f.getTargetId(),id:f.getDropdownId(),role:"dialog",tabIndex:-1}:{},w=on(r,f.floating);return f.disabled?null:y.jsx(Vp,{...f.portalProps,withinPortal:f.withinPortal,children:y.jsx(_l,{mounted:f.opened,...f.transitionProps,transition:f.transitionProps?.transition||"fade",duration:f.transitionProps?.duration??150,keepMounted:f.keepMounted,exitDuration:typeof f.transitionProps?.exitDuration=="number"?f.transitionProps.exitDuration:f.transitionProps?.duration,children:x=>y.jsx(e5,{active:f.trapFocus&&f.opened,innerRef:w,children:y.jsxs(Ae,{...v,...p,variant:c,onKeyDownCapture:Ket(()=>{f.onClose?.(),f.onDismiss?.()},{active:f.closeOnEscape,onTrigger:m,onKeyDown:s}),"data-position":f.placement,"data-fixed":f.floatingStrategy==="fixed"||void 0,...f.getStyles("dropdown",{className:o,props:n,classNames:d,styles:u,style:[{...x,zIndex:f.zIndex,top:f.y??0,left:f.x??0,width:f.width==="target"?void 0:Ne(f.width),...f.referenceHidden?{display:"none"}:null},f.resolvedStyles.dropdown,u?.dropdown,i]}),children:[l,y.jsx(Q4,{ref:f.arrowRef,arrowX:f.arrowX,arrowY:f.arrowY,visible:f.withArrow,position:f.placement,arrowSize:f.arrowSize,arrowRadius:f.arrowRadius,arrowOffset:f.arrowOffset,arrowPosition:f.arrowPosition,...f.getStyles("arrow",{props:n,classNames:d,styles:u})})]})})})})});TT.classes=eie,TT.displayName="@mantine/core/PopoverDropdown";const Iot={refProp:"ref",popupType:"dialog"},tie=We((e,r)=>{const{children:n,refProp:o,popupType:i,...a}=ze("PopoverTarget",Iot,e),l=Wd(n);if(!l)throw new Error("Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const s=a,c=Qoe(),d=on(c.reference,R4(l),r),u=c.withRoles?{"aria-haspopup":i,"aria-expanded":c.opened,"aria-controls":c.getDropdownId(),id:c.getTargetId()}:{},p=l.props;return S.cloneElement(l,{...s,...u,...c.targetProps,className:no(c.targetProps.className,s.className,p.className),[o]:d,...c.controlled?null:{onClick:()=>{c.onToggle(),p.onClick?.()}}})});tie.displayName="@mantine/core/PopoverTarget";function Oot(e){if(e===void 0)return{shift:!0,flip:!0};const r={...e};return e.shift===void 0&&(r.shift=!0),e.flip===void 0&&(r.flip=!0),r}function Lot(e,r,n){const o=Oot(e.middlewares),i=[yoe(e.offset),Znt()];return e.dropdownVisible&&n!=="test"&&e.preventPositionChangeWhenVisible&&(o.flip=!1),o.shift&&i.push(fT(typeof o.shift=="boolean"?{limiter:voe(),padding:5}:{limiter:voe(),padding:5,...o.shift})),o.flip&&i.push(typeof o.flip=="boolean"?G4():G4(o.flip)),o.inline&&i.push(typeof o.inline=="boolean"?I0():I0(o.inline)),i.push(boe({element:e.arrowRef,padding:e.arrowOffset})),(o.size||e.width==="target")&&i.push(Knt({...typeof o.size=="boolean"?{}:o.size,apply({rects:a,availableWidth:l,availableHeight:s,...c}){const d=r().refs.floating.current?.style??{};o.size&&(typeof o.size=="object"&&o.size.apply?o.size.apply({rects:a,availableWidth:l,availableHeight:s,...c}):Object.assign(d,{maxWidth:`${l}px`,maxHeight:`${s}px`})),e.width==="target"&&Object.assign(d,{width:`${a.reference.width}px`})}})),i}function Fot(e){const r=A4(),[n,o]=qd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),i=S.useRef(n),a=()=>{n&&!e.disabled&&o(!1)},l=()=>{e.disabled||o(!n)},s=xT({strategy:e.strategy,placement:e.preventPositionChangeWhenVisible?e.positionRef.current:e.position,middleware:Lot(e,()=>s,r),whileElementsMounted:e.keepMounted?void 0:pT});return S.useEffect(()=>{if(!(!s.refs.reference.current||!s.refs.floating.current)&&n)return pT(s.refs.reference.current,s.refs.floating.current,s.update)},[n,s.update]),Og(()=>{e.onPositionChange?.(s.placement),e.positionRef.current=s.placement},[s.placement,e.preventPositionChangeWhenVisible]),Og(()=>{n!==i.current&&(n?e.onOpen?.():e.onClose?.()),i.current=n},[n,e.onClose,e.onOpen]),$4(()=>{let c=-1;return n&&(c=window.setTimeout(()=>e.setDropdownVisible(!0),4)),()=>{window.clearTimeout(c)}},[n,e.position]),{floating:s,controlled:typeof e.opened=="boolean",opened:n,onClose:a,onToggle:l}}const Vot={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!0,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,withOverlay:!1,hideDetached:!0,clickOutsideEvents:["mousedown","touchstart"],zIndex:yl("popover"),__staticSelector:"Popover",width:"max-content"},qot=(e,{radius:r,shadow:n})=>({dropdown:{"--popover-radius":r===void 0?void 0:hn(r),"--popover-shadow":Nz(n)}});function po(e){const r=ze("Popover",Vot,e),{children:n,position:o,offset:i,onPositionChange:a,positionDependencies:l,opened:s,transitionProps:c,onExitTransitionEnd:d,onEnterTransitionEnd:u,width:p,middlewares:f,withArrow:m,arrowSize:v,arrowOffset:w,arrowRadius:x,arrowPosition:k,unstyled:C,classNames:_,styles:$,closeOnClickOutside:R,withinPortal:T,portalProps:A,closeOnEscape:z,clickOutsideEvents:j,trapFocus:I,onClose:N,onDismiss:L,onOpen:H,onChange:P,zIndex:V,radius:B,shadow:F,id:q,defaultOpened:G,__staticSelector:U,withRoles:Y,disabled:K,returnFocus:O,variant:W,keepMounted:Z,vars:Q,floatingStrategy:ie,withOverlay:te,overlayProps:re,hideDetached:ue,attributes:_e,preventPositionChangeWhenVisible:ce,...pe}=r,xe=dt({name:U,props:r,classes:eie,classNames:_,styles:$,unstyled:C,attributes:_e,rootSelector:"dropdown",vars:Q,varsResolver:qot}),{resolvedStyles:je}=Hz({classNames:_,styles:$,props:r}),[Be,Je]=S.useState(s??G??!1),st=S.useRef(o),Le=S.useRef(null),[St,Ve]=S.useState(null),[qe,Xe]=S.useState(null),{dir:It}=mc(),Et=A4(),be=bl(q),ke=Fot({middlewares:f,width:p,position:Yoe(It,o),offset:typeof i=="number"?i+(m?v/2:0):i,arrowRef:Le,arrowOffset:w,onPositionChange:a,positionDependencies:l,opened:s,defaultOpened:G,onChange:P,onOpen:H,onClose:N,onDismiss:L,strategy:ie,dropdownVisible:Be,setDropdownVisible:Je,positionRef:st,disabled:K,preventPositionChangeWhenVisible:ce,keepMounted:Z});Ene(()=>{R&&(ke.onClose(),L?.())},j,[St,qe]);const Ye=S.useCallback(er=>{Ve(er),ke.floating.refs.setReference(er)},[ke.floating.refs.setReference]),yt=S.useCallback(er=>{Xe(er),ke.floating.refs.setFloating(er)},[ke.floating.refs.setFloating]),xt=S.useCallback(()=>{c?.onExited?.(),d?.(),Je(!1),ce||(st.current=o)},[c?.onExited,d,ce,o]),Tr=S.useCallback(()=>{c?.onEntered?.(),u?.()},[c?.onEntered,u]);return y.jsxs(Bot,{value:{returnFocus:O,disabled:K,controlled:ke.controlled,reference:Ye,floating:yt,x:ke.floating.x,y:ke.floating.y,arrowX:ke.floating?.middlewareData?.arrow?.x,arrowY:ke.floating?.middlewareData?.arrow?.y,opened:ke.opened,arrowRef:Le,transitionProps:{...c,onExited:xt,onEntered:Tr},width:p,withArrow:m,arrowSize:v,arrowOffset:w,arrowRadius:x,arrowPosition:k,placement:ke.floating.placement,trapFocus:I,withinPortal:T,portalProps:A,zIndex:V,radius:B,shadow:F,closeOnEscape:z,onDismiss:L,onClose:ke.onClose,onToggle:ke.onToggle,getTargetId:()=>`${be}-target`,getDropdownId:()=>`${be}-dropdown`,withRoles:Y,targetProps:pe,__staticSelector:U,classNames:_,styles:$,unstyled:C,variant:W,keepMounted:Z,getStyles:xe,resolvedStyles:je,floatingStrategy:ie,referenceHidden:ue&&Et!=="test"?ke.floating.middlewareData.hide?.referenceHidden:!1},children:[n,te&&y.jsx(_l,{transition:"fade",mounted:ke.opened,duration:c?.duration||250,exitDuration:c?.exitDuration||250,children:er=>y.jsx(Vp,{withinPortal:T,children:y.jsx(Xg,{...re,...xe("overlay",{className:re?.className,style:[er,re?.style]})})})})]})}po.Target=tie,po.Dropdown=TT,po.displayName="@mantine/core/Popover",po.extend=e=>e;var Sl={root:"m_5ae2e3c",barsLoader:"m_7a2bd4cd",bar:"m_870bb79","bars-loader-animation":"m_5d2b3b9d",dotsLoader:"m_4e3f22d7",dot:"m_870c4af","loader-dots-animation":"m_aac34a1",ovalLoader:"m_b34414df","oval-loader-animation":"m_f8e89c4b"};const rie=S.forwardRef(({className:e,...r},n)=>y.jsxs(Ae,{component:"span",className:no(Sl.barsLoader,e),...r,ref:n,children:[y.jsx("span",{className:Sl.bar}),y.jsx("span",{className:Sl.bar}),y.jsx("span",{className:Sl.bar})]}));rie.displayName="@mantine/core/Bars";const nie=S.forwardRef(({className:e,...r},n)=>y.jsxs(Ae,{component:"span",className:no(Sl.dotsLoader,e),...r,ref:n,children:[y.jsx("span",{className:Sl.dot}),y.jsx("span",{className:Sl.dot}),y.jsx("span",{className:Sl.dot})]}));nie.displayName="@mantine/core/Dots";const oie=S.forwardRef(({className:e,...r},n)=>y.jsx(Ae,{component:"span",className:no(Sl.ovalLoader,e),...r,ref:n}));oie.displayName="@mantine/core/Oval";const iie={bars:rie,oval:oie,dots:nie},Hot={loaders:iie,type:"oval"},Uot=(e,{size:r,color:n})=>({root:{"--loader-size":Qt(r,"loader-size"),"--loader-color":n?Uo(n,e):void 0}}),qp=We((e,r)=>{const n=ze("Loader",Hot,e),{size:o,color:i,type:a,vars:l,className:s,style:c,classNames:d,styles:u,unstyled:p,loaders:f,variant:m,children:v,attributes:w,...x}=n,k=dt({name:"Loader",props:n,classes:Sl,className:s,style:c,classNames:d,styles:u,unstyled:p,attributes:w,vars:l,varsResolver:Uot});return v?y.jsx(Ae,{...k("root"),ref:r,...x,children:v}):y.jsx(Ae,{...k("root"),ref:r,component:f[a],variant:m,size:o,...x})});qp.defaultLoaders=iie,qp.classes=Sl,qp.displayName="@mantine/core/Loader";var Kg={root:"m_8d3f4000",icon:"m_8d3afb97",loader:"m_302b9fb1",group:"m_1a0f1b21",groupSection:"m_437b6484"};const aie={orientation:"horizontal"},Wot=(e,{borderWidth:r})=>({group:{"--ai-border-width":Ne(r)}}),jT=We((e,r)=>{const n=ze("ActionIconGroup",aie,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,orientation:c,vars:d,borderWidth:u,variant:p,mod:f,attributes:m,...v}=ze("ActionIconGroup",aie,e),w=dt({name:"ActionIconGroup",props:n,classes:Kg,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:d,varsResolver:Wot,rootSelector:"group"});return y.jsx(Ae,{...w("group"),ref:r,variant:p,mod:[{"data-orientation":c},f],role:"group",...v})});jT.classes=Kg,jT.displayName="@mantine/core/ActionIconGroup";const Got=(e,{radius:r,color:n,gradient:o,variant:i,autoContrast:a,size:l})=>{const s=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:a});return{groupSection:{"--section-height":Qt(l,"section-height"),"--section-padding-x":Qt(l,"section-padding-x"),"--section-fz":zo(l),"--section-radius":r===void 0?void 0:hn(r),"--section-bg":n||i?s.background:void 0,"--section-color":s.color,"--section-bd":n||i?s.border:void 0}}},AT=We((e,r)=>{const n=ze("ActionIconGroupSection",null,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,vars:c,variant:d,gradient:u,radius:p,autoContrast:f,attributes:m,...v}=n,w=dt({name:"ActionIconGroupSection",props:n,classes:Kg,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:Got,rootSelector:"groupSection"});return y.jsx(Ae,{...w("groupSection"),ref:r,variant:d,...v})});AT.classes=Kg,AT.displayName="@mantine/core/ActionIconGroupSection";const Yot=(e,{size:r,radius:n,variant:o,gradient:i,color:a,autoContrast:l})=>{const s=e.variantColorResolver({color:a||e.primaryColor,theme:e,gradient:i,variant:o||"filled",autoContrast:l});return{root:{"--ai-size":Qt(r,"ai-size"),"--ai-radius":n===void 0?void 0:hn(n),"--ai-bg":a||o?s.background:void 0,"--ai-hover":a||o?s.hover:void 0,"--ai-hover-color":a||o?s.hoverColor:void 0,"--ai-color":s.color,"--ai-bd":a||o?s.border:void 0}}},t5=Un((e,r)=>{const n=ze("ActionIcon",null,e),{className:o,unstyled:i,variant:a,classNames:l,styles:s,style:c,loading:d,loaderProps:u,size:p,color:f,radius:m,__staticSelector:v,gradient:w,vars:x,children:k,disabled:C,"data-disabled":_,autoContrast:$,mod:R,attributes:T,...A}=n,z=dt({name:["ActionIcon",v],props:n,className:o,style:c,classes:Kg,classNames:l,styles:s,unstyled:i,attributes:T,vars:x,varsResolver:Yot});return y.jsxs(hs,{...z("root",{active:!C&&!d&&!_}),...A,unstyled:i,variant:a,size:p,disabled:C||d,ref:r,mod:[{loading:d,disabled:C||_},R],children:[typeof d=="boolean"&&y.jsx(_l,{mounted:d,transition:"slide-down",duration:150,children:j=>y.jsx(Ae,{component:"span",...z("loader",{style:j}),"aria-hidden":!0,children:y.jsx(qp,{color:"var(--ai-color)",size:"calc(var(--ai-size) * 0.55)",...u})})}),y.jsx(Ae,{component:"span",mod:{loading:d},...z("icon"),children:k})]})});t5.classes=Kg,t5.displayName="@mantine/core/ActionIcon",t5.Group=jT,t5.GroupSection=AT;const lie=S.forwardRef(({size:e="var(--cb-icon-size, 70%)",style:r,...n},o)=>y.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...r,width:e,height:e},ref:o,...n,children:y.jsx("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})}));lie.displayName="@mantine/core/CloseIcon";var sie={root:"m_86a44da5","root--subtle":"m_220c80f2"};const Xot={variant:"subtle"},Kot=(e,{size:r,radius:n,iconSize:o})=>({root:{"--cb-size":Qt(r,"cb-size"),"--cb-radius":n===void 0?void 0:hn(n),"--cb-icon-size":Ne(o)}}),Hp=Un((e,r)=>{const n=ze("CloseButton",Xot,e),{iconSize:o,children:i,vars:a,radius:l,className:s,classNames:c,style:d,styles:u,unstyled:p,"data-disabled":f,disabled:m,variant:v,icon:w,mod:x,attributes:k,__staticSelector:C,..._}=n,$=dt({name:C||"CloseButton",props:n,className:s,style:d,classes:sie,classNames:c,styles:u,unstyled:p,attributes:k,vars:a,varsResolver:Kot});return y.jsxs(hs,{ref:r,..._,unstyled:p,variant:v,disabled:m,mod:[{disabled:m||f},x],...$("root",{variant:v,active:!m&&!f}),children:[w||y.jsx(lie,{}),i]})});Hp.classes=sie,Hp.displayName="@mantine/core/CloseButton";function Zot(e){return S.Children.toArray(e).filter(Boolean)}var cie={root:"m_4081bf90"};const Qot={preventGrowOverflow:!0,gap:"md",align:"center",justify:"flex-start",wrap:"wrap"},Jot=(e,{grow:r,preventGrowOverflow:n,gap:o,align:i,justify:a,wrap:l},{childWidth:s})=>({root:{"--group-child-width":r&&n?s:void 0,"--group-gap":ro(o),"--group-align":i,"--group-justify":a,"--group-wrap":l}}),die=We((e,r)=>{const n=ze("Group",Qot,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,children:c,gap:d,align:u,justify:p,wrap:f,grow:m,preventGrowOverflow:v,vars:w,variant:x,__size:k,mod:C,attributes:_,...$}=n,R=Zot(c),T=R.length,A=ro(d??"md"),z={childWidth:`calc(${100/T}% - (${A} - ${A} / ${T}))`},j=dt({name:"Group",props:n,stylesCtx:z,className:i,style:a,classes:cie,classNames:o,styles:l,unstyled:s,attributes:_,vars:w,varsResolver:Jot});return y.jsx(Ae,{...j("root"),ref:r,variant:x,mod:[{grow:m},C],size:k,...$,children:R})});die.classes=cie,die.displayName="@mantine/core/Group";const[eit,xc]=Di("ModalBase component was not found in tree");function tit({opened:e,transitionDuration:r}){const[n,o]=S.useState(e),i=S.useRef(-1),a=Fz()?0:r;return S.useEffect(()=>(e?(o(!0),window.clearTimeout(i.current)):a===0?o(!1):i.current=window.setTimeout(()=>o(!1),a),()=>window.clearTimeout(i.current)),[e,a]),n}function rit({id:e,transitionProps:r,opened:n,trapFocus:o,closeOnEscape:i,onClose:a,returnFocus:l}){const s=bl(e),[c,d]=S.useState(!1),[u,p]=S.useState(!1),f=typeof r?.duration=="number"?r?.duration:200,m=tit({opened:n,transitionDuration:f});return ptt("keydown",v=>{v.key==="Escape"&&i&&!v.isComposing&&n&&v.target?.getAttribute("data-mantine-stop-propagation")!=="true"&&a()},{capture:!0}),Cne({opened:n,shouldReturnFocus:o&&l}),{_id:s,titleMounted:c,bodyMounted:u,shouldLockScroll:m,setTitleMounted:d,setBodyMounted:p}}const DT=S.forwardRef(({keepMounted:e,opened:r,onClose:n,id:o,transitionProps:i,onExitTransitionEnd:a,onEnterTransitionEnd:l,trapFocus:s,closeOnEscape:c,returnFocus:d,closeOnClickOutside:u,withinPortal:p,portalProps:f,lockScroll:m,children:v,zIndex:w,shadow:x,padding:k,__vars:C,unstyled:_,removeScrollProps:$,...R},T)=>{const{_id:A,titleMounted:z,bodyMounted:j,shouldLockScroll:I,setTitleMounted:N,setBodyMounted:L}=rit({id:o,transitionProps:i,opened:r,trapFocus:s,closeOnEscape:c,onClose:n,returnFocus:d}),{key:H,...P}=$||{};return y.jsx(Vp,{...f,withinPortal:p,children:y.jsx(eit,{value:{opened:r,onClose:n,closeOnClickOutside:u,onExitTransitionEnd:a,onEnterTransitionEnd:l,transitionProps:{...i,keepMounted:e},getTitleId:()=>`${A}-title`,getBodyId:()=>`${A}-body`,titleMounted:z,bodyMounted:j,setTitleMounted:N,setBodyMounted:L,trapFocus:s,closeOnEscape:c,zIndex:w,unstyled:_},children:y.jsx(xne,{enabled:I&&m,...P,children:y.jsx(Ae,{ref:T,...R,__vars:{...C,"--mb-z-index":(w||yl("modal")).toString(),"--mb-shadow":Nz(x),"--mb-padding":ro(k)},children:v})},H)})})});DT.displayName="@mantine/core/ModalBase";function nit(){const e=xc();return S.useEffect(()=>(e.setBodyMounted(!0),()=>e.setBodyMounted(!1)),[]),e.getBodyId()}var Zg={title:"m_615af6c9",header:"m_b5489c3c",inner:"m_60c222c7",content:"m_fd1ab0aa",close:"m_606cb269",body:"m_5df29311"};const PT=S.forwardRef(({className:e,...r},n)=>{const o=nit(),i=xc();return y.jsx(Ae,{ref:n,...r,id:o,className:no({[Zg.body]:!i.unstyled},e)})});PT.displayName="@mantine/core/ModalBaseBody";const uie=S.forwardRef(({className:e,onClick:r,...n},o)=>{const i=xc();return y.jsx(Hp,{ref:o,...n,onClick:a=>{i.onClose(),r?.(a)},className:no({[Zg.close]:!i.unstyled},e),unstyled:i.unstyled})});uie.displayName="@mantine/core/ModalBaseCloseButton";const MT=S.forwardRef(({transitionProps:e,className:r,innerProps:n,onKeyDown:o,style:i,...a},l)=>{const s=xc();return y.jsx(_l,{mounted:s.opened,transition:"pop",...s.transitionProps,onExited:()=>{s.onExitTransitionEnd?.(),s.transitionProps?.onExited?.()},onEntered:()=>{s.onEnterTransitionEnd?.(),s.transitionProps?.onEntered?.()},...e,children:c=>y.jsx("div",{...n,className:no({[Zg.inner]:!s.unstyled},n.className),children:y.jsx(e5,{active:s.opened&&s.trapFocus,innerRef:l,children:y.jsx(Z4,{...a,component:"section",role:"dialog",tabIndex:-1,"aria-modal":!0,"aria-describedby":s.bodyMounted?s.getBodyId():void 0,"aria-labelledby":s.titleMounted?s.getTitleId():void 0,style:[i,c],className:no({[Zg.content]:!s.unstyled},r),unstyled:s.unstyled,children:a.children})})})})});MT.displayName="@mantine/core/ModalBaseContent";const pie=S.forwardRef(({className:e,...r},n)=>{const o=xc();return y.jsx(Ae,{component:"header",ref:n,className:no({[Zg.header]:!o.unstyled},e),...r})});pie.displayName="@mantine/core/ModalBaseHeader";const oit={duration:200,timingFunction:"ease",transition:"fade"};function iit(e){const r=xc();return{...oit,...r.transitionProps,...e}}const NT=S.forwardRef(({onClick:e,transitionProps:r,style:n,visible:o,...i},a)=>{const l=xc(),s=iit(r);return y.jsx(_l,{mounted:o!==void 0?o:l.opened,...s,transition:"fade",children:c=>y.jsx(Xg,{ref:a,fixed:!0,style:[n,c],zIndex:l.zIndex,unstyled:l.unstyled,onClick:d=>{e?.(d),l.closeOnClickOutside&&l.onClose()},...i})})});NT.displayName="@mantine/core/ModalBaseOverlay";function ait(){const e=xc();return S.useEffect(()=>(e.setTitleMounted(!0),()=>e.setTitleMounted(!1)),[]),e.getTitleId()}const hie=S.forwardRef(({className:e,...r},n)=>{const o=ait(),i=xc();return y.jsx(Ae,{component:"h2",ref:n,className:no({[Zg.title]:!i.unstyled},e),...r,id:o})});hie.displayName="@mantine/core/ModalBaseTitle";function fie({children:e}){return y.jsx(y.Fragment,{children:e})}const[lit,sit]=Bg({size:"sm"}),gie=We((e,r)=>{const n=ze("InputClearButton",null,e),{size:o,variant:i,vars:a,classNames:l,styles:s,...c}=n,d=sit(),{resolvedClassNames:u,resolvedStyles:p}=Hz({classNames:l,styles:s,props:n});return y.jsx(Hp,{variant:i||"transparent",ref:r,size:o||d?.size||"sm",classNames:u,styles:p,__staticSelector:"InputClearButton",style:{pointerEvents:"all",background:"var(--input-bg)",...c.style},...c})});gie.displayName="@mantine/core/InputClearButton";const cit={xs:7,sm:8,md:10,lg:12,xl:15};function dit({__clearable:e,__clearSection:r,rightSection:n,__defaultRightSection:o,size:i="sm"}){const a=e&&r;return a&&(n||o)?y.jsxs("div",{"data-combined-clear-section":!0,style:{display:"flex",gap:2,alignItems:"center",paddingInlineEnd:cit[i]},children:[a,n||o]}):n===null?null:n||a||o}const[uit,r5]=Bg({offsetBottom:!1,offsetTop:!1,describedBy:void 0,getStyles:null,inputId:void 0,labelId:void 0});var Ca={wrapper:"m_6c018570",input:"m_8fb7ebe7",section:"m_82577fc2",placeholder:"m_88bacfd0",root:"m_46b77525",label:"m_8fdc1311",required:"m_78a94662",error:"m_8f816625",description:"m_fe47ce59"};const pit=(e,{size:r})=>({description:{"--input-description-size":r===void 0?void 0:`calc(${zo(r)} - ${Ne(2)})`}}),n5=We((e,r)=>{const n=ze("InputDescription",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,__staticSelector:u,__inheritStyles:p=!0,attributes:f,variant:m,...v}=ze("InputDescription",null,n),w=r5(),x=dt({name:["InputWrapper",u],props:n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:f,rootSelector:"description",vars:c,varsResolver:pit}),k=p&&w?.getStyles||x;return y.jsx(Ae,{component:"p",ref:r,variant:m,size:d,...k("description",w?.getStyles?{className:i,style:a}:void 0),...v})});n5.classes=Ca,n5.displayName="@mantine/core/InputDescription";const hit=(e,{size:r})=>({error:{"--input-error-size":r===void 0?void 0:`calc(${zo(r)} - ${Ne(2)})`}}),o5=We((e,r)=>{const n=ze("InputError",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,attributes:u,__staticSelector:p,__inheritStyles:f=!0,variant:m,...v}=n,w=dt({name:["InputWrapper",p],props:n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:u,rootSelector:"error",vars:c,varsResolver:hit}),x=r5(),k=f&&x?.getStyles||w;return y.jsx(Ae,{component:"p",ref:r,variant:m,size:d,...k("error",x?.getStyles?{className:i,style:a}:void 0),...v})});o5.classes=Ca,o5.displayName="@mantine/core/InputError";const mie={labelElement:"label"},fit=(e,{size:r})=>({label:{"--input-label-size":zo(r),"--input-asterisk-color":void 0}}),i5=We((e,r)=>{const n=ze("InputLabel",mie,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,labelElement:d,size:u,required:p,htmlFor:f,onMouseDown:m,children:v,__staticSelector:w,variant:x,mod:k,attributes:C,..._}=ze("InputLabel",mie,n),$=dt({name:["InputWrapper",w],props:n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:C,rootSelector:"label",vars:c,varsResolver:fit}),R=r5(),T=R?.getStyles||$;return y.jsxs(Ae,{...T("label",R?.getStyles?{className:i,style:a}:void 0),component:d,variant:x,size:u,ref:r,htmlFor:d==="label"?f:void 0,mod:[{required:p},k],onMouseDown:A=>{m?.(A),!A.defaultPrevented&&A.detail>1&&A.preventDefault()},..._,children:[v,p&&y.jsx("span",{...T("required"),"aria-hidden":!0,children:" *"})]})});i5.classes=Ca,i5.displayName="@mantine/core/InputLabel";const BT=We((e,r)=>{const n=ze("InputPlaceholder",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,__staticSelector:d,variant:u,error:p,mod:f,attributes:m,...v}=n,w=dt({name:["InputPlaceholder",d],props:n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,rootSelector:"placeholder"});return y.jsx(Ae,{...w("placeholder"),mod:[{error:!!p},f],component:"span",variant:u,ref:r,...v})});BT.classes=Ca,BT.displayName="@mantine/core/InputPlaceholder";function git(e,{hasDescription:r,hasError:n}){const o=e.findIndex(s=>s==="input"),i=e.slice(0,o),a=e.slice(o+1),l=r&&i.includes("description")||n&&i.includes("error");return{offsetBottom:r&&a.includes("description")||n&&a.includes("error"),offsetTop:l}}const mit={labelElement:"label",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},yit=(e,{size:r})=>({label:{"--input-label-size":zo(r),"--input-asterisk-color":void 0},error:{"--input-error-size":r===void 0?void 0:`calc(${zo(r)} - ${Ne(2)})`},description:{"--input-description-size":r===void 0?void 0:`calc(${zo(r)} - ${Ne(2)})`}}),IT=We((e,r)=>{const n=ze("InputWrapper",mit,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,variant:u,__staticSelector:p,inputContainer:f,inputWrapperOrder:m,label:v,error:w,description:x,labelProps:k,descriptionProps:C,errorProps:_,labelElement:$,children:R,withAsterisk:T,id:A,required:z,__stylesApiProps:j,mod:I,attributes:N,...L}=n,H=dt({name:["InputWrapper",p],props:j||n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:N,vars:c,varsResolver:yit}),P={size:d,variant:u,__staticSelector:p},V=bl(A),B=typeof T=="boolean"?T:z,F=_?.id||`${V}-error`,q=C?.id||`${V}-description`,G=V,U=!!w&&typeof w!="boolean",Y=!!x,K=`${U?F:""} ${Y?q:""}`,O=K.trim().length>0?K.trim():void 0,W=k?.id||`${V}-label`,Z=v&&y.jsx(i5,{labelElement:$,id:W,htmlFor:G,required:B,...P,...k,children:v},"label"),Q=Y&&y.jsx(n5,{...C,...P,size:C?.size||P.size,id:C?.id||q,children:x},"description"),ie=y.jsx(S.Fragment,{children:f(R)},"input"),te=U&&S.createElement(o5,{..._,...P,size:_?.size||P.size,key:"error",id:_?.id||F},w),re=m.map(ue=>{switch(ue){case"label":return Z;case"input":return ie;case"description":return Q;case"error":return te;default:return null}});return y.jsx(uit,{value:{getStyles:H,describedBy:O,inputId:G,labelId:W,...git(m,{hasDescription:Y,hasError:U})},children:y.jsx(Ae,{ref:r,variant:u,size:d,mod:[{error:!!w},I],...H("root"),...L,children:re})})});IT.classes=Ca,IT.displayName="@mantine/core/InputWrapper";const vit={variant:"default",leftSectionPointerEvents:"none",rightSectionPointerEvents:"none",withAria:!0,withErrorStyles:!0,size:"sm"},bit=(e,r,n)=>({wrapper:{"--input-margin-top":n.offsetTop?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-margin-bottom":n.offsetBottom?"calc(var(--mantine-spacing-xs) / 2)":void 0,"--input-height":Qt(r.size,"input-height"),"--input-fz":zo(r.size),"--input-radius":r.radius===void 0?void 0:hn(r.radius),"--input-left-section-width":r.leftSectionWidth!==void 0?Ne(r.leftSectionWidth):void 0,"--input-right-section-width":r.rightSectionWidth!==void 0?Ne(r.rightSectionWidth):void 0,"--input-padding-y":r.multiline?Qt(r.size,"input-padding-y"):void 0,"--input-left-section-pointer-events":r.leftSectionPointerEvents,"--input-right-section-pointer-events":r.rightSectionPointerEvents}}),ci=Un((e,r)=>{const n=ze("Input",vit,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,required:c,__staticSelector:d,__stylesApiProps:u,size:p,wrapperProps:f,error:m,disabled:v,leftSection:w,leftSectionProps:x,leftSectionWidth:k,rightSection:C,rightSectionProps:_,rightSectionWidth:$,rightSectionPointerEvents:R,leftSectionPointerEvents:T,variant:A,vars:z,pointer:j,multiline:I,radius:N,id:L,withAria:H,withErrorStyles:P,mod:V,inputSize:B,attributes:F,__clearSection:q,__clearable:G,__defaultRightSection:U,...Y}=n,{styleProps:K,rest:O}=Gz(Y),W=r5(),Z={offsetBottom:W?.offsetBottom,offsetTop:W?.offsetTop},Q=dt({name:["Input",d],props:u||n,classes:Ca,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:F,stylesCtx:Z,rootSelector:"wrapper",vars:z,varsResolver:bit}),ie=H?{required:c,disabled:v,"aria-invalid":!!m,"aria-describedby":W?.describedBy,id:W?.inputId||L}:{},te=dit({__clearable:G,__clearSection:q,rightSection:C,__defaultRightSection:U,size:p});return y.jsx(lit,{value:{size:p||"sm"},children:y.jsxs(Ae,{...Q("wrapper"),...K,...f,mod:[{error:!!m&&P,pointer:j,disabled:v,multiline:I,"data-with-right-section":!!te,"data-with-left-section":!!w},V],variant:A,size:p,children:[w&&y.jsx("div",{...x,"data-position":"left",...Q("section",{className:x?.className,style:x?.style}),children:w}),y.jsx(Ae,{component:"input",...O,...ie,ref:r,required:c,mod:{disabled:v,error:!!m&&P},variant:A,__size:B,...Q("input")}),te&&y.jsx("div",{..._,"data-position":"right",...Q("section",{className:_?.className,style:_?.style}),children:te})]})})});ci.classes=Ca,ci.Wrapper=IT,ci.Label=i5,ci.Error=o5,ci.Description=n5,ci.Placeholder=BT,ci.ClearButton=gie,ci.displayName="@mantine/core/Input";function xit(e,r,n){const o=ze(e,r,n),{label:i,description:a,error:l,required:s,classNames:c,styles:d,className:u,unstyled:p,__staticSelector:f,__stylesApiProps:m,errorProps:v,labelProps:w,descriptionProps:x,wrapperProps:k,id:C,size:_,style:$,inputContainer:R,inputWrapperOrder:T,withAsterisk:A,variant:z,vars:j,mod:I,attributes:N,...L}=o,{styleProps:H,rest:P}=Gz(L),V={label:i,description:a,error:l,required:s,classNames:c,className:u,__staticSelector:f,__stylesApiProps:m||o,errorProps:v,labelProps:w,descriptionProps:x,unstyled:p,styles:d,size:_,style:$,inputContainer:R,inputWrapperOrder:T,withAsterisk:A,variant:z,id:C,mod:I,attributes:N,...k};return{...P,classNames:c,styles:d,unstyled:p,wrapperProps:{...V,...H},inputProps:{required:s,classNames:c,styles:d,unstyled:p,size:_,__staticSelector:f,__stylesApiProps:m||o,error:l,variant:z,id:C,attributes:N}}}const wit={__staticSelector:"InputBase",withAria:!0,size:"sm"},a5=Un((e,r)=>{const{inputProps:n,wrapperProps:o,...i}=xit("InputBase",wit,e);return y.jsx(ci.Wrapper,{...o,children:y.jsx(ci,{...n,...i,ref:r})})});a5.classes={...ci.classes,...ci.Wrapper.classes},a5.displayName="@mantine/core/InputBase";const kit={gap:{type:"spacing",property:"gap"},rowGap:{type:"spacing",property:"rowGap"},columnGap:{type:"spacing",property:"columnGap"},align:{type:"identity",property:"alignItems"},justify:{type:"identity",property:"justifyContent"},wrap:{type:"identity",property:"flexWrap"},direction:{type:"identity",property:"flexDirection"}};var yie={root:"m_8bffd616"};const vie=Un((e,r)=>{const n=ze("Flex",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,gap:d,rowGap:u,columnGap:p,align:f,justify:m,wrap:v,direction:w,attributes:x,...k}=n,C=dt({name:"Flex",classes:yie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:x,vars:c}),_=uo(),$=P0(),R=Fne({styleProps:{gap:d,rowGap:u,columnGap:p,align:f,justify:m,wrap:v,direction:w},theme:_,data:kit});return y.jsxs(y.Fragment,{children:[R.hasResponsiveStyles&&y.jsx(Vg,{selector:`.${$}`,styles:R.styles,media:R.media}),y.jsx(Ae,{ref:r,...C("root",{className:$,style:Vd(R.inlineStyles)}),...k})]})});vie.classes=yie,vie.displayName="@mantine/core/Flex";function _it(e,r){if(!r||!e)return!1;let n=r.parentNode;for(;n!=null;){if(n===e)return!0;n=n.parentNode}return!1}function Sit({target:e,parent:r,ref:n,displayAfterTransitionEnd:o}){const i=S.useRef(-1),[a,l]=S.useState(!1),[s,c]=S.useState(typeof o=="boolean"?o:!1),d=()=>{if(!e||!r||!n.current)return;const m=e.getBoundingClientRect(),v=r.getBoundingClientRect(),w=window.getComputedStyle(e),x=window.getComputedStyle(r),k=Gd(w.borderTopWidth)+Gd(x.borderTopWidth),C=Gd(w.borderLeftWidth)+Gd(x.borderLeftWidth),_={top:m.top-v.top-k,left:m.left-v.left-C,width:m.width,height:m.height};n.current.style.transform=`translateY(${_.top}px) translateX(${_.left}px)`,n.current.style.width=`${_.width}px`,n.current.style.height=`${_.height}px`},u=()=>{window.clearTimeout(i.current),n.current&&(n.current.style.transitionDuration="0ms"),d(),i.current=window.setTimeout(()=>{n.current&&(n.current.style.transitionDuration="")},30)},p=S.useRef(null),f=S.useRef(null);return S.useEffect(()=>{if(d(),e)return p.current=new ResizeObserver(u),p.current.observe(e),r&&(f.current=new ResizeObserver(u),f.current.observe(r)),()=>{p.current?.disconnect(),f.current?.disconnect()}},[r,e]),S.useEffect(()=>{if(r){const m=v=>{_it(v.target,r)&&(u(),c(!1))};return r.addEventListener("transitionend",m),()=>{r.removeEventListener("transitionend",m)}}},[r]),vtt(()=>{ktt()!=="test"&&l(!0)},20,{autoInvoke:!0}),xtt(m=>{m.forEach(v=>{v.type==="attributes"&&v.attributeName==="dir"&&u()})},{attributes:!0,attributeFilter:["dir"]},()=>document.documentElement),{initialized:a,hidden:s}}var bie={root:"m_96b553a6"};const Eit=(e,{transitionDuration:r})=>({root:{"--transition-duration":typeof r=="number"?`${r}ms`:r}}),OT=We((e,r)=>{const n=ze("FloatingIndicator",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,target:d,parent:u,transitionDuration:p,mod:f,displayAfterTransitionEnd:m,attributes:v,...w}=n,x=dt({name:"FloatingIndicator",classes:bie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:Eit}),k=S.useRef(null),{initialized:C,hidden:_}=Sit({target:d,parent:u,ref:k,displayAfterTransitionEnd:m}),$=on(r,k);return!d||!u?null:y.jsx(Ae,{ref:$,mod:[{initialized:C,hidden:_},f],...x("root"),...w})});OT.displayName="@mantine/core/FloatingIndicator",OT.classes=bie;function Cit({open:e,close:r,openDelay:n,closeDelay:o}){const i=S.useRef(-1),a=S.useRef(-1),l=()=>{window.clearTimeout(i.current),window.clearTimeout(a.current)},s=()=>{l(),n===0||n===void 0?e():i.current=window.setTimeout(e,n)},c=()=>{l(),o===0||o===void 0?r():a.current=window.setTimeout(r,o)};return S.useEffect(()=>l,[]),{openDropdown:s,closeDropdown:c}}function LT({style:e,size:r=16,...n}){return y.jsx("svg",{viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{...e,width:Ne(r),height:Ne(r),display:"block"},...n,children:y.jsx("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}LT.displayName="@mantine/core/AccordionChevron";var xie={root:"m_66836ed3",wrapper:"m_a5d60502",body:"m_667c2793",title:"m_6a03f287",label:"m_698f4f23",icon:"m_667f2a6a",message:"m_7fa78076",closeButton:"m_87f54839"};const $it=(e,{radius:r,color:n,variant:o,autoContrast:i})=>{const a=e.variantColorResolver({color:n||e.primaryColor,theme:e,variant:o||"light",autoContrast:i});return{root:{"--alert-radius":r===void 0?void 0:hn(r),"--alert-bg":n||o?a.background:void 0,"--alert-color":a.color,"--alert-bd":n||o?a.border:void 0}}},wie=We((e,r)=>{const n=ze("Alert",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,radius:d,color:u,title:p,children:f,id:m,icon:v,withCloseButton:w,onClose:x,closeButtonLabel:k,variant:C,autoContrast:_,role:$,attributes:R,...T}=n,A=dt({name:"Alert",classes:xie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:R,vars:c,varsResolver:$it}),z=bl(m),j=p&&`${z}-title`||void 0,I=`${z}-body`;return y.jsx(Ae,{id:z,...A("root",{variant:C}),variant:C,ref:r,role:$||"alert",...T,"aria-describedby":f?I:void 0,"aria-labelledby":p?j:void 0,children:y.jsxs("div",{...A("wrapper"),children:[v&&y.jsx("div",{...A("icon"),children:v}),y.jsxs("div",{...A("body"),children:[p&&y.jsx("div",{...A("title"),"data-with-close-button":w||void 0,children:y.jsx("span",{id:j,...A("label"),children:p})}),f&&y.jsx("div",{id:I,...A("message"),"data-variant":C,children:f})]}),w&&y.jsx(Hp,{...A("closeButton"),onClick:x,variant:"transparent",size:16,iconSize:16,"aria-label":k,unstyled:s})]})})});wie.classes=xie,wie.displayName="@mantine/core/Alert";var kie={root:"m_b6d8b162"};function Rit(e){if(e==="start")return"start";if(e==="end"||e)return"end"}const zit={inherit:!1},Tit=(e,{variant:r,lineClamp:n,gradient:o,size:i,color:a})=>({root:{"--text-fz":zo(i),"--text-lh":Zet(i),"--text-gradient":r==="gradient"?Itt(o,e):void 0,"--text-line-clamp":typeof n=="number"?n.toString():void 0,"--text-color":a?Uo(a,e):void 0}}),L0=Un((e,r)=>{const n=ze("Text",zit,e),{lineClamp:o,truncate:i,inline:a,inherit:l,gradient:s,span:c,__staticSelector:d,vars:u,className:p,style:f,classNames:m,styles:v,unstyled:w,variant:x,mod:k,size:C,attributes:_,...$}=n,R=dt({name:["Text",d],props:n,classes:kie,className:p,style:f,classNames:m,styles:v,unstyled:w,attributes:_,vars:u,varsResolver:Tit});return y.jsx(Ae,{...R("root",{focusable:!0}),ref:r,component:c?"span":"p",variant:x,mod:[{"data-truncate":Rit(i),"data-line-clamp":typeof o=="number","data-inline":a,"data-inherit":l},k],size:C,...$})});L0.classes=kie,L0.displayName="@mantine/core/Text";var _ie={root:"m_849cf0da"};const jit={underline:"hover"},Sie=Un((e,r)=>{const{underline:n,className:o,unstyled:i,mod:a,...l}=ze("Anchor",jit,e);return y.jsx(L0,{component:"a",ref:r,className:no({[_ie.root]:!i},o),...l,mod:[{underline:n},a],__staticSelector:"Anchor",unstyled:i})});Sie.classes=_ie,Sie.displayName="@mantine/core/Anchor";function Eie(e){return typeof e=="string"?{value:e,label:e}:"value"in e&&!("label"in e)?{value:e.value,label:e.value,disabled:e.disabled}:typeof e=="number"?{value:e.toString(),label:e.toString()}:"group"in e?{group:e.group,items:e.items.map(r=>Eie(r))}:e}function Ait(e){return e?e.map(r=>Eie(r)):[]}function Cie(e){return e.reduce((r,n)=>"group"in n?{...r,...Cie(n.items)}:(r[n.value]=n,r),{})}var Wo={dropdown:"m_88b62a41",search:"m_985517d8",options:"m_b2821a6e",option:"m_92253aa5",empty:"m_2530cd1d",header:"m_858f94bd",footer:"m_82b967cb",group:"m_254f3e4f",groupLabel:"m_2bb2e9e5",chevron:"m_2943220b",optionsDropdownOption:"m_390b5f4",optionsDropdownCheckIcon:"m_8ee53fc2",optionsDropdownCheckPlaceholder:"m_a530ee0a"};const Dit={error:null},Pit=(e,{size:r,color:n})=>({chevron:{"--combobox-chevron-size":Qt(r,"combobox-chevron-size"),"--combobox-chevron-color":n?Uo(n,e):void 0}}),FT=We((e,r)=>{const n=ze("ComboboxChevron",Dit,e),{size:o,error:i,style:a,className:l,classNames:s,styles:c,unstyled:d,vars:u,mod:p,...f}=n,m=dt({name:"ComboboxChevron",classes:Wo,props:n,style:a,className:l,classNames:s,styles:c,unstyled:d,vars:u,varsResolver:Pit,rootSelector:"chevron"});return y.jsx(Ae,{component:"svg",...f,...m("chevron"),size:o,viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",mod:["combobox-chevron",{error:i},p],ref:r,children:y.jsx("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})});FT.classes=Wo,FT.displayName="@mantine/core/ComboboxChevron";const[Mit,$a]=Di("Combobox component was not found in tree"),$ie=S.forwardRef(({size:e,onMouseDown:r,onClick:n,onClear:o,...i},a)=>y.jsx(ci.ClearButton,{ref:a,tabIndex:-1,"aria-hidden":!0,...i,onMouseDown:l=>{l.preventDefault(),r?.(l)},onClick:l=>{o(),n?.(l)}}));$ie.displayName="@mantine/core/ComboboxClearButton";const VT=We((e,r)=>{const{classNames:n,styles:o,className:i,style:a,hidden:l,...s}=ze("ComboboxDropdown",null,e),c=$a();return y.jsx(po.Dropdown,{...s,ref:r,role:"presentation","data-hidden":l||void 0,...c.getStyles("dropdown",{className:i,style:a,classNames:n,styles:o})})});VT.classes=Wo,VT.displayName="@mantine/core/ComboboxDropdown";const Nit={refProp:"ref"},Rie=We((e,r)=>{const{children:n,refProp:o}=ze("ComboboxDropdownTarget",Nit,e);if($a(),!E4(n))throw new Error("Combobox.DropdownTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return y.jsx(po.Target,{ref:r,refProp:o,children:n})});Rie.displayName="@mantine/core/ComboboxDropdownTarget";const qT=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=ze("ComboboxEmpty",null,e),c=$a();return y.jsx(Ae,{ref:r,...c.getStyles("empty",{className:o,classNames:n,styles:a,style:i}),...s})});qT.classes=Wo,qT.displayName="@mantine/core/ComboboxEmpty";function HT({onKeyDown:e,withKeyboardNavigation:r,withAriaAttributes:n,withExpandedAttribute:o,targetType:i,autoComplete:a}){const l=$a(),[s,c]=S.useState(null),d=u=>{if(e?.(u),!l.readOnly&&r){if(u.nativeEvent.isComposing)return;if(u.nativeEvent.code==="ArrowDown"&&(u.preventDefault(),l.store.dropdownOpened?c(l.store.selectNextOption()):(l.store.openDropdown("keyboard"),c(l.store.selectActiveOption()),l.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),u.nativeEvent.code==="ArrowUp"&&(u.preventDefault(),l.store.dropdownOpened?c(l.store.selectPreviousOption()):(l.store.openDropdown("keyboard"),c(l.store.selectActiveOption()),l.store.updateSelectedOptionIndex("selected",{scrollIntoView:!0}))),u.nativeEvent.code==="Enter"||u.nativeEvent.code==="NumpadEnter"){if(u.nativeEvent.keyCode===229)return;const p=l.store.getSelectedOptionIndex();l.store.dropdownOpened&&p!==-1?(u.preventDefault(),l.store.clickSelectedOption()):i==="button"&&(u.preventDefault(),l.store.openDropdown("keyboard"))}u.key==="Escape"&&l.store.closeDropdown("keyboard"),u.nativeEvent.code==="Space"&&i==="button"&&(u.preventDefault(),l.store.toggleDropdown("keyboard"))}};return{...n?{"aria-haspopup":"listbox","aria-expanded":o?!!(l.store.listId&&l.store.dropdownOpened):void 0,"aria-controls":l.store.dropdownOpened&&l.store.listId?l.store.listId:void 0,"aria-activedescendant":l.store.dropdownOpened&&s||void 0,autoComplete:a,"data-expanded":l.store.dropdownOpened||void 0,"data-mantine-stop-propagation":l.store.dropdownOpened||void 0}:{},onKeyDown:d}}const Bit={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},zie=We((e,r)=>{const{children:n,refProp:o,withKeyboardNavigation:i,withAriaAttributes:a,withExpandedAttribute:l,targetType:s,autoComplete:c,...d}=ze("ComboboxEventsTarget",Bit,e),u=Wd(n);if(!u)throw new Error("Combobox.EventsTarget component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const p=$a(),f=HT({targetType:s,withAriaAttributes:a,withKeyboardNavigation:i,withExpandedAttribute:l,onKeyDown:u.props.onKeyDown,autoComplete:c});return S.cloneElement(u,{...f,...d,[o]:on(r,p.store.targetRef,R4(u))})});zie.displayName="@mantine/core/ComboboxEventsTarget";const UT=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=ze("ComboboxFooter",null,e),c=$a();return y.jsx(Ae,{ref:r,...c.getStyles("footer",{className:o,classNames:n,style:i,styles:a}),...s,onMouseDown:d=>{d.preventDefault()}})});UT.classes=Wo,UT.displayName="@mantine/core/ComboboxFooter";const WT=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,children:s,label:c,id:d,...u}=ze("ComboboxGroup",null,e),p=$a(),f=bl(d);return y.jsxs(Ae,{ref:r,role:"group","aria-labelledby":c?f:void 0,...p.getStyles("group",{className:o,classNames:n,style:i,styles:a}),...u,children:[c&&y.jsx("div",{id:f,...p.getStyles("groupLabel",{classNames:n,styles:a}),children:c}),s]})});WT.classes=Wo,WT.displayName="@mantine/core/ComboboxGroup";const GT=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=ze("ComboboxHeader",null,e),c=$a();return y.jsx(Ae,{ref:r,...c.getStyles("header",{className:o,classNames:n,style:i,styles:a}),...s,onMouseDown:d=>{d.preventDefault()}})});GT.classes=Wo,GT.displayName="@mantine/core/ComboboxHeader";function Tie({value:e,valuesDivider:r=",",...n}){return y.jsx("input",{type:"hidden",value:Array.isArray(e)?e.join(r):e||"",...n})}Tie.displayName="@mantine/core/ComboboxHiddenInput";const YT=We((e,r)=>{const n=ze("ComboboxOption",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,onClick:c,id:d,active:u,onMouseDown:p,onMouseOver:f,disabled:m,selected:v,mod:w,...x}=n,k=$a(),C=S.useId(),_=d||C;return y.jsx(Ae,{...k.getStyles("option",{className:i,classNames:o,styles:l,style:a}),...x,ref:r,id:_,mod:["combobox-option",{"combobox-active":u,"combobox-disabled":m,"combobox-selected":v},w],role:"option",onClick:$=>{m?$.preventDefault():(k.onOptionSubmit?.(n.value,n),c?.($))},onMouseDown:$=>{$.preventDefault(),p?.($)},onMouseOver:$=>{k.resetSelectionOnOptionHover&&k.store.resetSelectedOption(),f?.($)}})});YT.classes=Wo,YT.displayName="@mantine/core/ComboboxOption";const XT=We((e,r)=>{const n=ze("ComboboxOptions",null,e),{classNames:o,className:i,style:a,styles:l,id:s,onMouseDown:c,labelledBy:d,...u}=n,p=$a(),f=bl(s);return S.useEffect(()=>{p.store.setListId(f)},[f]),y.jsx(Ae,{ref:r,...p.getStyles("options",{className:i,style:a,classNames:o,styles:l}),...u,id:f,role:"listbox","aria-labelledby":d,onMouseDown:m=>{m.preventDefault(),c?.(m)}})});XT.classes=Wo,XT.displayName="@mantine/core/ComboboxOptions";const Iit={withAriaAttributes:!0,withKeyboardNavigation:!0},KT=We((e,r)=>{const n=ze("ComboboxSearch",Iit,e),{classNames:o,styles:i,unstyled:a,vars:l,withAriaAttributes:s,onKeyDown:c,withKeyboardNavigation:d,size:u,...p}=n,f=$a(),m=f.getStyles("search"),v=HT({targetType:"input",withAriaAttributes:s,withKeyboardNavigation:d,withExpandedAttribute:!1,onKeyDown:c,autoComplete:"off"});return y.jsx(ci,{ref:on(r,f.store.searchRef),classNames:[{input:m.className},o],styles:[{input:m.style},i],size:u||f.size,...v,...p,__staticSelector:"Combobox"})});KT.classes=Wo,KT.displayName="@mantine/core/ComboboxSearch";const Oit={refProp:"ref",targetType:"input",withKeyboardNavigation:!0,withAriaAttributes:!0,withExpandedAttribute:!1,autoComplete:"off"},jie=We((e,r)=>{const{children:n,refProp:o,withKeyboardNavigation:i,withAriaAttributes:a,withExpandedAttribute:l,targetType:s,autoComplete:c,...d}=ze("ComboboxTarget",Oit,e),u=Wd(n);if(!u)throw new Error("Combobox.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const p=$a(),f=HT({targetType:s,withAriaAttributes:a,withKeyboardNavigation:i,withExpandedAttribute:l,onKeyDown:u.props.onKeyDown,autoComplete:c}),m=S.cloneElement(u,{...f,...d});return y.jsx(po.Target,{ref:on(r,p.store.targetRef),children:m})});jie.displayName="@mantine/core/ComboboxTarget";function Lit(e,r,n){for(let o=e-1;o>=0;o-=1)if(!r[o].hasAttribute("data-combobox-disabled"))return o;if(n){for(let o=r.length-1;o>-1;o-=1)if(!r[o].hasAttribute("data-combobox-disabled"))return o}return e}function Fit(e,r,n){for(let o=e+1;o{s||(c(!0),i?.(B))},[c,i,s]),k=S.useCallback((B="unknown")=>{s&&(c(!1),o?.(B))},[c,o,s]),C=S.useCallback((B="unknown")=>{s?k(B):x(B)},[k,x,s]),_=S.useCallback(()=>{const B=Ud(f.current),F=z4(`#${d.current} [data-combobox-selected]`,B);F?.removeAttribute("data-combobox-selected"),F?.removeAttribute("aria-selected")},[]),$=S.useCallback(B=>{const F=Ud(f.current),q=z4(`#${d.current}`,F),G=q?Hd("[data-combobox-option]",q):null;if(!G)return null;const U=B>=G.length?0:B<0?G.length-1:B;return u.current=U,G?.[U]&&!G[U].hasAttribute("data-combobox-disabled")?(_(),G[U].setAttribute("data-combobox-selected","true"),G[U].setAttribute("aria-selected","true"),G[U].scrollIntoView({block:"nearest",behavior:l}),G[U].id):null},[l,_]),R=S.useCallback(()=>{const B=Ud(f.current),F=z4(`#${d.current} [data-combobox-active]`,B);if(F){const q=Hd(`#${d.current} [data-combobox-option]`,B).findIndex(G=>G===F);return $(q)}return $(0)},[$]),T=S.useCallback(()=>{const B=Ud(f.current),F=Hd(`#${d.current} [data-combobox-option]`,B);return $(Fit(u.current,F,a))},[$,a]),A=S.useCallback(()=>{const B=Ud(f.current),F=Hd(`#${d.current} [data-combobox-option]`,B);return $(Lit(u.current,F,a))},[$,a]),z=S.useCallback(()=>{const B=Ud(f.current),F=Hd(`#${d.current} [data-combobox-option]`,B);return $(Vit(F))},[$]),j=S.useCallback((B="selected",F)=>{w.current=window.setTimeout(()=>{const q=Ud(f.current),G=Hd(`#${d.current} [data-combobox-option]`,q),U=G.findIndex(Y=>Y.hasAttribute(`data-combobox-${B}`));u.current=U,F?.scrollIntoView&&G[U]?.scrollIntoView({block:"nearest",behavior:l})},0)},[]),I=S.useCallback(()=>{u.current=-1,_()},[_]),N=S.useCallback(()=>{const B=Ud(f.current);Hd(`#${d.current} [data-combobox-option]`,B)?.[u.current]?.click()},[]),L=S.useCallback(B=>{d.current=B},[]),H=S.useCallback(()=>{m.current=window.setTimeout(()=>p.current?.focus(),0)},[]),P=S.useCallback(()=>{v.current=window.setTimeout(()=>f.current?.focus(),0)},[]),V=S.useCallback(()=>u.current,[]);return S.useEffect(()=>()=>{window.clearTimeout(m.current),window.clearTimeout(v.current),window.clearTimeout(w.current)},[]),{dropdownOpened:s,openDropdown:x,closeDropdown:k,toggleDropdown:C,selectedOptionIndex:u.current,getSelectedOptionIndex:V,selectOption:$,selectFirstOption:z,selectActiveOption:R,selectNextOption:T,selectPreviousOption:A,resetSelectedOption:I,updateSelectedOptionIndex:j,listId:d.current,setListId:L,clickSelectedOption:N,searchRef:p,focusSearchInput:H,targetRef:f,focusTarget:P}}const qit={keepMounted:!0,withinPortal:!0,resetSelectionOnOptionHover:!1,width:"target",transitionProps:{transition:"fade",duration:0},size:"sm"},Hit=(e,{size:r,dropdownPadding:n})=>({options:{"--combobox-option-fz":zo(r),"--combobox-option-padding":Qt(r,"combobox-option-padding")},dropdown:{"--combobox-padding":n===void 0?void 0:Ne(n),"--combobox-option-fz":zo(r),"--combobox-option-padding":Qt(r,"combobox-option-padding")}});function xr(e){const r=ze("Combobox",qit,e),{classNames:n,styles:o,unstyled:i,children:a,store:l,vars:s,onOptionSubmit:c,onClose:d,size:u,dropdownPadding:p,resetSelectionOnOptionHover:f,__staticSelector:m,readOnly:v,attributes:w,...x}=r,k=Aie(),C=l||k,_=dt({name:m||"Combobox",classes:Wo,props:r,classNames:n,styles:o,unstyled:i,attributes:w,vars:s,varsResolver:Hit}),$=()=>{d?.(),C.closeDropdown()};return y.jsx(Mit,{value:{getStyles:_,store:C,onOptionSubmit:c,size:u,resetSelectionOnOptionHover:f,readOnly:v},children:y.jsx(po,{opened:C.dropdownOpened,preventPositionChangeWhenVisible:!0,...x,onChange:R=>!R&&$(),withRoles:!1,unstyled:i,children:a})})}const Uit=e=>e;xr.extend=Uit,xr.classes=Wo,xr.displayName="@mantine/core/Combobox",xr.Target=jie,xr.Dropdown=VT,xr.Options=XT,xr.Option=YT,xr.Search=KT,xr.Empty=qT,xr.Chevron=FT,xr.Footer=UT,xr.Header=GT,xr.EventsTarget=zie,xr.DropdownTarget=Rie,xr.Group=WT,xr.ClearButton=$ie,xr.HiddenInput=Tie;function Wit({size:e,style:r,...n}){const o=e!==void 0?{width:Ne(e),height:Ne(e),...r}:r;return y.jsx("svg",{viewBox:"0 0 10 7",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:o,"aria-hidden":!0,...n,children:y.jsx("path",{d:"M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"})})}function F0(e){return"group"in e}function Die({options:e,search:r,limit:n}){const o=r.trim().toLowerCase(),i=[];for(let a=0;a0)return!1;return!0}function Pie(e,r=new Set){if(Array.isArray(e))for(const n of e)if(F0(n))Pie(n.items,r);else{if(typeof n.value>"u")throw new Error("[@mantine/core] Each option must have value property");if(typeof n.value!="string")throw new Error(`[@mantine/core] Option value must be a string, other data formats are not supported, got ${typeof n.value}`);if(r.has(n.value))throw new Error(`[@mantine/core] Duplicate options are not supported. Option with value "${n.value}" was provided more than once`);r.add(n.value)}}function Yit(e,r){return Array.isArray(e)?e.includes(r):e===r}function Mie({data:e,withCheckIcon:r,withAlignedLabels:n,value:o,checkIconPosition:i,unstyled:a,renderOption:l}){if(!F0(e)){const c=Yit(o,e.value),d=r&&(c?y.jsx(Wit,{className:Wo.optionsDropdownCheckIcon}):n?y.jsx("div",{className:Wo.optionsDropdownCheckPlaceholder}):null),u=y.jsxs(y.Fragment,{children:[i==="left"&&d,y.jsx("span",{children:e.label}),i==="right"&&d]});return y.jsx(xr.Option,{value:e.value,disabled:e.disabled,className:no({[Wo.optionsDropdownOption]:!a}),"data-reverse":i==="right"||void 0,"data-checked":c||void 0,"aria-selected":c,active:c,children:typeof l=="function"?l({option:e,checked:c}):u})}const s=e.items.map(c=>y.jsx(Mie,{data:c,value:o,unstyled:a,withCheckIcon:r,withAlignedLabels:n,checkIconPosition:i,renderOption:l},c.value));return y.jsx(xr.Group,{label:e.group,children:s})}function Xit({data:e,hidden:r,hiddenWhenEmpty:n,filter:o,search:i,limit:a,maxDropdownHeight:l,withScrollArea:s=!0,filterOptions:c=!0,withCheckIcon:d=!1,withAlignedLabels:u=!1,value:p,checkIconPosition:f,nothingFoundMessage:m,unstyled:v,labelId:w,renderOption:x,scrollAreaProps:k,"aria-label":C}){Pie(e);const _=typeof i=="string"?(o||Die)({options:e,search:c?i:"",limit:a??1/0}):e,$=Git(_),R=_.map(T=>y.jsx(Mie,{data:T,withCheckIcon:d,withAlignedLabels:u,value:p,checkIconPosition:f,unstyled:v,renderOption:x},F0(T)?T.group:T.value));return y.jsx(xr.Dropdown,{hidden:r||n&&$,"data-composed":!0,children:y.jsxs(xr.Options,{labelledBy:w,"aria-label":C,children:[s?y.jsx(Fp.Autosize,{mah:l??220,type:"scroll",scrollbarSize:"var(--combobox-padding)",offsetScrollbars:"y",...k,children:R}):R,$&&m&&y.jsx(xr.Empty,{children:m})]})})}var Nie={root:"m_347db0ec","root--dot":"m_fbd81e3d",label:"m_5add502a",section:"m_91fdda9b"};const Kit=(e,{radius:r,color:n,gradient:o,variant:i,size:a,autoContrast:l,circle:s})=>{const c=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:l});return{root:{"--badge-height":Qt(a,"badge-height"),"--badge-padding-x":Qt(a,"badge-padding-x"),"--badge-fz":Qt(a,"badge-fz"),"--badge-radius":s||r===void 0?void 0:hn(r),"--badge-bg":n||i?c.background:void 0,"--badge-color":n||i?c.color:void 0,"--badge-bd":n||i?c.border:void 0,"--badge-dot-color":i==="dot"?Uo(n,e):void 0}}},Bie=Un((e,r)=>{const n=ze("Badge",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,radius:d,color:u,gradient:p,leftSection:f,rightSection:m,children:v,variant:w,fullWidth:x,autoContrast:k,circle:C,mod:_,attributes:$,...R}=n,T=dt({name:"Badge",props:n,classes:Nie,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:$,vars:c,varsResolver:Kit});return y.jsxs(Ae,{variant:w,mod:[{block:x,circle:C,"with-right-section":!!m,"with-left-section":!!f},_],...T("root",{variant:w}),ref:r,...R,children:[f&&y.jsx("span",{...T("section"),"data-position":"left",children:f}),y.jsx("span",{...T("label"),children:v}),m&&y.jsx("span",{...T("section"),"data-position":"right",children:m})]})});Bie.classes=Nie,Bie.displayName="@mantine/core/Badge";var Iie={root:"m_8b3717df",breadcrumb:"m_f678d540",separator:"m_3b8f2208"};const Zit={separator:"/"},Qit=(e,{separatorMargin:r})=>({root:{"--bc-separator-margin":ro(r)}}),Oie=We((e,r)=>{const n=ze("Breadcrumbs",Zit,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,children:d,separator:u,separatorMargin:p,attributes:f,...m}=n,v=dt({name:"Breadcrumbs",classes:Iie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:f,vars:c,varsResolver:Qit}),w=S.Children.toArray(d).reduce((x,k,C,_)=>{const $=E4(k)?S.cloneElement(k,{...v("breadcrumb",{className:k.props?.className}),key:C}):S.createElement("div",{...v("breadcrumb"),key:C},k);return x.push($),C!==_.length-1&&x.push(S.createElement(Ae,{...v("separator"),key:`separator-${C}`},u)),x},[]);return y.jsx(Ae,{ref:r,...v("root"),...m,children:w})});Oie.classes=Iie,Oie.displayName="@mantine/core/Breadcrumbs";var Lie={root:"m_fea6bf1a",burger:"m_d4fb9cad"};const Jit=(e,{color:r,size:n,lineSize:o,transitionDuration:i,transitionTimingFunction:a})=>({root:{"--burger-color":r?Uo(r,e):void 0,"--burger-size":Qt(n,"burger-size"),"--burger-line-size":o?Ne(o):void 0,"--burger-transition-duration":i===void 0?void 0:`${i}ms`,"--burger-transition-timing-function":a}}),Fie=We((e,r)=>{const n=ze("Burger",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,opened:d,children:u,transitionDuration:p,transitionTimingFunction:f,lineSize:m,attributes:v,...w}=n,x=dt({name:"Burger",classes:Lie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:Jit});return y.jsxs(hs,{...x("root"),ref:r,...w,children:[y.jsx(Ae,{mod:["reduce-motion",{opened:d}],...x("burger")}),u]})});Fie.classes=Lie,Fie.displayName="@mantine/core/Burger";var Qg={root:"m_77c9d27d",inner:"m_80f1301b",label:"m_811560b9",section:"m_a74036a",loader:"m_a25b86ee",group:"m_80d6d844",groupSection:"m_70be2a01"};const Vie={orientation:"horizontal"},eat=(e,{borderWidth:r})=>({group:{"--button-border-width":Ne(r)}}),ZT=We((e,r)=>{const n=ze("ButtonGroup",Vie,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,orientation:c,vars:d,borderWidth:u,variant:p,mod:f,attributes:m,...v}=ze("ButtonGroup",Vie,e),w=dt({name:"ButtonGroup",props:n,classes:Qg,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:d,varsResolver:eat,rootSelector:"group"});return y.jsx(Ae,{...w("group"),ref:r,variant:p,mod:[{"data-orientation":c},f],role:"group",...v})});ZT.classes=Qg,ZT.displayName="@mantine/core/ButtonGroup";const tat=(e,{radius:r,color:n,gradient:o,variant:i,autoContrast:a,size:l})=>{const s=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:a});return{groupSection:{"--section-height":Qt(l,"section-height"),"--section-padding-x":Qt(l,"section-padding-x"),"--section-fz":l?.includes("compact")?zo(l.replace("compact-","")):zo(l),"--section-radius":r===void 0?void 0:hn(r),"--section-bg":n||i?s.background:void 0,"--section-color":s.color,"--section-bd":n||i?s.border:void 0}}},QT=We((e,r)=>{const n=ze("ButtonGroupSection",null,e),{className:o,style:i,classNames:a,styles:l,unstyled:s,vars:c,variant:d,gradient:u,radius:p,autoContrast:f,attributes:m,...v}=n,w=dt({name:"ButtonGroupSection",props:n,classes:Qg,className:o,style:i,classNames:a,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:tat,rootSelector:"groupSection"});return y.jsx(Ae,{...w("groupSection"),ref:r,variant:d,...v})});QT.classes=Qg,QT.displayName="@mantine/core/ButtonGroupSection";const rat={in:{opacity:1,transform:`translate(-50%, calc(-50% + ${Ne(1)}))`},out:{opacity:0,transform:"translate(-50%, -200%)"},common:{transformOrigin:"center"},transitionProperty:"transform, opacity"},nat=(e,{radius:r,color:n,gradient:o,variant:i,size:a,justify:l,autoContrast:s})=>{const c=e.variantColorResolver({color:n||e.primaryColor,theme:e,gradient:o,variant:i||"filled",autoContrast:s});return{root:{"--button-justify":l,"--button-height":Qt(a,"button-height"),"--button-padding-x":Qt(a,"button-padding-x"),"--button-fz":a?.includes("compact")?zo(a.replace("compact-","")):zo(a),"--button-radius":r===void 0?void 0:hn(r),"--button-bg":n||i?c.background:void 0,"--button-hover":n||i?c.hover:void 0,"--button-color":c.color,"--button-bd":n||i?c.border:void 0,"--button-hover-color":n||i?c.hoverColor:void 0}}},l5=Un((e,r)=>{const n=ze("Button",null,e),{style:o,vars:i,className:a,color:l,disabled:s,children:c,leftSection:d,rightSection:u,fullWidth:p,variant:f,radius:m,loading:v,loaderProps:w,gradient:x,classNames:k,styles:C,unstyled:_,"data-disabled":$,autoContrast:R,mod:T,attributes:A,...z}=n,j=dt({name:"Button",props:n,classes:Qg,className:a,style:o,classNames:k,styles:C,unstyled:_,attributes:A,vars:i,varsResolver:nat}),I=!!d,N=!!u;return y.jsxs(hs,{ref:r,...j("root",{active:!s&&!v&&!$}),unstyled:_,variant:f,disabled:s||v,mod:[{disabled:s||$,loading:v,block:p,"with-left-section":I,"with-right-section":N},T],...z,children:[typeof v=="boolean"&&y.jsx(_l,{mounted:v,transition:rat,duration:150,children:L=>y.jsx(Ae,{component:"span",...j("loader",{style:L}),"aria-hidden":!0,children:y.jsx(qp,{color:"var(--button-color)",size:"calc(var(--button-height) / 1.8)",...w})})}),y.jsxs("span",{...j("inner"),children:[d&&y.jsx(Ae,{component:"span",...j("section"),mod:{position:"left"},children:d}),y.jsx(Ae,{component:"span",mod:{loading:v},...j("label"),children:c}),u&&y.jsx(Ae,{component:"span",...j("section"),mod:{position:"right"},children:u})]})]})});l5.classes=Qg,l5.displayName="@mantine/core/Button",l5.Group=ZT,l5.GroupSection=QT;const[oat,iat]=Di("Card component was not found in tree");var JT={root:"m_e615b15f",section:"m_599a2148"};const s5=Un((e,r)=>{const n=ze("CardSection",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,withBorder:c,inheritPadding:d,mod:u,...p}=n,f=iat();return y.jsx(Ae,{ref:r,mod:[{"with-border":c,"inherit-padding":d},u],...f.getStyles("section",{className:i,style:a,styles:l,classNames:o}),...p})});s5.classes=JT,s5.displayName="@mantine/core/CardSection";const aat=(e,{padding:r})=>({root:{"--card-padding":ro(r)}}),ej=Un((e,r)=>{const n=ze("Card",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,children:d,padding:u,attributes:p,...f}=n,m=dt({name:"Card",props:n,classes:JT,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:aat}),v=S.Children.toArray(d),w=v.map((x,k)=>typeof x=="object"&&x&&"type"in x&&x.type===s5?S.cloneElement(x,{"data-first-section":k===0||void 0,"data-last-section":k===v.length-1||void 0}):x);return y.jsx(oat,{value:{getStyles:m},children:y.jsx(Z4,{ref:r,unstyled:s,...m("root"),...f,children:w})})});ej.classes=JT,ej.displayName="@mantine/core/Card",ej.Section=s5;var qie={root:"m_b183c0a2"};const lat=(e,{color:r})=>({root:{"--code-bg":r?Uo(r,e):void 0}}),Hie=We((e,r)=>{const n=ze("Code",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,block:u,variant:p,mod:f,attributes:m,...v}=n,w=dt({name:"Code",props:n,classes:qie,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:lat});return y.jsx(Ae,{component:u?"pre":"code",variant:p,ref:r,mod:[{block:u},f],...w("root"),...v,dir:"ltr"})});Hie.classes=qie,Hie.displayName="@mantine/core/Code";var Uie={root:"m_de3d2490",colorOverlay:"m_862f3d1b",shadowOverlay:"m_98ae7f22",alphaOverlay:"m_95709ac0",childrenOverlay:"m_93e74e3"};const Wie={withShadow:!0},sat=(e,{radius:r,size:n})=>({root:{"--cs-radius":r===void 0?void 0:hn(r),"--cs-size":Ne(n)}}),Gie=Un((e,r)=>{const n=ze("ColorSwatch",Wie,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,size:u,radius:p,withShadow:f,children:m,variant:v,attributes:w,...x}=ze("ColorSwatch",Wie,n),k=dt({name:"ColorSwatch",props:n,classes:Uie,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:w,vars:c,varsResolver:sat});return y.jsxs(Ae,{ref:r,variant:v,size:u,...k("root",{focusable:!0}),...x,children:[y.jsx("span",{...k("alphaOverlay")}),f&&y.jsx("span",{...k("shadowOverlay")}),y.jsx("span",{...k("colorOverlay",{style:{backgroundColor:d}})}),y.jsx("span",{...k("childrenOverlay"),children:m})]})});Gie.classes=Uie,Gie.displayName="@mantine/core/ColorSwatch";var Yie={root:"m_7485cace"};const cat=(e,{size:r,fluid:n})=>({root:{"--container-size":n?void 0:Qt(r,"container-size")}}),Xie=We((e,r)=>{const n=ze("Container",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,fluid:d,mod:u,attributes:p,strategy:f,...m}=n,v=dt({name:"Container",classes:Yie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:cat});return y.jsx(Ae,{ref:r,mod:[{fluid:d,strategy:f||"block"},u],...v("root"),...m})});Xie.classes=Yie,Xie.displayName="@mantine/core/Container";var Kie={root:"m_3eebeb36",label:"m_9e365f20"};const dat={orientation:"horizontal"},uat=(e,{color:r,variant:n,size:o})=>({root:{"--divider-color":r?Uo(r,e):void 0,"--divider-border-style":n,"--divider-size":Qt(o,"divider-size")}}),Zie=We((e,r)=>{const n=ze("Divider",dat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,orientation:u,label:p,labelPosition:f,mod:m,attributes:v,...w}=n,x=dt({name:"Divider",classes:Kie,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:uat});return y.jsx(Ae,{ref:r,mod:[{orientation:u,"with-label":!!p},m],...x("root"),...w,role:"separator",children:p&&y.jsx(Ae,{component:"span",mod:{position:f},...x("label"),children:p})})});Zie.classes=Kie,Zie.displayName="@mantine/core/Divider";const[pat,Jg]=Di("Drawer component was not found in tree");var wc={root:"m_f11b401e",header:"m_5a7c2c9",content:"m_b8a05bbd",inner:"m_31cd769a"};const c5=We((e,r)=>{const n=ze("DrawerBody",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=Jg();return y.jsx(PT,{ref:r,...d.getStyles("body",{classNames:o,style:a,styles:l,className:i}),...c})});c5.classes=wc,c5.displayName="@mantine/core/DrawerBody";const d5=We((e,r)=>{const n=ze("DrawerCloseButton",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=Jg();return y.jsx(uie,{ref:r,...d.getStyles("close",{classNames:o,style:a,styles:l,className:i}),...c})});d5.classes=wc,d5.displayName="@mantine/core/DrawerCloseButton";const u5=We((e,r)=>{const n=ze("DrawerContent",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,children:c,radius:d,__hidden:u,...p}=n,f=Jg(),m=f.scrollAreaComponent||fie;return y.jsx(MT,{...f.getStyles("content",{className:i,style:a,styles:l,classNames:o}),innerProps:f.getStyles("inner",{className:i,style:a,styles:l,classNames:o}),ref:r,...p,radius:d||f.radius||0,"data-hidden":u||void 0,children:y.jsx(m,{style:{height:"calc(100vh - var(--drawer-offset) * 2)"},children:c})})});u5.classes=wc,u5.displayName="@mantine/core/DrawerContent";const p5=We((e,r)=>{const n=ze("DrawerHeader",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=Jg();return y.jsx(pie,{ref:r,...d.getStyles("header",{classNames:o,style:a,styles:l,className:i}),...c})});p5.classes=wc,p5.displayName="@mantine/core/DrawerHeader";const h5=We((e,r)=>{const n=ze("DrawerOverlay",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=Jg();return y.jsx(NT,{ref:r,...d.getStyles("overlay",{classNames:o,style:a,styles:l,className:i}),...c})});h5.classes=wc,h5.displayName="@mantine/core/DrawerOverlay";function hat(e){switch(e){case"top":return"flex-start";case"bottom":return"flex-end";default:return}}function fat(e){if(e==="top"||e==="bottom")return"0 0 calc(100% - var(--drawer-offset, 0rem) * 2)"}const gat={top:"slide-down",bottom:"slide-up",left:"slide-right",right:"slide-left"},mat={top:"slide-down",bottom:"slide-up",right:"slide-right",left:"slide-left"},yat={closeOnClickOutside:!0,withinPortal:!0,lockScroll:!0,trapFocus:!0,returnFocus:!0,closeOnEscape:!0,keepMounted:!1,zIndex:yl("modal"),position:"left"},vat=(e,{position:r,size:n,offset:o})=>({root:{"--drawer-size":Qt(n,"drawer-size"),"--drawer-flex":fat(r),"--drawer-height":r==="left"||r==="right"?void 0:"var(--drawer-size)","--drawer-align":hat(r),"--drawer-justify":r==="right"?"flex-end":void 0,"--drawer-offset":Ne(o)}}),f5=We((e,r)=>{const n=ze("DrawerRoot",yat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,scrollAreaComponent:d,position:u,transitionProps:p,radius:f,attributes:m,...v}=n,{dir:w}=mc(),x=dt({name:"Drawer",classes:wc,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:vat}),k=(w==="rtl"?mat:gat)[u];return y.jsx(pat,{value:{scrollAreaComponent:d,getStyles:x,radius:f},children:y.jsx(DT,{ref:r,...x("root"),transitionProps:{transition:k,...p},"data-offset-scrollbars":d===Fp.Autosize||void 0,unstyled:s,...v})})});f5.classes=wc,f5.displayName="@mantine/core/DrawerRoot";const[bat,xat]=Bg();function Qie({children:e}){const[r,n]=S.useState([]),[o,i]=S.useState(yl("modal"));return y.jsx(bat,{value:{stack:r,addModal:(a,l)=>{n(s=>[...new Set([...s,a])]),i(s=>typeof l=="number"&&typeof s=="number"?Math.max(s,l):s)},removeModal:a=>n(l=>l.filter(s=>s!==a)),getZIndex:a=>`calc(${o} + ${r.indexOf(a)} + 1)`,currentId:r[r.length-1],maxZIndex:o},children:e})}Qie.displayName="@mantine/core/DrawerStack";const g5=We((e,r)=>{const n=ze("DrawerTitle",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=Jg();return y.jsx(hie,{ref:r,...d.getStyles("title",{classNames:o,style:a,styles:l,className:i}),...c})});g5.classes=wc,g5.displayName="@mantine/core/DrawerTitle";const wat={closeOnClickOutside:!0,withinPortal:!0,lockScroll:!0,trapFocus:!0,returnFocus:!0,closeOnEscape:!0,keepMounted:!1,zIndex:yl("modal"),withOverlay:!0,withCloseButton:!0},fs=We((e,r)=>{const{title:n,withOverlay:o,overlayProps:i,withCloseButton:a,closeButtonProps:l,children:s,opened:c,stackId:d,zIndex:u,...p}=ze("Drawer",wat,e),f=xat(),m=!!n||a,v=f&&d?{closeOnEscape:f.currentId===d,trapFocus:f.currentId===d,zIndex:f.getZIndex(d)}:{},w=o===!1?!1:d&&f?f.currentId===d:c;return S.useEffect(()=>{f&&d&&(c?f.addModal(d,u||yl("modal")):f.removeModal(d))},[c,d,u]),y.jsxs(f5,{ref:r,opened:c,zIndex:f&&d?f.getZIndex(d):u,...p,...v,children:[o&&y.jsx(h5,{visible:w,transitionProps:f&&d?{duration:0}:void 0,...i}),y.jsxs(u5,{__hidden:f&&d&&c?d!==f.currentId:!1,children:[m&&y.jsxs(p5,{children:[n&&y.jsx(g5,{children:n}),a&&y.jsx(d5,{...l})]}),y.jsx(c5,{children:s})]})]})});fs.classes=wc,fs.displayName="@mantine/core/Drawer",fs.Root=f5,fs.Overlay=h5,fs.Content=u5,fs.Body=c5,fs.Header=p5,fs.Title=g5,fs.CloseButton=d5,fs.Stack=Qie;const[Jie,eae]=Di("Grid component was not found in tree"),tj=(e,r)=>e==="content"?"auto":e==="auto"?"0rem":e?`${100/(r/e)}%`:void 0,tae=(e,r,n)=>n||e==="auto"?"100%":e==="content"?"unset":tj(e,r),rae=(e,r)=>{if(e)return e==="auto"||r?"1":"auto"},nae=(e,r)=>e===0?"0":e?`${100/(r/e)}%`:void 0;function kat({span:e,order:r,offset:n,selector:o}){const i=uo(),a=eae(),l=a.breakpoints||i.breakpoints,s=vl(e)===void 0?12:vl(e),c=Vd({"--col-order":vl(r)?.toString(),"--col-flex-grow":rae(s,a.grow),"--col-flex-basis":tj(s,a.columns),"--col-width":s==="content"?"auto":void 0,"--col-max-width":tae(s,a.columns,a.grow),"--col-offset":nae(vl(n),a.columns)}),d=Ro(l).reduce((p,f)=>(p[f]||(p[f]={}),typeof r=="object"&&r[f]!==void 0&&(p[f]["--col-order"]=r[f]?.toString()),typeof e=="object"&&e[f]!==void 0&&(p[f]["--col-flex-grow"]=rae(e[f],a.grow),p[f]["--col-flex-basis"]=tj(e[f],a.columns),p[f]["--col-width"]=e[f]==="content"?"auto":void 0,p[f]["--col-max-width"]=tae(e[f],a.columns,a.grow)),typeof n=="object"&&n[f]!==void 0&&(p[f]["--col-offset"]=nae(n[f],a.columns)),p),{}),u=Bz(Ro(d),l).filter(p=>Ro(d[p.value]).length>0).map(p=>({query:a.type==="container"?`mantine-grid (min-width: ${l[p.value]})`:`(min-width: ${l[p.value]})`,styles:d[p.value]}));return y.jsx(Vg,{styles:c,media:a.type==="container"?void 0:u,container:a.type==="container"?u:void 0,selector:o})}var rj={container:"m_8478a6da",root:"m_410352e9",inner:"m_dee7bd2f",col:"m_96bdd299"};const _at={span:12},nj=We((e,r)=>{const n=ze("GridCol",_at,e),{classNames:o,className:i,style:a,styles:l,vars:s,span:c,order:d,offset:u,...p}=n,f=eae(),m=P0();return y.jsxs(y.Fragment,{children:[y.jsx(kat,{selector:`.${m}`,span:c,order:d,offset:u}),y.jsx(Ae,{ref:r,...f.getStyles("col",{className:no(i,m),style:a,classNames:o,styles:l}),...p})]})});nj.classes=rj,nj.displayName="@mantine/core/GridCol";function oae({gutter:e,selector:r,breakpoints:n,type:o}){const i=uo(),a=n||i.breakpoints,l=Vd({"--grid-gutter":ro(vl(e))}),s=Ro(a).reduce((d,u)=>(d[u]||(d[u]={}),typeof e=="object"&&e[u]!==void 0&&(d[u]["--grid-gutter"]=ro(e[u])),d),{}),c=Bz(Ro(s),a).filter(d=>Ro(s[d.value]).length>0).map(d=>({query:o==="container"?`mantine-grid (min-width: ${a[d.value]})`:`(min-width: ${a[d.value]})`,styles:s[d.value]}));return y.jsx(Vg,{styles:l,media:o==="container"?void 0:c,container:o==="container"?c:void 0,selector:r})}const Sat={gutter:"md",grow:!1,columns:12},Eat=(e,{justify:r,align:n,overflow:o})=>({root:{"--grid-justify":r,"--grid-align":n,"--grid-overflow":o}}),oj=We((e,r)=>{const n=ze("Grid",Sat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,grow:d,gutter:u,columns:p,align:f,justify:m,children:v,breakpoints:w,type:x,attributes:k,...C}=n,_=dt({name:"Grid",classes:rj,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:k,vars:c,varsResolver:Eat}),$=P0();return x==="container"&&w?y.jsxs(Jie,{value:{getStyles:_,grow:d,columns:p,breakpoints:w,type:x},children:[y.jsx(oae,{selector:`.${$}`,...n}),y.jsx("div",{..._("container"),children:y.jsx(Ae,{ref:r,..._("root",{className:$}),...C,children:y.jsx("div",{..._("inner"),children:v})})})]}):y.jsxs(Jie,{value:{getStyles:_,grow:d,columns:p,breakpoints:w,type:x},children:[y.jsx(oae,{selector:`.${$}`,...n}),y.jsx(Ae,{ref:r,..._("root",{className:$}),...C,children:y.jsx("div",{..._("inner"),children:v})})]})});oj.classes=rj,oj.displayName="@mantine/core/Grid",oj.Col=nj;function iae({color:e,theme:r,defaultShade:n}){const o=Bp({color:e,theme:r});return o.isThemeColor?o.shade===void 0?`var(--mantine-color-${o.color}-${n})`:`var(${o.variable})`:e}var aae={root:"m_bcb3f3c2"};const Cat={color:"yellow"},$at=(e,{color:r})=>({root:{"--mark-bg-dark":iae({color:r,theme:e,defaultShade:5}),"--mark-bg-light":iae({color:r,theme:e,defaultShade:2})}}),ij=We((e,r)=>{const n=ze("Mark",Cat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,color:d,variant:u,attributes:p,...f}=n,m=dt({name:"Mark",props:n,className:i,style:a,classes:aae,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:$at});return y.jsx(Ae,{component:"mark",ref:r,variant:u,...m("root"),...f})});ij.classes=aae,ij.displayName="@mantine/core/Mark";function lae(e){return e.replace(/[-[\]{}()*+?.,\\^$|#]/g,"\\$&")}function Rat(e,r){if(r==null)return[{chunk:e,highlighted:!1}];const n=Array.isArray(r)?r.map(lae):lae(r);if(!(Array.isArray(n)?n.filter(a=>a.trim().length>0).length>0:n.trim()!==""))return[{chunk:e,highlighted:!1}];const o=typeof n=="string"?n.trim():n.filter(a=>a.trim().length!==0).map(a=>a.trim()).sort((a,l)=>l.length-a.length).join("|"),i=new RegExp(`(${o})`,"gi");return e.split(i).map(a=>({chunk:a,highlighted:i.test(a)})).filter(({chunk:a})=>a)}const sae=Un((e,r)=>{const{unstyled:n,children:o,highlight:i,highlightStyles:a,color:l,...s}=ze("Highlight",null,e),c=Rat(o,i);return y.jsx(L0,{unstyled:n,ref:r,...s,__staticSelector:"Highlight",children:c.map(({chunk:d,highlighted:u},p)=>u?y.jsx(ij,{unstyled:n,color:l,style:a,"data-highlight":d,children:d},p):y.jsx("span",{children:d},p))})});sae.classes=L0.classes,sae.displayName="@mantine/core/Highlight";const[h3t,cae]=Di("HoverCard component was not found in the tree"),dae=S.createContext(!1),zat=dae.Provider,uae=()=>S.useContext(dae);function Tat(e){const{children:r,onMouseEnter:n,onMouseLeave:o,...i}=ze("HoverCardDropdown",null,e),a=cae();if(uae()&&a.getFloatingProps&&a.floating){const c=a.getFloatingProps();return y.jsx(po.Dropdown,{ref:a.floating,...c,onMouseEnter:Tn(n,c.onMouseEnter),onMouseLeave:Tn(o,c.onMouseLeave),...i,children:r})}const l=Tn(n,a.openDropdown),s=Tn(o,a.closeDropdown);return y.jsx(po.Dropdown,{onMouseEnter:l,onMouseLeave:s,...i,children:r})}Tat.displayName="@mantine/core/HoverCardDropdown";const jat={openDelay:0,closeDelay:0};function pae(e){const{openDelay:r,closeDelay:n,children:o}=ze("HoverCardGroup",jat,e);return y.jsx(zat,{value:!0,children:y.jsx(Roe,{delay:{open:r,close:n},children:o})})}pae.displayName="@mantine/core/HoverCardGroup",pae.extend=e=>e;const Aat={refProp:"ref"},Dat=S.forwardRef((e,r)=>{const{children:n,refProp:o,eventPropsWrapperName:i,...a}=ze("HoverCardTarget",Aat,e),l=Wd(n);if(!l)throw new Error("HoverCard.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const s=cae();if(uae()&&s.getReferenceProps&&s.reference){const p=s.getReferenceProps();return y.jsx(po.Target,{refProp:o,ref:r,...a,children:S.cloneElement(l,i?{[i]:{...p,ref:s.reference}}:{...p,ref:s.reference})})}const c=Tn(l.props.onMouseEnter,s.openDropdown),d=Tn(l.props.onMouseLeave,s.closeDropdown),u={onMouseEnter:c,onMouseLeave:d};return y.jsx(po.Target,{refProp:o,ref:r,...a,children:S.cloneElement(l,i?{[i]:u}:u)})});Dat.displayName="@mantine/core/HoverCardTarget";var hae={root:"m_6e45937b",loader:"m_e8eb006c",overlay:"m_df587f17"};const fae={transitionProps:{transition:"fade",duration:0},overlayProps:{backgroundOpacity:.75},zIndex:yl("overlay")},Pat=(e,{zIndex:r})=>({root:{"--lo-z-index":r?.toString()}}),gae=We((e,r)=>{const n=ze("LoadingOverlay",fae,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,transitionProps:d,loaderProps:u,overlayProps:p,visible:f,zIndex:m,attributes:v,...w}=n,x=uo(),k=dt({name:"LoadingOverlay",classes:hae,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:v,vars:c,varsResolver:Pat}),C={...fae.overlayProps,...p};return y.jsx(_l,{transition:"fade",...d,mounted:!!f,children:_=>y.jsxs(Ae,{...k("root",{style:_}),ref:r,...w,children:[y.jsx(qp,{...k("loader"),unstyled:s,...u}),y.jsx(Xg,{...C,...k("overlay"),darkHidden:!0,unstyled:s,color:p?.color||x.white}),y.jsx(Xg,{...C,...k("overlay"),lightHidden:!0,unstyled:s,color:p?.color||x.colors.dark[5]})]})})});gae.classes=hae,gae.displayName="@mantine/core/LoadingOverlay";const[f3t,Yd]=Di("Menu component was not found in the tree");var em={dropdown:"m_dc9b7c9f",label:"m_9bfac126",divider:"m_efdf90cb",item:"m_99ac2aa1",itemLabel:"m_5476e0d3",itemSection:"m_8b75e504",chevron:"m_b85b0bed"};const mae=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=ze("MenuDivider",null,e),c=Yd();return y.jsx(Ae,{ref:r,...c.getStyles("divider",{className:o,style:i,styles:a,classNames:n}),...s})});mae.classes=em,mae.displayName="@mantine/core/MenuDivider";const yae=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,onMouseEnter:s,onMouseLeave:c,onKeyDown:d,children:u,...p}=ze("MenuDropdown",null,e),f=S.useRef(null),m=Yd(),v=Tn(d,k=>{(k.key==="ArrowUp"||k.key==="ArrowDown")&&(k.preventDefault(),f.current?.querySelectorAll("[data-menu-item]:not(:disabled)")[0]?.focus())}),w=Tn(s,()=>(m.trigger==="hover"||m.trigger==="click-hover")&&m.openDropdown()),x=Tn(c,()=>(m.trigger==="hover"||m.trigger==="click-hover")&&m.closeDropdown());return y.jsxs(po.Dropdown,{...p,onMouseEnter:w,onMouseLeave:x,role:"menu","aria-orientation":"vertical",ref:on(r,f),...m.getStyles("dropdown",{className:o,style:i,styles:a,classNames:n,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,onKeyDown:v,children:[m.withInitialFocusPlaceholder&&y.jsx("div",{tabIndex:-1,"data-autofocus":!0,"data-mantine-stop-propagation":!0,style:{outline:0}}),u]})});yae.classes=em,yae.displayName="@mantine/core/MenuDropdown";const[Mat,m5]=Bg(),vae=Un((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,color:s,closeMenuOnClick:c,leftSection:d,rightSection:u,children:p,disabled:f,"data-disabled":m,...v}=ze("MenuItem",null,e),w=Yd(),x=m5(),k=uo(),{dir:C}=mc(),_=S.useRef(null),$=v,R=Tn($.onClick,()=>{m||(typeof c=="boolean"?c&&w.closeDropdownImmediately():w.closeOnItemClick&&w.closeDropdownImmediately())}),T=s?k.variantColorResolver({color:s,theme:k,variant:"light"}):void 0,A=s?Bp({color:s,theme:k}):null,z=Tn($.onKeyDown,j=>{j.key==="ArrowLeft"&&x&&(x.close(),x.focusParentItem())});return y.jsxs(hs,{onMouseDown:j=>j.preventDefault(),...v,unstyled:w.unstyled,tabIndex:w.menuItemTabIndex,...w.getStyles("item",{className:o,style:i,styles:a,classNames:n}),ref:on(_,r),role:"menuitem",disabled:f,"data-menu-item":!0,"data-disabled":f||m||void 0,"data-mantine-stop-propagation":!0,onClick:R,onKeyDown:Mz({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:w.loop,dir:C,orientation:"vertical",onKeyDown:z}),__vars:{"--menu-item-color":A?.isThemeColor&&A?.shade===void 0?`var(--mantine-color-${A.color}-6)`:T?.color,"--menu-item-hover":T?.hover},children:[d&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"left",children:d}),p&&y.jsx("div",{...w.getStyles("itemLabel",{styles:a,classNames:n}),children:p}),u&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"right",children:u})]})});vae.classes=em,vae.displayName="@mantine/core/MenuItem";const bae=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,...s}=ze("MenuLabel",null,e),c=Yd();return y.jsx(Ae,{ref:r,...c.getStyles("label",{className:o,style:i,styles:a,classNames:n}),...s})});bae.classes=em,bae.displayName="@mantine/core/MenuLabel";const aj=We((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,onMouseEnter:s,onMouseLeave:c,onKeyDown:d,children:u,...p}=ze("MenuSubDropdown",null,e),f=S.useRef(null),m=Yd(),v=m5(),w=Tn(s,v?.open),x=Tn(c,v?.close);return y.jsx(po.Dropdown,{...p,onMouseEnter:w,onMouseLeave:x,role:"menu","aria-orientation":"vertical",ref:on(r,f),...m.getStyles("dropdown",{className:o,style:i,styles:a,classNames:n,withStaticClass:!1}),tabIndex:-1,"data-menu-dropdown":!0,children:u})});aj.classes=em,aj.displayName="@mantine/core/MenuSubDropdown";const lj=Un((e,r)=>{const{classNames:n,className:o,style:i,styles:a,vars:l,color:s,leftSection:c,rightSection:d,children:u,disabled:p,"data-disabled":f,closeMenuOnClick:m,...v}=ze("MenuSubItem",null,e),w=Yd(),x=m5(),k=uo(),{dir:C}=mc(),_=S.useRef(null),$=v,R=s?k.variantColorResolver({color:s,theme:k,variant:"light"}):void 0,T=s?Bp({color:s,theme:k}):null,A=Tn($.onKeyDown,N=>{N.key==="ArrowRight"&&(x?.open(),x?.focusFirstItem()),N.key==="ArrowLeft"&&x?.parentContext&&(x.parentContext.close(),x.parentContext.focusParentItem())}),z=Tn($.onClick,()=>{!f&&m&&w.closeDropdownImmediately()}),j=Tn($.onMouseEnter,x?.open),I=Tn($.onMouseLeave,x?.close);return y.jsxs(hs,{onMouseDown:N=>N.preventDefault(),...v,unstyled:w.unstyled,tabIndex:w.menuItemTabIndex,...w.getStyles("item",{className:o,style:i,styles:a,classNames:n}),ref:on(_,r),role:"menuitem",disabled:p,"data-menu-item":!0,"data-sub-menu-item":!0,"data-disabled":p||f||void 0,"data-mantine-stop-propagation":!0,onMouseEnter:j,onMouseLeave:I,onClick:z,onKeyDown:Mz({siblingSelector:"[data-menu-item]:not([data-disabled])",parentSelector:"[data-menu-dropdown]",activateOnFocus:!1,loop:w.loop,dir:C,orientation:"vertical",onKeyDown:A}),__vars:{"--menu-item-color":T?.isThemeColor&&T?.shade===void 0?`var(--mantine-color-${T.color}-6)`:R?.color,"--menu-item-hover":R?.hover},children:[c&&y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"left",children:c}),u&&y.jsx("div",{...w.getStyles("itemLabel",{styles:a,classNames:n}),children:u}),y.jsx("div",{...w.getStyles("itemSection",{styles:a,classNames:n}),"data-position":"right",children:d||y.jsx(LT,{...w.getStyles("chevron"),size:14})})]})});lj.classes=em,lj.displayName="@mantine/core/MenuSubItem";function xae({children:e,refProp:r}){if(!E4(e))throw new Error("Menu.Sub.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");return Yd(),y.jsx(po.Target,{refProp:r,popupType:"menu",children:e})}xae.displayName="@mantine/core/MenuSubTarget";const Nat={offset:0,position:"right-start",transitionProps:{duration:0},openDelay:0,middlewares:{shift:{crossAxis:!0}}};function V0(e){const{children:r,closeDelay:n,openDelay:o,...i}=ze("MenuSub",Nat,e),a=bl(),[l,{open:s,close:c}]=ytt(!1),d=m5(),{openDropdown:u,closeDropdown:p}=Cit({open:s,close:c,closeDelay:n,openDelay:o});return y.jsx(Mat,{value:{opened:l,close:p,open:u,focusFirstItem:()=>window.setTimeout(()=>{document.getElementById(`${a}-dropdown`)?.querySelectorAll("[data-menu-item]:not([data-disabled])")[0]?.focus()},16),focusParentItem:()=>window.setTimeout(()=>{document.getElementById(`${a}-target`)?.focus()},16),parentContext:d},children:y.jsx(po,{opened:l,withinPortal:!1,withArrow:!1,id:a,...i,children:r})})}V0.extend=e=>e,V0.displayName="@mantine/core/MenuSub",V0.Target=xae,V0.Dropdown=aj,V0.Item=lj;const Bat={refProp:"ref"},Iat=S.forwardRef((e,r)=>{const{children:n,refProp:o,...i}=ze("MenuTarget",Bat,e),a=Wd(n);if(!a)throw new Error("Menu.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported");const l=Yd(),s=a.props,c=Tn(s.onClick,()=>{l.trigger==="click"?l.toggleDropdown():l.trigger==="click-hover"&&(l.setOpenedViaClick(!0),l.opened||l.openDropdown())}),d=Tn(s.onMouseEnter,()=>(l.trigger==="hover"||l.trigger==="click-hover")&&l.openDropdown()),u=Tn(s.onMouseLeave,()=>{(l.trigger==="hover"||l.trigger==="click-hover"&&!l.openedViaClick)&&l.closeDropdown()});return y.jsx(po.Target,{refProp:o,popupType:"menu",ref:r,...i,children:S.cloneElement(a,{onClick:c,onMouseEnter:d,onMouseLeave:u,"data-expanded":l.opened?!0:void 0})})});Iat.displayName="@mantine/core/MenuTarget";const[Oat,sj]=Di("Modal component was not found in tree");var q0={root:"m_9df02822",content:"m_54c44539",inner:"m_1f958f16",header:"m_d0e2b9cd"};const wae=We((e,r)=>{const n=ze("ModalBody",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=sj();return y.jsx(PT,{ref:r,...d.getStyles("body",{classNames:o,style:a,styles:l,className:i}),...c})});wae.classes=q0,wae.displayName="@mantine/core/ModalBody";const kae=We((e,r)=>{const n=ze("ModalContent",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,children:c,__hidden:d,...u}=n,p=sj(),f=p.scrollAreaComponent||fie;return y.jsx(MT,{...p.getStyles("content",{className:i,style:a,styles:l,classNames:o}),innerProps:p.getStyles("inner",{className:i,style:a,styles:l,classNames:o}),"data-full-screen":p.fullScreen||void 0,"data-modal-content":!0,"data-hidden":d||void 0,ref:r,...u,children:y.jsx(f,{style:{maxHeight:p.fullScreen?"100dvh":`calc(100dvh - (${Ne(p.yOffset)} * 2))`},children:c})})});kae.classes=q0,kae.displayName="@mantine/core/ModalContent";const _ae=We((e,r)=>{const n=ze("ModalOverlay",null,e),{classNames:o,className:i,style:a,styles:l,vars:s,...c}=n,d=sj();return y.jsx(NT,{ref:r,...d.getStyles("overlay",{classNames:o,style:a,styles:l,className:i}),...c})});_ae.classes=q0,_ae.displayName="@mantine/core/ModalOverlay";const Lat={__staticSelector:"Modal",closeOnClickOutside:!0,withinPortal:!0,lockScroll:!0,trapFocus:!0,returnFocus:!0,closeOnEscape:!0,keepMounted:!1,zIndex:yl("modal"),transitionProps:{duration:200,transition:"fade-down"},yOffset:"5dvh"},Fat=(e,{radius:r,size:n,yOffset:o,xOffset:i})=>({root:{"--modal-radius":r===void 0?void 0:hn(r),"--modal-size":Qt(n,"modal-size"),"--modal-y-offset":Ne(o),"--modal-x-offset":Ne(i)}}),Sae=We((e,r)=>{const n=ze("ModalRoot",Lat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,yOffset:d,scrollAreaComponent:u,radius:p,fullScreen:f,centered:m,xOffset:v,__staticSelector:w,attributes:x,...k}=n,C=dt({name:w,classes:q0,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:x,vars:c,varsResolver:Fat});return y.jsx(Oat,{value:{yOffset:d,scrollAreaComponent:u,getStyles:C,fullScreen:f},children:y.jsx(DT,{ref:r,...C("root"),"data-full-screen":f||void 0,"data-centered":m||void 0,"data-offset-scrollbars":u===Fp.Autosize||void 0,unstyled:s,...k})})});Sae.classes=q0,Sae.displayName="@mantine/core/ModalRoot";const[g3t,Eae]=Bg(),[Vat,qat]=Bg();var y5={root:"m_7cda1cd6","root--default":"m_44da308b","root--contrast":"m_e3a01f8",label:"m_1e0e6180",remove:"m_ae386778",group:"m_1dcfd90b"};const Hat=(e,{gap:r},{size:n})=>({group:{"--pg-gap":r!==void 0?Qt(r):Qt(n,"pg-gap")}}),cj=We((e,r)=>{const n=ze("PillGroup",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,size:d,disabled:u,attributes:p,...f}=n,m=Eae()?.size||d||void 0,v=dt({name:"PillGroup",classes:y5,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:p,vars:c,varsResolver:Hat,stylesCtx:{size:m},rootSelector:"group"});return y.jsx(Vat,{value:{size:m,disabled:u},children:y.jsx(Ae,{ref:r,size:m,...v("group"),...f})})});cj.classes=y5,cj.displayName="@mantine/core/PillGroup";const Uat={variant:"default"},Wat=(e,{radius:r},{size:n})=>({root:{"--pill-fz":Qt(n,"pill-fz"),"--pill-height":Qt(n,"pill-height"),"--pill-radius":r===void 0?void 0:hn(r)}}),dj=We((e,r)=>{const n=ze("Pill",Uat,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,variant:d,children:u,withRemoveButton:p,onRemove:f,removeButtonProps:m,radius:v,size:w,disabled:x,mod:k,attributes:C,..._}=n,$=qat(),R=Eae(),T=w||$?.size||void 0,A=R?.variant==="filled"?"contrast":d||"default",z=dt({name:"Pill",classes:y5,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:C,vars:c,varsResolver:Wat,stylesCtx:{size:T}});return y.jsxs(Ae,{component:"span",ref:r,variant:A,size:T,...z("root",{variant:A}),mod:[{"with-remove":p&&!x,disabled:x||$?.disabled},k],..._,children:[y.jsx("span",{...z("label"),children:u}),p&&y.jsx(Hp,{variant:"transparent",radius:v,tabIndex:-1,"aria-hidden":!0,unstyled:s,...m,...z("remove",{className:m?.className,style:m?.style}),onMouseDown:j=>{j.preventDefault(),j.stopPropagation(),m?.onMouseDown?.(j)},onClick:j=>{j.stopPropagation(),f?.(),m?.onClick?.(j)}})]})});dj.classes=y5,dj.displayName="@mantine/core/Pill",dj.Group=cj;var Cae={root:"m_f0824112",description:"m_57492dcc",section:"m_690090b5",label:"m_1f6ac4c4",body:"m_f07af9d2",children:"m_e17b862f",chevron:"m_1fd8a00b"};const Gat=(e,{variant:r,color:n,childrenOffset:o,autoContrast:i})=>{const a=e.variantColorResolver({color:n||e.primaryColor,theme:e,variant:r||"light",autoContrast:i});return{root:{"--nl-bg":n||r?a.background:void 0,"--nl-hover":n||r?a.hover:void 0,"--nl-color":n||r?a.color:void 0},children:{"--nl-offset":ro(o)}}},$ae=Un((e,r)=>{const n=ze("NavLink",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,opened:d,defaultOpened:u,onChange:p,children:f,active:m,disabled:v,leftSection:w,rightSection:x,label:k,description:C,disableRightSectionRotation:_,noWrap:$,childrenOffset:R,autoContrast:T,mod:A,attributes:z,onClick:j,onKeyDown:I,...N}=n,L=dt({name:"NavLink",props:n,classes:Cae,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:z,vars:c,varsResolver:Gat}),[H,P]=qd({value:d,defaultValue:u,finalValue:!1,onChange:p}),V=!!f,B=F=>{j?.(F),V&&(F.preventDefault(),P(!H))};return y.jsxs(y.Fragment,{children:[y.jsxs(hs,{...L("root"),component:"a",ref:r,onClick:B,onKeyDown:F=>{I?.(F),F.nativeEvent.code==="Space"&&V&&(F.preventDefault(),P(!H))},unstyled:s,mod:[{disabled:v,active:m,expanded:H},A],...N,children:[w&&y.jsx(Ae,{component:"span",...L("section"),mod:{position:"left"},children:w}),y.jsxs(Ae,{...L("body"),mod:{"no-wrap":$},children:[y.jsx(Ae,{component:"span",...L("label"),children:k}),y.jsx(Ae,{component:"span",mod:{active:m},...L("description"),children:C})]}),(V||x!==void 0)&&y.jsx(Ae,{...L("section"),component:"span",mod:{rotate:H&&!_,position:"right"},children:V?x!==void 0?x:y.jsx(LT,{...L("chevron")}):x})]}),V&&y.jsx(Gne,{in:H,...L("collapse"),children:y.jsx("div",{...L("children"),children:f})})]})});$ae.classes=Cae,$ae.displayName="@mantine/core/NavLink";var Rae={root:"m_a513464",icon:"m_a4ceffb",loader:"m_b0920b15",body:"m_a49ed24",title:"m_3feedf16",description:"m_3d733a3a",closeButton:"m_919a4d88"};const Yat={withCloseButton:!0},Xat=(e,{radius:r,color:n})=>({root:{"--notification-radius":r===void 0?void 0:hn(r),"--notification-color":n?Uo(n,e):void 0}}),zae=We((e,r)=>{const n=ze("Notification",Yat,e),{className:o,color:i,radius:a,loading:l,withCloseButton:s,withBorder:c,title:d,icon:u,children:p,onClose:f,closeButtonProps:m,classNames:v,style:w,styles:x,unstyled:k,variant:C,vars:_,mod:$,loaderProps:R,role:T,attributes:A,...z}=n,j=dt({name:"Notification",classes:Rae,props:n,className:o,style:w,classNames:v,styles:x,unstyled:k,attributes:A,vars:_,varsResolver:Xat});return y.jsxs(Ae,{...j("root"),mod:[{"data-with-icon":!!u||l,"data-with-border":c},$],ref:r,variant:C,role:T||"alert",...z,children:[u&&!l&&y.jsx("div",{...j("icon"),children:u}),l&&y.jsx(qp,{size:28,color:i,...R,...j("loader")}),y.jsxs("div",{...j("body"),children:[d&&y.jsx("div",{...j("title"),children:d}),y.jsx(Ae,{...j("description"),mod:{"data-with-title":!!d},children:p})]}),s&&y.jsx(Hp,{iconSize:16,color:"gray",...m,unstyled:k,onClick:f,...j("closeButton")})]})});zae.classes=Rae,zae.displayName="@mantine/core/Notification";const Kat={duration:100,transition:"fade"};function Tae(e,r){return{...Kat,...r,...e}}function Zat({offset:e,position:r,defaultOpened:n}){const[o,i]=S.useState(n),a=S.useRef(null),{x:l,y:s,elements:c,refs:d,update:u,placement:p}=xT({placement:r,middleware:[fT({crossAxis:!0,padding:5,rootBoundary:"document"})]}),f=p.includes("right")?e:r.includes("left")?e*-1:0,m=p.includes("bottom")?e:r.includes("top")?e*-1:0,v=S.useCallback(({clientX:w,clientY:x})=>{d.setPositionReference({getBoundingClientRect(){return{width:0,height:0,x:w,y:x,left:w+f,top:x+m,right:w,bottom:x}}})},[c.reference]);return S.useEffect(()=>{if(d.floating.current){const w=a.current;w.addEventListener("mousemove",v);const x=bc(d.floating.current);return x.forEach(k=>{k.addEventListener("scroll",u)}),()=>{w.removeEventListener("mousemove",v),x.forEach(k=>{k.removeEventListener("scroll",u)})}}},[c.reference,d.floating.current,u,v,o]),{handleMouseMove:v,x:l,y:s,opened:o,setOpened:i,boundaryRef:a,floating:d.setFloating}}var v5={tooltip:"m_1b3c8819",arrow:"m_f898399f"};const Qat={refProp:"ref",withinPortal:!0,offset:10,position:"right",zIndex:yl("popover")},Jat=(e,{radius:r,color:n})=>({tooltip:{"--tooltip-radius":r===void 0?void 0:hn(r),"--tooltip-bg":n?Uo(n,e):void 0,"--tooltip-color":n?"var(--mantine-color-white)":void 0}}),uj=We((e,r)=>{const n=ze("TooltipFloating",Qat,e),{children:o,refProp:i,withinPortal:a,style:l,className:s,classNames:c,styles:d,unstyled:u,radius:p,color:f,label:m,offset:v,position:w,multiline:x,zIndex:k,disabled:C,defaultOpened:_,variant:$,vars:R,portalProps:T,attributes:A,...z}=n,j=uo(),I=dt({name:"TooltipFloating",props:n,classes:v5,className:s,style:l,classNames:c,styles:d,unstyled:u,attributes:A,rootSelector:"tooltip",vars:R,varsResolver:Jat}),{handleMouseMove:N,x:L,y:H,opened:P,boundaryRef:V,floating:B,setOpened:F}=Zat({offset:v,position:w,defaultOpened:_}),q=Wd(o);if(!q)throw new Error("[@mantine/core] Tooltip.Floating component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported");const G=on(V,R4(q),r),U=q.props,Y=O=>{U.onMouseEnter?.(O),N(O),F(!0)},K=O=>{U.onMouseLeave?.(O),F(!1)};return y.jsxs(y.Fragment,{children:[y.jsx(Vp,{...T,withinPortal:a,children:y.jsx(Ae,{...z,...I("tooltip",{style:{...Kz(l,j),zIndex:k,display:!C&&P?"block":"none",top:(H&&Math.round(H))??"",left:(L&&Math.round(L))??""}}),variant:$,ref:B,mod:{multiline:x},children:m})}),S.cloneElement(q,{...U,[i]:G,onMouseEnter:Y,onMouseLeave:K})]})});uj.classes=v5,uj.displayName="@mantine/core/TooltipFloating";const jae=S.createContext(!1),elt=jae.Provider,tlt=()=>S.useContext(jae),rlt={openDelay:0,closeDelay:0};function pj(e){const{openDelay:r,closeDelay:n,children:o}=ze("TooltipGroup",rlt,e);return y.jsx(elt,{value:!0,children:y.jsx(Roe,{delay:{open:r,close:n},children:o})})}pj.displayName="@mantine/core/TooltipGroup",pj.extend=e=>e;function nlt(e){if(e===void 0)return{shift:!0,flip:!0};const r={...e};return e.shift===void 0&&(r.shift=!0),e.flip===void 0&&(r.flip=!0),r}function olt(e){const r=nlt(e.middlewares),n=[yoe(e.offset)];return r.shift&&n.push(fT(typeof r.shift=="boolean"?{padding:8}:{padding:8,...r.shift})),r.flip&&n.push(typeof r.flip=="boolean"?G4():G4(r.flip)),n.push(boe({element:e.arrowRef,padding:e.arrowOffset})),r.inline?n.push(typeof r.inline=="boolean"?I0():I0(r.inline)):e.inline&&n.push(I0()),n}function ilt(e){const[r,n]=S.useState(e.defaultOpened),o=typeof e.opened=="boolean"?e.opened:r,i=tlt(),a=bl(),l=S.useCallback($=>{n($),$&&x(a)},[a]),{x:s,y:c,context:d,refs:u,placement:p,middlewareData:{arrow:{x:f,y:m}={}}}=xT({strategy:e.strategy,placement:e.position,open:o,onOpenChange:l,middleware:olt(e),whileElementsMounted:pT}),{delay:v,currentId:w,setCurrentId:x}=sot(d,{id:a}),{getReferenceProps:k,getFloatingProps:C}=fot([aot(d,{enabled:e.events?.hover,delay:i?v:{open:e.openDelay,close:e.closeDelay},mouseOnly:!e.events?.touch}),hot(d,{enabled:e.events?.focus,visibleOnly:!0}),mot(d,{role:"tooltip"}),uot(d,{enabled:typeof e.opened>"u"})]);Og(()=>{e.onPositionChange?.(p)},[p]);const _=o&&w&&w!==a;return{x:s,y:c,arrowX:f,arrowY:m,reference:u.setReference,floating:u.setFloating,getFloatingProps:C,getReferenceProps:k,isGroupPhase:_,opened:o,placement:p}}const Aae={position:"top",refProp:"ref",withinPortal:!0,arrowSize:4,arrowOffset:5,arrowRadius:0,arrowPosition:"side",offset:5,transitionProps:{duration:100,transition:"fade"},events:{hover:!0,focus:!1,touch:!1},zIndex:yl("popover"),positionDependencies:[],middlewares:{flip:!0,shift:!0,inline:!1}},alt=(e,{radius:r,color:n,variant:o,autoContrast:i})=>{const a=e.variantColorResolver({theme:e,color:n||e.primaryColor,autoContrast:i,variant:o||"filled"});return{tooltip:{"--tooltip-radius":r===void 0?void 0:hn(r),"--tooltip-bg":n?a.background:void 0,"--tooltip-color":n?a.color:void 0}}},b5=We((e,r)=>{const n=ze("Tooltip",Aae,e),{children:o,position:i,refProp:a,label:l,openDelay:s,closeDelay:c,onPositionChange:d,opened:u,defaultOpened:p,withinPortal:f,radius:m,color:v,classNames:w,styles:x,unstyled:k,style:C,className:_,withArrow:$,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,offset:j,transitionProps:I,multiline:N,events:L,zIndex:H,disabled:P,positionDependencies:V,onClick:B,onMouseEnter:F,onMouseLeave:q,inline:G,variant:U,keepMounted:Y,vars:K,portalProps:O,mod:W,floatingStrategy:Z,middlewares:Q,autoContrast:ie,attributes:te,target:re,...ue}=ze("Tooltip",Aae,n),{dir:_e}=mc(),ce=S.useRef(null),pe=ilt({position:Yoe(_e,i),closeDelay:c,openDelay:s,onPositionChange:d,opened:u,defaultOpened:p,events:L,arrowRef:ce,arrowOffset:T,offset:typeof j=="number"?j+($?R/2:0):j,positionDependencies:[...V,re??o],inline:G,strategy:Z,middlewares:Q});S.useEffect(()=>{const Le=re instanceof HTMLElement?re:typeof re=="string"?document.querySelector(re):re?.current||null;Le&&pe.reference(Le)},[re,pe]);const xe=dt({name:"Tooltip",props:n,classes:v5,className:_,style:C,classNames:w,styles:x,unstyled:k,attributes:te,rootSelector:"tooltip",vars:K,varsResolver:alt}),je=Wd(o);if(!re&&!je)return null;if(re){const Le=Tae(I,{duration:100,transition:"fade"});return y.jsx(y.Fragment,{children:y.jsx(Vp,{...O,withinPortal:f,children:y.jsx(_l,{...Le,keepMounted:Y,mounted:!P&&!!pe.opened,duration:pe.isGroupPhase?10:Le.duration,children:St=>y.jsxs(Ae,{...ue,"data-fixed":Z==="fixed"||void 0,variant:U,mod:[{multiline:N},W],...pe.getFloatingProps({ref:pe.floating,className:xe("tooltip").className,style:{...xe("tooltip").style,...St,zIndex:H,top:pe.y??0,left:pe.x??0}}),children:[l,y.jsx(Q4,{ref:ce,arrowX:pe.arrowX,arrowY:pe.arrowY,visible:$,position:pe.placement,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,...xe("arrow")})]})})})})}const Be=je.props,Je=on(pe.reference,R4(je),r),st=Tae(I,{duration:100,transition:"fade"});return y.jsxs(y.Fragment,{children:[y.jsx(Vp,{...O,withinPortal:f,children:y.jsx(_l,{...st,keepMounted:Y,mounted:!P&&!!pe.opened,duration:pe.isGroupPhase?10:st.duration,children:Le=>y.jsxs(Ae,{...ue,"data-fixed":Z==="fixed"||void 0,variant:U,mod:[{multiline:N},W],...pe.getFloatingProps({ref:pe.floating,className:xe("tooltip").className,style:{...xe("tooltip").style,...Le,zIndex:H,top:pe.y??0,left:pe.x??0}}),children:[l,y.jsx(Q4,{ref:ce,arrowX:pe.arrowX,arrowY:pe.arrowY,visible:$,position:pe.placement,arrowSize:R,arrowOffset:T,arrowRadius:A,arrowPosition:z,...xe("arrow")})]})})}),S.cloneElement(je,pe.getReferenceProps({onClick:B,onMouseEnter:F,onMouseLeave:q,onMouseMove:n.onMouseMove,onPointerDown:n.onPointerDown,onPointerEnter:n.onPointerEnter,...Be,className:no(_,Be.className),[a]:Je}))]})});b5.classes=v5,b5.displayName="@mantine/core/Tooltip",b5.Floating=uj,b5.Group=pj;var Dae={root:"m_cf365364",indicator:"m_9e182ccd",label:"m_1738fcb2",input:"m_1714d588",control:"m_69686b9b",innerLabel:"m_78882f40"};const llt={withItemsBorders:!0},slt=(e,{radius:r,color:n,transitionDuration:o,size:i,transitionTimingFunction:a})=>({root:{"--sc-radius":r===void 0?void 0:hn(r),"--sc-color":n?Uo(n,e):void 0,"--sc-shadow":n?void 0:"var(--mantine-shadow-xs)","--sc-transition-duration":o===void 0?void 0:`${o}ms`,"--sc-transition-timing-function":a,"--sc-padding":Qt(i,"sc-padding"),"--sc-font-size":zo(i)}}),Pae=We((e,r)=>{const n=ze("SegmentedControl",llt,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,data:d,value:u,defaultValue:p,onChange:f,size:m,name:v,disabled:w,readOnly:x,fullWidth:k,orientation:C,radius:_,color:$,transitionDuration:R,transitionTimingFunction:T,variant:A,autoContrast:z,withItemsBorders:j,mod:I,attributes:N,...L}=n,H=dt({name:"SegmentedControl",props:n,classes:Dae,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:N,vars:c,varsResolver:slt}),P=uo(),V=d.map(re=>typeof re=="string"?{label:re,value:re}:re),B=wtt(),[F,q]=S.useState(Iz()),[G,U]=S.useState(null),[Y,K]=S.useState({}),O=(re,ue)=>{Y[ue]=re,K(Y)},[W,Z]=qd({value:u,defaultValue:p,finalValue:Array.isArray(d)?V.find(re=>!re.disabled)?.value??d[0]?.value??null:null,onChange:f}),Q=bl(v),ie=V.map(re=>S.createElement(Ae,{...H("control"),mod:{active:W===re.value,orientation:C},key:re.value},S.createElement("input",{...H("input"),disabled:w||re.disabled,type:"radio",name:Q,value:re.value,id:`${Q}-${re.value}`,checked:W===re.value,onChange:()=>!x&&Z(re.value),"data-focus-ring":P.focusRing,key:`${re.value}-input`}),S.createElement(Ae,{component:"label",...H("label"),mod:{active:W===re.value&&!(w||re.disabled),disabled:w||re.disabled,"read-only":x},htmlFor:`${Q}-${re.value}`,ref:ue=>O(ue,re.value),__vars:{"--sc-label-color":$!==void 0?qz({color:$,theme:P,autoContrast:z}):void 0},key:`${re.value}-label`},y.jsx("span",{...H("innerLabel"),children:re.label})))),te=on(r,re=>U(re));return mtt(()=>{q(Iz())},[d.length]),d.length===0?null:y.jsxs(Ae,{...H("root"),variant:A,size:m,ref:te,mod:[{"full-width":k,orientation:C,initialized:B,"with-items-borders":j},I],...L,role:"radiogroup","data-disabled":w,children:[typeof W=="string"&&y.jsx(OT,{target:Y[W],parent:G,component:"span",transitionDuration:"var(--sc-transition-duration)",...H("indicator")},F),ie]})});Pae.classes=Dae,Pae.displayName="@mantine/core/SegmentedControl";const clt={withCheckIcon:!0,allowDeselect:!0,checkIconPosition:"left"},Mae=We((e,r)=>{const n=ze("Select",clt,e),{classNames:o,styles:i,unstyled:a,vars:l,dropdownOpened:s,defaultDropdownOpened:c,onDropdownClose:d,onDropdownOpen:u,onFocus:p,onBlur:f,onClick:m,onChange:v,data:w,value:x,defaultValue:k,selectFirstOptionOnChange:C,onOptionSubmit:_,comboboxProps:$,readOnly:R,disabled:T,filter:A,limit:z,withScrollArea:j,maxDropdownHeight:I,size:N,searchable:L,rightSection:H,checkIconPosition:P,withCheckIcon:V,withAlignedLabels:B,nothingFoundMessage:F,name:q,form:G,searchValue:U,defaultSearchValue:Y,onSearchChange:K,allowDeselect:O,error:W,rightSectionPointerEvents:Z,id:Q,clearable:ie,clearButtonProps:te,hiddenInputProps:re,renderOption:ue,onClear:_e,autoComplete:ce,scrollAreaProps:pe,__defaultRightSection:xe,__clearSection:je,__clearable:Be,chevronColor:Je,autoSelectOnBlur:st,attributes:Le,...St}=n,Ve=S.useMemo(()=>Ait(w),[w]),qe=S.useRef({}),Xe=S.useMemo(()=>Cie(Ve),[Ve]),It=bl(Q),[Et,be,ke]=qd({value:x,defaultValue:k,finalValue:null,onChange:v}),Ye=typeof Et=="string"?Et in Xe?Xe[Et]:qe.current[Et]:void 0,yt=btt(Ye),[xt,Tr,er]=qd({value:U,defaultValue:Y,finalValue:Ye?Ye.label:"",onChange:K}),qt=Aie({opened:s,defaultOpened:c,onDropdownOpen:()=>{u?.(),qt.updateSelectedOptionIndex("active",{scrollIntoView:!0})},onDropdownClose:()=>{d?.(),setTimeout(qt.resetSelectedOption,0)}}),Ht=fn=>{Tr(fn),qt.resetSelectedOption()},{resolvedClassNames:Kr,resolvedStyles:Gt}=Hz({props:n,styles:i,classNames:o});S.useEffect(()=>{C&&qt.selectFirstOption()},[C,xt]),S.useEffect(()=>{x===null&&Ht(""),typeof x=="string"&&Ye&&(yt?.value!==Ye.value||yt?.label!==Ye.label)&&Ht(Ye.label)},[x,Ye]),S.useEffect(()=>{!ke&&!er&&Ht(typeof Et=="string"?Et in Xe?Xe[Et]?.label:qe.current[Et]?.label||"":"")},[Xe,Et]),S.useEffect(()=>{Et&&Et in Xe&&(qe.current[Et]=Xe[Et])},[Xe,Et]);const ln=y.jsx(xr.ClearButton,{...te,onClear:()=>{be(null,null),Ht(""),_e?.()}}),Wn=ie&&!!Et&&!T&&!R;return y.jsxs(y.Fragment,{children:[y.jsxs(xr,{store:qt,__staticSelector:"Select",classNames:Kr,styles:Gt,unstyled:a,readOnly:R,size:N,attributes:Le,keepMounted:st,onOptionSubmit:fn=>{_?.(fn);const oo=O&&Xe[fn].value===Et?null:Xe[fn],Yo=oo?oo.value:null;Yo!==Et&&be(Yo,oo),!ke&&Ht(typeof Yo=="string"&&oo?.label||""),qt.closeDropdown()},...$,children:[y.jsx(xr.Target,{targetType:L?"input":"button",autoComplete:ce,children:y.jsx(a5,{id:It,ref:r,__defaultRightSection:y.jsx(xr.Chevron,{size:N,error:W,unstyled:a,color:Je}),__clearSection:ln,__clearable:Wn,rightSection:H,rightSectionPointerEvents:Z||"none",...St,size:N,__staticSelector:"Select",disabled:T,readOnly:R||!L,value:xt,onChange:fn=>{Ht(fn.currentTarget.value),qt.openDropdown(),C&&qt.selectFirstOption()},onFocus:fn=>{L&&qt.openDropdown(),p?.(fn)},onBlur:fn=>{st&&qt.clickSelectedOption(),L&&qt.closeDropdown();const oo=typeof Et=="string"&&(Et in Xe?Xe[Et]:qe.current[Et]);Ht(oo&&oo.label||""),f?.(fn)},onClick:fn=>{L?qt.openDropdown():qt.toggleDropdown(),m?.(fn)},classNames:Kr,styles:Gt,unstyled:a,pointer:!L,error:W,attributes:Le})}),y.jsx(Xit,{data:Ve,hidden:R||T,filter:A,search:xt,limit:z,hiddenWhenEmpty:!F,withScrollArea:j,maxDropdownHeight:I,filterOptions:!!L&&Ye?.label!==xt,value:Et,checkIconPosition:P,withCheckIcon:V,withAlignedLabels:B,nothingFoundMessage:F,unstyled:a,labelId:St.label?`${It}-label`:void 0,"aria-label":St.label?void 0:St["aria-label"],renderOption:ue,scrollAreaProps:pe})]}),y.jsx(xr.HiddenInput,{value:Et,name:q,form:G,disabled:T,...re})]})});Mae.classes={...a5.classes,...xr.classes},Mae.displayName="@mantine/core/Select";function dlt({spacing:e,verticalSpacing:r,cols:n,selector:o}){const i=uo(),a=r===void 0?e:r,l=Vd({"--sg-spacing-x":ro(vl(e)),"--sg-spacing-y":ro(vl(a)),"--sg-cols":vl(n)?.toString()}),s=Ro(i.breakpoints).reduce((d,u)=>(d[u]||(d[u]={}),typeof e=="object"&&e[u]!==void 0&&(d[u]["--sg-spacing-x"]=ro(e[u])),typeof a=="object"&&a[u]!==void 0&&(d[u]["--sg-spacing-y"]=ro(a[u])),typeof n=="object"&&n[u]!==void 0&&(d[u]["--sg-cols"]=n[u]),d),{}),c=Bz(Ro(s),i.breakpoints).filter(d=>Ro(s[d.value]).length>0).map(d=>({query:`(min-width: ${i.breakpoints[d.value]})`,styles:s[d.value]}));return y.jsx(Vg,{styles:l,media:c,selector:o})}function hj(e){return typeof e=="object"&&e!==null?Ro(e):[]}function ult(e){return e.sort((r,n)=>S4(r)-S4(n))}function plt({spacing:e,verticalSpacing:r,cols:n}){const o=Array.from(new Set([...hj(e),...hj(r),...hj(n)]));return ult(o)}function hlt({spacing:e,verticalSpacing:r,cols:n,selector:o}){const i=r===void 0?e:r,a=Vd({"--sg-spacing-x":ro(vl(e)),"--sg-spacing-y":ro(vl(i)),"--sg-cols":vl(n)?.toString()}),l=plt({spacing:e,verticalSpacing:r,cols:n}),s=l.reduce((d,u)=>(d[u]||(d[u]={}),typeof e=="object"&&e[u]!==void 0&&(d[u]["--sg-spacing-x"]=ro(e[u])),typeof i=="object"&&i[u]!==void 0&&(d[u]["--sg-spacing-y"]=ro(i[u])),typeof n=="object"&&n[u]!==void 0&&(d[u]["--sg-cols"]=n[u]),d),{}),c=l.map(d=>({query:`simple-grid (min-width: ${d})`,styles:s[d]}));return y.jsx(Vg,{styles:a,container:c,selector:o})}var Nae={container:"m_925c2d2c",root:"m_2415a157"};const flt={cols:1,spacing:"md",type:"media"},Bae=We((e,r)=>{const n=ze("SimpleGrid",flt,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,cols:d,verticalSpacing:u,spacing:p,type:f,attributes:m,...v}=n,w=dt({name:"SimpleGrid",classes:Nae,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,vars:c}),x=P0();return f==="container"?y.jsxs(y.Fragment,{children:[y.jsx(hlt,{...n,selector:`.${x}`}),y.jsx("div",{...w("container"),children:y.jsx(Ae,{ref:r,...w("root",{className:x}),...v})})]}):y.jsxs(y.Fragment,{children:[y.jsx(dlt,{...n,selector:`.${x}`}),y.jsx(Ae,{ref:r,...w("root",{className:x}),...v})]})});Bae.classes=Nae,Bae.displayName="@mantine/core/SimpleGrid";const[glt,x5]=Di("SliderProvider was not found in tree"),Iae=S.forwardRef(({size:e,disabled:r,variant:n,color:o,thumbSize:i,radius:a,...l},s)=>{const{getStyles:c}=x5();return y.jsx(Ae,{tabIndex:-1,variant:n,size:e,ref:s,...c("root"),...l})});Iae.displayName="@mantine/core/SliderRoot";const Oae=S.forwardRef(({max:e,min:r,value:n,position:o,label:i,dragging:a,onMouseDown:l,onKeyDownCapture:s,labelTransitionProps:c,labelAlwaysOn:d,thumbLabel:u,onFocus:p,onBlur:f,showLabelOnHover:m,isHovered:v,children:w=null,disabled:x},k)=>{const{getStyles:C}=x5(),[_,$]=S.useState(!1),R=d||a||_||m&&v;return y.jsxs(Ae,{tabIndex:0,role:"slider","aria-label":u,"aria-valuemax":e,"aria-valuemin":r,"aria-valuenow":n,ref:k,__vars:{"--slider-thumb-offset":`${o}%`},...C("thumb",{focusable:!0}),mod:{dragging:a,disabled:x},onFocus:T=>{$(!0),typeof p=="function"&&p(T)},onBlur:T=>{$(!1),typeof f=="function"&&f(T)},onTouchStart:l,onMouseDown:l,onKeyDownCapture:s,onClick:T=>T.stopPropagation(),children:[w,y.jsx(_l,{mounted:i!=null&&!!R,transition:"fade",duration:0,...c,children:T=>y.jsx("div",{...C("label",{style:T}),children:i})})]})});Oae.displayName="@mantine/core/SliderThumb";function Lae({value:e,min:r,max:n}){const o=(e-r)/(n-r)*100;return Math.min(Math.max(o,0),100)}function mlt({mark:e,offset:r,value:n,inverted:o=!1}){return o?typeof r=="number"&&e.value<=r||e.value>=n:typeof r=="number"?e.value>=r&&e.value<=n:e.value<=n}function Fae({marks:e,min:r,max:n,disabled:o,value:i,offset:a,inverted:l}){const{getStyles:s}=x5();if(!e)return null;const c=e.map((d,u)=>S.createElement(Ae,{...s("markWrapper"),__vars:{"--mark-offset":`${Lae({value:d.value,min:r,max:n})}%`},key:u},y.jsx(Ae,{...s("mark"),mod:{filled:mlt({mark:d,value:i,offset:a,inverted:l}),disabled:o}}),d.label&&y.jsx("div",{...s("markLabel"),children:d.label})));return y.jsx("div",{children:c})}Fae.displayName="@mantine/core/SliderMarks";function Vae({filled:e,children:r,offset:n,disabled:o,marksOffset:i,inverted:a,containerProps:l,...s}){const{getStyles:c}=x5();return y.jsx(Ae,{...c("trackContainer"),mod:{disabled:o},...l,children:y.jsxs(Ae,{...c("track"),mod:{inverted:a,disabled:o},children:[y.jsx(Ae,{mod:{inverted:a,disabled:o},__vars:{"--slider-bar-width":`calc(${e}% + 2 * var(--slider-size))`,"--slider-bar-offset":`calc(${n}% - var(--slider-size))`},...c("bar")}),r,y.jsx(Fae,{...s,offset:i,disabled:o,inverted:a})]})})}Vae.displayName="@mantine/core/SliderTrack";function ylt({value:e,containerWidth:r,min:n,max:o,step:i,precision:a}){const l=(r?Math.min(Math.max(e,0),r)/r:e)*(o-n),s=(l!==0?Math.round(l/i)*i:0)+n,c=Math.max(s,n);return a!==void 0?Number(c.toFixed(a)):c}function w5(e,r){return parseFloat(e.toFixed(r))}function vlt(e){if(!e)return 0;const r=e.toString().split(".");return r.length>1?r[1].length:0}function fj(e,r){const n=[...r].sort((o,i)=>o.value-i.value).find(o=>o.value>e);return n?n.value:e}function gj(e,r){const n=[...r].sort((o,i)=>i.value-o.value).find(o=>o.valuen.value-o.value);return r.length>0?r[0].value:0}function Hae(e){const r=[...e].sort((n,o)=>n.value-o.value);return r.length>0?r[r.length-1].value:100}var Uae={root:"m_dd36362e",label:"m_c9357328",thumb:"m_c9a9a60a",trackContainer:"m_a8645c2",track:"m_c9ade57f",bar:"m_38aeed47",markWrapper:"m_b7b0423a",mark:"m_dd33bc19",markLabel:"m_68c77a5b"};const blt={radius:"xl",min:0,max:100,step:1,marks:[],label:e=>e,labelTransitionProps:{transition:"fade",duration:0},thumbLabel:"",showLabelOnHover:!0,scale:e=>e,size:"md"},xlt=(e,{size:r,color:n,thumbSize:o,radius:i})=>({root:{"--slider-size":Qt(r,"slider-size"),"--slider-color":n?Uo(n,e):void 0,"--slider-radius":i===void 0?void 0:hn(i),"--slider-thumb-size":o!==void 0?Ne(o):"calc(var(--slider-size) * 2)"}}),Wae=We((e,r)=>{const n=ze("Slider",blt,e),{classNames:o,styles:i,value:a,onChange:l,onChangeEnd:s,size:c,min:d,max:u,domain:p,step:f,precision:m,defaultValue:v,name:w,marks:x,label:k,labelTransitionProps:C,labelAlwaysOn:_,thumbLabel:$,showLabelOnHover:R,thumbChildren:T,disabled:A,unstyled:z,scale:j,inverted:I,className:N,style:L,vars:H,hiddenInputProps:P,restrictToMarks:V,thumbProps:B,attributes:F,...q}=n,G=dt({name:"Slider",props:n,classes:Uae,classNames:o,className:N,styles:i,style:L,attributes:F,vars:H,varsResolver:xlt,unstyled:z}),{dir:U}=mc(),[Y,K]=S.useState(!1),[O,W]=qd({value:typeof a=="number"?Ig(a,d,u):a,defaultValue:typeof v=="number"?Ig(v,d,u):v,finalValue:Ig(0,d,u),onChange:l}),Z=S.useRef(O),Q=S.useRef(s);S.useEffect(()=>{Q.current=s},[s]);const ie=S.useRef(null),te=S.useRef(null),[re,ue]=p||[d,u],_e=Lae({value:O,min:re,max:ue}),ce=j(O),pe=typeof k=="function"?k(ce):k,xe=m??vlt(f),je=S.useCallback(({x:Ve})=>{if(!A){const qe=ylt({value:Ve,min:re,max:ue,step:f,precision:xe}),Xe=Ig(qe,d,u);W(V&&x?.length?Ane(Xe,x.map(It=>It.value)):Xe),Z.current=Xe}},[A,d,u,re,ue,f,xe,W,x,V]),Be=S.useCallback(()=>{if(!A&&Q.current){const Ve=V&&x?.length?Ane(Z.current,x.map(qe=>qe.value)):Z.current;Q.current(Ve)}},[A,x,V]),{ref:Je,active:st}=htt(je,{onScrubEnd:Be},U),Le=S.useCallback(Ve=>{!A&&Q.current&&Q.current(Ve)},[A]),St=Ve=>{if(!A)switch(Ve.key){case"ArrowUp":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=fj(O,x);W(Xe),Le(Xe);break}const qe=w5(Math.min(Math.max(O+f,d),u),xe);W(qe),Le(qe);break}case"ArrowRight":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=U==="rtl"?gj(O,x):fj(O,x);W(Xe),Le(Xe);break}const qe=w5(Math.min(Math.max(U==="rtl"?O-f:O+f,d),u),xe);W(qe),Le(qe);break}case"ArrowDown":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=gj(O,x);W(Xe),Le(Xe);break}const qe=w5(Math.min(Math.max(O-f,d),u),xe);W(qe),Le(qe);break}case"ArrowLeft":{if(Ve.preventDefault(),te.current?.focus(),V&&x){const Xe=U==="rtl"?fj(O,x):gj(O,x);W(Xe),Le(Xe);break}const qe=w5(Math.min(Math.max(U==="rtl"?O+f:O-f,d),u),xe);W(qe),Le(qe);break}case"Home":{if(Ve.preventDefault(),te.current?.focus(),V&&x){W(qae(x)),Le(qae(x));break}W(d),Le(d);break}case"End":{if(Ve.preventDefault(),te.current?.focus(),V&&x){W(Hae(x)),Le(Hae(x));break}W(u),Le(u);break}}};return y.jsx(glt,{value:{getStyles:G},children:y.jsxs(Iae,{...q,ref:on(r,ie),onKeyDownCapture:St,onMouseDownCapture:()=>ie.current?.focus(),size:c,disabled:A,children:[y.jsx(Vae,{inverted:I,offset:0,filled:_e,marks:x,min:re,max:ue,value:ce,disabled:A,containerProps:{ref:Je,onMouseEnter:R?()=>K(!0):void 0,onMouseLeave:R?()=>K(!1):void 0},children:y.jsx(Oae,{max:ue,min:re,value:ce,position:_e,dragging:st,label:pe,ref:te,labelTransitionProps:C,labelAlwaysOn:_,thumbLabel:$,showLabelOnHover:R,isHovered:Y,disabled:A,...B,children:T})}),y.jsx("input",{type:"hidden",name:w,value:ce,...P})]})})});Wae.classes=Uae,Wae.displayName="@mantine/core/Slider";const wlt=We((e,r)=>{const{w:n,h:o,miw:i,mih:a,...l}=ze("Space",null,e);return y.jsx(Ae,{ref:r,...l,w:n,miw:i??n,h:o,mih:a??o})});wlt.displayName="@mantine/core/Space";var Gae={root:"m_6d731127"};const klt={gap:"md",align:"stretch",justify:"flex-start"},_lt=(e,{gap:r,align:n,justify:o})=>({root:{"--stack-gap":ro(r),"--stack-align":n,"--stack-justify":o}}),Yae=We((e,r)=>{const n=ze("Stack",klt,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,align:d,justify:u,gap:p,variant:f,attributes:m,...v}=n,w=dt({name:"Stack",props:n,classes:Gae,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:m,vars:c,varsResolver:_lt});return y.jsx(Ae,{ref:r,...w("root"),variant:f,...v})});Yae.classes=Gae,Yae.displayName="@mantine/core/Stack";const[Slt,mj]=Di("Tabs component was not found in the tree");var H0={root:"m_89d60db1","list--default":"m_576c9d4",list:"m_89d33d6d",tab:"m_4ec4dce6",panel:"m_b0c91715",tabSection:"m_fc420b1f",tabLabel:"m_42bbd1ae","tab--default":"m_539e827b","list--outline":"m_6772fbd5","tab--outline":"m_b59ab47c","tab--pills":"m_c3381914"};const yj=We((e,r)=>{const n=ze("TabsList",null,e),{children:o,className:i,grow:a,justify:l,classNames:s,styles:c,style:d,mod:u,...p}=n,f=mj();return y.jsx(Ae,{...p,...f.getStyles("list",{className:i,style:d,classNames:s,styles:c,props:n,variant:f.variant}),ref:r,role:"tablist",variant:f.variant,mod:[{grow:a,orientation:f.orientation,placement:f.orientation==="vertical"&&f.placement,inverted:f.inverted},u],"aria-orientation":f.orientation,__vars:{"--tabs-justify":l},children:o})});yj.classes=H0,yj.displayName="@mantine/core/TabsList";const vj=We((e,r)=>{const n=ze("TabsPanel",null,e),{children:o,className:i,value:a,classNames:l,styles:s,style:c,mod:d,keepMounted:u,...p}=n,f=mj(),m=f.value===a,v=f.keepMounted||u||m?o:null;return y.jsx(Ae,{...f.getStyles("panel",{className:i,classNames:l,styles:s,style:[c,m?void 0:{display:"none"}],props:n}),ref:r,mod:[{orientation:f.orientation},d],role:"tabpanel",id:f.getPanelId(a),"aria-labelledby":f.getTabId(a),...p,children:v})});vj.classes=H0,vj.displayName="@mantine/core/TabsPanel";const bj=We((e,r)=>{const n=ze("TabsTab",null,e),{className:o,children:i,rightSection:a,leftSection:l,value:s,onClick:c,onKeyDown:d,disabled:u,color:p,style:f,classNames:m,styles:v,vars:w,mod:x,tabIndex:k,...C}=n,_=uo(),{dir:$}=mc(),R=mj(),T=s===R.value,A=j=>{R.onChange(R.allowTabDeactivation&&s===R.value?null:s),c?.(j)},z={classNames:m,styles:v,props:n};return y.jsxs(hs,{...R.getStyles("tab",{className:o,style:f,variant:R.variant,...z}),disabled:u,unstyled:R.unstyled,variant:R.variant,mod:[{active:T,disabled:u,orientation:R.orientation,inverted:R.inverted,placement:R.orientation==="vertical"&&R.placement},x],ref:r,role:"tab",id:R.getTabId(s),"aria-selected":T,tabIndex:k!==void 0?k:T||R.value===null?0:-1,"aria-controls":R.getPanelId(s),onClick:A,__vars:{"--tabs-color":p?Uo(p,_):void 0},onKeyDown:Mz({siblingSelector:'[role="tab"]',parentSelector:'[role="tablist"]',activateOnFocus:R.activateTabWithKeyboard,loop:R.loop,orientation:R.orientation||"horizontal",dir:$,onKeyDown:d}),...C,children:[l&&y.jsx("span",{...R.getStyles("tabSection",z),"data-position":"left",children:l}),i&&y.jsx("span",{...R.getStyles("tabLabel",z),children:i}),a&&y.jsx("span",{...R.getStyles("tabSection",z),"data-position":"right",children:a})]})});bj.classes=H0,bj.displayName="@mantine/core/TabsTab";const Xae="Tabs.Tab or Tabs.Panel component was rendered with invalid value or without value",Elt={keepMounted:!0,orientation:"horizontal",loop:!0,activateTabWithKeyboard:!0,variant:"default",placement:"left"},Clt=(e,{radius:r,color:n,autoContrast:o})=>({root:{"--tabs-radius":hn(r),"--tabs-color":Uo(n,e),"--tabs-text-color":nrt(o,e)?qz({color:n,theme:e,autoContrast:o}):void 0}}),U0=We((e,r)=>{const n=ze("Tabs",Elt,e),{defaultValue:o,value:i,onChange:a,orientation:l,children:s,loop:c,id:d,activateTabWithKeyboard:u,allowTabDeactivation:p,variant:f,color:m,radius:v,inverted:w,placement:x,keepMounted:k,classNames:C,styles:_,unstyled:$,className:R,style:T,vars:A,autoContrast:z,mod:j,attributes:I,...N}=n,L=bl(d),[H,P]=qd({value:i,defaultValue:o,finalValue:null,onChange:a}),V=dt({name:"Tabs",props:n,classes:H0,className:R,style:T,classNames:C,styles:_,unstyled:$,attributes:I,vars:A,varsResolver:Clt});return y.jsx(Slt,{value:{placement:x,value:H,orientation:l,id:L,loop:c,activateTabWithKeyboard:u,getTabId:Sne(`${L}-tab`,Xae),getPanelId:Sne(`${L}-panel`,Xae),onChange:P,allowTabDeactivation:p,variant:f,color:m,radius:v,inverted:w,keepMounted:k,unstyled:$,getStyles:V},children:y.jsx(Ae,{ref:r,id:L,variant:f,mod:[{orientation:l,inverted:l==="horizontal"&&w,placement:l==="vertical"&&x},j],...V("root"),...N,children:s})})});U0.classes=H0,U0.displayName="@mantine/core/Tabs",U0.Tab=bj,U0.Panel=vj,U0.List=yj;var Kae={root:"m_7341320d"};const $lt=(e,{size:r,radius:n,variant:o,gradient:i,color:a,autoContrast:l})=>{const s=e.variantColorResolver({color:a||e.primaryColor,theme:e,gradient:i,variant:o||"filled",autoContrast:l});return{root:{"--ti-size":Qt(r,"ti-size"),"--ti-radius":n===void 0?void 0:hn(n),"--ti-bg":a||o?s.background:void 0,"--ti-color":a||o?s.color:void 0,"--ti-bd":a||o?s.border:void 0}}},Zae=We((e,r)=>{const n=ze("ThemeIcon",null,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,autoContrast:d,attributes:u,...p}=n,f=dt({name:"ThemeIcon",classes:Kae,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:u,vars:c,varsResolver:$lt});return y.jsx(Ae,{ref:r,...f("root"),...p})});Zae.classes=Kae,Zae.displayName="@mantine/core/ThemeIcon";const Rlt=["h1","h2","h3","h4","h5","h6"],zlt=["xs","sm","md","lg","xl"];function Tlt(e,r){const n=r!==void 0?r:`h${e}`;return Rlt.includes(n)?{fontSize:`var(--mantine-${n}-font-size)`,fontWeight:`var(--mantine-${n}-font-weight)`,lineHeight:`var(--mantine-${n}-line-height)`}:zlt.includes(n)?{fontSize:`var(--mantine-font-size-${n})`,fontWeight:`var(--mantine-h${e}-font-weight)`,lineHeight:`var(--mantine-h${e}-line-height)`}:{fontSize:Ne(n),fontWeight:`var(--mantine-h${e}-font-weight)`,lineHeight:`var(--mantine-h${e}-line-height)`}}var Qae={root:"m_8a5d1357"};const jlt={order:1},Alt=(e,{order:r,size:n,lineClamp:o,textWrap:i})=>{const a=Tlt(r||1,n);return{root:{"--title-fw":a.fontWeight,"--title-lh":a.lineHeight,"--title-fz":a.fontSize,"--title-line-clamp":typeof o=="number"?o.toString():void 0,"--title-text-wrap":i}}},Jae=We((e,r)=>{const n=ze("Title",jlt,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,order:c,vars:d,size:u,variant:p,lineClamp:f,textWrap:m,mod:v,attributes:w,...x}=n,k=dt({name:"Title",props:n,classes:Qae,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:w,vars:d,varsResolver:Alt});return[1,2,3,4,5,6].includes(c)?y.jsx(Ae,{...k("root"),component:`h${c}`,variant:p,ref:r,mod:[{order:c,"data-line-clamp":typeof f=="number"},v],size:u,...x}):null});Jae.classes=Qae,Jae.displayName="@mantine/core/Title";function ele(e,r,n){if(!e||!r)return[];const o=n.indexOf(e),i=n.indexOf(r),a=Math.min(o,i),l=Math.max(o,i);return n.slice(a,l+1)}function xj({node:e,getStyles:r,rootIndex:n,controller:o,expandOnClick:i,selectOnClick:a,isSubtree:l,level:s=1,renderNode:c,flatValues:d,allowRangeSelection:u,expandOnSpace:p,checkOnSpace:f}){const m=S.useRef(null),v=(e.children||[]).map(_=>y.jsx(xj,{node:_,flatValues:d,getStyles:r,rootIndex:void 0,level:s+1,controller:o,expandOnClick:i,isSubtree:!0,renderNode:c,selectOnClick:a,allowRangeSelection:u,expandOnSpace:p,checkOnSpace:f},_.value)),w=_=>{if(_.nativeEvent.code==="ArrowRight"&&(_.stopPropagation(),_.preventDefault(),o.expandedState[e.value]?_.currentTarget.querySelector("[role=treeitem]")?.focus():o.expand(e.value)),_.nativeEvent.code==="ArrowLeft"&&(_.stopPropagation(),_.preventDefault(),o.expandedState[e.value]&&(e.children||[]).length>0?o.collapse(e.value):l&&j0(_.currentTarget,"[role=treeitem]")?.focus()),_.nativeEvent.code==="ArrowDown"||_.nativeEvent.code==="ArrowUp"){const $=j0(_.currentTarget,"[data-tree-root]");if(!$)return;_.stopPropagation(),_.preventDefault();const R=Array.from($.querySelectorAll("[role=treeitem]")),T=R.indexOf(_.currentTarget);if(T===-1)return;const A=_.nativeEvent.code==="ArrowDown"?T+1:T-1;if(R[A]?.focus(),_.shiftKey){const z=R[A];z&&o.setSelectedState(ele(o.anchorNode,z.dataset.value,d))}}_.nativeEvent.code==="Space"&&(p&&(_.stopPropagation(),_.preventDefault(),o.toggleExpanded(e.value)),f&&(_.stopPropagation(),_.preventDefault(),o.isNodeChecked(e.value)?o.uncheckNode(e.value):o.checkNode(e.value)))},x=_=>{_.stopPropagation(),u&&_.shiftKey&&o.anchorNode?(o.setSelectedState(ele(o.anchorNode,e.value,d)),m.current?.focus()):(i&&o.toggleExpanded(e.value),a&&o.select(e.value),m.current?.focus())},k=o.selectedState.includes(e.value),C={...r("label"),onClick:x,"data-selected":k||void 0,"data-value":e.value,"data-hovered":o.hoveredNode===e.value||void 0};return y.jsxs("li",{...r("node",{style:{"--label-offset":`calc(var(--level-offset) * ${s-1})`}}),role:"treeitem","aria-selected":k,"data-value":e.value,"data-selected":k||void 0,"data-hovered":o.hoveredNode===e.value||void 0,"data-level":s,tabIndex:n===0?0:-1,onKeyDown:w,ref:m,onMouseOver:_=>{_.stopPropagation(),o.setHoveredNode(e.value)},onMouseLeave:_=>{_.stopPropagation(),o.setHoveredNode(null)},children:[typeof c=="function"?c({node:e,level:s,selected:k,tree:o,expanded:o.expandedState[e.value]||!1,hasChildren:Array.isArray(e.children)&&e.children.length>0,elementProps:C}):y.jsx("div",{...C,children:e.label}),o.expandedState[e.value]&&v.length>0&&y.jsx(Ae,{component:"ul",role:"group",...r("subtree"),"data-level":s,children:v})]})}xj.displayName="@mantine/core/TreeNode";function k5(e,r,n=[]){const o=[];for(const i of e)if(Array.isArray(i.children)&&i.children.length>0){const a=k5(i.children,r,n);if(a.currentTreeChecked.length===i.children.length){const l=a.currentTreeChecked.every(c=>c.checked),s={checked:l,indeterminate:!l,value:i.value,hasChildren:!0};o.push(s),n.push(s)}else if(a.currentTreeChecked.length>0){const l={checked:!1,indeterminate:!0,value:i.value,hasChildren:!0};o.push(l),n.push(l)}}else if(r.includes(i.value)){const a={checked:!0,indeterminate:!1,value:i.value,hasChildren:!1};o.push(a),n.push(a)}return{result:n,currentTreeChecked:o}}function tle(e,r){for(const n of r){if(n.value===e)return n;if(Array.isArray(n.children)){const o=tle(e,n.children);if(o)return o}}return null}function _5(e,r,n=[]){const o=tle(e,r);return o?!Array.isArray(o.children)||o.children.length===0?[o.value]:(o.children.forEach(i=>{Array.isArray(i.children)&&i.children.length>0?_5(i.value,r,n):n.push(i.value)}),n):n}function rle(e){return e.reduce((r,n)=>(Array.isArray(n.children)&&n.children.length>0?r.push(...rle(n.children)):r.push(n.value),r),[])}function Dlt(e,r,n){return n.length===0?!1:n.includes(e)?!0:k5(r,n).result.some(o=>o.value===e&&o.checked)}const Plt=jne(Dlt);function Mlt(e,r,n){return n.length===0?!1:k5(r,n).result.some(o=>o.value===e&&o.indeterminate)}const Nlt=jne(Mlt);function nle(e,r,n,o={}){return r.forEach(i=>{o[i.value]=i.value in e?e[i.value]:i.value===n,Array.isArray(i.children)&&nle(e,i.children,n,o)}),o}function Blt(e,r){const n=[];return e.forEach(o=>n.push(..._5(o,r))),Array.from(new Set(n))}function Ilt({initialSelectedState:e=[],initialCheckedState:r=[],initialExpandedState:n={},multiple:o=!1,onNodeCollapse:i,onNodeExpand:a}={}){const[l,s]=S.useState([]),[c,d]=S.useState(n),[u,p]=S.useState(e),[f,m]=S.useState(r),[v,w]=S.useState(null),[x,k]=S.useState(null),C=S.useCallback(B=>{d(F=>nle(F,B,u)),m(F=>Blt(F,B)),s(B)},[u,f]),_=S.useCallback(B=>{d(F=>{const q={...F,[B]:!F[B]};return q[B]?a?.(B):i?.(B),q})},[i,a]),$=S.useCallback(B=>{d(F=>(F[B]!==!1&&i?.(B),{...F,[B]:!1}))},[i]),R=S.useCallback(B=>{d(F=>(F[B]!==!0&&a?.(B),{...F,[B]:!0}))},[a]),T=S.useCallback(()=>{d(B=>{const F={...B};return Object.keys(F).forEach(q=>{F[q]=!0}),F})},[]),A=S.useCallback(()=>{d(B=>{const F={...B};return Object.keys(F).forEach(q=>{F[q]=!1}),F})},[]),z=S.useCallback(B=>p(F=>o?F.includes(B)?(w(null),F.filter(q=>q!==B)):(w(B),[...F,B]):F.includes(B)?(w(null),[]):(w(B),[B])),[]),j=S.useCallback(B=>{w(B),p(F=>o?F.includes(B)?F:[...F,B]:[B])},[]),I=S.useCallback(B=>{v===B&&w(null),p(F=>F.filter(q=>q!==B))},[]),N=S.useCallback(()=>{p([]),w(null)},[]),L=S.useCallback(B=>{const F=_5(B,l);m(q=>Array.from(new Set([...q,...F])))},[l]),H=S.useCallback(B=>{const F=_5(B,l);m(q=>q.filter(G=>!F.includes(G)))},[l]),P=S.useCallback(()=>{m(()=>rle(l))},[l]),V=S.useCallback(()=>{m([])},[]);return{multiple:o,expandedState:c,selectedState:u,checkedState:f,anchorNode:v,initialize:C,toggleExpanded:_,collapse:$,expand:R,expandAllNodes:T,collapseAllNodes:A,setExpandedState:d,checkNode:L,uncheckNode:H,checkAllNodes:P,uncheckAllNodes:V,setCheckedState:m,toggleSelected:z,select:j,deselect:I,clearSelected:N,setSelectedState:p,hoveredNode:x,setHoveredNode:k,getCheckedNodes:()=>k5(l,f).result,isNodeChecked:B=>Plt(B,l,f),isNodeIndeterminate:B=>Nlt(B,l,f)}}var ole={root:"m_f698e191",subtree:"m_75f3ecf",node:"m_f6970eb1",label:"m_dc283425"};function ile(e){return e.reduce((r,n)=>(r.push(n.value),n.children&&r.push(...ile(n.children)),r),[])}const Olt={expandOnClick:!0,allowRangeSelection:!0,expandOnSpace:!0},Llt=(e,{levelOffset:r})=>({root:{"--level-offset":ro(r)}}),ale=We((e,r)=>{const n=ze("Tree",Olt,e),{classNames:o,className:i,style:a,styles:l,unstyled:s,vars:c,data:d,expandOnClick:u,tree:p,renderNode:f,selectOnClick:m,clearSelectionOnOutsideClick:v,allowRangeSelection:w,expandOnSpace:x,levelOffset:k,checkOnSpace:C,attributes:_,...$}=n,R=Ilt(),T=p||R,A=dt({name:"Tree",classes:ole,props:n,className:i,style:a,classNames:o,styles:l,unstyled:s,attributes:_,vars:c,varsResolver:Llt}),z=Ene(()=>v&&T.clearSelected()),j=on(r,z),I=S.useMemo(()=>ile(d),[d]);S.useEffect(()=>{T.initialize(d)},[d]);const N=d.map((L,H)=>y.jsx(xj,{node:L,getStyles:A,rootIndex:H,expandOnClick:u,selectOnClick:m,controller:T,renderNode:f,flatValues:I,allowRangeSelection:w,expandOnSpace:x,checkOnSpace:C},L.value));return y.jsx(Ae,{component:"ul",ref:j,...A("root"),...$,role:"tree","aria-multiselectable":T.multiple,"data-tree-root":!0,children:N})});ale.displayName="@mantine/core/Tree",ale.classes=ole;var Flt="Invariant failed";function S5(e,r){if(!e)throw new Error(Flt)}function Vlt(e){return typeof e=="function"}function lle(e,r){return Vlt(e)?e(r):e}function qlt(e,r){return r.reduce((n,o)=>(n[o]=e[o],n),{})}function sle(e,r){if(e===r)return e;const n=r,o=dle(e)&&dle(n);if(o||E5(e)&&E5(n)){const i=o?e:Object.keys(e),a=i.length,l=o?n:Object.keys(n),s=l.length,c=o?[]:{};let d=0;for(let u=0;u"u")return!0;const n=r.prototype;return!(!cle(n)||!n.hasOwnProperty("isPrototypeOf"))}function cle(e){return Object.prototype.toString.call(e)==="[object Object]"}function dle(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function ule(e,r){let n=Object.keys(e);return r&&(n=n.filter(o=>e[o]!==void 0)),n}function wj(e,r,n){if(e===r)return!0;if(typeof e!=typeof r)return!1;if(E5(e)&&E5(r)){const o=n?.ignoreUndefined??!0,i=ule(e,o),a=ule(r,o);return!n?.partial&&i.length!==a.length?!1:a.every(l=>wj(e[l],r[l],n))}return Array.isArray(e)&&Array.isArray(r)?e.length!==r.length?!1:!e.some((o,i)=>!wj(o,r[i],n)):!1}function Hlt(e){let r,n;const o=new Promise((i,a)=>{r=i,n=a});return o.status="pending",o.resolve=i=>{o.status="resolved",o.value=i,r(i)},o.reject=i=>{o.status="rejected",n(i)},o}function C5(e,r){return e?.endsWith("/")&&e!=="/"&&e!==`${r}/`?e.slice(0,-1):e}function Ult(e,r,n){return C5(e,n)===C5(r,n)}function $5(e){return!!e?.isNotFound}const ple="tsr-scroll-restoration-v1_3";let hle=!1;try{hle=typeof window<"u"&&typeof window.sessionStorage=="object"}catch{}hle&&JSON.parse(window.sessionStorage.getItem(ple)||"null");const fle=e=>e.state.key||e.href;function Wlt(e,r,n,o,i){var a;let l;try{l=JSON.parse(sessionStorage.getItem(e)||"{}")}catch(d){console.error(d);return}const s=r||((a=window.history.state)==null?void 0:a.key),c=l[s];(()=>{if(o&&c){for(const u in c){const p=c[u];if(u==="window")window.scrollTo({top:p.scrollY,left:p.scrollX,behavior:n});else if(u){const f=document.querySelector(u);f&&(f.scrollLeft=p.scrollX,f.scrollTop=p.scrollY)}}return}const d=window.location.hash.split("#")[1];if(d){const u=(window.history.state||{}).__hashScrollIntoViewOptions??!0;if(u){const p=document.getElementById(d);p&&p.scrollIntoView(u)}return}["window",...i?.filter(u=>u!=="window")??[]].forEach(u=>{const p=u==="window"?window:document.querySelector(u);p&&p.scrollTo({top:0,left:0,behavior:n})})})()}const gle="__root__";function Glt(e){return!!e?.isRedirect}function Ylt(e){const r=e.resolvedLocation,n=e.location,o=r?.pathname!==n.pathname,i=r?.href!==n.href,a=r?.hash!==n.hash;return{fromLocation:r,toLocation:n,pathChanged:o,hrefChanged:i,hashChanged:a}}const Xlt="Error preloading route! ☝️";function mle(e){const r=e.errorComponent??kj;return y.jsx(Klt,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:o})=>n?S.createElement(r,{error:n,reset:o}):e.children})}class Klt extends S.Component{constructor(){super(...arguments),this.state={error:null}}static getDerivedStateFromProps(r){return{resetKey:r.getResetKey()}}static getDerivedStateFromError(r){return{error:r}}reset(){this.setState({error:null})}componentDidUpdate(r,n){n.error&&n.resetKey!==this.state.resetKey&&this.reset()}componentDidCatch(r,n){this.props.onCatch&&this.props.onCatch(r,n)}render(){return this.props.children({error:this.state.resetKey!==this.props.getResetKey()?null:this.state.error,reset:()=>{this.reset()}})}}function kj({error:e}){const[r,n]=S.useState(!1);return y.jsxs("div",{style:{padding:".5rem",maxWidth:"100%"},children:[y.jsxs("div",{style:{display:"flex",alignItems:"center",gap:".5rem"},children:[y.jsx("strong",{style:{fontSize:"1rem"},children:"Something went wrong!"}),y.jsx("button",{style:{appearance:"none",fontSize:".6em",border:"1px solid currentColor",padding:".1rem .2rem",fontWeight:"bold",borderRadius:".25rem"},onClick:()=>n(o=>!o),children:r?"Hide Error":"Show Error"})]}),y.jsx("div",{style:{height:".25rem"}}),r?y.jsx("div",{children:y.jsx("pre",{style:{fontSize:".7em",border:"1px solid red",borderRadius:".25rem",padding:".3rem",color:"red",overflow:"auto"},children:e.message?y.jsx("code",{children:e.message}):null})}):null]})}function Zlt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var yle={exports:{}},_j={},vle={exports:{}},Sj={},ble;function Qlt(){if(ble)return Sj;ble=1;var e=Zr;function r(p,f){return p===f&&(p!==0||1/p===1/f)||p!==p&&f!==f}var n=typeof Object.is=="function"?Object.is:r,o=e.useState,i=e.useEffect,a=e.useLayoutEffect,l=e.useDebugValue;function s(p,f){var m=f(),v=o({inst:{value:m,getSnapshot:f}}),w=v[0].inst,x=v[1];return a(function(){w.value=m,w.getSnapshot=f,c(w)&&x({inst:w})},[p,m,f]),i(function(){return c(w)&&x({inst:w}),p(function(){c(w)&&x({inst:w})})},[p]),l(m),m}function c(p){var f=p.getSnapshot;p=p.value;try{var m=f();return!n(p,m)}catch{return!0}}function d(p,f){return f()}var u=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:s;return Sj.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:u,Sj}var xle;function wle(){return xle||(xle=1,vle.exports=Qlt()),vle.exports}var kle;function Jlt(){if(kle)return _j;kle=1;var e=Zr,r=wle();function n(d,u){return d===u&&(d!==0||1/d===1/u)||d!==d&&u!==u}var o=typeof Object.is=="function"?Object.is:n,i=r.useSyncExternalStore,a=e.useRef,l=e.useEffect,s=e.useMemo,c=e.useDebugValue;return _j.useSyncExternalStoreWithSelector=function(d,u,p,f,m){var v=a(null);if(v.current===null){var w={hasValue:!1,value:null};v.current=w}else w=v.current;v=s(function(){function k(T){if(!C){if(C=!0,_=T,T=f(T),m!==void 0&&w.hasValue){var A=w.value;if(m(A,T))return $=A}return $=T}if(A=$,o(_,T))return A;var z=f(T);return m!==void 0&&m(A,z)?(_=T,A):(_=T,$=z)}var C=!1,_,$,R=p===void 0?null:p;return[function(){return k(u())},R===null?void 0:function(){return k(R())}]},[u,p,f,m]);var x=i(d,v[0],v[1]);return l(function(){w.hasValue=!0,w.value=x},[x]),c(x),x},_j}var _le;function est(){return _le||(_le=1,yle.exports=Jlt()),yle.exports}var Sle=est();const tst=Zlt(Sle);function rst(e,r=n=>n){return Sle.useSyncExternalStoreWithSelector(e.subscribe,()=>e.state,()=>e.state,r,nst)}function nst(e,r){if(Object.is(e,r))return!0;if(typeof e!="object"||e===null||typeof r!="object"||r===null)return!1;if(e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(const[o,i]of e)if(!r.has(o)||!Object.is(i,r.get(o)))return!1;return!0}if(e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(const o of e)if(!r.has(o))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(r).length)return!1;for(let o=0;o"u"?Ej:window.__TSR_ROUTER_CONTEXT__?window.__TSR_ROUTER_CONTEXT__:(window.__TSR_ROUTER_CONTEXT__=Ej,Ej)}function Up(e){const r=S.useContext(ost());return e?.warn,r}function El(e){const r=Up({warn:e?.router===void 0}),n=e?.router||r,o=S.useRef(void 0);return rst(n.__store,i=>{if(e?.select){if(e.structuralSharing??n.options.defaultStructuralSharing){const a=sle(o.current,e.select(i));return o.current=a,a}return e.select(i)}return i})}const Ele=S.createContext(void 0);S.createContext(void 0);function ist(e){const r=El({select:n=>`not-found-${n.location.pathname}-${n.status}`});return y.jsx(mle,{getResetKey:()=>r,onCatch:(n,o)=>{var i;if($5(n))(i=e.onCatch)==null||i.call(e,n,o);else throw n},errorComponent:({error:n})=>{var o;if($5(n))return(o=e.fallback)==null?void 0:o.call(e,n);throw n},children:e.children})}function ast(){return y.jsx("p",{children:"Not Found"})}function Cj(e){return y.jsx(y.Fragment,{children:e.children})}function Cle(e,r,n){return r.options.notFoundComponent?y.jsx(r.options.notFoundComponent,{data:n}):e.options.defaultNotFoundComponent?y.jsx(e.options.defaultNotFoundComponent,{data:n}):y.jsx(ast,{})}var $j,$le;function lst(){if($le)return $j;$le=1;const e={},r=e.hasOwnProperty,n=(z,j)=>{for(const I in z)r.call(z,I)&&j(I,z[I])},o=(z,j)=>(j&&n(j,(I,N)=>{z[I]=N}),z),i=(z,j)=>{const I=z.length;let N=-1;for(;++N"\\u"+("0000"+z).slice(-4),l=(z,j)=>{let I=z.toString(16);return j?I:I.toUpperCase()},s=e.toString,c=Array.isArray,d=z=>typeof Buffer=="function"&&Buffer.isBuffer(z),u=z=>s.call(z)=="[object Object]",p=z=>typeof z=="string"||s.call(z)=="[object String]",f=z=>typeof z=="number"||s.call(z)=="[object Number]",m=z=>typeof z=="bigint",v=z=>typeof z=="function",w=z=>s.call(z)=="[object Map]",x=z=>s.call(z)=="[object Set]",k={"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},C=/[\\\b\f\n\r\t]/,_=/[0-9]/,$=/[\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,R=/([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^]/g,T=/([\uD800-\uDBFF][\uDC00-\uDFFF])|([\uD800-\uDFFF])|(['"`])|[^ !#-&\(-\[\]-_a-~]/g,A=(z,j)=>{const I=()=>{F=B,++j.indentLevel,B=j.indent.repeat(j.indentLevel)},N={escapeEverything:!1,minimal:!1,isScriptContext:!1,quotes:"single",wrap:!1,es6:!1,json:!1,compact:!0,lowercaseHex:!1,numbers:"decimal",indent:" ",indentLevel:0,__inline1__:!1,__inline2__:!1},L=j&&j.json;L&&(N.quotes="double",N.wrap=!0),j=o(N,j),j.quotes!="single"&&j.quotes!="double"&&j.quotes!="backtick"&&(j.quotes="single");const H=j.quotes=="double"?'"':j.quotes=="backtick"?"`":"'",P=j.compact,V=j.lowercaseHex;let B=j.indent.repeat(j.indentLevel),F="";const q=j.__inline1__,G=j.__inline2__,U=P?"":` -`;let Y,K=!0;const O=j.numbers=="binary",W=j.numbers=="octal",Z=j.numbers=="decimal",Q=j.numbers=="hexadecimal";if(L&&z&&v(z.toJSON)&&(z=z.toJSON()),!p(z)){if(w(z))return z.size==0?"new Map()":(P||(j.__inline1__=!0,j.__inline2__=!1),"new Map("+A(Array.from(z),j)+")");if(x(z))return z.size==0?"new Set()":"new Set("+A(Array.from(z),j)+")";if(d(z))return z.length==0?"Buffer.from([])":"Buffer.from("+A(Array.from(z),j)+")";if(c(z))return Y=[],j.wrap=!0,q&&(j.__inline1__=!1,j.__inline2__=!0),G||I(),i(z,te=>{K=!1,G&&(j.__inline2__=!1),Y.push((P||G?"":B)+A(te,j))}),K?"[]":G?"["+Y.join(", ")+"]":"["+U+Y.join(","+U)+U+(P?"":F)+"]";if(f(z)||m(z)){if(L)return JSON.stringify(Number(z));let te;if(Z)te=String(z);else if(Q){let re=z.toString(16);V||(re=re.toUpperCase()),te="0x"+re}else O?te="0b"+z.toString(2):W&&(te="0o"+z.toString(8));return m(z)?te+"n":te}else return m(z)?L?JSON.stringify(Number(z)):z+"n":u(z)?(Y=[],j.wrap=!0,I(),n(z,(te,re)=>{K=!1,Y.push((P?"":B)+A(te,j)+":"+(P?"":" ")+A(re,j))}),K?"{}":"{"+U+Y.join(","+U)+U+(P?"":F)+"}"):L?JSON.stringify(z)||"null":String(z)}const ie=j.escapeEverything?R:T;return Y=z.replace(ie,(te,re,ue,_e,ce,pe)=>{if(re){if(j.minimal)return re;const je=re.charCodeAt(0),Be=re.charCodeAt(1);if(j.es6){const Je=(je-55296)*1024+Be-56320+65536;return"\\u{"+l(Je,V)+"}"}return a(l(je,V))+a(l(Be,V))}if(ue)return a(l(ue.charCodeAt(0),V));if(te=="\0"&&!L&&!_.test(pe.charAt(ce+1)))return"\\0";if(_e)return _e==H||j.escapeEverything?"\\"+_e:_e;if(C.test(te))return k[te];if(j.minimal&&!$.test(te))return te;const xe=l(te.charCodeAt(0),V);return L||xe.length>2?a(xe):"\\x"+("00"+xe).slice(-2)}),H=="`"&&(Y=Y.replace(/\$\{/g,"\\${")),j.isScriptContext&&(Y=Y.replace(/<\/(script|style)/gi,"<\\/$1").replace(/