diff --git a/.github/workflows/chart-doc.yaml b/.github/workflows/chart-doc.yaml deleted file mode 100644 index 6da6c9c4..00000000 --- a/.github/workflows/chart-doc.yaml +++ /dev/null @@ -1,85 +0,0 @@ -name: Document Charts - -on: - pull_request: - -jobs: - document: - runs-on: ubuntu-latest - name: helm-docs - steps: - - name: Checkout - uses: actions/checkout@v4 - - - uses: r-lib/actions/pr-fetch@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Helm - uses: azure/setup-helm@v3 - with: - version: v3.6.3 - - - name: install Just - uses: extractions/setup-just@v2 - - - name: Install helm-docs - env: - HELM_DOCS_VERSION: 1.13.1 - run: | - just setup - - - name: Install Quarto - uses: quarto-dev/quarto-actions/setup@v2 - with: - version: pre-release - - - name: Render Quarto Project - uses: quarto-dev/quarto-actions/render@v2 - - - name: Commit results - run: | - set -xe - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git commit other-charts/*/README.md charts/*/README.md -m 'Update helm-docs and README.md' || echo "No changes to commit" - - - uses: r-lib/actions/pr-push@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - rbac: - runs-on: ubuntu-latest - name: rbac - needs: document - steps: - - name: Checkout - uses: actions/checkout@v2 - - - uses: r-lib/actions/pr-fetch@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Helm - uses: azure/setup-helm@v3 - with: - version: v3.6.3 - - - name: install Just - uses: extractions/setup-just@v2 - - - name: Compute and update dependent files - run: | - just rbac - - - name: Commit results - run: | - set -xeo pipefail - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git add examples/rbac/rstudio-launcher-rbac*.yaml || echo "No files to add" - git commit examples/rbac/rstudio-launcher-rbac*.yaml -m 'Update rbac yaml' || echo "No changes to commit" - - - uses: r-lib/actions/pr-push@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index f279b240..00000000 --- a/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -b0d6b527 \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..5e3864cd --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +helm.rstudio.com \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..021f9732 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,49 @@ +## Filing Bugs + +If you're experiencing behavior that appears to be a bug in any of the Helm charts, you're welcome to [file an issue](https://github.com/rstudio/helm/issues/new). + +## Enhancements + +You're also welcome to submit ideas for enhancements to our Helm charts. When doing so, please [search the issue list](https://github.com/rstudio/helm/issues) to see if the enhancement has already been filed. If it has, vote for it (add a reaction to it) and optionally add a comment with your perspective on the idea. + +## Contributing Code + +We welcome contributions to our Helm charts! Before submitting your contribution, we ask that you ensure the change is helpful in a generic sense and is not tied to any specific organizational use-cases that would not be valuable to other organizations. + +To submit a contribution: + +1. [Fork](https://github.com/rstudio/helm/fork) the repository and make your changes. + +2. Submit a [pull request](https://help.github.com/articles/using-pull-requests). + +3. Sign the Contributor License Agreement via GitHub. A comment will be added to your pull request indicating if you need to sign the agreement and the link to do so. + +We'll try to be as responsive as possible in reviewing and accepting pull requests. We highly appreciate your contributions! + +## Assumptions / Common Dev Workflows + +- Changes to the `rstudio-library` chart will update all downstream charts at + the same time (via the `file://` syntax in `Chart.yaml`) +- CI only runs on local branches (i.e. not from forks). This can make + evaluating code from contributors tricky. By creating a duplicate branch + locally, we can "trick" CI into running on the same commits +- CI requires that the chart version get bumped for any change in the directory + (including README) +- READMEs are generated in CI by [Go templating](./charts/_templates.gotmpl) + and `helm-docs` +- If `index.yaml` gets out of date on the repository, see + [`./scripts/`](./scripts) for a workflow to fix + +## Code of Conduct + +As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion. + +Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the Contributor Covenant, version 1.0.0, available at . diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..bd82e9e3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 RStudio, PBC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..7cb67d78 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# RStudio Helm charts + +[Link to GitHub](https://github.com/rstudio/helm) + +## Usage + +1. Install [Helm](https://helm.sh). Please refer to Helm's [documentation](https://helm.sh/docs/) for more information on getting started. + +2. Add the RStudio Helm repo: + + ```console + helm repo add rstudio https://helm.rstudio.com + ``` + +3. View charts: + + ```console + helm search repo rstudio + ``` + +4. [Look at chart READMEs](https://github.com/rstudio/helm) + +## Support + +**IMPORTANT:** + +These charts are provided as a convenience to RStudio customers and are not formally supported by RStudio. If you +have questions about these charts, you can ask them in the [issues](https://github.com/rstudio/helm/issues/new/choose) +in the repository or to your support representative, who will route them appropriately. + +Bugs or feature requests should be opened in an [issue](https://github.com/rstudio/helm/issues/new/choose). + +## Contributing + +RStudio values your contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more information. + +## License + +[MIT License](./LICENSE) diff --git a/artifacthub-repo.yml b/artifacthub-repo.yml new file mode 100644 index 00000000..80a294ef --- /dev/null +++ b/artifacthub-repo.yml @@ -0,0 +1,9 @@ +# from https://github.com/artifacthub/hub/blob/master/docs/metadata/artifacthub-repo.yml +repositoryID: 2e4468ce-cda6-492e-a7a9-04c572b1450b +owners: + - name: colearendt + email: cole@rstudio.com + - name: sol-eng + email: docker@rstudio.com +ignore: + - name: rstudio-launcher-rbac diff --git a/charts/posit-chronicle/NEWS.html b/charts/posit-chronicle/NEWS.html deleted file mode 100644 index 70f5bbe7..00000000 --- a/charts/posit-chronicle/NEWS.html +++ /dev/null @@ -1,985 +0,0 @@ - - - - - - - - - -Posit Helm Charts – news - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Changelog

-
-

0.3.1

-
    -
  • Documentation site updates
  • -
-
-
-

0.3.0

-
    -
  • Bump Chronicle to version 2024.03.0
  • -
  • Moves pod.NodeSelector value to the top level as NodeSelector, in line with other charts
  • -
  • Disable local storage by default
  • -
-
-
-

0.2.2

-
    -
  • Updates to support standalone documentation site
  • -
-
-
-

0.2.1

-
    -
  • Update docs
  • -
-
-
-

0.2.0

-
    -
  • Add values for pod.terminationGracePeriodSeconds and default image.imagePullPolicy = IfNotPresent
  • -
-
-
-

0.1.0

-
    -
  • Initial public release and integration into Posit’s Helm repository. Includes the new posit-chronicle chart, CI components, and documentation.
  • -
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/posit-chronicle/README.html b/charts/posit-chronicle/README.html deleted file mode 100644 index ca715a89..00000000 --- a/charts/posit-chronicle/README.html +++ /dev/null @@ -1,1365 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Posit Chronicle

-

Version: 0.3.1 AppVersion: 2024.03.0

-
-

Official Helm chart for Posit Chronicle Server

-

Chronicle helps data science managers and other stakeholders understand their organization’s use of other Posit products, primarily Posit Connect and Workbench.

-
-
-

For production

-

To ensure a stable production deployment:

-
    -
  • “Pin” the version of the Helm chart that you are using. You can do this using the: -
      -
    • helm dependency command and the associated “Chart.lock” files or

    • -
    • the --version flag.

      -
      -
      -
      - -
      -
      -Important -
      -
      -
      -

      This protects you from breaking changes.

      -
      -
    • -
  • -
  • Before upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.
  • -
  • Read NEWS.md for updates on breaking changes and the documentation below on how to use the chart.
  • -
-
-
-

Installing the chart

-

To install the chart with the release name my-release at version 0.3.1:

-
helm repo add rstudio https://helm.rstudio.com
-helm upgrade --install my-release rstudio/posit-chronicle --version=0.3.1
-

To explore other chart versions, look at:

-
helm search repo rstudio/posit-chronicle -l
-
-
-

Usage

-

This chart deploys only the Chronicle server and is meant to be used in tandem with the Workbench and Connect charts. To actually send data to the server, you will need to run the Chronicle agent as a sidecar container on your Workbench or Connect server pods by setting pod.sidecar in their respective values.yaml files

-

Here is an example of Helm values to run the agent sidecar in Workbench, where we set up a shared volume between containers for audit logs:

-
pod:
-  # We will need to create a new volume to share audit logs between
-  # the rstudio (workbench) and chronicle-agent containers
-  volumes:
-    - name: logs
-      emptyDir: {}
-  volumeMounts:
-    - name: logs
-      mountPath: "/var/lib/rstudio-server/audit"
-  sidecar:
-    - name: chronicle-agent
-      image: ghcr.io/rstudio/chronicle-agent:2024.03.0
-      volumeMounts:
-      - name: logs
-        mountPath: "/var/lib/rstudio-server/audit"
-      env:
-      - name: CHRONICLE_SERVER_ADDRESS
-        value: "http://chronicle-server.default"
-

And here is an example of Helm values for Connect, where a Connect API key from a Kubernetes Secret is used to unlock more detailed metrics:

-
pod:
-  sidecar:
-    - name: chronicle-agent
-      image: ghcr.io/rstudio/chronicle-agent:2024.03.0
-      env:
-      - name: CHRONICLE_SERVER_ADDRESS
-        value: "http://chronicle-server.default"
-      - name: CONNECT_API_KEY
-        valueFrom:
-          secretKeyRef:
-            name: connect
-            key: apikey
-

Note that it is up to the user to provision this Kubernetes Secret for the Connect API key.

-
-
-

Storage Configuration

-

Chronicle can be configured to persist data to a local Kubernetes Volume, AWS S3, or both.

-

The default configuration uses a local volume, which is suitable if you’d like to access and analyze the data within your cluster:

-
config:
-  LocalStorage:
-    Enabled: true
-    Location: "/chronicle-data"
-    RetentionPeriod: "30d"
-

retentionPeriod controls how long usage data are kept. For example, "120m" for 120 minutes, "36h" for 36 hours, 14d for two weeks, or "0" for unbounded retention. (Units smaller than seconds or larger than days are not supported.)

-

You can also persist data to AWS S3 instead of (or in addition to) local storage:

-
config:
-  S3Storage:
-    Enabled: true
-    Bucket: "posit-chronicle"
-    Region: "us-east-2"
-
-

Using Iam for S3

-

If you are running on EKS, you can use IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:

-
serviceaccount:
-  create: true
-  annotations:
-    eks.amazonaws.com/role-arn:  arn:aws:iam::123456789000:role/iam-role-name-here
-

If you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the S3 storage config allows specifying a profile:

-
config:
-  S3Storage:
-    Enabled: true
-    Bucket: "posit-chronicle"
-    Profile: "my-aws-account"
-    Region: "us-east-2"
-
-
-

Needed S3 Policy Permissions

-

The credentials Chronicle uses for S3 storage must have the following permissions enabled:

-
    -
  • s3:GetObject
  • -
  • s3:ListBucket
  • -
  • s3:PutObject
  • -
  • s3:DeleteObject
  • -
-
-
-
-

Values

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyTypeDefaultDescription
config.HTTPS.Certificatestring""
config.HTTPS.Enabledboolfalse
config.HTTPS.Keystring""
config.LocalStorage.Enabledboolfalse
config.LocalStorage.Locationstring"./chronicle-data"
config.LocalStorage.RetentionPeriodstring"30d"
config.Logging.ServiceLogstring"STDOUT"
config.Logging.ServiceLogFormatstring"TEXT"
config.Logging.ServiceLogLevelstring"INFO"
config.Metrics.Enabledbooltrue
config.Profiling.Enabledboolfalse
config.S3Storage.Bucketstring"posit-chronicle"
config.S3Storage.Enabledboolfalse
config.S3Storage.Prefixstring""
config.S3Storage.Profilestring""
config.S3Storage.Regionstring"us-east-2"
image.imagePullPolicystring"IfNotPresent"
image.repositorystring"ghcr.io/rstudio/chronicle"
image.tagstring"2024.03.0"
nodeSelectorobject{}A map used verbatim as the pod’s “nodeSelector” definition
pod.affinityobject{}A map used verbatim as the pod’s “affinity” definition
pod.annotationsobject{}Additional annotations to add to the chronicle-server pods
pod.args[0]string"start"
pod.args[1]string"-c"
pod.args[2]string"/etc/posit-chronicle/posit-chronicle.gcfg"
pod.commandstring"/chronicle"The command and args to run in the chronicle-server container
pod.envlist[]Optional environment variables
pod.labelsobject{}Additional labels to add to the chronicle-server pods
pod.selectorLabelsobject{}Additional selector labels to add to the chronicle-server pods
pod.terminationGracePeriodSecondsint30The termination grace period seconds allowed for the pod before shutdown
pod.tolerationslist[]An array used verbatim as the pod’s “tolerations” definition
replicasint1The number of replica pods to maintain for this service
service.annotationsobject{}Additional annotations to add to the chronicle-server service
service.labelsobject{}Additional labels to add to the chronicle-server service
service.portint80The port to use for the REST service
service.selectorLabelsobject{}Additional selector labels to add to the chronicle-server service
serviceaccount.annotationsobject{}Additional annotations to add to the chronicle-server serviceaccount
serviceaccount.createboolfalse
serviceaccount.labelsobject{}Additional labels to add to the chronicle-server serviceaccount
storage.persistentVolumeSizestring"1Gi"
-
-

Autogenerated from chart metadata using helm-docs v1.13.1

- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-connect/NEWS.html b/charts/rstudio-connect/NEWS.html deleted file mode 100644 index 92aa1321..00000000 --- a/charts/rstudio-connect/NEWS.html +++ /dev/null @@ -1,1721 +0,0 @@ - - - - - - - - - -Posit Helm Charts – news - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Changelog

-
-

0.6.7

-
    -
  • Documentation site updates
  • -
-
-
-

0.6.6

-
    -
  • Bump Connect version to 2024.04.1
  • -
-
-
-

0.6.5

-
    -
  • Bump Connect version to 2024.04.0
  • -
-
-
-

0.6.4

-
    -
  • Update the default content images in default-runtime.yaml and default-runtime-pro.yaml to include newer R, Python and Quarto versions.
  • -
  • Enable Python and Quarto by default in values.yaml when running in local or off-host execution mode.
  • -
-
-
-

0.6.3

-
    -
  • Bump Chronicle Agent to version 2024.03.0
  • -
-
-
-

0.6.2

-
    -
  • Bump Connect version to 2024.03.0
  • -
-
-
-

0.6.1

-
    -
  • Updates to support standalone documentation site
  • -
-
-
-

0.6.0

-
    -
  • BREAKING: The generated service will now have type ClusterIP set by default.
  • -
  • Add support for setting the loadBalancerIP or clusterIP.
  • -
  • Ignore nodePort settings when the service is not a NodePort.
  • -
  • Improve the documentation for some service-related settings.
  • -
-
-
-

0.5.14

-
    -
  • Bump Connect version to 2024.02.0
  • -
-
-
-

0.5.13

-
    -
  • Add option to set pod.terminationGracePeriodSeconds
  • -
-
-
-

0.5.12

-
    -
  • Bump Connect version to 2024.01.0
  • -
-
-
-

0.5.11

-
    -
  • Bump Connect version to 2023.12.0
  • -
-
-
-

0.5.10

-
    -
  • Add licensing section to the README to provide guidance on using a license file, license key or license server.
  • -
-
-
-

0.5.9

-
    -
  • Bump Connect version to 2023.10.0
  • -
-
-
-

0.5.8

-
    -
  • Bump rstudio-library to 0.1.27 -
      -
    • Fix an issue with mountPath and subPath when license.file.mountSubPath is true
    • -
  • -
-
-
-

0.5.7

-
    -
  • Add support for setting tolerations for Connect
  • -
-
-
-

0.5.6

-
    -
  • Bump Connect version to 2023.09.0
  • -
-
-
-

0.5.5

-
    -
  • Add support for sharedStorage.subPath
  • -
-
-
-

0.5.4

-
    -
  • Bump Connect version to 2023.07.0
  • -
-
-
-

0.5.3

-
    -
  • Added ability to assign labels in service accounts.
  • -
-
-
-

0.5.2

-
    -
  • Add support for pod.command and pod.env for Connect off-host execution sessions -
      -
    • pod.command is a hack for now… it will be removed eventually
    • -
  • -
-
-
-

0.5.1

-
    -
  • Bump Connect version to 2023.06.0
  • -
-
-
-

0.5.0

-
    -
  • BREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30 This change also impacts the default set of content execution images. Changing the execution environment OS will cause a rebuild for all currently deployed content. -
      -
    • If you want to revert this change, set image.tagPrefix=bionic- (server), launcher.defaultInitContainer.tagPrefix=bionic- (content-init), and modify the set of content images defined by launcher.customRuntimeYaml to use bionic instead of ubuntu2204
    • -
    • BREAKING: Off-Host Execution Beta users who are currently evaluating this feature set can use the example values defined in https://github.com/rstudio/helm/tree/main/examples/connect/beta-migration to assit with the content migration from bionic to jammy
    • -
  • -
  • Trim the default set of content execution images to the 4 latest releases of Python/R. -
      -
    • A Quarto installation has been added to all content-base images.
    • -
  • -
  • Allow launcher to configure the Kubernetes API URL and the Service Account token from inside the pod instead of specifying on prestart via environment variables.
  • -
  • Update documentation and README for a bit more clarity.
  • -
  • Add podDisruptionBudget values
  • -
  • Add topologySpreadConstraints values
  • -
-
-
-

0.4.2

-
    -
  • Add a metrics port to the service, which ensures that the ServiceMonitor actually works
  • -
-
-
-

0.4.1

-
    -
  • Fix issue in templates that prevented numeric service accounts from being used.
  • -
-
-
-

0.4.0

-
    -
  • BREAKING: change pod.nodeSelector to nodeSelector for consistency with other charts and the community. In order to highlight the change, we error if pod.nodeSelector is anything other than empty.
  • -
  • BREAKING: turn pod.serviceAccountName WARNING into an error as well.
  • -
  • Add provisional support for launcher.templateValues.pod.env, launcher.templateValues.pod.nodeSelector, and launcher.templateValues.pod.priorityClassName
  • -
  • NOTE: we are making these values induce failure so that CI systems and other deployments are explicit about the unused values. Please share feedback if this creates problems in your environment.
  • -
-
-
-

0.3.19

-
    -
  • Update documentation to remove “beta” label and explain production recommendations
  • -
-
-
-

0.3.18

-
    -
  • Bump Connect version to 2023.03.0
  • -
-
-
-

0.3.17

-
    -
  • Bump Connect version to 2023.01.1
  • -
-
-
-

0.3.16

-
    -
  • Bump rstudio-library to 0.1.24 -
      -
    • Update RBAC definition to support listing of service accounts
    • -
  • -
-
-
-

0.3.15

-
    -
  • Bump Connect Launcher templates to 2.3.0-v1 -
      -
    • added app.kubernetes.io/managed-by: "launcher" in both job.tpl and service.tpl
    • -
    • resource requests and limits calculations in job.tpl
    • -
    • sets serviceAccountName in job.tpl for content jobs
    • -
    • launcher.templateValues.pod.serviceAccountName to set the default service account for content pods
    • -
  • -
-
-
-

0.3.14

-
    -
  • Bump Connect version to 2023.01.0
  • -
-
-
-

0.3.13

-
    -
  • add launcher.defaultInitContainer.securityContext to configure the securityContext on the default initContainer (##319)
  • -
  • add serviceMonitor section for defining a ServiceMonitor object [(##126)[https://github.com/rstudio/helm/issues/126]]
  • -
  • improve consistency in the prometheusExporter configuration section (as compared to the rstudio-workbench chart)
  • -
-
-
-

0.3.12

-
    -
  • Bump Connect version to 2022.12.0
  • -
-
-
-

0.3.11

-
    -
  • Add sharedStorage.volumeName for PVCs that reference a PV
  • -
  • Add sharedStorage.selector as well
  • -
-
-
-

0.3.10

-
    -
  • Deprecate pod.serviceAccountName in favor of rbac.serviceAccount.name (##267)
  • -
  • Allow un-setting rbac.serviceAccount.name (##294)
  • -
-
-
-

0.3.9

-
    -
  • Fix a typo in launcher.defaultInitContainer.imagePullPolicy (##289)
  • -
-
-
-

0.3.8

-
    -
  • Add updated templates for launcher.templateValues and session container customization -
      -
    • Add customization of securityContext and containerSecurityContext (##293)
    • -
    • Fix typo in serviceAccountName implementation (##251)
    • -
    • Add affinity and tolerations (##271 and ##283)
    • -
  • -
  • Add an image.tagPrefix value to make customizing the operating system easier
  • -
  • Add a launcher.defaultInitContainer.tagPrefix value to make customizing the operating system easier
  • -
-
-
-

0.3.7

-
    -
  • Bump Connect version to 2022.11.0
  • -
-
-
-

0.3.6

-
    -
  • Bump Connect version to 2022.10.0
  • -
-
-
-

0.3.5

-
    -
  • Fix appVersion to target bionic-2022.09.0, to reflect new image naming conventions that include the operating system.
  • -
-
-
-

0.3.4

-
    -
  • Bump Connect version to 2022.09.0
  • -
-
-
-

0.3.3

-
    -
  • Add a check to provide faster feedback if launcher.enabed=true without setting up shared storage
  • -
-
-
-

0.3.2

-
    -
  • Bump Connect version to 2022.08.1
  • -
-
-
-

0.3.1

-
    -
  • Bump Connect version to 2022.08.0
  • -
-
-
-

0.3.0

-
    -
  • BETA BREAKING: We moved launcher.contentInitContainer customizations to launcher.defaultInitContainer -
      -
    • This should only affect if you are using launcher.enabled=true, which is still in Beta
    • -
    • Values are treated the same, so a simple modification to the key should resolve any issues
    • -
  • -
  • RStudio Connect with off-host execution is now in Public Beta
  • -
  • Add support for the launcher.useTemplates value -
      -
    • This enables greater customization of session creation as well as better labels and annotations out of the box
    • -
    • To make use of the default session templates, configure values in launcher.sessionTemplate
    • -
  • -
  • Enable logging using RStudio Connect’s new logging configuration (effective with version 2022.07)
  • -
  • Add a toggle for launcher.defaultInitContainer.enabled to turn off the default init container -
      -
    • When using the launcher, it is important that sessions have the RStudio Connect “session runtime” available
    • -
    • By default, we make these available through an init container, but they can also be provided other ways
    • -
    • By disabling this setting, you are opting into managing this runtime requirement yourself
    • -
  • -
  • Add values for pod.port and service.targetPort
  • -
  • Allow launcher.additionalRuntimeImages and launcher.customRuntimeYaml="pro" (##238, ##92)
  • -
-
-
-

0.2.38

-
    -
  • Bump rstudio-library chart version
  • -
  • Relax RBAC for pod/logs to remove write-related privileges
  • -
-
-
-

0.2.37

-
    -
  • Bump Connect version to 2022.06.2
  • -
-
-
-

0.2.36

-
    -
  • Bump Connect version to 2022.06.0
  • -
-
-
-

0.2.35

-
    -
  • Add the ability to set annotations to the Persistent Volume Claim.
  • -
-
-
-

0.2.34

-
    -
  • Make resources configuration backwards compatible with the previous enabled flag (##218)
  • -
-
-
-

0.2.33

-
    -
  • Add sharedStorage.mountContent value configuration option. When this setting is enabled, the chart will configure Connect’s Launcher.DataDirPVCName to use the PVC defined by sharedStorage.name. If this setting is used, then config.Launcher.DataDir must not be set.
  • -
-
-
-

0.2.32

-
    -
  • Update rstudio-library chart version. Add support for lists in INI file sections.
  • -
-
-
-

0.2.31

-
    -
  • Bump Connect version to 2022.05.0
  • -
-
-
-

0.2.30

-
    -
  • Simplify resources configuration and allow resources configuration on the sidecar container -
      -
    • Worth noting that if baseline enabled, defaults have changed to not specify resources. Prototype recommendations remain in the chart values as a comment
    • -
  • -
-
-
-

0.2.29

-
    -
  • Add pod.securityContext value configuration option
  • -
-
-
-

0.2.28

-
    -
  • Bump Connect version to 2022.04.2
  • -
-
-
-

0.2.27

-
    -
  • Bump Connect version to 2022.04.1
  • -
-
-
-

0.2.26

-
    -
  • Fix ingress definition issues with older Kubernetes clusters (##139)
  • -
-
-
-

0.2.25

-
    -
  • Bump Connect version to 2022.03.2
  • -
-
-
-

0.2.24

-
    -
  • Bump Connect version to 2022.03.1
  • -
-
-
-

0.2.23

-
    -
  • Bump Connect version to 2022.02.3
  • -
-
-
-

0.2.22

-
    -
  • Bump Connect version to 2022.02.2
  • -
-
-
-

0.2.21

-
    -
  • Bump Connect version to 2022.02.0
  • -
-
-
-

0.2.20

-
    -
  • Add pod.affinity value to define affinity for the pod
  • -
-
-
-

0.2.19

-
    -
  • Update rstudio-library chart version. This adds support for extraObjects
  • -
  • Add extraObjects value. This allows deploying additional resources (with templating) straight from the values file!
  • -
-
-
-

0.2.18

-
    -
  • Bump Connect version to 2021.12.1
  • -
-
-
-

0.2.17

-
    -
  • Make startupProbe, readinessProbe and livenessProbe more configurable (##97) -
      -
    • They still use the enabled key to turn on or off
    • -
    • We then remove this key with omit, and pass the values verbatim to the template (as YAML)
    • -
  • -
-
-
-

0.2.16

-
    -
  • Update rstudio-library chart version. This adds a helper for rendering Ingress resources
  • -
  • Create k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)
  • -
-
-
-

0.2.15

-
    -
  • Bump Connect version to 2021.12.0
  • -
-
-
-

0.2.14

-
    -
  • Bump library-chart version
  • -
-
-
-

0.2.13

-
    -
  • Add configuration values for pod.haste to set (or unset) the RSTUDIO_CONNECT_HASTE variable
  • -
  • Add a pod.labels values option (##101)
  • -
-
-
-

0.2.12

-
    -
  • Bump Connect version to 2021.11.1
  • -
-
-
-

0.2.11

-
    -
  • move “privileged: true” into values.yaml, because it is no longer necessary for rstudio-connect server or sessions when launcher is enabled. -
      -
    • To disable when using the launcher, set securityContext: null
    • -
    • NOTE: securityContext: {} will not remove the default, because helm values merge objects by default
    • -
  • -
  • location for RStudio Connect’s KubernetesProfilesConfig file has changed from /etc/rstudio/launcher.kubernetes.profiles.conf to /etc/rstudio-connect/launcher/launcher.kubernetes.profiles.conf so as to not conflict with RStudio Workbench
  • -
-
-
-

0.2.10

-
    -
  • Update default RStudio Connect version to 2021.11.0
  • -
-
-
-

0.2.9

-
    -
  • Add imagePullSecrets value option (##57)
  • -
-
-
-

0.2.8

-
    -
  • Bump rstudio-library chart version
  • -
-
-
-

0.2.7

-
    -
  • Update default RStudio Connect version to 2021.10.0
  • -
-
-
-

0.2.6

-
    -
  • Update rstudio-library chart version
  • -
-
-
-

0.2.5

-
    -
  • Update default RStudio Connect version to 2021.09.0
  • -
-
-
-

0.2.4

-
    -
  • Enabled Python support in Connect by default when launcher.enabled=true
  • -
  • Any values defined in the config section now take precendence over those that are set by the Helm chart’s logic.
  • -
-
-
-

0.2.3

-
    -
  • Update default RStudio Connect version to 2021.08.2
  • -
-
-
-

0.2.2

-
    -
  • Added a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.
  • -
-
-
-

0.2.1

-
    -
  • Update docs
  • -
-
-
-

0.2.0

-
    -
  • BREAKING: Licensing configuration now uses a license section. For example, license: my-key should be changed to

    -
    license:
    -  key: my-key
  • -
  • Added support for floating licenses and license files.

  • -
  • Default RStudio Connect version is now 1.9.0.1

  • -
  • Add a prestart.bash script for use when launcher.enabled=true

    -
      -
    • when launcher.enabled=true, the chart changes command and args dynamically to use this script
    • -
    • if you set command and args yourself, we will use your settings instead. Be sure: -
        -
      • that /scripts/prestart.bash is executed (for Kubernetes setup)
      • -
      • that /usr/local/bin/startup.sh is executed (for licensing)
      • -
    • -
  • -
  • Add RBAC via the rstudio-library chart

  • -
  • Add runtime.yaml configuration (for runtime containers)

  • -
  • Change default configuration when launcher is enabled

  • -
  • Add the ability to more easily customize launcher.kubernetes.profiles.conf

    -
      -
    • Set up the profiles defaults to include the init container
    • -
  • -
  • Allow more easily mounting a named PVC that was not created by the chart

  • -
  • Make the “target” launcher namespace configurable

  • -
  • Add a default value for service.port: 80

  • -
-
-
-

0.1.2

-
    -
  • Add ingress as an option
  • -
  • Add annotations to deployment so that the pods roll when config changes
  • -
-
-
-

0.1.1

-
    -
  • Update to 1.8.6.2
  • -
  • Update docs
  • -
-
-
-

0.1.0

-
    -
  • Change naming convention -
      -
    • This fixes issues with namespacing
    • -
    • However, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true
    • -
    • If you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC
    • -
    • Alternatively, you can set fullnameOverride: "previous-release-name" to force backwards compatibility -
        -
      • Finally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install
      • -
    • -
    • Use helm diff upgrade to ensure things are working as you expect before upgrading
    • -
  • -
-
-
-

0.0.3

-
    -
  • Add HA, Postgres, PVC, monitoring
  • -
-
-
-

0.0.2

-
    -
  • Minimally viable
  • -
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-connect/README.html b/charts/rstudio-connect/README.html deleted file mode 100644 index 2759b0ca..00000000 --- a/charts/rstudio-connect/README.html +++ /dev/null @@ -1,1690 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Posit Connect

-

Version: 0.6.7 AppVersion: 2024.04.1

-
-

Official Helm chart for Posit Connect

-

Business Users and Collaborators use R and Python data products on Posit Connect that are published by Data Scientists.

-
-
-

Best practices

-

Helm charts are very useful tools for deploying resources into Kubernetes, however, they do require some familiarity with kubernetes and helm itself. Please ensure you have adequate training and IT support before deploying these charts into production environments. Reach out to your account representative if you need help deciding whether Helm is a good choice for your deployment.

-

To ensure reproducibility in your environment and insulate yourself from future changes, please:

-
    -
  • “Pin” the version of the Helm chart that you are using. You can do this using the: -
      -
    • helm dependency command and the associated “Chart.lock” files or

    • -
    • the --version flag.

      -
      -
      -
      - -
      -
      -Important -
      -
      -
      -

      This protects you from breaking changes**

      -
      -
    • -
  • -
  • Before upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.
  • -
  • Read NEWS.md for updates on breaking changes and the documentation below on how to use the chart.
  • -
-
-
-

Installing the chart

-

To install the chart with the release name my-release at version 0.6.7:

-
helm repo add rstudio https://helm.rstudio.com
-helm upgrade --install my-release rstudio/rstudio-connect --version=0.6.7
-

To explore other chart versions, look at:

-
helm search repo rstudio/rstudio-connect -l
-
-
-

Required configuration

-

To function, this chart requires the following:

-
    -
  • A license file. See the Licensing section below for more details.
  • -
  • A Kubernetes PersistentVolume that contains the data directory for Connect. -
      -
    • If sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.
    • -
    • If you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.
    • -
  • -
-
-
-

Licensing

-

This chart supports activating the product using a license file.

-

We recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.

-

First, create the secret declaratively with YAML or imperatively using the following command:

-
kubectl create secret generic rstudio-connect-license --from-file=licenses/rstudio-connect.lic
-

Second, specify the following values:

-
license:
-  file:
-    secret: rstudio-connect-license
-    secretKey: rstudio-connect.lic
-

Alternatively, license files can be set during helm install with the following argument:

-
--set-file license.file.contents=licenses/rstudio-connect.lic
-
-
-

General principles

-
    -
  • In most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-connect.
  • -
  • rstudio-connect does not export many prometheus metrics on its own. Instead, we run a sidecar graphite exporter as described here
  • -
-
-
-

Configuration file

-

The configuration values all take the form of usual Helm values so you can set the database password with something like:

-
... --set config.Postgres.Password=mypassword ...
-

The Helm config values are converted into the rstudio-connect.gcfg service configuration file via go-templating.

-
-
-

Values

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyTypeDefaultDescription
affinityobject{}A map used verbatim as the pod’s “affinity” definition
argslist[]The pod’s run arguments. By default, it uses the container’s default
commandlist[]The pod’s run command. By default, it uses the container’s default
configobjectPosit Connect Configuration ReferenceA nested map of maps that generates the rstudio-connect.gcfg file
extraObjectslist[]Extra objects to deploy (value evaluated as a template)
fullnameOverridestring""The full name of the release (can be overridden)
imageobject{"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"repository":"ghcr.io/rstudio/rstudio-connect","tag":"","tagPrefix":"ubuntu2204-"}Defines the Posit Connect image to deploy
image.imagePullPolicystring"IfNotPresent"The imagePullPolicy for the main pod image
image.imagePullSecretslist[]an array of kubernetes secrets for pulling the main pod image from private registries
image.repositorystring"ghcr.io/rstudio/rstudio-connect"The repository to use for the main pod image
image.tagstring""Overrides the image tag whose default is the chart appVersion.
image.tagPrefixstring"ubuntu2204-"A tag prefix for the server image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined
ingress.annotationsobject{}
ingress.enabledboolfalse
ingress.hostsstringnil
ingress.ingressClassNamestring""The ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources
ingress.tlslist[]
initContainersboolfalseThe initContainer spec that will be used verbatim
launcher.additionalRuntimeImageslist[]Optional. Additional images to append to the end of the “launcher.customRuntimeYaml” (in the “images” key). If customRuntimeYaml is a “map”, then “additionalRuntimeImages” will only be used if it is a “list”.
launcher.customRuntimeYamlstring"base"Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to “base”, which pulls in the default runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to “pro”, will pull in the “pro” versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image). Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments the first time the server starts. If any execution environments already exist in the database, these values are ignored; execution environments are not created or modified during subsequent restarts.
launcher.defaultInitContainerobject{"enabled":true,"imagePullPolicy":"","repository":"ghcr.io/rstudio/rstudio-connect-content-init","securityContext":{},"tag":"","tagPrefix":"ubuntu2204-"}Image definition for the default Posit Connect Content InitContainer
launcher.defaultInitContainer.enabledbooltrueWhether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way.
launcher.defaultInitContainer.imagePullPolicystring""The imagePullPolicy for the default initContainer
launcher.defaultInitContainer.repositorystring"ghcr.io/rstudio/rstudio-connect-content-init"The repository to use for the Content InitContainer image
launcher.defaultInitContainer.securityContextobject{}The securityContext for the default initContainer
launcher.defaultInitContainer.tagstring""Overrides the image tag whose default is the chart appVersion.
launcher.defaultInitContainer.tagPrefixstring"ubuntu2204-"A tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined
launcher.enabledboolfalseWhether to enable the launcher
launcher.extraTemplatesobject{}extra templates to render in the template directory.
launcher.includeDefaultTemplatesbooltruewhether to include the default job.tpl and service.tpl files included with the chart
launcher.includeTemplateValuesbooltruewhether to include the templateValues rendering process
launcher.launcherKubernetesProfilesConfobject{}User definition of launcher.kubernetes.profiles.conf for job customization
launcher.namespacestring""The namespace to launch sessions into. Uses the Release namespace by default
launcher.templateValuesobject{"job":{"annotations":{},"labels":{}},"pod":{"affinity":{},"annotations":{},"command":[],"containerSecurityContext":{},"defaultSecurityContext":{},"env":[],"extraContainers":[],"imagePullPolicy":"","imagePullSecrets":[],"initContainers":[],"labels":{},"nodeSelector":{},"priorityClassName":"","securityContext":{},"serviceAccountName":"","tolerations":[],"volumeMounts":[],"volumes":[]},"service":{"annotations":{},"labels":{},"type":"ClusterIP"}}Values to pass along to the Posit Connect session templating process
launcher.templateValues.pod.commandlist[]command for all pods. This is really not something we should expose and will be removed once we have a better option
launcher.useTemplatesbooltrueWhether to use launcher templates when launching sessions. Defaults to true
license.fileobject{"contents":false,"mountPath":"/etc/rstudio-licensing","mountSubPath":false,"secret":false,"secretKey":"license.lic"}the file section is used for licensing with a license file
license.file.contentsboolfalsecontents is an in-line license file
license.file.mountPathstring"/etc/rstudio-licensing"mountPath is the place the license file will be mounted into the container
license.file.mountSubPathboolfalseIt can be preferable not to enable this, because then updates propagate automatically
license.file.secretboolfalsesecret is an existing secret with a license file in it
license.file.secretKeystring"license.lic"secretKey is the key for the secret to use for the license file
license.keystringnilkey is the license to use
license.serverboolfalseserver is the : for a license server
livenessProbeobject{"enabled":false,"failureThreshold":10,"httpGet":{"path":"/__ping__","port":3939},"initialDelaySeconds":10,"periodSeconds":5,"timeoutSeconds":2}Used to configure the container’s livenessProbe. Only included if enabled = true
nameOverridestring""The name of the chart deployment (can be overridden)
nodeSelectorobject{}A map used verbatim as the pod’s “nodeSelector” definition
pod.affinityobject{}A map used verbatim as the pod’s “affinity” definition
pod.annotationsobject{}Additional annotations to add to the rstudio-connect pods
pod.envlist[]An array of maps that is injected as-is into the “env:” component of the pod.container spec
pod.hastebooltrueA helper that defines the RSTUDIO_CONNECT_HASTE environment variable
pod.labelsobject{}Additional labels to add to the rstudio-connect pods
pod.portint3939The containerPort used by the main pod container
pod.securityContextobject{}Values to set the securityContext for the connect pod
pod.sidecarboolfalseAn array of containers that will be run alongside the main pod
pod.terminationGracePeriodSecondsint120The termination grace period seconds allowed for the pod before shutdown
pod.volumeMountslist[]An array of maps that is injected as-is into the “volumeMounts” component of the pod spec
pod.volumeslist[]An array of maps that is injected as-is into the “volumes:” component of the pod spec
podDisruptionBudgetobject{}Pod disruption budget
priorityClassNamestring""The pod’s priorityClassName
prometheusExporter.enabledbooltrueWhether the prometheus exporter sidecar should be enabled
prometheusExporter.image.imagePullPolicystring"IfNotPresent"
prometheusExporter.image.repositorystring"prom/graphite-exporter"
prometheusExporter.image.tagstring"v0.9.0"
prometheusExporter.mappingYamlstringnilYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file
prometheusExporter.resourcesobject{}resource specification for the prometheus exporter sidecar
prometheusExporter.securityContextobject{}securityContext for the prometheus exporter sidecar
rbac.clusterRoleCreateboolfalseWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.
rbac.createbooltrueWhether to create rbac. (also depends on launcher.enabled = true)
rbac.serviceAccountobject{"annotations":{},"create":true,"labels":{},"name":""}The serviceAccount to be associated with rbac (also depends on launcher.enabled = true)
readinessProbeobject{"enabled":true,"failureThreshold":3,"httpGet":{"path":"/__ping__","port":3939},"initialDelaySeconds":3,"periodSeconds":3,"successThreshold":1,"timeoutSeconds":1}Used to configure the container’s readinessProbe. Only included if enabled = true
replicasint1The number of replica pods to maintain for this service
resourcesobject{}Defines resources for the rstudio-connect container
securityContextobject{"privileged":true}Values to set the securityContext for Connect container. It must include “privileged: true” or “CAP_SYS_ADMIN” when launcher is not enabled. If launcher is enabled, this can be removed with securityContext: null
service.annotationsobject{}Annotations for the service, for example to specify an internal load balancer
service.clusterIPstring""The cluster-internal IP to use with service.type ClusterIP
service.loadBalancerIPstring""The external IP to use with service.type LoadBalancer, when supported by the cloud provider
service.nodePortboolfalseThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically
service.portint80The port to use for the Connect service
service.targetPortint3939The port to forward to on the Connect pod. Also see pod.port
service.typestring"ClusterIP"The service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)
serviceMonitor.additionalLabelsobject{}additionalLabels normally includes the release name of the Prometheus Operator
serviceMonitor.enabledboolfalseWhether to create a ServiceMonitor CRD for use with a Prometheus Operator
serviceMonitor.namespacestring""Namespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace
sharedStorage.accessModeslist["ReadWriteMany"]A list of accessModes that are defined for the storage PVC (represented as YAML)
sharedStorage.annotationsobject{"helm.sh/resource-policy":"keep"}Annotations for the Persistent Volume Claim
sharedStorage.createboolfalseWhether to create the persistentVolumeClaim for shared storage
sharedStorage.mountboolfalseWhether the persistentVolumeClaim should be mounted (even if not created)
sharedStorage.mountContentbooltrueWhether the persistentVolumeClaim should be mounted to the content pods created by the Launcher
sharedStorage.namestring""The name of the pvc. By default, computes a value from the release name
sharedStorage.pathstring"/var/lib/rstudio-connect"The path to mount the sharedStorage claim within the Connect pod
sharedStorage.requests.storagestring"10Gi"The volume of storage to request for this persistent volume claim
sharedStorage.selectorobject{}selector for PVC definition
sharedStorage.storageClassNameboolfalseThe type of storage to use. Must allow ReadWriteMany
sharedStorage.subPathstring""an optional subPath for the volume mount
sharedStorage.volumeNamestring""the volumeName passed along to the persistentVolumeClaim. Optional
startupProbeobject{"enabled":false,"failureThreshold":30,"httpGet":{"path":"/__ping__","port":3939},"initialDelaySeconds":10,"periodSeconds":10,"timeoutSeconds":1}Used to configure the container’s startupProbe. Only included if enabled = true
startupProbe.failureThresholdint30failureThreshold * periodSeconds should be strictly > worst case startup time
strategyobject{"rollingUpdate":{"maxSurge":"100%","maxUnavailable":0},"type":"RollingUpdate"}Defines the update strategy for a deployment
tolerationslist[]An array used verbatim as the pod’s “tolerations” definition
topologySpreadConstraintslist[]An array used verbatim as the pod’s “topologySpreadConstraints” definition
versionOverridestring""A Connect version to override the “tag” for the Posit Connect image and the Content Init image. Necessary until https://github.com/helm/helm/issues/8194
-
-

Autogenerated from chart metadata using helm-docs v1.13.1

- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-pm/NEWS.html b/charts/rstudio-pm/NEWS.html deleted file mode 100644 index 0a77254b..00000000 --- a/charts/rstudio-pm/NEWS.html +++ /dev/null @@ -1,1492 +0,0 @@ - - - - - - - - - -Posit Helm Charts – news - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Changelog

-
-

0.5.26

-
    -
  • Documentation site updates
  • -
-
-
-

0.5.25

-
    -
  • Update default Posit Package Manager version to 2024.04.0-20
  • -
-
-
-

0.5.24

-
    -
  • Unset the [Server].Address default value as this can cause issues when serving from a domain name.
  • -
-
-
-

0.5.23

-
    -
  • Update default Posit Package Manager version to 2024.04.0-18
  • -
-
-
-

0.5.22

-
    -
  • Add documentation on running the Chronicle Agent on version 2024.03.0 as a sidecar container
  • -
-
-
-

0.5.21

-
    -
  • Updates to support standalone documentation site
  • -
-
-
-

0.5.20

-
    -
  • Removedconfig.Server.RVersion from the values.yaml. This does not need to be configured, R version auto-detection will be used (#473).
  • -
-
-
-

0.5.19

-
    -
  • Add option to set pod.terminationGracePeriodSeconds
  • -
-
-
-

0.5.18

-
    -
  • Update default Posit Package Manager version to 2023.12.0-13
  • -
-
-
-

0.5.17

-
    -
  • Add licensing section to the README to provide guidance on using a license file, license key or license server.
  • -
-
-
-

0.5.16

-
    -
  • Update default Posit Package Manager version to 2023.08.4-20
  • -
-
-
-

0.5.15

-
    -
  • Bump rstudio-library to 0.1.27 -
      -
    • Fix an issue with mountPath and subPath when license.file.mountSubPath is true
    • -
  • -
-
-
-

0.5.14

-
    -
  • Update default Posit Package Manager version to 2023.08.0-16
  • -
-
-
-

0.5.13

-
    -
  • Change default operating system from bionic to ubuntu2204 (jammy) -
      -
    • This is not a breaking change since it does not affect how Package Manager serves packages
    • -
  • -
-
-
-

0.5.12

-
    -
  • Add values for serviceAccount.labels
  • -
-
-
-

0.5.11

-
    -
  • Add topologySpreadConstraints values
  • -
-
-
-

0.5.10

-
    -
  • Add podDisruptionBudget values
  • -
-
-
-

0.5.9

-
    -
  • Update documentation and README for a bit more clarity
  • -
-
-
-

0.5.8

-
    -
  • Update default Posit Package Manager version to 2023.04.0-6
  • -
-
-
-

0.5.7

-
    -
  • Remove pod.nodeSelector value. It was not used before
  • -
-
-
-

0.5.6

-
    -
  • Update documentation to remove “beta” label and explain production recommendations
  • -
-
-
-

0.5.5

-
    -
  • Bump rstudio-library to 0.1.24 -
      -
    • Update RBAC definiton to support listing of service accounts
    • -
  • -
-
-
-

0.5.4

-
    -
  • Update default Posit Package Manager version to 2022.11.4-20
  • -
-
-
-

0.5.3

-
    -
  • Fix Package Manager default image reference
  • -
-
-
-

0.5.2

-
    -
  • Add sharedStorage.volumeName for PVCs that reference a PV
  • -
  • Add sharedStorage.selector as well
  • -
-
-
-

0.5.1

-
    -
  • Fix a bug in the image reference. Images now have an operating system reference -
      -
    • Add an image.tagPrefix value for configuring the (current) bionic- prefix
    • -
  • -
-
-
-

0.5.0

-
    -
  • Update default Posit Package Manager version to 2022.11.2-18
  • -
-
-
-

0.4.0

-
    -
  • Update default RStudio Package Manager version to 2022.07.2-11

  • -
  • Package Manager now runs as non-root by default and the default containerSecurityContext has been updated to reflect the permissions required to do so.

  • -
  • There is a new top-level enableSandboxing setting that gives users a direct way to disable sandboxing of Git builds, which reduces the Kubernetes security requirements and should allow the Package Manager chart to run on any non-OpenShift cluster without modification.

  • -
  • To handle the migration of existing data owned by root, there is now a Helm hook that essentially runs chown on the data directory every time a user runs helm upgrade. Unfortunately, we can’t detect when we actually need to run this migration, so it currently runs unconditionally. The rook only runs when a PersistentVolumeClaim is being used for Package Manager storage. The hook can be disabled by setting enableMigrations=false; in the future when we no longer expect users to have root-owned data, this will become the default.

  • -
  • Package Manager’s encryption key (if specified in rstudioPMKey) is now read from an environment variable rather than being mounted into the container. This sidesteps an issue where this file is owned as root when mounted by Kubernetes but Package Manager itself requires 0600 file permissions.

  • -
-
-
-

0.3.15

-
    -
  • Bump rstudio-library chart version
  • -
-
-
-

0.3.14

-
    -
  • A Service Account is now created by default. This is primarily to facilitate better IAM security when using Package Manager with S3.

  • -
  • pod.serviceAccountName has been deprecated in favour of the new serviceAccount.name setting.

  • -
-
-
-

0.3.13

-
    -
  • Package Manager now enables the bundled R version (which is required to use Git-backed packages) by default.
  • -
-
-
-

0.3.12

-
    -
  • Add the ability to set annotations to the Persistent Volume Claim.
  • -
-
-
-

0.3.11

-
    -
  • Add configuration values for the pod’s labels, affinity, nodeSelector, tolerations, and priorityClassName (##206).
  • -
-
-
-

0.3.10

-
    -
  • The Package Manager container no longer runs as privileged by default. Instead, it uses stricter security settings with a smaller set of elevated privileges.
  • -
-
-
-

0.3.9

-
    -
  • Update rstudio-library chart version. Add support for lists in INI file sections.
  • -
-
-
-

0.3.8

-
    -
  • Add securityContext for pod and container as documented here
  • -
-
-
-

0.3.7

-
    -
  • Add extraContainers value. This allows adding a list of additional containers.
  • -
-
-
-

0.3.6

-
    -
  • Add pod.lifecycle value. This allows running lifecycle hooks like postStart commands!
  • -
-
-
-

0.3.5

-
    -
  • Update default RStudio Package Manager version to 2022.04.0-7
  • -
-
-
-

0.3.4

-
    -
  • Fix ingress definition issues with older Kubernetes clusters (##139)
  • -
-
-
-

0.3.3

-
    -
  • Make startupProbe, readinessProbe and livenessProbe more configurable (##97) -
      -
    • They still use the enabled key to turn on or off
    • -
    • We then remove this key with omit, and pass the values verbatim to the template (as YAML)
    • -
  • -
-
-
-

0.3.2

-
    -
  • Update default RStudio Package Manager version to 2021.12.0-3
  • -
-
-
-

0.3.1

-
    -
  • Update rstudio-library chart version. This adds support for extraObjects
  • -
  • Add extraObjects value. This allows deploying additional resources (with templating) straight from the values file!
  • -
-
-
-

0.3.0

-
    -
  • BREAKING: The generated service will now have type ClusterIP by default.
  • -
  • Add support for setting the loadBalancerIP or clusterIP.
  • -
  • Ignore nodePort settings when the service is not a NodePort.
  • -
  • Improve the documentation for some service-related settings.
  • -
-
-
-

0.2.10

-
    -
  • Update rstudio-library chart version. This adds a helper for rendering Ingress resources
  • -
  • Create k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)
  • -
-
-
-

0.2.9

-
    -
  • Add serviceMonitor values for use with a Prometheus Operator
  • -
-
-
-

0.2.8

-
    -
  • Update rstudio-library chart dependency
  • -
-
-
-

0.2.7

-
    -
  • BREAKING: change .image.pullPolicy to .image.imagePullPolicy for consistency with other charts
  • -
  • Add imagePullSecrets value option (##57)
  • -
-
-
-

0.2.6

-
    -
  • Update rstudio-library chart dependency
  • -
-
-
-

0.2.5

-
    -
  • Updated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).
  • -
-
-
-

0.2.4

-
    -
  • Update rstudio-library dependency
  • -
-
-
-

0.2.3

-
    -
  • Update default RStudio Package Manager version to 2021.09.0-1
  • -
-
-
-

0.2.2

-
    -
  • Update rstudio-library dependency
  • -
-
-
-

0.2.1

-
    -
  • Update docs
  • -
-
-
-

0.2.0

-
    -
  • Breaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to

    -
    license:
    -  key: my-key
  • -
  • Added support for floating licenses and license files.

  • -
-
-
-

0.1.4

-
    -
  • Fix product config values to make our default container work -
      -
    • Add Launcher.ServerUser=root and Launcher.AdminGroup=root
    • -
  • -
  • Bump RSPM version to 1.2.2.1-17
  • -
  • Use appVersion from Chart.yaml and add versionOverride
  • -
-
-
-

0.1.3

-
    -
  • Add LICENSE.md for clarity
  • -
-
-
-

0.1.2

-
    -
  • Add ingress as an option
  • -
  • Add annotations to deployment so that the pods roll when config changes
  • -
-
-
-

0.1.1

-
    -
  • Update Package Manager version to 1.2.2-4
  • -
  • Update docs
  • -
-
-
-

0.1.0

-
    -
  • Change naming convention -
      -
    • This fixes issues with namespacing
    • -
    • However, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true
    • -
    • If you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC
    • -
    • Alternatively, you can set fullnameOverride: "previous-release-name" to force backwards compatibility
    • -
    • Finally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install
    • -
    • Use helm diff upgrade to ensure things are working as you expect before upgrading
    • -
  • -
-
-
-

0.0.8

-
    -
  • Fix quoting
  • -
-
-
-

0.0.7

-
    -
  • Add option for podAnnotations
  • -
-
-
-

0.0.6

-
    -
  • Add autoNodePort parameter to allow auto-providing the node port
  • -
-
-
-

0.0.5

-
    -
  • Revert apiVersion back to v1 for working in helm2
  • -
-
-
-

0.0.4

-
    -
  • BREAKING: rename secret for managing AWS credentials
  • -
  • Add a secret for managing the rstudio-pm.key
  • -
  • Add a command and args configuration options
  • -
-
-
-

0.0.3

-
    -
  • Add secret for managing AWS credentials
  • -
-
-
-

0.0.1

-
    -
  • Initial pass!
  • -
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-pm/README.html b/charts/rstudio-pm/README.html deleted file mode 100644 index fee58696..00000000 --- a/charts/rstudio-pm/README.html +++ /dev/null @@ -1,1584 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Posit Package Manager

-

Version: 0.5.26 AppVersion: 2024.04.0

-
-

Official Helm chart for Posit Package Manager

-

IT Administrators use Posit Package Manager to control and manage R and Python packages that Data Scientists need to create and share data products.

-
-
-

For production

-

To ensure a stable production deployment:

-
    -
  • “Pin” the version of the Helm chart that you are using. You can do this using the: -
      -
    • helm dependency command and the associated “Chart.lock” files or

    • -
    • the --version flag.

      -
      -
      -
      - -
      -
      -Important -
      -
      -
      -

      This protects you from breaking changes.

      -
      -
    • -
  • -
  • Before upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.
  • -
  • Read NEWS.md for updates on breaking changes and the documentation below on how to use the chart.
  • -
-
-
-

Installing the chart

-

To install the chart with the release name my-release at version 0.5.26:

-
helm repo add rstudio https://helm.rstudio.com
-helm upgrade --install my-release rstudio/rstudio-pm --version=0.5.26
-

To explore other chart versions, look at:

-
helm search repo rstudio/rstudio-pm -l
-
-
-

Upgrade guidance

-
-

0.4.0

-
    -
  • When upgrading to version 0.4.0 or later, the Package Manager service moves from running as root to running as the rstudio-pm user (with uid:gid 999:999).
  • -
  • A chown of persistent storage may be required. The team is working to implement an automatic fix. To disable the automatic fix/hook, set enableMigrations=false.
  • -
-
-
-
-

Required configuration

-

This chart requires the following in order to function:

-
    -
  • A license file. See the Licensing section below for more details.
  • -
  • A Kubernetes PersistentVolume that contains the data directory for Package Manager. -
      -
    • If sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.
    • -
    • If you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.
    • -
    • Alternatively, S3 storage can be used. See the S3 Configuration section for details.
    • -
  • -
-
-
-

Licensing

-

This chart supports activating the product using a license file.

-

We recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.

-

First, create the secret declaratively with YAML or imperatively using the following command:

-
kubectl create secret generic rstudio-pm-license --from-file=licenses/rstudio-pm.lic
-

Second, specify the following values:

-
license:
-  file:
-    secret: rstudio-pm-license
-    secretKey: rstudio-pm.lic
-

Alternatively, license files can be set during helm install with the following argument:

-
--set-file license.file.contents=licenses/rstudio-pm.lic
-
-
-

S3 configuration

-

Package Manager can be configured to store its data in S3 buckets, which eliminates the need to provision shared storage for multiple replicas. A values.yaml file using S3 might contain something like the following:

-
config:
-  Storage:
-    Default: s3
-  S3Storage:
-    Bucket: your-s3-bucket
-

If you are running on EKS, we strongly suggest using IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:

-
serviceAccount:
-  create: true
-  annotations:
-    eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here
-

If you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the chart supports setting static credentials:

-
awsAccessKeyId: your-access-key-id
-awsSecretAccessKey: your-secret-access-key
-

Bear in mind that static, long-lived credentials are the least secure option and should be avoided if at all possible.

-
-
-

General principles

-
    -
  • In most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-pm.
  • -
-
-
-

Configuration file

-

The configuration values all take the form of usual Helm values so you can set the database password with something like:

-
... --set config.Postgres.Password=mypassword ...
-

The Helm config values are converted into the rstudio-pm.gcfg service configuration file via go-templating.

-
-
-

Values

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyTypeDefaultDescription
affinityobject{}A map used verbatim as the pod’s “affinity” definition
argsboolfalseargs is the pod’s run arguments. By default, it uses the container’s default
awsAccessKeyIdboolfalseawsAccessKeyId is the access key id for s3 access, used also to gate file creation
awsSecretAccessKeystringnilawsSecretAccessKey is the secret access key, needs to be filled if access_key_id is
commandboolfalsecommand is the pod’s run command. By default, it uses the container’s default
configobject{"HTTP":{"Listen":":4242"},"Metrics":{"Enabled":true}}config is a nested map of maps that generates the rstudio-pm.gcfg file
enableMigrationbooltrueEnable migrations for shared storage (if necessary) using Helm hooks.
enableSandboxingbooltrueEnable sandboxing of Git builds, which requires elevated security privileges for the Package Manager container.
extraContainerslist[]sidecar container list
extraObjectslist[]Extra objects to deploy (value evaluated as a template)
fullnameOverridestring""the full name of the release (can be overridden)
image.imagePullPolicystring"IfNotPresent"the imagePullPolicy for the main pod image
image.imagePullSecretslist[]an array of kubernetes secrets for pulling the main pod image from private registries
image.repositorystring"rstudio/rstudio-package-manager"the repository to use for the main pod image
image.tagstring""the tag to use for the main pod image
image.tagPrefixstring"ubuntu2204-"A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined
ingress.annotationsobject{}
ingress.enabledboolfalse
ingress.hostsstringnil
ingress.ingressClassNamestring""The ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources
ingress.tlslist[]
initContainersboolfalsethe initContainer spec that will be used verbatim
license.fileobject{"contents":false,"mountPath":"/etc/rstudio-licensing","mountSubPath":false,"secret":false,"secretKey":"license.lic"}the file section is used for licensing with a license file
license.file.contentsboolfalsecontents is an in-line license file
license.file.mountPathstring"/etc/rstudio-licensing"mountPath is the place the license file will be mounted into the container
license.file.mountSubPathboolfalseIt can be preferable not to enable this, because then updates propagate automatically
license.file.secretboolfalsesecret is an existing secret with a license file in it
license.file.secretKeystring"license.lic"secretKey is the key for the secret to use for the license file
license.keystringnilkey is the license to use
license.serverboolfalseserver is the : for a license server
livenessProbeobject{"enabled":false,"failureThreshold":10,"httpGet":{"path":"/__ping__","port":4242},"initialDelaySeconds":10,"periodSeconds":5,"timeoutSeconds":2}livenessProbe is used to configure the container’s livenessProbe
nameOverridestring""the name of the chart deployment (can be overridden)
nodeSelectorobject{}A map used verbatim as the pod’s “nodeSelector” definition
pod.annotationsobject{}annotations is a map of keys / values that will be added as annotations to the pods
pod.containerSecurityContextobject{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"runAsNonRoot":true,"runAsUser":999,"seccompProfile":{"type":"{{ if .Values.enableSandboxing }}Unconfined{{ else }}RuntimeDefault{{ end }}"}}the securityContext for the main Package Manager container. Evaluated as a template.
pod.envlist[]env is an array of maps that is injected as-is into the “env:” component of the pod.container spec
pod.labelsobject{}Additional labels to add to the rstudio-pm pods
pod.lifecycleobject{}Container lifecycle hooks
pod.securityContextobject{}the securityContext for the pod
pod.serviceAccountNamestring""Deprecated, use serviceAccount.name instead
pod.terminationGracePeriodSecondsint120The termination grace period seconds allowed for the pod before shutdown
pod.volumeMountslist[]volumeMounts is an array of maps that is injected as-is into the “volumeMounts” component of the pod spec
pod.volumeslist[]volumes is an array of maps that is injected as-is into the “volumes:” component of the pod spec
podDisruptionBudgetobject{}Pod disruption budget
priorityClassNamestring""The pod’s priorityClassName
readinessProbeobject{"enabled":true,"failureThreshold":3,"httpGet":{"path":"/__ping__","port":4242},"initialDelaySeconds":3,"periodSeconds":3,"successThreshold":1,"timeoutSeconds":1}readinessProbe is used to configure the container’s readinessProbe
replicasint1replicas is the number of replica pods to maintain for this service
resourcesobject{"limits":{"cpu":"2000m","enabled":false,"ephemeralStorage":"200Mi","memory":"4Gi"},"requests":{"cpu":"100m","enabled":false,"ephemeralStorage":"100Mi","memory":"2Gi"}}resources define requests and limits for the rstudio-pm pod
rootCheckIsFatalbooltrueWhether the check for root accounts in the config file is fatal. This is meant to simplify migration to the new helm chart version.
rstudioPMKeyboolfalserstudioPMKey is the rstudio-pm key used for the RStudio Package Manager service
service.annotationsobject{}Annotations for the service, for example to specify an internal load balancer
service.clusterIPstring""The cluster-internal IP to use with service.type ClusterIP
service.loadBalancerIPstring""The external IP to use with service.type LoadBalancer, when supported by the cloud provider
service.nodePortboolfalseThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically
service.portint80The Service port. This is the port your service will run under.
service.typestring"ClusterIP"The service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)
serviceAccount.annotationsobject{}Annotations for the ServiceAccount, if any
serviceAccount.createbooltrueWhether to create a Service Account
serviceAccount.labelsobject{}Labels for the ServiceAccount, if any
serviceAccount.namestringWhen serviceAccount.create is true this defaults to the full name of the releaseServiceAccount to use, if any, or an explicit name for the one we create
serviceMonitor.additionalLabelsobject{}additionalLabels normally includes the release name of the Prometheus Operator
serviceMonitor.enabledboolfalseWhether to create a ServiceMonitor CRD for use with a Prometheus Operator
serviceMonitor.namespacestring""Namespace to create the ServiceMonitor in (usually the same as the one in which the Operator is running). Defaults to the release namespace
sharedStorage.accessModeslist["ReadWriteMany"]accessModes defined for the storage PVC (represented as YAML)
sharedStorage.annotationsobject{"helm.sh/resource-policy":"keep"}Define the annotations for the Persistent Volume Claim resource
sharedStorage.createboolfalsewhether to create the persistentVolumeClaim for shared storage
sharedStorage.mountboolfalseWhether the persistentVolumeClaim should be mounted (even if not created)
sharedStorage.namestring""The name of the pvc. By default, computes a value from the release name
sharedStorage.pathstring"/var/lib/rstudio-pm"the path to mount the sharedStorage claim within the pod
sharedStorage.requests.storagestring"10Gi"the volume of storage to request for this persistent volume claim
sharedStorage.selectorobject{}selector for PVC definition
sharedStorage.storageClassNameboolfalsestorageClassName - the type of storage to use. Must allow ReadWriteMany
sharedStorage.volumeNamestring""the volumeName passed along to the persistentVolumeClaim. Optional
startupProbeobject{"enabled":false,"failureThreshold":30,"httpGet":{"path":"/__ping__","port":4242},"initialDelaySeconds":10,"periodSeconds":10,"timeoutSeconds":1}startupProbe is used to configure the container’s startupProbe
startupProbe.failureThresholdint30failureThreshold * periodSeconds should be strictly > worst case startup time
strategyobject{"rollingUpdate":{"maxSurge":"100%","maxUnavailable":0},"type":"RollingUpdate"}The update strategy used by the main service pod.
tolerationslist[]An array used verbatim as the pod’s “tolerations” definition
topologySpreadConstraintslist[]An array used verbatim as the pod’s “topologySpreadConstraints” definition
versionOverridestring""A Package Manager version to override the “tag” for the RStudio Package Manager image. Necessary until https://github.com/helm/helm/issues/8194
-
-

Autogenerated from chart metadata using helm-docs v1.13.1

- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-workbench/NEWS.html b/charts/rstudio-workbench/NEWS.html deleted file mode 100644 index 85c78e78..00000000 --- a/charts/rstudio-workbench/NEWS.html +++ /dev/null @@ -1,1769 +0,0 @@ - - - - - - - - - -Posit Helm Charts – news - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Changelog

-
-

0.7.4

-
    -
  • Documentation site updates
  • -
-
-
-

0.7.3

-
    -
  • Bump Workbench version to 2024.04.0
  • -
-
-
-

0.7.2

-
    -
  • Bump Chronicle Agent to version 2024.03.0
  • -
-
-
-

0.7.1

-
    -
  • Updates to support standalone documentation site
  • -
-
-
-

0.7.0

-
    -
  • BREAKING: The generated service will now have type ClusterIP set by default.
  • -
  • Add support for setting the loadBalancerIP or clusterIP.
  • -
  • Ignore nodePort settings when the service is not a NodePort.
  • -
  • Improve the documentation for some service-related settings.
  • -
-
-
-

0.6.16

-
    -
  • Update default package manager repo in config.session.repos.conf
  • -
  • Remove --verbose from args in config.server.vscode.conf
  • -
  • Add instructions for configuring R and Python repos in the README
  • -
  • Add empty JSON to rstudio-prefs.json default
  • -
  • Add documentation for databricks.conf
  • -
  • Increase readinessProbe.initialDelaySeconds to 10
  • -
-
-
-

0.6.15

-
    -
  • Add ttlSecondsAfterFinished to job.tpl for session jobs.
  • -
-
-
-

0.6.14

-
    -
  • Add option to set pod.terminationGracePeriodSeconds
  • -
  • Add protection for prestart-launcher.bash to be OS-agnostic in certificate modification (#453)
  • -
-
-
-

0.6.13

-
    -
  • Bump Workbench version to 2023.12.1
  • -
-
-
-

0.6.12

-
    -
  • Bump Workbench version to 2023.12.0
  • -
-
-
-

0.6.11

-
    -
  • Add licensing section to the README to provide guidance on using a license file, license key or license server.
  • -
-
-
-

0.6.10

-
    -
  • Bump rstudio-library to 0.1.27 -
      -
    • Fix an issue with mountPath and subPath when license.file.mountSubPath is true
    • -
  • -
-
-
-

0.6.9

-
    -
  • Bump Workbench version to 2023.09.1
  • -
-
-
-

0.6.8

-
    -
  • Bump Workbench version to 2023.09.0
  • -
-
-
-

0.6.7

-
    -
  • Add native session support for pip.conf -
      -
    • In order to mount a pip.conf file to /etc/pip.conf on server and sessions, just define the file in config.session.pip\\.conf
    • -
  • -
-
-
-

0.6.6

-
    -
  • Bump Workbench version to 2023.06.1
  • -
-
-
-

0.6.5

-
    -
  • Add support for homeStorage.subPath (and for launcher sessions)
  • -
-
-
-

0.6.4

-
    -
  • Add support for serviceAccount labels (rbac.serviceAccount.labels)
  • -
-
-
-

0.6.3

-
    -
  • Fix support for pod.env on sessions
  • -
-
-
-

0.6.2

- -
-
-

0.6.1

-
    -
  • Bump Workbench version to 2023.06.0
  • -
-
-
-

0.6.0

-
    -
  • BREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30 -
      -
    • If you want to revert this change, set session.image.tagPrefix=bionic- (sessions) and image.tagPrefix=bionic- ( server)
    • -
  • -
  • BREAKING: change the “home volume mount” for sessions to happen automatically, regardless of whether you define other values in config.serverDcf.launcher-mounts -
      -
    • Previously, if you specify anything in launcher-mounts, then we did not mount the home volume onto the session
    • -
    • Now, we continue to mount the home volume onto the session, unless: -
        -
      • You set session.defaultHomeMount=false
      • -
      • You have the same (or a parent) mountPath defined in an existing launcher-mounts volume
      • -
      • You have the same PVC ClaimName defined in an existing launcher-mounts volume
      • -
    • -
    • If you mount the volume yourself and want to keep doing so, you can set session.defaultHomeMount=false
    • -
    • If you mount the volume yourself and would like to stop doing so, you can now unset the home mount in launcher-mounts
    • -
  • -
  • Update documentation and README for a bit more clarity
  • -
  • Update product to version 2023.03.1
  • -
  • Allow customizing the pod.command associated with sessions for some highly custom startup cases. This should not be necessary in most cases and will be removed at a later date, once the product supports startup customization. Please reach out if you have questions about this functionality!
  • -
  • Add podDisruptionBudget values
  • -
  • Add topologySpreadConstraints values
  • -
  • Start to utilize the pod.securityContext values for pod securityContext values
  • -
-
-
-

0.5.32

-
    -
  • Add priorityClassName to product configuration
  • -
-
-
-

0.5.31

-
    -
  • Update documentation to make .Values.server.profiles and .Values.profiles.profiles differences more clear.
  • -
-
-
-

0.5.30

-
    -
  • Add pod.lifecycle hook
  • -
-
-
-

0.5.29

-
    -
  • Update documentation to remove “beta” label and explain production recommendations
  • -
-
-
-

0.5.28

-
    -
  • Bump rstudio-library to 0.1.24 -
      -
    • Update RBAC definition to support listing of service accounts
    • -
  • -
-
-
-

0.5.27

-
    -
  • Bump Workbench version to 2022.12.0
  • -
-
-
-

0.5.26

-
    -
  • Add a prometheusExporter.resources configuration section for consistency with the Connect chart
  • -
-
-
-

0.5.25

-
    -
  • Add homeStorage.otherArgs and sharedStorage.otherArgs for other PVC arguments -
      -
    • This can be useful for arguments like volumeName when using a PVC that references a PV
    • -
  • -
-
-
-

0.5.24

-
    -
  • BREAKING: remove serviceAccountName in favor of rbac.serviceAccount.name. -
      -
    • Also fix a handful of consistency issues with serviceAccount creation (##251)
    • -
    • Allow un-setting rbac.serviceAccount.name (##294)
    • -
  • -
  • Add prometheusExporter.securityContext for the ability to configure the sidecar securityContext
  • -
  • Add revisionHistoryLimit value for the Workbench deployment -
      -
    • This can be helpful particularly when CI systems such as ArgoCD leave replicasets around
    • -
  • -
-
-
-

0.5.23

-
    -
  • Add updated templates for launcher.templateValues and session container customization -
      -
    • Add customization of securityContext and containerSecurityContext (##293)
    • -
    • Fix typo in serviceAccountName implementation (##251)
    • -
    • Add affinity and tolerations (##271 and ##283)
    • -
  • -
-
-
-

0.5.22

-
    -
  • BREAKING: change jupyter path from /opt/python/3.6.5/bin/jupyter to /usr/local/bin/jupyter -
      -
    • This will hopefully not affect your deployment, but it depends on how your image is built
    • -
    • We have recently changed all of our images to symlink jupyter to /usr/local/bin/jupyter
    • -
  • -
  • add option and values for launcher.useTemplates and launcher.templateValues -
      -
    • this mechanism is useful for simplifying session configuration and replaces job-json-overrides
    • -
    • both will continue being used for now, but they are incompatible and will generate an error if both are used
    • -
    • Advanced topics include launcher.includeDefaultTemplates=false and launcher.extraTemplates
    • -
  • -
  • bump Workbench version to 2022.07.2-576.pro12
  • -
  • add a value for image.tagPrefix to make choosing operating system for the server image easier. Default is bionic-
  • -
-
-
-

0.5.21

-
    -
  • Fix an issue in the startup script to verify that the dir exists
  • -
-
-
-

0.5.20

-
    -
  • Fix an issue where chowning fails in the startup script -
      -
    • This is particularly problematic if ConfigMaps or Secrets are mounted into this directory
    • -
  • -
  • Change appVersion to reflect the new docker image naming convention: bionic-*** to include the OS in the image name.
  • -
-
-
-

0.5.19

-
    -
  • Add a simple mechanism for snapshot testing to make stronger backwards compatibility guarantees
  • -
-
-
-

0.5.18

-
    -
  • Add a ServiceMonitor CRD and values to configure
  • -
  • Add pod.affinity value for configuration of pod affinity
  • -
  • Fix issue where hostnames are not routable within kubernetes while load balancing -
      -
    • Because hostname output is not routable between pods, we use www-host-name=$(hostname -i) to route by IP address
    • -
    • This fixes a load balancing issue with some hard to understand asio.netdb errors
    • -
  • -
-
-
-

0.5.17

-
    -
  • Bump rstudio-library chart version
  • -
  • Relax RBAC for pod/logs to remove write-related privileges
  • -
-
-
-

0.5.16

-
    -
  • Add the ability to set annotations to the Persistent Volume Claim.
  • -
-
-
-

0.5.15

-
    -
  • Bump Workbench to version 2022.02.3-492.pro3
  • -
  • Fix typo in the README
  • -
-
-
-

0.5.14

-
    -
  • Bump Workbench to version 2022.02.2+485.pro2
  • -
-
-
-

0.5.13

-
    -
  • Allow specifying defaultMode for most/all configMap and secret mounts -
      -
    • this should be backwards compatible. Please let us know if any issues arise
    • -
    • use cases include adding executable startup scripts, additional services, changing access for files to be more/less secure, changing permissions in accordance with different runAs, runAsGroup config.
    • -
  • -
-
-
-

0.5.12

-
    -
  • Allow Launcher to Auto Configure Kubernetes variables -
      -
    • Removes dynamic generation of launcher.kubernetes.conf file
    • -
    • Add launcher.kubernetes.conf to default values, setting kubernetes-namespace to the value of launcher.namespace
    • -
  • -
  • Update rstudio-library chart version. Add support for lists in INI file sections.
  • -
-
-
-

0.5.11

-
    -
  • Update docs for job-json-overrides (fix a key reference issue and link to new docs in the helm repo)
  • -
-
-
-

0.5.10

-
    -
  • Fix ingress definition issues with older Kubernetes clusters (##139)
  • -
-
-
-

0.5.9

-
    -
  • Upgrade Workbench to version 2022.02.1+461.pro1
  • -
-
-
-

0.5.8

-
    -
  • Update README docs
  • -
  • Add selector for storage definition (##136)
  • -
  • Fix default permissions (0644) on pam mounts (##141)
  • -
-
-
-

0.5.7

-
    -
  • Update logging.conf to default to output logs on stderr
  • -
-
-
-

0.5.6

-
    -
  • Fix the version update. Our annotations were incorrect.
  • -
-
-
-

0.5.5

-
    -
  • Update RStudio Workbench to version 2021.09.2+382.pro1 (the second patch release of 2021.09)
  • -
-
-
-

0.5.4

-
    -
  • BUGFIX: address an important issue in RStudio Workbench load balancing -
      -
    • Ever since 0.5.0, we did not create a load-balancer file
    • -
    • This means that even “HA” installations of Workbench would function like independent nodes
    • -
    • We now touch an empty file and let the nodes report themselves to the database in this case
    • -
  • -
-
-
-

0.5.3

-
    -
  • Make startupProbe, readinessProbe and livenessProbe more configurable (##97) -
      -
    • They still use the enabled key to turn on or off
    • -
    • We then remove this key with omit, and pass the values verbatim to the template (as YAML)
    • -
  • -
-
-
-

0.5.2

-
    -
  • Update rstudio-library chart version. This adds support for extraObjects
  • -
  • Add extraObjects value. This allows deploying additional resources (with templating) straight from the values file!
  • -
-
-
-

0.5.1

-
    -
  • Update rstudio-library chart version. This adds a helper for rendering Ingress resources
  • -
  • Create k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)
  • -
-
-
-

0.5.0

-
    -
  • BREAKING: Bump RStudio version to Ghost Orchid (2021.09.0+351.pro6) -
      -
    • This version of the chart is no longer compatible (by default) with older versions (1.4 and previous).
    • -
    • Previous versions of the chart are not compatible (by default) with 2021.09 or later
    • -
    • If you want to use charts across versions, you will need to change command, args, and some configmaps.
    • -
    • RSP environment variables for user creation, licensing, etc. are now RSW
    • -
  • -
  • BREAKING: Change RStudio Workbench execution model to use supervisord
  • -
  • BREAKING: Add vscode.conf defaults. This enables VS Code sessions, which is dependent on your images having code-server installed at /opt/code-server/
  • -
  • Create diagnostics values (diagnostics.enabled and diagnostics.directory) to control diagnostic output
  • -
  • Add values to launcher.kubernetesHealthCheck to control the behavior of the “Kubernetes Health Check” that launcher runs at startup
  • -
  • Enable PAM sessions by default (i.e. auth-pam-sessions-enabled=1). This is important for proper home directory creation, for instance. Disable by setting config.server.rserver\.conf.auth-pam-sessions-enabled=0
  • -
  • Add imagePullSecrets value option (##57)
  • -
  • Add config.pam values option to add pam config files
  • -
  • Add config-maps to configure startup behavior (config.startupCustom)
  • -
  • Add a config setting for sssd (now in the container by default) (config.userProvisioning)
  • -
  • Add a “secret” configmap for session components (useful for shared database credentials, odbc.ini, etc.) (config.sessionSecret)
  • -
  • Update README to make job-json-overrides, profiles, user provisioning, etc. more clear
  • -
  • Update rstudio-library chart dependency -
      -
    • BUGFIX: Address an issue with how launcher-mounts was generated incorrectly (##108)
    • -
  • -
  • Add a pod.labels values option (##101)
  • -
  • Modify how supervisord starts sssd with config.startupUserProvisioning values option (##110)
  • -
-
-
-

0.4.6

-
    -
  • Updated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).
  • -
-
-
-

0.4.5

-
    -
  • Update rstudio-library chart version. This adds pods/exec privilege to RBAC -
      -
    • This is important for sessions to exit properly
    • -
  • -
-
-
-

0.4.4

-
    -
  • Added a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.
  • -
-
-
-

0.4.3

-
    -
  • BUGFIX: The load-balancer sidecar container was not selecting app labels properly. This is now fixed. It could have been causing issues in load-balanced setups
  • -
-
-
-

0.4.2

-
    -
  • BUGFIX: session configuration is now mounted to the proper location on session pods
  • -
  • BUGFIX: Prometheus annotations are now properly defined (they were using the wrong port)
  • -
  • BUGFIX: The Graphite Exporter regex had a bug that did not handle certain hostnames
  • -
  • Customizing the graphite exporter “mapping.yaml” is now configurable by defining .Values.prometheusExporter.mappingYaml
  • -
-
-
-

0.4.1

-
    -
  • Update docs
  • -
-
-
-

0.4.0

-
    -
  • BREAKING: serviceAccountName is now rbac.serviceAccount.name for consistency with our other charts

  • -
  • BREAKING: launcher=true is now launcher.enabled = true and launcherNamespace is now launcher.namespace for consistency with our other charts

  • -
  • Breaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to

    -
    license:
    -  key: my-key
  • -
  • Added support for floating licenses and license files.

  • -
  • BREAKING: defaults have changed for config.server.launcher\.kubernetes\.profiles\.conf.

    -
      -
    • To avoid the breaking change, add the defaults to your explicitly enumerated values
    • -
    • See why this happened and an alternative forward-looking pattern below
    • -
    • The previous defaults:
    • -
    -
    config:
    -server:
    -  launcher.kubernetes.profiles.conf:
    -    "*":
    -      default-container-image: rstudio/r-session-complete:bionic-1.4.1106-5
    -      container-images: rstudio/r-session-complete:bionic-1.4.1106-5
    -      allow-unknown-images: 1
  • -
  • BREAKING: we now automatically mount session configuration into the session pod

    -
      -
    • This adds default job-json-overrides using the mechanism above
    • -
    • This can be disabled by setting session.defaultConfigMount=false
    • -
    • This is useful for things like repos.conf, rsession.conf (default Connect server, etc.), etc.
    • -
  • -
  • Switch to using the rstudio-library chart for configuration generation

    -
      -
    • This enables putting verbatim files in place if that is preferred to values-interpolation (converting values into a config file dynamically by the chart)
    • -
    • i.e. passing a string to the configuration value will short-circuit configuration generation
    • -
    -
    config:
    -server:
    -  some-config-file: |
    -    interpret-verbatim-please
  • -
  • Update appVersion to 1.4.1717-3

  • -
  • Add a new config.profiles option for configuring profiles files more naturally.

    -
      -
    • This will only be used if the launcher.kubernetes.profiles.conf key is not in config.server (testing for key duplication is tricky in helm, so we pick the most common key)
    • -
    • Before, we would have something like this in values.yaml:
    • -
    -
    jobJsonOverridesFiles:
    -some.json:
    -  "text"
    -other.json:
    -  - an
    -  - array
    -config:
    -server:
    -  launcher.kubernetes.profiles.conf:
    -    "*":
    -      job-json-overrides: '"some/target:some.json","other/target:other.json"'
    -      container-images: "one-image:tag,two-image:tag"
  • -
  • Now, we can do something like the following. A bit more verbose, but much easier to read and understand:

  • -
-
config:
-  profiles:
-    launcher.kubernetes.profiles.conf:
-      "*":
-        job-json-overrides:
-          - target: "some/target"
-            json: "text"
-            name: some
-          - target: "other/target"
-            json:
-              - an
-              - array
-            name: other
-        container-images:
-          - "one-image:tag"
-          - "two-image:tag"
-
    -
  • Moreover, job-json-overrides defined under config.profiles now have inheritance within the chart. That is, * job-json-overrides are appended to everyone else’s configuration. Documentation and possible extension of this pattern to container images, etc. to follow.

  • -
  • Now hiding the rstudio-workbench container’s configuration files under /etc/rstudio as we are mounting them in different directories as defined by the XDG_CONFIG_DIRS environment variable. This is to prevent confusion that can occur when someone edits /etc/rstudio configuration files and then sees no changes after reloading the server configuration.

  • -
  • When specifying a server for floating licensing, the RSW chart will now automatically be configured to set server-licensing-type=remote in the rserver.conf configuration file.

  • -
-
-
-

0.3.7

-
    -
  • Make secure-cookie-key and launcher.pem autogeneration static -
      -
    • This means that the auto-generated values will persist across helm upgrades
    • -
    • It is still safest to define these values yourself
    • -
  • -
-
-
-

0.3.6

-
    -
  • Fix small reference issue in the prestart.bash script
  • -
-
-
-

0.3.5

-
    -
  • Decouple securityContext values from the main RSW container and the sidecar container
  • -
-
-
-

0.3.4

-
    -
  • remove “privileged: true”, which is not necessary for rstudio-workbench server or sessions
  • -
  • Add ingress as an option
  • -
  • Add annotations to deployment so that the pods roll when config changes
  • -
  • Switch the “secret” configurations to being an actual Secret
  • -
-
-
-

0.3.3

-
    -
  • Bump load-balancer-manager again (to 2.2)
  • -
  • Allow customization of load-balancer-manager env vars
  • -
-
-
-

0.3.2

-
    -
  • Fix a bug in the load-balancer-manager (sidecar container) -
      -
    • The helm chart (as a result of previous changes) no longer defines an app label, but an app.kubernetes.io/name label.
    • -
    • update the selector, make error handling better, etc. This requires version 2.0 of the load-balancer-manager
    • -
  • -
-
-
-

0.3.1

-
    -
  • allow global.secureCookieKey as an option along with secureCookieKey
  • -
  • ensure that no empty launcher.pub file is generated by default
  • -
  • default image.tag to Chart.AppVersion
  • -
-
-
-

0.3.0

-
    -
  • BREAKING: changed rstudio container command and args to tell tini how to supervise processes and run a differently named prestart script. Also made /usr/local/bin/startup.sh script execution a part of the args.
  • -
-
-
-

0.2.2

-
    -
  • Update Workbench version to 1.4.1106-5
  • -
  • Update docs
  • -
-
-
-

0.2.1

-
    -
  • rename to rstudio-workbench corresponding to upcoming rstudio-server-pro rebranding
  • -
  • fix bug that was creating a test user by default
  • -
  • add other licensing options (via server, file, and secret values)
  • -
-
-
-

0.2.0

-
    -
  • Change naming convention -
      -
    • Fix issues with namespacing
    • -
    • However, this will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true
    • -
    • If you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC
    • -
    • Alternatively, you can set fullnameOverride: "previous-release-name" to force backwards compatibility
    • -
    • Finally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install
    • -
    • Use helm diff upgrade to ensure things are working as you expect before upgrading
    • -
  • -
-
-
-

0.0.8

-
    -
  • add jobJsonOverridesFiles value option
  • -
-
-
-

0.0.7

-
    -
  • Made HA functional
  • -
-
-
-

0.0.5

-
    -
  • BREAKING: move storage* values to a sharedStorage map
  • -
  • Add homeStorage
  • -
  • Add logging.conf
  • -
-
-
-

0.0.4

-
    -
  • Add a secret configmap for pem and pub keys
  • -
-
-
-

0.0.3

-
    -
  • BREAKING: Restructure the image values object
  • -
  • Add image.pullPolicy
  • -
  • Switch to image.repository and image.tag from image
  • -
  • Allow customizing pod command and args
  • -
-
-
-

0.0.2

-
    -
  • Add database.conf and notifications.conf
  • -
-
-
-

0.0.1

-
    -
  • Initial pass!
  • -
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/charts/rstudio-workbench/README.html b/charts/rstudio-workbench/README.html deleted file mode 100644 index 99233e5d..00000000 --- a/charts/rstudio-workbench/README.html +++ /dev/null @@ -1,2212 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Posit Workbench

-

Version: 0.7.4 AppVersion: 2024.04.0

-
-

Official Helm chart for Posit Workbench

-

Data Scientists use Posit Workbench to analyze data and create data products using R and Python.

-
-
-

For production

-

To ensure a stable production deployment:

-
    -
  • “Pin” the version of the Helm chart that you are using. You can do this using the: -
      -
    • helm dependency command and the associated “Chart.lock” files or

    • -
    • the --version flag.

      -
      -
      -
      - -
      -
      -Important -
      -
      -
      -

      This protects you from breaking changes.

      -
      -
    • -
  • -
  • Before upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.
  • -
  • Read NEWS.md for updates on breaking changes and the documentation below on how to use the chart.
  • -
-
-
-

Installing the chart

-

To install the chart with the release name my-release at version 0.7.4:

-
helm repo add rstudio https://helm.rstudio.com
-helm upgrade --install my-release rstudio/rstudio-workbench --version=0.7.4
-

To explore other chart versions, look at:

-
helm search repo rstudio/rstudio-workbench -l
-
-
-

Required configuration

-

To function, this chart requires the following:

-
    -
  • A license file. See the Licensing section below for more details.

  • -
  • A Kubernetes PersistentVolume that contains the home directory for users.

    -
      -
    • If homeStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend that you: -
        -
      • Disable homeStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then
      • -
      • Mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using homeStorage.name and homeStorage.mount.
      • -
    • -
    • If you cannot use a PersistentVolume to properly mount your users’ home directories, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.
    • -
    • If you cannot use a Volume to mount the directories, manually mount them during container startup with a mechanism similar to what is described below for joining to auth domains.
    • -
    • If not using homeStorage.create, configure config.serverDcf.launcher-mounts to ensure that the correct mounts are used when users create new sessions.
    • -
  • -
  • If using load balancing (by setting replicas > 1), you need similar storage defined for sharedStorage to store shared project configuration. However, you can also configure the product to store its shared data underneath /home by setting config.server.rserver\.conf.server-shared-storage-path=/home/some-shared-dir.

  • -
  • A method to join the deployed rstudio-workbench container to your auth domain. The default rstudio/rstudio-workbench image has sssd installed and started by default. You can include sssd configuration in config.userProvisioning like so:

    -
    config:
    -  userProvisioning:
    -    mysssd.conf:
    -      sssd:
    -        config_file_version: 2
    -        services: nss, pam
    -        domains: rstudio.com
    -      domain/rstudio.com:
    -        id_provider: ldap
    -        auth_provider: ldap
  • -
-
-
-

Licensing

-

This chart supports activating the product using a license file.

-

We recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.

-

First, create the secret declaratively with YAML or imperatively using the following command:

-
kubectl create secret generic rstudio-workbench-license --from-file=licenses/rstudio-workbench.lic
-

Second, specify the following values:

-
license:
-  file:
-    secret: rstudio-workbench-license
-    secretKey: rstudio-workbench.lic
-

Alternatively, license files can be set during helm install with the following argument:

-
--set-file license.file.contents=licenses/rstudio-workbench.lic
-
-
-

General principles

-
    -
  • In most places, we opt to pass Helm values directly into ConfigMaps. We automatically translate these into the valid .ini or .dcf file formats required by Workbench. -
      -
    • Those configuration files and their mount locations are covered in the Configuration files section below.
    • -
  • -
  • If you need to modify the jobs launched by Workbench, use job-json-overrides. -
  • -
  • The prestart scripts for Workbench and Posit Job Launcher are highly customized to get the service account information off of the Workbench pod for use in launching jobs.
  • -
  • Workbench does not export prometheus metrics on its own. Instead, we run a sidecar graphite exporter. -
  • -
-
-
-

Configuration files

-

These configuration values all take the form of usual Helm values so you can set the database password with something like:

-
... --set config.secret.database\.conf.password=mypassword ...
-

The files are converted into configuration files in the necessary format via go-templating. If you want to “in-line” a config file or mount it verbatim, you can use a pattern like:

-
config:
-  server:
-    rserver.conf: |
-      verbatim-file=format
-

The names of files are dynamically used, so you can add new files as needed. Beware that some files have default values, so moving them can have adverse effects. Also, if you use a different mounting paradigm, you need to change the XDG_CONFIG_DIRS environment variable.

-
    -
  • Session Configuration -
      -
    • These configuration files are mounted into the server and are mounted into the session pods.
    • -
    • repos.conf, rsession.conf, notifications.conf
    • -
    • Located in:
      config.session.<< name of file >> Helm values
    • -
    • Mounted at:
      /mnt/session-configmap/rstudio/
    • -
  • -
  • Session Secret Configuration: -
      -
    • These configuration files are mounted into the server and session pods.
    • -
    • odbc.ini and other similar shared secrets.
    • -
    • Located in:
      config.sessionSecret.<< name of file>> Helm values
    • -
    • Mounted at:
      /mnt/session-secret/
    • -
  • -
  • Secret Configuration: -
      -
    • These configuration files are mounted into the server with more restrictive permissions (0600).
    • -
    • database.conf, openid-client-secret, databricks.conf
    • -
    • Located in:
      config.secret.<< name of file >> Helm values
    • -
    • Mounted at:
      /mnt/secret-configmap/rstudio/
    • -
  • -
  • Server Configuration: -
      -
    • These configuration files are mounted into the server (.ini file format).
    • -
    • rserver.conf, launcher.conf, jupyter.conf, logging.conf
    • -
    • Located at:
      config.server.<< name of file >> Helm values
    • -
    • Mounted at:
      /mnt/configmap/rstudio/
    • -
  • -
  • Server DCF Configuration: -
      -
    • These configuration files are mounted into the server (.dcf file format).
    • -
    • launcher-mounts, launcher-env
    • -
    • Located at:
      config.serverDcf.<< name of file >> Helm values
    • -
    • Included at:
      /mnt/configmap/rstudio/
    • -
  • -
  • Profiles Configuration: -
      -
    • These configuration files are mounted into the server (.ini file format).
    • -
    • launcher.kubernetes.profiles.conf
    • -
    • They are located at config.profiles.<< name of file >> Helm values
    • -
    • Included at:
      /mnt/configmap/rstudio/
    • -
    • See the Profiles section below for more information.
    • -
  • -
  • Prestart: -
      -
    • This is provided by the Helm chart in a configmap.
    • -
    • It is mounted into the pod at /scripts/.
    • -
    • prestart-workbench.bash is used to start workbench.
    • -
    • prestart-launcher.bash is used to start launcher.
    • -
  • -
  • User Provisioning Configuration: -
      -
    • These configuration files are used for configuring user provisioning (i.e., sssd).
    • -
    • Located at:
      config.userProvisioning.<< name of file >> Helm values
    • -
    • Mounted onto:
      /etc/sssd/conf.d/ with 0600 permissions by default.
    • -
  • -
  • Custom Startup Configuration: -
      -
    • supervisord service / unit definition .conf files.

    • -
    • Use the .ini file format by default.

    • -
    • Mounted at:
      /startup/custom

    • -
    • As with all configuration files above, you can override with a verbatim string if desired:

    • -
    • Located at:
      config.startupCustom.<< name of file >> Helm values:

      -
      config:
      -  startupCustom:
      -    myfile.conf: |
      -      file-used-verbatim
    • -
  • -
  • PAM configuration: -
      -
    • pam configuration files.
    • -
    • Located at:
      config.pam.<< name of file >> Helm values
    • -
    • Mounted verbatim as individual files (using subPath mounts) at:
      /etc/pam.d/<< name of file >>
    • -
  • -
-
-

Python repositories

-

pip can be configured with config.session.pip.conf. To ensure pip.conf is mounted into the session pods, it is important that:

-
    -
  • launcher.useTemplates: true is set

  • -
  • pip.conf settings are listed under config.session as shown in the following example for adding Posit Public Package Manager’s PyPI:

    -
    launcher:
    -  useTemplates: true
    -
    -config:
    -  session:
    -    pip.conf:
    -      "global":
    -        index-url: https://packagemanager.posit.co/pypi/latest/simple
    -        trusted-host: packagemanager.posit.co
  • -
-
-
-

R repositories

-

R package repositories can be configured with config.session.repos.conf:

-
config:
-  session:
-    repos.conf:
-      CRAN: https://packagemanager.posit.co/cran/__linux__/jammy/latest
-

For more information about configuring CRAN repositories in Workbench, see the Posit Workbench Administrator Guide’s - Package Installation > CRAN repositories section.

-
-
-
-

User provisioning

-

Provisioning users in Workbench containers is challenging. Session images create users automatically (with consistent UIDs / GIDs). However, creating users in the Workbench containers is a responsibility that falls to the administrator.

-

The most common way to provision users is via sssd. The latest Workbench container has sssd included and running by default (see userProvisioning configuration files above).

-

The other way that this can be managed is via a lightweight startup service (runs once at startup and then sleeps forever) or a polling service (checks at regular intervals). Either can be written easily in bash or another programming language.

-

However, it is important to use caution for the following:

-
    -
  • UID / GID consistency: -
      -
    • Linux usernames and their matching to UID/GID must be consistent across all nodes and across time.
    • -
    • Failing can cause security issues and access by some users to access view they should not be allowed to see.
    • -
  • -
  • Usernames cannot have @. -
      -
    • The @ sign (often used in emails with SSO) is a problem for Workbench because some operating systems disallow @ signs in linux usernames.
    • -
  • -
  • supervisord is configured by default to exit if any of its child processes exit. -
      -
    • If you use config.startupCustom to configure a user management service, be careful that it does not exit unnecessarily.
    • -
  • -
-

We do not provide such a service out-of-the box because we intend for Workbench to solve this problem in a future release. Please contact your account representative if you have feedback or questions about this workflow.

-
-

PAM

-

When starting sessions on Workbench, PAM configuration is often very important, even if PAM is not being used as an authentication mechanism. The Workbench Helm chart allows creating custom PAM files via the config.pam values section.

-

Each key under config.pam becomes a PAM configuration file, and is mounted into /etc/pam.d/ in the container. For example:

-
config:
-  pam:
-    rstudio: |
-      # the rstudio PAM config file
-      # will be used verbatim
-    rstudio-session: |
-      # the rstudio-session PAM config file
-      # will be used verbatim
-
-
-
-

RStudio profiles

-

Profiles are used to define product behavior (in .ini file format) based on user and group membership.

-

Sections define whether a set of configurations is applied to a user’s jobs based on the following criteria:

-
    -
  • If section header is [*], it applies to all users.
  • -
  • If a user’s username is myusername, the section [myusername] applies to them.
  • -
  • If a user is in the allusers group, then the section [@allusers] applies to them
  • -
-

The product reads configuration from top to bottom and “last-in-wins” for a given configuration value.

-
-

/etc/rstudio/profiles

-

The /etc/rstudio/profiles file enables you to tailor the behavior of sessions on a per-user or per-group basis. See the Posit Workbench Administrator Guide - User and Group Profiles page for more information.

-

In the values.yaml, define the content of /etc/rstudio/profiles in config.server.profiles. For example:

-
config:
-  server:
-    profiles:
-      "*":
-        session-limit: 5
-        session-timeout-minutes: 60
-

Becomes:

-

/etc/rstudio/profiles

-
[*]
-session-limit=5
-session-timeout-minutes=60
-
-
-

/etc/rstudio/launcher.kubernetes.profiles.conf

-

The /etc/rstudio/launcher.kubernetes.profiles.conf contains the configuration of resource limits by user and group when using the Kubernetes Launcher Plugin. In the values.yaml, define the content of /etc/rstudio/launcher.kubernetes.profiles.conf in the config.profiles.launcher.kubernetes.profiles.conf file. The config.profiles section has a couple of niceties that are added in by default.

-
    -
  • YAML arrays like the following becomes “comma-joined.” For instance, the following becomes: some-key=value1,value2

    -
    some-key:
    -  - value1
    -  - value2
  • -
  • The [*] section has arrays “appended” to user and group sections, along with “defaults” defined by the chart.

  • -
-

For example:

-
config:
-  profiles:
-    launcher.kubernetes.profiles.conf:
-      "*":
-        some-key:
-          - value1
-          - value2
-      myuser:
-        some-key:
-          - value4
-          - value5
-

Becomes:

-

/etc/rstudio/launcher.kubernetes.profiles.conf

-
[*]
-some-key: value1,value2
-[myuser]
-some-key: value1,value2,value3,value4
-
-
-
- -
-
-Note -
-
-
-

This appending/concatenation/array translation behavior only works with the helm chart.

-
-
-
-
-

Job Json overrides

-

If you want to customize the job launch process (i.e., how sessions are defined), edit the following configuration:

-
    -
  • Modify:

    -
    config.profiles.launcher\.kubernetes\.profiles\.conf.<< some selector >>.job-json-overrides`
  • -
  • Create an array of maps with the following keys:

    -
      -
    • target: The “target” part of the job spec to replace.
    • -
    • name: A unique identifier (ideally with no spaces) becomes a configuration filename on disk.
    • -
    • json: A YAML value that is translated directly to JSON and injected into the job spec at target.
    • -
  • -
-

Explore the docs in the Helm repository for additional information.

-
config:
-  profiles:
-    launcher.kubernetes.profiles.conf:
-      "*":
-        job-json-overrides:
-          - target: "/spec/template/spec/containers/0/imagePullPolicy"
-            json: "Always"
-            name: imagePullPolicy
-          - target: "/spec/template/spec/imagePullSecrets"
-            json:
-              - name: my-pull-secret
-            name: imagePullSecrets
-        container-images:
-          - "one-image:tag"
-          - "two-image:tag
-
-
-
-

Sealed secrets

-

This chart supports the use of Sealed Secrets to allow for storing secrets in SCM and to ensure secrets are never leaked via Helm. The target cluster must include a SealedSecret controller as the controller is responsible for converting a SealedSecret to a Secret.

-

To activate the use of SealedSecret templates instead of Secret templates in the chart, set sealedSecret.enabled=true and ensure the following values are all encrypted (the chart does not support mixing encrypted values with unencrypted values):

-
    -
  • config.secret
  • -
  • config.sessionSecret
  • -
  • config.userProvisioning
  • -
  • launcherPem
  • -
  • secureCookieKey (or global.secureCookieKey)
  • -
-

Use of Sealed secrets disables the chart’s auto-generation and reuse capabilities for launcherPem and secureCookieKey. launcherPem is an RSA private key, which can be generated via an RSA tool such as Helm’s genPrivateKey function. secureCookieKey is typically a UUID, which can be generated via a UUID generator such as Helm’s uuidv4 function.

-
-
-

Values

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyTypeDefaultDescription
affinityobject{}A map used verbatim as the pod’s “affinity” definition
argslist[]args is the pod container’s run arguments.
commandlist[]command is the pod container’s run command. By default, it uses the container’s default. However, the chart expects a container using supervisord for startup
config.defaultMode.jobJsonOverridesint0644default mode for jobJsonOverrides config
config.defaultMode.pamint0644default mode for pam scripts
config.defaultMode.prestartint0755default mode for prestart config
config.defaultMode.secretint0600default mode for secrets
config.defaultMode.serverint0644default mode for server config
config.defaultMode.sessionint0644default mode for session files
config.defaultMode.sessionSecretint0420default mode for session secrets
config.defaultMode.startupint0755default mode for startup config
config.defaultMode.userProvisioningint0600default mode for userProvisioning config
config.pamobject{}a map of pam config files. Will be mounted into the container directly / per file, in order to avoid overwriting system pam files
config.profilesobject{}a map of server-scoped config files (akin to config.server), but with specific behavior that supports profiles. See README for more information.
config.secretstringnila map of secret, server-scoped config files (database.conf, databricks.conf, openid-client-secret). Mounted to /mnt/secret-configmap/rstudio/ with 0600 permissions
config.serverobjectRStudio Workbench Configuration Reference. See defaults with helm show valuesa map of server config files. Mounted to /mnt/configmap/rstudio/
config.serverDcfobject{"launcher-mounts":[]}a map of server-scoped config files (akin to config.server), but with .dcf file formatting (i.e. launcher-mounts, launcher-env, etc.)
config.sessionobject{"notifications.conf":{},"repos.conf":{"CRAN":"https://packagemanager.posit.co/cran/__linux__/jammy/latest"},"rsession.conf":{},"rstudio-prefs.json":"{}\n"}a map of session-scoped config files. Mounted to /mnt/session-configmap/rstudio/ on both server and session, by default.
config.sessionSecretobject{}a map of secret, session-scoped config files (odbc.ini, etc.). Mounted to /mnt/session-secret/ on both server and session, by default
config.startupCustomobject{}a map of supervisord .conf files to define custom services. Mounted into the container at /startup/custom/
config.startupUserProvisioningobject{"sssd.conf":"[program:sssd]\ncommand=/usr/sbin/sssd -i -c /etc/sssd/sssd.conf --logger=stderr\nautorestart=false\nnumprocs=1\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstdout_logfile_backups=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nstderr_logfile_backups=0\n"}a map of supervisord .conf files to define user provisioning services. Mounted into the container at /startup/user-provisioning/
config.userProvisioningobject{}a map of sssd config files, used for user provisioning. Mounted to /etc/sssd/conf.d/ with 0600 permissions
dangerRegenerateAutomatedValuesboolfalse
diagnosticsobject{"directory":"/var/log/rstudio","enabled":false}Settings for enabling server diagnostics
extraObjectslist[]Extra objects to deploy (value evaluated as a template)
fullnameOverridestring""the full name of the release (can be overridden)
global.secureCookieKeystring""
homeStorage.accessModeslist["ReadWriteMany"]accessModes defined for the storage PVC (represented as YAML)
homeStorage.createboolfalsewhether to create the persistentVolumeClaim for homeStorage
homeStorage.mountboolfalseWhether the persistentVolumeClaim should be mounted (even if not created)
homeStorage.namestring""The name of the pvc. By default, computes a value from the release name
homeStorage.pathstring"/home"the path to mount the homeStorage claim within the pod
homeStorage.requests.storagestring"10Gi"the volume of storage to request for this persistent volume claim
homeStorage.selectorobject{}selector for PVC definition
homeStorage.storageClassNameboolfalsestorageClassName - the type of storage to use. Must allow ReadWriteMany
homeStorage.subPathstring""an optional subPath for the volume mount
homeStorage.volumeNamestring""the volumeName passed along to the persistentVolumeClaim. Optional
image.imagePullPolicystring"IfNotPresent"the imagePullPolicy for the main pod image
image.imagePullSecretslist[]an array of kubernetes secrets for pulling the main pod image from private registries
image.repositorystring"rstudio/rstudio-workbench"the repository to use for the main pod image
image.tagstring""Overrides the image tag whose default is the chart appVersion.
image.tagPrefixstring"ubuntu2204-"A tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined
ingress.annotationsobject{}
ingress.enabledboolfalse
ingress.hostsstringnil
ingress.ingressClassNamestring""The ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources
ingress.tlslist[]
initContainersboolfalsethe initContainer spec that will be used verbatim
jobJsonOverridesFilesobject{}jobJsonOverridesFiles is a map of maps. Each item in the map will become a file (named by the key), and the underlying object will be converted to JSON as the file’s contents
launcher.enabledbooltruedetermines whether the launcher should be started in the container
launcher.extraTemplatesobject{}extra templates to render in the template directory.
launcher.includeDefaultTemplatesbooltruewhether to include the default job.tpl and service.tpl files included with the chart
launcher.includeTemplateValuesbooltruewhether to include the templateValues rendering process
launcher.kubernetesHealthCheckobject{"enabled":true,"extraCurlArgs":["-fsSL"]}configuration for the “Kubernetes Health Check” that the launcher entrypoint runs at startup
launcher.namespacestring""allow customizing the namespace that sessions are launched into. Note RBAC and some config issues today
launcher.templateValuesobject{"job":{"annotations":{},"labels":{},"ttlSecondsAfterFinished":null},"pod":{"affinity":{},"annotations":{},"command":[],"containerSecurityContext":{},"defaultSecurityContext":{},"env":[],"extraContainers":[],"imagePullPolicy":"","imagePullSecrets":[],"initContainers":[],"labels":{},"nodeSelector":{},"securityContext":{},"serviceAccountName":"","tolerations":[],"volumeMounts":[],"volumes":[]},"service":{"annotations":{},"labels":{},"type":"ClusterIP"}}values that are passed along to the launcher job rendering process as a data object (in JSON). These values are then used within session templates.
launcher.templateValues.pod.commandlist[]command for all pods. This is really not something we should expose and will be removed once we have a better option
launcher.useTemplatesboolfalsewhether to render and use templates in the job launching process
launcherPemstring""An inline launcher.pem key. If not provided, one will be auto-generated. See README for more details.
launcherPubboolfalseAn inline launcher.pub key to pair with launcher.pem. If false (the default), we will try to generate a launcher.pub from the provided launcher.pem
license.fileobject{"contents":false,"mountPath":"/etc/rstudio-licensing","mountSubPath":false,"secret":false,"secretKey":"license.lic"}the file section is used for licensing with a license file
license.file.contentsboolfalsecontents is an in-line license file
license.file.mountPathstring"/etc/rstudio-licensing"mountPath is the place the license file will be mounted into the container
license.file.mountSubPathboolfalseIt can be preferable not to enable this, because then updates propagate automatically
license.file.secretboolfalsesecret is an existing secret with a license file in it
license.file.secretKeystring"license.lic"secretKey is the key for the secret to use for the license file
license.keystringnilkey is the license to use
license.serverboolfalseserver is the : for a license server
livenessProbeobject{"enabled":false,"failureThreshold":10,"httpGet":{"path":"/health-check","port":8787},"initialDelaySeconds":10,"periodSeconds":5,"timeoutSeconds":2}livenessProbe is used to configure the container’s livenessProbe
loadBalancer.forceEnabledboolfalsewhether to force the loadBalancer to be enabled. Otherwise requires replicas > 1. Worth setting if you are HA but may only have one node
nameOverridestring""the name of the chart deployment (can be overridden)
nodeSelectorobject{}A map used verbatim as the pod’s “nodeSelector” definition
pod.annotationsobject{}Additional annotations to add to the rstudio-workbench pods
pod.envlist[]env is an array of maps that is injected as-is into the “env:” component of the pod.container spec
pod.labelsobject{}Additional labels to add to the rstudio-workbench pods
pod.lifecycleobject{}container lifecycle hooks
pod.portint8787The containerPort used by the main pod container
pod.securityContextobject{}Values to set the securityContext for the service pod
pod.sidecarlist[]sidecar is an array of containers that will be run alongside the main container
pod.terminationGracePeriodSecondsint120The termination grace period seconds allowed for the pod before shutdown
pod.volumeMountslist[]volumeMounts is injected as-is into the “volumeMounts:” component of the pod.container spec
pod.volumeslist[]volumes is injected as-is into the “volumes:” component of the pod.container spec
podDisruptionBudgetobject{}Pod disruption budget
priorityClassNamestring""The pod’s priorityClassName
prometheusExporter.enabledbooltruewhether the prometheus exporter sidecar should be enabled
prometheusExporter.image.imagePullPolicystring"IfNotPresent"
prometheusExporter.image.repositorystring"prom/graphite-exporter"
prometheusExporter.image.tagstring"v0.9.0"
prometheusExporter.mappingYamlstringnilYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file
prometheusExporter.resourcesobject{}resource specification for the prometheus exporter sidecar
prometheusExporter.securityContextobject{}securityContext for the prometheus exporter sidecar
rbac.clusterRoleCreateboolfalseWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.
rbac.createbooltrueWhether to create rbac. (also depends on launcher.enabled = true)
rbac.serviceAccountobject{"annotations":{},"create":true,"labels":{},"name":""}The serviceAccount to be associated with rbac (also depends on launcher.enabled = true)
readinessProbeobject{"enabled":true,"failureThreshold":3,"httpGet":{"path":"/health-check","port":8787},"initialDelaySeconds":10,"periodSeconds":3,"successThreshold":1,"timeoutSeconds":1}readinessProbe is used to configure the container’s readinessProbe
replicasint1replicas is the number of replica pods to maintain for this service. Use 2 or more to enable HA
resourcesobject{"limits":{"cpu":"2000m","enabled":false,"ephemeralStorage":"200Mi","memory":"4Gi"},"requests":{"cpu":"100m","enabled":false,"ephemeralStorage":"100Mi","memory":"2Gi"}}resources define requests and limits for the rstudio-server pod
revisionHistoryLimitint10The revisionHistoryLimit to use for the pod deployment. Do not set to 0
sealedSecret.annotationsobject{}annotations for SealedSecret resources
sealedSecret.enabledboolfalseuse SealedSecret instead of Secret to deploy secrets
secureCookieKeystring""
securityContextobject{}
service.annotationsobject{}Annotations for the service, for example to specify an internal load balancer
service.clusterIPstring""The cluster-internal IP to use with service.type ClusterIP
service.loadBalancerIPstring""The external IP to use with service.type LoadBalancer, when supported by the cloud provider
service.nodePortboolfalseThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically
service.portint80The Service port. This is the port your service will run under.
service.typestring"ClusterIP"The service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)
serviceMonitor.additionalLabelsobject{}additionalLabels normally includes the release name of the Prometheus Operator
serviceMonitor.enabledboolfalseWhether to create a ServiceMonitor CRD for use with a Prometheus Operator
serviceMonitor.namespacestring""Namespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace
session.defaultConfigMountbooltrueWhether to automatically mount the config.session configuration into session pods. If launcher.namespace is different from Release Namespace, then the chart will duplicate the session configmap in both namespaces to facilitate this
session.defaultHomeMountbooltrueWhether to automatically add the homeStorage PVC to the session (i.e. via the launcher-mounts file)
session.defaultSecretMountPathstring"/mnt/session-secret/"The path to mount the sessionSecret (from config.sessionSecret) onto the server and session pods
session.image.repositorystring"rstudio/r-session-complete"The repository to use for the session image
session.image.tagstring""A tag override for the session image. Overrides the “tagPrefix” above, if set. Default tag is { tagPrefix }{{ version }}
session.image.tagPrefixstring"ubuntu2204-"A tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined
shareProcessNamespaceboolfalsewhether to provide shareProcessNamespace to the pod.
sharedStorage.accessModeslist["ReadWriteMany"]accessModes defined for the storage PVC (represented as YAML)
sharedStorage.annotationsobject{"helm.sh/resource-policy":"keep"}Define the annotations for the Persistent Volume Claim resource
sharedStorage.createboolfalsewhether to create the persistentVolumeClaim for shared storage
sharedStorage.mountboolfalseWhether the persistentVolumeClaim should be mounted (even if not created)
sharedStorage.namestring""The name of the pvc. By default, computes a value from the release name
sharedStorage.pathstring"/var/lib/rstudio-server"the path to mount the sharedStorage claim within the pod
sharedStorage.requests.storagestring"10Gi"the volume of storage to request for this persistent volume claim
sharedStorage.selectorobject{}selector for PVC definition
sharedStorage.storageClassNameboolfalsestorageClassName - the type of storage to use. Must allow ReadWriteMany
sharedStorage.volumeNamestring""the volumeName passed along to the persistentVolumeClaim. Optional
startupProbeobject{"enabled":false,"failureThreshold":30,"httpGet":{"path":"/health-check","port":8787},"initialDelaySeconds":10,"periodSeconds":10,"timeoutSeconds":1}startupProbe is used to configure the container’s startupProbe
startupProbe.failureThresholdint30failureThreshold * periodSeconds should be strictly > worst case startup time
strategyobject{"rollingUpdate":{"maxSurge":"100%","maxUnavailable":0},"type":"RollingUpdate"}How to handle updates to the service. RollingUpdate (the default) minimizes downtime, but will not work well if your license only allows a single activation.
tolerationslist[]An array used verbatim as the pod’s “tolerations” definition
topologySpreadConstraintslist[]An array used verbatim as the pod’s “topologySpreadConstraints” definition
userCreateboolfalseuserCreate determines whether a user should be created at startup (if true)
userNamestring"rstudio"userName determines the username of the created user
userPasswordstring"rstudio"userPassword determines the password of the created user
userUidstring"10000"userUid determines the UID of the created user
versionOverridestring""A Workbench version to override the “tag” for the RStudio Workbench image and the session images. Necessary until https://github.com/helm/helm/issues/8194
xdgConfigDirsstring"/mnt/dynamic:/mnt/session-configmap:/mnt/secret-configmap:/mnt/configmap:/mnt/load-balancer/"The XDG config dirs (directories where configuration will be read from). Do not change without good reason.
xdgConfigDirsExtralist[]A list of additional XDG config dir paths
-
-

Autogenerated from chart metadata using helm-docs v1.13.1

- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/docs/customize.html b/docs/customize.html deleted file mode 100644 index 87934c42..00000000 --- a/docs/customize.html +++ /dev/null @@ -1,1083 +0,0 @@ - - - - - - - - - -Posit Helm Charts – customize - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Customize Kubernetes Jobs

-

This doc discusses customizing Kubernetes Jobs in the context of the Posit Job Launcher. This is relevant for both Posit Workbench and Posit Connect when the job launcher is enabled.

-
-

Job Json Overrides

-

The original mechanism for modifying kubernetes jobs using the Job Launcher is to use job-json-overrides.

-

There is a support article discussing the topic and examples in a legacy context here

-

In helm, there is a helper that simplifies some of this configuration. As a result, we will include several snippets below to simplify use cases.

-
-

How it works

-

The rstudio-library chart will ensure that: - this “nicer format” will be transformed into a “real” job-json-overrides configuration field

-
"*":
-  job-json-overrides:
-    - name:
-      target:
-      json:
-
    -
  • overrides in the "*" section are added to groups (@mygroup) and users (username)
  • -
  • json blobs (json key) are written to disk at an appropriate location with filename { name }.json
  • -
  • the array is aggregated into the required comma-separated list
  • -
  • the target part of the job spec will be modified by the Job Launcher
  • -
-

IMPORTANT: name is arbitrary, but must be unique! (And should contain no spaces)

-

See examples below.

-
-
-

Override Syntax

-

The job-json-override spec is discussed in detail in the Posit Launcher documentation. It uses the JSON Pointer RFC.

-

Some points that are helpful to reference:

-
    -
  • An array suffixed with - will “append” to the array (i.e. /spec/templates/spec/volumes/- will leave pre-defined volumes intact, but add a new entry)
  • -
  • The character combination ~1 in the target will resolve to /. This can be especially useful for annotation keys.
  • -
  • The character combination ~0 in the target will resolve to ~
  • -
-
-
-

Examples

-
-

nodeSelector / Placement Constraints

-

Add a placement constraint to the session pod with key kubernetes.io/key and value value

-
"*":
-  job-json-overrides:
-    - name: placement-constraint
-      target: /spec/template/spec/nodeSelector/kubernetes.io~1key
-      json: "value"
-

NOTE: it is possible to use the placement-constraints configuration within the ” Profiles” configuration. However, this modifies the Workbench UI and is not enabled by default. (It requires user input to have the profiles included)

-

It is also possible to override the entire nodeSelector object, but this would conflict with any user-defined placement constraints.

-
-
-

serviceAccountName

-

Set the serviceAccountName to my-service-account

-
"*":
-  job-json-overrides:
-    - name: service-account
-      target: /spec/template/spec/serviceAccountName
-      json: "my-service-account"
-
-
-

imagePullSecrets

-

Set an imagePullSecret called my-pull-secret

-
"*":
-  job-json-overrides:
-    - name: imagePullSecrets
-      target: "/spec/template/spec/imagePullSecrets"
-      json:
-        - name: my-pull-secret
-
-
-

imagePullPolicy

-

Set the imagePullPolicy to "Always"

-
"*":
-  job-json-overrides:
-    - target: "/spec/template/spec/containers/0/imagePullPolicy"
-      json: "Always"
-      name: imagePullPolicy
-
-
-

annotation

-

Add an annotation with key my.company.com/key and value my-annotation-value

-
"*":
-  job-json-overrides:
-    - name: add-company-annotation
-      target: /spec/template/metadata/annotations/my.company.com~1key
-      json: "my-annotation-value"
-
-
-

nodeAffinity

-

Add a nodeAffinity for nodes with kubernetes.io/hostname label node-hostname

-
"*":
-  job-json-overrides:
-    - name: node-affinity
-      target: /spec/template/spec/affinity
-      json:
-        nodeAffinity:
-          requiredDuringSchedulingIgnoredDuringExecution:
-            nodeSelectorTerms:
-              - matchExpressions:
-                - key: kubernetes.io/hostname
-                  operator: "In"
-                  values:
-                    - node-hostname
-
-
-

ConfigMap

-

Add a ConfigMap called my-configmap to the session pod at /etc/configmap

-
"*":
-  job-json-overrides:
-    - name: add-configmap-volume
-      target: /spec/template/spec/volumes/-
-      json:
-        name: configmap-volume
-        configMap:
-            name: my-configmap
-    - name: add-configmap-volume-mount
-      target: /spec/template/spec/containers/0/volumeMounts/-
-      json:
-        name: configmap-volume
-        mountPath: /etc/configmap
-
-
-

PersistentVolumeClaim / Other Volume

-

Add another volume to the session pod. This time, a PersistentVolumeClaim named my-pvc, mounted at /mnt/data

-
"*":
-  job-json-overrides:
-    - name: add-pvc-volume
-      target: /spec/template/spec/volumes/-
-      json:
-        name: pvc-volume
-        persistentVolumeClaim:
-          claimName: my-pvc
-    - name: add-pvc-volume-mount
-      target: /spec/template/spec/containers/0/volumeMounts/-
-      json:
-        name: pvc-volume
-        mountPath: /mnt/data
- - -
-
-
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/auto-scaling/README.html b/examples/auto-scaling/README.html deleted file mode 100644 index 01bcae20..00000000 --- a/examples/auto-scaling/README.html +++ /dev/null @@ -1,1016 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

RStudio Workbench with Auto-Scaling

-

These files show you an example kubernetes auto-scaling configuration with RStudio Workbench. The two subdirectories, autoscaler and rstudio-workbench, contain specific configuration files that outline the parameters required to successfully set up kubernetes with auto-scaling.

-

To learn more about this use case, refer to the RStudio Solutions Site.

-
-

Autoscaler

-

The values.yaml in the autoscaler folder outlines the configuration required for the cluster autoscaler. This is a component that automatically adjusts the size of a Kubernetes Cluster so that all pods have a place to run. We have provided a sample configuration for AWS EKS clusters. For more details see the Kubernetes Autoscaler Repo.

-

Note: Autoscaler is a third party software maintained by the Kubernetes project.

-
-
-

RStudio Workbench

-

The values.yaml in the rstudio-workbench folder outlines the timeout configurations required to set up this configuration. The file has 3 sections that need to be configured for autoscaling.

-
    -
  • rsession

    -
      -
    • This section provides the configuration for the rsession.conf file which controls behaviour of the RStudio IDE processes, allowing you to tune various R session parameters. There are 4 parameters that need to be configured in this section. You can learn more about the options in the RStudio Workbench Admin Guide.
    • -
    -
    ...
    -session-timeout-minutes: 5
    -session-timeout-suspend: 1
    -session-quit-child-processes-on-exit: 1
    -session-timeout-kill-hours: 1
  • -
  • jupyter

    - -
    ...
    -session-cull-minutes: 5
    -session-shutdown-minutes: 3
    -session-cull-connected: 1
  • -
  • launcher.kubernetes.profiles.conf

    -
      -
    • This section provides the configuration for the Kubernetes Job Launcher Plugin. You will need to specify the value below for the job-json-overrides parameter to prevent the automatic eviction of pods. For more details see the Kubernetes Plugin Configuration Guide.
    • -
    -
    ...
    -job-json-overrides:
    -  - target: "/spec/template/metadata/annotations/cluster-autoscaler.kubernetes.io~1safe-to-evict"
    -    json: "false"
    -    name: evict-annotation
  • -
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/auto-scaling/autoscaler/values.yaml b/examples/auto-scaling/autoscaler/values.yaml deleted file mode 100644 index dd7c17e3..00000000 --- a/examples/auto-scaling/autoscaler/values.yaml +++ /dev/null @@ -1,15 +0,0 @@ -replicaCount: 3 -autoDiscovery: - clusterName: cluster_name - tags: - - k8s.io/cluster-autoscaler/enabled - - k8s.io/cluster-autoscaler/{{ .Values.autoDiscovery.clusterName }} -awsRegion: us-east-1 -cloudProvider: aws -rbac: - create: true - serviceAccount: - annotations: - eks.amazonaws.com/role-arn: #TODO: add autoscaler IAM role - create: true - name: "autoscaler-aws-cluster-autoscaler" diff --git a/examples/auto-scaling/rstudio-workbench/values.yaml b/examples/auto-scaling/rstudio-workbench/values.yaml deleted file mode 100644 index 4107d4a5..00000000 --- a/examples/auto-scaling/rstudio-workbench/values.yaml +++ /dev/null @@ -1,173 +0,0 @@ -ingress: - enabled: true - annotations: - kubernetes.io/ingress.class: traefik - traefik.ingress.kubernetes.io/router.middlewares: "default-default-add-forwarded-headers@kubernetescrd" - -extraObjects: - - | - apiVersion: traefik.containo.us/v1alpha1 - kind: Middleware - metadata: - name: default-add-forwarded-headers - namespace: default - spec: - headers: - customRequestHeaders: - X-Forwarded-Proto: "https" - X-Forwarded-Port: "443" - hosts: - - host: hostname.mydomain.com - paths: - - / - -homeStorage: - create: true - storageClassName: efs-client - -service: - port: 80 - annotations: - traefik.ingress.kubernetes.io/service.sticky.cookie: "true" - traefik.ingress.kubernetes.io/service.sticky.cookie.name: RSW-SESSION-COOKIE - traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true" - traefik.ingress.kubernetes.io/service.sticky.cookie.samesite: "none" - traefik.ingress.kubernetes.io/service.sticky.cookie.httponly: "true" - -launcher: - enabled: true - namespace: "soleng-team" - -rbac: - create: true - -command: [] - # - "sleep" - # - "100000" -args: [] - -resources: - requests: - enabled: true - memory: "200Mi" - cpu: "100m" - ephemeralStorage: "250Mi" - limits: - enabled: true - memory: "3Gi" - cpu: "2000m" - ephemeralStorage: "500Mi" - -loadBalancer: - forceEnabled: true - -replicas: 3 - -config: - profiles: - launcher.kubernetes.profiles.conf: - "*": - default-cpus: "1.0" - default-mem-mb: "2048" - max-cpus: "3.0" - max-mem-mb: "8192" - allow-unknown-images: "1" - cpu-request-ratio: "1" - job-json-overrides: - - target: "/spec/template/metadata/annotations/cluster-autoscaler.kubernetes.io~1safe-to-evict" - json: "false" - name: evict-annotation - server: - rserver.conf: - admin-enabled: 1 - admin-group: rstudio-users - admin-superuser-group: rstudio-admin - www-port: 8787 - www-address: 0.0.0.0 - server-health-check-enabled: 1 - server-project-sharing: 0 - auth-pam-sessions-profile: rstudio-session - auth-stay-signed-in-days: 7 - auth-timeout-minutes: 4320 - launcher-sessions-enabled: 1 - launcher-default-cluster: Kubernetes - launcher-sessions-container-run-as-root: 0 - launcher-sessions-create-container-user: 1 - monitor-graphite-enabled: 1 - monitor-graphite-host: 127.0.0.1 - monitor-graphite-port: 9109 - monitor-graphite-client-id: rstudio - audit-r-sessions: 1 - # using the home storage as shared storage for the server - server-shared-storage-path: /home/rstudio-storage/ - auth-revocation-list-dir: /home/rstudio-storage/ - www-enable-origin-check: 0 - launcher.conf: - server: - enable-debug-logging: 0 - jupyter.conf: - jupyter-exe: /opt/python/3.9.5/bin/jupyter - notebooks-enabled: 1 - labs-enabled: 1 - lab-args: --no-browser --allow-root --ip=0.0.0.0 --collaborative - default-session-cluster: Kubernetes - session-cull-minutes: 5 - session-shutdown-minutes: 3 - session-cull-connected: 1 - vscode.conf: - enabled: 1 - exe: /opt/code-server/bin/code-server - default-session-cluster: Kubernetes - logging.conf: - "*": - log-level: info - logger-type: stderr - session: - rsession.conf: - default-rsconnect-server: #rstudio connect server - session-timeout-minutes: 5 - session-timeout-suspend: 1 - session-quit-child-processes-on-exit: 1 - session-timeout-kill-hours: 1 - crash-handler.conf: - crash-handling-enabled: 1 - crash-db-path: /home/diagnostics - uploads-enabled: 0 - pip.conf: | - [global] - timeout = 60 - index-url = pypi_rspm_repo - secret: - database.conf: - provider: postgresql - database: rstudio_auto - port: 5432 - host: db-hostname - username: rstudio_auto_app - password: placeholder - startupCustom: - create-users-ongoing.sh: | - #!/bin/bash - - for user in users.txt; do - USERNAME=$(cat users.txt | grep -v '^\s*#'| cut -d: -f1) - USERID=$(cat users.txt | grep -v '^\s*#'| cut -d: -f2) - echo "$USERNAME" - PASSWORD=$(cat users.txt | grep -v '^\s*#'| cut -d: -f3) - - useradd -u $USERID -m -s /bin/bash -N $USERNAME - echo "$USERNAME:$PASSWORD" | sudo chpasswd - done; - echo 'sleeping forever' - while :; do read; done - - user-provision.conf: | - [program:user-provision] - command=/startup/custom/create-users-ongoing.sh - autorestart=false - numprocs=1 - startsecs=10 - stdout_logfile=/dev/stdout - stdout_logfile_maxbytes=0 - stderr_logfile=/dev/stderr - stderr_logfile_maxbytes=0 diff --git a/examples/connect/application-configuration/index.html b/examples/connect/application-configuration/index.html deleted file mode 100644 index 29b477fe..00000000 --- a/examples/connect/application-configuration/index.html +++ /dev/null @@ -1,1066 +0,0 @@ - - - - - - - - - -Posit Helm Charts – index - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - - - -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/auth/oidc.html b/examples/connect/auth/oidc.html deleted file mode 100644 index e2ba40dc..00000000 --- a/examples/connect/auth/oidc.html +++ /dev/null @@ -1,1061 +0,0 @@ - - - - - - - - - -Posit Helm Charts – oidc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with OpenID Connect

-

This example deploys Posit Connect using OpenID Connect (OIDC) SSO for authentication.

-

Users will be authenticated via SSO (using OIDC) and then users will be created in Connect upon first login or upon creation via the Connect API. Connect will populate user information based on certain claims received from the IdP. See the Customizing OpenID Connect section of the Connect Admin Guide for a list of the default claims mapping, which can be adjusted if needed.

-

By default all users get created with the Viewer role which is the default setting in Authorization.DefaultUserRole. Users can be automatically mapped to different roles based on group membership.

-

See the OpenID Connect Authentication section of the Connect Admin Guide for more details. The Connect Admin guide also has pages for integrations with specific IdPs such as Okta and Entra ID.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-launcher:
-  enabled: true # Required for Off-Host Execution mode
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  Authentication:
-    Provider: oauth2
-  OAuth2:
-    # please see https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/ for more examples of custom OIDC integrations
-    # TODO: change the below to match your OIDC provider
-    ClientId: "0ebfafe9-237f-4e38-a85b-a0e5d6c06782"
-    ClientSecret: "2ab7be07-84fe-4569-b04a-ce8f1ebfc077"
-    OpenIDConnectIssuer: "https://example.com/issuer"
-    #
-    # Enable this for a better user experience, unless
-    # managing a large number of groups is a concern:
-    # GroupsAutoProvision: true
-    #
-    # By default the following claims are mapped to the following values
-    # in Connect. Uncomment and adjust the values below if your claims are
-    # different.
-    # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#customizing-openid-connect
-    # UniqueIdClaim: "sub"
-    # EmailClaim: "email"
-    # FirstNameClaim: "given_name"
-    # LastNameClaim: "family_name"
-    # UsernameClaim: "preferred_username"
-    # GroupsClaim: "groups"
-    #
-    # When troubleshooting an OpenID Connect problem, more verbose logging
-    # is produced by uncommenting the following line:
-    # Logging: true
-    #
-  # By default all users get created with the Viewer role which is the default
-  # setting in Authorization.DefaultUserRole, which can be modified.
-  # Users can be automatically mapped to different roles based on group
-  # membership.
-  # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#user-role-mapping
-  #
-  # Authorization:
-  #   UserRoleGroupMapping: true
-  #   PublisherRoleMapping: "Developers"
-  #   AdministratorRoleMapping: "Administrators"
-  #
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/auth/saml.html b/examples/connect/auth/saml.html deleted file mode 100644 index f17c0212..00000000 --- a/examples/connect/auth/saml.html +++ /dev/null @@ -1,1052 +0,0 @@ - - - - - - - - - -Posit Helm Charts – saml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with SAML

-

This example deploys Posit Connect using SAML SSO for authentication.

-

Users will be authenticated via SSO (using SAML) and then users will be created in Connect upon first login or upon creation via the Connect API. Connect will populate user information based on certain attributes received from the IdP. IdPAttributeProfile may be set to prepopulate attribute mapping for common IdPs, set to default for a common generic mapping or left empty to manually map each attribute. See the Using attribute profiles section of the Connect Admin Guide for more details regarding profile mappings.

-

By default all users get created with the Viewer role which is the default setting in Authorization.DefaultUserRole. Users can be automatically mapped to different roles based on group membership.

-

See the Authentication Integration (Using SAML) section of the Connect Admin Guide for more details. The Connect Admin guide also has pages for integrations with specific IdPs such as Okta and Entra ID.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-launcher:
-  enabled: true # Required for Off-Host Execution mode
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  Authentication:
-    Provider: saml
-  SAML:
-    # Please see https://docs.posit.co/connect/admin/authentication/saml-based/saml/ for more examples of custom SAML integrations
-    IdPMetaDataURL: "https://idp.example.com/saml/metadata" # TODO: Change to match your saml provider's metadata url
-    IdPAttributeProfile: default # TODO: Change to match your auth provider. Accepted values are "okta", "azure" (Azure AD/Entra ID), and "default" (all others)
-    # Setting IdPAttributeProfile will match Connect with certain attributes.
-    # These can be customized instead by not setting SAML.IdPAttributeProfile
-    # and defining each attribute instead in this section.
-    # https://docs.posit.co/connect/admin/authentication/saml-based/azure-ad-saml/#saml-attributes
-    # 
-    # Enable this for a better user experience, unless
-    # managing a large number of groups is a concern:
-    # GroupsAutoProvision: true
-    #
-    # When troubleshooting a SAML problem, more verbose logging
-    # is produced by uncommenting the following line:
-    # Logging: true
-    #
-  # By default all users get created with the Viewer role which is the default
-  # setting in Authorization.DefaultUserRole, which can be modified.
-  # Users can be automatically mapped to different roles based on group
-  # membership.
-  # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#user-role-mapping
-  #
-  # Authorization:
-  #   UserRoleGroupMapping: true
-  #   PublisherRoleMapping: "Developers"
-  #   AdministratorRoleMapping: "Administrators"
-  #
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/beta-migration/index.html b/examples/connect/beta-migration/index.html deleted file mode 100644 index d86a76ca..00000000 --- a/examples/connect/beta-migration/index.html +++ /dev/null @@ -1,1354 +0,0 @@ - - - - - - - - - -Posit Helm Charts – index - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Off-Host Execution Beta User Migration

-

The off-host execution beta moving to GA also moves your content from Bionic to Jammy by default. This will cause all content to get rebuilt. If all content being rebuilt is acceptable, then no further action is necessary.

-

If you prefer a phased approach to migration, you may continue using the bionic images for existing content and jammy images for new content.

-
-

Note: All images used by existing content should be specified in either launcher.customRuntimeImages or launcher.additionalRuntimeImages. If content requires both bionic and jammy images, then you must use R source packages. Binary packages will not work when multiple OS distributions are used.

-
-
    -
  1. If you are currently using customRuntimeImages: 'base' (the default), use values-base.yaml as a reference for updating your values file.

  2. -
  3. If you are currently using customRuntimeImages: 'pro', use values-prod.yaml as a reference for updating your values file.

  4. -
-
-

Technical Details

-

The values files in this directory contain overrides for the chart’s default runtime.yaml configurations. The v0.5.0 version of the rstudio-connect Helm chart contains a breaking change for users who are evaluating the Beta off-host execution feature set. v0.5.0 changes the default OS from bionic to jammy which is considered a breaking change for existing content.

-

When migrating to the v0.5.0 release, beta users should be aware that the set of execution environments defined by launcher.customRuntimeYaml and launcher.additionalRuntimeImages will be used to “bootstrap” Connect’s database the first time Connect starts. Subsequent restarts of Connect will not modify the database, even when a runtimes.yaml configuration is defined.

-

These example values are for users that are evaluating the off-host execution feature set and have content currently deployed which depends on the default set of bionic images. They define the previous default set of bionic images in the launcher.additionalRuntimeImages section, but each image’s “matching” has been set to exact.

-

Any new content that is building for the first time, or existing content that is re-building, will attempt to match against the new default set of jammy images. Content that has already been built with a bionic image can continue to execute with that image until it rebuilds. If an existing piece of content needs to be rebuilt and requires bionic for some reason, the Publisher must explicitly define a default execution environment for that content through the content-settings (access pane) on the dashboard or via the server API.

-
-
-

values-base.yaml

-
-
-
values-base.yaml
-
-
# -- A nested map of maps that generates the rstudio-connect.gcfg file
-# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)
-config:
-
-  # Overrides the package URLs to use source packages which are required if the list
-  # of execution environments contains multiple OS distributions.
-  'RPackageRepository "CRAN"':
-    URL: https://packagemanager.rstudio.com/cran/latest
-
-  # Overrides the package URLs to use source packages which are required if the list
-  # of execution environments contains multiple OS distributions.
-  'RPackageRepository "RSPM"':
-    URL: https://packagemanager.rstudio.com/cran/latest
-
-launcher:
-  # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to "base", which pulls in the default
-  # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to "pro", will
-  # pull in the "pro" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).
-  # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments
-  # the first time the server starts. If any execution environments already exist in the database, these values are ignored;
-  # execution environments are not created or modified during subsequent restarts.
-  customRuntimeYaml: "base"
-
-  # Additional images to append to the end of the "launcher.customRuntimeYaml" (in the "images" key).
-  # If `customRuntimeYaml` is a "map", then "additionalRuntimeImages" will only be used if it is a "list".
-  # Bootstraps the previous default set of "base" bionic images with "exact" matching. This means they can still
-  # be selected explicitly by the publisher.
-  additionalRuntimeImages:
-    - name: ghcr.io/rstudio/content-base:r3.1.3-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.1.3/bin/R
-            version: 3.1.3
-    - name: ghcr.io/rstudio/content-base:r3.2.5-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.2.5/bin/R
-            version: 3.2.5
-    - name: ghcr.io/rstudio/content-base:r3.3.3-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/3.3.3/bin/R
-            version: 3.3.3
-    - name: ghcr.io/rstudio/content-base:r3.4.4-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/3.4.4/bin/R
-            version: 3.4.4
-    - name: ghcr.io/rstudio/content-base:r3.5.3-py3.7.10-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.7.10/bin/python3.7
-            version: 3.7.10
-      r:
-        installations:
-          - path: /opt/R/3.5.3/bin/R
-            version: 3.5.3
-    - name: ghcr.io/rstudio/content-base:r3.6.3-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/3.6.3/bin/R
-            version: 3.6.3
-    - name: ghcr.io/rstudio/content-base:r4.0.5-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-base:r4.0.5-py3.9.2-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.9.2/bin/python3.9
-            version: 3.9.2
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-base:r4.1.0-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/4.1.0/bin/R
-            version: 4.1.0
-    - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.9.2/bin/python3.9
-            version: 3.9.2
-      r:
-        installations:
-          - path: /opt/R/4.1.0/bin/R
-            version: 4.1.0
-    - name: ghcr.io/rstudio/content-base:r4.1.3-py3.10.4-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.10.4/bin/python3
-            version: 3.10.4
-      r:
-        installations:
-          - path: /opt/R/4.1.3/bin/R
-            version: 4.1.3
-      quarto:
-        installations:
-          - path: /opt/quarto/bin/quarto
-            version: 1.0.35
-
-
-
-

values-pro.yaml

-
-
-
values-pro.yaml
-
-
# -- A nested map of maps that generates the rstudio-connect.gcfg file
-# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)
-config:
-
-  # Overrides the package URLs to use source packages which are required if the list
-  # of execution environments contains multiple OS distributions.
-  'RPackageRepository "CRAN"':
-    URL: https://packagemanager.rstudio.com/cran/latest
-
-  # Overrides the package URLs to use source packages which are required if the list
-  # of execution environments contains multiple OS distributions.
-  'RPackageRepository "RSPM"':
-    URL: https://packagemanager.rstudio.com/cran/latest
-
-launcher:
-  # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to "base", which pulls in the default
-  # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to "pro", will
-  # pull in the "pro" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).
-  # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments
-  # the first time the server starts. If any execution environments already exist in the database, these values are ignored;
-  # execution environments are not created or modified during subsequent restarts.
-  customRuntimeYaml: "pro"
-
-  # Additional images to append to the end of the "launcher.customRuntimeYaml" (in the "images" key).
-  # If `customRuntimeYaml` is a "map", then "additionalRuntimeImages" will only be used if it is a "list".
-  # Bootstraps the previous default set of "pro" bionic images with "exact" matching. This means they must
-  # be selected explicitly by the publisher.
-  additionalRuntimeImages:
-    - name: ghcr.io/rstudio/content-pro:r3.1.3-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.1.3/bin/R
-            version: 3.1.3
-    - name: ghcr.io/rstudio/content-pro:r3.2.5-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.2.5/bin/R
-            version: 3.2.5
-    - name: ghcr.io/rstudio/content-pro:r3.3.3-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/3.3.3/bin/R
-            version: 3.3.3
-    - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/3.4.4/bin/R
-            version: 3.4.4
-    - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.7.10-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.7.10/bin/python3.7
-            version: 3.7.10
-      r:
-        installations:
-          - path: /opt/R/3.4.4/bin/R
-            version: 3.4.4
-    - name: ghcr.io/rstudio/content-pro:r3.5.3-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.5.3/bin/R
-            version: 3.5.3
-    - name: ghcr.io/rstudio/content-pro:r3.5.3-py3.7.10-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.7.10/bin/python3.7
-            version: 3.7.10
-      r:
-        installations:
-          - path: /opt/R/3.5.3/bin/R
-            version: 3.5.3
-    - name: ghcr.io/rstudio/content-pro:r3.6.3-py2.7.18-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/2.7.18/bin/python2.7
-            version: 2.7.18
-      r:
-        installations:
-          - path: /opt/R/3.6.3/bin/R
-            version: 3.6.3
-    - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/3.6.3/bin/R
-            version: 3.6.3
-    - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/3.6.3/bin/R
-            version: 3.6.3
-    - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.6.13-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.6.13/bin/python3.6
-            version: 3.6.13
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.7.10-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.7.10/bin/python3.7
-            version: 3.7.10
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.9.2-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.9.2/bin/python3.9
-            version: 3.9.2
-      r:
-        installations:
-          - path: /opt/R/4.0.5/bin/R
-            version: 4.0.5
-    - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.8.8-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.8.8/bin/python3.8
-            version: 3.8.8
-      r:
-        installations:
-          - path: /opt/R/4.1.0/bin/R
-            version: 4.1.0
-    - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.9.2-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.9.2/bin/python3.9
-            version: 3.9.2
-      r:
-        installations:
-          - path: /opt/R/4.1.0/bin/R
-            version: 4.1.0
-    - name: ghcr.io/rstudio/content-pro:r4.1.3-py3.10.4-bionic
-      matching: "exact"
-      python:
-        installations:
-          - path: /opt/python/3.10.4/bin/python3
-            version: 3.10.4
-      r:
-        installations:
-          - path: /opt/R/4.1.3/bin/R
-            version: 4.1.3
-      quarto:
-        installations:
-          - path: /opt/quarto/bin/quarto
-            version: 1.0.35
-
- - -
-
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/container-images/custom-images.html b/examples/connect/container-images/custom-images.html deleted file mode 100644 index db04fe19..00000000 --- a/examples/connect/container-images/custom-images.html +++ /dev/null @@ -1,1063 +0,0 @@ - - - - - - - - - -Posit Helm Charts – custom-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with Custom Container Images

-

This example deploys Posit Connect using custom images instead of the default public Posit provided images.

-

There are a minimum of three images that Connect requires to function in Off-Host Execution mode. They are listed below with their cooresponding default public repositories.

- -

There are several content contents listed as execution enviornments by default on initial Connect startup based on the listing in the default-runtime.yaml file. Setting customRuntimeYaml will instead use the execution environments defined in that section instead of the default ones. Additional content containers may be added to provide more R, Python and Quarto versions and other system dependencies. See the Content Execution Environment section in the Connect Admin Guide for more details.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-

-# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Define the custom image for the Connect pod(s)
-image:
-  repository: ghcr.io/rstudio/rstudio-connect # TODO: Change to match your custom image repository
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-launcher:
-  enabled: true # Required for Off-Host Execution mode
-  useTemplates: true
-  # Define the custom image(s) for the content pod(s)
-  # Note these are only used on the initial creation of the Connect cluster
-  # with an empty database. Once Connect is running you should add environments
-  # via the UI or Connect API. More information is available in the Admin Guide:
-  # https://docs.posit.co/connect/admin/appendix/off-host/execution-environments
-  customRuntimeYaml:
-    name: "Kubernetes"
-    images:
-      # TODO: Add custom images based on the below template
-      - name: ghcr.io/rstudio/content-base:r4.2.2-py3.11.3-ubuntu2204 # TODO: Change to match your custom image repository
-        python:
-          installations:
-            -
-              path: /opt/python/3.11.3/bin/python3 # TODO: Change to match the Python path available in your image
-              version: 3.11.3 # TODO: Change to match the Python version available in your image
-        r:
-          installations:
-            -
-              path: /opt/R/4.2.2/bin/R # TODO: Change to match the R path available in your image
-              version: 4.2.2 # TODO: Change to match the R version available in your image
-        quarto:
-          installations:
-            - path: /opt/quarto/1.3.340/bin/quarto # TODO: Change to match the quarto path available in your image
-              version: 1.3.340 # TODO: Change to match the Quarto version available in your image
-  # Define the custom image(s) for the content pod(s) init container
-  defaultInitContainer:
-    repository: ghcr.io/rstudio/rstudio-connect-content-init # TODO: Change to match your custom image repository
-    tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-    tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/container-images/private-images.html b/examples/connect/container-images/private-images.html deleted file mode 100644 index 709175dc..00000000 --- a/examples/connect/container-images/private-images.html +++ /dev/null @@ -1,1070 +0,0 @@ - - - - - - - - - -Posit Helm Charts – private-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect to Access Image Registries Requiring Authentication

-

This example deploys Posit Connect using custom images in registries requiring authentication instead of the default public Posit provided images.

-

There are a minimum of three images that Connect requires to function in Off-Host Execution mode. They are listed below with their cooresponding default public repositories on ghcr.io

- -

There are several content contents listed as execution enviornments by default on initial Connect startup based on the listing in the default-runtime.yaml file. Setting customRuntimeYaml will instead use the execution environments defined in that section instead of the default ones. Additional content containers may be added to provide more R, Python and Quarto versions and other system dependencies. See the Content Execution Environment section in the Connect Admin Guide for more details.

-

These images can be pulled from your own container registry instead of the public Posit provided images. This example also shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg.

-

The registry credentials secret must be specified in two places in the values to apply to Connect, content and init containers (shown in the example below). Also note the launcher.templateValues.pod.imagePullSecrets provides the pod-level imagePullSecret that provides the secret to pull the launcher.defaultInitContainer as well.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Define the custom image for the Connect pod(s)
-image:
-  repository: ghcr.io/rstudio/rstudio-connect # TODO: Change to match your custom image repository
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-  imagePullSecrets:
-    - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
-
-launcher:
-  enabled: true # Required for Off-Host Execution mode
-  useTemplates: true
-  # Define the custom image(s) for the content pod(s)
-  # Note these are only used on the initial creation of the Connect cluster
-  # with an empty database. Once Connect is running you should add environments
-  # via the UI or Connect API. More information is available in the Admin Guide:
-  # https://docs.posit.co/connect/admin/appendix/off-host/execution-environments
-  templateValues:
-    pod:
-      imagePullSecrets:
-        - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
-  customRuntimeYaml:
-    name: "Kubernetes"
-    images:
-      # TODO: Add custom images based on the below template
-      - name: ghcr.io/rstudio/content-base:r4.2.2-py3.11.3-ubuntu2204 # TODO: Change to match your custom image repository
-        python:
-          installations:
-            -
-              path: /opt/python/3.11.3/bin/python3 # TODO: Change to match the Python path available in your image
-              version: 3.11.3 # TODO: Change to match the Python version available in your image
-        r:
-          installations:
-            -
-              path: /opt/R/4.2.2/bin/R # TODO: Change to match the R path available in your image
-              version: 4.2.2 # TODO: Change to match the R version available in your image
-        quarto:
-          installations:
-            - path: /opt/quarto/1.3.340/bin/quarto # TODO: Change to match the quarto path available in your image
-              version: 1.3.340 # TODO: Change to match the Quarto version available in your image
-  # Define the custom image(s) for the content pod(s) init container
-  defaultInitContainer:
-    repository: ghcr.io/rstudio/rstudio-connect-content-init # TODO: Change to match your custom image repository
-    tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-    tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/index.html b/examples/connect/index.html deleted file mode 100644 index abbd0124..00000000 --- a/examples/connect/index.html +++ /dev/null @@ -1,1088 +0,0 @@ - - - - - - - - - -Posit Helm Charts – Posit Connect Examples - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- -
-
-

Posit Connect Examples

-
- - - -
- - - - -
- - - -
- - -

The examples in this directory provide a starting point for deploying Posit Connect in different configurations.

-

Each example has a beginning description and a series of TODO comments. Before using an example, read through all the comments and ensure you address each TODO.

-

While each example focuses on one or more particular configurations, Posit Connect has some standard requirements listed in each example. Each example will need the following to run correctly:

-
    -
  • PostgreSQL database specified in the Connect configuration
  • -
  • License key or file specified
  • -
  • sharedStorage configured
  • -
- - - - -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/ingress/aws-alb.html b/examples/connect/ingress/aws-alb.html deleted file mode 100644 index 72c57a99..00000000 --- a/examples/connect/ingress/aws-alb.html +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - -Posit Helm Charts – aws-alb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with an AWS ALB Ingress

-

This example deploys Posit Connect with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB).

-

This example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.

-

The AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-

-# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "alb"  # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=86400 # required for session affinity
-    alb.ingress.kubernetes.io/target-type: ip # target-type: ip is required to work with sticky sessions
-    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
-    alb.ingress.kubernetes.io/ssl-redirect: '443'
-    alb.ingress.kubernetes.io/scheme: internet-facing # internet-facing or internal
-    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs
-  hosts:
-    - host: connect.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - connect.example.com # TODO: Change to your domain
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/ingress/azure-gateway.html b/examples/connect/ingress/azure-gateway.html deleted file mode 100644 index 5103ab90..00000000 --- a/examples/connect/ingress/azure-gateway.html +++ /dev/null @@ -1,1034 +0,0 @@ - - - - - - - - - -Posit Helm Charts – azure-gateway - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with an Azure Application Gateway Ingress

-

This example deploys Posit Connect with an Ingress using the Azure Application Gateway Ingress Controller to create an Azure Application Gateway load balancer. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "azure-application-gateway" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    appgw.ingress.kubernetes.io/ssl-redirect: "true"
-    appgw.ingress.kubernetes.io/request-timeout: "60"
-    appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
-    appgw.ingress.kubernetes.io/cookie-based-affinity-distinct-name: "true"
-  hosts:
-    - host: connect.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - connect.example.com # TODO: Change to your domain
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/ingress/gce.html b/examples/connect/ingress/gce.html deleted file mode 100644 index 750332a1..00000000 --- a/examples/connect/ingress/gce.html +++ /dev/null @@ -1,1068 +0,0 @@ - - - - - - - - - -Posit Helm Charts – gce - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with a GKE Ingress

-

This example deploys Posit Connect with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.

-

The GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  annotations:
-    kubernetes.io/ingress.class: gce # TODO: Fill in your desired ingress class for the ingress resource. Note ingress.ingressClassName cannot be used for GKE ingress, it must be supplied as an annotation.
-    kubernetes.io/ingress.global-static-ip-name: connect-static-ip # TODO: Change to your static IP name 
-    networking.gke.io/managed-certificates: connect-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name
-    networking.gke.io/v1beta1.FrontendConfig: connect-frontend-config
-    kubernetes.io/ingress.allow-http: "true" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301
-  hosts:
-    - host: connect.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - connect.example.com # TODO: Change to your domain
-
-service:
-  annotations:
-    cloud.google.com/backend-config: '{"ports": {"http":"connect-backend-config"}}'
-
-extraObjects:
-  # GCE uses custom resources to configure the load balancer/service
-  - apiVersion: networking.gke.io/v1beta1
-    kind: FrontendConfig
-    metadata:
-      name: connect-frontend-config
-    spec:
-      redirectToHttps:
-        enabled: true
-        responseCodeName: MOVED_PERMANENTLY_DEFAULT
-  - apiVersion: cloud.google.com/v1
-    kind: BackendConfig
-    metadata:
-      name: connect-backend-config
-    spec:
-      timeoutSec: 60
-      # Required for session affinity
-      sessionAffinity:
-        affinityType: "GENERATED_COOKIE"  
-        affinityCookieTtlSec: 86400
-  - apiVersion: networking.gke.io/v1
-    kind: ManagedCertificate
-    metadata:
-      name: connect-managed-cert
-    spec:
-      domains:
-        # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object
-        # Please note that wildcard domains are NOT allowed
-        - connect.example.com   
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/ingress/nginx.html b/examples/connect/ingress/nginx.html deleted file mode 100644 index a5a6e8c3..00000000 --- a/examples/connect/ingress/nginx.html +++ /dev/null @@ -1,1047 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nginx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with a NGINX Ingress

-

This example deploys Posit Connect with an Ingress using the Ingress NGINX Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.

-
-
-
- -
-
-Note -
-
-
-

This example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.

-
-
-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "nginx" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    nginx.ingress.kubernetes.io/affinity: cookie
-    nginx.ingress.kubernetes.io/affinity-mode: persistent
-    nginx.ingress.kubernetes.io/session-cookie-name: posit-connect
-    nginx.ingress.kubernetes.io/proxy-body-size: "0"
-  hosts:
-    - host: connect.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.
-    - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - connect.example.com # TODO: Change to your domain
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/ingress/traefik.html b/examples/connect/ingress/traefik.html deleted file mode 100644 index 0bb0657a..00000000 --- a/examples/connect/ingress/traefik.html +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - -Posit Helm Charts – traefik - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with a Traefik Ingress

-

This example deploys Posit Connect with an Ingress using the Traefik Ingress Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "traefik"  # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  hosts:
-    - host: connect.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - connect.example.com # TODO: Change to your domain
-
-service:
-  # Required to set session affinity
-  annotations: 
-    traefik.ingress.kubernetes.io/service.sticky.cookie: "true"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.name: posit-connect
-    traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.samesite: "none"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.httponly: "true"
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/storage/additional-volumes.html b/examples/connect/storage/additional-volumes.html deleted file mode 100644 index 7855334c..00000000 --- a/examples/connect/storage/additional-volumes.html +++ /dev/null @@ -1,1047 +0,0 @@ - - - - - - - - - -Posit Helm Charts – additional-volumes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with additional volumes

-

This example shows how to mount a ConfigMap to the Connect pod and a PVC is mounted to content pods. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.

-

Depending on the need to add additional volumes, you may only need to mount to the Connect service or content pods but not both. For example, if you need to add TLS certificates for Connect via a ConfigMap then the content pods do not need the ConfigMap mounted.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# This section is used to mount to the Connect container which is
-# often used to add in additional configuration and TLS certificates
-# which are not needed in the content containers.
-pod:
-  volumeMounts:
-  - mountPath: /etc/connect-certs # TODO: Change to your desired mount path
-    name: ldap-certificate # TODO: Change to match the volume name below
-  volumes:
-  - name: ldap-certificate # TODO: Change to match the volumeMounts name above
-    # Can be any type of volume... persistentVolumeClaim, configMap, etc.
-    # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired
-    configMap:
-      name: connect-ldap-certificate # TODO: Change to match your ConfigMap name
-
-# This section is only needed if you need to mount to the content containers
-# which is often the case if you need to mount data for content to access
-launcher:
-  useTemplates: true # Required to mount the content pods
-  templateValues:
-    pod:
-      volumeMounts:
-      - mountPath: /mnt/data # TODO: Change to your desired mount path
-        name: shared-data # TODO: Ensure matches the name specified in volumes below
-      volumes:
-      - name: shared-data # TODO: Ensure matches the name specified in volumeMounts above
-        # Can be any type of volume... persistentVolumeClaim, configMap, etc.
-        # Can also provision a PVC or PV via `extraObjects` if desired
-        persistentVolumeClaim:
-          claimName: shared-data-pvc # TODO: Change to an available PVC name
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/connect/storage/nfs-pv.html b/examples/connect/storage/nfs-pv.html deleted file mode 100644 index 268b7f9f..00000000 --- a/examples/connect/storage/nfs-pv.html +++ /dev/null @@ -1,1043 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nfs-pv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Connect with an NFS-backed PersistentVolume

-

This example deploys Posit Connect with a single PersistentVolume backed by an NFS server.

-

The PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Connect then takes advantage of when it creates its PersistentVolumeClaim.

-

Both the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a ReadWriteMany POSIX compliant storage class for sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: connect.lic # TODO: Change to the secret key containing your Connect license
-
-# Configures Connect shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: "nfs-connect-sharedstorage-pv" # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.
-  requests:
-    storage: 100G
-
-# This is evaluated as a template
-# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup
-extraObjects:
-  - |
-    apiVersion: v1
-    kind: PersistentVolume
-    metadata:
-      name: nfs-connect-sharedstorage-pv
-      annotations:
-        "helm.sh/resource-policy": keep
-    spec:
-      capacity:
-        storage: {{ .Values.sharedStorage.requests.storage }}
-      volumeMode: Filesystem
-      accessModes:
-        - ReadWriteMany
-      persistentVolumeReclaimPolicy: Retain
-      storageClassName: nfs-connect-sharedstorage-pv
-      mountOptions:
-        - rw
-        - lookupcache=pos
-        - vers=4
-      nfs:
-        path: /
-        server: nfs.server.example.com
-
-# The config section overwrites values in Posit Connect's main
-# .gcfg configuration file.
-config:
-  # Configures the Postgres connection for Posit Connect.
-  Database:
-    Provider: "Postgres"
-  Postgres:
-    # The URL syntax below is to utilize a PostgreSQL database installed
-    # in the cluster as described in the Kubernetes Cluster Preparation
-    # page of this guide. Change this URL if your PostgreSQL database is
-    # setup externally or in a different location.
-    URL: "postgres://connect@postgres.example.com:5432/connect?sslmode=disable"
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/container-images/custom-images.html b/examples/package-manager/container-images/custom-images.html deleted file mode 100644 index 3c3865fe..00000000 --- a/examples/package-manager/container-images/custom-images.html +++ /dev/null @@ -1,1025 +0,0 @@ - - - - - - - - - -Posit Helm Charts – custom-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with Custom Container Images

-

This example deploys Posit Package Manager using a custom image instead of the default public Posit provided image.

-

The Package Manager image may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images.

-

The default public images are on Docker Hub:

-

Package Manager: rstudio/rstudio-package-manager

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-image:
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  repository: "rstudio/rstudio-package-manager" # TODO: Change to match your custom image repository
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/container-images/private-images.html b/examples/package-manager/container-images/private-images.html deleted file mode 100644 index cbfa92b3..00000000 --- a/examples/package-manager/container-images/private-images.html +++ /dev/null @@ -1,1027 +0,0 @@ - - - - - - - - - -Posit Helm Charts – private-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager to Access Image Registries Requiring Authentication

-

This example deploys RStudio Package Manager using custom images in registries requiring authentication instead of the default public Posit provided images.

-

The image can be pulled from your own container registry instead of the public Posit provided image. This example shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg

-

The default public images are on Docker Hub:

-

Package Manager: rstudio/rstudio-package-manager

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-image:
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  repository: "rstudio/rstudio-package-manager" # TODO: Change to match your custom image repository
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-  imagePullSecrets:
-    - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/index.html b/examples/package-manager/index.html deleted file mode 100644 index 096e25e6..00000000 --- a/examples/package-manager/index.html +++ /dev/null @@ -1,1065 +0,0 @@ - - - - - - - - - -Posit Helm Charts – Posit Package Manager Examples - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- -
-
-

Posit Package Manager Examples

-
- - - -
- - - - -
- - - -
- - -

The examples in this directory provide a starting point for deploying Posit Package Manager in different configurations.

-

Each example has a beginning description and a series of TODO comments. Before using an example, read through all the comments and ensure you address each TODO.

-

While each example focuses on one or more particular configurations, Posit Package Manager has some standard requirements listed in each example.

-

Each example will need the following to run correctly:

-
    -
  • PostgreSQL database specified in the Package Manager configuration
  • -
  • License key or file specified
  • -
  • sharedStorage or S3Storage configured
  • -
- - - - -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/ingress/aws-alb.html b/examples/package-manager/ingress/aws-alb.html deleted file mode 100644 index 2ca0bd00..00000000 --- a/examples/package-manager/ingress/aws-alb.html +++ /dev/null @@ -1,1036 +0,0 @@ - - - - - - - - - -Posit Helm Charts – aws-alb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with an AWS ALB Ingress

-

This example deploys Posit Package Manager with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB). This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.

-

The AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "alb"  # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    alb.ingress.kubernetes.io/target-type: ip
-    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
-    alb.ingress.kubernetes.io/ssl-redirect: '443'
-    alb.ingress.kubernetes.io/scheme: internet-facing # internet-facing or internal
-    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs
-  hosts:
-    - host: packagemanager.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - packagemanager.example.com # TODO: Change to your domain
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/ingress/azure-gateway.html b/examples/package-manager/ingress/azure-gateway.html deleted file mode 100644 index fa706ddd..00000000 --- a/examples/package-manager/ingress/azure-gateway.html +++ /dev/null @@ -1,1032 +0,0 @@ - - - - - - - - - -Posit Helm Charts – azure-gateway - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with an Azure Application Gateway

-

This example deploys Posit Package Manager with an Ingress using the Azure Application Gateway Ingress Controller to create a Azure Application Gateway load balancer. This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS.

-

The Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "azure-application-gateway" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    appgw.ingress.kubernetes.io/ssl-redirect: "true"
-  hosts:
-    - host: packagemanager.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - packagemanager.example.com # TODO: Change to your domain
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/ingress/gce.html b/examples/package-manager/ingress/gce.html deleted file mode 100644 index 59129a02..00000000 --- a/examples/package-manager/ingress/gce.html +++ /dev/null @@ -1,1054 +0,0 @@ - - - - - - - - - -Posit Helm Charts – gce - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with a GCE Ingress

-

This example deploys Posit Package Manager with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.

-

The GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  annotations:
-    kubernetes.io/ingress.class: gce # TODO: Fill in your desired ingress class for the ingress resource. Note ingress.ingressClassName cannot be used for GKE ingress, it must be supplied as an annotation.
-    kubernetes.io/ingress.global-static-ip-name: packagemanager-static-ip # TODO: Change to your static IP name 
-    networking.gke.io/managed-certificates: packagemanager-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name (added in extraObjects below)
-    networking.gke.io/v1beta1.FrontendConfig: packagemanager-frontend-config # TODO: Change to match the name of the FrontendConfig defined in extraObjects
-    kubernetes.io/ingress.allow-http: "true" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301
-  hosts:
-    - host: packagemanager.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - packagemanager.example.com # TODO: Change to your domain
-
-extraObjects:
-  - apiVersion: networking.gke.io/v1beta1
-    kind: FrontendConfig
-    metadata:
-      name: packagemanager-frontend-config
-    spec:
-      redirectToHttps:
-        enabled: true
-        responseCodeName: MOVED_PERMANENTLY_DEFAULT
-  - apiVersion: networking.gke.io/v1
-    kind: ManagedCertificate
-    metadata:
-      name: packagemanager-managed-cert
-    spec:
-      domains:
-        # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object
-        # Please note that wildcard domains are NOT allowed
-        - packagemanager.example.com   
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/ingress/nginx.html b/examples/package-manager/ingress/nginx.html deleted file mode 100644 index 10199253..00000000 --- a/examples/package-manager/ingress/nginx.html +++ /dev/null @@ -1,1043 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nginx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with a NGINX Ingress

-

This example deploys Posit Package Manager with an Ingress using the Ingress NGINX Controller.

-

The Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.

-
-
-
- -
-
-Note -
-
-
-

This example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.

-
-
-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "nginx"  # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  hosts:
-    - host: packagemanager.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - packagemanager.example.com # TODO: Change to your domain
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/ingress/traefik.html b/examples/package-manager/ingress/traefik.html deleted file mode 100644 index c0d29c09..00000000 --- a/examples/package-manager/ingress/traefik.html +++ /dev/null @@ -1,1030 +0,0 @@ - - - - - - - - - -Posit Helm Charts – traefik - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with a Traefik Ingress

-

This example deploys Posit Package Manager with an Ingress using the Traefik Ingress Controller.

-

The Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-ingress:
-  enabled: true
-  ingressClassName: "traefik"  # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  hosts:
-    - host: packagemanager.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are supplying a certificate/key secret.
-    - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - packagemanager.example.com # TODO: Change to your domain
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/storage/additional-volumes.html b/examples/package-manager/storage/additional-volumes.html deleted file mode 100644 index 251bfc79..00000000 --- a/examples/package-manager/storage/additional-volumes.html +++ /dev/null @@ -1,1030 +0,0 @@ - - - - - - - - - -Posit Helm Charts – additional-volumes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with additional volumes

-

This example shows how to mount a ConfigMap to the Package Manager pod. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-# Configures Package Manager shared storage
-# This should NOT be set if using S3 for storage
-# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# This section is used to mount to the Package Manager container which is
-# often used to add in additional configuration and TLS certificates
-pod:
-  volumeMounts:
-  - mountPath: /etc/pm-certs # TODO: Change to your desired mount path
-    name: ldap-certificate # TODO: Change to match the volume name below
-  volumes:
-  - name: ldap-certificate # TODO: Change to match the volumeMounts name above
-    # Can be any type of volume... persistentVolumeClaim, configMap, etc.
-    # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired
-    configMap:
-      name: pm-ldap-certificate # TODO: Change to match your ConfigMap name
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/storage/nfs-pv.html b/examples/package-manager/storage/nfs-pv.html deleted file mode 100644 index 653df1ff..00000000 --- a/examples/package-manager/storage/nfs-pv.html +++ /dev/null @@ -1,1042 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nfs-pv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with an NFS-backed PersistentVolume

-

This example deploys Posit Package Manager with a single PersistentVolume backed by an NFS server.

-

The PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Package Manager then takes advantage of when it creates its PersistentVolumeClaim.

-

Both the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Workbench license
-
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-pm-sharedstorage-pv # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.
-  # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# This is evaluated as a template
-# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup
-extraObjects:
-  - |
-    apiVersion: v1
-    kind: PersistentVolume
-    metadata:
-      name: nfs-pm-sharedstorage-pv
-      annotations:
-        "helm.sh/resource-policy": keep
-    spec:
-      capacity:
-        storage: {{ .Values.sharedStorage.requests.storage }}
-      volumeMode: Filesystem
-      accessModes:
-        - ReadWriteMany
-      persistentVolumeReclaimPolicy: Retain
-      storageClassName: nfs-pm-sharedstorage-pv
-      mountOptions:
-        - rw
-        - lookupcache=pos
-        - vers=4
-      nfs:
-        path: /
-        server: nfs.server.example.com
-
-config:
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/package-manager/storage/s3.html b/examples/package-manager/storage/s3.html deleted file mode 100644 index 6c33a12e..00000000 --- a/examples/package-manager/storage/s3.html +++ /dev/null @@ -1,1017 +0,0 @@ - - - - - - - - - -Posit Helm Charts – s3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Package Manager with S3

-

This example deploys Posit Package Manager using S3 instead of using sharedStorage with a PersistentVolume and PersistentVolumeClaim.

-

To use this example you will need:

-
    -
  • a license file or key
  • -
  • a PostgreSQL database
  • -
  • either -
      -
    • a ReadWriteMany POSIX compliant storage class for sharedStorage
    • -
    • S3
    • -
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license
-
-serviceAccount:
-  annotations:
-    # Specify your specific IAM role below
-    # https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html
-    eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here # TODO: Change to your IAM role ARN
-
-config:
-  Storage:
-    Default: s3
-  S3Storage:
-    Bucket: bucket-name-here # TODO: Change to your bucket name
-    Region: us-east-1 # TODO: Change to your region
-  Database:
-    Provider: postgres
-  Postgres:
-    URL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database.
-    Password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-    UsageDataURL: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.
-    UsageDataPassword: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/rbac/README.html b/examples/rbac/README.html deleted file mode 100644 index b1e3a2d5..00000000 --- a/examples/rbac/README.html +++ /dev/null @@ -1,963 +0,0 @@ - - - - - - - - - -Posit Helm Charts – readme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

RBAC yaml examples

-

The RBAC associated with the RStudio Job Launcher is maintained in the rstudio-library and rstudio-launcher-rbac helm charts.

-

However, it is also maintained here in this directory by CI for ease of use. In order to generate these files from the chart, you can use:

-
helm repo add rstudio https://helm.rstudio.com
-helm template -n rstudio rstudio-launcher-rbac rstudio/rstudio-launcher-rbac
-
-

NOTE: the rstudio-workbench and rstudio-connect helm charts also use the rstudio-library chart to deploy their own RBAC

-
-
-

Important Note

-

The rbac currently contains a ClusterRoleBinding, which requires a namespace reference.

-

As a result, even though we use --removeNamespaceReferences=true, the namespace persists on the ClusterRoleBiding. We use the rstudio namespace by default.

-

Please modify the namespace as needed for your installation.

-
-
-
-

Usage

-

If you are using the rstudio namespace (our default), then you can use either the “latest” RBAC directly:

-
kubectl apply -f https://raw.githubusercontent.com/rstudio/helm/main/examples/rbac/rstudio-launcher-rbac.yaml
-

Or you can use a particular version (versioned with the rstudio-launcher-rbac helm chart):

-
kubectl apply -f https://raw.githubusercontent.com/rstudio/helm/main/examples/rbac/rstudio-launcher-rbac-0.2.2.yaml
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/application-configuration/index.html b/examples/workbench/application-configuration/index.html deleted file mode 100644 index f045f73e..00000000 --- a/examples/workbench/application-configuration/index.html +++ /dev/null @@ -1,1074 +0,0 @@ - - - - - - - - - -Posit Helm Charts – index - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - - - -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/auth-user-provisioning/oidc.html b/examples/workbench/auth-user-provisioning/oidc.html deleted file mode 100644 index 3c97d006..00000000 --- a/examples/workbench/auth-user-provisioning/oidc.html +++ /dev/null @@ -1,1063 +0,0 @@ - - - - - - - - - -Posit Helm Charts – oidc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with OpenID Connect

-

This example deploys Posit Workbench using OpenID Connect (OIDC) SSO for authentication and sssd for user provisioning.

-

Users will be authenticated via SSO (using OIDC) and Workbench will match a claim (preferred_username by default) to a Linux user account in the Workbench container. sssd is already running in the Workbench container and can be used to automatically provision local user accounts using LDAP or Active Directory.

-

See the OpenID Connect Authentication section of the Workbench Admin Guide for more details.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-config:
-  server:
-    rserver.conf:
-      auth-openid: 1
-      auth-openid-issuer: https://login.example.com # TODO: Change to match your IdP
-      auth-openid-username-claim: preferred_username # TODO: Verify this works with your IdP. This claim must match the Linux account usernames.
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-    openid-client-secret:
-      client-id: lllllllllllll-xxxxxxxxxxxxxxxxxxxxxx # TODO: Change to your client-id
-      client-secret: BhCC6rK7Sj2ZtPH0ord7lO1w # TODO: Change to your client-secret
-  # TODO: Fill out the details of sssd.conf for your specific AD/LDAP setup. sssd is already present in the Workbench image.
-  userProvisioning:
-    example.com.conf:
-      sssd:
-        config_file_version: 2
-        services: nss, pam
-        domains: example.com
-      domain/example.com:
-        debug_level: 6
-        id_provider: ldap
-        auth_provider: ldap
-        chpass_provider: none
-        sudo_provider: none
-        access_provider: ldap
-        enumerate: true
-        cache_credentials: false
-        ldap_schema: rfc2307bis
-        ldap_uri: ldaps://ldap.example.com
-        ldap_search_base: ou=users,dc=example,dc=com
-        ldap_user_search_base: ou=users,dc=example,dc=com
-        ldap_user_object_class: inetOrgPerson
-        ldap_user_name: username
-        override_homedir: /mnt/home/%u
-        ldap_group_search_base: ou=roles,dc=example,dc=com
-        ldap_group_name: cn
-        ldap_id_use_start_tls: true
-        ldap_tls_reqcert: never
-        ldap_tls_cacert: /etc/ssl/certs/ca-certificates.crt
-        ldap_default_bind_dn: cn=bind-account,ou=users,dc=example,dc=com
-        ldap_default_authtok: placeholder
-        ldap_access_filter: (objectClass=inetOrgPerson)
-        default_shell: /bin/bash
-        ldap_access_order: filter
-        ldap_user_uid_number: uidNumber
-        ldap_user_gid_number: gidNumber
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/auth-user-provisioning/saml.html b/examples/workbench/auth-user-provisioning/saml.html deleted file mode 100644 index 5e70514c..00000000 --- a/examples/workbench/auth-user-provisioning/saml.html +++ /dev/null @@ -1,1062 +0,0 @@ - - - - - - - - - -Posit Helm Charts – saml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with SAML

-

This example deploys Posit Workbench using SAML SSO for authentication and sssd for user provisioning.

-

Users will be authenticated via SSO (using SAML) and Workbench will match an attribute (Username by default) to a Linux user account in the Workbench container. sssd is already running in the Workbench container and can be used to automatically provision local user accounts using LDAP or Active Directory.

-

See the SAML Single Sign-On Authentication section of the Workbench Admin Guide for more details.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-  server:
-    rserver.conf:
-      auth-saml: 1
-      auth-saml-sp-attribute-username: Username # TODO: Verify this works with your IdP. This attribute must match the Linux account usernames.
-      auth-saml-metadata-url: https://idp.example.com/saml/metadata # TODO: Change to match your IdP
-      # auth-saml-idp-post-binding is set to 0 by default but some IdPs require it be set to 1 (see below):
-      # auth-saml-idp-post-binding: 1
-  # TODO: Fill out the details of sssd.conf for your specific AD/LDAP setup. sssd is already present in the Workbench image.
-  userProvisioning:
-    example.com.conf:
-      sssd:
-        config_file_version: 2
-        services: nss, pam
-        domains: example.com
-      domain/example.com:
-        debug_level: 6
-        id_provider: ldap
-        auth_provider: ldap
-        chpass_provider: none
-        sudo_provider: none
-        access_provider: ldap
-        enumerate: true
-        cache_credentials: false
-        ldap_schema: rfc2307bis
-        ldap_uri: ldaps://ldap.example.com
-        ldap_search_base: ou=users,dc=example,dc=com
-        ldap_user_search_base: ou=users,dc=example,dc=com
-        ldap_user_object_class: inetOrgPerson
-        ldap_user_name: username
-        override_homedir: /mnt/home/%u
-        ldap_group_search_base: ou=roles,dc=example,dc=com
-        ldap_group_name: cn
-        ldap_id_use_start_tls: true
-        ldap_tls_reqcert: never
-        ldap_tls_cacert: /etc/ssl/certs/ca-certificates.crt
-        ldap_default_bind_dn: cn=bind-account,ou=users,dc=example,dc=com
-        ldap_default_authtok: placeholder
-        ldap_access_filter: (objectClass=inetOrgPerson)
-        default_shell: /bin/bash
-        ldap_access_order: filter
-        ldap_user_uid_number: uidNumber
-        ldap_user_gid_number: gidNumber
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/container-images/custom-images.html b/examples/workbench/container-images/custom-images.html deleted file mode 100644 index 22e9be78..00000000 --- a/examples/workbench/container-images/custom-images.html +++ /dev/null @@ -1,1032 +0,0 @@ - - - - - - - - - -Posit Helm Charts – custom-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with Custom Container Images

-

This example deploys Posit Workbench using custom images instead of the default public Posit provided images.

-

Both the Workbench service and session container images may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images.

-

The default public images are on Docker Hub:

-

Workbench service: rstudio/rstudio-workbench Workbench sessions: rstudio/r-session-complete

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-image:
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  repository: "rstudio/rstudio-workbench" # TODO: Change to match your custom image repository
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-session:
-  image:
-    tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-    repository: "rstudio/r-session-complete" # TODO: Change to match your custom image repository
-    tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/container-images/private-images.html b/examples/workbench/container-images/private-images.html deleted file mode 100644 index 1498e584..00000000 --- a/examples/workbench/container-images/private-images.html +++ /dev/null @@ -1,1041 +0,0 @@ - - - - - - - - - -Posit Helm Charts – private-images - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench to Access Image Registries Requiring Authentication

-

This example deploys Posit Workbench using custom images in registries requiring authentication instead of the default public Posit provided images.

-

Both the Workbench service and session container images may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images. This example also shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg.

-

Note the registry credentials secret must be specified in two places in the values to apply to Workbench and session containers (shown in the example below).

-

The default public images are on Docker Hub:

-

Workbench service: rstudio/rstudio-workbench Workbench sessions: rstudio/r-session-complete

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-image:
-  tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-  repository: "rstudio/rstudio-workbench" # TODO: Change to match your custom image repository
-  tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-  imagePullSecrets:
-  - name: private-registry-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
-
-session:
-  image:
-    tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix
-    repository: "rstudio/r-session-complete" # TODO: Change to match your custom image repository
-    tag: "" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.
-
-launcher:
-  useTemplates: true # Required to set `imagePullSecrets` for `session.image`
-  templateValues:
-    imagePullSecrets:
-    - name: private-registry-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/index.html b/examples/workbench/index.html deleted file mode 100644 index 31a13fc1..00000000 --- a/examples/workbench/index.html +++ /dev/null @@ -1,1082 +0,0 @@ - - - - - - - - - -Posit Helm Charts – Posit Workbench Examples - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- -
-
-

Posit Workbench Examples

-
- - - -
- - - - -
- - - -
- - -

The examples in this directory provide a starting point for deploying Posit Workbench in different configurations. Each example has a beginning description and a series of TODO comments.

-

Before using an example, read through all the comments and ensure you address each TODO.

-

While each example focuses on one or more particular configurations, RStudio Workbench has some standard requirements listed in each example.

-

Each example needs the following to run correctly:

-
    -
  • PostgreSQL database specified in the Workbench configuration
  • -
  • License key or file specified
  • -
  • homeStorage configured
  • -
  • sharedStorage configured
  • -
- - - - -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/ingress/aws-alb.html b/examples/workbench/ingress/aws-alb.html deleted file mode 100644 index 705f0e34..00000000 --- a/examples/workbench/ingress/aws-alb.html +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - -Posit Helm Charts – aws-alb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with an AWS ALB Ingress

-

This example deploys Posit Workbench with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB). This example is provided to show how to set annotations to enable session affinity, redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.

-

The AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-ingress:
-  enabled: true
-  ingressClassName: "alb" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=86400
-    alb.ingress.kubernetes.io/target-type: ip # target-type: ip is required to work with sticky sessions
-    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
-    alb.ingress.kubernetes.io/ssl-redirect: '443'
-    alb.ingress.kubernetes.io/scheme: internet-facing # TODO: Set to internet-facing or internal
-    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs
-  hosts:
-    - host: workbench.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using AWS Certificate Manager, cert-manager, or another automatic TLS certificate manager.
-    - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - workbench.example.com # TODO: Change to your domain
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/ingress/azure-gateway.html b/examples/workbench/ingress/azure-gateway.html deleted file mode 100644 index c32c8b80..00000000 --- a/examples/workbench/ingress/azure-gateway.html +++ /dev/null @@ -1,1036 +0,0 @@ - - - - - - - - - -Posit Helm Charts – azure-gateway - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with an Azure Application Gateway Ingress

-

This example deploys Posit Workbench with an Ingress using the Azure Application Gateway Ingress Controller to create an Azure Application Gateway load balancer. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-ingress:
-  enabled: true
-  ingressClassName: "azure-application-gateway" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    appgw.ingress.kubernetes.io/ssl-redirect: "true"
-    appgw.ingress.kubernetes.io/request-timeout: "60"
-    appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
-    appgw.ingress.kubernetes.io/cookie-based-affinity-distinct-name: "true"
-  hosts:
-    - host: workbench.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.
-    - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - workbench.example.com # TODO: Change to your domain
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/ingress/gce.html b/examples/workbench/ingress/gce.html deleted file mode 100644 index 5b52f72a..00000000 --- a/examples/workbench/ingress/gce.html +++ /dev/null @@ -1,1077 +0,0 @@ - - - - - - - - - -Posit Helm Charts – gce - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with a GKE Ingress

-

This example deploys Posit Workbench with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.

-

The GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-ingress:
-  enabled: true
-  annotations:
-    kubernetes.io/ingress.class: gce # Note ingress.ingressClassName cannot be used for gce, it must be supplied as an annotation.
-    kubernetes.io/ingress.global-static-ip-name: workbench-static-ip # TODO: Change to your static IP name 
-    networking.gke.io/managed-certificates: workbench-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name (example created in extraObjects below)
-    networking.gke.io/v1beta1.FrontendConfig: workbench-frontend-config
-    kubernetes.io/ingress.allow-http: "true" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301
-  hosts:
-    - host: workbench.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager, GCP Certificage Manager, or another automatic TLS certificate manager.
-    - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - workbench.example.com # TODO: Change to your domain
-
-service:
-  annotations:
-    cloud.google.com/backend-config: '{"ports": {"http":"workbench-backend-config"}}'
-
-# GCE uses custom resources to configure the load balancer/service
-extraObjects:
-  - apiVersion: networking.gke.io/v1beta1
-    kind: FrontendConfig
-    metadata:
-      name: workbench-frontend-config
-    spec:
-      redirectToHttps:
-        enabled: true
-        responseCodeName: MOVED_PERMANENTLY_DEFAULT
-  - apiVersion: cloud.google.com/v1
-    kind: BackendConfig
-    metadata:
-      name: workbench-backend-config
-    spec:
-      timeoutSec: 60
-      sessionAffinity:
-        affinityType: "GENERATED_COOKIE"  
-        affinityCookieTtlSec: 86400
-      healthCheck:
-        checkIntervalSec: 15
-        timeoutSec: 5
-        healthyThreshold: 1
-        unhealthyThreshold: 3
-        type: HTTP
-        requestPath: "/health-check"
-        port: 8787
-  - apiVersion: networking.gke.io/v1
-    kind: ManagedCertificate
-    metadata:
-      name: workbench-managed-cert
-    spec:
-      domains:
-        # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object
-        # Please note that wildcard domains are NOT allowed
-        - workbench.example.com   
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/ingress/nginx.html b/examples/workbench/ingress/nginx.html deleted file mode 100644 index 530cedcf..00000000 --- a/examples/workbench/ingress/nginx.html +++ /dev/null @@ -1,1048 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nginx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with a NGINX Ingress

-

This example deploys Posit Workbench with an Ingress using the Ingress NGINX Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.

-
-
-
- -
-
-Note -
-
-
-

This example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.

-
-
-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-ingress:
-  enabled: true
-  ingressClassName: "nginx" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  annotations:
-    nginx.ingress.kubernetes.io/affinity: cookie
-    nginx.ingress.kubernetes.io/affinity-mode: persistent
-    nginx.ingress.kubernetes.io/session-cookie-name: posit-workbench
-  hosts:
-    - host: workbench.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.
-    - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - workbench.example.com # TODO: Change to your domain
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/ingress/traefik.html b/examples/workbench/ingress/traefik.html deleted file mode 100644 index 24b11758..00000000 --- a/examples/workbench/ingress/traefik.html +++ /dev/null @@ -1,1039 +0,0 @@ - - - - - - - - - -Posit Helm Charts – traefik - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with a Traefik Ingress

-

This example deploys Posit Workbench with an Ingress using the Traefik Ingress Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.

-

The Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-ingress:
-  enabled: true
-  ingressClassName: "traefik" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.
-  hosts:
-    - host: workbench.example.com # TODO: Change to your domain
-      paths: 
-        - "/" # TODO: Change to your desired path
-  tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.
-    - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls
-      hosts:
-        - workbench.example.com # TODO: Change to your domain
-
-service:
-  annotations:
-    traefik.ingress.kubernetes.io/service.sticky.cookie: "true"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.name: posit-workbench
-    traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.samesite: "none"
-    traefik.ingress.kubernetes.io/service.sticky.cookie.httponly: "true"
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/storage/additional-volumes.html b/examples/workbench/storage/additional-volumes.html deleted file mode 100644 index 855aefed..00000000 --- a/examples/workbench/storage/additional-volumes.html +++ /dev/null @@ -1,1050 +0,0 @@ - - - - - - - - - -Posit Helm Charts – additional-volumes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with additional volumes

-

This example shows how to mount a ConfigMap to the Workbench pod and a PVC is mounted to session pods. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.

-

Depending on the need to add additional volumes, you may only need to mount to the Workbench service or session pods but not both. For example, if you need to add TLS certificates for Workbench via a ConfigMap then the session pods do not need the ConfigMap mounted.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-# Configures user home directory shared storage
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 100G
-
-# Configures Workbench shared storage
-sharedStorage:
-  create: true
-  mount: true
-  storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster
-  # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.
-  requests:
-    storage: 1G
-
-# This section is used to mount to the Workbench container which is
-# often used to add in additional configuration and TLS certificates
-# which are not needed in the session containers.
-pod:
-  volumeMounts:
-  - mountPath: /etc/workbench-certs # TODO: Change to your desired mount path
-    name: ldap-certificate # TODO: Change to match the volume name below
-  volumes:
-  - name: ldap-certificate # TODO: Change to match the volumeMounts name above
-    # Can be any type of volume... persistentVolumeClaim, configMap, etc.
-    # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired
-    configMap:
-      name: workbench-ldap-certificate # TODO: Change to match your ConfigMap name
-
-# This section is only needed if you need to mount to the session containers
-# which is often the case if you need to mount data for users to access
-# in their IDE sessions.
-launcher:
-  useTemplates: true # Required to mount the session pods
-  templateValues:
-    pod:
-      volumeMounts:
-      - mountPath: /mnt/data # TODO: Change to your desired mount path
-        name: shared-data # TODO: Ensure matches the name specified in volumes below
-      volumes:
-      - name: shared-data # TODO: Ensure matches the name specified in volumeMounts above
-        # Can be any type of volume... persistentVolumeClaim, configMap, etc.
-        # Can also provision a PVC or PV via `extraObjects` if desired
-        persistentVolumeClaim:
-          claimName: shared-data-pvc # TODO: Change to an available PVC name
-
-config:
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/examples/workbench/storage/nfs-pv.html b/examples/workbench/storage/nfs-pv.html deleted file mode 100644 index f76c9759..00000000 --- a/examples/workbench/storage/nfs-pv.html +++ /dev/null @@ -1,1039 +0,0 @@ - - - - - - - - - -Posit Helm Charts – nfs-pv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- - - - -
-

Configuring Posit Workbench with an NFS-backed PersistentVolume

-

This example deploys Posit Workbench with a single PersistentVolume backed by an NFS server.

-

The PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Workbench then takes advantage of when it creates its PersistentVolumeClaim.

-

sharedStorage is not needed in this example as config.server.rserver.conf.server-shared-storage-path is set to put the required shared storage folder in /home

-

Both the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.

-

To use the example you will need:

-
    -
  • a license file or key
  • -
  • ReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage
  • -
  • a PostgreSQL database.
  • -
-
-
-
values.yaml
-
-
# Using a license file with the helm chart:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file
-# If you would like to use a license key see this documentation:
-# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key
-license:
-  file:
-    secret: posit-licenses # TODO: Change to the secret name in your cluster
-    secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license
-
-homeStorage:
-  create: true
-  mount: true
-  storageClassName: "nfs-workbench-home-pv" # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.
-  requests:
-    storage: 100G
-
-# This is evaluated as a template
-# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup
-extraObjects:
-  - |
-    apiVersion: v1
-    kind: PersistentVolume
-    metadata:
-      name: nfs-workbench-home-pv
-      annotations:
-        "helm.sh/resource-policy": keep
-    spec:
-      capacity:
-        storage: {{ .Values.homeStorage.requests.storage }}
-      volumeMode: Filesystem
-      accessModes:
-        - ReadWriteMany
-      persistentVolumeReclaimPolicy: Retain
-      storageClassName: nfs-workbench-home-pv
-      mountOptions:
-        - rw
-        - lookupcache=pos
-        - vers=4
-      nfs:
-        path: /
-        server: nfs.server.example.com
-
-config:
-  server:
-    rserver.conf:
-      server-shared-storage-path: /home/rstudio-shared-storage/
-  secret:
-    database.conf:
-      provider: "postgresql"
-      connection-uri: "postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require" # TODO: Change this URI to reach your Postgres database.
-      password: "<PASSWORD>" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\.conf.password=<your-postgres-password>.
-
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/images/posit-guide-ltmd.svg b/images/posit-guide-ltmd.svg deleted file mode 100644 index f2c33c23..00000000 --- a/images/posit-guide-ltmd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/posit-icon-fullcolor.svg b/images/posit-icon-fullcolor.svg deleted file mode 100644 index ec7f5525..00000000 --- a/images/posit-icon-fullcolor.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/index.html b/index.html deleted file mode 100644 index 3b0606d2..00000000 --- a/index.html +++ /dev/null @@ -1,997 +0,0 @@ - - - - - - - - - -Posit Helm Charts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - -
- - - -
- -
-
-

Posit Helm Charts

-
- - - -
- - - - -
- - - -
- - -

Artifact Hub GitHub license

-
-

Usage

-
    -
  1. Install Helm. Please refer to the Helm documentation for more information on getting started.

  2. -
  3. Add the Posit Helm repository:

    -
    helm repo add rstudio https://helm.rstudio.com
  4. -
  5. View charts:

    -
    helm search repo rstudio
  6. -
- - -
- -
- -
- - - - - - \ No newline at end of file diff --git a/index.yaml b/index.yaml new file mode 100644 index 00000000..8f4d4254 --- /dev/null +++ b/index.yaml @@ -0,0 +1,11822 @@ +apiVersion: v1 +entries: + posit-chronicle: + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: Posit Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2024.03.0 + created: "2024-04-18T12:36:17.943571451Z" + description: Official Helm chart for Posit Chronicle Server + digest: 6bf1a11d545a76d37ea8ef578e8ed26de9322a02026a09f249b3bb52c45593b5 + home: https://www.posit.co + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - posit + - chronicle + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: posit-chronicle + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/posit-chronicle-0.3.0/posit-chronicle-0.3.0.tgz + version: 0.3.0 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: Posit Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.11.3 + created: "2024-04-02T13:27:00.79452639Z" + description: Official Helm chart for Posit Chronicle Server + digest: e6477ea5ff40077667c254a92dbce59543b22fbb1772612f1f764a0bb61eaa66 + home: https://www.posit.co + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - posit + - chronicle + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: posit-chronicle + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/posit-chronicle-0.2.2/posit-chronicle-0.2.2.tgz + version: 0.2.2 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: Posit Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.11.3 + created: "2024-02-13T19:24:58.41565358Z" + description: Official Helm chart for Posit Chronicle Server + digest: d207ad421767821db6d2dc4e0e023ac3233f25b10146805007b8961738e07595 + home: https://www.posit.co + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - posit + - chronicle + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: posit-chronicle + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/posit-chronicle-0.2.1/posit-chronicle-0.2.1.tgz + version: 0.2.1 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: Posit Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.11.3 + created: "2023-12-06T17:14:27.552501177Z" + description: Official Helm chart for Posit Chronicle Server + digest: 4c81f05af80fcf94f4f29841cd778695ed2de302f732b7f1bbf27af3d321d53f + home: https://www.posit.co + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - posit + - chronicle + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: posit-chronicle + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/posit-chronicle-0.2.0/posit-chronicle-0.2.0.tgz + version: 0.2.0 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: Posit Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.11.3 + created: "2023-11-29T21:52:15.532836804Z" + description: Official Helm chart for Posit Chronicle Server + digest: f44fa941aad964335c3891115bb0949e44dc2f8a9862ea4de5a68ead52ad7846 + home: https://www.posit.co + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - posit + - chronicle + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: posit-chronicle + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/posit-chronicle-0.1.0/posit-chronicle-0.1.0.tgz + version: 0.1.0 + prepull-daemonset: + - annotations: + artifacthub.io/images: | + - name: ubuntu + image: ubuntu:bionic + - name: pause + image: gcr.io/google_containers/pause + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + apiVersion: v2 + created: "2022-02-18T19:00:35.520460034Z" + description: a daemonset to prepull images so they are cached + digest: c6881a5443c2a7ef3a0838a3d7a7e77b23722b738f98bfb895d4289007aa8599 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - prepull + - bootstrap + - image-cache + - auto-scaling + - startup + - container + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: prepull-daemonset + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/prepull-daemonset-0.0.2/prepull-daemonset-0.0.2.tgz + version: 0.0.2 + rstudio-connect: + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.04.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.04.1 + created: "2024-05-07T21:04:09.130946995Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: a58085ec2a02abff9608ef396d045a8dfdc4da609cccc68ca61e87318a31461d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.6/rstudio-connect-0.6.6.tgz + version: 0.6.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.04.0 + created: "2024-05-01T16:45:45.794551673Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: 439d33419eb5c1a803f3446aadccf3987d77a124d75acc8ca3c5538cd56dacdd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.5/rstudio-connect-0.6.5.tgz + version: 0.6.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.03.0 + created: "2024-04-30T18:44:47.446488514Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: 37e83a0a20f1fe75f5951c8ac96c88409a7e6b720a13527362edc34322985a31 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.4/rstudio-connect-0.6.4.tgz + version: 0.6.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.03.0 + created: "2024-04-18T12:36:18.069194629Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: e08f3c2d2f03b2b82c9f6767f539cd0a6b5c9733c4516a6c3ba221ea04bcfb23 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.3/rstudio-connect-0.6.3.tgz + version: 0.6.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.03.0 + created: "2024-04-10T18:52:40.752361231Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: e05533d29ef793c24f6b411c30e539f4329441a10e28180833d25b59d9b8317f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.2/rstudio-connect-0.6.2.tgz + version: 0.6.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.02.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.02.0 + created: "2024-04-02T13:27:00.95833944Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Connect + digest: 1cabdc3d41652e5ee41b2615561cf1279307f42befaccaebf27bacb054690f54 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.1/rstudio-connect-0.6.1.tgz + version: 0.6.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.02.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.02.0 + created: "2024-03-07T17:21:44.479418896Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Connect + digest: 24015dfe6b8d6724ffc53990cbefcd77edf1995e1f23ff6f80a401a023c27c3d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.6.0/rstudio-connect-0.6.0.tgz + version: 0.6.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.02.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.02.0 + created: "2024-02-27T22:57:19.079045239Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Connect + digest: ceade2b03423c1ea4ca3afa29261e230e9f454f79d407ef9efe89b2ac0043b65 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.14/rstudio-connect-0.5.14.tgz + version: 0.5.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.01.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.01.0 + created: "2024-02-13T19:24:58.560473437Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Connect + digest: c8a9845707003f55529ad008beecfe7c893424531d29008c2578b37a97002f65 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.13/rstudio-connect-0.5.13.tgz + version: 0.5.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2024.01.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.01.0 + created: "2024-01-30T21:45:32.087776027Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Connect + digest: 0c4e3c6ff050ff11258db0eb4bdf2ef73edc330c89ad132413b40231baa4fa7a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.12/rstudio-connect-0.5.12.tgz + version: 0.5.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2023-12-20T19:10:44.607462455Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Connect + digest: 1a6be3a9ab26d52c2a6f46bcb33df59e196e3e2be012af638a761343eb4533c6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.11/rstudio-connect-0.5.11.tgz + version: 0.5.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.10.0 + created: "2023-11-27T20:50:50.389842354Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Connect + digest: cce4a58b77e806ae9879503b84d88c24474eab987df40cbcce5dc91c7f9a1588 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.10/rstudio-connect-0.5.10.tgz + version: 0.5.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.10.0 + created: "2023-11-06T20:28:03.69726904Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Connect + digest: d8e97c778777606696b633db0ee4767f8bc5bb91510c04b59472c38461ce5ce4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.9/rstudio-connect-0.5.9.tgz + version: 0.5.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.0 + created: "2023-10-25T16:07:39.634269114Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Connect + digest: ed03efd178ba5882acad31e4123056dbbcd6b735daa0713d3c84ecfe37042810 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.8/rstudio-connect-0.5.8.tgz + version: 0.5.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.0 + created: "2023-09-25T15:20:16.570007481Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Connect + digest: 1d850c8437328b256d98c0fea17bff0319fa5775dadefbc75f7cc8e552ea0f2c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.7/rstudio-connect-0.5.7.tgz + version: 0.5.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.0 + created: "2023-09-12T18:48:45.558630633Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Connect + digest: 8025454ca08ba13086567a78ce1d1127a6ee20191ba8680f6e6d101060e490c0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.6/rstudio-connect-0.5.6.tgz + version: 0.5.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.07.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.07.0 + created: "2023-08-11T14:44:35.918153192Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Connect + digest: b665689dd8bd1b62b899bedcc4078be655e14366c42740148bcdcf9cc2dd6fb8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.5/rstudio-connect-0.5.5.tgz + version: 0.5.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.07.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.07.0 + created: "2023-08-01T22:29:48.01804113Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Connect + digest: 301f43f1a888b28f0327493a7387962132a6b9bb1765279ecc88868ac4a7af16 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.4/rstudio-connect-0.5.4.tgz + version: 0.5.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-07-21T16:32:19.764669252Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Connect + digest: ff11e29b0b43ed3dae9894651dc6042a4c2df1885e36b5e0f139d820a9e013c7 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.3/rstudio-connect-0.5.3.tgz + version: 0.5.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-07-21T16:19:03.715561363Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 4712fe82150366e46ac5acebe9f347f531549a1024655d442de1714658bab0d3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.2/rstudio-connect-0.5.2.tgz + version: 0.5.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-07-11T14:42:01.413212625Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 97ed58e5831700ea07224bcf906ee844b1d1a0ff768f83b4a2b7dc8d4f9f4606 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.1/rstudio-connect-0.5.1.tgz + version: 0.5.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.05.0 + created: "2023-06-14T17:26:42.062461931Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 06e32b0357e168193849052123b534038dde596bbc78c035d1c7cf4b7531def3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.0/rstudio-connect-0.5.0.tgz + version: 0.5.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.05.0 + created: "2023-05-20T13:09:35.385939831Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 125da89f0657d40f0ef55864ab51d7df3445b3800c9eff2c30f656ecbddee9a3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.0-rc03/rstudio-connect-0.5.0-rc03.tgz + version: 0.5.0-rc03 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.05.0 + created: "2023-05-20T00:38:21.377720259Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: a6247065c567fff820f298b274da31aa2fff6ac0406cfc74e20e3856ce8261b8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.0-rc02/rstudio-connect-0.5.0-rc02.tgz + version: 0.5.0-rc02 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:ubuntu2204-2023.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.05.0 + created: "2023-05-11T00:13:28.680258654Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 9c8dc7244b11afe94a68d2bff74b7229bc11914c18107152b0c9f94ce7e07d3e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.5.0-rc01/rstudio-connect-0.5.0-rc01.tgz + version: 0.5.0-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-04-24T16:35:37.183515363Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 268ff149a4af375fdf106aa2dfa86987a6adc671532e00fab616f496cf9df32b + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.4.2/rstudio-connect-0.4.2.tgz + version: 0.4.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-04-14T20:25:21.225807208Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: d4ccea50e5d22e108eac871fd146739a61357fecd3beb4c2a7b39fd469482662 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.4.1/rstudio-connect-0.4.1.tgz + version: 0.4.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-03-30T18:31:43.204760306Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: eca384a9aaaafe0aaad70c154d28b0c9a2eb54c674e4edb9100cdf6e15af1c3b + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.4.0/rstudio-connect-0.4.0.tgz + version: 0.4.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-03-17T19:50:05.454219528Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Connect + digest: 5317300435e4395780fbc2a6003cf5edc2f878bd4bc04b12b4de86814cd84a40 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.19/rstudio-connect-0.3.19.tgz + version: 0.3.19 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-03-14T16:59:17.212750169Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: Official Helm chart for RStudio Connect + digest: db0399b5dc74c220d02b6dcf900e141eede09ca726cfdeb581fd50778124a37c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.18/rstudio-connect-0.3.18.tgz + version: 0.3.18 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.01.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.01.1 + created: "2023-02-13T20:56:24.907614657Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: Official Helm chart for RStudio Connect + digest: db32735689a3f65e741f8ddf83b3d4375e45d63529bcdf6b8eee45bda6a504ba + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.17/rstudio-connect-0.3.17.tgz + version: 0.3.17 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.01.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.01.0 + created: "2023-02-09T15:48:26.102362556Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: Official Helm chart for RStudio Connect + digest: a30b90937bbfbd428e4871fb6ae223e617f401c51222488135da8503e87cbd86 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.16/rstudio-connect-0.3.16.tgz + version: 0.3.16 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.01.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.01.0 + created: "2023-01-27T19:01:28.837987884Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: aca1151e6dbf6b2d89c3d5b08eec0c6baf146dc9a486b51e5f82b209274c4a71 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.15/rstudio-connect-0.3.15.tgz + version: 0.3.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2023.01.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.01.0 + created: "2023-01-27T15:42:58.79289688Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 4c8f9a4eef045afd67e87444c286106757b5129562a7d9b1938a3e691d768f1c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.14/rstudio-connect-0.3.14.tgz + version: 0.3.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2022-12-15T18:46:05.550305316Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 1eb47b7d32b37449219cbe273cbb24df192353aff9ed7a52ea6c68649fdaf3fa + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.13/rstudio-connect-0.3.13.tgz + version: 0.3.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2022-12-08T14:25:53.391445046Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 83ea085fb8b58de4c75fc0b5d3f4de2e36decf9e31740723f7f6fc4cd19c7189 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.12/rstudio-connect-0.3.12.tgz + version: 0.3.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.11.0 + created: "2022-12-02T20:53:39.58555865Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 85dc2fc19840fddcb9d3a5fdcba048073b225f9dec039245fd1be649fba422a0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.11/rstudio-connect-0.3.11.tgz + version: 0.3.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.11.0 + created: "2022-11-28T21:05:35.309426226Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: bad4735b9c299024314f437833be0c3dbe7a0a90d5e8e9fbe6521283215dd340 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.10/rstudio-connect-0.3.10.tgz + version: 0.3.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.11.0 + created: "2022-11-28T17:33:33.96603788Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 97d35db6953b33c358f7c5d78813175e7362ec141c74549b922f8ca54550e13c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.9/rstudio-connect-0.3.9.tgz + version: 0.3.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.11.0 + created: "2022-11-28T15:43:27.933642886Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 3fd541069b10181aece0027b346249f8101030e3a8e74a88ca77f81ef4b9a77a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.8/rstudio-connect-0.3.8.tgz + version: 0.3.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: bionic-2022.11.0 + created: "2022-11-21T14:03:54.814408576Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: c2b6ce62419353d61dc0a4e3799fb4d2181ebbb2400bc1cade6ba86cbf35fa2e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.7/rstudio-connect-0.3.7.tgz + version: 0.3.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: bionic-2022.10.0 + created: "2022-10-26T20:23:31.563186012Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: cb08415c5aacaa4b3b8df8dca2c57d50ca0ee7562d24306f54223a7ce2fef570 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.6/rstudio-connect-0.3.6.tgz + version: 0.3.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:bionic-2022.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: bionic-2022.09.0 + created: "2022-09-15T11:21:40.275299577Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 03ac4616548a013f0d7bccfdeb497c62df77343a64f931b15a11ebea46684020 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.5/rstudio-connect-0.3.5.tgz + version: 0.3.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.09 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.09.0 + created: "2022-09-13T19:25:45.378929703Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 618cbfdb42b2622d45cfb6973506126c008e173e8b43093efeb5ec2508165cbe + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.4/rstudio-connect-0.3.4.tgz + version: 0.3.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.08 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.08.1 + created: "2022-08-30T04:08:12.868375463Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: dd119c380829beed504e7f031d8f1be6fc791a1c0cd1af597cb6431b467c7253 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.3/rstudio-connect-0.3.3.tgz + version: 0.3.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.08 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.08.1 + created: "2022-08-26T13:08:40.909498427Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: f13c533c50f5f5140f74c2a7a410f269d3cf0012303c1e964cfbdf6a0b5adc24 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.2/rstudio-connect-0.3.2.tgz + version: 0.3.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.08 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.08.0 + created: "2022-08-18T18:30:23.115260037Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: fd4cee65d5de33b85ee37010c4c0242ba4152bf9eb939c404892035aff3bcc03 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.1/rstudio-connect-0.3.1.tgz + version: 0.3.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.07 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0 + created: "2022-07-27T16:49:09.014153983Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: e1750d1602b92dbcb5ff04007c359405a564e6c3b392df18a369ec382a24eddd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.3.0/rstudio-connect-0.3.0.tgz + version: 0.3.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.07 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0 + created: "2022-07-25T20:53:20.856877667Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 55fe7dbcf9b666a9ac524ebcc68fca67a82a2c63912c09478a7838f7a5bff522 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.39-rc01/rstudio-connect-0.2.39-rc01.tgz + version: 0.2.39-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.07 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0 + created: "2022-07-21T20:57:51.34391806Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 107c7c0f1b2eb7c23f487d281f8dea2994f17d93d3ba5eb9a5d34b0c7ba36371 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.39-alpha04/rstudio-connect-0.2.39-alpha04.tgz + version: 0.2.39-alpha04 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0-dev-428 + created: "2022-07-21T19:44:10.975948099Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: fe55ea4e6aaaea3f9302da6085389da8106375f5c10d1251f3cc7471d5e3d388 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.39-alpha03/rstudio-connect-0.2.39-alpha03.tgz + version: 0.2.39-alpha03 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0-dev-228 + created: "2022-07-18T19:25:08.175334965Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 53f6470892eabe9e68de8020d97bbdffc7cdd0a467e3826482825778b31a4623 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.39-alpha02/rstudio-connect-0.2.39-alpha02.tgz + version: 0.2.39-alpha02 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.0-dev-228 + created: "2022-07-13T20:04:28.617213913Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 034f152197cd1c458abcc231f75a034f641e7c6827a8760ea050c55358d734a0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.39-alpha01/rstudio-connect-0.2.39-alpha01.tgz + version: 0.2.39-alpha01 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.06.2 + created: "2022-07-13T18:07:08.285500719Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Connect + digest: 83f02e4f846dc93fb14d087b5fe5ece2cafd954afc19ef7b78ad73e54a83be02 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.38/rstudio-connect-0.2.38.tgz + version: 0.2.38 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.06.2 + created: "2022-07-11T19:04:46.579724902Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: 1b357f881e79c885b93d46202b41d57715426b6c1cfedf2fe3ace31330d3c1bd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.37/rstudio-connect-0.2.37.tgz + version: 0.2.37 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.06.0 + created: "2022-07-06T18:18:16.474797245Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: b6a00671748212442803203eb37f81a18753b4f5a9c7a7ee2d11d972adceed40 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.36/rstudio-connect-0.2.36.tgz + version: 0.2.36 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.05.0 + created: "2022-07-05T13:33:36.010623383Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: 0a701d6480d6575da4e59e6eac86062edadc6dff9d6c5f9ac1b228588d6a1d05 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.35/rstudio-connect-0.2.35.tgz + version: 0.2.35 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.05.0 + created: "2022-06-24T18:05:27.621796895Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: 7e12edb9f492250452f826d982be8903d83695ab5a2c774181320b28e47f1601 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.34/rstudio-connect-0.2.34.tgz + version: 0.2.34 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.05.0 + created: "2022-05-31T19:28:16.727463427Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: 3b6c36625c3ccbaf3603cad1053f2d5a407c01d91e4b5f39fb3daca679dc737a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.33/rstudio-connect-0.2.33.tgz + version: 0.2.33 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.05.0 + created: "2022-05-26T16:12:17.859409597Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Connect + digest: ee051f4fcb709e70dcdf6f5fc5f881f5d23d7a30bf900a5f84c8999c7863f7f0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.32/rstudio-connect-0.2.32.tgz + version: 0.2.32 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.05.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.05.0 + created: "2022-05-25T18:20:59.552784748Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: ad665a38ae4a7a569c8f5633d6bea73669abd6c37ea85ed364ff20d02e80ba37 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.31/rstudio-connect-0.2.31.tgz + version: 0.2.31 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.04.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.2 + created: "2022-05-25T18:00:22.305529849Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: f7c9dd384773776c76237270ec0a6c026f0f91ba8d3d3ed90af91e798e96c316 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.30/rstudio-connect-0.2.30.tgz + version: 0.2.30 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.04.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.2 + created: "2022-05-17T16:16:39.633279135Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: 6e6c75abd0353e8dd45aef61bf8a6b1f9871a29dc99da0158cc59b72968377ba + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.29/rstudio-connect-0.2.29.tgz + version: 0.2.29 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.04.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.2 + created: "2022-05-12T19:39:04.433413248Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: 0e6c45997d4d1c227954e7ee05f47c6ddf2d26d14a81ebb8de727a43a20ca1c5 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.28/rstudio-connect-0.2.28.tgz + version: 0.2.28 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.04.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.1 + created: "2022-05-02T14:16:49.967491278Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: 290fa5a3e11d429910e3fe6068e1b8e66653a6c2022a1b978a99931685907d32 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.27/rstudio-connect-0.2.27.tgz + version: 0.2.27 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.03.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.03.2 + created: "2022-04-05T12:53:49.086565379Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Connect + digest: b4767d28e027e91246948e3999897983e3c59ba5a0328b258c227632dc4f8242 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.26/rstudio-connect-0.2.26.tgz + version: 0.2.26 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.03.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.03.2 + created: "2022-04-04T14:04:20.952085973Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: fd2ae66cb6084e6a59fe06dcadf45870e2fa74f95ecc65dc4f7482d1f1e2b097 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.25/rstudio-connect-0.2.25.tgz + version: 0.2.25 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.03.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.03.1 + created: "2022-03-28T14:22:57.470663367Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: f0ce57030f2fca213cbaa168347f41a617086c01ad3b877fb76345921f55e9b1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.24/rstudio-connect-0.2.24.tgz + version: 0.2.24 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.02.3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.3 + created: "2022-03-14T16:56:52.710791619Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: 62c970898ce4151177d29d5730f06097916b84ae46ab328c2fe605ff4bced306 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.23/rstudio-connect-0.2.23.tgz + version: 0.2.23 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.02.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.2 + created: "2022-03-10T16:53:10.946327845Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: 2f9a1f3f06874f29d5a81332f7342e1a33e09f01ab0ba68dbbb57315ee6a1e93 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.22/rstudio-connect-0.2.22.tgz + version: 0.2.22 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2022.02.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.0 + created: "2022-02-28T21:56:17.884448421Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: 53b126ed8186c581cfe8529750758c8a427151c23728d38e3d24d13c42a02d4d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.21/rstudio-connect-0.2.21.tgz + version: 0.2.21 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.1 + created: "2022-01-10T21:54:39.721674283Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: efa50c47178aa264c1575776d15c360b4e2fe69570e707e772e6ce86562ed819 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.20/rstudio-connect-0.2.20.tgz + version: 0.2.20 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.1 + created: "2022-01-04T17:22:55.671702175Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Connect + digest: b25e8327fc34ddeba9aab09e525d00a16b97e15f63f489ed124a27e8fac7916d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.19/rstudio-connect-0.2.19.tgz + version: 0.2.19 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.1 + created: "2022-01-04T16:55:20.354987595Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Connect + digest: 32815c10d9ae088dea9ce6b9a8371547d1ca241aebbbb91d27837a7c70dc4f75 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.18/rstudio-connect-0.2.18.tgz + version: 0.2.18 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0 + created: "2021-12-22T19:42:33.746709294Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Connect + digest: a72a57563573e2ce534948b80cf96a87931293eb71570a184f29b564fc2927e0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.17/rstudio-connect-0.2.17.tgz + version: 0.2.17 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0 + created: "2021-12-22T17:48:28.154703144Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Connect + digest: 5de00e145b420bbfa5494ad6c26e1050824446b48a87996bacaa130e8dc20806 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.16/rstudio-connect-0.2.16.tgz + version: 0.2.16 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0 + created: "2021-12-16T21:55:58.797032426Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Connect + digest: f924e5ad2fbfaeaf0eb13c2bc36ee58e89a10293cc4e24cef8fc9cc0a01668b9 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.15/rstudio-connect-0.2.15.tgz + version: 0.2.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.11.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.11.1 + created: "2021-12-07T17:24:19.871792702Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Connect + digest: ff2a475c0c6c896eda40485d9916886321ad8e9ec1648003747f68c930f0ab36 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.14/rstudio-connect-0.2.14.tgz + version: 0.2.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.11.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.11.1 + created: "2021-12-06T20:37:29.961039623Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: 477b5a179750dad6ce54225061330befee706bb4fc82793edefb2b5c54215bad + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.13/rstudio-connect-0.2.13.tgz + version: 0.2.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.11.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.11.1 + created: "2021-12-02T20:26:29.921222064Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: f20652de12d860e256571337ed3ebc9ed6210d0796a2f582d2068358db0fabcd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.12/rstudio-connect-0.2.12.tgz + version: 0.2.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.11.0 + created: "2021-11-18T14:50:22.59676025Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: 85fe73afddce80c4991f605d7f034162804e03451dbf030aac35d75471a34d44 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.11/rstudio-connect-0.2.11.tgz + version: 0.2.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.11.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.11.0 + created: "2021-11-17T21:14:45.474566944Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: 38a07ef068df64068b849aa3d9db576b7115b55f107f16a5b4189c0f08e0ec01 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.10/rstudio-connect-0.2.10.tgz + version: 0.2.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.10.0 + created: "2021-11-04T13:25:48.8822957Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: b07b959193afcc4df505e647cf15e32ccf8c2b375007a3094a6bf17a84a1216e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.9/rstudio-connect-0.2.9.tgz + version: 0.2.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.10.0 + created: "2021-11-03T20:34:37.89188802Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Connect + digest: 3158229a5b6e174ae2b3ab7de4c5582b86602b428b3ffc19785b4939dc39c5d9 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.8/rstudio-connect-0.2.8.tgz + version: 0.2.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.10.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.10.0 + created: "2021-10-25T21:24:10.606268926Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Connect + digest: aa4e806b7b48d83c2c01b9e5f858a5e844eb83fc3a2924927bc6670e2fbc1d08 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.7/rstudio-connect-0.2.7.tgz + version: 0.2.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0 + created: "2021-10-19T16:53:37.724284571Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Connect + digest: 9c614b853bb4bfa138fc112de0e3503a3d90f51dccdcfd810c36f2d77ca9699c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.6/rstudio-connect-0.2.6.tgz + version: 0.2.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.09.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0 + created: "2021-10-06T13:29:59.75049461Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Connect + digest: eed23437f2a176b7ee6988c3ccf3668f0a2360e6272e9bb4997cb63d5fd48ad1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.5/rstudio-connect-0.2.5.tgz + version: 0.2.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.08.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.08.2 + created: "2021-09-27T18:17:35.063179503Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Connect + digest: 91aa046ee58c59af82ab71f11ba1baf5e3df4d37f710abba1b56c176fdea6d34 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.4/rstudio-connect-0.2.4.tgz + version: 0.2.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:2021.08.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.08.2 + created: "2021-09-23T14:11:19.550078006Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Connect + digest: ce44adf0e3e4976d2ddd6e26a91b404f9862ca2f8c824213c069e20f294b1532 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.3/rstudio-connect-0.2.3.tgz + version: 0.2.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:1.9.0.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.9.0.1 + created: "2021-09-22T16:33:07.17409883Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Connect + digest: 5ebf3a2ea4e5ea0e9a994656d46b60ab6e84ae72aa3346d35fc1242b7c8f38d2 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.2/rstudio-connect-0.2.2.tgz + version: 0.2.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-connect + image: rstudio/rstudio-connect:1.9.0.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Connect + url: https://www.rstudio.com/products/connect/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.9.0.1 + created: "2021-08-19T20:17:30.892154246Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: Official Helm chart for RStudio Connect + digest: 2c96aa7ec1fb845f9472054ab94dc566ee7a42e78f09f8a773f6f6702beda5fc + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - deploy + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.1/rstudio-connect-0.2.1.tgz + version: 0.2.1 + - apiVersion: v2 + appVersion: 1.9.0.1 + created: "2021-08-16T21:07:02.903377229Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13 + description: Kubernetes deployment for RStudio Connect + digest: 743f5e6f51ff721a48310d32b84e1cef1698febba09c2d66823592a4136880d5 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.0/rstudio-connect-0.2.0.tgz + version: 0.2.0 + - apiVersion: v2 + appVersion: 1.9.0 + created: "2021-08-06T16:26:40.527951459Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Connect + digest: 5f0f259c0b3d10711b0d804bef6920e921525c3f5631e4dfa784f3e72c6e998e + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.0-rc05/rstudio-connect-0.2.0-rc05.tgz + version: 0.2.0-rc05 + - apiVersion: v2 + appVersion: 1.9.0 + created: "2021-08-06T16:01:37.982027167Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Connect + digest: a829cdbdc7704ec91010d973177007cdfbf795faa133070d90a2015e443291c0 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.0-rc04/rstudio-connect-0.2.0-rc04.tgz + version: 0.2.0-rc04 + - apiVersion: v2 + appVersion: 1.9.0 + created: "2021-08-05T21:07:28.271698942Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Connect + digest: 5e818aeff9977fa90caef8662c0d4912e10b89a66833413a3c9879f158c52e35 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.0-rc03/rstudio-connect-0.2.0-rc03.tgz + version: 0.2.0-rc03 + - apiVersion: v2 + appVersion: 1.9.0 + created: "2021-08-05T17:27:25.80807104Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Connect + digest: b6393dfb8f2f06c8587f1e735afd27948337bb5802c9f726e86c9d26201f65a1 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-connect + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-connect-0.2.0-rc02/rstudio-connect-0.2.0-rc02.tgz + version: 0.2.0-rc02 + rstudio-launcher-rbac: + - apiVersion: v2 + appVersion: 0.2.20 + created: "2024-04-02T13:27:01.088911032Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: RBAC definition for the RStudio Job Launcher + digest: f2bba188562c930b84e8b3a0945140e01872a94834366ddf51853e7422588964 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.20/rstudio-launcher-rbac-0.2.20.tgz + version: 0.2.20 + - apiVersion: v2 + appVersion: 0.2.19 + created: "2024-02-13T19:24:58.674565477Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: RBAC definition for the RStudio Job Launcher + digest: 185575b7ffc7270b2baa330cab1632d5131964c7535d3277095d38104c510330 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.19/rstudio-launcher-rbac-0.2.19.tgz + version: 0.2.19 + - apiVersion: v2 + appVersion: 0.2.18 + created: "2023-10-25T16:07:39.816560048Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: RBAC definition for the RStudio Job Launcher + digest: a9b94537d24c608010fa7d685eda0323663562f93c04d1438adf71b5512da723 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.18/rstudio-launcher-rbac-0.2.18.tgz + version: 0.2.18 + - apiVersion: v2 + appVersion: 0.2.17 + created: "2023-07-21T16:32:19.996084568Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: RBAC definition for the RStudio Job Launcher + digest: e6a4c514ddd50fea6679f6091d6b3d08780190c2984b3557aa9db8ffbc4583a7 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.17/rstudio-launcher-rbac-0.2.17.tgz + version: 0.2.17 + - apiVersion: v2 + appVersion: 0.2.16 + created: "2023-05-11T00:13:28.808982074Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: RBAC definition for the RStudio Job Launcher + digest: 1d1bb6df06aba482cbe6b138746e72c76f51a7774fe8bece101907ca623d2b5a + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.16/rstudio-launcher-rbac-0.2.16.tgz + version: 0.2.16 + - apiVersion: v2 + appVersion: 0.2.15 + created: "2023-03-17T19:50:05.606434932Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: RBAC definition for the RStudio Job Launcher + digest: 368f7a37e843e0e243aea4428a6c721d8e7078732c35c7978126a1f263d36366 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.15/rstudio-launcher-rbac-0.2.15.tgz + version: 0.2.15 + - apiVersion: v2 + appVersion: 0.2.14 + created: "2023-02-09T15:48:26.273880391Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: RBAC definition for the RStudio Job Launcher + digest: 8933c54bebc064e759b6925f622fb490865969d89b9af2580d8842d251097fa6 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.14/rstudio-launcher-rbac-0.2.14.tgz + version: 0.2.14 + - apiVersion: v2 + appVersion: 0.2.13 + created: "2022-07-13T18:07:08.44268683Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: RBAC definition for the RStudio Job Launcher + digest: 6b42079caa72d9880375ff3ae87712c3d712336b63f34fbede2c9e1d46a966c7 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.13/rstudio-launcher-rbac-0.2.13.tgz + version: 0.2.13 + - apiVersion: v2 + appVersion: 0.2.12 + created: "2022-05-26T16:12:18.038343408Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: RBAC definition for the RStudio Job Launcher + digest: c78f9805f47c7e1d61e6c141c361ddd349ab1e366217b97689c3e8bd8785104d + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.12/rstudio-launcher-rbac-0.2.12.tgz + version: 0.2.12 + - apiVersion: v2 + appVersion: 0.2.11 + created: "2022-04-05T12:53:49.22715632Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: RBAC definition for the RStudio Job Launcher + digest: a285407aaabafbde9b62405b6e43efded0d33c331b9e9fd2ee17ac0f15774757 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.11/rstudio-launcher-rbac-0.2.11.tgz + version: 0.2.11 + - apiVersion: v2 + appVersion: 0.2.10 + created: "2022-01-04T17:22:55.808497176Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: RBAC definition for the RStudio Job Launcher + digest: b8807b94b5cab5518294c8ae8b1f6bc8d8a9c89d1e57c25ef71949e11eef751d + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.10/rstudio-launcher-rbac-0.2.10.tgz + version: 0.2.10 + - apiVersion: v2 + appVersion: 0.2.9 + created: "2021-12-22T17:48:28.314548552Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: RBAC definition for the RStudio Job Launcher + digest: 916ecd66ba482d20fdc499599ce53842166a7be6fdaeb70044f9a816d7b8ea9b + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.9/rstudio-launcher-rbac-0.2.9.tgz + version: 0.2.9 + - apiVersion: v2 + appVersion: 0.2.8 + created: "2021-12-07T17:24:20.067083727Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: RBAC definition for the RStudio Job Launcher + digest: 8408937c8322dc63bc4d334dddf49f077936f04d41a8a42f5fe94a2f9a09b9ca + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.8/rstudio-launcher-rbac-0.2.8.tgz + version: 0.2.8 + - apiVersion: v2 + appVersion: 0.2.7 + created: "2021-11-03T20:34:38.034071095Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: RBAC definition for the RStudio Job Launcher + digest: bc86f11c5bb2d86e35799c68f7546e9bd874c3263fa698f53c397a32427a7dcf + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.7/rstudio-launcher-rbac-0.2.7.tgz + version: 0.2.7 + - apiVersion: v2 + appVersion: 0.2.6 + created: "2021-10-19T16:53:37.926316832Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: RBAC definition for the RStudio Job Launcher + digest: 0a94c5a7211a06a93a43cf076f2182cda803c6ff40839fef8ba2fcfa09bf0659 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.6/rstudio-launcher-rbac-0.2.6.tgz + version: 0.2.6 + - apiVersion: v2 + appVersion: 0.2.5 + created: "2021-09-22T16:33:07.348795913Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: RBAC definition for the RStudio Job Launcher + digest: 25c71b0de2e7fd1941d1577ad95a1573ce068b0259543d1842336ab39ed88134 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.5/rstudio-launcher-rbac-0.2.5.tgz + version: 0.2.5 + - apiVersion: v2 + appVersion: 0.2.4 + created: "2021-08-19T20:17:31.033257423Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: RBAC definition for the RStudio Job Launcher + digest: 941871a96ef34c3f8e44d29fe54f6beb6dfdebd54ffcb7d5ef26d1a903c0aceb + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - launcher + - rbac + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + sources: + - https://github.com/rstudio/helm + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.4/rstudio-launcher-rbac-0.2.4.tgz + version: 0.2.4 + - apiVersion: v2 + appVersion: 0.2.3 + created: "2021-08-16T21:07:03.149178709Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13 + description: RBAC definition for the RStudio Job Launcher + digest: d7a6a3de99700e95b695f5e6f432382db1d30cc2f9cae23a754285a7561f4220 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.3/rstudio-launcher-rbac-0.2.3.tgz + version: 0.2.3 + - apiVersion: v2 + appVersion: 0.2.2 + created: "2021-08-05T17:27:26.209108797Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: RBAC definition for the RStudio Job Launcher + digest: 77ebf21699ec54d2aa40dff710374db2abf7af4ddb69ee3c18afba3c858e2d84 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.2/rstudio-launcher-rbac-0.2.2.tgz + version: 0.2.2 + - apiVersion: v2 + appVersion: 0.2.1 + created: "2021-08-05T17:27:26.07272777Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: RBAC definition for the RStudio Job Launcher + digest: c8d32859c6003dd5bf576fd589ed4dbdb0c3448eb0e49b3dfb5165e41cd99dbc + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.1/rstudio-launcher-rbac-0.2.1.tgz + version: 0.2.1 + - apiVersion: v2 + appVersion: 0.2.0 + created: "2021-08-05T17:27:25.930491348Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: RBAC definition for the RStudio Job Launcher + digest: c9880245742f1d98e26fcdb070686de0891ffd596c76700011b5482f92442b69 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-launcher-rbac + type: application + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-launcher-rbac-0.2.0/rstudio-launcher-rbac-0.2.0.tgz + version: 0.2.0 + rstudio-library: + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.29 + created: "2024-04-02T13:27:01.254346404Z" + description: Helm library helpers for use by official RStudio charts + digest: 2e269e71147524a29e80508075ddb2ac48419db8dccb16d4e86a9bc088a82e3d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.29/rstudio-library-0.1.29.tgz + version: 0.1.29 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.28 + created: "2024-02-13T19:24:58.801860724Z" + description: Helm library helpers for use by official RStudio charts + digest: a187742958ae42dd7fc8683c703fad3605bf730230340f91f049dde8ae6c7a7d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.28/rstudio-library-0.1.28.tgz + version: 0.1.28 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.27 + created: "2023-10-25T16:07:40.019053128Z" + description: Helm library helpers for use by Official RStudio charts + digest: 66479e8941990946ed3fc81a8890762e2de943d176b931e74e5a9380ae839047 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.27/rstudio-library-0.1.27.tgz + version: 0.1.27 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.26 + created: "2023-07-21T16:32:20.210478546Z" + description: Helm library helpers for use by Official RStudio charts + digest: 2a93520f5b7a3617ec3009a991b0d6e9058b7131db37086fcdc869eab739521e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.26/rstudio-library-0.1.26.tgz + version: 0.1.26 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.25 + created: "2023-03-17T19:50:05.749213824Z" + description: Helm library helpers for use by Official RStudio charts + digest: d21d45277fed2ed5d6a94e65b493ea9e613e16d7a33970ee44e1ec26b1cc8b8a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.25/rstudio-library-0.1.25.tgz + version: 0.1.25 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.24 + created: "2023-02-09T15:48:26.444442218Z" + description: Helm library helpers for use by Official RStudio charts + digest: d4ba3d07f97229ac71595d95f55c47bcd24376833b60dd2864c3e22a570717c6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.24/rstudio-library-0.1.24.tgz + version: 0.1.24 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.23 + created: "2022-07-13T18:07:08.622221028Z" + description: Helm library helpers for use by Official RStudio charts + digest: 3bc9211c8fd5348e49964d9bb102e96de1252cd08d8deafe212475a6a7a15970 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.23/rstudio-library-0.1.23.tgz + version: 0.1.23 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.22 + created: "2022-05-26T16:12:18.15961236Z" + description: Helm library helpers for use by Official RStudio charts + digest: c7a31807c819820be8773efb6bea0f43bea442c5e42169269ef0242699b0edf0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.22/rstudio-library-0.1.22.tgz + version: 0.1.22 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.21 + created: "2022-04-05T12:53:49.361992702Z" + description: Helm library helpers for use by Official RStudio charts + digest: cd05b83f11463e25e7c7fc36a79a75173b54baa22cca779624361d14941b8c46 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.21/rstudio-library-0.1.21.tgz + version: 0.1.21 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.20 + created: "2022-01-04T17:22:55.947543256Z" + description: Helm library helpers for use by Official RStudio charts + digest: 2444de3d754d1440d6f5867f580629b577085716ef5c30095e43decd5d6e90d1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.20/rstudio-library-0.1.20.tgz + version: 0.1.20 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.19 + created: "2021-12-22T17:48:28.437481626Z" + description: Helm library helpers for use by Official RStudio charts + digest: 2299f12b4925f44a9401ca5908a153158162df903d9b7a6a050ff7f391f1b88e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.19/rstudio-library-0.1.19.tgz + version: 0.1.19 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.18 + created: "2021-12-07T17:24:20.310436163Z" + description: Helm library helpers for use by Official RStudio charts + digest: ebe646572c1955e4d4eca724afdaeb5d8c3a22a1079ab8cb6108eb1239c15b38 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.18/rstudio-library-0.1.18.tgz + version: 0.1.18 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.17 + created: "2021-11-03T20:34:38.177059278Z" + description: Helm library helpers for use by Official RStudio charts + digest: 2da83959f464709bdc9ce1c0dd4fb710c25113a330172168efa5703992ccd685 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.17/rstudio-library-0.1.17.tgz + version: 0.1.17 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.16 + created: "2021-10-19T16:53:38.144126621Z" + description: Helm library helpers for use by Official RStudio charts + digest: c5287a2d8785d1ab925956202144beb5774a847643cd73e1c6cf581a42e5802a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.16/rstudio-library-0.1.16.tgz + version: 0.1.16 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.15 + created: "2021-09-22T16:33:07.516325556Z" + description: Helm library helpers for use by Official RStudio charts + digest: 8ec2b9868eaafcc1df859ac19d30f1fc0d9bccdddf5f06becc2bd5398349cc4a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.15/rstudio-library-0.1.15.tgz + version: 0.1.15 + - annotations: + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 0.1.14 + created: "2021-08-19T20:17:31.182593957Z" + description: Helm library helpers for use by Official RStudio charts + digest: 6ec0d10b5d409cd498717a703eadd19b49fbc288d48eadf3bcc4d225e3abafa7 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - rstudio + - library + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + sources: + - https://github.com/rstudio/helm + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.14/rstudio-library-0.1.14.tgz + version: 0.1.14 + - apiVersion: v2 + appVersion: 0.1.13 + created: "2021-08-16T21:07:03.366742724Z" + description: A Helm chart for RStudio helper functions + digest: d6a480504c0a72d3325391fc53b5cc7b5d59d65adf464477479da1fab0f704fa + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.13/rstudio-library-0.1.13.tgz + version: 0.1.13 + - apiVersion: v2 + appVersion: 0.1.13-rc01 + created: "2021-08-05T17:27:26.349763913Z" + description: A Helm chart for RStudio helper functions + digest: ca23958289e821d766e3c3da78e58703b20cc03d890fa429db36eb9e27b637f3 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-library + type: library + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-library-0.1.13-rc01/rstudio-library-0.1.13-rc01.tgz + version: 0.1.13-rc01 + rstudio-pm: + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2024.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2024.04.0 + created: "2024-05-07T13:20:18.801716634Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Package Manager + digest: 4c6dc99cfa86d5915fdb83da4ff23ff9870cb1ce0bd27fdb5d994bd74d31c1de + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.25/rstudio-pm-0.5.25.tgz + version: 0.5.25 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2024.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2024.04.0 + created: "2024-05-07T12:33:17.321263688Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Package Manager + digest: 689aee11c46e4db27659467f708d391909cf448bf29624a80a6d3e99b22814c4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.24/rstudio-pm-0.5.24.tgz + version: 0.5.24 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2024.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2024.04.0 + created: "2024-05-06T15:00:36.440552489Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Package Manager + digest: 66c914132ccea292061fb98ab2b5580b702a696955898dc7052ba2ab8a40a03e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.23/rstudio-pm-0.5.23.tgz + version: 0.5.23 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2024-04-18T12:36:18.180016958Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Package Manager + digest: dd58e0eac8b796d082fc205d1bd4e2fd3ec87a78ccaf80f752d0cf480bd873c4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.22/rstudio-pm-0.5.22.tgz + version: 0.5.22 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2024-04-02T13:27:01.377594746Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Package Manager + digest: fa4d0b0048d1c0febcfbe61d81c2d944b6263e6d6abb52ebdd910e60fa657265 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.21/rstudio-pm-0.5.21.tgz + version: 0.5.21 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2024-03-12T18:53:07.597542141Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Package Manager + digest: 296d8a32ed084dd474e19d3802f67f0988ab1a48c9ce27a16024aa22ac295303 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.20/rstudio-pm-0.5.20.tgz + version: 0.5.20 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2024-02-13T19:24:58.89770497Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Package Manager + digest: 4be765f6e17c9ca656ba6b51008863d1b56d787384ca05eaf70c73d2cf6d2ed1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + - posit + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.19/rstudio-pm-0.5.19.tgz + version: 0.5.19 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2023-12-18T20:38:15.373990044Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Package Manager + digest: 831f7952531b30d62e4637c57f69caa2166a4ee27ac651733575bcad47d3a500 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.18/rstudio-pm-0.5.18.tgz + version: 0.5.18 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.08.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.08.4 + created: "2023-11-27T20:50:50.543882051Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Package Manager + digest: f69924e17ca99d76449c66742736aecd0a6c7923bd03e58aeb51dbba3a6533e1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.17/rstudio-pm-0.5.17.tgz + version: 0.5.17 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.08.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.08.4 + created: "2023-11-02T18:32:13.446381796Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Package Manager + digest: 3ef5111d1deb27536f281b509d1755286813a308789af7fcf8e8777976993754 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.16/rstudio-pm-0.5.16.tgz + version: 0.5.16 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.08.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.08.0 + created: "2023-10-25T16:07:40.173006495Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Package Manager + digest: 00201d40b92095435583d0c102191cb54516aecd2f51cb7992e2234ff1f4367c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.15/rstudio-pm-0.5.15.tgz + version: 0.5.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.08.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.08.0 + created: "2023-09-13T15:19:21.101984219Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Package Manager + digest: e861347d8396df6f6aff41bef575e3ed34f9418b91c4afd4687455381f924864 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.14/rstudio-pm-0.5.14.tgz + version: 0.5.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:ubuntu2204-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-08-21T18:23:23.024569151Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Package Manager + digest: 5b2a7dd2850b92a65b58cf79f5b855c6f91ef24caa37e1e36db8d2f90449e65d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.13/rstudio-pm-0.5.13.tgz + version: 0.5.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-07-21T16:32:20.412312196Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Package Manager + digest: 581b96fd484edd302dc9ff01f2ca8555e3cd428e23fe2fcff28e38427c8a7fe6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.12/rstudio-pm-0.5.12.tgz + version: 0.5.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-05-20T13:09:35.547093424Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: d638823ab60b9276d38b0e5038e771cce594b612ebfb42906468909130d0aa5e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.11/rstudio-pm-0.5.11.tgz + version: 0.5.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-05-20T00:38:21.587250777Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: 497b425bbe53105b5066c03ac4956ac374760888a68a2fb9f67589b0f7421fb1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.10/rstudio-pm-0.5.10.tgz + version: 0.5.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-05-11T00:13:28.944295261Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: c52ae72ae8229ec7978ffbf18c003453b9408046a844bc7767006091389aa79c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.9/rstudio-pm-0.5.9.tgz + version: 0.5.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2023.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2023.04.0 + created: "2023-05-03T15:33:51.896213609Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: 1a2ba2622725c1aafcb56f909f03dc843575217e5b4c1ad1cd63bf4f3fbcee05 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.8/rstudio-pm-0.5.8.tgz + version: 0.5.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.4 + created: "2023-03-30T18:31:43.372121622Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: e0082c562aa15fa8f5beb829a3be3955c8d004467422bdef3a354e9703885d15 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.7/rstudio-pm-0.5.7.tgz + version: 0.5.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.4 + created: "2023-03-17T19:50:06.021113646Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Package Manager + digest: f29c8f8d4de8b2411dd66719c20bb276ed49219f1bc3c79bfb4268e8699b19b5 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.6/rstudio-pm-0.5.6.tgz + version: 0.5.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.4 + created: "2023-02-09T15:48:26.624315913Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: Official Helm chart for RStudio Package Manager + digest: f8da2622eb0b4a45566d40e812723b857024686504e169687fc736a4db5cb6a9 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.5/rstudio-pm-0.5.5.tgz + version: 0.5.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.4 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.4 + created: "2022-12-07T20:59:12.008515383Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: bb66b1049ef75578076f31361c5b58a3ad3da0dcbc75fe74e47a7f938879e89d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.4/rstudio-pm-0.5.4.tgz + version: 0.5.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.2 + created: "2022-12-05T15:42:45.462785221Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: 66cf0af3db3cacff4fdcba2e7a82ade14a33f199ebfe7991d73f7858fc692914 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.3/rstudio-pm-0.5.3.tgz + version: 0.5.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.2-18 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.2-18 + created: "2022-12-02T20:53:39.726223412Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: d757a91774456c6f23dbf80a0d6e1e79f58f01ac394b13e9f71185edf1c17e45 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.2/rstudio-pm-0.5.2.tgz + version: 0.5.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:bionic-2022.11.2-18 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.2-18 + created: "2022-11-24T04:37:37.856249917Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: a8280522c796a9c00f4baedba10cd2461eff742303b3c53429d84865dc313be8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.1/rstudio-pm-0.5.1.tgz + version: 0.5.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.11.2-18 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://posit.co/products/enterprise/package-manager/ + - name: About Posit Team + url: https://posit.co/products/enterprise/team/ + apiVersion: v2 + appVersion: 2022.11.2-18 + created: "2022-11-24T04:23:17.264006672Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: 6ce06018ee3d0fb73f38608a464055c6f3a0aea5562ba56a10b1ad5f1c46445b + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.5.0/rstudio-pm-0.5.0.tgz + version: 0.5.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.07.2-11 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-11 + created: "2022-11-04T18:06:26.830883967Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: cb2dbc3ab4f66005726b6006f5a34f3eb46e22418b2f88de6408560d209d2212 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.4.0/rstudio-pm-0.4.0.tgz + version: 0.4.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.07.2-11 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-11 + created: "2022-09-06T13:00:29.422888546Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: be48344adcef0b9e4e56219566a59fbed3ebe130443bc855d929d279f1e02a79 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.4.0-rc01/rstudio-pm-0.4.0-rc01.tgz + version: 0.4.0-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-07-13T18:07:08.771995576Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Package Manager + digest: 8c1c741292b1b38a79db15cc36cf4d21c156cf35ca2b4f06d1d433d3beef4c13 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.15/rstudio-pm-0.3.15.tgz + version: 0.3.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-07-12T20:23:15.967978895Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: 5d524032d403ff27e8a0e945e7d9883ff789704febfebedead24f1ef8e2a35c6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.14/rstudio-pm-0.3.14.tgz + version: 0.3.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-07-11T13:59:44.856671978Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: 932b549b638372bd934ad876aa546e4fe9e05748b1204fd7d76055017472c207 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.13/rstudio-pm-0.3.13.tgz + version: 0.3.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-07-05T13:33:36.214130624Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: 8a578603832bc8f9d5daf0e99facb2417730112aaa69c494b6db3ea2e3c4664f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.12/rstudio-pm-0.3.12.tgz + version: 0.3.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-06-28T08:11:35.428010915Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: 9c52a0a62b8afd06b655c42ca183fbf90b5c9c4844423f997630a9967ebc7c4c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.11/rstudio-pm-0.3.11.tgz + version: 0.3.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-06-23T17:53:30.982415292Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: f9640b1c41024ab446cc5d8e0632b48e48932c013947e51da43eab94525f5f6f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.10/rstudio-pm-0.3.10.tgz + version: 0.3.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-05-26T16:12:18.276895588Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Package Manager + digest: b4b0c3533a97ba3efbe369f27c3ffe80ab586937cd5f70ed0e8604f8a0f18ccd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.9/rstudio-pm-0.3.9.tgz + version: 0.3.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-05-16T12:50:34.822764609Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Package Manager + digest: 097d7697217476ee7e51a982f97b4660ed71fc42ae85d2af1dd605c8e5862e15 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.8/rstudio-pm-0.3.8.tgz + version: 0.3.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-05-03T18:52:43.792104357Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Package Manager + digest: 2ba0e96f05679fa3f14b31ed9afd9d768af4a0f3d35a3e1ca03c1ea830814c4e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.7/rstudio-pm-0.3.7.tgz + version: 0.3.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-04-22T02:14:40.152850371Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Package Manager + digest: 1a7219919bc73dbbe87f87843213c0e8c2a3c8cecaea5354d46c5cd993e677c3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.6/rstudio-pm-0.3.6.tgz + version: 0.3.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2022.04.0-7 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.04.0-7 + created: "2022-04-21T19:01:38.655244939Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Package Manager + digest: bd00a1eed846719dde3bee4e8fdfbaee53fce7362e7ed5f4c352e166ddafbaa7 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.5/rstudio-pm-0.3.5.tgz + version: 0.3.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.12.0-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0-3 + created: "2022-04-05T12:53:49.553227428Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Package Manager + digest: a5dd157e70af75fd4663f194a82cc11feb2b71cff64c2c0a2b29dbf9995d740d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.4/rstudio-pm-0.3.4.tgz + version: 0.3.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.12.0-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0-3 + created: "2022-01-06T15:05:25.144033566Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Package Manager + digest: 35cb8c7dc2422677b6521483bcdc8eba8e37fff59a44e6e297f5541a33eeabb5 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.3/rstudio-pm-0.3.3.tgz + version: 0.3.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.12.0-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.12.0-3 + created: "2022-01-05T17:08:38.389031118Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Package Manager + digest: 5e3873f95f45ea2c1f023023d734a3cf9ba28419ae25c34a3cb4692b6a179f08 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.2/rstudio-pm-0.3.2.tgz + version: 0.3.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2022-01-04T17:22:56.080164393Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Package Manager + digest: 7addae83849fbddb90053d673ba4d045d7a97e4865ee44c3dc915020ccab5039 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.1/rstudio-pm-0.3.1.tgz + version: 0.3.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-12-22T19:36:57.83416007Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Package Manager + digest: b005a69f7041feedbbf562398c9b8ef0988d6ebb8d24bb5e9a596ea15078429f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.3.0/rstudio-pm-0.3.0.tgz + version: 0.3.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-12-22T17:48:28.555593296Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Package Manager + digest: b5c6d090262aa8f7bd8283f2a22a26d3d5997c8df768d665e2474452a6d4689a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.10/rstudio-pm-0.2.10.tgz + version: 0.2.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-12-09T15:39:35.629948942Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Package Manager + digest: ff2db4fe85e455a99ccf929752e8d556203b64ef71ccbe6a33db904c2f120934 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.9/rstudio-pm-0.2.9.tgz + version: 0.2.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-12-07T17:24:20.485293511Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Package Manager + digest: 5add6bca521d1db458aaf6ac1f7306c0903d2039e2b365e008777f638b02a5d0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.8/rstudio-pm-0.2.8.tgz + version: 0.2.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-11-04T13:25:49.174481878Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Package Manager + digest: c864af1789c694c441a72ead126f917a4745a758d0936aec9ea7218bc2f79dfc + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.7/rstudio-pm-0.2.7.tgz + version: 0.2.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-11-03T20:34:38.295382567Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Package Manager + digest: 3075fe8c08b58ec8077b7846e9a994c0ba884e2a37202aa3e91d286048818ac0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.6/rstudio-pm-0.2.6.tgz + version: 0.2.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-10-20T01:11:41.118457816Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Package Manager + digest: 519c7f25dd85ed3f2fc6a91d6ffbf36436c56328369df6d91f516546a04bc821 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.5/rstudio-pm-0.2.5.tgz + version: 0.2.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-10-19T16:53:38.326530847Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Package Manager + digest: 339abd0832d7694545bca4bda9163ffbc23f9396de09f20a72d26b599bb78d48 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.4/rstudio-pm-0.2.4.tgz + version: 0.2.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:2021.09.0-1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-1 + created: "2021-09-23T16:47:48.56713724Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Package Manager + digest: dd1299f025e42b677de9069310f5dbfddc9a30f26172113d61ded8c35b9aee58 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.3/rstudio-pm-0.2.3.tgz + version: 0.2.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:1.2.2.1-17 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-09-22T16:33:07.695668466Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Package Manager + digest: 5fa263026f573cdf873dd04067419deafce7425ddfa679b99c23fbf306977b19 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.2/rstudio-pm-0.2.2.tgz + version: 0.2.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-package-manager + image: rstudio/rstudio-package-manager:1.2.2.1-17 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Package Manager + url: https://www.rstudio.com/products/package-manager/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-19T20:17:31.333087099Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: Official Helm chart for RStudio Package Manager + digest: a46ac619cc389b2f0640d8c71a05600dacacfa4fa9204dd1801f027445be601f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - package + - cran + - pypi + - pip + - bioconductor + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.1/rstudio-pm-0.2.1.tgz + version: 0.2.1 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-16T21:07:03.600587299Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13 + description: Kubernetes deployment for RStudio Package Manager + digest: 43e42db84acd98258c8b362d0ab628230f7a7c83e7b164adeaf9a37bc3f09dc5 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0/rstudio-pm-0.2.0.tgz + version: 0.2.0 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-06T16:26:40.646388606Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: 470f44d57cd8280bac8134c3272de5f7c3951c245422444ab7cb44e1d22e857b + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc07/rstudio-pm-0.2.0-rc07.tgz + version: 0.2.0-rc07 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-06T16:01:38.112602817Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: e970b73fed8cbb0cfb06c6b13eb71e69c118e78dcc6031f213f784971307ab32 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc06/rstudio-pm-0.2.0-rc06.tgz + version: 0.2.0-rc06 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-05T17:27:27.068869926Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: 59388d41ff17903eaadfa007f2228a0e678fc6a2f88767df9ccc92e16c59803a + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc05/rstudio-pm-0.2.0-rc05.tgz + version: 0.2.0-rc05 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-05T17:27:26.927755382Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: 6df2301f0e3eda13122357effb7e3212922a25705e04631a431c0c20aae5c486 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc04/rstudio-pm-0.2.0-rc04.tgz + version: 0.2.0-rc04 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-05T17:27:26.790296071Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: e9b082426b0fd80aee0d26de76f819b84acdbc71e723f61de48cae8df58ae2e6 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc03/rstudio-pm-0.2.0-rc03.tgz + version: 0.2.0-rc03 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-05T17:27:26.61715156Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: 30d9f19a89340f5239e1f81617c0cd289e64b37da8eef819d42fc4687e28f6b2 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc02/rstudio-pm-0.2.0-rc02.tgz + version: 0.2.0-rc02 + - apiVersion: v2 + appVersion: 1.2.2.1-17 + created: "2021-08-05T17:27:26.481772025Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Package Manager + digest: b0c76f24aaab0ddd0ef039aed7dd7b5a663832c254dbd6569e72c5a41c5fb02f + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/rstudio/helm + name: rstudio-pm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-pm-0.2.0-rc01/rstudio-pm-0.2.0-rc01.tgz + version: 0.2.0-rc01 + rstudio-workbench: + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2024.04.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2024.04.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2024.04.0 + created: "2024-05-01T13:57:20.844286903Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Workbench + digest: 487a7cd3adcb3aa781272d689d11b56821d0aca068d58e62a0fd8686e96b8715 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.7.3/rstudio-workbench-0.7.3.tgz + version: 0.7.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-04-18T12:36:18.310296401Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Workbench + digest: f6ba6d686c5e0892c119d7f7d7dd23d90020c414a4176d38ce8b95a1e3c08090 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.7.2/rstudio-workbench-0.7.2.tgz + version: 0.7.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-04-02T13:27:01.520865204Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.29 + description: Official Helm chart for RStudio Workbench + digest: fa44fc591f3d593e2b0ce08c50d76a171420112a35450ef2da11bd26e75bc83e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.7.1/rstudio-workbench-0.7.1.tgz + version: 0.7.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-03-07T20:22:53.310774619Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Workbench + digest: 0112ab378893a9562824a34ef6d81f54ae059fb982221c2961c5bfc587a8c853 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.7.0/rstudio-workbench-0.7.0.tgz + version: 0.7.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-03-04T01:29:56.697897315Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Workbench + digest: 12dcd1c81113aa8761a43ad03f5164aa01934b4b9436cc5dc32d3f4747857fab + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.16/rstudio-workbench-0.6.16.tgz + version: 0.6.16 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-02-21T20:05:33.317054734Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Workbench + digest: 4d0f1975526c731ff2c5d9960ed03325d1abe72fd7320c23afcdb02ccddf6f8a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.15/rstudio-workbench-0.6.15.tgz + version: 0.6.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-02-13T19:24:59.018019246Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.28 + description: Official Helm chart for RStudio Workbench + digest: 6ac3924a350d69d85992a277860a09c1235ebb8b0e70d65e8872065e40dbae9f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.14/rstudio-workbench-0.6.14.tgz + version: 0.6.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.12.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.12.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.1 + created: "2024-02-02T21:19:02.102256794Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Workbench + digest: b4054b97f9aa1d1b7f56cb1590e330665a91fea2b89776797825693a0d61f50d + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.13/rstudio-workbench-0.6.13.tgz + version: 0.6.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.12.0 + created: "2024-01-09T15:55:37.462829989Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Workbench + digest: 7e8555ead95f981ab9cda364560ed9fbb5c0de70a77a7585851abfe121d10d88 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.12/rstudio-workbench-0.6.12.tgz + version: 0.6.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.1 + created: "2023-11-27T20:50:50.685796575Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Workbench + digest: 7d8b4ef199d43808a8453b63fd7afcc86449d0f439eaf2a19e7638837ef83469 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.11/rstudio-workbench-0.6.11.tgz + version: 0.6.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.1 + created: "2023-10-25T16:07:40.323527885Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.27 + description: Official Helm chart for RStudio Workbench + digest: e404d9bf3675595faaea90a4256037c454ad2a6319e4e2288e0f2407743877bf + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.10/rstudio-workbench-0.6.10.tgz + version: 0.6.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.1 + created: "2023-10-24T12:39:00.284720527Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: 96232e1d81c6d95d449b4d1a4f39b1f4f6a9fb591c57421abb125834459c0b60 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.9/rstudio-workbench-0.6.9.tgz + version: 0.6.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.09.0 + created: "2023-10-03T15:09:04.587139017Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: 0275f947323b0103a002ff4bd54fa4291486a4e3f19db767b7643b041f2311a1 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.8/rstudio-workbench-0.6.8.tgz + version: 0.6.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.1 + created: "2023-08-31T13:25:11.60668341Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: 89415be820c0237c73b96955311dc7903bd8176f6214d137e392751811b405c4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.7/rstudio-workbench-0.6.7.tgz + version: 0.6.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.1 + created: "2023-08-14T14:41:43.838197846Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: 838deb5a6048aadfe82f1a514ed15143e3ab43e971547b4f0adfc873af00ecb4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.6/rstudio-workbench-0.6.6.tgz + version: 0.6.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-08-11T14:44:36.104710276Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: cf6aba2326ebd2ecb0759b683873ea9f13eb965844faea48d199decb37868157 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.5/rstudio-workbench-0.6.5.tgz + version: 0.6.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-07-21T16:32:20.614829047Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.26 + description: Official Helm chart for RStudio Workbench + digest: f365dc505a7964a8cec83301fa646abb64693ac6584e7ec608160d9fc186a28e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.4/rstudio-workbench-0.6.4.tgz + version: 0.6.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-07-21T16:19:03.906004335Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 68e5e46871dd5396b02f23b43d905315627c372a99a8de686d55ad656891e886 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.3/rstudio-workbench-0.6.3.tgz + version: 0.6.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-06-21T18:02:06.564769179Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 3cc208c0526eeb44cf1df5d8b02e25ce291e20f9072a6a71aa915693c942e952 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.2/rstudio-workbench-0.6.2.tgz + version: 0.6.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.06.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.06.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.06.0 + created: "2023-06-14T14:52:25.009027427Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 1f81347c1eb461064f08b17c2988893da7fe5b11394228e514f7443c127e42e6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.1/rstudio-workbench-0.6.1.tgz + version: 0.6.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.1 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.1 + created: "2023-06-08T17:45:21.494924819Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 97a178329c15c15ae1c96a7990989b8d6c21041dd627d2edcbfd8876ea588164 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0/rstudio-workbench-0.6.0.tgz + version: 0.6.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-06-07T18:28:57.084434789Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 6a954f7778e8eb6652979218872083166d13295efc94854cad02389f1c5d33b3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0-rc06/rstudio-workbench-0.6.0-rc06.tgz + version: 0.6.0-rc06 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-05-20T13:09:35.720905687Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: d8a8aafefe9c1c6f401667fdfc87dfc1120a4b07603e9d25895e77e0b8e1cc86 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0-rc05/rstudio-workbench-0.6.0-rc05.tgz + version: 0.6.0-rc05 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-05-20T00:38:21.795195627Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: c71b8714ecbe89eb82d4dc36b3ed3a747eb69f111c3914c52d637ec5bb3cd341 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0-rc04/rstudio-workbench-0.6.0-rc04.tgz + version: 0.6.0-rc04 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-05-11T00:13:29.080124554Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: b8e722ecfb342159dd553f1fd6f2c3b8fcbc1bc7c51e187919fd94708a962f7f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0-rc03/rstudio-workbench-0.6.0-rc03.tgz + version: 0.6.0-rc03 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:ubuntu2204-2023.03.0 + - name: r-session-complete + image: rstudio/r-session-complete:ubuntu2204-2023.03.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2023.03.0 + created: "2023-04-26T14:16:37.505865882Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 404e896bf509eb0275625de21e75228adbcb9ee931d041be51e80321eafbb649 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.6.0-rc01/rstudio-workbench-0.6.0-rc01.tgz + version: 0.6.0-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-04-12T14:30:24.216996215Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 5c43ed27dbdc6d957e5985d5b3c555de1a75639f7ef3e1e849e7b44eb42e7547 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.33-rc01/rstudio-workbench-0.5.33-rc01.tgz + version: 0.5.33-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-03-30T18:31:43.534416797Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: cda5dcdbb93c5d0ba68124d443a9a8616ff8298b966fd7dbb9dce823928022c6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.32/rstudio-workbench-0.5.32.tgz + version: 0.5.32 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-03-30T14:51:49.588750023Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 38225e3ed7aee7579ea2d7d0c79389ea0588803d80cf14593c349654b7b4f87a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.31/rstudio-workbench-0.5.31.tgz + version: 0.5.31 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-03-27T18:32:24.828276485Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: baf720b92850f9e0df3f6565eea31801ea97f65c9a3580cc0d6f2999d7a8a98b + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.30/rstudio-workbench-0.5.30.tgz + version: 0.5.30 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-03-17T19:50:06.178966417Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.25 + description: Official Helm chart for RStudio Workbench + digest: 8c4b579f9aca0448b6d9e4464a97c4f657bb5f6d59836aa772a23888ec0d938f + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.29/rstudio-workbench-0.5.29.tgz + version: 0.5.29 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-02-09T15:48:26.800645682Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.24 + description: Official Helm chart for RStudio Workbench + digest: 62870e5e184e8f93dae1ff382a9d46f0ab2c48441a3f0a1eacd0cc97d262c6f0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.28/rstudio-workbench-0.5.28.tgz + version: 0.5.28 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.12.0 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.12.0 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.12.0 + created: "2023-01-13T20:00:39.711065919Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: fbe42f4b361211e2a36989cd75029d2fd2d04df2ace7c57647ce63ac366ddac6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.27/rstudio-workbench-0.5.27.tgz + version: 0.5.27 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.07.2-576.pro12 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.2-576.pro12 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-576.pro12 + created: "2022-12-15T18:33:25.674095488Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: f05ab2a23f52455c507b93d61ff04ac72f1aa8f3f585e451bb0e94213e6186be + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.26/rstudio-workbench-0.5.26.tgz + version: 0.5.26 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.07.2-576.pro12 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.2-576.pro12 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-576.pro12 + created: "2022-12-01T21:51:58.843974461Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 53d5b3152ff656254341d18a2df5deef1264e71d9136d3fbec543cc4bf68cecb + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.25/rstudio-workbench-0.5.25.tgz + version: 0.5.25 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.07.2-576.pro12 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.2-576.pro12 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-576.pro12 + created: "2022-11-28T21:05:35.560161092Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 825e6983f6e514604322825e029da29edadb8e3648c3d0a27c14b866594f36d0 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.24/rstudio-workbench-0.5.24.tgz + version: 0.5.24 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.07.2-576.pro12 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.2-576.pro12 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-576.pro12 + created: "2022-11-28T15:43:28.128880381Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: b80e7c43a9bbdfcee6234eec239e549b319b7be6f2f279b8d236af35a12c778a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.23/rstudio-workbench-0.5.23.tgz + version: 0.5.23 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:bionic-2022.07.2-576.pro12 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.2-576.pro12 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.2-576.pro12 + created: "2022-10-21T16:20:09.434767416Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 5db47a19a99f07b8908a3a32284314acf80b90510e872aff531f40635880c750 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.22/rstudio-workbench-0.5.22.tgz + version: 0.5.22 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.07.1-554.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.1-554.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: bionic-2022.07.1-554.pro3 + created: "2022-09-23T13:56:28.012829126Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 01942cc86fd9e88b4cc26365195e9260ed39339707fedc60660b9bd689fca032 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.21/rstudio-workbench-0.5.21.tgz + version: 0.5.21 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.07.1-554.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.1-554.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: bionic-2022.07.1-554.pro3 + created: "2022-09-15T11:34:26.150307884Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 37be56e5e23d1d3923c8286c71dca93b3cde5150ed1735a4531bcb0cbe560540 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.20/rstudio-workbench-0.5.20.tgz + version: 0.5.20 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.07.1-554.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.1-554.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.1-554.pro3 + created: "2022-08-15T19:18:32.502233623Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: eb0af38aaa9a56604e253c638278dc97a18b9a4d3bf4f349256263750a5fa09c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.19/rstudio-workbench-0.5.19.tgz + version: 0.5.19 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.07.1-554.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.07.1-554.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.07.1-554.pro3 + created: "2022-08-09T12:27:07.83290331Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: d76a065e9b9fdd4ae4bfe3dca478febe2f8b2bc9fbc32baba7482e14fb3bf8e2 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.18/rstudio-workbench-0.5.18.tgz + version: 0.5.18 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.3-492.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.3-492.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.3-492.pro3 + created: "2022-07-13T18:07:08.937230346Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.23 + description: Official Helm chart for RStudio Workbench + digest: 9e3a2a4dc40c1ee7fbf9f385f6aed47decfe6a8e0a0d59a96a22c0a4c433158a + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.17/rstudio-workbench-0.5.17.tgz + version: 0.5.17 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.3-492.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.3-492.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.3-492.pro3 + created: "2022-07-05T13:33:36.393767837Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Workbench + digest: 2561fb815d31ddb3e6ad98397e398b5c4f9b3e246194c0580093f89adab0b8fa + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.16/rstudio-workbench-0.5.16.tgz + version: 0.5.16 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.3-492.pro3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.3-492.pro3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.3-492.pro3 + created: "2022-06-22T20:59:18.451703518Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Workbench + digest: f58f8fc4b017bac2adb4a3491b5e67adfa4459b781a3328d01428794cd7d57a9 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.15/rstudio-workbench-0.5.15.tgz + version: 0.5.15 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.2+485.pro2 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.2+485.pro2 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.2-485.pro2 + created: "2022-05-27T17:07:47.446889161Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Workbench + digest: f9dce70d33ef2e2e4058b6de472898e91831f4025d6d567d3731b5c2a259deff + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.14/rstudio-workbench-0.5.14.tgz + version: 0.5.14 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.1-461.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.1-461.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.1-461.pro1 + created: "2022-05-27T12:52:58.967851987Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Workbench + digest: 9b2e2ea236eac883543223f3c1855f0f3cadc038087324d6e67efb96fdedfe2b + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.13/rstudio-workbench-0.5.13.tgz + version: 0.5.13 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.1-461.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.1-461.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.1-461.pro1 + created: "2022-05-26T16:12:18.396912933Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.22 + description: Official Helm chart for RStudio Workbench + digest: 73cececde75cfc69d23cc683426085bd8058de5df1a324f53dd2df4ea48d6a82 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.12/rstudio-workbench-0.5.12.tgz + version: 0.5.12 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.1-461.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.1-461.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.1-461.pro1 + created: "2022-04-12T21:35:30.063449614Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Workbench + digest: 16d02fe1cd6122d96f8d6808a8f414e0e9fea84a90c0aa7d3321cb49aa98be31 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.11/rstudio-workbench-0.5.11.tgz + version: 0.5.11 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.1-461.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.1-461.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.1-461.pro1 + created: "2022-04-05T12:53:49.708122014Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.21 + description: Official Helm chart for RStudio Workbench + digest: f3c9a4f7b92308a6700e38db349994cc3d0b66ebdbd66568c41d8064fd6a6e5c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.10/rstudio-workbench-0.5.10.tgz + version: 0.5.10 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2022.02.1-461.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2022.02.1-461.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2022.02.1-461.pro1 + created: "2022-04-05T11:48:45.699438453Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: fdaf8d6adaa04250abad1f134b4f80740a259d8e1b11561073ed12daa4e73fd6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.9/rstudio-workbench-0.5.9.tgz + version: 0.5.9 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.2-382.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.2-382.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.2-382.pro1 + created: "2022-02-18T19:27:17.692960277Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: 09f39045c8bda741ec45ecb05858d511296bd4e96a7ed487beb2c39b89aa2a3e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.8/rstudio-workbench-0.5.8.tgz + version: 0.5.8 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.2-382.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.2-382.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.2-382.pro1 + created: "2022-02-09T19:15:01.145255312Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: 8878ffc38b384d93e5865b0919ade831ff65d9392cc453f2a2afdde393bcf3f4 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.7/rstudio-workbench-0.5.7.tgz + version: 0.5.7 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.2-382.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.2-382.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.2-382.pro1 + created: "2022-01-20T14:55:41.634598455Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: 08e0950d3b8217af30e9baa98a5b38be0aab0bf39be5ef39ddf8b170127231cd + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.6/rstudio-workbench-0.5.6.tgz + version: 0.5.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-382.pro1 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-382.pro1 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.2-382.pro1 + created: "2022-01-20T10:18:05.371443749Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: d7bd6a28f3bf5211cfc0bf207b791d7db1aa38fa2c0c1a7250850b2de8942b22 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.5/rstudio-workbench-0.5.5.tgz + version: 0.5.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2022-01-12T21:48:13.003769281Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: d23e777da5cf4e7e91348ef135e923f78709a566665cc737ed382d976e3dd72e + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.4/rstudio-workbench-0.5.4.tgz + version: 0.5.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2022-01-06T15:05:25.28580355Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: 854ae129c33513b96b4d9e8aad50187f908d8d2572b1befb42532a0911b0e7ca + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.3/rstudio-workbench-0.5.3.tgz + version: 0.5.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2022-01-04T17:22:56.216714351Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.20 + description: Official Helm chart for RStudio Workbench + digest: 497bac55c319f50d532704133289375e8b038d7b92fa802fdeca864236186605 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.2/rstudio-workbench-0.5.2.tgz + version: 0.5.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-22T17:48:28.717526036Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.19 + description: Official Helm chart for RStudio Workbench + digest: 52e3662c22cd823eca2d835a90678b17cbea51484ffa9a42e6db8b66de18e3e3 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.1/rstudio-workbench-0.5.1.tgz + version: 0.5.1 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-16T21:54:26.313475478Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Workbench + digest: 5fe0b1cf79ff27527ec910234be3881bd1e9182de48aafc9e04088f2f073d188 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0/rstudio-workbench-0.5.0.tgz + version: 0.5.0 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-14T13:23:25.744393607Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Workbench + digest: 6d5ce066b073f3579c76dc8e98a1491e4c9facf15625d64c49400068f476e450 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc14/rstudio-workbench-0.5.0-rc14.tgz + version: 0.5.0-rc14 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-14T13:17:15.005073456Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Workbench + digest: 8a0a43011f9b57d76bbac66b38a563bd0a9a3578e9881d43371dce356c356293 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc13/rstudio-workbench-0.5.0-rc13.tgz + version: 0.5.0-rc13 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-07T17:24:20.658442569Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.18 + description: Official Helm chart for RStudio Workbench + digest: 61392a1e3c781f0aecf15ebc13589db30f436261eb6f22e03edb8919e2fbd123 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc12/rstudio-workbench-0.5.0-rc12.tgz + version: 0.5.0-rc12 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-03T23:20:38.067602762Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 7f39d4b8cdf0ccc9fb7663af2d193e2d9914863919f385e4b60ff57f22e22544 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc11/rstudio-workbench-0.5.0-rc11.tgz + version: 0.5.0-rc11 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-12-02T14:29:12.936349538Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 9e4f88265b7152a0d4b4e9913ed4d52a68f3674b1fd7a6fa30d1991f8016aab8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc10/rstudio-workbench-0.5.0-rc10.tgz + version: 0.5.0-rc10 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-30T21:47:16.013049974Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 5b598cf80f3108216d9683060211052fe5aa8a41d1a994f879c89cba4b631547 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc09/rstudio-workbench-0.5.0-rc09.tgz + version: 0.5.0-rc09 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-09T18:55:14.865030061Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: e8f433a7312eca45c37c8c7bf27c83ecbf773cb7e4b8dab1e62d42e620d1d877 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc08/rstudio-workbench-0.5.0-rc08.tgz + version: 0.5.0-rc08 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-09T18:35:27.439053545Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: cfc7cfbc942b25abe358e2fd5d746c4fbcd179b239e492bb5ecf1b86d9a1b109 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc07/rstudio-workbench-0.5.0-rc07.tgz + version: 0.5.0-rc07 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-09T15:57:56.987603131Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 35b4e53003b2df0a985e862176f2100bbc4c160451e6e73a84d8917de62274f6 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc06/rstudio-workbench-0.5.0-rc06.tgz + version: 0.5.0-rc06 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-09T15:00:11.936196712Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 259037b7e8ddc59c9591833d43b67b34070089f92af939bc49915cc7b5d10da8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc05/rstudio-workbench-0.5.0-rc05.tgz + version: 0.5.0-rc05 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-04T19:58:13.351898975Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: bc6409c40f800f605ea0e44d57a90dc92a4e28fc0506c6f75e73912a07fe0102 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc04/rstudio-workbench-0.5.0-rc04.tgz + version: 0.5.0-rc04 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-04T13:25:49.335390657Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: 715d68f10eede2b7f0a04b42237eeefd686e7f4d50387866511d664777015735 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc03/rstudio-workbench-0.5.0-rc03.tgz + version: 0.5.0-rc03 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-03T20:34:38.460400049Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.17 + description: Official Helm chart for RStudio Workbench + digest: d0c9bb156bb30545de7047712334f873bcb6cdd3891ab4dac655e7736406784c + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc02/rstudio-workbench-0.5.0-rc02.tgz + version: 0.5.0-rc02 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:2021.09.0-351.pro6 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-2021.09.0-351.pro6 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 2021.09.0-351.pro6 + created: "2021-11-01T18:40:29.648231618Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Workbench + digest: 2c0c51b46fb06ab9e1753f8968d95c50e62febce0bf49c3e5cf0631b24a39d98 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.5.0-rc01/rstudio-workbench-0.5.0-rc01.tgz + version: 0.5.0-rc01 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-10-20T01:11:41.25694488Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Workbench + digest: f873b65ba91f7a8180ac6bed2d5cd2e316649444aa4f9b199e420de343a4efdc + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.6/rstudio-workbench-0.4.6.tgz + version: 0.4.6 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-10-19T16:53:38.532705816Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.16 + description: Official Helm chart for RStudio Workbench + digest: ed36cbb02ccabcd907981bfee6576272ac269a0d4928ba33020d6fc23ba778b8 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.5/rstudio-workbench-0.4.5.tgz + version: 0.4.5 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-09-22T16:33:07.893317678Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.15 + description: Official Helm chart for RStudio Workbench + digest: 5c65a6966987487cc39776ae0f19bd9f1e341218c14ff4c027105483b4c41d40 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.4/rstudio-workbench-0.4.4.tgz + version: 0.4.4 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-09-10T18:16:50.101379139Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: Official Helm chart for RStudio Workbench + digest: d026601e261cb54ee572af2fabe55c48bd638163c78d8b191476d28cdb7d5585 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.3/rstudio-workbench-0.4.3.tgz + version: 0.4.3 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: Docker Images + url: https://github.com/rstudio/rstudio-docker-products + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-09-01T12:57:31.724789862Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: Official Helm chart for RStudio Workbench + digest: 3418c30da2ef4be0f8d16e912dd335cdda32c698047d569e65db9a9c3d5a4681 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.2/rstudio-workbench-0.4.2.tgz + version: 0.4.2 + - annotations: + artifacthub.io/images: | + - name: rstudio-workbench + image: rstudio/rstudio-workbench:1.4.1717-3 + - name: r-session-complete + image: rstudio/r-session-complete:bionic-1.4.1717-3 + artifacthub.io/license: MIT + artifacthub.io/links: | + - name: RStudio Community + url: https://community.rstudio.com/c/r-admin/5 + - name: About Workbench + url: https://www.rstudio.com/products/workbench/ + - name: About RStudio Team + url: https://www.rstudio.com/products/team/ + apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-19T20:17:31.537866317Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.14 + description: Official Helm chart for RStudio Workbench + digest: 7c385d6fdc5ace71fbf5c83437ca2b6850e9a2fc4bfd01799d944e19bce86d18 + home: https://www.rstudio.com + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + keywords: + - data science + - machine learning + - r + - rstats + - python + - ide + - editor + - jupyter + - vscode + - rstudio + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + sources: + - https://github.com/rstudio/helm + - https://github.com/rstudio/rstudio-docker-products + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.1/rstudio-workbench-0.4.1.tgz + version: 0.4.1 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-16T21:07:03.821194194Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13 + description: Kubernetes deployment for RStudio Workbench + digest: 2365a8deaa67d360c319ad5a078132ea8b15599d4e61aef8f12ea5264a7fcb45 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0/rstudio-workbench-0.4.0.tgz + version: 0.4.0 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-16T20:17:46.238273816Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: d8b6f5499b86102c8d97ad120b1405e599453f73fa5a917a27c548cfc562049c + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc16/rstudio-workbench-0.4.0-rc16.tgz + version: 0.4.0-rc16 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-12T16:37:06.662248212Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: 7d79813d0eb78c5cb597e9ca01de7a959f1713bef96f5cd29fef1ed1037cea0f + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc15/rstudio-workbench-0.4.0-rc15.tgz + version: 0.4.0-rc15 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-10T18:14:35.814406862Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: 8331a4306becd14b21727b915d5c0ab0faf49c424829b7cf614a42baf9642de6 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc13/rstudio-workbench-0.4.0-rc13.tgz + version: 0.4.0-rc13 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-09T19:24:56.192511445Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: c6496002188f3bce04bd07add0824cd9213397ee38e264b29fba8036e5062e85 + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc12/rstudio-workbench-0.4.0-rc12.tgz + version: 0.4.0-rc12 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-09T17:42:43.539532065Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: 7eb95ee2305c6ac1a46b35cd78c8eaa8a14740c9fc18b515c01c9bf289599b1c + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc11/rstudio-workbench-0.4.0-rc11.tgz + version: 0.4.0-rc11 + - apiVersion: v2 + appVersion: 1.4.1717-3 + created: "2021-08-06T15:31:21.163177672Z" + dependencies: + - name: rstudio-library + repository: file://../rstudio-library + version: 0.1.13-rc01 + description: Kubernetes deployment for RStudio Workbench + digest: 7a9d021fab34781bdb3f3d80c3ba78f5d8ed4ff1cd368feccb8138a8cad1ac7a + icon: https://rstudio.com/wp-content/uploads/2018/10/RStudio-Logo-Flat.png + maintainers: + - email: docker@rstudio.com + name: sol-eng + url: https://github.com/sol-eng + name: rstudio-workbench + urls: + - https://github.com/rstudio/helm/releases/download/rstudio-workbench-0.4.0-rc09/rstudio-workbench-0.4.0-rc09.tgz + version: 0.4.0-rc09 +generated: "2024-05-07T21:04:09.132811364Z" diff --git a/listings.json b/listings.json deleted file mode 100644 index a974d633..00000000 --- a/listings.json +++ /dev/null @@ -1,52 +0,0 @@ -[ - { - "listing": "/examples/package-manager/index.html", - "items": [ - "/examples/package-manager/container-images/private-images.html", - "/examples/package-manager/container-images/custom-images.html", - "/examples/package-manager/storage/s3.html", - "/examples/package-manager/ingress/gce.html", - "/examples/package-manager/ingress/nginx.html", - "/examples/package-manager/ingress/traefik.html", - "/examples/package-manager/storage/additional-volumes.html", - "/examples/package-manager/ingress/aws-alb.html", - "/examples/package-manager/ingress/azure-gateway.html", - "/examples/package-manager/storage/nfs-pv.html" - ] - }, - { - "listing": "/examples/connect/index.html", - "items": [ - "/examples/connect/container-images/private-images.html", - "/examples/connect/container-images/custom-images.html", - "/examples/connect/auth/oidc.html", - "/examples/connect/application-configuration/index.html", - "/examples/connect/auth/saml.html", - "/examples/connect/ingress/gce.html", - "/examples/connect/ingress/nginx.html", - "/examples/connect/ingress/traefik.html", - "/examples/connect/storage/additional-volumes.html", - "/examples/connect/ingress/aws-alb.html", - "/examples/connect/ingress/azure-gateway.html", - "/examples/connect/storage/nfs-pv.html", - "/examples/connect/beta-migration/index.html" - ] - }, - { - "listing": "/examples/workbench/index.html", - "items": [ - "/examples/workbench/container-images/private-images.html", - "/examples/workbench/container-images/custom-images.html", - "/examples/workbench/auth-user-provisioning/oidc.html", - "/examples/workbench/application-configuration/index.html", - "/examples/workbench/auth-user-provisioning/saml.html", - "/examples/workbench/ingress/gce.html", - "/examples/workbench/ingress/nginx.html", - "/examples/workbench/ingress/traefik.html", - "/examples/workbench/storage/additional-volumes.html", - "/examples/workbench/ingress/aws-alb.html", - "/examples/workbench/ingress/azure-gateway.html", - "/examples/workbench/storage/nfs-pv.html" - ] - } -] \ No newline at end of file diff --git a/robots.txt b/robots.txt deleted file mode 100644 index a62f94a4..00000000 --- a/robots.txt +++ /dev/null @@ -1 +0,0 @@ -Sitemap: https://helm.rstudio.com/sitemap.xml diff --git a/scripts/rebuild.sh b/scripts/rebuild.sh new file mode 100755 index 00000000..89f346f5 --- /dev/null +++ b/scripts/rebuild.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +# Run this script from the root of the helm repo, e.g., +# ./scripts/rebuild.sh. You must have curl and cr installed. See +# https://github.com/helm/chart-releaser#installation. + +# Set this to a valid URL *without* an index.yaml if you want to regenerate +# a new index.html. If you want to append to an existing one, you can +# use a real address like `https://helm.rstudio.com`. If an existing +# index.yaml is found at this URL, then any packages we generate will +# be appended, which can result in duplicates. +HELM_REPO=${HELM_REPO:-https://rstudio.com} + +# Create a temporary directory and clean it up when we're done. +TMP_DIR=$(mktemp -d) +function cleanup() +{ + echo "Removing temporary directory ${TMP_DIR}." + rm -rf $TMP_DIR +} +trap cleanup EXIT + +# Optional variables you can define in your env +PACKAGE_DIR=${PACKAGE_DIR:-${TMP_DIR}} +CHARTS_DIR=${CHARTS_DIR:-charts} +INDEX=${INDEX:-index.yaml} +GITHUB_OWNER=${GITHUB_OWNER:-rstudio} +GITHUB_REPO=${GITHUB_REPO:-helm} + +# Calculated variables +DOWNLOADS_BASE="https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download" + +# List all tags oldest to newest, followed by the 'main' branch. +tags="$(git tag -l --sort=creatordate) main" + +# Clean the packages release directory that `cr` uses. +mkdir -p ${PACKAGE_DIR} +rm -rf ${PACKAGE_DIR}/* + +# Download existing assets from Github +for tag in $tags; do + dl_url="${DOWNLOADS_BASE}/${tag}/${tag}.tgz" + cd ${PACKAGE_DIR} + curl -LOs --fail ${dl_url} + result=$? + if [[ ${result} -eq 0 ]]; then + echo "Downloaded $dl_url". + else + echo "Could not download $dl_url". + fi + cd - +done + +echo "Writing index to ${INDEX}" +rm ${INDEX} +cr index --owner ${GITHUB_OWNER} --git-repo ${GITHUB_REPO} --charts-repo ${HELM_REPO} -p ${PACKAGE_DIR} -i ${INDEX} diff --git a/search.json b/search.json deleted file mode 100644 index 167641f2..00000000 --- a/search.json +++ /dev/null @@ -1,3462 +0,0 @@ -[ - { - "objectID": "examples/workbench/storage/nfs-pv.html", - "href": "examples/workbench/storage/nfs-pv.html", - "title": "Configuring Posit Workbench with an NFS-backed PersistentVolume", - "section": "", - "text": "Configuring Posit Workbench with an NFS-backed PersistentVolume\nThis example deploys Posit Workbench with a single PersistentVolume backed by an NFS server.\nThe PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Workbench then takes advantage of when it creates its PersistentVolumeClaim.\nsharedStorage is not needed in this example as config.server.rserver.conf.server-shared-storage-path is set to put the required shared storage folder in /home\nBoth the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\nhomeStorage:\n create: true\n mount: true\n storageClassName: \"nfs-workbench-home-pv\" # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.\n requests:\n storage: 100G\n\n# This is evaluated as a template\n# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup\nextraObjects:\n - |\n apiVersion: v1\n kind: PersistentVolume\n metadata:\n name: nfs-workbench-home-pv\n annotations:\n \"helm.sh/resource-policy\": keep\n spec:\n capacity:\n storage: {{ .Values.homeStorage.requests.storage }}\n volumeMode: Filesystem\n accessModes:\n - ReadWriteMany\n persistentVolumeReclaimPolicy: Retain\n storageClassName: nfs-workbench-home-pv\n mountOptions:\n - rw\n - lookupcache=pos\n - vers=4\n nfs:\n path: /\n server: nfs.server.example.com\n\nconfig:\n server:\n rserver.conf:\n server-shared-storage-path: /home/rstudio-shared-storage/\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/ingress/traefik.html", - "href": "examples/workbench/ingress/traefik.html", - "title": "Configuring Posit Workbench with a Traefik Ingress", - "section": "", - "text": "Configuring Posit Workbench with a Traefik Ingress\nThis example deploys Posit Workbench with an Ingress using the Traefik Ingress Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\ningress:\n enabled: true\n ingressClassName: \"traefik\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n hosts:\n - host: workbench.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.\n - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - workbench.example.com # TODO: Change to your domain\n\nservice:\n annotations:\n traefik.ingress.kubernetes.io/service.sticky.cookie: \"true\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.name: posit-workbench\n traefik.ingress.kubernetes.io/service.sticky.cookie.secure: \"true\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.samesite: \"none\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.httponly: \"true\"\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/ingress/gce.html", - "href": "examples/workbench/ingress/gce.html", - "title": "Configuring Posit Workbench with a GKE Ingress", - "section": "", - "text": "Configuring Posit Workbench with a GKE Ingress\nThis example deploys Posit Workbench with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.\nThe GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\ningress:\n enabled: true\n annotations:\n kubernetes.io/ingress.class: gce # Note ingress.ingressClassName cannot be used for gce, it must be supplied as an annotation.\n kubernetes.io/ingress.global-static-ip-name: workbench-static-ip # TODO: Change to your static IP name \n networking.gke.io/managed-certificates: workbench-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name (example created in extraObjects below)\n networking.gke.io/v1beta1.FrontendConfig: workbench-frontend-config\n kubernetes.io/ingress.allow-http: \"true\" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301\n hosts:\n - host: workbench.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager, GCP Certificage Manager, or another automatic TLS certificate manager.\n - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - workbench.example.com # TODO: Change to your domain\n\nservice:\n annotations:\n cloud.google.com/backend-config: '{\"ports\": {\"http\":\"workbench-backend-config\"}}'\n\n# GCE uses custom resources to configure the load balancer/service\nextraObjects:\n - apiVersion: networking.gke.io/v1beta1\n kind: FrontendConfig\n metadata:\n name: workbench-frontend-config\n spec:\n redirectToHttps:\n enabled: true\n responseCodeName: MOVED_PERMANENTLY_DEFAULT\n - apiVersion: cloud.google.com/v1\n kind: BackendConfig\n metadata:\n name: workbench-backend-config\n spec:\n timeoutSec: 60\n sessionAffinity:\n affinityType: \"GENERATED_COOKIE\" \n affinityCookieTtlSec: 86400\n healthCheck:\n checkIntervalSec: 15\n timeoutSec: 5\n healthyThreshold: 1\n unhealthyThreshold: 3\n type: HTTP\n requestPath: \"/health-check\"\n port: 8787\n - apiVersion: networking.gke.io/v1\n kind: ManagedCertificate\n metadata:\n name: workbench-managed-cert\n spec:\n domains:\n # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object\n # Please note that wildcard domains are NOT allowed\n - workbench.example.com \n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/ingress/aws-alb.html", - "href": "examples/workbench/ingress/aws-alb.html", - "title": "Configuring Posit Workbench with an AWS ALB Ingress", - "section": "", - "text": "Configuring Posit Workbench with an AWS ALB Ingress\nThis example deploys Posit Workbench with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB). This example is provided to show how to set annotations to enable session affinity, redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.\nThe AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\ningress:\n enabled: true\n ingressClassName: \"alb\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=86400\n alb.ingress.kubernetes.io/target-type: ip # target-type: ip is required to work with sticky sessions\n alb.ingress.kubernetes.io/listen-ports: '[{\"HTTP\": 80}, {\"HTTPS\":443}]'\n alb.ingress.kubernetes.io/ssl-redirect: '443'\n alb.ingress.kubernetes.io/scheme: internet-facing # TODO: Set to internet-facing or internal\n alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs\n hosts:\n - host: workbench.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using AWS Certificate Manager, cert-manager, or another automatic TLS certificate manager.\n - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - workbench.example.com # TODO: Change to your domain\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/container-images/custom-images.html", - "href": "examples/workbench/container-images/custom-images.html", - "title": "Configuring Posit Workbench with Custom Container Images", - "section": "", - "text": "Configuring Posit Workbench with Custom Container Images\nThis example deploys Posit Workbench using custom images instead of the default public Posit provided images.\nBoth the Workbench service and session container images may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images.\nThe default public images are on Docker Hub:\nWorkbench service: rstudio/rstudio-workbench Workbench sessions: rstudio/r-session-complete\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\nimage:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/rstudio-workbench\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\nsession:\n image:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/r-session-complete\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/auth-user-provisioning/oidc.html", - "href": "examples/workbench/auth-user-provisioning/oidc.html", - "title": "Configuring Posit Workbench with OpenID Connect", - "section": "", - "text": "Configuring Posit Workbench with OpenID Connect\nThis example deploys Posit Workbench using OpenID Connect (OIDC) SSO for authentication and sssd for user provisioning.\nUsers will be authenticated via SSO (using OIDC) and Workbench will match a claim (preferred_username by default) to a Linux user account in the Workbench container. sssd is already running in the Workbench container and can be used to automatically provision local user accounts using LDAP or Active Directory.\nSee the OpenID Connect Authentication section of the Workbench Admin Guide for more details.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\nconfig:\n server:\n rserver.conf:\n auth-openid: 1\n auth-openid-issuer: https://login.example.com # TODO: Change to match your IdP\n auth-openid-username-claim: preferred_username # TODO: Verify this works with your IdP. This claim must match the Linux account usernames.\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>.\n openid-client-secret:\n client-id: lllllllllllll-xxxxxxxxxxxxxxxxxxxxxx # TODO: Change to your client-id\n client-secret: BhCC6rK7Sj2ZtPH0ord7lO1w # TODO: Change to your client-secret\n # TODO: Fill out the details of sssd.conf for your specific AD/LDAP setup. sssd is already present in the Workbench image.\n userProvisioning:\n example.com.conf:\n sssd:\n config_file_version: 2\n services: nss, pam\n domains: example.com\n domain/example.com:\n debug_level: 6\n id_provider: ldap\n auth_provider: ldap\n chpass_provider: none\n sudo_provider: none\n access_provider: ldap\n enumerate: true\n cache_credentials: false\n ldap_schema: rfc2307bis\n ldap_uri: ldaps://ldap.example.com\n ldap_search_base: ou=users,dc=example,dc=com\n ldap_user_search_base: ou=users,dc=example,dc=com\n ldap_user_object_class: inetOrgPerson\n ldap_user_name: username\n override_homedir: /mnt/home/%u\n ldap_group_search_base: ou=roles,dc=example,dc=com\n ldap_group_name: cn\n ldap_id_use_start_tls: true\n ldap_tls_reqcert: never\n ldap_tls_cacert: /etc/ssl/certs/ca-certificates.crt\n ldap_default_bind_dn: cn=bind-account,ou=users,dc=example,dc=com\n ldap_default_authtok: placeholder\n ldap_access_filter: (objectClass=inetOrgPerson)\n default_shell: /bin/bash\n ldap_access_order: filter\n ldap_user_uid_number: uidNumber\n ldap_user_gid_number: gidNumber" - }, - { - "objectID": "examples/package-manager/storage/s3.html", - "href": "examples/package-manager/storage/s3.html", - "title": "Configuring Posit Package Manager with S3", - "section": "", - "text": "Configuring Posit Package Manager with S3\nThis example deploys Posit Package Manager using S3 instead of using sharedStorage with a PersistentVolume and PersistentVolumeClaim.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\nserviceAccount:\n annotations:\n # Specify your specific IAM role below\n # https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html\n eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here # TODO: Change to your IAM role ARN\n\nconfig:\n Storage:\n Default: s3\n S3Storage:\n Bucket: bucket-name-here # TODO: Change to your bucket name\n Region: us-east-1 # TODO: Change to your region\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/storage/additional-volumes.html", - "href": "examples/package-manager/storage/additional-volumes.html", - "title": "Configuring Posit Package Manager with additional volumes", - "section": "", - "text": "Configuring Posit Package Manager with additional volumes\nThis example shows how to mount a ConfigMap to the Package Manager pod. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# This section is used to mount to the Package Manager container which is\n# often used to add in additional configuration and TLS certificates\npod:\n volumeMounts:\n - mountPath: /etc/pm-certs # TODO: Change to your desired mount path\n name: ldap-certificate # TODO: Change to match the volume name below\n volumes:\n - name: ldap-certificate # TODO: Change to match the volumeMounts name above\n # Can be any type of volume... persistentVolumeClaim, configMap, etc.\n # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired\n configMap:\n name: pm-ldap-certificate # TODO: Change to match your ConfigMap name\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/ingress/nginx.html", - "href": "examples/package-manager/ingress/nginx.html", - "title": "Configuring Posit Package Manager with a NGINX Ingress", - "section": "", - "text": "Configuring Posit Package Manager with a NGINX Ingress\nThis example deploys Posit Package Manager with an Ingress using the Ingress NGINX Controller.\nThe Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.\n\n\n\n\n\n\nNote\n\n\n\nThis example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.\n\n\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"nginx\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n hosts:\n - host: packagemanager.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - packagemanager.example.com # TODO: Change to your domain\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/ingress/azure-gateway.html", - "href": "examples/package-manager/ingress/azure-gateway.html", - "title": "Configuring Posit Package Manager with an Azure Application Gateway", - "section": "", - "text": "Configuring Posit Package Manager with an Azure Application Gateway\nThis example deploys Posit Package Manager with an Ingress using the Azure Application Gateway Ingress Controller to create a Azure Application Gateway load balancer. This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS.\nThe Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"azure-application-gateway\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n appgw.ingress.kubernetes.io/ssl-redirect: \"true\"\n hosts:\n - host: packagemanager.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - packagemanager.example.com # TODO: Change to your domain\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/container-images/private-images.html", - "href": "examples/package-manager/container-images/private-images.html", - "title": "Configuring Posit Package Manager to Access Image Registries Requiring Authentication", - "section": "", - "text": "Configuring Posit Package Manager to Access Image Registries Requiring Authentication\nThis example deploys RStudio Package Manager using custom images in registries requiring authentication instead of the default public Posit provided images.\nThe image can be pulled from your own container registry instead of the public Posit provided image. This example shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg\nThe default public images are on Docker Hub:\nPackage Manager: rstudio/rstudio-package-manager\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\nimage:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/rstudio-package-manager\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n imagePullSecrets:\n - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/connect/storage/nfs-pv.html", - "href": "examples/connect/storage/nfs-pv.html", - "title": "Configuring Posit Connect with an NFS-backed PersistentVolume", - "section": "", - "text": "Configuring Posit Connect with an NFS-backed PersistentVolume\nThis example deploys Posit Connect with a single PersistentVolume backed by an NFS server.\nThe PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Connect then takes advantage of when it creates its PersistentVolumeClaim.\nBoth the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: \"nfs-connect-sharedstorage-pv\" # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.\n requests:\n storage: 100G\n\n# This is evaluated as a template\n# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup\nextraObjects:\n - |\n apiVersion: v1\n kind: PersistentVolume\n metadata:\n name: nfs-connect-sharedstorage-pv\n annotations:\n \"helm.sh/resource-policy\": keep\n spec:\n capacity:\n storage: {{ .Values.sharedStorage.requests.storage }}\n volumeMode: Filesystem\n accessModes:\n - ReadWriteMany\n persistentVolumeReclaimPolicy: Retain\n storageClassName: nfs-connect-sharedstorage-pv\n mountOptions:\n - rw\n - lookupcache=pos\n - vers=4\n nfs:\n path: /\n server: nfs.server.example.com\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/ingress/traefik.html", - "href": "examples/connect/ingress/traefik.html", - "title": "Configuring Posit Connect with a Traefik Ingress", - "section": "", - "text": "Configuring Posit Connect with a Traefik Ingress\nThis example deploys Posit Connect with an Ingress using the Traefik Ingress Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"traefik\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n hosts:\n - host: connect.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - connect.example.com # TODO: Change to your domain\n\nservice:\n # Required to set session affinity\n annotations: \n traefik.ingress.kubernetes.io/service.sticky.cookie: \"true\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.name: posit-connect\n traefik.ingress.kubernetes.io/service.sticky.cookie.secure: \"true\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.samesite: \"none\"\n traefik.ingress.kubernetes.io/service.sticky.cookie.httponly: \"true\"\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/ingress/gce.html", - "href": "examples/connect/ingress/gce.html", - "title": "Configuring Posit Connect with a GKE Ingress", - "section": "", - "text": "Configuring Posit Connect with a GKE Ingress\nThis example deploys Posit Connect with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.\nThe GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n annotations:\n kubernetes.io/ingress.class: gce # TODO: Fill in your desired ingress class for the ingress resource. Note ingress.ingressClassName cannot be used for GKE ingress, it must be supplied as an annotation.\n kubernetes.io/ingress.global-static-ip-name: connect-static-ip # TODO: Change to your static IP name \n networking.gke.io/managed-certificates: connect-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name\n networking.gke.io/v1beta1.FrontendConfig: connect-frontend-config\n kubernetes.io/ingress.allow-http: \"true\" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301\n hosts:\n - host: connect.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - connect.example.com # TODO: Change to your domain\n\nservice:\n annotations:\n cloud.google.com/backend-config: '{\"ports\": {\"http\":\"connect-backend-config\"}}'\n\nextraObjects:\n # GCE uses custom resources to configure the load balancer/service\n - apiVersion: networking.gke.io/v1beta1\n kind: FrontendConfig\n metadata:\n name: connect-frontend-config\n spec:\n redirectToHttps:\n enabled: true\n responseCodeName: MOVED_PERMANENTLY_DEFAULT\n - apiVersion: cloud.google.com/v1\n kind: BackendConfig\n metadata:\n name: connect-backend-config\n spec:\n timeoutSec: 60\n # Required for session affinity\n sessionAffinity:\n affinityType: \"GENERATED_COOKIE\" \n affinityCookieTtlSec: 86400\n - apiVersion: networking.gke.io/v1\n kind: ManagedCertificate\n metadata:\n name: connect-managed-cert\n spec:\n domains:\n # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object\n # Please note that wildcard domains are NOT allowed\n - connect.example.com \n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/ingress/aws-alb.html", - "href": "examples/connect/ingress/aws-alb.html", - "title": "Configuring Posit Connect with an AWS ALB Ingress", - "section": "", - "text": "Configuring Posit Connect with an AWS ALB Ingress\nThis example deploys Posit Connect with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB).\nThis example is provided to show how to set annotations to enabled session affinity, redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.\nThe AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"alb\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=86400 # required for session affinity\n alb.ingress.kubernetes.io/target-type: ip # target-type: ip is required to work with sticky sessions\n alb.ingress.kubernetes.io/listen-ports: '[{\"HTTP\": 80}, {\"HTTPS\":443}]'\n alb.ingress.kubernetes.io/ssl-redirect: '443'\n alb.ingress.kubernetes.io/scheme: internet-facing # internet-facing or internal\n alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs\n hosts:\n - host: connect.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - connect.example.com # TODO: Change to your domain\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/container-images/custom-images.html", - "href": "examples/connect/container-images/custom-images.html", - "title": "Configuring Posit Connect with Custom Container Images", - "section": "", - "text": "Configuring Posit Connect with Custom Container Images\nThis example deploys Posit Connect using custom images instead of the default public Posit provided images.\nThere are a minimum of three images that Connect requires to function in Off-Host Execution mode. They are listed below with their cooresponding default public repositories.\n\nConnect service container rstudio/rstudio-connect\nContent container rstudio/content-base\nContent init container rstudio/rstudio-connect-content-init\n\nThere are several content contents listed as execution enviornments by default on initial Connect startup based on the listing in the default-runtime.yaml file. Setting customRuntimeYaml will instead use the execution environments defined in that section instead of the default ones. Additional content containers may be added to provide more R, Python and Quarto versions and other system dependencies. See the Content Execution Environment section in the Connect Admin Guide for more details.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Define the custom image for the Connect pod(s)\nimage:\n repository: ghcr.io/rstudio/rstudio-connect # TODO: Change to match your custom image repository\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\nlauncher:\n enabled: true # Required for Off-Host Execution mode\n useTemplates: true\n # Define the custom image(s) for the content pod(s)\n # Note these are only used on the initial creation of the Connect cluster\n # with an empty database. Once Connect is running you should add environments\n # via the UI or Connect API. More information is available in the Admin Guide:\n # https://docs.posit.co/connect/admin/appendix/off-host/execution-environments\n customRuntimeYaml:\n name: \"Kubernetes\"\n images:\n # TODO: Add custom images based on the below template\n - name: ghcr.io/rstudio/content-base:r4.2.2-py3.11.3-ubuntu2204 # TODO: Change to match your custom image repository\n python:\n installations:\n -\n path: /opt/python/3.11.3/bin/python3 # TODO: Change to match the Python path available in your image\n version: 3.11.3 # TODO: Change to match the Python version available in your image\n r:\n installations:\n -\n path: /opt/R/4.2.2/bin/R # TODO: Change to match the R path available in your image\n version: 4.2.2 # TODO: Change to match the R version available in your image\n quarto:\n installations:\n - path: /opt/quarto/1.3.340/bin/quarto # TODO: Change to match the quarto path available in your image\n version: 1.3.340 # TODO: Change to match the Quarto version available in your image\n # Define the custom image(s) for the content pod(s) init container\n defaultInitContainer:\n repository: ghcr.io/rstudio/rstudio-connect-content-init # TODO: Change to match your custom image repository\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/auth/oidc.html", - "href": "examples/connect/auth/oidc.html", - "title": "Configuring Posit Connect with OpenID Connect", - "section": "", - "text": "Configuring Posit Connect with OpenID Connect\nThis example deploys Posit Connect using OpenID Connect (OIDC) SSO for authentication.\nUsers will be authenticated via SSO (using OIDC) and then users will be created in Connect upon first login or upon creation via the Connect API. Connect will populate user information based on certain claims received from the IdP. See the Customizing OpenID Connect section of the Connect Admin Guide for a list of the default claims mapping, which can be adjusted if needed.\nBy default all users get created with the Viewer role which is the default setting in Authorization.DefaultUserRole. Users can be automatically mapped to different roles based on group membership.\nSee the OpenID Connect Authentication section of the Connect Admin Guide for more details. The Connect Admin guide also has pages for integrations with specific IdPs such as Okta and Entra ID.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\nlauncher:\n enabled: true # Required for Off-Host Execution mode\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n Authentication:\n Provider: oauth2\n OAuth2:\n # please see https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/ for more examples of custom OIDC integrations\n # TODO: change the below to match your OIDC provider\n ClientId: \"0ebfafe9-237f-4e38-a85b-a0e5d6c06782\"\n ClientSecret: \"2ab7be07-84fe-4569-b04a-ce8f1ebfc077\"\n OpenIDConnectIssuer: \"https://example.com/issuer\"\n #\n # Enable this for a better user experience, unless\n # managing a large number of groups is a concern:\n # GroupsAutoProvision: true\n #\n # By default the following claims are mapped to the following values\n # in Connect. Uncomment and adjust the values below if your claims are\n # different.\n # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#customizing-openid-connect\n # UniqueIdClaim: \"sub\"\n # EmailClaim: \"email\"\n # FirstNameClaim: \"given_name\"\n # LastNameClaim: \"family_name\"\n # UsernameClaim: \"preferred_username\"\n # GroupsClaim: \"groups\"\n #\n # When troubleshooting an OpenID Connect problem, more verbose logging\n # is produced by uncommenting the following line:\n # Logging: true\n #\n # By default all users get created with the Viewer role which is the default\n # setting in Authorization.DefaultUserRole, which can be modified.\n # Users can be automatically mapped to different roles based on group\n # membership.\n # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#user-role-mapping\n #\n # Authorization:\n # UserRoleGroupMapping: true\n # PublisherRoleMapping: \"Developers\"\n # AdministratorRoleMapping: \"Administrators\"\n #\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "index.html#usage", - "href": "index.html#usage", - "title": "Posit Helm Charts", - "section": "Usage", - "text": "Usage\n\nInstall Helm. Please refer to the Helm documentation for more information on getting started.\nAdd the Posit Helm repository:\nhelm repo add rstudio https://helm.rstudio.com\nView charts:\nhelm search repo rstudio", - "crumbs": [ - "Overview" - ] - }, - { - "objectID": "examples/package-manager/index.html", - "href": "examples/package-manager/index.html", - "title": "Posit Package Manager Examples", - "section": "", - "text": "The examples in this directory provide a starting point for deploying Posit Package Manager in different configurations.\nEach example has a beginning description and a series of TODO comments. Before using an example, read through all the comments and ensure you address each TODO.\nWhile each example focuses on one or more particular configurations, Posit Package Manager has some standard requirements listed in each example.\nEach example will need the following to run correctly:\n\nPostgreSQL database specified in the Package Manager configuration\nLicense key or file specified\nsharedStorage or S3Storage configured\n\n\n\n\n\n\n\nContainer images\n\n\n\nConfiguring Posit Package Manager to Access Image Registries Requiring Authentication\n\n\nConfiguring Posit Package Manager with Custom Container Images\n\n\n\nStorage\n\n\n\nConfiguring Posit Package Manager with S3\n\n\nConfiguring Posit Package Manager with additional volumes\n\n\nConfiguring Posit Package Manager with an NFS-backed PersistentVolume\n\n\n\nIngress\n\n\n\nConfiguring Posit Package Manager with a GCE Ingress\n\n\nConfiguring Posit Package Manager with a NGINX Ingress\n\n\nConfiguring Posit Package Manager with a Traefik Ingress\n\n\nConfiguring Posit Package Manager with an AWS ALB Ingress\n\n\nConfiguring Posit Package Manager with an Azure Application Gateway\n\n\n\nNo matching items", - "crumbs": [ - "Posit Package Manager", - "Examples" - ] - }, - { - "objectID": "examples/connect/beta-migration/index.html", - "href": "examples/connect/beta-migration/index.html", - "title": "Off-Host Execution Beta User Migration", - "section": "", - "text": "The off-host execution beta moving to GA also moves your content from Bionic to Jammy by default. This will cause all content to get rebuilt. If all content being rebuilt is acceptable, then no further action is necessary.\nIf you prefer a phased approach to migration, you may continue using the bionic images for existing content and jammy images for new content.\n\nNote: All images used by existing content should be specified in either launcher.customRuntimeImages or launcher.additionalRuntimeImages. If content requires both bionic and jammy images, then you must use R source packages. Binary packages will not work when multiple OS distributions are used.\n\n\nIf you are currently using customRuntimeImages: 'base' (the default), use values-base.yaml as a reference for updating your values file.\nIf you are currently using customRuntimeImages: 'pro', use values-prod.yaml as a reference for updating your values file.\n\n\n\nThe values files in this directory contain overrides for the chart’s default runtime.yaml configurations. The v0.5.0 version of the rstudio-connect Helm chart contains a breaking change for users who are evaluating the Beta off-host execution feature set. v0.5.0 changes the default OS from bionic to jammy which is considered a breaking change for existing content.\nWhen migrating to the v0.5.0 release, beta users should be aware that the set of execution environments defined by launcher.customRuntimeYaml and launcher.additionalRuntimeImages will be used to “bootstrap” Connect’s database the first time Connect starts. Subsequent restarts of Connect will not modify the database, even when a runtimes.yaml configuration is defined.\nThese example values are for users that are evaluating the off-host execution feature set and have content currently deployed which depends on the default set of bionic images. They define the previous default set of bionic images in the launcher.additionalRuntimeImages section, but each image’s “matching” has been set to exact.\nAny new content that is building for the first time, or existing content that is re-building, will attempt to match against the new default set of jammy images. Content that has already been built with a bionic image can continue to execute with that image until it rebuilds. If an existing piece of content needs to be rebuilt and requires bionic for some reason, the Publisher must explicitly define a default execution environment for that content through the content-settings (access pane) on the dashboard or via the server API.\n\n\n\n\n\nvalues-base.yaml\n\n# -- A nested map of maps that generates the rstudio-connect.gcfg file\n# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)\nconfig:\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"CRAN\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"RSPM\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\nlauncher:\n # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to \"base\", which pulls in the default\n # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to \"pro\", will\n # pull in the \"pro\" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).\n # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments\n # the first time the server starts. If any execution environments already exist in the database, these values are ignored;\n # execution environments are not created or modified during subsequent restarts.\n customRuntimeYaml: \"base\"\n\n # Additional images to append to the end of the \"launcher.customRuntimeYaml\" (in the \"images\" key).\n # If `customRuntimeYaml` is a \"map\", then \"additionalRuntimeImages\" will only be used if it is a \"list\".\n # Bootstraps the previous default set of \"base\" bionic images with \"exact\" matching. This means they can still\n # be selected explicitly by the publisher.\n additionalRuntimeImages:\n - name: ghcr.io/rstudio/content-base:r3.1.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.1.3/bin/R\n version: 3.1.3\n - name: ghcr.io/rstudio/content-base:r3.2.5-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.2.5/bin/R\n version: 3.2.5\n - name: ghcr.io/rstudio/content-base:r3.3.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.3.3/bin/R\n version: 3.3.3\n - name: ghcr.io/rstudio/content-base:r3.4.4-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-base:r3.5.3-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-base:r3.6.3-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-base:r4.0.5-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-base:r4.0.5-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-base:r4.1.0-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-base:r4.1.3-py3.10.4-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.10.4/bin/python3\n version: 3.10.4\n r:\n installations:\n - path: /opt/R/4.1.3/bin/R\n version: 4.1.3\n quarto:\n installations:\n - path: /opt/quarto/bin/quarto\n version: 1.0.35\n\n\n\n\n\n\nvalues-pro.yaml\n\n# -- A nested map of maps that generates the rstudio-connect.gcfg file\n# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)\nconfig:\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"CRAN\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"RSPM\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\nlauncher:\n # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to \"base\", which pulls in the default\n # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to \"pro\", will\n # pull in the \"pro\" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).\n # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments\n # the first time the server starts. If any execution environments already exist in the database, these values are ignored;\n # execution environments are not created or modified during subsequent restarts.\n customRuntimeYaml: \"pro\"\n\n # Additional images to append to the end of the \"launcher.customRuntimeYaml\" (in the \"images\" key).\n # If `customRuntimeYaml` is a \"map\", then \"additionalRuntimeImages\" will only be used if it is a \"list\".\n # Bootstraps the previous default set of \"pro\" bionic images with \"exact\" matching. This means they must\n # be selected explicitly by the publisher.\n additionalRuntimeImages:\n - name: ghcr.io/rstudio/content-pro:r3.1.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.1.3/bin/R\n version: 3.1.3\n - name: ghcr.io/rstudio/content-pro:r3.2.5-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.2.5/bin/R\n version: 3.2.5\n - name: ghcr.io/rstudio/content-pro:r3.3.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.3.3/bin/R\n version: 3.3.3\n - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-pro:r3.5.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-pro:r3.5.3-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-pro:r4.1.3-py3.10.4-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.10.4/bin/python3\n version: 3.10.4\n r:\n installations:\n - path: /opt/R/4.1.3/bin/R\n version: 4.1.3\n quarto:\n installations:\n - path: /opt/quarto/bin/quarto\n version: 1.0.35" - }, - { - "objectID": "examples/connect/beta-migration/index.html#technical-details", - "href": "examples/connect/beta-migration/index.html#technical-details", - "title": "Off-Host Execution Beta User Migration", - "section": "", - "text": "The values files in this directory contain overrides for the chart’s default runtime.yaml configurations. The v0.5.0 version of the rstudio-connect Helm chart contains a breaking change for users who are evaluating the Beta off-host execution feature set. v0.5.0 changes the default OS from bionic to jammy which is considered a breaking change for existing content.\nWhen migrating to the v0.5.0 release, beta users should be aware that the set of execution environments defined by launcher.customRuntimeYaml and launcher.additionalRuntimeImages will be used to “bootstrap” Connect’s database the first time Connect starts. Subsequent restarts of Connect will not modify the database, even when a runtimes.yaml configuration is defined.\nThese example values are for users that are evaluating the off-host execution feature set and have content currently deployed which depends on the default set of bionic images. They define the previous default set of bionic images in the launcher.additionalRuntimeImages section, but each image’s “matching” has been set to exact.\nAny new content that is building for the first time, or existing content that is re-building, will attempt to match against the new default set of jammy images. Content that has already been built with a bionic image can continue to execute with that image until it rebuilds. If an existing piece of content needs to be rebuilt and requires bionic for some reason, the Publisher must explicitly define a default execution environment for that content through the content-settings (access pane) on the dashboard or via the server API." - }, - { - "objectID": "examples/connect/beta-migration/index.html#values-base.yaml", - "href": "examples/connect/beta-migration/index.html#values-base.yaml", - "title": "Off-Host Execution Beta User Migration", - "section": "", - "text": "values-base.yaml\n\n# -- A nested map of maps that generates the rstudio-connect.gcfg file\n# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)\nconfig:\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"CRAN\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"RSPM\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\nlauncher:\n # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to \"base\", which pulls in the default\n # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to \"pro\", will\n # pull in the \"pro\" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).\n # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments\n # the first time the server starts. If any execution environments already exist in the database, these values are ignored;\n # execution environments are not created or modified during subsequent restarts.\n customRuntimeYaml: \"base\"\n\n # Additional images to append to the end of the \"launcher.customRuntimeYaml\" (in the \"images\" key).\n # If `customRuntimeYaml` is a \"map\", then \"additionalRuntimeImages\" will only be used if it is a \"list\".\n # Bootstraps the previous default set of \"base\" bionic images with \"exact\" matching. This means they can still\n # be selected explicitly by the publisher.\n additionalRuntimeImages:\n - name: ghcr.io/rstudio/content-base:r3.1.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.1.3/bin/R\n version: 3.1.3\n - name: ghcr.io/rstudio/content-base:r3.2.5-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.2.5/bin/R\n version: 3.2.5\n - name: ghcr.io/rstudio/content-base:r3.3.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.3.3/bin/R\n version: 3.3.3\n - name: ghcr.io/rstudio/content-base:r3.4.4-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-base:r3.5.3-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-base:r3.6.3-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-base:r4.0.5-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-base:r4.0.5-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-base:r4.1.0-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-base:r4.1.0-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-base:r4.1.3-py3.10.4-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.10.4/bin/python3\n version: 3.10.4\n r:\n installations:\n - path: /opt/R/4.1.3/bin/R\n version: 4.1.3\n quarto:\n installations:\n - path: /opt/quarto/bin/quarto\n version: 1.0.35" - }, - { - "objectID": "examples/connect/beta-migration/index.html#values-pro.yaml", - "href": "examples/connect/beta-migration/index.html#values-pro.yaml", - "title": "Off-Host Execution Beta User Migration", - "section": "", - "text": "values-pro.yaml\n\n# -- A nested map of maps that generates the rstudio-connect.gcfg file\n# @default -- [RStudio Connect Configuration Reference](https://docs.rstudio.com/connect/admin/appendix/configuration/)\nconfig:\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"CRAN\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\n # Overrides the package URLs to use source packages which are required if the list\n # of execution environments contains multiple OS distributions.\n 'RPackageRepository \"RSPM\"':\n URL: https://packagemanager.rstudio.com/cran/latest\n\nlauncher:\n # -- Optional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to \"base\", which pulls in the default\n # runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to \"pro\", will\n # pull in the \"pro\" versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image).\n # Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments\n # the first time the server starts. If any execution environments already exist in the database, these values are ignored;\n # execution environments are not created or modified during subsequent restarts.\n customRuntimeYaml: \"pro\"\n\n # Additional images to append to the end of the \"launcher.customRuntimeYaml\" (in the \"images\" key).\n # If `customRuntimeYaml` is a \"map\", then \"additionalRuntimeImages\" will only be used if it is a \"list\".\n # Bootstraps the previous default set of \"pro\" bionic images with \"exact\" matching. This means they must\n # be selected explicitly by the publisher.\n additionalRuntimeImages:\n - name: ghcr.io/rstudio/content-pro:r3.1.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.1.3/bin/R\n version: 3.1.3\n - name: ghcr.io/rstudio/content-pro:r3.2.5-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.2.5/bin/R\n version: 3.2.5\n - name: ghcr.io/rstudio/content-pro:r3.3.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.3.3/bin/R\n version: 3.3.3\n - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-pro:r3.4.4-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.4.4/bin/R\n version: 3.4.4\n - name: ghcr.io/rstudio/content-pro:r3.5.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-pro:r3.5.3-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/3.5.3/bin/R\n version: 3.5.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py2.7.18-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/2.7.18/bin/python2.7\n version: 2.7.18\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r3.6.3-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/3.6.3/bin/R\n version: 3.6.3\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.6.13-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.6.13/bin/python3.6\n version: 3.6.13\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.7.10-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.7.10/bin/python3.7\n version: 3.7.10\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.0.5-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.0.5/bin/R\n version: 4.0.5\n - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.8.8-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.8.8/bin/python3.8\n version: 3.8.8\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-pro:r4.1.0-py3.9.2-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.9.2/bin/python3.9\n version: 3.9.2\n r:\n installations:\n - path: /opt/R/4.1.0/bin/R\n version: 4.1.0\n - name: ghcr.io/rstudio/content-pro:r4.1.3-py3.10.4-bionic\n matching: \"exact\"\n python:\n installations:\n - path: /opt/python/3.10.4/bin/python3\n version: 3.10.4\n r:\n installations:\n - path: /opt/R/4.1.3/bin/R\n version: 4.1.3\n quarto:\n installations:\n - path: /opt/quarto/bin/quarto\n version: 1.0.35" - }, - { - "objectID": "examples/rbac/README.html", - "href": "examples/rbac/README.html", - "title": "RBAC yaml examples", - "section": "", - "text": "The RBAC associated with the RStudio Job Launcher is maintained in the rstudio-library and rstudio-launcher-rbac helm charts.\nHowever, it is also maintained here in this directory by CI for ease of use. In order to generate these files from the chart, you can use:\nhelm repo add rstudio https://helm.rstudio.com\nhelm template -n rstudio rstudio-launcher-rbac rstudio/rstudio-launcher-rbac\n\nNOTE: the rstudio-workbench and rstudio-connect helm charts also use the rstudio-library chart to deploy their own RBAC\n\n\n\nThe rbac currently contains a ClusterRoleBinding, which requires a namespace reference.\nAs a result, even though we use --removeNamespaceReferences=true, the namespace persists on the ClusterRoleBiding. We use the rstudio namespace by default.\nPlease modify the namespace as needed for your installation." - }, - { - "objectID": "examples/rbac/README.html#important-note", - "href": "examples/rbac/README.html#important-note", - "title": "RBAC yaml examples", - "section": "", - "text": "The rbac currently contains a ClusterRoleBinding, which requires a namespace reference.\nAs a result, even though we use --removeNamespaceReferences=true, the namespace persists on the ClusterRoleBiding. We use the rstudio namespace by default.\nPlease modify the namespace as needed for your installation." - }, - { - "objectID": "charts/posit-chronicle/NEWS.html", - "href": "charts/posit-chronicle/NEWS.html", - "title": "Changelog", - "section": "", - "text": "Documentation site updates\n\n\n\n\n\nBump Chronicle to version 2024.03.0\nMoves pod.NodeSelector value to the top level as NodeSelector, in line with other charts\nDisable local storage by default\n\n\n\n\n\nUpdates to support standalone documentation site\n\n\n\n\n\nUpdate docs\n\n\n\n\n\nAdd values for pod.terminationGracePeriodSeconds and default image.imagePullPolicy = IfNotPresent\n\n\n\n\n\nInitial public release and integration into Posit’s Helm repository. Includes the new posit-chronicle chart, CI components, and documentation.", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section", - "href": "charts/posit-chronicle/NEWS.html#section", - "title": "Changelog", - "section": "", - "text": "Documentation site updates", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section-1", - "href": "charts/posit-chronicle/NEWS.html#section-1", - "title": "Changelog", - "section": "", - "text": "Bump Chronicle to version 2024.03.0\nMoves pod.NodeSelector value to the top level as NodeSelector, in line with other charts\nDisable local storage by default", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section-2", - "href": "charts/posit-chronicle/NEWS.html#section-2", - "title": "Changelog", - "section": "", - "text": "Updates to support standalone documentation site", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section-3", - "href": "charts/posit-chronicle/NEWS.html#section-3", - "title": "Changelog", - "section": "", - "text": "Update docs", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section-4", - "href": "charts/posit-chronicle/NEWS.html#section-4", - "title": "Changelog", - "section": "", - "text": "Add values for pod.terminationGracePeriodSeconds and default image.imagePullPolicy = IfNotPresent", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/posit-chronicle/NEWS.html#section-5", - "href": "charts/posit-chronicle/NEWS.html#section-5", - "title": "Changelog", - "section": "", - "text": "Initial public release and integration into Posit’s Helm repository. Includes the new posit-chronicle chart, CI components, and documentation.", - "crumbs": [ - "Posit Chronicle", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html", - "href": "charts/rstudio-pm/NEWS.html", - "title": "Changelog", - "section": "", - "text": "Documentation site updates\n\n\n\n\n\nUpdate default Posit Package Manager version to 2024.04.0-20\n\n\n\n\n\nUnset the [Server].Address default value as this can cause issues when serving from a domain name.\n\n\n\n\n\nUpdate default Posit Package Manager version to 2024.04.0-18\n\n\n\n\n\nAdd documentation on running the Chronicle Agent on version 2024.03.0 as a sidecar container\n\n\n\n\n\nUpdates to support standalone documentation site\n\n\n\n\n\nRemovedconfig.Server.RVersion from the values.yaml. This does not need to be configured, R version auto-detection will be used (#473).\n\n\n\n\n\nAdd option to set pod.terminationGracePeriodSeconds\n\n\n\n\n\nUpdate default Posit Package Manager version to 2023.12.0-13\n\n\n\n\n\nAdd licensing section to the README to provide guidance on using a license file, license key or license server.\n\n\n\n\n\nUpdate default Posit Package Manager version to 2023.08.4-20\n\n\n\n\n\nBump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true\n\n\n\n\n\n\nUpdate default Posit Package Manager version to 2023.08.0-16\n\n\n\n\n\nChange default operating system from bionic to ubuntu2204 (jammy)\n\nThis is not a breaking change since it does not affect how Package Manager serves packages\n\n\n\n\n\n\nAdd values for serviceAccount.labels\n\n\n\n\n\nAdd topologySpreadConstraints values\n\n\n\n\n\nAdd podDisruptionBudget values\n\n\n\n\n\nUpdate documentation and README for a bit more clarity\n\n\n\n\n\nUpdate default Posit Package Manager version to 2023.04.0-6\n\n\n\n\n\nRemove pod.nodeSelector value. It was not used before\n\n\n\n\n\nUpdate documentation to remove “beta” label and explain production recommendations\n\n\n\n\n\nBump rstudio-library to 0.1.24\n\nUpdate RBAC definiton to support listing of service accounts\n\n\n\n\n\n\nUpdate default Posit Package Manager version to 2022.11.4-20\n\n\n\n\n\nFix Package Manager default image reference\n\n\n\n\n\nAdd sharedStorage.volumeName for PVCs that reference a PV\nAdd sharedStorage.selector as well\n\n\n\n\n\nFix a bug in the image reference. Images now have an operating system reference\n\nAdd an image.tagPrefix value for configuring the (current) bionic- prefix\n\n\n\n\n\n\nUpdate default Posit Package Manager version to 2022.11.2-18\n\n\n\n\n\nUpdate default RStudio Package Manager version to 2022.07.2-11\nPackage Manager now runs as non-root by default and the default containerSecurityContext has been updated to reflect the permissions required to do so.\nThere is a new top-level enableSandboxing setting that gives users a direct way to disable sandboxing of Git builds, which reduces the Kubernetes security requirements and should allow the Package Manager chart to run on any non-OpenShift cluster without modification.\nTo handle the migration of existing data owned by root, there is now a Helm hook that essentially runs chown on the data directory every time a user runs helm upgrade. Unfortunately, we can’t detect when we actually need to run this migration, so it currently runs unconditionally. The rook only runs when a PersistentVolumeClaim is being used for Package Manager storage. The hook can be disabled by setting enableMigrations=false; in the future when we no longer expect users to have root-owned data, this will become the default.\nPackage Manager’s encryption key (if specified in rstudioPMKey) is now read from an environment variable rather than being mounted into the container. This sidesteps an issue where this file is owned as root when mounted by Kubernetes but Package Manager itself requires 0600 file permissions.\n\n\n\n\n\nBump rstudio-library chart version\n\n\n\n\n\nA Service Account is now created by default. This is primarily to facilitate better IAM security when using Package Manager with S3.\npod.serviceAccountName has been deprecated in favour of the new serviceAccount.name setting.\n\n\n\n\n\nPackage Manager now enables the bundled R version (which is required to use Git-backed packages) by default.\n\n\n\n\n\nAdd the ability to set annotations to the Persistent Volume Claim.\n\n\n\n\n\nAdd configuration values for the pod’s labels, affinity, nodeSelector, tolerations, and priorityClassName (##206).\n\n\n\n\n\nThe Package Manager container no longer runs as privileged by default. Instead, it uses stricter security settings with a smaller set of elevated privileges.\n\n\n\n\n\nUpdate rstudio-library chart version. Add support for lists in INI file sections.\n\n\n\n\n\nAdd securityContext for pod and container as documented here\n\n\n\n\n\nAdd extraContainers value. This allows adding a list of additional containers.\n\n\n\n\n\nAdd pod.lifecycle value. This allows running lifecycle hooks like postStart commands!\n\n\n\n\n\nUpdate default RStudio Package Manager version to 2022.04.0-7\n\n\n\n\n\nFix ingress definition issues with older Kubernetes clusters (##139)\n\n\n\n\n\nMake startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)\n\n\n\n\n\n\nUpdate default RStudio Package Manager version to 2021.12.0-3\n\n\n\n\n\nUpdate rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!\n\n\n\n\n\nBREAKING: The generated service will now have type ClusterIP by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.\n\n\n\n\n\nUpdate rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)\n\n\n\n\n\nAdd serviceMonitor values for use with a Prometheus Operator\n\n\n\n\n\nUpdate rstudio-library chart dependency\n\n\n\n\n\nBREAKING: change .image.pullPolicy to .image.imagePullPolicy for consistency with other charts\nAdd imagePullSecrets value option (##57)\n\n\n\n\n\nUpdate rstudio-library chart dependency\n\n\n\n\n\nUpdated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).\n\n\n\n\n\nUpdate rstudio-library dependency\n\n\n\n\n\nUpdate default RStudio Package Manager version to 2021.09.0-1\n\n\n\n\n\nUpdate rstudio-library dependency\n\n\n\n\n\nUpdate docs\n\n\n\n\n\nBreaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.\n\n\n\n\n\nFix product config values to make our default container work\n\nAdd Launcher.ServerUser=root and Launcher.AdminGroup=root\n\nBump RSPM version to 1.2.2.1-17\nUse appVersion from Chart.yaml and add versionOverride\n\n\n\n\n\nAdd LICENSE.md for clarity\n\n\n\n\n\nAdd ingress as an option\nAdd annotations to deployment so that the pods roll when config changes\n\n\n\n\n\nUpdate Package Manager version to 1.2.2-4\nUpdate docs\n\n\n\n\n\nChange naming convention\n\nThis fixes issues with namespacing\nHowever, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\nUse helm diff upgrade to ensure things are working as you expect before upgrading\n\n\n\n\n\n\nFix quoting\n\n\n\n\n\nAdd option for podAnnotations\n\n\n\n\n\nAdd autoNodePort parameter to allow auto-providing the node port\n\n\n\n\n\nRevert apiVersion back to v1 for working in helm2\n\n\n\n\n\nBREAKING: rename secret for managing AWS credentials\nAdd a secret for managing the rstudio-pm.key\nAdd a command and args configuration options\n\n\n\n\n\nAdd secret for managing AWS credentials\n\n\n\n\n\nInitial pass!", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section", - "href": "charts/rstudio-pm/NEWS.html#section", - "title": "Changelog", - "section": "", - "text": "Documentation site updates", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-1", - "href": "charts/rstudio-pm/NEWS.html#section-1", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2024.04.0-20", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-2", - "href": "charts/rstudio-pm/NEWS.html#section-2", - "title": "Changelog", - "section": "", - "text": "Unset the [Server].Address default value as this can cause issues when serving from a domain name.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-3", - "href": "charts/rstudio-pm/NEWS.html#section-3", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2024.04.0-18", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-4", - "href": "charts/rstudio-pm/NEWS.html#section-4", - "title": "Changelog", - "section": "", - "text": "Add documentation on running the Chronicle Agent on version 2024.03.0 as a sidecar container", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-5", - "href": "charts/rstudio-pm/NEWS.html#section-5", - "title": "Changelog", - "section": "", - "text": "Updates to support standalone documentation site", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-6", - "href": "charts/rstudio-pm/NEWS.html#section-6", - "title": "Changelog", - "section": "", - "text": "Removedconfig.Server.RVersion from the values.yaml. This does not need to be configured, R version auto-detection will be used (#473).", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-7", - "href": "charts/rstudio-pm/NEWS.html#section-7", - "title": "Changelog", - "section": "", - "text": "Add option to set pod.terminationGracePeriodSeconds", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-8", - "href": "charts/rstudio-pm/NEWS.html#section-8", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2023.12.0-13", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-9", - "href": "charts/rstudio-pm/NEWS.html#section-9", - "title": "Changelog", - "section": "", - "text": "Add licensing section to the README to provide guidance on using a license file, license key or license server.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-10", - "href": "charts/rstudio-pm/NEWS.html#section-10", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2023.08.4-20", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-11", - "href": "charts/rstudio-pm/NEWS.html#section-11", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-12", - "href": "charts/rstudio-pm/NEWS.html#section-12", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2023.08.0-16", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-13", - "href": "charts/rstudio-pm/NEWS.html#section-13", - "title": "Changelog", - "section": "", - "text": "Change default operating system from bionic to ubuntu2204 (jammy)\n\nThis is not a breaking change since it does not affect how Package Manager serves packages", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-14", - "href": "charts/rstudio-pm/NEWS.html#section-14", - "title": "Changelog", - "section": "", - "text": "Add values for serviceAccount.labels", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-15", - "href": "charts/rstudio-pm/NEWS.html#section-15", - "title": "Changelog", - "section": "", - "text": "Add topologySpreadConstraints values", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-16", - "href": "charts/rstudio-pm/NEWS.html#section-16", - "title": "Changelog", - "section": "", - "text": "Add podDisruptionBudget values", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-17", - "href": "charts/rstudio-pm/NEWS.html#section-17", - "title": "Changelog", - "section": "", - "text": "Update documentation and README for a bit more clarity", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-18", - "href": "charts/rstudio-pm/NEWS.html#section-18", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2023.04.0-6", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-19", - "href": "charts/rstudio-pm/NEWS.html#section-19", - "title": "Changelog", - "section": "", - "text": "Remove pod.nodeSelector value. It was not used before", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-20", - "href": "charts/rstudio-pm/NEWS.html#section-20", - "title": "Changelog", - "section": "", - "text": "Update documentation to remove “beta” label and explain production recommendations", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-21", - "href": "charts/rstudio-pm/NEWS.html#section-21", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.24\n\nUpdate RBAC definiton to support listing of service accounts", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-22", - "href": "charts/rstudio-pm/NEWS.html#section-22", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2022.11.4-20", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-23", - "href": "charts/rstudio-pm/NEWS.html#section-23", - "title": "Changelog", - "section": "", - "text": "Fix Package Manager default image reference", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-24", - "href": "charts/rstudio-pm/NEWS.html#section-24", - "title": "Changelog", - "section": "", - "text": "Add sharedStorage.volumeName for PVCs that reference a PV\nAdd sharedStorage.selector as well", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-25", - "href": "charts/rstudio-pm/NEWS.html#section-25", - "title": "Changelog", - "section": "", - "text": "Fix a bug in the image reference. Images now have an operating system reference\n\nAdd an image.tagPrefix value for configuring the (current) bionic- prefix", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-26", - "href": "charts/rstudio-pm/NEWS.html#section-26", - "title": "Changelog", - "section": "", - "text": "Update default Posit Package Manager version to 2022.11.2-18", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-27", - "href": "charts/rstudio-pm/NEWS.html#section-27", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Package Manager version to 2022.07.2-11\nPackage Manager now runs as non-root by default and the default containerSecurityContext has been updated to reflect the permissions required to do so.\nThere is a new top-level enableSandboxing setting that gives users a direct way to disable sandboxing of Git builds, which reduces the Kubernetes security requirements and should allow the Package Manager chart to run on any non-OpenShift cluster without modification.\nTo handle the migration of existing data owned by root, there is now a Helm hook that essentially runs chown on the data directory every time a user runs helm upgrade. Unfortunately, we can’t detect when we actually need to run this migration, so it currently runs unconditionally. The rook only runs when a PersistentVolumeClaim is being used for Package Manager storage. The hook can be disabled by setting enableMigrations=false; in the future when we no longer expect users to have root-owned data, this will become the default.\nPackage Manager’s encryption key (if specified in rstudioPMKey) is now read from an environment variable rather than being mounted into the container. This sidesteps an issue where this file is owned as root when mounted by Kubernetes but Package Manager itself requires 0600 file permissions.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-28", - "href": "charts/rstudio-pm/NEWS.html#section-28", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library chart version", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-29", - "href": "charts/rstudio-pm/NEWS.html#section-29", - "title": "Changelog", - "section": "", - "text": "A Service Account is now created by default. This is primarily to facilitate better IAM security when using Package Manager with S3.\npod.serviceAccountName has been deprecated in favour of the new serviceAccount.name setting.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-30", - "href": "charts/rstudio-pm/NEWS.html#section-30", - "title": "Changelog", - "section": "", - "text": "Package Manager now enables the bundled R version (which is required to use Git-backed packages) by default.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-31", - "href": "charts/rstudio-pm/NEWS.html#section-31", - "title": "Changelog", - "section": "", - "text": "Add the ability to set annotations to the Persistent Volume Claim.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-32", - "href": "charts/rstudio-pm/NEWS.html#section-32", - "title": "Changelog", - "section": "", - "text": "Add configuration values for the pod’s labels, affinity, nodeSelector, tolerations, and priorityClassName (##206).", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-33", - "href": "charts/rstudio-pm/NEWS.html#section-33", - "title": "Changelog", - "section": "", - "text": "The Package Manager container no longer runs as privileged by default. Instead, it uses stricter security settings with a smaller set of elevated privileges.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-34", - "href": "charts/rstudio-pm/NEWS.html#section-34", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. Add support for lists in INI file sections.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-35", - "href": "charts/rstudio-pm/NEWS.html#section-35", - "title": "Changelog", - "section": "", - "text": "Add securityContext for pod and container as documented here", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-36", - "href": "charts/rstudio-pm/NEWS.html#section-36", - "title": "Changelog", - "section": "", - "text": "Add extraContainers value. This allows adding a list of additional containers.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-37", - "href": "charts/rstudio-pm/NEWS.html#section-37", - "title": "Changelog", - "section": "", - "text": "Add pod.lifecycle value. This allows running lifecycle hooks like postStart commands!", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-38", - "href": "charts/rstudio-pm/NEWS.html#section-38", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Package Manager version to 2022.04.0-7", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-39", - "href": "charts/rstudio-pm/NEWS.html#section-39", - "title": "Changelog", - "section": "", - "text": "Fix ingress definition issues with older Kubernetes clusters (##139)", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-40", - "href": "charts/rstudio-pm/NEWS.html#section-40", - "title": "Changelog", - "section": "", - "text": "Make startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-41", - "href": "charts/rstudio-pm/NEWS.html#section-41", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Package Manager version to 2021.12.0-3", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-42", - "href": "charts/rstudio-pm/NEWS.html#section-42", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-43", - "href": "charts/rstudio-pm/NEWS.html#section-43", - "title": "Changelog", - "section": "", - "text": "BREAKING: The generated service will now have type ClusterIP by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-44", - "href": "charts/rstudio-pm/NEWS.html#section-44", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-45", - "href": "charts/rstudio-pm/NEWS.html#section-45", - "title": "Changelog", - "section": "", - "text": "Add serviceMonitor values for use with a Prometheus Operator", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-46", - "href": "charts/rstudio-pm/NEWS.html#section-46", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart dependency", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-47", - "href": "charts/rstudio-pm/NEWS.html#section-47", - "title": "Changelog", - "section": "", - "text": "BREAKING: change .image.pullPolicy to .image.imagePullPolicy for consistency with other charts\nAdd imagePullSecrets value option (##57)", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-48", - "href": "charts/rstudio-pm/NEWS.html#section-48", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart dependency", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-49", - "href": "charts/rstudio-pm/NEWS.html#section-49", - "title": "Changelog", - "section": "", - "text": "Updated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-50", - "href": "charts/rstudio-pm/NEWS.html#section-50", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library dependency", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-51", - "href": "charts/rstudio-pm/NEWS.html#section-51", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Package Manager version to 2021.09.0-1", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-52", - "href": "charts/rstudio-pm/NEWS.html#section-52", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library dependency", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-53", - "href": "charts/rstudio-pm/NEWS.html#section-53", - "title": "Changelog", - "section": "", - "text": "Update docs", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-54", - "href": "charts/rstudio-pm/NEWS.html#section-54", - "title": "Changelog", - "section": "", - "text": "Breaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-55", - "href": "charts/rstudio-pm/NEWS.html#section-55", - "title": "Changelog", - "section": "", - "text": "Fix product config values to make our default container work\n\nAdd Launcher.ServerUser=root and Launcher.AdminGroup=root\n\nBump RSPM version to 1.2.2.1-17\nUse appVersion from Chart.yaml and add versionOverride", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-56", - "href": "charts/rstudio-pm/NEWS.html#section-56", - "title": "Changelog", - "section": "", - "text": "Add LICENSE.md for clarity", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-57", - "href": "charts/rstudio-pm/NEWS.html#section-57", - "title": "Changelog", - "section": "", - "text": "Add ingress as an option\nAdd annotations to deployment so that the pods roll when config changes", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-58", - "href": "charts/rstudio-pm/NEWS.html#section-58", - "title": "Changelog", - "section": "", - "text": "Update Package Manager version to 1.2.2-4\nUpdate docs", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-59", - "href": "charts/rstudio-pm/NEWS.html#section-59", - "title": "Changelog", - "section": "", - "text": "Change naming convention\n\nThis fixes issues with namespacing\nHowever, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\nUse helm diff upgrade to ensure things are working as you expect before upgrading", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-60", - "href": "charts/rstudio-pm/NEWS.html#section-60", - "title": "Changelog", - "section": "", - "text": "Fix quoting", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-61", - "href": "charts/rstudio-pm/NEWS.html#section-61", - "title": "Changelog", - "section": "", - "text": "Add option for podAnnotations", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-62", - "href": "charts/rstudio-pm/NEWS.html#section-62", - "title": "Changelog", - "section": "", - "text": "Add autoNodePort parameter to allow auto-providing the node port", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-63", - "href": "charts/rstudio-pm/NEWS.html#section-63", - "title": "Changelog", - "section": "", - "text": "Revert apiVersion back to v1 for working in helm2", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-64", - "href": "charts/rstudio-pm/NEWS.html#section-64", - "title": "Changelog", - "section": "", - "text": "BREAKING: rename secret for managing AWS credentials\nAdd a secret for managing the rstudio-pm.key\nAdd a command and args configuration options", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-65", - "href": "charts/rstudio-pm/NEWS.html#section-65", - "title": "Changelog", - "section": "", - "text": "Add secret for managing AWS credentials", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-pm/NEWS.html#section-66", - "href": "charts/rstudio-pm/NEWS.html#section-66", - "title": "Changelog", - "section": "", - "text": "Initial pass!", - "crumbs": [ - "Posit Package Manager", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html", - "href": "charts/rstudio-connect/NEWS.html", - "title": "Changelog", - "section": "", - "text": "Documentation site updates\n\n\n\n\n\nBump Connect version to 2024.04.1\n\n\n\n\n\nBump Connect version to 2024.04.0\n\n\n\n\n\nUpdate the default content images in default-runtime.yaml and default-runtime-pro.yaml to include newer R, Python and Quarto versions.\nEnable Python and Quarto by default in values.yaml when running in local or off-host execution mode.\n\n\n\n\n\nBump Chronicle Agent to version 2024.03.0\n\n\n\n\n\nBump Connect version to 2024.03.0\n\n\n\n\n\nUpdates to support standalone documentation site\n\n\n\n\n\nBREAKING: The generated service will now have type ClusterIP set by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.\n\n\n\n\n\nBump Connect version to 2024.02.0\n\n\n\n\n\nAdd option to set pod.terminationGracePeriodSeconds\n\n\n\n\n\nBump Connect version to 2024.01.0\n\n\n\n\n\nBump Connect version to 2023.12.0\n\n\n\n\n\nAdd licensing section to the README to provide guidance on using a license file, license key or license server.\n\n\n\n\n\nBump Connect version to 2023.10.0\n\n\n\n\n\nBump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true\n\n\n\n\n\n\nAdd support for setting tolerations for Connect\n\n\n\n\n\nBump Connect version to 2023.09.0\n\n\n\n\n\nAdd support for sharedStorage.subPath\n\n\n\n\n\nBump Connect version to 2023.07.0\n\n\n\n\n\nAdded ability to assign labels in service accounts.\n\n\n\n\n\nAdd support for pod.command and pod.env for Connect off-host execution sessions\n\npod.command is a hack for now… it will be removed eventually\n\n\n\n\n\n\nBump Connect version to 2023.06.0\n\n\n\n\n\nBREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30 This change also impacts the default set of content execution images. Changing the execution environment OS will cause a rebuild for all currently deployed content.\n\nIf you want to revert this change, set image.tagPrefix=bionic- (server), launcher.defaultInitContainer.tagPrefix=bionic- (content-init), and modify the set of content images defined by launcher.customRuntimeYaml to use bionic instead of ubuntu2204\nBREAKING: Off-Host Execution Beta users who are currently evaluating this feature set can use the example values defined in https://github.com/rstudio/helm/tree/main/examples/connect/beta-migration to assit with the content migration from bionic to jammy\n\nTrim the default set of content execution images to the 4 latest releases of Python/R.\n\nA Quarto installation has been added to all content-base images.\n\nAllow launcher to configure the Kubernetes API URL and the Service Account token from inside the pod instead of specifying on prestart via environment variables.\nUpdate documentation and README for a bit more clarity.\nAdd podDisruptionBudget values\nAdd topologySpreadConstraints values\n\n\n\n\n\nAdd a metrics port to the service, which ensures that the ServiceMonitor actually works\n\n\n\n\n\nFix issue in templates that prevented numeric service accounts from being used.\n\n\n\n\n\nBREAKING: change pod.nodeSelector to nodeSelector for consistency with other charts and the community. In order to highlight the change, we error if pod.nodeSelector is anything other than empty.\nBREAKING: turn pod.serviceAccountName WARNING into an error as well.\nAdd provisional support for launcher.templateValues.pod.env, launcher.templateValues.pod.nodeSelector, and launcher.templateValues.pod.priorityClassName\nNOTE: we are making these values induce failure so that CI systems and other deployments are explicit about the unused values. Please share feedback if this creates problems in your environment.\n\n\n\n\n\nUpdate documentation to remove “beta” label and explain production recommendations\n\n\n\n\n\nBump Connect version to 2023.03.0\n\n\n\n\n\nBump Connect version to 2023.01.1\n\n\n\n\n\nBump rstudio-library to 0.1.24\n\nUpdate RBAC definition to support listing of service accounts\n\n\n\n\n\n\nBump Connect Launcher templates to 2.3.0-v1\n\nadded app.kubernetes.io/managed-by: \"launcher\" in both job.tpl and service.tpl\nresource requests and limits calculations in job.tpl\nsets serviceAccountName in job.tpl for content jobs\nlauncher.templateValues.pod.serviceAccountName to set the default service account for content pods\n\n\n\n\n\n\nBump Connect version to 2023.01.0\n\n\n\n\n\nadd launcher.defaultInitContainer.securityContext to configure the securityContext on the default initContainer (##319)\nadd serviceMonitor section for defining a ServiceMonitor object [(##126)[https://github.com/rstudio/helm/issues/126]]\nimprove consistency in the prometheusExporter configuration section (as compared to the rstudio-workbench chart)\n\n\n\n\n\nBump Connect version to 2022.12.0\n\n\n\n\n\nAdd sharedStorage.volumeName for PVCs that reference a PV\nAdd sharedStorage.selector as well\n\n\n\n\n\nDeprecate pod.serviceAccountName in favor of rbac.serviceAccount.name (##267)\nAllow un-setting rbac.serviceAccount.name (##294)\n\n\n\n\n\nFix a typo in launcher.defaultInitContainer.imagePullPolicy (##289)\n\n\n\n\n\nAdd updated templates for launcher.templateValues and session container customization\n\nAdd customization of securityContext and containerSecurityContext (##293)\nFix typo in serviceAccountName implementation (##251)\nAdd affinity and tolerations (##271 and ##283)\n\nAdd an image.tagPrefix value to make customizing the operating system easier\nAdd a launcher.defaultInitContainer.tagPrefix value to make customizing the operating system easier\n\n\n\n\n\nBump Connect version to 2022.11.0\n\n\n\n\n\nBump Connect version to 2022.10.0\n\n\n\n\n\nFix appVersion to target bionic-2022.09.0, to reflect new image naming conventions that include the operating system.\n\n\n\n\n\nBump Connect version to 2022.09.0\n\n\n\n\n\nAdd a check to provide faster feedback if launcher.enabed=true without setting up shared storage\n\n\n\n\n\nBump Connect version to 2022.08.1\n\n\n\n\n\nBump Connect version to 2022.08.0\n\n\n\n\n\nBETA BREAKING: We moved launcher.contentInitContainer customizations to launcher.defaultInitContainer\n\nThis should only affect if you are using launcher.enabled=true, which is still in Beta\nValues are treated the same, so a simple modification to the key should resolve any issues\n\nRStudio Connect with off-host execution is now in Public Beta\nAdd support for the launcher.useTemplates value\n\nThis enables greater customization of session creation as well as better labels and annotations out of the box\nTo make use of the default session templates, configure values in launcher.sessionTemplate\n\nEnable logging using RStudio Connect’s new logging configuration (effective with version 2022.07)\nAdd a toggle for launcher.defaultInitContainer.enabled to turn off the default init container\n\nWhen using the launcher, it is important that sessions have the RStudio Connect “session runtime” available\nBy default, we make these available through an init container, but they can also be provided other ways\nBy disabling this setting, you are opting into managing this runtime requirement yourself\n\nAdd values for pod.port and service.targetPort\nAllow launcher.additionalRuntimeImages and launcher.customRuntimeYaml=\"pro\" (##238, ##92)\n\n\n\n\n\nBump rstudio-library chart version\nRelax RBAC for pod/logs to remove write-related privileges\n\n\n\n\n\nBump Connect version to 2022.06.2\n\n\n\n\n\nBump Connect version to 2022.06.0\n\n\n\n\n\nAdd the ability to set annotations to the Persistent Volume Claim.\n\n\n\n\n\nMake resources configuration backwards compatible with the previous enabled flag (##218)\n\n\n\n\n\nAdd sharedStorage.mountContent value configuration option. When this setting is enabled, the chart will configure Connect’s Launcher.DataDirPVCName to use the PVC defined by sharedStorage.name. If this setting is used, then config.Launcher.DataDir must not be set.\n\n\n\n\n\nUpdate rstudio-library chart version. Add support for lists in INI file sections.\n\n\n\n\n\nBump Connect version to 2022.05.0\n\n\n\n\n\nSimplify resources configuration and allow resources configuration on the sidecar container\n\nWorth noting that if baseline enabled, defaults have changed to not specify resources. Prototype recommendations remain in the chart values as a comment\n\n\n\n\n\n\nAdd pod.securityContext value configuration option\n\n\n\n\n\nBump Connect version to 2022.04.2\n\n\n\n\n\nBump Connect version to 2022.04.1\n\n\n\n\n\nFix ingress definition issues with older Kubernetes clusters (##139)\n\n\n\n\n\nBump Connect version to 2022.03.2\n\n\n\n\n\nBump Connect version to 2022.03.1\n\n\n\n\n\nBump Connect version to 2022.02.3\n\n\n\n\n\nBump Connect version to 2022.02.2\n\n\n\n\n\nBump Connect version to 2022.02.0\n\n\n\n\n\nAdd pod.affinity value to define affinity for the pod\n\n\n\n\n\nUpdate rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!\n\n\n\n\n\nBump Connect version to 2021.12.1\n\n\n\n\n\nMake startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)\n\n\n\n\n\n\nUpdate rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)\n\n\n\n\n\nBump Connect version to 2021.12.0\n\n\n\n\n\nBump library-chart version\n\n\n\n\n\nAdd configuration values for pod.haste to set (or unset) the RSTUDIO_CONNECT_HASTE variable\nAdd a pod.labels values option (##101)\n\n\n\n\n\nBump Connect version to 2021.11.1\n\n\n\n\n\nmove “privileged: true” into values.yaml, because it is no longer necessary for rstudio-connect server or sessions when launcher is enabled.\n\nTo disable when using the launcher, set securityContext: null\nNOTE: securityContext: {} will not remove the default, because helm values merge objects by default\n\nlocation for RStudio Connect’s KubernetesProfilesConfig file has changed from /etc/rstudio/launcher.kubernetes.profiles.conf to /etc/rstudio-connect/launcher/launcher.kubernetes.profiles.conf so as to not conflict with RStudio Workbench\n\n\n\n\n\nUpdate default RStudio Connect version to 2021.11.0\n\n\n\n\n\nAdd imagePullSecrets value option (##57)\n\n\n\n\n\nBump rstudio-library chart version\n\n\n\n\n\nUpdate default RStudio Connect version to 2021.10.0\n\n\n\n\n\nUpdate rstudio-library chart version\n\n\n\n\n\nUpdate default RStudio Connect version to 2021.09.0\n\n\n\n\n\nEnabled Python support in Connect by default when launcher.enabled=true\nAny values defined in the config section now take precendence over those that are set by the Helm chart’s logic.\n\n\n\n\n\nUpdate default RStudio Connect version to 2021.08.2\n\n\n\n\n\nAdded a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.\n\n\n\n\n\nUpdate docs\n\n\n\n\n\nBREAKING: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.\nDefault RStudio Connect version is now 1.9.0.1\nAdd a prestart.bash script for use when launcher.enabled=true\n\nwhen launcher.enabled=true, the chart changes command and args dynamically to use this script\nif you set command and args yourself, we will use your settings instead. Be sure:\n\nthat /scripts/prestart.bash is executed (for Kubernetes setup)\nthat /usr/local/bin/startup.sh is executed (for licensing)\n\n\nAdd RBAC via the rstudio-library chart\nAdd runtime.yaml configuration (for runtime containers)\nChange default configuration when launcher is enabled\nAdd the ability to more easily customize launcher.kubernetes.profiles.conf\n\nSet up the profiles defaults to include the init container\n\nAllow more easily mounting a named PVC that was not created by the chart\nMake the “target” launcher namespace configurable\nAdd a default value for service.port: 80\n\n\n\n\n\nAdd ingress as an option\nAdd annotations to deployment so that the pods roll when config changes\n\n\n\n\n\nUpdate to 1.8.6.2\nUpdate docs\n\n\n\n\n\nChange naming convention\n\nThis fixes issues with namespacing\nHowever, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\n\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\n\nUse helm diff upgrade to ensure things are working as you expect before upgrading\n\n\n\n\n\n\nAdd HA, Postgres, PVC, monitoring\n\n\n\n\n\nMinimally viable", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section", - "href": "charts/rstudio-connect/NEWS.html#section", - "title": "Changelog", - "section": "", - "text": "Documentation site updates", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-1", - "href": "charts/rstudio-connect/NEWS.html#section-1", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2024.04.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-2", - "href": "charts/rstudio-connect/NEWS.html#section-2", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2024.04.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-3", - "href": "charts/rstudio-connect/NEWS.html#section-3", - "title": "Changelog", - "section": "", - "text": "Update the default content images in default-runtime.yaml and default-runtime-pro.yaml to include newer R, Python and Quarto versions.\nEnable Python and Quarto by default in values.yaml when running in local or off-host execution mode.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-4", - "href": "charts/rstudio-connect/NEWS.html#section-4", - "title": "Changelog", - "section": "", - "text": "Bump Chronicle Agent to version 2024.03.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-5", - "href": "charts/rstudio-connect/NEWS.html#section-5", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2024.03.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-6", - "href": "charts/rstudio-connect/NEWS.html#section-6", - "title": "Changelog", - "section": "", - "text": "Updates to support standalone documentation site", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-7", - "href": "charts/rstudio-connect/NEWS.html#section-7", - "title": "Changelog", - "section": "", - "text": "BREAKING: The generated service will now have type ClusterIP set by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-8", - "href": "charts/rstudio-connect/NEWS.html#section-8", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2024.02.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-9", - "href": "charts/rstudio-connect/NEWS.html#section-9", - "title": "Changelog", - "section": "", - "text": "Add option to set pod.terminationGracePeriodSeconds", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-10", - "href": "charts/rstudio-connect/NEWS.html#section-10", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2024.01.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-11", - "href": "charts/rstudio-connect/NEWS.html#section-11", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.12.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-12", - "href": "charts/rstudio-connect/NEWS.html#section-12", - "title": "Changelog", - "section": "", - "text": "Add licensing section to the README to provide guidance on using a license file, license key or license server.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-13", - "href": "charts/rstudio-connect/NEWS.html#section-13", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.10.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-14", - "href": "charts/rstudio-connect/NEWS.html#section-14", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-15", - "href": "charts/rstudio-connect/NEWS.html#section-15", - "title": "Changelog", - "section": "", - "text": "Add support for setting tolerations for Connect", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-16", - "href": "charts/rstudio-connect/NEWS.html#section-16", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.09.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-17", - "href": "charts/rstudio-connect/NEWS.html#section-17", - "title": "Changelog", - "section": "", - "text": "Add support for sharedStorage.subPath", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-18", - "href": "charts/rstudio-connect/NEWS.html#section-18", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.07.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-19", - "href": "charts/rstudio-connect/NEWS.html#section-19", - "title": "Changelog", - "section": "", - "text": "Added ability to assign labels in service accounts.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-20", - "href": "charts/rstudio-connect/NEWS.html#section-20", - "title": "Changelog", - "section": "", - "text": "Add support for pod.command and pod.env for Connect off-host execution sessions\n\npod.command is a hack for now… it will be removed eventually", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-21", - "href": "charts/rstudio-connect/NEWS.html#section-21", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.06.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-22", - "href": "charts/rstudio-connect/NEWS.html#section-22", - "title": "Changelog", - "section": "", - "text": "BREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30 This change also impacts the default set of content execution images. Changing the execution environment OS will cause a rebuild for all currently deployed content.\n\nIf you want to revert this change, set image.tagPrefix=bionic- (server), launcher.defaultInitContainer.tagPrefix=bionic- (content-init), and modify the set of content images defined by launcher.customRuntimeYaml to use bionic instead of ubuntu2204\nBREAKING: Off-Host Execution Beta users who are currently evaluating this feature set can use the example values defined in https://github.com/rstudio/helm/tree/main/examples/connect/beta-migration to assit with the content migration from bionic to jammy\n\nTrim the default set of content execution images to the 4 latest releases of Python/R.\n\nA Quarto installation has been added to all content-base images.\n\nAllow launcher to configure the Kubernetes API URL and the Service Account token from inside the pod instead of specifying on prestart via environment variables.\nUpdate documentation and README for a bit more clarity.\nAdd podDisruptionBudget values\nAdd topologySpreadConstraints values", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-23", - "href": "charts/rstudio-connect/NEWS.html#section-23", - "title": "Changelog", - "section": "", - "text": "Add a metrics port to the service, which ensures that the ServiceMonitor actually works", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-24", - "href": "charts/rstudio-connect/NEWS.html#section-24", - "title": "Changelog", - "section": "", - "text": "Fix issue in templates that prevented numeric service accounts from being used.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-25", - "href": "charts/rstudio-connect/NEWS.html#section-25", - "title": "Changelog", - "section": "", - "text": "BREAKING: change pod.nodeSelector to nodeSelector for consistency with other charts and the community. In order to highlight the change, we error if pod.nodeSelector is anything other than empty.\nBREAKING: turn pod.serviceAccountName WARNING into an error as well.\nAdd provisional support for launcher.templateValues.pod.env, launcher.templateValues.pod.nodeSelector, and launcher.templateValues.pod.priorityClassName\nNOTE: we are making these values induce failure so that CI systems and other deployments are explicit about the unused values. Please share feedback if this creates problems in your environment.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-26", - "href": "charts/rstudio-connect/NEWS.html#section-26", - "title": "Changelog", - "section": "", - "text": "Update documentation to remove “beta” label and explain production recommendations", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-27", - "href": "charts/rstudio-connect/NEWS.html#section-27", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.03.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-28", - "href": "charts/rstudio-connect/NEWS.html#section-28", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.01.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-29", - "href": "charts/rstudio-connect/NEWS.html#section-29", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.24\n\nUpdate RBAC definition to support listing of service accounts", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-30", - "href": "charts/rstudio-connect/NEWS.html#section-30", - "title": "Changelog", - "section": "", - "text": "Bump Connect Launcher templates to 2.3.0-v1\n\nadded app.kubernetes.io/managed-by: \"launcher\" in both job.tpl and service.tpl\nresource requests and limits calculations in job.tpl\nsets serviceAccountName in job.tpl for content jobs\nlauncher.templateValues.pod.serviceAccountName to set the default service account for content pods", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-31", - "href": "charts/rstudio-connect/NEWS.html#section-31", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2023.01.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-32", - "href": "charts/rstudio-connect/NEWS.html#section-32", - "title": "Changelog", - "section": "", - "text": "add launcher.defaultInitContainer.securityContext to configure the securityContext on the default initContainer (##319)\nadd serviceMonitor section for defining a ServiceMonitor object [(##126)[https://github.com/rstudio/helm/issues/126]]\nimprove consistency in the prometheusExporter configuration section (as compared to the rstudio-workbench chart)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-33", - "href": "charts/rstudio-connect/NEWS.html#section-33", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.12.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-34", - "href": "charts/rstudio-connect/NEWS.html#section-34", - "title": "Changelog", - "section": "", - "text": "Add sharedStorage.volumeName for PVCs that reference a PV\nAdd sharedStorage.selector as well", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-35", - "href": "charts/rstudio-connect/NEWS.html#section-35", - "title": "Changelog", - "section": "", - "text": "Deprecate pod.serviceAccountName in favor of rbac.serviceAccount.name (##267)\nAllow un-setting rbac.serviceAccount.name (##294)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-36", - "href": "charts/rstudio-connect/NEWS.html#section-36", - "title": "Changelog", - "section": "", - "text": "Fix a typo in launcher.defaultInitContainer.imagePullPolicy (##289)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-37", - "href": "charts/rstudio-connect/NEWS.html#section-37", - "title": "Changelog", - "section": "", - "text": "Add updated templates for launcher.templateValues and session container customization\n\nAdd customization of securityContext and containerSecurityContext (##293)\nFix typo in serviceAccountName implementation (##251)\nAdd affinity and tolerations (##271 and ##283)\n\nAdd an image.tagPrefix value to make customizing the operating system easier\nAdd a launcher.defaultInitContainer.tagPrefix value to make customizing the operating system easier", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-38", - "href": "charts/rstudio-connect/NEWS.html#section-38", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.11.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-39", - "href": "charts/rstudio-connect/NEWS.html#section-39", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.10.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-40", - "href": "charts/rstudio-connect/NEWS.html#section-40", - "title": "Changelog", - "section": "", - "text": "Fix appVersion to target bionic-2022.09.0, to reflect new image naming conventions that include the operating system.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-41", - "href": "charts/rstudio-connect/NEWS.html#section-41", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.09.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-42", - "href": "charts/rstudio-connect/NEWS.html#section-42", - "title": "Changelog", - "section": "", - "text": "Add a check to provide faster feedback if launcher.enabed=true without setting up shared storage", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-43", - "href": "charts/rstudio-connect/NEWS.html#section-43", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.08.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-44", - "href": "charts/rstudio-connect/NEWS.html#section-44", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.08.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-45", - "href": "charts/rstudio-connect/NEWS.html#section-45", - "title": "Changelog", - "section": "", - "text": "BETA BREAKING: We moved launcher.contentInitContainer customizations to launcher.defaultInitContainer\n\nThis should only affect if you are using launcher.enabled=true, which is still in Beta\nValues are treated the same, so a simple modification to the key should resolve any issues\n\nRStudio Connect with off-host execution is now in Public Beta\nAdd support for the launcher.useTemplates value\n\nThis enables greater customization of session creation as well as better labels and annotations out of the box\nTo make use of the default session templates, configure values in launcher.sessionTemplate\n\nEnable logging using RStudio Connect’s new logging configuration (effective with version 2022.07)\nAdd a toggle for launcher.defaultInitContainer.enabled to turn off the default init container\n\nWhen using the launcher, it is important that sessions have the RStudio Connect “session runtime” available\nBy default, we make these available through an init container, but they can also be provided other ways\nBy disabling this setting, you are opting into managing this runtime requirement yourself\n\nAdd values for pod.port and service.targetPort\nAllow launcher.additionalRuntimeImages and launcher.customRuntimeYaml=\"pro\" (##238, ##92)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-46", - "href": "charts/rstudio-connect/NEWS.html#section-46", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library chart version\nRelax RBAC for pod/logs to remove write-related privileges", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-47", - "href": "charts/rstudio-connect/NEWS.html#section-47", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.06.2", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-48", - "href": "charts/rstudio-connect/NEWS.html#section-48", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.06.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-49", - "href": "charts/rstudio-connect/NEWS.html#section-49", - "title": "Changelog", - "section": "", - "text": "Add the ability to set annotations to the Persistent Volume Claim.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-50", - "href": "charts/rstudio-connect/NEWS.html#section-50", - "title": "Changelog", - "section": "", - "text": "Make resources configuration backwards compatible with the previous enabled flag (##218)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-51", - "href": "charts/rstudio-connect/NEWS.html#section-51", - "title": "Changelog", - "section": "", - "text": "Add sharedStorage.mountContent value configuration option. When this setting is enabled, the chart will configure Connect’s Launcher.DataDirPVCName to use the PVC defined by sharedStorage.name. If this setting is used, then config.Launcher.DataDir must not be set.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-52", - "href": "charts/rstudio-connect/NEWS.html#section-52", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. Add support for lists in INI file sections.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-53", - "href": "charts/rstudio-connect/NEWS.html#section-53", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.05.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-54", - "href": "charts/rstudio-connect/NEWS.html#section-54", - "title": "Changelog", - "section": "", - "text": "Simplify resources configuration and allow resources configuration on the sidecar container\n\nWorth noting that if baseline enabled, defaults have changed to not specify resources. Prototype recommendations remain in the chart values as a comment", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-55", - "href": "charts/rstudio-connect/NEWS.html#section-55", - "title": "Changelog", - "section": "", - "text": "Add pod.securityContext value configuration option", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-56", - "href": "charts/rstudio-connect/NEWS.html#section-56", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.04.2", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-57", - "href": "charts/rstudio-connect/NEWS.html#section-57", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.04.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-58", - "href": "charts/rstudio-connect/NEWS.html#section-58", - "title": "Changelog", - "section": "", - "text": "Fix ingress definition issues with older Kubernetes clusters (##139)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-59", - "href": "charts/rstudio-connect/NEWS.html#section-59", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.03.2", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-60", - "href": "charts/rstudio-connect/NEWS.html#section-60", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.03.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-61", - "href": "charts/rstudio-connect/NEWS.html#section-61", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.02.3", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-62", - "href": "charts/rstudio-connect/NEWS.html#section-62", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.02.2", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-63", - "href": "charts/rstudio-connect/NEWS.html#section-63", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2022.02.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-64", - "href": "charts/rstudio-connect/NEWS.html#section-64", - "title": "Changelog", - "section": "", - "text": "Add pod.affinity value to define affinity for the pod", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-65", - "href": "charts/rstudio-connect/NEWS.html#section-65", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-66", - "href": "charts/rstudio-connect/NEWS.html#section-66", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2021.12.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-67", - "href": "charts/rstudio-connect/NEWS.html#section-67", - "title": "Changelog", - "section": "", - "text": "Make startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-68", - "href": "charts/rstudio-connect/NEWS.html#section-68", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-69", - "href": "charts/rstudio-connect/NEWS.html#section-69", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2021.12.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-70", - "href": "charts/rstudio-connect/NEWS.html#section-70", - "title": "Changelog", - "section": "", - "text": "Bump library-chart version", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-71", - "href": "charts/rstudio-connect/NEWS.html#section-71", - "title": "Changelog", - "section": "", - "text": "Add configuration values for pod.haste to set (or unset) the RSTUDIO_CONNECT_HASTE variable\nAdd a pod.labels values option (##101)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-72", - "href": "charts/rstudio-connect/NEWS.html#section-72", - "title": "Changelog", - "section": "", - "text": "Bump Connect version to 2021.11.1", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-73", - "href": "charts/rstudio-connect/NEWS.html#section-73", - "title": "Changelog", - "section": "", - "text": "move “privileged: true” into values.yaml, because it is no longer necessary for rstudio-connect server or sessions when launcher is enabled.\n\nTo disable when using the launcher, set securityContext: null\nNOTE: securityContext: {} will not remove the default, because helm values merge objects by default\n\nlocation for RStudio Connect’s KubernetesProfilesConfig file has changed from /etc/rstudio/launcher.kubernetes.profiles.conf to /etc/rstudio-connect/launcher/launcher.kubernetes.profiles.conf so as to not conflict with RStudio Workbench", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-74", - "href": "charts/rstudio-connect/NEWS.html#section-74", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Connect version to 2021.11.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-75", - "href": "charts/rstudio-connect/NEWS.html#section-75", - "title": "Changelog", - "section": "", - "text": "Add imagePullSecrets value option (##57)", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-76", - "href": "charts/rstudio-connect/NEWS.html#section-76", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library chart version", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-77", - "href": "charts/rstudio-connect/NEWS.html#section-77", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Connect version to 2021.10.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-78", - "href": "charts/rstudio-connect/NEWS.html#section-78", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-79", - "href": "charts/rstudio-connect/NEWS.html#section-79", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Connect version to 2021.09.0", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-80", - "href": "charts/rstudio-connect/NEWS.html#section-80", - "title": "Changelog", - "section": "", - "text": "Enabled Python support in Connect by default when launcher.enabled=true\nAny values defined in the config section now take precendence over those that are set by the Helm chart’s logic.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-81", - "href": "charts/rstudio-connect/NEWS.html#section-81", - "title": "Changelog", - "section": "", - "text": "Update default RStudio Connect version to 2021.08.2", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-82", - "href": "charts/rstudio-connect/NEWS.html#section-82", - "title": "Changelog", - "section": "", - "text": "Added a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-83", - "href": "charts/rstudio-connect/NEWS.html#section-83", - "title": "Changelog", - "section": "", - "text": "Update docs", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-84", - "href": "charts/rstudio-connect/NEWS.html#section-84", - "title": "Changelog", - "section": "", - "text": "BREAKING: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.\nDefault RStudio Connect version is now 1.9.0.1\nAdd a prestart.bash script for use when launcher.enabled=true\n\nwhen launcher.enabled=true, the chart changes command and args dynamically to use this script\nif you set command and args yourself, we will use your settings instead. Be sure:\n\nthat /scripts/prestart.bash is executed (for Kubernetes setup)\nthat /usr/local/bin/startup.sh is executed (for licensing)\n\n\nAdd RBAC via the rstudio-library chart\nAdd runtime.yaml configuration (for runtime containers)\nChange default configuration when launcher is enabled\nAdd the ability to more easily customize launcher.kubernetes.profiles.conf\n\nSet up the profiles defaults to include the init container\n\nAllow more easily mounting a named PVC that was not created by the chart\nMake the “target” launcher namespace configurable\nAdd a default value for service.port: 80", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-85", - "href": "charts/rstudio-connect/NEWS.html#section-85", - "title": "Changelog", - "section": "", - "text": "Add ingress as an option\nAdd annotations to deployment so that the pods roll when config changes", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-86", - "href": "charts/rstudio-connect/NEWS.html#section-86", - "title": "Changelog", - "section": "", - "text": "Update to 1.8.6.2\nUpdate docs", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-87", - "href": "charts/rstudio-connect/NEWS.html#section-87", - "title": "Changelog", - "section": "", - "text": "Change naming convention\n\nThis fixes issues with namespacing\nHowever, it will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\n\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\n\nUse helm diff upgrade to ensure things are working as you expect before upgrading", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-88", - "href": "charts/rstudio-connect/NEWS.html#section-88", - "title": "Changelog", - "section": "", - "text": "Add HA, Postgres, PVC, monitoring", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-connect/NEWS.html#section-89", - "href": "charts/rstudio-connect/NEWS.html#section-89", - "title": "Changelog", - "section": "", - "text": "Minimally viable", - "crumbs": [ - "Posit Connect", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html", - "href": "charts/rstudio-workbench/NEWS.html", - "title": "Changelog", - "section": "", - "text": "Documentation site updates\n\n\n\n\n\nBump Workbench version to 2024.04.0\n\n\n\n\n\nBump Chronicle Agent to version 2024.03.0\n\n\n\n\n\nUpdates to support standalone documentation site\n\n\n\n\n\nBREAKING: The generated service will now have type ClusterIP set by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.\n\n\n\n\n\nUpdate default package manager repo in config.session.repos.conf\nRemove --verbose from args in config.server.vscode.conf\nAdd instructions for configuring R and Python repos in the README\nAdd empty JSON to rstudio-prefs.json default\nAdd documentation for databricks.conf\nIncrease readinessProbe.initialDelaySeconds to 10\n\n\n\n\n\nAdd ttlSecondsAfterFinished to job.tpl for session jobs.\n\n\n\n\n\nAdd option to set pod.terminationGracePeriodSeconds\nAdd protection for prestart-launcher.bash to be OS-agnostic in certificate modification (#453)\n\n\n\n\n\nBump Workbench version to 2023.12.1\n\n\n\n\n\nBump Workbench version to 2023.12.0\n\n\n\n\n\nAdd licensing section to the README to provide guidance on using a license file, license key or license server.\n\n\n\n\n\nBump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true\n\n\n\n\n\n\nBump Workbench version to 2023.09.1\n\n\n\n\n\nBump Workbench version to 2023.09.0\n\n\n\n\n\nAdd native session support for pip.conf\n\nIn order to mount a pip.conf file to /etc/pip.conf on server and sessions, just define the file in config.session.pip\\\\.conf\n\n\n\n\n\n\nBump Workbench version to 2023.06.1\n\n\n\n\n\nAdd support for homeStorage.subPath (and for launcher sessions)\n\n\n\n\n\nAdd support for serviceAccount labels (rbac.serviceAccount.labels)\n\n\n\n\n\nFix support for pod.env on sessions\n\n\n\n\n\nAdd support for Sealed Secrets\n\n\n\n\n\nBump Workbench version to 2023.06.0\n\n\n\n\n\nBREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30\n\nIf you want to revert this change, set session.image.tagPrefix=bionic- (sessions) and image.tagPrefix=bionic- ( server)\n\nBREAKING: change the “home volume mount” for sessions to happen automatically, regardless of whether you define other values in config.serverDcf.launcher-mounts\n\nPreviously, if you specify anything in launcher-mounts, then we did not mount the home volume onto the session\nNow, we continue to mount the home volume onto the session, unless:\n\nYou set session.defaultHomeMount=false\nYou have the same (or a parent) mountPath defined in an existing launcher-mounts volume\nYou have the same PVC ClaimName defined in an existing launcher-mounts volume\n\nIf you mount the volume yourself and want to keep doing so, you can set session.defaultHomeMount=false\nIf you mount the volume yourself and would like to stop doing so, you can now unset the home mount in launcher-mounts\n\nUpdate documentation and README for a bit more clarity\nUpdate product to version 2023.03.1\nAllow customizing the pod.command associated with sessions for some highly custom startup cases. This should not be necessary in most cases and will be removed at a later date, once the product supports startup customization. Please reach out if you have questions about this functionality!\nAdd podDisruptionBudget values\nAdd topologySpreadConstraints values\nStart to utilize the pod.securityContext values for pod securityContext values\n\n\n\n\n\nAdd priorityClassName to product configuration\n\n\n\n\n\nUpdate documentation to make .Values.server.profiles and .Values.profiles.profiles differences more clear.\n\n\n\n\n\nAdd pod.lifecycle hook\n\n\n\n\n\nUpdate documentation to remove “beta” label and explain production recommendations\n\n\n\n\n\nBump rstudio-library to 0.1.24\n\nUpdate RBAC definition to support listing of service accounts\n\n\n\n\n\n\nBump Workbench version to 2022.12.0\n\n\n\n\n\nAdd a prometheusExporter.resources configuration section for consistency with the Connect chart\n\n\n\n\n\nAdd homeStorage.otherArgs and sharedStorage.otherArgs for other PVC arguments\n\nThis can be useful for arguments like volumeName when using a PVC that references a PV\n\n\n\n\n\n\nBREAKING: remove serviceAccountName in favor of rbac.serviceAccount.name.\n\nAlso fix a handful of consistency issues with serviceAccount creation (##251)\nAllow un-setting rbac.serviceAccount.name (##294)\n\nAdd prometheusExporter.securityContext for the ability to configure the sidecar securityContext\nAdd revisionHistoryLimit value for the Workbench deployment\n\nThis can be helpful particularly when CI systems such as ArgoCD leave replicasets around\n\n\n\n\n\n\nAdd updated templates for launcher.templateValues and session container customization\n\nAdd customization of securityContext and containerSecurityContext (##293)\nFix typo in serviceAccountName implementation (##251)\nAdd affinity and tolerations (##271 and ##283)\n\n\n\n\n\n\nBREAKING: change jupyter path from /opt/python/3.6.5/bin/jupyter to /usr/local/bin/jupyter\n\nThis will hopefully not affect your deployment, but it depends on how your image is built\nWe have recently changed all of our images to symlink jupyter to /usr/local/bin/jupyter\n\nadd option and values for launcher.useTemplates and launcher.templateValues\n\nthis mechanism is useful for simplifying session configuration and replaces job-json-overrides\nboth will continue being used for now, but they are incompatible and will generate an error if both are used\nAdvanced topics include launcher.includeDefaultTemplates=false and launcher.extraTemplates\n\nbump Workbench version to 2022.07.2-576.pro12\nadd a value for image.tagPrefix to make choosing operating system for the server image easier. Default is bionic-\n\n\n\n\n\nFix an issue in the startup script to verify that the dir exists\n\n\n\n\n\nFix an issue where chowning fails in the startup script\n\nThis is particularly problematic if ConfigMaps or Secrets are mounted into this directory\n\nChange appVersion to reflect the new docker image naming convention: bionic-*** to include the OS in the image name.\n\n\n\n\n\nAdd a simple mechanism for snapshot testing to make stronger backwards compatibility guarantees\n\n\n\n\n\nAdd a ServiceMonitor CRD and values to configure\nAdd pod.affinity value for configuration of pod affinity\nFix issue where hostnames are not routable within kubernetes while load balancing\n\nBecause hostname output is not routable between pods, we use www-host-name=$(hostname -i) to route by IP address\nThis fixes a load balancing issue with some hard to understand asio.netdb errors\n\n\n\n\n\n\nBump rstudio-library chart version\nRelax RBAC for pod/logs to remove write-related privileges\n\n\n\n\n\nAdd the ability to set annotations to the Persistent Volume Claim.\n\n\n\n\n\nBump Workbench to version 2022.02.3-492.pro3\nFix typo in the README\n\n\n\n\n\nBump Workbench to version 2022.02.2+485.pro2\n\n\n\n\n\nAllow specifying defaultMode for most/all configMap and secret mounts\n\nthis should be backwards compatible. Please let us know if any issues arise\nuse cases include adding executable startup scripts, additional services, changing access for files to be more/less secure, changing permissions in accordance with different runAs, runAsGroup config.\n\n\n\n\n\n\nAllow Launcher to Auto Configure Kubernetes variables\n\nRemoves dynamic generation of launcher.kubernetes.conf file\nAdd launcher.kubernetes.conf to default values, setting kubernetes-namespace to the value of launcher.namespace\n\nUpdate rstudio-library chart version. Add support for lists in INI file sections.\n\n\n\n\n\nUpdate docs for job-json-overrides (fix a key reference issue and link to new docs in the helm repo)\n\n\n\n\n\nFix ingress definition issues with older Kubernetes clusters (##139)\n\n\n\n\n\nUpgrade Workbench to version 2022.02.1+461.pro1\n\n\n\n\n\nUpdate README docs\nAdd selector for storage definition (##136)\nFix default permissions (0644) on pam mounts (##141)\n\n\n\n\n\nUpdate logging.conf to default to output logs on stderr\n\n\n\n\n\nFix the version update. Our annotations were incorrect.\n\n\n\n\n\nUpdate RStudio Workbench to version 2021.09.2+382.pro1 (the second patch release of 2021.09)\n\n\n\n\n\nBUGFIX: address an important issue in RStudio Workbench load balancing\n\nEver since 0.5.0, we did not create a load-balancer file\nThis means that even “HA” installations of Workbench would function like independent nodes\nWe now touch an empty file and let the nodes report themselves to the database in this case\n\n\n\n\n\n\nMake startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)\n\n\n\n\n\n\nUpdate rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!\n\n\n\n\n\nUpdate rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)\n\n\n\n\n\nBREAKING: Bump RStudio version to Ghost Orchid (2021.09.0+351.pro6)\n\nThis version of the chart is no longer compatible (by default) with older versions (1.4 and previous).\nPrevious versions of the chart are not compatible (by default) with 2021.09 or later\nIf you want to use charts across versions, you will need to change command, args, and some configmaps.\nRSP environment variables for user creation, licensing, etc. are now RSW\n\nBREAKING: Change RStudio Workbench execution model to use supervisord\nBREAKING: Add vscode.conf defaults. This enables VS Code sessions, which is dependent on your images having code-server installed at /opt/code-server/\nCreate diagnostics values (diagnostics.enabled and diagnostics.directory) to control diagnostic output\nAdd values to launcher.kubernetesHealthCheck to control the behavior of the “Kubernetes Health Check” that launcher runs at startup\nEnable PAM sessions by default (i.e. auth-pam-sessions-enabled=1). This is important for proper home directory creation, for instance. Disable by setting config.server.rserver\\.conf.auth-pam-sessions-enabled=0\nAdd imagePullSecrets value option (##57)\nAdd config.pam values option to add pam config files\nAdd config-maps to configure startup behavior (config.startupCustom)\nAdd a config setting for sssd (now in the container by default) (config.userProvisioning)\nAdd a “secret” configmap for session components (useful for shared database credentials, odbc.ini, etc.) (config.sessionSecret)\nUpdate README to make job-json-overrides, profiles, user provisioning, etc. more clear\nUpdate rstudio-library chart dependency\n\nBUGFIX: Address an issue with how launcher-mounts was generated incorrectly (##108)\n\nAdd a pod.labels values option (##101)\nModify how supervisord starts sssd with config.startupUserProvisioning values option (##110)\n\n\n\n\n\nUpdated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).\n\n\n\n\n\nUpdate rstudio-library chart version. This adds pods/exec privilege to RBAC\n\nThis is important for sessions to exit properly\n\n\n\n\n\n\nAdded a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.\n\n\n\n\n\nBUGFIX: The load-balancer sidecar container was not selecting app labels properly. This is now fixed. It could have been causing issues in load-balanced setups\n\n\n\n\n\nBUGFIX: session configuration is now mounted to the proper location on session pods\nBUGFIX: Prometheus annotations are now properly defined (they were using the wrong port)\nBUGFIX: The Graphite Exporter regex had a bug that did not handle certain hostnames\nCustomizing the graphite exporter “mapping.yaml” is now configurable by defining .Values.prometheusExporter.mappingYaml\n\n\n\n\n\nUpdate docs\n\n\n\n\n\nBREAKING: serviceAccountName is now rbac.serviceAccount.name for consistency with our other charts\nBREAKING: launcher=true is now launcher.enabled = true and launcherNamespace is now launcher.namespace for consistency with our other charts\nBreaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.\nBREAKING: defaults have changed for config.server.launcher\\.kubernetes\\.profiles\\.conf.\n\nTo avoid the breaking change, add the defaults to your explicitly enumerated values\nSee why this happened and an alternative forward-looking pattern below\nThe previous defaults:\n\nconfig:\nserver:\n launcher.kubernetes.profiles.conf:\n \"*\":\n default-container-image: rstudio/r-session-complete:bionic-1.4.1106-5\n container-images: rstudio/r-session-complete:bionic-1.4.1106-5\n allow-unknown-images: 1\nBREAKING: we now automatically mount session configuration into the session pod\n\nThis adds default job-json-overrides using the mechanism above\nThis can be disabled by setting session.defaultConfigMount=false\nThis is useful for things like repos.conf, rsession.conf (default Connect server, etc.), etc.\n\nSwitch to using the rstudio-library chart for configuration generation\n\nThis enables putting verbatim files in place if that is preferred to values-interpolation (converting values into a config file dynamically by the chart)\ni.e. passing a string to the configuration value will short-circuit configuration generation\n\nconfig:\nserver:\n some-config-file: |\n interpret-verbatim-please\nUpdate appVersion to 1.4.1717-3\nAdd a new config.profiles option for configuring profiles files more naturally.\n\nThis will only be used if the launcher.kubernetes.profiles.conf key is not in config.server (testing for key duplication is tricky in helm, so we pick the most common key)\nBefore, we would have something like this in values.yaml:\n\njobJsonOverridesFiles:\nsome.json:\n \"text\"\nother.json:\n - an\n - array\nconfig:\nserver:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides: '\"some/target:some.json\",\"other/target:other.json\"'\n container-images: \"one-image:tag,two-image:tag\"\nNow, we can do something like the following. A bit more verbose, but much easier to read and understand:\n\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides:\n - target: \"some/target\"\n json: \"text\"\n name: some\n - target: \"other/target\"\n json:\n - an\n - array\n name: other\n container-images:\n - \"one-image:tag\"\n - \"two-image:tag\"\n\nMoreover, job-json-overrides defined under config.profiles now have inheritance within the chart. That is, * job-json-overrides are appended to everyone else’s configuration. Documentation and possible extension of this pattern to container images, etc. to follow.\nNow hiding the rstudio-workbench container’s configuration files under /etc/rstudio as we are mounting them in different directories as defined by the XDG_CONFIG_DIRS environment variable. This is to prevent confusion that can occur when someone edits /etc/rstudio configuration files and then sees no changes after reloading the server configuration.\nWhen specifying a server for floating licensing, the RSW chart will now automatically be configured to set server-licensing-type=remote in the rserver.conf configuration file.\n\n\n\n\n\nMake secure-cookie-key and launcher.pem autogeneration static\n\nThis means that the auto-generated values will persist across helm upgrades\nIt is still safest to define these values yourself\n\n\n\n\n\n\nFix small reference issue in the prestart.bash script\n\n\n\n\n\nDecouple securityContext values from the main RSW container and the sidecar container\n\n\n\n\n\nremove “privileged: true”, which is not necessary for rstudio-workbench server or sessions\nAdd ingress as an option\nAdd annotations to deployment so that the pods roll when config changes\nSwitch the “secret” configurations to being an actual Secret\n\n\n\n\n\nBump load-balancer-manager again (to 2.2)\nAllow customization of load-balancer-manager env vars\n\n\n\n\n\nFix a bug in the load-balancer-manager (sidecar container)\n\nThe helm chart (as a result of previous changes) no longer defines an app label, but an app.kubernetes.io/name label.\nupdate the selector, make error handling better, etc. This requires version 2.0 of the load-balancer-manager\n\n\n\n\n\n\nallow global.secureCookieKey as an option along with secureCookieKey\nensure that no empty launcher.pub file is generated by default\ndefault image.tag to Chart.AppVersion\n\n\n\n\n\nBREAKING: changed rstudio container command and args to tell tini how to supervise processes and run a differently named prestart script. Also made /usr/local/bin/startup.sh script execution a part of the args.\n\n\n\n\n\nUpdate Workbench version to 1.4.1106-5\nUpdate docs\n\n\n\n\n\nrename to rstudio-workbench corresponding to upcoming rstudio-server-pro rebranding\nfix bug that was creating a test user by default\nadd other licensing options (via server, file, and secret values)\n\n\n\n\n\nChange naming convention\n\nFix issues with namespacing\nHowever, this will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\nUse helm diff upgrade to ensure things are working as you expect before upgrading\n\n\n\n\n\n\nadd jobJsonOverridesFiles value option\n\n\n\n\n\nMade HA functional\n\n\n\n\n\nBREAKING: move storage* values to a sharedStorage map\nAdd homeStorage\nAdd logging.conf\n\n\n\n\n\nAdd a secret configmap for pem and pub keys\n\n\n\n\n\nBREAKING: Restructure the image values object\nAdd image.pullPolicy\nSwitch to image.repository and image.tag from image\nAllow customizing pod command and args\n\n\n\n\n\nAdd database.conf and notifications.conf\n\n\n\n\n\nInitial pass!", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section", - "href": "charts/rstudio-workbench/NEWS.html#section", - "title": "Changelog", - "section": "", - "text": "Documentation site updates", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-1", - "href": "charts/rstudio-workbench/NEWS.html#section-1", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2024.04.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-2", - "href": "charts/rstudio-workbench/NEWS.html#section-2", - "title": "Changelog", - "section": "", - "text": "Bump Chronicle Agent to version 2024.03.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-3", - "href": "charts/rstudio-workbench/NEWS.html#section-3", - "title": "Changelog", - "section": "", - "text": "Updates to support standalone documentation site", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-4", - "href": "charts/rstudio-workbench/NEWS.html#section-4", - "title": "Changelog", - "section": "", - "text": "BREAKING: The generated service will now have type ClusterIP set by default.\nAdd support for setting the loadBalancerIP or clusterIP.\nIgnore nodePort settings when the service is not a NodePort.\nImprove the documentation for some service-related settings.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-5", - "href": "charts/rstudio-workbench/NEWS.html#section-5", - "title": "Changelog", - "section": "", - "text": "Update default package manager repo in config.session.repos.conf\nRemove --verbose from args in config.server.vscode.conf\nAdd instructions for configuring R and Python repos in the README\nAdd empty JSON to rstudio-prefs.json default\nAdd documentation for databricks.conf\nIncrease readinessProbe.initialDelaySeconds to 10", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-6", - "href": "charts/rstudio-workbench/NEWS.html#section-6", - "title": "Changelog", - "section": "", - "text": "Add ttlSecondsAfterFinished to job.tpl for session jobs.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-7", - "href": "charts/rstudio-workbench/NEWS.html#section-7", - "title": "Changelog", - "section": "", - "text": "Add option to set pod.terminationGracePeriodSeconds\nAdd protection for prestart-launcher.bash to be OS-agnostic in certificate modification (#453)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-8", - "href": "charts/rstudio-workbench/NEWS.html#section-8", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.12.1", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-9", - "href": "charts/rstudio-workbench/NEWS.html#section-9", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.12.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-10", - "href": "charts/rstudio-workbench/NEWS.html#section-10", - "title": "Changelog", - "section": "", - "text": "Add licensing section to the README to provide guidance on using a license file, license key or license server.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-11", - "href": "charts/rstudio-workbench/NEWS.html#section-11", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.27\n\nFix an issue with mountPath and subPath when license.file.mountSubPath is true", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-12", - "href": "charts/rstudio-workbench/NEWS.html#section-12", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.09.1", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-13", - "href": "charts/rstudio-workbench/NEWS.html#section-13", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.09.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-14", - "href": "charts/rstudio-workbench/NEWS.html#section-14", - "title": "Changelog", - "section": "", - "text": "Add native session support for pip.conf\n\nIn order to mount a pip.conf file to /etc/pip.conf on server and sessions, just define the file in config.session.pip\\\\.conf", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-15", - "href": "charts/rstudio-workbench/NEWS.html#section-15", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.06.1", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-16", - "href": "charts/rstudio-workbench/NEWS.html#section-16", - "title": "Changelog", - "section": "", - "text": "Add support for homeStorage.subPath (and for launcher sessions)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-17", - "href": "charts/rstudio-workbench/NEWS.html#section-17", - "title": "Changelog", - "section": "", - "text": "Add support for serviceAccount labels (rbac.serviceAccount.labels)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-18", - "href": "charts/rstudio-workbench/NEWS.html#section-18", - "title": "Changelog", - "section": "", - "text": "Fix support for pod.env on sessions", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-19", - "href": "charts/rstudio-workbench/NEWS.html#section-19", - "title": "Changelog", - "section": "", - "text": "Add support for Sealed Secrets", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-20", - "href": "charts/rstudio-workbench/NEWS.html#section-20", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2023.06.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-21", - "href": "charts/rstudio-workbench/NEWS.html#section-21", - "title": "Changelog", - "section": "", - "text": "BREAKING: Change default OS / OS prefix to ubuntu2204-. Bionic support is EOL as of 2023-04-30\n\nIf you want to revert this change, set session.image.tagPrefix=bionic- (sessions) and image.tagPrefix=bionic- ( server)\n\nBREAKING: change the “home volume mount” for sessions to happen automatically, regardless of whether you define other values in config.serverDcf.launcher-mounts\n\nPreviously, if you specify anything in launcher-mounts, then we did not mount the home volume onto the session\nNow, we continue to mount the home volume onto the session, unless:\n\nYou set session.defaultHomeMount=false\nYou have the same (or a parent) mountPath defined in an existing launcher-mounts volume\nYou have the same PVC ClaimName defined in an existing launcher-mounts volume\n\nIf you mount the volume yourself and want to keep doing so, you can set session.defaultHomeMount=false\nIf you mount the volume yourself and would like to stop doing so, you can now unset the home mount in launcher-mounts\n\nUpdate documentation and README for a bit more clarity\nUpdate product to version 2023.03.1\nAllow customizing the pod.command associated with sessions for some highly custom startup cases. This should not be necessary in most cases and will be removed at a later date, once the product supports startup customization. Please reach out if you have questions about this functionality!\nAdd podDisruptionBudget values\nAdd topologySpreadConstraints values\nStart to utilize the pod.securityContext values for pod securityContext values", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-22", - "href": "charts/rstudio-workbench/NEWS.html#section-22", - "title": "Changelog", - "section": "", - "text": "Add priorityClassName to product configuration", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-23", - "href": "charts/rstudio-workbench/NEWS.html#section-23", - "title": "Changelog", - "section": "", - "text": "Update documentation to make .Values.server.profiles and .Values.profiles.profiles differences more clear.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-24", - "href": "charts/rstudio-workbench/NEWS.html#section-24", - "title": "Changelog", - "section": "", - "text": "Add pod.lifecycle hook", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-25", - "href": "charts/rstudio-workbench/NEWS.html#section-25", - "title": "Changelog", - "section": "", - "text": "Update documentation to remove “beta” label and explain production recommendations", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-26", - "href": "charts/rstudio-workbench/NEWS.html#section-26", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library to 0.1.24\n\nUpdate RBAC definition to support listing of service accounts", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-27", - "href": "charts/rstudio-workbench/NEWS.html#section-27", - "title": "Changelog", - "section": "", - "text": "Bump Workbench version to 2022.12.0", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-28", - "href": "charts/rstudio-workbench/NEWS.html#section-28", - "title": "Changelog", - "section": "", - "text": "Add a prometheusExporter.resources configuration section for consistency with the Connect chart", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-29", - "href": "charts/rstudio-workbench/NEWS.html#section-29", - "title": "Changelog", - "section": "", - "text": "Add homeStorage.otherArgs and sharedStorage.otherArgs for other PVC arguments\n\nThis can be useful for arguments like volumeName when using a PVC that references a PV", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-30", - "href": "charts/rstudio-workbench/NEWS.html#section-30", - "title": "Changelog", - "section": "", - "text": "BREAKING: remove serviceAccountName in favor of rbac.serviceAccount.name.\n\nAlso fix a handful of consistency issues with serviceAccount creation (##251)\nAllow un-setting rbac.serviceAccount.name (##294)\n\nAdd prometheusExporter.securityContext for the ability to configure the sidecar securityContext\nAdd revisionHistoryLimit value for the Workbench deployment\n\nThis can be helpful particularly when CI systems such as ArgoCD leave replicasets around", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-31", - "href": "charts/rstudio-workbench/NEWS.html#section-31", - "title": "Changelog", - "section": "", - "text": "Add updated templates for launcher.templateValues and session container customization\n\nAdd customization of securityContext and containerSecurityContext (##293)\nFix typo in serviceAccountName implementation (##251)\nAdd affinity and tolerations (##271 and ##283)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-32", - "href": "charts/rstudio-workbench/NEWS.html#section-32", - "title": "Changelog", - "section": "", - "text": "BREAKING: change jupyter path from /opt/python/3.6.5/bin/jupyter to /usr/local/bin/jupyter\n\nThis will hopefully not affect your deployment, but it depends on how your image is built\nWe have recently changed all of our images to symlink jupyter to /usr/local/bin/jupyter\n\nadd option and values for launcher.useTemplates and launcher.templateValues\n\nthis mechanism is useful for simplifying session configuration and replaces job-json-overrides\nboth will continue being used for now, but they are incompatible and will generate an error if both are used\nAdvanced topics include launcher.includeDefaultTemplates=false and launcher.extraTemplates\n\nbump Workbench version to 2022.07.2-576.pro12\nadd a value for image.tagPrefix to make choosing operating system for the server image easier. Default is bionic-", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-33", - "href": "charts/rstudio-workbench/NEWS.html#section-33", - "title": "Changelog", - "section": "", - "text": "Fix an issue in the startup script to verify that the dir exists", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-34", - "href": "charts/rstudio-workbench/NEWS.html#section-34", - "title": "Changelog", - "section": "", - "text": "Fix an issue where chowning fails in the startup script\n\nThis is particularly problematic if ConfigMaps or Secrets are mounted into this directory\n\nChange appVersion to reflect the new docker image naming convention: bionic-*** to include the OS in the image name.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-35", - "href": "charts/rstudio-workbench/NEWS.html#section-35", - "title": "Changelog", - "section": "", - "text": "Add a simple mechanism for snapshot testing to make stronger backwards compatibility guarantees", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-36", - "href": "charts/rstudio-workbench/NEWS.html#section-36", - "title": "Changelog", - "section": "", - "text": "Add a ServiceMonitor CRD and values to configure\nAdd pod.affinity value for configuration of pod affinity\nFix issue where hostnames are not routable within kubernetes while load balancing\n\nBecause hostname output is not routable between pods, we use www-host-name=$(hostname -i) to route by IP address\nThis fixes a load balancing issue with some hard to understand asio.netdb errors", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-37", - "href": "charts/rstudio-workbench/NEWS.html#section-37", - "title": "Changelog", - "section": "", - "text": "Bump rstudio-library chart version\nRelax RBAC for pod/logs to remove write-related privileges", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-38", - "href": "charts/rstudio-workbench/NEWS.html#section-38", - "title": "Changelog", - "section": "", - "text": "Add the ability to set annotations to the Persistent Volume Claim.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-39", - "href": "charts/rstudio-workbench/NEWS.html#section-39", - "title": "Changelog", - "section": "", - "text": "Bump Workbench to version 2022.02.3-492.pro3\nFix typo in the README", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-40", - "href": "charts/rstudio-workbench/NEWS.html#section-40", - "title": "Changelog", - "section": "", - "text": "Bump Workbench to version 2022.02.2+485.pro2", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-41", - "href": "charts/rstudio-workbench/NEWS.html#section-41", - "title": "Changelog", - "section": "", - "text": "Allow specifying defaultMode for most/all configMap and secret mounts\n\nthis should be backwards compatible. Please let us know if any issues arise\nuse cases include adding executable startup scripts, additional services, changing access for files to be more/less secure, changing permissions in accordance with different runAs, runAsGroup config.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-42", - "href": "charts/rstudio-workbench/NEWS.html#section-42", - "title": "Changelog", - "section": "", - "text": "Allow Launcher to Auto Configure Kubernetes variables\n\nRemoves dynamic generation of launcher.kubernetes.conf file\nAdd launcher.kubernetes.conf to default values, setting kubernetes-namespace to the value of launcher.namespace\n\nUpdate rstudio-library chart version. Add support for lists in INI file sections.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-43", - "href": "charts/rstudio-workbench/NEWS.html#section-43", - "title": "Changelog", - "section": "", - "text": "Update docs for job-json-overrides (fix a key reference issue and link to new docs in the helm repo)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-44", - "href": "charts/rstudio-workbench/NEWS.html#section-44", - "title": "Changelog", - "section": "", - "text": "Fix ingress definition issues with older Kubernetes clusters (##139)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-45", - "href": "charts/rstudio-workbench/NEWS.html#section-45", - "title": "Changelog", - "section": "", - "text": "Upgrade Workbench to version 2022.02.1+461.pro1", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-46", - "href": "charts/rstudio-workbench/NEWS.html#section-46", - "title": "Changelog", - "section": "", - "text": "Update README docs\nAdd selector for storage definition (##136)\nFix default permissions (0644) on pam mounts (##141)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-47", - "href": "charts/rstudio-workbench/NEWS.html#section-47", - "title": "Changelog", - "section": "", - "text": "Update logging.conf to default to output logs on stderr", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-48", - "href": "charts/rstudio-workbench/NEWS.html#section-48", - "title": "Changelog", - "section": "", - "text": "Fix the version update. Our annotations were incorrect.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-49", - "href": "charts/rstudio-workbench/NEWS.html#section-49", - "title": "Changelog", - "section": "", - "text": "Update RStudio Workbench to version 2021.09.2+382.pro1 (the second patch release of 2021.09)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-50", - "href": "charts/rstudio-workbench/NEWS.html#section-50", - "title": "Changelog", - "section": "", - "text": "BUGFIX: address an important issue in RStudio Workbench load balancing\n\nEver since 0.5.0, we did not create a load-balancer file\nThis means that even “HA” installations of Workbench would function like independent nodes\nWe now touch an empty file and let the nodes report themselves to the database in this case", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-51", - "href": "charts/rstudio-workbench/NEWS.html#section-51", - "title": "Changelog", - "section": "", - "text": "Make startupProbe, readinessProbe and livenessProbe more configurable (##97)\n\nThey still use the enabled key to turn on or off\nWe then remove this key with omit, and pass the values verbatim to the template (as YAML)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-52", - "href": "charts/rstudio-workbench/NEWS.html#section-52", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds support for extraObjects\nAdd extraObjects value. This allows deploying additional resources (with templating) straight from the values file!", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-53", - "href": "charts/rstudio-workbench/NEWS.html#section-53", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds a helper for rendering Ingress resources\nCreate k8s.networking.io/v1 Ingress resource when ingress.enabled: true and Kubernetes version is >=1.19 (##117)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-54", - "href": "charts/rstudio-workbench/NEWS.html#section-54", - "title": "Changelog", - "section": "", - "text": "BREAKING: Bump RStudio version to Ghost Orchid (2021.09.0+351.pro6)\n\nThis version of the chart is no longer compatible (by default) with older versions (1.4 and previous).\nPrevious versions of the chart are not compatible (by default) with 2021.09 or later\nIf you want to use charts across versions, you will need to change command, args, and some configmaps.\nRSP environment variables for user creation, licensing, etc. are now RSW\n\nBREAKING: Change RStudio Workbench execution model to use supervisord\nBREAKING: Add vscode.conf defaults. This enables VS Code sessions, which is dependent on your images having code-server installed at /opt/code-server/\nCreate diagnostics values (diagnostics.enabled and diagnostics.directory) to control diagnostic output\nAdd values to launcher.kubernetesHealthCheck to control the behavior of the “Kubernetes Health Check” that launcher runs at startup\nEnable PAM sessions by default (i.e. auth-pam-sessions-enabled=1). This is important for proper home directory creation, for instance. Disable by setting config.server.rserver\\.conf.auth-pam-sessions-enabled=0\nAdd imagePullSecrets value option (##57)\nAdd config.pam values option to add pam config files\nAdd config-maps to configure startup behavior (config.startupCustom)\nAdd a config setting for sssd (now in the container by default) (config.userProvisioning)\nAdd a “secret” configmap for session components (useful for shared database credentials, odbc.ini, etc.) (config.sessionSecret)\nUpdate README to make job-json-overrides, profiles, user provisioning, etc. more clear\nUpdate rstudio-library chart dependency\n\nBUGFIX: Address an issue with how launcher-mounts was generated incorrectly (##108)\n\nAdd a pod.labels values option (##101)\nModify how supervisord starts sssd with config.startupUserProvisioning values option (##110)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-55", - "href": "charts/rstudio-workbench/NEWS.html#section-55", - "title": "Changelog", - "section": "", - "text": "Updated svc.yml to remove hardcoded port 80 and add .Values.service.port in its place. Updated values.yaml to include .Values.service.port (previously missing).", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-56", - "href": "charts/rstudio-workbench/NEWS.html#section-56", - "title": "Changelog", - "section": "", - "text": "Update rstudio-library chart version. This adds pods/exec privilege to RBAC\n\nThis is important for sessions to exit properly", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-57", - "href": "charts/rstudio-workbench/NEWS.html#section-57", - "title": "Changelog", - "section": "", - "text": "Added a new parameter rbac.clusterRoleCreate to values.yaml to allow for disabling the creation of the ClusterRole that allows for access to the nodes API. This API is used to ensure that all of the IP addresses for nodes are available when reporting the addresses of the node that is running a particular job so that clients can connect to it. This is generally not a needed permission for the Launcher as the internal IP is usually sufficient, so it is disabled by default.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-58", - "href": "charts/rstudio-workbench/NEWS.html#section-58", - "title": "Changelog", - "section": "", - "text": "BUGFIX: The load-balancer sidecar container was not selecting app labels properly. This is now fixed. It could have been causing issues in load-balanced setups", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-59", - "href": "charts/rstudio-workbench/NEWS.html#section-59", - "title": "Changelog", - "section": "", - "text": "BUGFIX: session configuration is now mounted to the proper location on session pods\nBUGFIX: Prometheus annotations are now properly defined (they were using the wrong port)\nBUGFIX: The Graphite Exporter regex had a bug that did not handle certain hostnames\nCustomizing the graphite exporter “mapping.yaml” is now configurable by defining .Values.prometheusExporter.mappingYaml", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-60", - "href": "charts/rstudio-workbench/NEWS.html#section-60", - "title": "Changelog", - "section": "", - "text": "Update docs", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-61", - "href": "charts/rstudio-workbench/NEWS.html#section-61", - "title": "Changelog", - "section": "", - "text": "BREAKING: serviceAccountName is now rbac.serviceAccount.name for consistency with our other charts\nBREAKING: launcher=true is now launcher.enabled = true and launcherNamespace is now launcher.namespace for consistency with our other charts\nBreaking: Licensing configuration now uses a license section. For example, license: my-key should be changed to\nlicense:\n key: my-key\nAdded support for floating licenses and license files.\nBREAKING: defaults have changed for config.server.launcher\\.kubernetes\\.profiles\\.conf.\n\nTo avoid the breaking change, add the defaults to your explicitly enumerated values\nSee why this happened and an alternative forward-looking pattern below\nThe previous defaults:\n\nconfig:\nserver:\n launcher.kubernetes.profiles.conf:\n \"*\":\n default-container-image: rstudio/r-session-complete:bionic-1.4.1106-5\n container-images: rstudio/r-session-complete:bionic-1.4.1106-5\n allow-unknown-images: 1\nBREAKING: we now automatically mount session configuration into the session pod\n\nThis adds default job-json-overrides using the mechanism above\nThis can be disabled by setting session.defaultConfigMount=false\nThis is useful for things like repos.conf, rsession.conf (default Connect server, etc.), etc.\n\nSwitch to using the rstudio-library chart for configuration generation\n\nThis enables putting verbatim files in place if that is preferred to values-interpolation (converting values into a config file dynamically by the chart)\ni.e. passing a string to the configuration value will short-circuit configuration generation\n\nconfig:\nserver:\n some-config-file: |\n interpret-verbatim-please\nUpdate appVersion to 1.4.1717-3\nAdd a new config.profiles option for configuring profiles files more naturally.\n\nThis will only be used if the launcher.kubernetes.profiles.conf key is not in config.server (testing for key duplication is tricky in helm, so we pick the most common key)\nBefore, we would have something like this in values.yaml:\n\njobJsonOverridesFiles:\nsome.json:\n \"text\"\nother.json:\n - an\n - array\nconfig:\nserver:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides: '\"some/target:some.json\",\"other/target:other.json\"'\n container-images: \"one-image:tag,two-image:tag\"\nNow, we can do something like the following. A bit more verbose, but much easier to read and understand:\n\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides:\n - target: \"some/target\"\n json: \"text\"\n name: some\n - target: \"other/target\"\n json:\n - an\n - array\n name: other\n container-images:\n - \"one-image:tag\"\n - \"two-image:tag\"\n\nMoreover, job-json-overrides defined under config.profiles now have inheritance within the chart. That is, * job-json-overrides are appended to everyone else’s configuration. Documentation and possible extension of this pattern to container images, etc. to follow.\nNow hiding the rstudio-workbench container’s configuration files under /etc/rstudio as we are mounting them in different directories as defined by the XDG_CONFIG_DIRS environment variable. This is to prevent confusion that can occur when someone edits /etc/rstudio configuration files and then sees no changes after reloading the server configuration.\nWhen specifying a server for floating licensing, the RSW chart will now automatically be configured to set server-licensing-type=remote in the rserver.conf configuration file.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-62", - "href": "charts/rstudio-workbench/NEWS.html#section-62", - "title": "Changelog", - "section": "", - "text": "Make secure-cookie-key and launcher.pem autogeneration static\n\nThis means that the auto-generated values will persist across helm upgrades\nIt is still safest to define these values yourself", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-63", - "href": "charts/rstudio-workbench/NEWS.html#section-63", - "title": "Changelog", - "section": "", - "text": "Fix small reference issue in the prestart.bash script", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-64", - "href": "charts/rstudio-workbench/NEWS.html#section-64", - "title": "Changelog", - "section": "", - "text": "Decouple securityContext values from the main RSW container and the sidecar container", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-65", - "href": "charts/rstudio-workbench/NEWS.html#section-65", - "title": "Changelog", - "section": "", - "text": "remove “privileged: true”, which is not necessary for rstudio-workbench server or sessions\nAdd ingress as an option\nAdd annotations to deployment so that the pods roll when config changes\nSwitch the “secret” configurations to being an actual Secret", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-66", - "href": "charts/rstudio-workbench/NEWS.html#section-66", - "title": "Changelog", - "section": "", - "text": "Bump load-balancer-manager again (to 2.2)\nAllow customization of load-balancer-manager env vars", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-67", - "href": "charts/rstudio-workbench/NEWS.html#section-67", - "title": "Changelog", - "section": "", - "text": "Fix a bug in the load-balancer-manager (sidecar container)\n\nThe helm chart (as a result of previous changes) no longer defines an app label, but an app.kubernetes.io/name label.\nupdate the selector, make error handling better, etc. This requires version 2.0 of the load-balancer-manager", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-68", - "href": "charts/rstudio-workbench/NEWS.html#section-68", - "title": "Changelog", - "section": "", - "text": "allow global.secureCookieKey as an option along with secureCookieKey\nensure that no empty launcher.pub file is generated by default\ndefault image.tag to Chart.AppVersion", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-69", - "href": "charts/rstudio-workbench/NEWS.html#section-69", - "title": "Changelog", - "section": "", - "text": "BREAKING: changed rstudio container command and args to tell tini how to supervise processes and run a differently named prestart script. Also made /usr/local/bin/startup.sh script execution a part of the args.", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-70", - "href": "charts/rstudio-workbench/NEWS.html#section-70", - "title": "Changelog", - "section": "", - "text": "Update Workbench version to 1.4.1106-5\nUpdate docs", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-71", - "href": "charts/rstudio-workbench/NEWS.html#section-71", - "title": "Changelog", - "section": "", - "text": "rename to rstudio-workbench corresponding to upcoming rstudio-server-pro rebranding\nfix bug that was creating a test user by default\nadd other licensing options (via server, file, and secret values)", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-72", - "href": "charts/rstudio-workbench/NEWS.html#section-72", - "title": "Changelog", - "section": "", - "text": "Change naming convention\n\nFix issues with namespacing\nHowever, this will damage backwards compatibility, particularly for PVCs if using sharedStorage.create = true\nIf you need to migrate data, set replicas: 0, upgrade, and then copy the data to the new PVC\nAlternatively, you can set fullnameOverride: \"previous-release-name\" to force backwards compatibility\nFinally, deployment selectors have changed, so you will need to delete the current deployment manually, then put back with helm upgrade --install\nUse helm diff upgrade to ensure things are working as you expect before upgrading", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-73", - "href": "charts/rstudio-workbench/NEWS.html#section-73", - "title": "Changelog", - "section": "", - "text": "add jobJsonOverridesFiles value option", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-74", - "href": "charts/rstudio-workbench/NEWS.html#section-74", - "title": "Changelog", - "section": "", - "text": "Made HA functional", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-75", - "href": "charts/rstudio-workbench/NEWS.html#section-75", - "title": "Changelog", - "section": "", - "text": "BREAKING: move storage* values to a sharedStorage map\nAdd homeStorage\nAdd logging.conf", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-76", - "href": "charts/rstudio-workbench/NEWS.html#section-76", - "title": "Changelog", - "section": "", - "text": "Add a secret configmap for pem and pub keys", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-77", - "href": "charts/rstudio-workbench/NEWS.html#section-77", - "title": "Changelog", - "section": "", - "text": "BREAKING: Restructure the image values object\nAdd image.pullPolicy\nSwitch to image.repository and image.tag from image\nAllow customizing pod command and args", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-78", - "href": "charts/rstudio-workbench/NEWS.html#section-78", - "title": "Changelog", - "section": "", - "text": "Add database.conf and notifications.conf", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/NEWS.html#section-79", - "href": "charts/rstudio-workbench/NEWS.html#section-79", - "title": "Changelog", - "section": "", - "text": "Initial pass!", - "crumbs": [ - "Posit Workbench", - "Changelog" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html", - "href": "charts/rstudio-workbench/README.html", - "title": "Posit Workbench", - "section": "", - "text": "Data Scientists use Posit Workbench to analyze data and create data products using R and Python.\n\n\n\nTo ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.\n\n\n\n\nTo install the chart with the release name my-release at version 0.7.4:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-workbench --version=0.7.4\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-workbench -l\n\n\n\nTo function, this chart requires the following:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the home directory for users.\n\nIf homeStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend that you:\n\nDisable homeStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then\nMount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using homeStorage.name and homeStorage.mount.\n\nIf you cannot use a PersistentVolume to properly mount your users’ home directories, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.\nIf you cannot use a Volume to mount the directories, manually mount them during container startup with a mechanism similar to what is described below for joining to auth domains.\nIf not using homeStorage.create, configure config.serverDcf.launcher-mounts to ensure that the correct mounts are used when users create new sessions.\n\nIf using load balancing (by setting replicas > 1), you need similar storage defined for sharedStorage to store shared project configuration. However, you can also configure the product to store its shared data underneath /home by setting config.server.rserver\\.conf.server-shared-storage-path=/home/some-shared-dir.\nA method to join the deployed rstudio-workbench container to your auth domain. The default rstudio/rstudio-workbench image has sssd installed and started by default. You can include sssd configuration in config.userProvisioning like so:\nconfig:\n userProvisioning:\n mysssd.conf:\n sssd:\n config_file_version: 2\n services: nss, pam\n domains: rstudio.com\n domain/rstudio.com:\n id_provider: ldap\n auth_provider: ldap\n\n\n\n\nThis chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-workbench-license --from-file=licenses/rstudio-workbench.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-workbench-license\n secretKey: rstudio-workbench.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-workbench.lic\n\n\n\n\nIn most places, we opt to pass Helm values directly into ConfigMaps. We automatically translate these into the valid .ini or .dcf file formats required by Workbench.\n\nThose configuration files and their mount locations are covered in the Configuration files section below.\n\nIf you need to modify the jobs launched by Workbench, use job-json-overrides.\n\nReview the Job Json overrides section on this below. For general information, see a support article.\n\nThe prestart scripts for Workbench and Posit Job Launcher are highly customized to get the service account information off of the Workbench pod for use in launching jobs.\nWorkbench does not export prometheus metrics on its own. Instead, we run a sidecar graphite exporter.\n\nThis is described in the Monitoring Posit Team Using Prometheus and Graphite support article.\n\n\n\n\n\nThese configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.secret.database\\.conf.password=mypassword ...\nThe files are converted into configuration files in the necessary format via go-templating. If you want to “in-line” a config file or mount it verbatim, you can use a pattern like:\nconfig:\n server:\n rserver.conf: |\n verbatim-file=format\nThe names of files are dynamically used, so you can add new files as needed. Beware that some files have default values, so moving them can have adverse effects. Also, if you use a different mounting paradigm, you need to change the XDG_CONFIG_DIRS environment variable.\n\nSession Configuration\n\nThese configuration files are mounted into the server and are mounted into the session pods.\nrepos.conf, rsession.conf, notifications.conf\nLocated in: config.session.<< name of file >> Helm values\nMounted at: /mnt/session-configmap/rstudio/\n\nSession Secret Configuration:\n\nThese configuration files are mounted into the server and session pods.\nodbc.ini and other similar shared secrets.\nLocated in: config.sessionSecret.<< name of file>> Helm values\nMounted at: /mnt/session-secret/\n\nSecret Configuration:\n\nThese configuration files are mounted into the server with more restrictive permissions (0600).\ndatabase.conf, openid-client-secret, databricks.conf\nLocated in: config.secret.<< name of file >> Helm values\nMounted at: /mnt/secret-configmap/rstudio/\n\nServer Configuration:\n\nThese configuration files are mounted into the server (.ini file format).\nrserver.conf, launcher.conf, jupyter.conf, logging.conf\nLocated at: config.server.<< name of file >> Helm values\nMounted at: /mnt/configmap/rstudio/\n\nServer DCF Configuration:\n\nThese configuration files are mounted into the server (.dcf file format).\nlauncher-mounts, launcher-env\nLocated at: config.serverDcf.<< name of file >> Helm values\nIncluded at: /mnt/configmap/rstudio/\n\nProfiles Configuration:\n\nThese configuration files are mounted into the server (.ini file format).\nlauncher.kubernetes.profiles.conf\nThey are located at config.profiles.<< name of file >> Helm values\nIncluded at: /mnt/configmap/rstudio/\nSee the Profiles section below for more information.\n\nPrestart:\n\nThis is provided by the Helm chart in a configmap.\nIt is mounted into the pod at /scripts/.\nprestart-workbench.bash is used to start workbench.\nprestart-launcher.bash is used to start launcher.\n\nUser Provisioning Configuration:\n\nThese configuration files are used for configuring user provisioning (i.e., sssd).\nLocated at: config.userProvisioning.<< name of file >> Helm values\nMounted onto: /etc/sssd/conf.d/ with 0600 permissions by default.\n\nCustom Startup Configuration:\n\nsupervisord service / unit definition .conf files.\nUse the .ini file format by default.\nMounted at: /startup/custom\nAs with all configuration files above, you can override with a verbatim string if desired:\nLocated at: config.startupCustom.<< name of file >> Helm values:\nconfig:\n startupCustom:\n myfile.conf: |\n file-used-verbatim\n\nPAM configuration:\n\npam configuration files.\nLocated at: config.pam.<< name of file >> Helm values\nMounted verbatim as individual files (using subPath mounts) at: /etc/pam.d/<< name of file >>\n\n\n\n\npip can be configured with config.session.pip.conf. To ensure pip.conf is mounted into the session pods, it is important that:\n\nlauncher.useTemplates: true is set\npip.conf settings are listed under config.session as shown in the following example for adding Posit Public Package Manager’s PyPI:\nlauncher:\n useTemplates: true\n\nconfig:\n session:\n pip.conf:\n \"global\":\n index-url: https://packagemanager.posit.co/pypi/latest/simple\n trusted-host: packagemanager.posit.co\n\n\n\n\nR package repositories can be configured with config.session.repos.conf:\nconfig:\n session:\n repos.conf:\n CRAN: https://packagemanager.posit.co/cran/__linux__/jammy/latest\nFor more information about configuring CRAN repositories in Workbench, see the Posit Workbench Administrator Guide’s - Package Installation > CRAN repositories section.\n\n\n\n\nProvisioning users in Workbench containers is challenging. Session images create users automatically (with consistent UIDs / GIDs). However, creating users in the Workbench containers is a responsibility that falls to the administrator.\nThe most common way to provision users is via sssd. The latest Workbench container has sssd included and running by default (see userProvisioning configuration files above).\nThe other way that this can be managed is via a lightweight startup service (runs once at startup and then sleeps forever) or a polling service (checks at regular intervals). Either can be written easily in bash or another programming language.\nHowever, it is important to use caution for the following:\n\nUID / GID consistency:\n\nLinux usernames and their matching to UID/GID must be consistent across all nodes and across time.\nFailing can cause security issues and access by some users to access view they should not be allowed to see.\n\nUsernames cannot have @.\n\nThe @ sign (often used in emails with SSO) is a problem for Workbench because some operating systems disallow @ signs in linux usernames.\n\nsupervisord is configured by default to exit if any of its child processes exit.\n\nIf you use config.startupCustom to configure a user management service, be careful that it does not exit unnecessarily.\n\n\nWe do not provide such a service out-of-the box because we intend for Workbench to solve this problem in a future release. Please contact your account representative if you have feedback or questions about this workflow.\n\n\nWhen starting sessions on Workbench, PAM configuration is often very important, even if PAM is not being used as an authentication mechanism. The Workbench Helm chart allows creating custom PAM files via the config.pam values section.\nEach key under config.pam becomes a PAM configuration file, and is mounted into /etc/pam.d/ in the container. For example:\nconfig:\n pam:\n rstudio: |\n # the rstudio PAM config file\n # will be used verbatim\n rstudio-session: |\n # the rstudio-session PAM config file\n # will be used verbatim\n\n\n\n\nProfiles are used to define product behavior (in .ini file format) based on user and group membership.\nSections define whether a set of configurations is applied to a user’s jobs based on the following criteria:\n\nIf section header is [*], it applies to all users.\nIf a user’s username is myusername, the section [myusername] applies to them.\nIf a user is in the allusers group, then the section [@allusers] applies to them\n\nThe product reads configuration from top to bottom and “last-in-wins” for a given configuration value.\n\n\nThe /etc/rstudio/profiles file enables you to tailor the behavior of sessions on a per-user or per-group basis. See the Posit Workbench Administrator Guide - User and Group Profiles page for more information.\nIn the values.yaml, define the content of /etc/rstudio/profiles in config.server.profiles. For example:\nconfig:\n server:\n profiles:\n \"*\":\n session-limit: 5\n session-timeout-minutes: 60\nBecomes:\n/etc/rstudio/profiles\n[*]\nsession-limit=5\nsession-timeout-minutes=60\n\n\n\nThe /etc/rstudio/launcher.kubernetes.profiles.conf contains the configuration of resource limits by user and group when using the Kubernetes Launcher Plugin. In the values.yaml, define the content of /etc/rstudio/launcher.kubernetes.profiles.conf in the config.profiles.launcher.kubernetes.profiles.conf file. The config.profiles section has a couple of niceties that are added in by default.\n\nYAML arrays like the following becomes “comma-joined.” For instance, the following becomes: some-key=value1,value2\nsome-key:\n - value1\n - value2\nThe [*] section has arrays “appended” to user and group sections, along with “defaults” defined by the chart.\n\nFor example:\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n some-key:\n - value1\n - value2\n myuser:\n some-key:\n - value4\n - value5\nBecomes:\n/etc/rstudio/launcher.kubernetes.profiles.conf\n[*]\nsome-key: value1,value2\n[myuser]\nsome-key: value1,value2,value3,value4\n\n\n\n\n\n\nNote\n\n\n\nThis appending/concatenation/array translation behavior only works with the helm chart.\n\n\n\n\n\nIf you want to customize the job launch process (i.e., how sessions are defined), edit the following configuration:\n\nModify:\nconfig.profiles.launcher\\.kubernetes\\.profiles\\.conf.<< some selector >>.job-json-overrides`\nCreate an array of maps with the following keys:\n\ntarget: The “target” part of the job spec to replace.\nname: A unique identifier (ideally with no spaces) becomes a configuration filename on disk.\njson: A YAML value that is translated directly to JSON and injected into the job spec at target.\n\n\nExplore the docs in the Helm repository for additional information.\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides:\n - target: \"/spec/template/spec/containers/0/imagePullPolicy\"\n json: \"Always\"\n name: imagePullPolicy\n - target: \"/spec/template/spec/imagePullSecrets\"\n json:\n - name: my-pull-secret\n name: imagePullSecrets\n container-images:\n - \"one-image:tag\"\n - \"two-image:tag\n\n\n\n\nThis chart supports the use of Sealed Secrets to allow for storing secrets in SCM and to ensure secrets are never leaked via Helm. The target cluster must include a SealedSecret controller as the controller is responsible for converting a SealedSecret to a Secret.\nTo activate the use of SealedSecret templates instead of Secret templates in the chart, set sealedSecret.enabled=true and ensure the following values are all encrypted (the chart does not support mixing encrypted values with unencrypted values):\n\nconfig.secret\nconfig.sessionSecret\nconfig.userProvisioning\nlauncherPem\nsecureCookieKey (or global.secureCookieKey)\n\nUse of Sealed secrets disables the chart’s auto-generation and reuse capabilities for launcherPem and secureCookieKey. launcherPem is an RSA private key, which can be generated via an RSA tool such as Helm’s genPrivateKey function. secureCookieKey is typically a UUID, which can be generated via a UUID generator such as Helm’s uuidv4 function.\n\n\n\n\n\n\nKey\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nlist\n[]\nargs is the pod container’s run arguments.\n\n\ncommand\nlist\n[]\ncommand is the pod container’s run command. By default, it uses the container’s default. However, the chart expects a container using supervisord for startup\n\n\nconfig.defaultMode.jobJsonOverrides\nint\n0644\ndefault mode for jobJsonOverrides config\n\n\nconfig.defaultMode.pam\nint\n0644\ndefault mode for pam scripts\n\n\nconfig.defaultMode.prestart\nint\n0755\ndefault mode for prestart config\n\n\nconfig.defaultMode.secret\nint\n0600\ndefault mode for secrets\n\n\nconfig.defaultMode.server\nint\n0644\ndefault mode for server config\n\n\nconfig.defaultMode.session\nint\n0644\ndefault mode for session files\n\n\nconfig.defaultMode.sessionSecret\nint\n0420\ndefault mode for session secrets\n\n\nconfig.defaultMode.startup\nint\n0755\ndefault mode for startup config\n\n\nconfig.defaultMode.userProvisioning\nint\n0600\ndefault mode for userProvisioning config\n\n\nconfig.pam\nobject\n{}\na map of pam config files. Will be mounted into the container directly / per file, in order to avoid overwriting system pam files\n\n\nconfig.profiles\nobject\n{}\na map of server-scoped config files (akin to config.server), but with specific behavior that supports profiles. See README for more information.\n\n\nconfig.secret\nstring\nnil\na map of secret, server-scoped config files (database.conf, databricks.conf, openid-client-secret). Mounted to /mnt/secret-configmap/rstudio/ with 0600 permissions\n\n\nconfig.server\nobject\nRStudio Workbench Configuration Reference. See defaults with helm show values\na map of server config files. Mounted to /mnt/configmap/rstudio/\n\n\nconfig.serverDcf\nobject\n{\"launcher-mounts\":[]}\na map of server-scoped config files (akin to config.server), but with .dcf file formatting (i.e. launcher-mounts, launcher-env, etc.)\n\n\nconfig.session\nobject\n{\"notifications.conf\":{},\"repos.conf\":{\"CRAN\":\"https://packagemanager.posit.co/cran/__linux__/jammy/latest\"},\"rsession.conf\":{},\"rstudio-prefs.json\":\"{}\\n\"}\na map of session-scoped config files. Mounted to /mnt/session-configmap/rstudio/ on both server and session, by default.\n\n\nconfig.sessionSecret\nobject\n{}\na map of secret, session-scoped config files (odbc.ini, etc.). Mounted to /mnt/session-secret/ on both server and session, by default\n\n\nconfig.startupCustom\nobject\n{}\na map of supervisord .conf files to define custom services. Mounted into the container at /startup/custom/\n\n\nconfig.startupUserProvisioning\nobject\n{\"sssd.conf\":\"[program:sssd]\\ncommand=/usr/sbin/sssd -i -c /etc/sssd/sssd.conf --logger=stderr\\nautorestart=false\\nnumprocs=1\\nstdout_logfile=/dev/stdout\\nstdout_logfile_maxbytes=0\\nstdout_logfile_backups=0\\nstderr_logfile=/dev/stderr\\nstderr_logfile_maxbytes=0\\nstderr_logfile_backups=0\\n\"}\na map of supervisord .conf files to define user provisioning services. Mounted into the container at /startup/user-provisioning/\n\n\nconfig.userProvisioning\nobject\n{}\na map of sssd config files, used for user provisioning. Mounted to /etc/sssd/conf.d/ with 0600 permissions\n\n\ndangerRegenerateAutomatedValues\nbool\nfalse\n\n\n\ndiagnostics\nobject\n{\"directory\":\"/var/log/rstudio\",\"enabled\":false}\nSettings for enabling server diagnostics\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nthe full name of the release (can be overridden)\n\n\nglobal.secureCookieKey\nstring\n\"\"\n\n\n\nhomeStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nhomeStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for homeStorage\n\n\nhomeStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nhomeStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nhomeStorage.path\nstring\n\"/home\"\nthe path to mount the homeStorage claim within the pod\n\n\nhomeStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nhomeStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nhomeStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nhomeStorage.subPath\nstring\n\"\"\nan optional subPath for the volume mount\n\n\nhomeStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nthe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"rstudio/rstudio-workbench\"\nthe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nthe initContainer spec that will be used verbatim\n\n\njobJsonOverridesFiles\nobject\n{}\njobJsonOverridesFiles is a map of maps. Each item in the map will become a file (named by the key), and the underlying object will be converted to JSON as the file’s contents\n\n\nlauncher.enabled\nbool\ntrue\ndetermines whether the launcher should be started in the container\n\n\nlauncher.extraTemplates\nobject\n{}\nextra templates to render in the template directory.\n\n\nlauncher.includeDefaultTemplates\nbool\ntrue\nwhether to include the default job.tpl and service.tpl files included with the chart\n\n\nlauncher.includeTemplateValues\nbool\ntrue\nwhether to include the templateValues rendering process\n\n\nlauncher.kubernetesHealthCheck\nobject\n{\"enabled\":true,\"extraCurlArgs\":[\"-fsSL\"]}\nconfiguration for the “Kubernetes Health Check” that the launcher entrypoint runs at startup\n\n\nlauncher.namespace\nstring\n\"\"\nallow customizing the namespace that sessions are launched into. Note RBAC and some config issues today\n\n\nlauncher.templateValues\nobject\n{\"job\":{\"annotations\":{},\"labels\":{},\"ttlSecondsAfterFinished\":null},\"pod\":{\"affinity\":{},\"annotations\":{},\"command\":[],\"containerSecurityContext\":{},\"defaultSecurityContext\":{},\"env\":[],\"extraContainers\":[],\"imagePullPolicy\":\"\",\"imagePullSecrets\":[],\"initContainers\":[],\"labels\":{},\"nodeSelector\":{},\"securityContext\":{},\"serviceAccountName\":\"\",\"tolerations\":[],\"volumeMounts\":[],\"volumes\":[]},\"service\":{\"annotations\":{},\"labels\":{},\"type\":\"ClusterIP\"}}\nvalues that are passed along to the launcher job rendering process as a data object (in JSON). These values are then used within session templates.\n\n\nlauncher.templateValues.pod.command\nlist\n[]\ncommand for all pods. This is really not something we should expose and will be removed once we have a better option\n\n\nlauncher.useTemplates\nbool\nfalse\nwhether to render and use templates in the job launching process\n\n\nlauncherPem\nstring\n\"\"\nAn inline launcher.pem key. If not provided, one will be auto-generated. See README for more details.\n\n\nlauncherPub\nbool\nfalse\nAn inline launcher.pub key to pair with launcher.pem. If false (the default), we will try to generate a launcher.pub from the provided launcher.pem\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nlivenessProbe is used to configure the container’s livenessProbe\n\n\nloadBalancer.forceEnabled\nbool\nfalse\nwhether to force the loadBalancer to be enabled. Otherwise requires replicas > 1. Worth setting if you are HA but may only have one node\n\n\nnameOverride\nstring\n\"\"\nthe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the rstudio-workbench pods\n\n\npod.env\nlist\n[]\nenv is an array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-workbench pods\n\n\npod.lifecycle\nobject\n{}\ncontainer lifecycle hooks\n\n\npod.port\nint\n8787\nThe containerPort used by the main pod container\n\n\npod.securityContext\nobject\n{}\nValues to set the securityContext for the service pod\n\n\npod.sidecar\nlist\n[]\nsidecar is an array of containers that will be run alongside the main container\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nvolumeMounts is injected as-is into the “volumeMounts:” component of the pod.container spec\n\n\npod.volumes\nlist\n[]\nvolumes is injected as-is into the “volumes:” component of the pod.container spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nprometheusExporter.enabled\nbool\ntrue\nwhether the prometheus exporter sidecar should be enabled\n\n\nprometheusExporter.image.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nprometheusExporter.image.repository\nstring\n\"prom/graphite-exporter\"\n\n\n\nprometheusExporter.image.tag\nstring\n\"v0.9.0\"\n\n\n\nprometheusExporter.mappingYaml\nstring\nnil\nYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file\n\n\nprometheusExporter.resources\nobject\n{}\nresource specification for the prometheus exporter sidecar\n\n\nprometheusExporter.securityContext\nobject\n{}\nsecurityContext for the prometheus exporter sidecar\n\n\nrbac.clusterRoleCreate\nbool\nfalse\nWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.\n\n\nrbac.create\nbool\ntrue\nWhether to create rbac. (also depends on launcher.enabled = true)\n\n\nrbac.serviceAccount\nobject\n{\"annotations\":{},\"create\":true,\"labels\":{},\"name\":\"\"}\nThe serviceAccount to be associated with rbac (also depends on launcher.enabled = true)\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nreadinessProbe is used to configure the container’s readinessProbe\n\n\nreplicas\nint\n1\nreplicas is the number of replica pods to maintain for this service. Use 2 or more to enable HA\n\n\nresources\nobject\n{\"limits\":{\"cpu\":\"2000m\",\"enabled\":false,\"ephemeralStorage\":\"200Mi\",\"memory\":\"4Gi\"},\"requests\":{\"cpu\":\"100m\",\"enabled\":false,\"ephemeralStorage\":\"100Mi\",\"memory\":\"2Gi\"}}\nresources define requests and limits for the rstudio-server pod\n\n\nrevisionHistoryLimit\nint\n10\nThe revisionHistoryLimit to use for the pod deployment. Do not set to 0\n\n\nsealedSecret.annotations\nobject\n{}\nannotations for SealedSecret resources\n\n\nsealedSecret.enabled\nbool\nfalse\nuse SealedSecret instead of Secret to deploy secrets\n\n\nsecureCookieKey\nstring\n\"\"\n\n\n\nsecurityContext\nobject\n{}\n\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe Service port. This is the port your service will run under.\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace\n\n\nsession.defaultConfigMount\nbool\ntrue\nWhether to automatically mount the config.session configuration into session pods. If launcher.namespace is different from Release Namespace, then the chart will duplicate the session configmap in both namespaces to facilitate this\n\n\nsession.defaultHomeMount\nbool\ntrue\nWhether to automatically add the homeStorage PVC to the session (i.e. via the launcher-mounts file)\n\n\nsession.defaultSecretMountPath\nstring\n\"/mnt/session-secret/\"\nThe path to mount the sessionSecret (from config.sessionSecret) onto the server and session pods\n\n\nsession.image.repository\nstring\n\"rstudio/r-session-complete\"\nThe repository to use for the session image\n\n\nsession.image.tag\nstring\n\"\"\nA tag override for the session image. Overrides the “tagPrefix” above, if set. Default tag is { tagPrefix }{{ version }}\n\n\nsession.image.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined\n\n\nshareProcessNamespace\nbool\nfalse\nwhether to provide shareProcessNamespace to the pod.\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nDefine the annotations for the Persistent Volume Claim resource\n\n\nsharedStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-server\"\nthe path to mount the sharedStorage claim within the pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nstartupProbe is used to configure the container’s startupProbe\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nHow to handle updates to the service. RollingUpdate (the default) minimizes downtime, but will not work well if your license only allows a single activation.\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nuserCreate\nbool\nfalse\nuserCreate determines whether a user should be created at startup (if true)\n\n\nuserName\nstring\n\"rstudio\"\nuserName determines the username of the created user\n\n\nuserPassword\nstring\n\"rstudio\"\nuserPassword determines the password of the created user\n\n\nuserUid\nstring\n\"10000\"\nuserUid determines the UID of the created user\n\n\nversionOverride\nstring\n\"\"\nA Workbench version to override the “tag” for the RStudio Workbench image and the session images. Necessary until https://github.com/helm/helm/issues/8194\n\n\nxdgConfigDirs\nstring\n\"/mnt/dynamic:/mnt/session-configmap:/mnt/secret-configmap:/mnt/configmap:/mnt/load-balancer/\"\nThe XDG config dirs (directories where configuration will be read from). Do not change without good reason.\n\n\nxdgConfigDirsExtra\nlist\n[]\nA list of additional XDG config dir paths\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#for-production", - "href": "charts/rstudio-workbench/README.html#for-production", - "title": "Posit Workbench", - "section": "", - "text": "To ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#installing-the-chart", - "href": "charts/rstudio-workbench/README.html#installing-the-chart", - "title": "Posit Workbench", - "section": "", - "text": "To install the chart with the release name my-release at version 0.7.4:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-workbench --version=0.7.4\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-workbench -l", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#required-configuration", - "href": "charts/rstudio-workbench/README.html#required-configuration", - "title": "Posit Workbench", - "section": "", - "text": "To function, this chart requires the following:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the home directory for users.\n\nIf homeStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend that you:\n\nDisable homeStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then\nMount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using homeStorage.name and homeStorage.mount.\n\nIf you cannot use a PersistentVolume to properly mount your users’ home directories, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.\nIf you cannot use a Volume to mount the directories, manually mount them during container startup with a mechanism similar to what is described below for joining to auth domains.\nIf not using homeStorage.create, configure config.serverDcf.launcher-mounts to ensure that the correct mounts are used when users create new sessions.\n\nIf using load balancing (by setting replicas > 1), you need similar storage defined for sharedStorage to store shared project configuration. However, you can also configure the product to store its shared data underneath /home by setting config.server.rserver\\.conf.server-shared-storage-path=/home/some-shared-dir.\nA method to join the deployed rstudio-workbench container to your auth domain. The default rstudio/rstudio-workbench image has sssd installed and started by default. You can include sssd configuration in config.userProvisioning like so:\nconfig:\n userProvisioning:\n mysssd.conf:\n sssd:\n config_file_version: 2\n services: nss, pam\n domains: rstudio.com\n domain/rstudio.com:\n id_provider: ldap\n auth_provider: ldap", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#licensing", - "href": "charts/rstudio-workbench/README.html#licensing", - "title": "Posit Workbench", - "section": "", - "text": "This chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-workbench-license --from-file=licenses/rstudio-workbench.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-workbench-license\n secretKey: rstudio-workbench.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-workbench.lic", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#general-principles", - "href": "charts/rstudio-workbench/README.html#general-principles", - "title": "Posit Workbench", - "section": "", - "text": "In most places, we opt to pass Helm values directly into ConfigMaps. We automatically translate these into the valid .ini or .dcf file formats required by Workbench.\n\nThose configuration files and their mount locations are covered in the Configuration files section below.\n\nIf you need to modify the jobs launched by Workbench, use job-json-overrides.\n\nReview the Job Json overrides section on this below. For general information, see a support article.\n\nThe prestart scripts for Workbench and Posit Job Launcher are highly customized to get the service account information off of the Workbench pod for use in launching jobs.\nWorkbench does not export prometheus metrics on its own. Instead, we run a sidecar graphite exporter.\n\nThis is described in the Monitoring Posit Team Using Prometheus and Graphite support article.", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#configuration-files", - "href": "charts/rstudio-workbench/README.html#configuration-files", - "title": "Posit Workbench", - "section": "", - "text": "These configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.secret.database\\.conf.password=mypassword ...\nThe files are converted into configuration files in the necessary format via go-templating. If you want to “in-line” a config file or mount it verbatim, you can use a pattern like:\nconfig:\n server:\n rserver.conf: |\n verbatim-file=format\nThe names of files are dynamically used, so you can add new files as needed. Beware that some files have default values, so moving them can have adverse effects. Also, if you use a different mounting paradigm, you need to change the XDG_CONFIG_DIRS environment variable.\n\nSession Configuration\n\nThese configuration files are mounted into the server and are mounted into the session pods.\nrepos.conf, rsession.conf, notifications.conf\nLocated in: config.session.<< name of file >> Helm values\nMounted at: /mnt/session-configmap/rstudio/\n\nSession Secret Configuration:\n\nThese configuration files are mounted into the server and session pods.\nodbc.ini and other similar shared secrets.\nLocated in: config.sessionSecret.<< name of file>> Helm values\nMounted at: /mnt/session-secret/\n\nSecret Configuration:\n\nThese configuration files are mounted into the server with more restrictive permissions (0600).\ndatabase.conf, openid-client-secret, databricks.conf\nLocated in: config.secret.<< name of file >> Helm values\nMounted at: /mnt/secret-configmap/rstudio/\n\nServer Configuration:\n\nThese configuration files are mounted into the server (.ini file format).\nrserver.conf, launcher.conf, jupyter.conf, logging.conf\nLocated at: config.server.<< name of file >> Helm values\nMounted at: /mnt/configmap/rstudio/\n\nServer DCF Configuration:\n\nThese configuration files are mounted into the server (.dcf file format).\nlauncher-mounts, launcher-env\nLocated at: config.serverDcf.<< name of file >> Helm values\nIncluded at: /mnt/configmap/rstudio/\n\nProfiles Configuration:\n\nThese configuration files are mounted into the server (.ini file format).\nlauncher.kubernetes.profiles.conf\nThey are located at config.profiles.<< name of file >> Helm values\nIncluded at: /mnt/configmap/rstudio/\nSee the Profiles section below for more information.\n\nPrestart:\n\nThis is provided by the Helm chart in a configmap.\nIt is mounted into the pod at /scripts/.\nprestart-workbench.bash is used to start workbench.\nprestart-launcher.bash is used to start launcher.\n\nUser Provisioning Configuration:\n\nThese configuration files are used for configuring user provisioning (i.e., sssd).\nLocated at: config.userProvisioning.<< name of file >> Helm values\nMounted onto: /etc/sssd/conf.d/ with 0600 permissions by default.\n\nCustom Startup Configuration:\n\nsupervisord service / unit definition .conf files.\nUse the .ini file format by default.\nMounted at: /startup/custom\nAs with all configuration files above, you can override with a verbatim string if desired:\nLocated at: config.startupCustom.<< name of file >> Helm values:\nconfig:\n startupCustom:\n myfile.conf: |\n file-used-verbatim\n\nPAM configuration:\n\npam configuration files.\nLocated at: config.pam.<< name of file >> Helm values\nMounted verbatim as individual files (using subPath mounts) at: /etc/pam.d/<< name of file >>\n\n\n\n\npip can be configured with config.session.pip.conf. To ensure pip.conf is mounted into the session pods, it is important that:\n\nlauncher.useTemplates: true is set\npip.conf settings are listed under config.session as shown in the following example for adding Posit Public Package Manager’s PyPI:\nlauncher:\n useTemplates: true\n\nconfig:\n session:\n pip.conf:\n \"global\":\n index-url: https://packagemanager.posit.co/pypi/latest/simple\n trusted-host: packagemanager.posit.co\n\n\n\n\nR package repositories can be configured with config.session.repos.conf:\nconfig:\n session:\n repos.conf:\n CRAN: https://packagemanager.posit.co/cran/__linux__/jammy/latest\nFor more information about configuring CRAN repositories in Workbench, see the Posit Workbench Administrator Guide’s - Package Installation > CRAN repositories section.", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#user-provisioning", - "href": "charts/rstudio-workbench/README.html#user-provisioning", - "title": "Posit Workbench", - "section": "", - "text": "Provisioning users in Workbench containers is challenging. Session images create users automatically (with consistent UIDs / GIDs). However, creating users in the Workbench containers is a responsibility that falls to the administrator.\nThe most common way to provision users is via sssd. The latest Workbench container has sssd included and running by default (see userProvisioning configuration files above).\nThe other way that this can be managed is via a lightweight startup service (runs once at startup and then sleeps forever) or a polling service (checks at regular intervals). Either can be written easily in bash or another programming language.\nHowever, it is important to use caution for the following:\n\nUID / GID consistency:\n\nLinux usernames and their matching to UID/GID must be consistent across all nodes and across time.\nFailing can cause security issues and access by some users to access view they should not be allowed to see.\n\nUsernames cannot have @.\n\nThe @ sign (often used in emails with SSO) is a problem for Workbench because some operating systems disallow @ signs in linux usernames.\n\nsupervisord is configured by default to exit if any of its child processes exit.\n\nIf you use config.startupCustom to configure a user management service, be careful that it does not exit unnecessarily.\n\n\nWe do not provide such a service out-of-the box because we intend for Workbench to solve this problem in a future release. Please contact your account representative if you have feedback or questions about this workflow.\n\n\nWhen starting sessions on Workbench, PAM configuration is often very important, even if PAM is not being used as an authentication mechanism. The Workbench Helm chart allows creating custom PAM files via the config.pam values section.\nEach key under config.pam becomes a PAM configuration file, and is mounted into /etc/pam.d/ in the container. For example:\nconfig:\n pam:\n rstudio: |\n # the rstudio PAM config file\n # will be used verbatim\n rstudio-session: |\n # the rstudio-session PAM config file\n # will be used verbatim", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#rstudio-profiles", - "href": "charts/rstudio-workbench/README.html#rstudio-profiles", - "title": "Posit Workbench", - "section": "", - "text": "Profiles are used to define product behavior (in .ini file format) based on user and group membership.\nSections define whether a set of configurations is applied to a user’s jobs based on the following criteria:\n\nIf section header is [*], it applies to all users.\nIf a user’s username is myusername, the section [myusername] applies to them.\nIf a user is in the allusers group, then the section [@allusers] applies to them\n\nThe product reads configuration from top to bottom and “last-in-wins” for a given configuration value.\n\n\nThe /etc/rstudio/profiles file enables you to tailor the behavior of sessions on a per-user or per-group basis. See the Posit Workbench Administrator Guide - User and Group Profiles page for more information.\nIn the values.yaml, define the content of /etc/rstudio/profiles in config.server.profiles. For example:\nconfig:\n server:\n profiles:\n \"*\":\n session-limit: 5\n session-timeout-minutes: 60\nBecomes:\n/etc/rstudio/profiles\n[*]\nsession-limit=5\nsession-timeout-minutes=60\n\n\n\nThe /etc/rstudio/launcher.kubernetes.profiles.conf contains the configuration of resource limits by user and group when using the Kubernetes Launcher Plugin. In the values.yaml, define the content of /etc/rstudio/launcher.kubernetes.profiles.conf in the config.profiles.launcher.kubernetes.profiles.conf file. The config.profiles section has a couple of niceties that are added in by default.\n\nYAML arrays like the following becomes “comma-joined.” For instance, the following becomes: some-key=value1,value2\nsome-key:\n - value1\n - value2\nThe [*] section has arrays “appended” to user and group sections, along with “defaults” defined by the chart.\n\nFor example:\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n some-key:\n - value1\n - value2\n myuser:\n some-key:\n - value4\n - value5\nBecomes:\n/etc/rstudio/launcher.kubernetes.profiles.conf\n[*]\nsome-key: value1,value2\n[myuser]\nsome-key: value1,value2,value3,value4\n\n\n\n\n\n\nNote\n\n\n\nThis appending/concatenation/array translation behavior only works with the helm chart.\n\n\n\n\n\nIf you want to customize the job launch process (i.e., how sessions are defined), edit the following configuration:\n\nModify:\nconfig.profiles.launcher\\.kubernetes\\.profiles\\.conf.<< some selector >>.job-json-overrides`\nCreate an array of maps with the following keys:\n\ntarget: The “target” part of the job spec to replace.\nname: A unique identifier (ideally with no spaces) becomes a configuration filename on disk.\njson: A YAML value that is translated directly to JSON and injected into the job spec at target.\n\n\nExplore the docs in the Helm repository for additional information.\nconfig:\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\":\n job-json-overrides:\n - target: \"/spec/template/spec/containers/0/imagePullPolicy\"\n json: \"Always\"\n name: imagePullPolicy\n - target: \"/spec/template/spec/imagePullSecrets\"\n json:\n - name: my-pull-secret\n name: imagePullSecrets\n container-images:\n - \"one-image:tag\"\n - \"two-image:tag", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#sealed-secrets", - "href": "charts/rstudio-workbench/README.html#sealed-secrets", - "title": "Posit Workbench", - "section": "", - "text": "This chart supports the use of Sealed Secrets to allow for storing secrets in SCM and to ensure secrets are never leaked via Helm. The target cluster must include a SealedSecret controller as the controller is responsible for converting a SealedSecret to a Secret.\nTo activate the use of SealedSecret templates instead of Secret templates in the chart, set sealedSecret.enabled=true and ensure the following values are all encrypted (the chart does not support mixing encrypted values with unencrypted values):\n\nconfig.secret\nconfig.sessionSecret\nconfig.userProvisioning\nlauncherPem\nsecureCookieKey (or global.secureCookieKey)\n\nUse of Sealed secrets disables the chart’s auto-generation and reuse capabilities for launcherPem and secureCookieKey. launcherPem is an RSA private key, which can be generated via an RSA tool such as Helm’s genPrivateKey function. secureCookieKey is typically a UUID, which can be generated via a UUID generator such as Helm’s uuidv4 function.", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-workbench/README.html#values", - "href": "charts/rstudio-workbench/README.html#values", - "title": "Posit Workbench", - "section": "", - "text": "Key\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nlist\n[]\nargs is the pod container’s run arguments.\n\n\ncommand\nlist\n[]\ncommand is the pod container’s run command. By default, it uses the container’s default. However, the chart expects a container using supervisord for startup\n\n\nconfig.defaultMode.jobJsonOverrides\nint\n0644\ndefault mode for jobJsonOverrides config\n\n\nconfig.defaultMode.pam\nint\n0644\ndefault mode for pam scripts\n\n\nconfig.defaultMode.prestart\nint\n0755\ndefault mode for prestart config\n\n\nconfig.defaultMode.secret\nint\n0600\ndefault mode for secrets\n\n\nconfig.defaultMode.server\nint\n0644\ndefault mode for server config\n\n\nconfig.defaultMode.session\nint\n0644\ndefault mode for session files\n\n\nconfig.defaultMode.sessionSecret\nint\n0420\ndefault mode for session secrets\n\n\nconfig.defaultMode.startup\nint\n0755\ndefault mode for startup config\n\n\nconfig.defaultMode.userProvisioning\nint\n0600\ndefault mode for userProvisioning config\n\n\nconfig.pam\nobject\n{}\na map of pam config files. Will be mounted into the container directly / per file, in order to avoid overwriting system pam files\n\n\nconfig.profiles\nobject\n{}\na map of server-scoped config files (akin to config.server), but with specific behavior that supports profiles. See README for more information.\n\n\nconfig.secret\nstring\nnil\na map of secret, server-scoped config files (database.conf, databricks.conf, openid-client-secret). Mounted to /mnt/secret-configmap/rstudio/ with 0600 permissions\n\n\nconfig.server\nobject\nRStudio Workbench Configuration Reference. See defaults with helm show values\na map of server config files. Mounted to /mnt/configmap/rstudio/\n\n\nconfig.serverDcf\nobject\n{\"launcher-mounts\":[]}\na map of server-scoped config files (akin to config.server), but with .dcf file formatting (i.e. launcher-mounts, launcher-env, etc.)\n\n\nconfig.session\nobject\n{\"notifications.conf\":{},\"repos.conf\":{\"CRAN\":\"https://packagemanager.posit.co/cran/__linux__/jammy/latest\"},\"rsession.conf\":{},\"rstudio-prefs.json\":\"{}\\n\"}\na map of session-scoped config files. Mounted to /mnt/session-configmap/rstudio/ on both server and session, by default.\n\n\nconfig.sessionSecret\nobject\n{}\na map of secret, session-scoped config files (odbc.ini, etc.). Mounted to /mnt/session-secret/ on both server and session, by default\n\n\nconfig.startupCustom\nobject\n{}\na map of supervisord .conf files to define custom services. Mounted into the container at /startup/custom/\n\n\nconfig.startupUserProvisioning\nobject\n{\"sssd.conf\":\"[program:sssd]\\ncommand=/usr/sbin/sssd -i -c /etc/sssd/sssd.conf --logger=stderr\\nautorestart=false\\nnumprocs=1\\nstdout_logfile=/dev/stdout\\nstdout_logfile_maxbytes=0\\nstdout_logfile_backups=0\\nstderr_logfile=/dev/stderr\\nstderr_logfile_maxbytes=0\\nstderr_logfile_backups=0\\n\"}\na map of supervisord .conf files to define user provisioning services. Mounted into the container at /startup/user-provisioning/\n\n\nconfig.userProvisioning\nobject\n{}\na map of sssd config files, used for user provisioning. Mounted to /etc/sssd/conf.d/ with 0600 permissions\n\n\ndangerRegenerateAutomatedValues\nbool\nfalse\n\n\n\ndiagnostics\nobject\n{\"directory\":\"/var/log/rstudio\",\"enabled\":false}\nSettings for enabling server diagnostics\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nthe full name of the release (can be overridden)\n\n\nglobal.secureCookieKey\nstring\n\"\"\n\n\n\nhomeStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nhomeStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for homeStorage\n\n\nhomeStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nhomeStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nhomeStorage.path\nstring\n\"/home\"\nthe path to mount the homeStorage claim within the pod\n\n\nhomeStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nhomeStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nhomeStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nhomeStorage.subPath\nstring\n\"\"\nan optional subPath for the volume mount\n\n\nhomeStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nthe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"rstudio/rstudio-workbench\"\nthe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nthe initContainer spec that will be used verbatim\n\n\njobJsonOverridesFiles\nobject\n{}\njobJsonOverridesFiles is a map of maps. Each item in the map will become a file (named by the key), and the underlying object will be converted to JSON as the file’s contents\n\n\nlauncher.enabled\nbool\ntrue\ndetermines whether the launcher should be started in the container\n\n\nlauncher.extraTemplates\nobject\n{}\nextra templates to render in the template directory.\n\n\nlauncher.includeDefaultTemplates\nbool\ntrue\nwhether to include the default job.tpl and service.tpl files included with the chart\n\n\nlauncher.includeTemplateValues\nbool\ntrue\nwhether to include the templateValues rendering process\n\n\nlauncher.kubernetesHealthCheck\nobject\n{\"enabled\":true,\"extraCurlArgs\":[\"-fsSL\"]}\nconfiguration for the “Kubernetes Health Check” that the launcher entrypoint runs at startup\n\n\nlauncher.namespace\nstring\n\"\"\nallow customizing the namespace that sessions are launched into. Note RBAC and some config issues today\n\n\nlauncher.templateValues\nobject\n{\"job\":{\"annotations\":{},\"labels\":{},\"ttlSecondsAfterFinished\":null},\"pod\":{\"affinity\":{},\"annotations\":{},\"command\":[],\"containerSecurityContext\":{},\"defaultSecurityContext\":{},\"env\":[],\"extraContainers\":[],\"imagePullPolicy\":\"\",\"imagePullSecrets\":[],\"initContainers\":[],\"labels\":{},\"nodeSelector\":{},\"securityContext\":{},\"serviceAccountName\":\"\",\"tolerations\":[],\"volumeMounts\":[],\"volumes\":[]},\"service\":{\"annotations\":{},\"labels\":{},\"type\":\"ClusterIP\"}}\nvalues that are passed along to the launcher job rendering process as a data object (in JSON). These values are then used within session templates.\n\n\nlauncher.templateValues.pod.command\nlist\n[]\ncommand for all pods. This is really not something we should expose and will be removed once we have a better option\n\n\nlauncher.useTemplates\nbool\nfalse\nwhether to render and use templates in the job launching process\n\n\nlauncherPem\nstring\n\"\"\nAn inline launcher.pem key. If not provided, one will be auto-generated. See README for more details.\n\n\nlauncherPub\nbool\nfalse\nAn inline launcher.pub key to pair with launcher.pem. If false (the default), we will try to generate a launcher.pub from the provided launcher.pem\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nlivenessProbe is used to configure the container’s livenessProbe\n\n\nloadBalancer.forceEnabled\nbool\nfalse\nwhether to force the loadBalancer to be enabled. Otherwise requires replicas > 1. Worth setting if you are HA but may only have one node\n\n\nnameOverride\nstring\n\"\"\nthe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the rstudio-workbench pods\n\n\npod.env\nlist\n[]\nenv is an array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-workbench pods\n\n\npod.lifecycle\nobject\n{}\ncontainer lifecycle hooks\n\n\npod.port\nint\n8787\nThe containerPort used by the main pod container\n\n\npod.securityContext\nobject\n{}\nValues to set the securityContext for the service pod\n\n\npod.sidecar\nlist\n[]\nsidecar is an array of containers that will be run alongside the main container\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nvolumeMounts is injected as-is into the “volumeMounts:” component of the pod.container spec\n\n\npod.volumes\nlist\n[]\nvolumes is injected as-is into the “volumes:” component of the pod.container spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nprometheusExporter.enabled\nbool\ntrue\nwhether the prometheus exporter sidecar should be enabled\n\n\nprometheusExporter.image.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nprometheusExporter.image.repository\nstring\n\"prom/graphite-exporter\"\n\n\n\nprometheusExporter.image.tag\nstring\n\"v0.9.0\"\n\n\n\nprometheusExporter.mappingYaml\nstring\nnil\nYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file\n\n\nprometheusExporter.resources\nobject\n{}\nresource specification for the prometheus exporter sidecar\n\n\nprometheusExporter.securityContext\nobject\n{}\nsecurityContext for the prometheus exporter sidecar\n\n\nrbac.clusterRoleCreate\nbool\nfalse\nWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.\n\n\nrbac.create\nbool\ntrue\nWhether to create rbac. (also depends on launcher.enabled = true)\n\n\nrbac.serviceAccount\nobject\n{\"annotations\":{},\"create\":true,\"labels\":{},\"name\":\"\"}\nThe serviceAccount to be associated with rbac (also depends on launcher.enabled = true)\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nreadinessProbe is used to configure the container’s readinessProbe\n\n\nreplicas\nint\n1\nreplicas is the number of replica pods to maintain for this service. Use 2 or more to enable HA\n\n\nresources\nobject\n{\"limits\":{\"cpu\":\"2000m\",\"enabled\":false,\"ephemeralStorage\":\"200Mi\",\"memory\":\"4Gi\"},\"requests\":{\"cpu\":\"100m\",\"enabled\":false,\"ephemeralStorage\":\"100Mi\",\"memory\":\"2Gi\"}}\nresources define requests and limits for the rstudio-server pod\n\n\nrevisionHistoryLimit\nint\n10\nThe revisionHistoryLimit to use for the pod deployment. Do not set to 0\n\n\nsealedSecret.annotations\nobject\n{}\nannotations for SealedSecret resources\n\n\nsealedSecret.enabled\nbool\nfalse\nuse SealedSecret instead of Secret to deploy secrets\n\n\nsecureCookieKey\nstring\n\"\"\n\n\n\nsecurityContext\nobject\n{}\n\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe Service port. This is the port your service will run under.\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace\n\n\nsession.defaultConfigMount\nbool\ntrue\nWhether to automatically mount the config.session configuration into session pods. If launcher.namespace is different from Release Namespace, then the chart will duplicate the session configmap in both namespaces to facilitate this\n\n\nsession.defaultHomeMount\nbool\ntrue\nWhether to automatically add the homeStorage PVC to the session (i.e. via the launcher-mounts file)\n\n\nsession.defaultSecretMountPath\nstring\n\"/mnt/session-secret/\"\nThe path to mount the sessionSecret (from config.sessionSecret) onto the server and session pods\n\n\nsession.image.repository\nstring\n\"rstudio/r-session-complete\"\nThe repository to use for the session image\n\n\nsession.image.tag\nstring\n\"\"\nA tag override for the session image. Overrides the “tagPrefix” above, if set. Default tag is { tagPrefix }{{ version }}\n\n\nsession.image.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for session images (common selections: ubuntu2204-, centos7-). Only used if tag is not defined\n\n\nshareProcessNamespace\nbool\nfalse\nwhether to provide shareProcessNamespace to the pod.\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nDefine the annotations for the Persistent Volume Claim resource\n\n\nsharedStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-server\"\nthe path to mount the sharedStorage claim within the pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/health-check\",\"port\":8787},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nstartupProbe is used to configure the container’s startupProbe\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nHow to handle updates to the service. RollingUpdate (the default) minimizes downtime, but will not work well if your license only allows a single activation.\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nuserCreate\nbool\nfalse\nuserCreate determines whether a user should be created at startup (if true)\n\n\nuserName\nstring\n\"rstudio\"\nuserName determines the username of the created user\n\n\nuserPassword\nstring\n\"rstudio\"\nuserPassword determines the password of the created user\n\n\nuserUid\nstring\n\"10000\"\nuserUid determines the UID of the created user\n\n\nversionOverride\nstring\n\"\"\nA Workbench version to override the “tag” for the RStudio Workbench image and the session images. Necessary until https://github.com/helm/helm/issues/8194\n\n\nxdgConfigDirs\nstring\n\"/mnt/dynamic:/mnt/session-configmap:/mnt/secret-configmap:/mnt/configmap:/mnt/load-balancer/\"\nThe XDG config dirs (directories where configuration will be read from). Do not change without good reason.\n\n\nxdgConfigDirsExtra\nlist\n[]\nA list of additional XDG config dir paths\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Workbench", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html", - "href": "charts/rstudio-connect/README.html", - "title": "Posit Connect", - "section": "", - "text": "Business Users and Collaborators use R and Python data products on Posit Connect that are published by Data Scientists.\n\n\n\nHelm charts are very useful tools for deploying resources into Kubernetes, however, they do require some familiarity with kubernetes and helm itself. Please ensure you have adequate training and IT support before deploying these charts into production environments. Reach out to your account representative if you need help deciding whether Helm is a good choice for your deployment.\nTo ensure reproducibility in your environment and insulate yourself from future changes, please:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes**\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.\n\n\n\n\nTo install the chart with the release name my-release at version 0.6.7:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-connect --version=0.6.7\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-connect -l\n\n\n\nTo function, this chart requires the following:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the data directory for Connect.\n\nIf sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.\nIf you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.\n\n\n\n\n\nThis chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-connect-license --from-file=licenses/rstudio-connect.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-connect-license\n secretKey: rstudio-connect.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-connect.lic\n\n\n\n\nIn most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-connect.\nrstudio-connect does not export many prometheus metrics on its own. Instead, we run a sidecar graphite exporter as described here\n\n\n\n\nThe configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.Postgres.Password=mypassword ...\nThe Helm config values are converted into the rstudio-connect.gcfg service configuration file via go-templating.\n\n\n\n\n\n\nKey\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nlist\n[]\nThe pod’s run arguments. By default, it uses the container’s default\n\n\ncommand\nlist\n[]\nThe pod’s run command. By default, it uses the container’s default\n\n\nconfig\nobject\nPosit Connect Configuration Reference\nA nested map of maps that generates the rstudio-connect.gcfg file\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nThe full name of the release (can be overridden)\n\n\nimage\nobject\n{\"imagePullPolicy\":\"IfNotPresent\",\"imagePullSecrets\":[],\"repository\":\"ghcr.io/rstudio/rstudio-connect\",\"tag\":\"\",\"tagPrefix\":\"ubuntu2204-\"}\nDefines the Posit Connect image to deploy\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nThe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"ghcr.io/rstudio/rstudio-connect\"\nThe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nThe initContainer spec that will be used verbatim\n\n\nlauncher.additionalRuntimeImages\nlist\n[]\nOptional. Additional images to append to the end of the “launcher.customRuntimeYaml” (in the “images” key). If customRuntimeYaml is a “map”, then “additionalRuntimeImages” will only be used if it is a “list”.\n\n\nlauncher.customRuntimeYaml\nstring\n\"base\"\nOptional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to “base”, which pulls in the default runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to “pro”, will pull in the “pro” versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image). Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments the first time the server starts. If any execution environments already exist in the database, these values are ignored; execution environments are not created or modified during subsequent restarts.\n\n\nlauncher.defaultInitContainer\nobject\n{\"enabled\":true,\"imagePullPolicy\":\"\",\"repository\":\"ghcr.io/rstudio/rstudio-connect-content-init\",\"securityContext\":{},\"tag\":\"\",\"tagPrefix\":\"ubuntu2204-\"}\nImage definition for the default Posit Connect Content InitContainer\n\n\nlauncher.defaultInitContainer.enabled\nbool\ntrue\nWhether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way.\n\n\nlauncher.defaultInitContainer.imagePullPolicy\nstring\n\"\"\nThe imagePullPolicy for the default initContainer\n\n\nlauncher.defaultInitContainer.repository\nstring\n\"ghcr.io/rstudio/rstudio-connect-content-init\"\nThe repository to use for the Content InitContainer image\n\n\nlauncher.defaultInitContainer.securityContext\nobject\n{}\nThe securityContext for the default initContainer\n\n\nlauncher.defaultInitContainer.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nlauncher.defaultInitContainer.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined\n\n\nlauncher.enabled\nbool\nfalse\nWhether to enable the launcher\n\n\nlauncher.extraTemplates\nobject\n{}\nextra templates to render in the template directory.\n\n\nlauncher.includeDefaultTemplates\nbool\ntrue\nwhether to include the default job.tpl and service.tpl files included with the chart\n\n\nlauncher.includeTemplateValues\nbool\ntrue\nwhether to include the templateValues rendering process\n\n\nlauncher.launcherKubernetesProfilesConf\nobject\n{}\nUser definition of launcher.kubernetes.profiles.conf for job customization\n\n\nlauncher.namespace\nstring\n\"\"\nThe namespace to launch sessions into. Uses the Release namespace by default\n\n\nlauncher.templateValues\nobject\n{\"job\":{\"annotations\":{},\"labels\":{}},\"pod\":{\"affinity\":{},\"annotations\":{},\"command\":[],\"containerSecurityContext\":{},\"defaultSecurityContext\":{},\"env\":[],\"extraContainers\":[],\"imagePullPolicy\":\"\",\"imagePullSecrets\":[],\"initContainers\":[],\"labels\":{},\"nodeSelector\":{},\"priorityClassName\":\"\",\"securityContext\":{},\"serviceAccountName\":\"\",\"tolerations\":[],\"volumeMounts\":[],\"volumes\":[]},\"service\":{\"annotations\":{},\"labels\":{},\"type\":\"ClusterIP\"}}\nValues to pass along to the Posit Connect session templating process\n\n\nlauncher.templateValues.pod.command\nlist\n[]\ncommand for all pods. This is really not something we should expose and will be removed once we have a better option\n\n\nlauncher.useTemplates\nbool\ntrue\nWhether to use launcher templates when launching sessions. Defaults to true\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nUsed to configure the container’s livenessProbe. Only included if enabled = true\n\n\nnameOverride\nstring\n\"\"\nThe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.affinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the rstudio-connect pods\n\n\npod.env\nlist\n[]\nAn array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.haste\nbool\ntrue\nA helper that defines the RSTUDIO_CONNECT_HASTE environment variable\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-connect pods\n\n\npod.port\nint\n3939\nThe containerPort used by the main pod container\n\n\npod.securityContext\nobject\n{}\nValues to set the securityContext for the connect pod\n\n\npod.sidecar\nbool\nfalse\nAn array of containers that will be run alongside the main pod\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nAn array of maps that is injected as-is into the “volumeMounts” component of the pod spec\n\n\npod.volumes\nlist\n[]\nAn array of maps that is injected as-is into the “volumes:” component of the pod spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nprometheusExporter.enabled\nbool\ntrue\nWhether the prometheus exporter sidecar should be enabled\n\n\nprometheusExporter.image.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nprometheusExporter.image.repository\nstring\n\"prom/graphite-exporter\"\n\n\n\nprometheusExporter.image.tag\nstring\n\"v0.9.0\"\n\n\n\nprometheusExporter.mappingYaml\nstring\nnil\nYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file\n\n\nprometheusExporter.resources\nobject\n{}\nresource specification for the prometheus exporter sidecar\n\n\nprometheusExporter.securityContext\nobject\n{}\nsecurityContext for the prometheus exporter sidecar\n\n\nrbac.clusterRoleCreate\nbool\nfalse\nWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.\n\n\nrbac.create\nbool\ntrue\nWhether to create rbac. (also depends on launcher.enabled = true)\n\n\nrbac.serviceAccount\nobject\n{\"annotations\":{},\"create\":true,\"labels\":{},\"name\":\"\"}\nThe serviceAccount to be associated with rbac (also depends on launcher.enabled = true)\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":3,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nUsed to configure the container’s readinessProbe. Only included if enabled = true\n\n\nreplicas\nint\n1\nThe number of replica pods to maintain for this service\n\n\nresources\nobject\n{}\nDefines resources for the rstudio-connect container\n\n\nsecurityContext\nobject\n{\"privileged\":true}\nValues to set the securityContext for Connect container. It must include “privileged: true” or “CAP_SYS_ADMIN” when launcher is not enabled. If launcher is enabled, this can be removed with securityContext: null\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe port to use for the Connect service\n\n\nservice.targetPort\nint\n3939\nThe port to forward to on the Connect pod. Also see pod.port\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\nA list of accessModes that are defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nAnnotations for the Persistent Volume Claim\n\n\nsharedStorage.create\nbool\nfalse\nWhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.mountContent\nbool\ntrue\nWhether the persistentVolumeClaim should be mounted to the content pods created by the Launcher\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-connect\"\nThe path to mount the sharedStorage claim within the Connect pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nThe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nThe type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.subPath\nstring\n\"\"\nan optional subPath for the volume mount\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nUsed to configure the container’s startupProbe. Only included if enabled = true\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nDefines the update strategy for a deployment\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nversionOverride\nstring\n\"\"\nA Connect version to override the “tag” for the Posit Connect image and the Content Init image. Necessary until https://github.com/helm/helm/issues/8194\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#best-practices", - "href": "charts/rstudio-connect/README.html#best-practices", - "title": "Posit Connect", - "section": "", - "text": "Helm charts are very useful tools for deploying resources into Kubernetes, however, they do require some familiarity with kubernetes and helm itself. Please ensure you have adequate training and IT support before deploying these charts into production environments. Reach out to your account representative if you need help deciding whether Helm is a good choice for your deployment.\nTo ensure reproducibility in your environment and insulate yourself from future changes, please:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes**\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#installing-the-chart", - "href": "charts/rstudio-connect/README.html#installing-the-chart", - "title": "Posit Connect", - "section": "", - "text": "To install the chart with the release name my-release at version 0.6.7:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-connect --version=0.6.7\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-connect -l", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#required-configuration", - "href": "charts/rstudio-connect/README.html#required-configuration", - "title": "Posit Connect", - "section": "", - "text": "To function, this chart requires the following:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the data directory for Connect.\n\nIf sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.\nIf you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#licensing", - "href": "charts/rstudio-connect/README.html#licensing", - "title": "Posit Connect", - "section": "", - "text": "This chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-connect-license --from-file=licenses/rstudio-connect.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-connect-license\n secretKey: rstudio-connect.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-connect.lic", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#general-principles", - "href": "charts/rstudio-connect/README.html#general-principles", - "title": "Posit Connect", - "section": "", - "text": "In most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-connect.\nrstudio-connect does not export many prometheus metrics on its own. Instead, we run a sidecar graphite exporter as described here", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#configuration-file", - "href": "charts/rstudio-connect/README.html#configuration-file", - "title": "Posit Connect", - "section": "", - "text": "The configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.Postgres.Password=mypassword ...\nThe Helm config values are converted into the rstudio-connect.gcfg service configuration file via go-templating.", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-connect/README.html#values", - "href": "charts/rstudio-connect/README.html#values", - "title": "Posit Connect", - "section": "", - "text": "Key\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nlist\n[]\nThe pod’s run arguments. By default, it uses the container’s default\n\n\ncommand\nlist\n[]\nThe pod’s run command. By default, it uses the container’s default\n\n\nconfig\nobject\nPosit Connect Configuration Reference\nA nested map of maps that generates the rstudio-connect.gcfg file\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nThe full name of the release (can be overridden)\n\n\nimage\nobject\n{\"imagePullPolicy\":\"IfNotPresent\",\"imagePullSecrets\":[],\"repository\":\"ghcr.io/rstudio/rstudio-connect\",\"tag\":\"\",\"tagPrefix\":\"ubuntu2204-\"}\nDefines the Posit Connect image to deploy\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nThe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"ghcr.io/rstudio/rstudio-connect\"\nThe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nThe initContainer spec that will be used verbatim\n\n\nlauncher.additionalRuntimeImages\nlist\n[]\nOptional. Additional images to append to the end of the “launcher.customRuntimeYaml” (in the “images” key). If customRuntimeYaml is a “map”, then “additionalRuntimeImages” will only be used if it is a “list”.\n\n\nlauncher.customRuntimeYaml\nstring\n\"base\"\nOptional. The runtime.yaml definition of Kubernetes runtime containers. Defaults to “base”, which pulls in the default runtime.yaml file. If changing this value, be careful to include the images that you have already used. If set to “pro”, will pull in the “pro” versions of the default runtime images (i.e. including the pro drivers at the cost of a larger image). Starting with Connect v2023.05.0, this configuration is used to bootstrap the initial set of execution environments the first time the server starts. If any execution environments already exist in the database, these values are ignored; execution environments are not created or modified during subsequent restarts.\n\n\nlauncher.defaultInitContainer\nobject\n{\"enabled\":true,\"imagePullPolicy\":\"\",\"repository\":\"ghcr.io/rstudio/rstudio-connect-content-init\",\"securityContext\":{},\"tag\":\"\",\"tagPrefix\":\"ubuntu2204-\"}\nImage definition for the default Posit Connect Content InitContainer\n\n\nlauncher.defaultInitContainer.enabled\nbool\ntrue\nWhether to enable the defaultInitContainer. If disabled, you must ensure that the session components are available another way.\n\n\nlauncher.defaultInitContainer.imagePullPolicy\nstring\n\"\"\nThe imagePullPolicy for the default initContainer\n\n\nlauncher.defaultInitContainer.repository\nstring\n\"ghcr.io/rstudio/rstudio-connect-content-init\"\nThe repository to use for the Content InitContainer image\n\n\nlauncher.defaultInitContainer.securityContext\nobject\n{}\nThe securityContext for the default initContainer\n\n\nlauncher.defaultInitContainer.tag\nstring\n\"\"\nOverrides the image tag whose default is the chart appVersion.\n\n\nlauncher.defaultInitContainer.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the Content InitContainer image (common selections: jammy-, ubuntu2204-). Only used if tag is not defined\n\n\nlauncher.enabled\nbool\nfalse\nWhether to enable the launcher\n\n\nlauncher.extraTemplates\nobject\n{}\nextra templates to render in the template directory.\n\n\nlauncher.includeDefaultTemplates\nbool\ntrue\nwhether to include the default job.tpl and service.tpl files included with the chart\n\n\nlauncher.includeTemplateValues\nbool\ntrue\nwhether to include the templateValues rendering process\n\n\nlauncher.launcherKubernetesProfilesConf\nobject\n{}\nUser definition of launcher.kubernetes.profiles.conf for job customization\n\n\nlauncher.namespace\nstring\n\"\"\nThe namespace to launch sessions into. Uses the Release namespace by default\n\n\nlauncher.templateValues\nobject\n{\"job\":{\"annotations\":{},\"labels\":{}},\"pod\":{\"affinity\":{},\"annotations\":{},\"command\":[],\"containerSecurityContext\":{},\"defaultSecurityContext\":{},\"env\":[],\"extraContainers\":[],\"imagePullPolicy\":\"\",\"imagePullSecrets\":[],\"initContainers\":[],\"labels\":{},\"nodeSelector\":{},\"priorityClassName\":\"\",\"securityContext\":{},\"serviceAccountName\":\"\",\"tolerations\":[],\"volumeMounts\":[],\"volumes\":[]},\"service\":{\"annotations\":{},\"labels\":{},\"type\":\"ClusterIP\"}}\nValues to pass along to the Posit Connect session templating process\n\n\nlauncher.templateValues.pod.command\nlist\n[]\ncommand for all pods. This is really not something we should expose and will be removed once we have a better option\n\n\nlauncher.useTemplates\nbool\ntrue\nWhether to use launcher templates when launching sessions. Defaults to true\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nUsed to configure the container’s livenessProbe. Only included if enabled = true\n\n\nnameOverride\nstring\n\"\"\nThe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.affinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the rstudio-connect pods\n\n\npod.env\nlist\n[]\nAn array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.haste\nbool\ntrue\nA helper that defines the RSTUDIO_CONNECT_HASTE environment variable\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-connect pods\n\n\npod.port\nint\n3939\nThe containerPort used by the main pod container\n\n\npod.securityContext\nobject\n{}\nValues to set the securityContext for the connect pod\n\n\npod.sidecar\nbool\nfalse\nAn array of containers that will be run alongside the main pod\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nAn array of maps that is injected as-is into the “volumeMounts” component of the pod spec\n\n\npod.volumes\nlist\n[]\nAn array of maps that is injected as-is into the “volumes:” component of the pod spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nprometheusExporter.enabled\nbool\ntrue\nWhether the prometheus exporter sidecar should be enabled\n\n\nprometheusExporter.image.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nprometheusExporter.image.repository\nstring\n\"prom/graphite-exporter\"\n\n\n\nprometheusExporter.image.tag\nstring\n\"v0.9.0\"\n\n\n\nprometheusExporter.mappingYaml\nstring\nnil\nYaml that defines the graphite exporter mapping. null by default, which uses the embedded / default mapping yaml file\n\n\nprometheusExporter.resources\nobject\n{}\nresource specification for the prometheus exporter sidecar\n\n\nprometheusExporter.securityContext\nobject\n{}\nsecurityContext for the prometheus exporter sidecar\n\n\nrbac.clusterRoleCreate\nbool\nfalse\nWhether to create the ClusterRole that grants access to the Kubernetes nodes API. This is used by the Launcher to get all of the IP addresses associated with the node that is running a particular job. In most cases, this can be disabled as the node’s internal address is sufficient to allow proper functionality.\n\n\nrbac.create\nbool\ntrue\nWhether to create rbac. (also depends on launcher.enabled = true)\n\n\nrbac.serviceAccount\nobject\n{\"annotations\":{},\"create\":true,\"labels\":{},\"name\":\"\"}\nThe serviceAccount to be associated with rbac (also depends on launcher.enabled = true)\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":3,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nUsed to configure the container’s readinessProbe. Only included if enabled = true\n\n\nreplicas\nint\n1\nThe number of replica pods to maintain for this service\n\n\nresources\nobject\n{}\nDefines resources for the rstudio-connect container\n\n\nsecurityContext\nobject\n{\"privileged\":true}\nValues to set the securityContext for Connect container. It must include “privileged: true” or “CAP_SYS_ADMIN” when launcher is not enabled. If launcher is enabled, this can be removed with securityContext: null\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe port to use for the Connect service\n\n\nservice.targetPort\nint\n3939\nThe port to forward to on the Connect pod. Also see pod.port\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Prometheus Operator is running). Defaults to the release namespace\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\nA list of accessModes that are defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nAnnotations for the Persistent Volume Claim\n\n\nsharedStorage.create\nbool\nfalse\nWhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.mountContent\nbool\ntrue\nWhether the persistentVolumeClaim should be mounted to the content pods created by the Launcher\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-connect\"\nThe path to mount the sharedStorage claim within the Connect pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nThe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nThe type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.subPath\nstring\n\"\"\nan optional subPath for the volume mount\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/__ping__\",\"port\":3939},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nUsed to configure the container’s startupProbe. Only included if enabled = true\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nDefines the update strategy for a deployment\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nversionOverride\nstring\n\"\"\nA Connect version to override the “tag” for the Posit Connect image and the Content Init image. Necessary until https://github.com/helm/helm/issues/8194\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Connect", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html", - "href": "charts/rstudio-pm/README.html", - "title": "Posit Package Manager", - "section": "", - "text": "IT Administrators use Posit Package Manager to control and manage R and Python packages that Data Scientists need to create and share data products.\n\n\n\nTo ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.\n\n\n\n\nTo install the chart with the release name my-release at version 0.5.26:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-pm --version=0.5.26\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-pm -l\n\n\n\n\n\n\nWhen upgrading to version 0.4.0 or later, the Package Manager service moves from running as root to running as the rstudio-pm user (with uid:gid 999:999).\nA chown of persistent storage may be required. The team is working to implement an automatic fix. To disable the automatic fix/hook, set enableMigrations=false.\n\n\n\n\n\nThis chart requires the following in order to function:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the data directory for Package Manager.\n\nIf sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.\nIf you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.\nAlternatively, S3 storage can be used. See the S3 Configuration section for details.\n\n\n\n\n\nThis chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-pm-license --from-file=licenses/rstudio-pm.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-pm-license\n secretKey: rstudio-pm.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-pm.lic\n\n\n\nPackage Manager can be configured to store its data in S3 buckets, which eliminates the need to provision shared storage for multiple replicas. A values.yaml file using S3 might contain something like the following:\nconfig:\n Storage:\n Default: s3\n S3Storage:\n Bucket: your-s3-bucket\nIf you are running on EKS, we strongly suggest using IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:\nserviceAccount:\n create: true\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here\nIf you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the chart supports setting static credentials:\nawsAccessKeyId: your-access-key-id\nawsSecretAccessKey: your-secret-access-key\nBear in mind that static, long-lived credentials are the least secure option and should be avoided if at all possible.\n\n\n\n\nIn most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-pm.\n\n\n\n\nThe configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.Postgres.Password=mypassword ...\nThe Helm config values are converted into the rstudio-pm.gcfg service configuration file via go-templating.\n\n\n\n\n\n\nKey\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nbool\nfalse\nargs is the pod’s run arguments. By default, it uses the container’s default\n\n\nawsAccessKeyId\nbool\nfalse\nawsAccessKeyId is the access key id for s3 access, used also to gate file creation\n\n\nawsSecretAccessKey\nstring\nnil\nawsSecretAccessKey is the secret access key, needs to be filled if access_key_id is\n\n\ncommand\nbool\nfalse\ncommand is the pod’s run command. By default, it uses the container’s default\n\n\nconfig\nobject\n{\"HTTP\":{\"Listen\":\":4242\"},\"Metrics\":{\"Enabled\":true}}\nconfig is a nested map of maps that generates the rstudio-pm.gcfg file\n\n\nenableMigration\nbool\ntrue\nEnable migrations for shared storage (if necessary) using Helm hooks.\n\n\nenableSandboxing\nbool\ntrue\nEnable sandboxing of Git builds, which requires elevated security privileges for the Package Manager container.\n\n\nextraContainers\nlist\n[]\nsidecar container list\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nthe full name of the release (can be overridden)\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nthe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"rstudio/rstudio-package-manager\"\nthe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nthe tag to use for the main pod image\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nthe initContainer spec that will be used verbatim\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nlivenessProbe is used to configure the container’s livenessProbe\n\n\nnameOverride\nstring\n\"\"\nthe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.annotations\nobject\n{}\nannotations is a map of keys / values that will be added as annotations to the pods\n\n\npod.containerSecurityContext\nobject\n{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"runAsUser\":999,\"seccompProfile\":{\"type\":\"{{ if .Values.enableSandboxing }}Unconfined{{ else }}RuntimeDefault{{ end }}\"}}\nthe securityContext for the main Package Manager container. Evaluated as a template.\n\n\npod.env\nlist\n[]\nenv is an array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-pm pods\n\n\npod.lifecycle\nobject\n{}\nContainer lifecycle hooks\n\n\npod.securityContext\nobject\n{}\nthe securityContext for the pod\n\n\npod.serviceAccountName\nstring\n\"\"\nDeprecated, use serviceAccount.name instead\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nvolumeMounts is an array of maps that is injected as-is into the “volumeMounts” component of the pod spec\n\n\npod.volumes\nlist\n[]\nvolumes is an array of maps that is injected as-is into the “volumes:” component of the pod spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":3,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nreadinessProbe is used to configure the container’s readinessProbe\n\n\nreplicas\nint\n1\nreplicas is the number of replica pods to maintain for this service\n\n\nresources\nobject\n{\"limits\":{\"cpu\":\"2000m\",\"enabled\":false,\"ephemeralStorage\":\"200Mi\",\"memory\":\"4Gi\"},\"requests\":{\"cpu\":\"100m\",\"enabled\":false,\"ephemeralStorage\":\"100Mi\",\"memory\":\"2Gi\"}}\nresources define requests and limits for the rstudio-pm pod\n\n\nrootCheckIsFatal\nbool\ntrue\nWhether the check for root accounts in the config file is fatal. This is meant to simplify migration to the new helm chart version.\n\n\nrstudioPMKey\nbool\nfalse\nrstudioPMKey is the rstudio-pm key used for the RStudio Package Manager service\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe Service port. This is the port your service will run under.\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceAccount.annotations\nobject\n{}\nAnnotations for the ServiceAccount, if any\n\n\nserviceAccount.create\nbool\ntrue\nWhether to create a Service Account\n\n\nserviceAccount.labels\nobject\n{}\nLabels for the ServiceAccount, if any\n\n\nserviceAccount.name\nstring\nWhen serviceAccount.create is true this defaults to the full name of the release\nServiceAccount to use, if any, or an explicit name for the one we create\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Operator is running). Defaults to the release namespace\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nDefine the annotations for the Persistent Volume Claim resource\n\n\nsharedStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-pm\"\nthe path to mount the sharedStorage claim within the pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nstartupProbe is used to configure the container’s startupProbe\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nThe update strategy used by the main service pod.\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nversionOverride\nstring\n\"\"\nA Package Manager version to override the “tag” for the RStudio Package Manager image. Necessary until https://github.com/helm/helm/issues/8194\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#for-production", - "href": "charts/rstudio-pm/README.html#for-production", - "title": "Posit Package Manager", - "section": "", - "text": "To ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#installing-the-chart", - "href": "charts/rstudio-pm/README.html#installing-the-chart", - "title": "Posit Package Manager", - "section": "", - "text": "To install the chart with the release name my-release at version 0.5.26:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/rstudio-pm --version=0.5.26\nTo explore other chart versions, look at:\nhelm search repo rstudio/rstudio-pm -l", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#upgrade-guidance", - "href": "charts/rstudio-pm/README.html#upgrade-guidance", - "title": "Posit Package Manager", - "section": "", - "text": "When upgrading to version 0.4.0 or later, the Package Manager service moves from running as root to running as the rstudio-pm user (with uid:gid 999:999).\nA chown of persistent storage may be required. The team is working to implement an automatic fix. To disable the automatic fix/hook, set enableMigrations=false.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#required-configuration", - "href": "charts/rstudio-pm/README.html#required-configuration", - "title": "Posit Package Manager", - "section": "", - "text": "This chart requires the following in order to function:\n\nA license file. See the Licensing section below for more details.\nA Kubernetes PersistentVolume that contains the data directory for Package Manager.\n\nIf sharedStorage.create is set, it creates a Persistent Volume Claim (PVC) that relies on the default storage class to generate the PersistentVolume. Most Kubernetes environments do not have a default storage class that you can use with ReadWriteMany access mode out-of-the-box. In this case, we recommend you disable sharedStorage.create and create your own PersistentVolume and PersistentVolumeClaim, then mount them into the container by specifying the pod.volumes and pod.volumeMounts parameters, or by specifying your PersistentVolumeClaim using sharedStorage.name and sharedStorage.mount.\nIf you cannot use a PersistentVolume to properly mount your data directory, mount your data in the container by using a regular Kubernetes Volume, specified in pod.volumes and pod.volumeMounts.\nAlternatively, S3 storage can be used. See the S3 Configuration section for details.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#licensing", - "href": "charts/rstudio-pm/README.html#licensing", - "title": "Posit Package Manager", - "section": "", - "text": "This chart supports activating the product using a license file.\nWe recommend storing a license file as a Secret and setting the license.file.secret and license.file.secretKey values accordingly.\nFirst, create the secret declaratively with YAML or imperatively using the following command:\nkubectl create secret generic rstudio-pm-license --from-file=licenses/rstudio-pm.lic\nSecond, specify the following values:\nlicense:\n file:\n secret: rstudio-pm-license\n secretKey: rstudio-pm.lic\nAlternatively, license files can be set during helm install with the following argument:\n--set-file license.file.contents=licenses/rstudio-pm.lic", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#s3-configuration", - "href": "charts/rstudio-pm/README.html#s3-configuration", - "title": "Posit Package Manager", - "section": "", - "text": "Package Manager can be configured to store its data in S3 buckets, which eliminates the need to provision shared storage for multiple replicas. A values.yaml file using S3 might contain something like the following:\nconfig:\n Storage:\n Default: s3\n S3Storage:\n Bucket: your-s3-bucket\nIf you are running on EKS, we strongly suggest using IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:\nserviceAccount:\n create: true\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here\nIf you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the chart supports setting static credentials:\nawsAccessKeyId: your-access-key-id\nawsSecretAccessKey: your-secret-access-key\nBear in mind that static, long-lived credentials are the least secure option and should be avoided if at all possible.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#general-principles", - "href": "charts/rstudio-pm/README.html#general-principles", - "title": "Posit Package Manager", - "section": "", - "text": "In most places, we opt to pass Helm values over configmaps. We translate these into the valid .gcfg file format required by rstudio-pm.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#configuration-file", - "href": "charts/rstudio-pm/README.html#configuration-file", - "title": "Posit Package Manager", - "section": "", - "text": "The configuration values all take the form of usual Helm values so you can set the database password with something like:\n... --set config.Postgres.Password=mypassword ...\nThe Helm config values are converted into the rstudio-pm.gcfg service configuration file via go-templating.", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/rstudio-pm/README.html#values", - "href": "charts/rstudio-pm/README.html#values", - "title": "Posit Package Manager", - "section": "", - "text": "Key\nType\nDefault\nDescription\n\n\n\n\naffinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\nargs\nbool\nfalse\nargs is the pod’s run arguments. By default, it uses the container’s default\n\n\nawsAccessKeyId\nbool\nfalse\nawsAccessKeyId is the access key id for s3 access, used also to gate file creation\n\n\nawsSecretAccessKey\nstring\nnil\nawsSecretAccessKey is the secret access key, needs to be filled if access_key_id is\n\n\ncommand\nbool\nfalse\ncommand is the pod’s run command. By default, it uses the container’s default\n\n\nconfig\nobject\n{\"HTTP\":{\"Listen\":\":4242\"},\"Metrics\":{\"Enabled\":true}}\nconfig is a nested map of maps that generates the rstudio-pm.gcfg file\n\n\nenableMigration\nbool\ntrue\nEnable migrations for shared storage (if necessary) using Helm hooks.\n\n\nenableSandboxing\nbool\ntrue\nEnable sandboxing of Git builds, which requires elevated security privileges for the Package Manager container.\n\n\nextraContainers\nlist\n[]\nsidecar container list\n\n\nextraObjects\nlist\n[]\nExtra objects to deploy (value evaluated as a template)\n\n\nfullnameOverride\nstring\n\"\"\nthe full name of the release (can be overridden)\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\nthe imagePullPolicy for the main pod image\n\n\nimage.imagePullSecrets\nlist\n[]\nan array of kubernetes secrets for pulling the main pod image from private registries\n\n\nimage.repository\nstring\n\"rstudio/rstudio-package-manager\"\nthe repository to use for the main pod image\n\n\nimage.tag\nstring\n\"\"\nthe tag to use for the main pod image\n\n\nimage.tagPrefix\nstring\n\"ubuntu2204-\"\nA tag prefix for the server image (common selection: ubuntu2204-). Only used if tag is not defined\n\n\ningress.annotations\nobject\n{}\n\n\n\ningress.enabled\nbool\nfalse\n\n\n\ningress.hosts\nstring\nnil\n\n\n\ningress.ingressClassName\nstring\n\"\"\nThe ingressClassName for the ingress resource. Only used for clusters that support networking.k8s.io/v1 Ingress resources\n\n\ningress.tls\nlist\n[]\n\n\n\ninitContainers\nbool\nfalse\nthe initContainer spec that will be used verbatim\n\n\nlicense.file\nobject\n{\"contents\":false,\"mountPath\":\"/etc/rstudio-licensing\",\"mountSubPath\":false,\"secret\":false,\"secretKey\":\"license.lic\"}\nthe file section is used for licensing with a license file\n\n\nlicense.file.contents\nbool\nfalse\ncontents is an in-line license file\n\n\nlicense.file.mountPath\nstring\n\"/etc/rstudio-licensing\"\nmountPath is the place the license file will be mounted into the container\n\n\nlicense.file.mountSubPath\nbool\nfalse\nIt can be preferable not to enable this, because then updates propagate automatically\n\n\nlicense.file.secret\nbool\nfalse\nsecret is an existing secret with a license file in it\n\n\nlicense.file.secretKey\nstring\n\"license.lic\"\nsecretKey is the key for the secret to use for the license file\n\n\nlicense.key\nstring\nnil\nkey is the license to use\n\n\nlicense.server\nbool\nfalse\nserver is the : for a license server\n\n\nlivenessProbe\nobject\n{\"enabled\":false,\"failureThreshold\":10,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":10,\"periodSeconds\":5,\"timeoutSeconds\":2}\nlivenessProbe is used to configure the container’s livenessProbe\n\n\nnameOverride\nstring\n\"\"\nthe name of the chart deployment (can be overridden)\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.annotations\nobject\n{}\nannotations is a map of keys / values that will be added as annotations to the pods\n\n\npod.containerSecurityContext\nobject\n{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"runAsUser\":999,\"seccompProfile\":{\"type\":\"{{ if .Values.enableSandboxing }}Unconfined{{ else }}RuntimeDefault{{ end }}\"}}\nthe securityContext for the main Package Manager container. Evaluated as a template.\n\n\npod.env\nlist\n[]\nenv is an array of maps that is injected as-is into the “env:” component of the pod.container spec\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the rstudio-pm pods\n\n\npod.lifecycle\nobject\n{}\nContainer lifecycle hooks\n\n\npod.securityContext\nobject\n{}\nthe securityContext for the pod\n\n\npod.serviceAccountName\nstring\n\"\"\nDeprecated, use serviceAccount.name instead\n\n\npod.terminationGracePeriodSeconds\nint\n120\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.volumeMounts\nlist\n[]\nvolumeMounts is an array of maps that is injected as-is into the “volumeMounts” component of the pod spec\n\n\npod.volumes\nlist\n[]\nvolumes is an array of maps that is injected as-is into the “volumes:” component of the pod spec\n\n\npodDisruptionBudget\nobject\n{}\nPod disruption budget\n\n\npriorityClassName\nstring\n\"\"\nThe pod’s priorityClassName\n\n\nreadinessProbe\nobject\n{\"enabled\":true,\"failureThreshold\":3,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":3,\"periodSeconds\":3,\"successThreshold\":1,\"timeoutSeconds\":1}\nreadinessProbe is used to configure the container’s readinessProbe\n\n\nreplicas\nint\n1\nreplicas is the number of replica pods to maintain for this service\n\n\nresources\nobject\n{\"limits\":{\"cpu\":\"2000m\",\"enabled\":false,\"ephemeralStorage\":\"200Mi\",\"memory\":\"4Gi\"},\"requests\":{\"cpu\":\"100m\",\"enabled\":false,\"ephemeralStorage\":\"100Mi\",\"memory\":\"2Gi\"}}\nresources define requests and limits for the rstudio-pm pod\n\n\nrootCheckIsFatal\nbool\ntrue\nWhether the check for root accounts in the config file is fatal. This is meant to simplify migration to the new helm chart version.\n\n\nrstudioPMKey\nbool\nfalse\nrstudioPMKey is the rstudio-pm key used for the RStudio Package Manager service\n\n\nservice.annotations\nobject\n{}\nAnnotations for the service, for example to specify an internal load balancer\n\n\nservice.clusterIP\nstring\n\"\"\nThe cluster-internal IP to use with service.type ClusterIP\n\n\nservice.loadBalancerIP\nstring\n\"\"\nThe external IP to use with service.type LoadBalancer, when supported by the cloud provider\n\n\nservice.nodePort\nbool\nfalse\nThe explicit nodePort to use for service.type NodePort. If not provided, Kubernetes will choose one automatically\n\n\nservice.port\nint\n80\nThe Service port. This is the port your service will run under.\n\n\nservice.type\nstring\n\"ClusterIP\"\nThe service type, usually ClusterIP (in-cluster only) or LoadBalancer (to expose the service using your cloud provider’s load balancer)\n\n\nserviceAccount.annotations\nobject\n{}\nAnnotations for the ServiceAccount, if any\n\n\nserviceAccount.create\nbool\ntrue\nWhether to create a Service Account\n\n\nserviceAccount.labels\nobject\n{}\nLabels for the ServiceAccount, if any\n\n\nserviceAccount.name\nstring\nWhen serviceAccount.create is true this defaults to the full name of the release\nServiceAccount to use, if any, or an explicit name for the one we create\n\n\nserviceMonitor.additionalLabels\nobject\n{}\nadditionalLabels normally includes the release name of the Prometheus Operator\n\n\nserviceMonitor.enabled\nbool\nfalse\nWhether to create a ServiceMonitor CRD for use with a Prometheus Operator\n\n\nserviceMonitor.namespace\nstring\n\"\"\nNamespace to create the ServiceMonitor in (usually the same as the one in which the Operator is running). Defaults to the release namespace\n\n\nsharedStorage.accessModes\nlist\n[\"ReadWriteMany\"]\naccessModes defined for the storage PVC (represented as YAML)\n\n\nsharedStorage.annotations\nobject\n{\"helm.sh/resource-policy\":\"keep\"}\nDefine the annotations for the Persistent Volume Claim resource\n\n\nsharedStorage.create\nbool\nfalse\nwhether to create the persistentVolumeClaim for shared storage\n\n\nsharedStorage.mount\nbool\nfalse\nWhether the persistentVolumeClaim should be mounted (even if not created)\n\n\nsharedStorage.name\nstring\n\"\"\nThe name of the pvc. By default, computes a value from the release name\n\n\nsharedStorage.path\nstring\n\"/var/lib/rstudio-pm\"\nthe path to mount the sharedStorage claim within the pod\n\n\nsharedStorage.requests.storage\nstring\n\"10Gi\"\nthe volume of storage to request for this persistent volume claim\n\n\nsharedStorage.selector\nobject\n{}\nselector for PVC definition\n\n\nsharedStorage.storageClassName\nbool\nfalse\nstorageClassName - the type of storage to use. Must allow ReadWriteMany\n\n\nsharedStorage.volumeName\nstring\n\"\"\nthe volumeName passed along to the persistentVolumeClaim. Optional\n\n\nstartupProbe\nobject\n{\"enabled\":false,\"failureThreshold\":30,\"httpGet\":{\"path\":\"/__ping__\",\"port\":4242},\"initialDelaySeconds\":10,\"periodSeconds\":10,\"timeoutSeconds\":1}\nstartupProbe is used to configure the container’s startupProbe\n\n\nstartupProbe.failureThreshold\nint\n30\nfailureThreshold * periodSeconds should be strictly > worst case startup time\n\n\nstrategy\nobject\n{\"rollingUpdate\":{\"maxSurge\":\"100%\",\"maxUnavailable\":0},\"type\":\"RollingUpdate\"}\nThe update strategy used by the main service pod.\n\n\ntolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\ntopologySpreadConstraints\nlist\n[]\nAn array used verbatim as the pod’s “topologySpreadConstraints” definition\n\n\nversionOverride\nstring\n\"\"\nA Package Manager version to override the “tag” for the RStudio Package Manager image. Necessary until https://github.com/helm/helm/issues/8194\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Package Manager", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html", - "href": "charts/posit-chronicle/README.html", - "title": "Posit Chronicle", - "section": "", - "text": "Chronicle helps data science managers and other stakeholders understand their organization’s use of other Posit products, primarily Posit Connect and Workbench.\n\n\n\nTo ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.\n\n\n\n\nTo install the chart with the release name my-release at version 0.3.1:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/posit-chronicle --version=0.3.1\nTo explore other chart versions, look at:\nhelm search repo rstudio/posit-chronicle -l\n\n\n\nThis chart deploys only the Chronicle server and is meant to be used in tandem with the Workbench and Connect charts. To actually send data to the server, you will need to run the Chronicle agent as a sidecar container on your Workbench or Connect server pods by setting pod.sidecar in their respective values.yaml files\nHere is an example of Helm values to run the agent sidecar in Workbench, where we set up a shared volume between containers for audit logs:\npod:\n # We will need to create a new volume to share audit logs between\n # the rstudio (workbench) and chronicle-agent containers\n volumes:\n - name: logs\n emptyDir: {}\n volumeMounts:\n - name: logs\n mountPath: \"/var/lib/rstudio-server/audit\"\n sidecar:\n - name: chronicle-agent\n image: ghcr.io/rstudio/chronicle-agent:2024.03.0\n volumeMounts:\n - name: logs\n mountPath: \"/var/lib/rstudio-server/audit\"\n env:\n - name: CHRONICLE_SERVER_ADDRESS\n value: \"http://chronicle-server.default\"\nAnd here is an example of Helm values for Connect, where a Connect API key from a Kubernetes Secret is used to unlock more detailed metrics:\npod:\n sidecar:\n - name: chronicle-agent\n image: ghcr.io/rstudio/chronicle-agent:2024.03.0\n env:\n - name: CHRONICLE_SERVER_ADDRESS\n value: \"http://chronicle-server.default\"\n - name: CONNECT_API_KEY\n valueFrom:\n secretKeyRef:\n name: connect\n key: apikey\nNote that it is up to the user to provision this Kubernetes Secret for the Connect API key.\n\n\n\nChronicle can be configured to persist data to a local Kubernetes Volume, AWS S3, or both.\nThe default configuration uses a local volume, which is suitable if you’d like to access and analyze the data within your cluster:\nconfig:\n LocalStorage:\n Enabled: true\n Location: \"/chronicle-data\"\n RetentionPeriod: \"30d\"\nretentionPeriod controls how long usage data are kept. For example, \"120m\" for 120 minutes, \"36h\" for 36 hours, 14d for two weeks, or \"0\" for unbounded retention. (Units smaller than seconds or larger than days are not supported.)\nYou can also persist data to AWS S3 instead of (or in addition to) local storage:\nconfig:\n S3Storage:\n Enabled: true\n Bucket: \"posit-chronicle\"\n Region: \"us-east-2\"\n\n\nIf you are running on EKS, you can use IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:\nserviceaccount:\n create: true\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here\nIf you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the S3 storage config allows specifying a profile:\nconfig:\n S3Storage:\n Enabled: true\n Bucket: \"posit-chronicle\"\n Profile: \"my-aws-account\"\n Region: \"us-east-2\"\n\n\n\nThe credentials Chronicle uses for S3 storage must have the following permissions enabled:\n\ns3:GetObject\ns3:ListBucket\ns3:PutObject\ns3:DeleteObject\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKey\nType\nDefault\nDescription\n\n\n\n\nconfig.HTTPS.Certificate\nstring\n\"\"\n\n\n\nconfig.HTTPS.Enabled\nbool\nfalse\n\n\n\nconfig.HTTPS.Key\nstring\n\"\"\n\n\n\nconfig.LocalStorage.Enabled\nbool\nfalse\n\n\n\nconfig.LocalStorage.Location\nstring\n\"./chronicle-data\"\n\n\n\nconfig.LocalStorage.RetentionPeriod\nstring\n\"30d\"\n\n\n\nconfig.Logging.ServiceLog\nstring\n\"STDOUT\"\n\n\n\nconfig.Logging.ServiceLogFormat\nstring\n\"TEXT\"\n\n\n\nconfig.Logging.ServiceLogLevel\nstring\n\"INFO\"\n\n\n\nconfig.Metrics.Enabled\nbool\ntrue\n\n\n\nconfig.Profiling.Enabled\nbool\nfalse\n\n\n\nconfig.S3Storage.Bucket\nstring\n\"posit-chronicle\"\n\n\n\nconfig.S3Storage.Enabled\nbool\nfalse\n\n\n\nconfig.S3Storage.Prefix\nstring\n\"\"\n\n\n\nconfig.S3Storage.Profile\nstring\n\"\"\n\n\n\nconfig.S3Storage.Region\nstring\n\"us-east-2\"\n\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nimage.repository\nstring\n\"ghcr.io/rstudio/chronicle\"\n\n\n\nimage.tag\nstring\n\"2024.03.0\"\n\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.affinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server pods\n\n\npod.args[0]\nstring\n\"start\"\n\n\n\npod.args[1]\nstring\n\"-c\"\n\n\n\npod.args[2]\nstring\n\"/etc/posit-chronicle/posit-chronicle.gcfg\"\n\n\n\npod.command\nstring\n\"/chronicle\"\nThe command and args to run in the chronicle-server container\n\n\npod.env\nlist\n[]\nOptional environment variables\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the chronicle-server pods\n\n\npod.selectorLabels\nobject\n{}\nAdditional selector labels to add to the chronicle-server pods\n\n\npod.terminationGracePeriodSeconds\nint\n30\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.tolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\nreplicas\nint\n1\nThe number of replica pods to maintain for this service\n\n\nservice.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server service\n\n\nservice.labels\nobject\n{}\nAdditional labels to add to the chronicle-server service\n\n\nservice.port\nint\n80\nThe port to use for the REST service\n\n\nservice.selectorLabels\nobject\n{}\nAdditional selector labels to add to the chronicle-server service\n\n\nserviceaccount.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server serviceaccount\n\n\nserviceaccount.create\nbool\nfalse\n\n\n\nserviceaccount.labels\nobject\n{}\nAdditional labels to add to the chronicle-server serviceaccount\n\n\nstorage.persistentVolumeSize\nstring\n\"1Gi\"\n\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html#for-production", - "href": "charts/posit-chronicle/README.html#for-production", - "title": "Posit Chronicle", - "section": "", - "text": "To ensure a stable production deployment:\n\n“Pin” the version of the Helm chart that you are using. You can do this using the:\n\nhelm dependency command and the associated “Chart.lock” files or\nthe --version flag.\n\n\n\n\n\n\nImportant\n\n\n\nThis protects you from breaking changes.\n\n\n\nBefore upgrading check for breaking changes using helm-diff plugin and helm diff upgrade.\nRead NEWS.md for updates on breaking changes and the documentation below on how to use the chart.", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html#installing-the-chart", - "href": "charts/posit-chronicle/README.html#installing-the-chart", - "title": "Posit Chronicle", - "section": "", - "text": "To install the chart with the release name my-release at version 0.3.1:\nhelm repo add rstudio https://helm.rstudio.com\nhelm upgrade --install my-release rstudio/posit-chronicle --version=0.3.1\nTo explore other chart versions, look at:\nhelm search repo rstudio/posit-chronicle -l", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html#usage", - "href": "charts/posit-chronicle/README.html#usage", - "title": "Posit Chronicle", - "section": "", - "text": "This chart deploys only the Chronicle server and is meant to be used in tandem with the Workbench and Connect charts. To actually send data to the server, you will need to run the Chronicle agent as a sidecar container on your Workbench or Connect server pods by setting pod.sidecar in their respective values.yaml files\nHere is an example of Helm values to run the agent sidecar in Workbench, where we set up a shared volume between containers for audit logs:\npod:\n # We will need to create a new volume to share audit logs between\n # the rstudio (workbench) and chronicle-agent containers\n volumes:\n - name: logs\n emptyDir: {}\n volumeMounts:\n - name: logs\n mountPath: \"/var/lib/rstudio-server/audit\"\n sidecar:\n - name: chronicle-agent\n image: ghcr.io/rstudio/chronicle-agent:2024.03.0\n volumeMounts:\n - name: logs\n mountPath: \"/var/lib/rstudio-server/audit\"\n env:\n - name: CHRONICLE_SERVER_ADDRESS\n value: \"http://chronicle-server.default\"\nAnd here is an example of Helm values for Connect, where a Connect API key from a Kubernetes Secret is used to unlock more detailed metrics:\npod:\n sidecar:\n - name: chronicle-agent\n image: ghcr.io/rstudio/chronicle-agent:2024.03.0\n env:\n - name: CHRONICLE_SERVER_ADDRESS\n value: \"http://chronicle-server.default\"\n - name: CONNECT_API_KEY\n valueFrom:\n secretKeyRef:\n name: connect\n key: apikey\nNote that it is up to the user to provision this Kubernetes Secret for the Connect API key.", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html#storage-configuration", - "href": "charts/posit-chronicle/README.html#storage-configuration", - "title": "Posit Chronicle", - "section": "", - "text": "Chronicle can be configured to persist data to a local Kubernetes Volume, AWS S3, or both.\nThe default configuration uses a local volume, which is suitable if you’d like to access and analyze the data within your cluster:\nconfig:\n LocalStorage:\n Enabled: true\n Location: \"/chronicle-data\"\n RetentionPeriod: \"30d\"\nretentionPeriod controls how long usage data are kept. For example, \"120m\" for 120 minutes, \"36h\" for 36 hours, 14d for two weeks, or \"0\" for unbounded retention. (Units smaller than seconds or larger than days are not supported.)\nYou can also persist data to AWS S3 instead of (or in addition to) local storage:\nconfig:\n S3Storage:\n Enabled: true\n Bucket: \"posit-chronicle\"\n Region: \"us-east-2\"\n\n\nIf you are running on EKS, you can use IAM Roles for Service Accounts to manage the credentials needed to access S3. In this scenario, once you have created an IAM role, you can use this role as an annotation on the existing Service Account:\nserviceaccount:\n create: true\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam::123456789000:role/iam-role-name-here\nIf you are unable to use IAM Roles for Service Accounts, there are any number of alternatives for injecting AWS credentials into a container. As a fallback, the S3 storage config allows specifying a profile:\nconfig:\n S3Storage:\n Enabled: true\n Bucket: \"posit-chronicle\"\n Profile: \"my-aws-account\"\n Region: \"us-east-2\"\n\n\n\nThe credentials Chronicle uses for S3 storage must have the following permissions enabled:\n\ns3:GetObject\ns3:ListBucket\ns3:PutObject\ns3:DeleteObject", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "charts/posit-chronicle/README.html#values", - "href": "charts/posit-chronicle/README.html#values", - "title": "Posit Chronicle", - "section": "", - "text": "Key\nType\nDefault\nDescription\n\n\n\n\nconfig.HTTPS.Certificate\nstring\n\"\"\n\n\n\nconfig.HTTPS.Enabled\nbool\nfalse\n\n\n\nconfig.HTTPS.Key\nstring\n\"\"\n\n\n\nconfig.LocalStorage.Enabled\nbool\nfalse\n\n\n\nconfig.LocalStorage.Location\nstring\n\"./chronicle-data\"\n\n\n\nconfig.LocalStorage.RetentionPeriod\nstring\n\"30d\"\n\n\n\nconfig.Logging.ServiceLog\nstring\n\"STDOUT\"\n\n\n\nconfig.Logging.ServiceLogFormat\nstring\n\"TEXT\"\n\n\n\nconfig.Logging.ServiceLogLevel\nstring\n\"INFO\"\n\n\n\nconfig.Metrics.Enabled\nbool\ntrue\n\n\n\nconfig.Profiling.Enabled\nbool\nfalse\n\n\n\nconfig.S3Storage.Bucket\nstring\n\"posit-chronicle\"\n\n\n\nconfig.S3Storage.Enabled\nbool\nfalse\n\n\n\nconfig.S3Storage.Prefix\nstring\n\"\"\n\n\n\nconfig.S3Storage.Profile\nstring\n\"\"\n\n\n\nconfig.S3Storage.Region\nstring\n\"us-east-2\"\n\n\n\nimage.imagePullPolicy\nstring\n\"IfNotPresent\"\n\n\n\nimage.repository\nstring\n\"ghcr.io/rstudio/chronicle\"\n\n\n\nimage.tag\nstring\n\"2024.03.0\"\n\n\n\nnodeSelector\nobject\n{}\nA map used verbatim as the pod’s “nodeSelector” definition\n\n\npod.affinity\nobject\n{}\nA map used verbatim as the pod’s “affinity” definition\n\n\npod.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server pods\n\n\npod.args[0]\nstring\n\"start\"\n\n\n\npod.args[1]\nstring\n\"-c\"\n\n\n\npod.args[2]\nstring\n\"/etc/posit-chronicle/posit-chronicle.gcfg\"\n\n\n\npod.command\nstring\n\"/chronicle\"\nThe command and args to run in the chronicle-server container\n\n\npod.env\nlist\n[]\nOptional environment variables\n\n\npod.labels\nobject\n{}\nAdditional labels to add to the chronicle-server pods\n\n\npod.selectorLabels\nobject\n{}\nAdditional selector labels to add to the chronicle-server pods\n\n\npod.terminationGracePeriodSeconds\nint\n30\nThe termination grace period seconds allowed for the pod before shutdown\n\n\npod.tolerations\nlist\n[]\nAn array used verbatim as the pod’s “tolerations” definition\n\n\nreplicas\nint\n1\nThe number of replica pods to maintain for this service\n\n\nservice.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server service\n\n\nservice.labels\nobject\n{}\nAdditional labels to add to the chronicle-server service\n\n\nservice.port\nint\n80\nThe port to use for the REST service\n\n\nservice.selectorLabels\nobject\n{}\nAdditional selector labels to add to the chronicle-server service\n\n\nserviceaccount.annotations\nobject\n{}\nAdditional annotations to add to the chronicle-server serviceaccount\n\n\nserviceaccount.create\nbool\nfalse\n\n\n\nserviceaccount.labels\nobject\n{}\nAdditional labels to add to the chronicle-server serviceaccount\n\n\nstorage.persistentVolumeSize\nstring\n\"1Gi\"\n\n\n\n\n\nAutogenerated from chart metadata using helm-docs v1.13.1", - "crumbs": [ - "Posit Chronicle", - "Overview" - ] - }, - { - "objectID": "examples/auto-scaling/README.html", - "href": "examples/auto-scaling/README.html", - "title": "RStudio Workbench with Auto-Scaling", - "section": "", - "text": "These files show you an example kubernetes auto-scaling configuration with RStudio Workbench. The two subdirectories, autoscaler and rstudio-workbench, contain specific configuration files that outline the parameters required to successfully set up kubernetes with auto-scaling.\nTo learn more about this use case, refer to the RStudio Solutions Site.\n\n\nThe values.yaml in the autoscaler folder outlines the configuration required for the cluster autoscaler. This is a component that automatically adjusts the size of a Kubernetes Cluster so that all pods have a place to run. We have provided a sample configuration for AWS EKS clusters. For more details see the Kubernetes Autoscaler Repo.\nNote: Autoscaler is a third party software maintained by the Kubernetes project.\n\n\n\nThe values.yaml in the rstudio-workbench folder outlines the timeout configurations required to set up this configuration. The file has 3 sections that need to be configured for autoscaling.\n\n\n\nThis section provides the configuration for the rsession.conf file which controls behaviour of the RStudio IDE processes, allowing you to tune various R session parameters. There are 4 parameters that need to be configured in this section. You can learn more about the options in the RStudio Workbench Admin Guide.\n\n...\nsession-timeout-minutes: 5\nsession-timeout-suspend: 1\nsession-quit-child-processes-on-exit: 1\nsession-timeout-kill-hours: 1\n\n\nThis section provides the configuration for the jupyter.conf file, which configures jupyter sessions. There are 3 parameters that need to be configured in this section. You can learn more about the options in the Jupyter Configuration section of the RStudio Workbench Admin Guide.\n\n...\nsession-cull-minutes: 5\nsession-shutdown-minutes: 3\nsession-cull-connected: 1\n\n\nThis section provides the configuration for the Kubernetes Job Launcher Plugin. You will need to specify the value below for the job-json-overrides parameter to prevent the automatic eviction of pods. For more details see the Kubernetes Plugin Configuration Guide.\n\n...\njob-json-overrides:\n - target: \"/spec/template/metadata/annotations/cluster-autoscaler.kubernetes.io~1safe-to-evict\"\n json: \"false\"\n name: evict-annotation" - }, - { - "objectID": "examples/auto-scaling/README.html#autoscaler", - "href": "examples/auto-scaling/README.html#autoscaler", - "title": "RStudio Workbench with Auto-Scaling", - "section": "", - "text": "The values.yaml in the autoscaler folder outlines the configuration required for the cluster autoscaler. This is a component that automatically adjusts the size of a Kubernetes Cluster so that all pods have a place to run. We have provided a sample configuration for AWS EKS clusters. For more details see the Kubernetes Autoscaler Repo.\nNote: Autoscaler is a third party software maintained by the Kubernetes project." - }, - { - "objectID": "examples/auto-scaling/README.html#rstudio-workbench", - "href": "examples/auto-scaling/README.html#rstudio-workbench", - "title": "RStudio Workbench with Auto-Scaling", - "section": "", - "text": "The values.yaml in the rstudio-workbench folder outlines the timeout configurations required to set up this configuration. The file has 3 sections that need to be configured for autoscaling.\n\n\n\nThis section provides the configuration for the rsession.conf file which controls behaviour of the RStudio IDE processes, allowing you to tune various R session parameters. There are 4 parameters that need to be configured in this section. You can learn more about the options in the RStudio Workbench Admin Guide.\n\n...\nsession-timeout-minutes: 5\nsession-timeout-suspend: 1\nsession-quit-child-processes-on-exit: 1\nsession-timeout-kill-hours: 1\n\n\nThis section provides the configuration for the jupyter.conf file, which configures jupyter sessions. There are 3 parameters that need to be configured in this section. You can learn more about the options in the Jupyter Configuration section of the RStudio Workbench Admin Guide.\n\n...\nsession-cull-minutes: 5\nsession-shutdown-minutes: 3\nsession-cull-connected: 1\n\n\nThis section provides the configuration for the Kubernetes Job Launcher Plugin. You will need to specify the value below for the job-json-overrides parameter to prevent the automatic eviction of pods. For more details see the Kubernetes Plugin Configuration Guide.\n\n...\njob-json-overrides:\n - target: \"/spec/template/metadata/annotations/cluster-autoscaler.kubernetes.io~1safe-to-evict\"\n json: \"false\"\n name: evict-annotation" - }, - { - "objectID": "docs/customize.html", - "href": "docs/customize.html", - "title": "Customize Kubernetes Jobs", - "section": "", - "text": "This doc discusses customizing Kubernetes Jobs in the context of the Posit Job Launcher. This is relevant for both Posit Workbench and Posit Connect when the job launcher is enabled.\n\n\nThe original mechanism for modifying kubernetes jobs using the Job Launcher is to use job-json-overrides.\nThere is a support article discussing the topic and examples in a legacy context here\nIn helm, there is a helper that simplifies some of this configuration. As a result, we will include several snippets below to simplify use cases.\n\n\nThe rstudio-library chart will ensure that: - this “nicer format” will be transformed into a “real” job-json-overrides configuration field\n\"*\":\n job-json-overrides:\n - name:\n target:\n json:\n\noverrides in the \"*\" section are added to groups (@mygroup) and users (username)\njson blobs (json key) are written to disk at an appropriate location with filename { name }.json\nthe array is aggregated into the required comma-separated list\nthe target part of the job spec will be modified by the Job Launcher\n\nIMPORTANT: name is arbitrary, but must be unique! (And should contain no spaces)\nSee examples below.\n\n\n\nThe job-json-override spec is discussed in detail in the Posit Launcher documentation. It uses the JSON Pointer RFC.\nSome points that are helpful to reference:\n\nAn array suffixed with - will “append” to the array (i.e. /spec/templates/spec/volumes/- will leave pre-defined volumes intact, but add a new entry)\nThe character combination ~1 in the target will resolve to /. This can be especially useful for annotation keys.\nThe character combination ~0 in the target will resolve to ~\n\n\n\n\n\n\nAdd a placement constraint to the session pod with key kubernetes.io/key and value value\n\"*\":\n job-json-overrides:\n - name: placement-constraint\n target: /spec/template/spec/nodeSelector/kubernetes.io~1key\n json: \"value\"\nNOTE: it is possible to use the placement-constraints configuration within the ” Profiles” configuration. However, this modifies the Workbench UI and is not enabled by default. (It requires user input to have the profiles included)\nIt is also possible to override the entire nodeSelector object, but this would conflict with any user-defined placement constraints.\n\n\n\nSet the serviceAccountName to my-service-account\n\"*\":\n job-json-overrides:\n - name: service-account\n target: /spec/template/spec/serviceAccountName\n json: \"my-service-account\"\n\n\n\nSet an imagePullSecret called my-pull-secret\n\"*\":\n job-json-overrides:\n - name: imagePullSecrets\n target: \"/spec/template/spec/imagePullSecrets\"\n json:\n - name: my-pull-secret\n\n\n\nSet the imagePullPolicy to \"Always\"\n\"*\":\n job-json-overrides:\n - target: \"/spec/template/spec/containers/0/imagePullPolicy\"\n json: \"Always\"\n name: imagePullPolicy\n\n\n\nAdd an annotation with key my.company.com/key and value my-annotation-value\n\"*\":\n job-json-overrides:\n - name: add-company-annotation\n target: /spec/template/metadata/annotations/my.company.com~1key\n json: \"my-annotation-value\"\n\n\n\nAdd a nodeAffinity for nodes with kubernetes.io/hostname label node-hostname\n\"*\":\n job-json-overrides:\n - name: node-affinity\n target: /spec/template/spec/affinity\n json:\n nodeAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: \"In\"\n values:\n - node-hostname\n\n\n\nAdd a ConfigMap called my-configmap to the session pod at /etc/configmap\n\"*\":\n job-json-overrides:\n - name: add-configmap-volume\n target: /spec/template/spec/volumes/-\n json:\n name: configmap-volume\n configMap:\n name: my-configmap\n - name: add-configmap-volume-mount\n target: /spec/template/spec/containers/0/volumeMounts/-\n json:\n name: configmap-volume\n mountPath: /etc/configmap\n\n\n\nAdd another volume to the session pod. This time, a PersistentVolumeClaim named my-pvc, mounted at /mnt/data\n\"*\":\n job-json-overrides:\n - name: add-pvc-volume\n target: /spec/template/spec/volumes/-\n json:\n name: pvc-volume\n persistentVolumeClaim:\n claimName: my-pvc\n - name: add-pvc-volume-mount\n target: /spec/template/spec/containers/0/volumeMounts/-\n json:\n name: pvc-volume\n mountPath: /mnt/data" - }, - { - "objectID": "docs/customize.html#job-json-overrides", - "href": "docs/customize.html#job-json-overrides", - "title": "Customize Kubernetes Jobs", - "section": "", - "text": "The original mechanism for modifying kubernetes jobs using the Job Launcher is to use job-json-overrides.\nThere is a support article discussing the topic and examples in a legacy context here\nIn helm, there is a helper that simplifies some of this configuration. As a result, we will include several snippets below to simplify use cases.\n\n\nThe rstudio-library chart will ensure that: - this “nicer format” will be transformed into a “real” job-json-overrides configuration field\n\"*\":\n job-json-overrides:\n - name:\n target:\n json:\n\noverrides in the \"*\" section are added to groups (@mygroup) and users (username)\njson blobs (json key) are written to disk at an appropriate location with filename { name }.json\nthe array is aggregated into the required comma-separated list\nthe target part of the job spec will be modified by the Job Launcher\n\nIMPORTANT: name is arbitrary, but must be unique! (And should contain no spaces)\nSee examples below.\n\n\n\nThe job-json-override spec is discussed in detail in the Posit Launcher documentation. It uses the JSON Pointer RFC.\nSome points that are helpful to reference:\n\nAn array suffixed with - will “append” to the array (i.e. /spec/templates/spec/volumes/- will leave pre-defined volumes intact, but add a new entry)\nThe character combination ~1 in the target will resolve to /. This can be especially useful for annotation keys.\nThe character combination ~0 in the target will resolve to ~\n\n\n\n\n\n\nAdd a placement constraint to the session pod with key kubernetes.io/key and value value\n\"*\":\n job-json-overrides:\n - name: placement-constraint\n target: /spec/template/spec/nodeSelector/kubernetes.io~1key\n json: \"value\"\nNOTE: it is possible to use the placement-constraints configuration within the ” Profiles” configuration. However, this modifies the Workbench UI and is not enabled by default. (It requires user input to have the profiles included)\nIt is also possible to override the entire nodeSelector object, but this would conflict with any user-defined placement constraints.\n\n\n\nSet the serviceAccountName to my-service-account\n\"*\":\n job-json-overrides:\n - name: service-account\n target: /spec/template/spec/serviceAccountName\n json: \"my-service-account\"\n\n\n\nSet an imagePullSecret called my-pull-secret\n\"*\":\n job-json-overrides:\n - name: imagePullSecrets\n target: \"/spec/template/spec/imagePullSecrets\"\n json:\n - name: my-pull-secret\n\n\n\nSet the imagePullPolicy to \"Always\"\n\"*\":\n job-json-overrides:\n - target: \"/spec/template/spec/containers/0/imagePullPolicy\"\n json: \"Always\"\n name: imagePullPolicy\n\n\n\nAdd an annotation with key my.company.com/key and value my-annotation-value\n\"*\":\n job-json-overrides:\n - name: add-company-annotation\n target: /spec/template/metadata/annotations/my.company.com~1key\n json: \"my-annotation-value\"\n\n\n\nAdd a nodeAffinity for nodes with kubernetes.io/hostname label node-hostname\n\"*\":\n job-json-overrides:\n - name: node-affinity\n target: /spec/template/spec/affinity\n json:\n nodeAffinity:\n requiredDuringSchedulingIgnoredDuringExecution:\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: \"In\"\n values:\n - node-hostname\n\n\n\nAdd a ConfigMap called my-configmap to the session pod at /etc/configmap\n\"*\":\n job-json-overrides:\n - name: add-configmap-volume\n target: /spec/template/spec/volumes/-\n json:\n name: configmap-volume\n configMap:\n name: my-configmap\n - name: add-configmap-volume-mount\n target: /spec/template/spec/containers/0/volumeMounts/-\n json:\n name: configmap-volume\n mountPath: /etc/configmap\n\n\n\nAdd another volume to the session pod. This time, a PersistentVolumeClaim named my-pvc, mounted at /mnt/data\n\"*\":\n job-json-overrides:\n - name: add-pvc-volume\n target: /spec/template/spec/volumes/-\n json:\n name: pvc-volume\n persistentVolumeClaim:\n claimName: my-pvc\n - name: add-pvc-volume-mount\n target: /spec/template/spec/containers/0/volumeMounts/-\n json:\n name: pvc-volume\n mountPath: /mnt/data" - }, - { - "objectID": "examples/connect/index.html", - "href": "examples/connect/index.html", - "title": "Posit Connect Examples", - "section": "", - "text": "The examples in this directory provide a starting point for deploying Posit Connect in different configurations.\nEach example has a beginning description and a series of TODO comments. Before using an example, read through all the comments and ensure you address each TODO.\nWhile each example focuses on one or more particular configurations, Posit Connect has some standard requirements listed in each example. Each example will need the following to run correctly:\n\nPostgreSQL database specified in the Connect configuration\nLicense key or file specified\nsharedStorage configured\n\n\n\n\n\n\n\nBasic configuration\n\n\n\nConfiguring Posit Connect with Recommended Settings\n\n\n\nContainer images\n\n\n\nConfiguring Posit Connect to Access Image Registries Requiring Authentication\n\n\nConfiguring Posit Connect with Custom Container Images\n\n\n\nAuthentication\n\n\n\nConfiguring Posit Connect with OpenID Connect\n\n\nConfiguring Posit Connect with SAML\n\n\n\nIngress\n\n\n\nConfiguring Posit Connect with a GKE Ingress\n\n\nConfiguring Posit Connect with a NGINX Ingress\n\n\nConfiguring Posit Connect with a Traefik Ingress\n\n\nConfiguring Posit Connect with an AWS ALB Ingress\n\n\nConfiguring Posit Connect with an Azure Application Gateway Ingress\n\n\n\nStorage\n\n\n\nConfiguring Posit Connect with additional volumes\n\n\nConfiguring Posit Connect with an NFS-backed PersistentVolume\n\n\n\nBeta migration\n\n\n\nOff-Host Execution Beta User Migration\n\n\n\nNo matching items", - "crumbs": [ - "Posit Connect", - "Examples" - ] - }, - { - "objectID": "examples/workbench/index.html", - "href": "examples/workbench/index.html", - "title": "Posit Workbench Examples", - "section": "", - "text": "The examples in this directory provide a starting point for deploying Posit Workbench in different configurations. Each example has a beginning description and a series of TODO comments.\nBefore using an example, read through all the comments and ensure you address each TODO.\nWhile each example focuses on one or more particular configurations, RStudio Workbench has some standard requirements listed in each example.\nEach example needs the following to run correctly:\n\nPostgreSQL database specified in the Workbench configuration\nLicense key or file specified\nhomeStorage configured\nsharedStorage configured\n\n\n\n\n\n\n\nBasic configuration\n\n\n\nConfiguring Posit Workbench with Recommended Settings\n\n\n\nContainer images\n\n\n\nConfiguring Posit Workbench to Access Image Registries Requiring Authentication\n\n\nConfiguring Posit Workbench with Custom Container Images\n\n\n\nAuthentication\n\n\n\nConfiguring Posit Workbench with OpenID Connect\n\n\nConfiguring Posit Workbench with SAML\n\n\n\nIngress\n\n\n\nConfiguring Posit Workbench with a GKE Ingress\n\n\nConfiguring Posit Workbench with a NGINX Ingress\n\n\nConfiguring Posit Workbench with a Traefik Ingress\n\n\nConfiguring Posit Workbench with an AWS ALB Ingress\n\n\nConfiguring Posit Workbench with an Azure Application Gateway Ingress\n\n\n\nStorage\n\n\n\nConfiguring Posit Workbench with additional volumes\n\n\nConfiguring Posit Workbench with an NFS-backed PersistentVolume\n\n\n\nNo matching items", - "crumbs": [ - "Posit Workbench", - "Examples" - ] - }, - { - "objectID": "examples/connect/application-configuration/index.html", - "href": "examples/connect/application-configuration/index.html", - "title": "Configuring Posit Connect with Recommended Settings", - "section": "", - "text": "Configuring Posit Connect with Recommended Settings\nThis example deploys Posit Connect with the recommended application configuration.\nThese settings are recommend for most deployments and are described below:\n\nSet replicas > 1 to deploy Connect load balanced across multiple pods\nSet a default Posit Package Manager CRAN URL\nSet a default Posit Package Manager PyPI URL\nEnable Quarto content\n\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n\nreplicas: 2 # TODO: Adjust the amount depending on your requirements\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Required to set a custom PyPI repo\nextraObjects:\n - apiVersion: v1\n kind: ConfigMap\n metadata:\n name: pip-config-connect\n data:\n # TODO: if using Posit Package Manager, edit the below to match your package manager python repo URL\n pip.conf: |\n [global]\n timeout = 60\n index-url = https://packagemanager.posit.co/pypi/latest/simple\n trusted-host = packagemanager.posit.co\n\nlauncher:\n enabled: true # Required for Off-Host Execution mode\n useTemplates: true # Required to set a custom PyPI repo\n templateValues:\n pod:\n volumes:\n - name: pip-config-volume\n configMap:\n name: pip-config-connect\n volumeMounts:\n - mountPath: /etc/pip.conf\n name: pip-config-volume\n subPath: pip.conf\n\nsecurityContext:\n privileged: false\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>.\n\n Authentication:\n \"RPackageRepository \\\"CRAN\\\"\":\n URL: https://packagemanager.posit.co/cran/__linux__/jammy/latest # TODO: If using Package Manager change to match your package manager R repo url\n # If using other R repos, add them here using the below format \n # \"RPackageRepository \\\"INTERNAL\\\"\":\n # URL: https://packagemanager.posit.co/cran/__linux__/jammy/latest\n Quarto:\n Enabled: true" - }, - { - "objectID": "examples/connect/auth/saml.html", - "href": "examples/connect/auth/saml.html", - "title": "Configuring Posit Connect with SAML", - "section": "", - "text": "Configuring Posit Connect with SAML\nThis example deploys Posit Connect using SAML SSO for authentication.\nUsers will be authenticated via SSO (using SAML) and then users will be created in Connect upon first login or upon creation via the Connect API. Connect will populate user information based on certain attributes received from the IdP. IdPAttributeProfile may be set to prepopulate attribute mapping for common IdPs, set to default for a common generic mapping or left empty to manually map each attribute. See the Using attribute profiles section of the Connect Admin Guide for more details regarding profile mappings.\nBy default all users get created with the Viewer role which is the default setting in Authorization.DefaultUserRole. Users can be automatically mapped to different roles based on group membership.\nSee the Authentication Integration (Using SAML) section of the Connect Admin Guide for more details. The Connect Admin guide also has pages for integrations with specific IdPs such as Okta and Entra ID.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\nlauncher:\n enabled: true # Required for Off-Host Execution mode\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n Authentication:\n Provider: saml\n SAML:\n # Please see https://docs.posit.co/connect/admin/authentication/saml-based/saml/ for more examples of custom SAML integrations\n IdPMetaDataURL: \"https://idp.example.com/saml/metadata\" # TODO: Change to match your saml provider's metadata url\n IdPAttributeProfile: default # TODO: Change to match your auth provider. Accepted values are \"okta\", \"azure\" (Azure AD/Entra ID), and \"default\" (all others)\n # Setting IdPAttributeProfile will match Connect with certain attributes.\n # These can be customized instead by not setting SAML.IdPAttributeProfile\n # and defining each attribute instead in this section.\n # https://docs.posit.co/connect/admin/authentication/saml-based/azure-ad-saml/#saml-attributes\n # \n # Enable this for a better user experience, unless\n # managing a large number of groups is a concern:\n # GroupsAutoProvision: true\n #\n # When troubleshooting a SAML problem, more verbose logging\n # is produced by uncommenting the following line:\n # Logging: true\n #\n # By default all users get created with the Viewer role which is the default\n # setting in Authorization.DefaultUserRole, which can be modified.\n # Users can be automatically mapped to different roles based on group\n # membership.\n # https://docs.posit.co/connect/admin/authentication/oauth2-openid-based/openid-connect/#user-role-mapping\n #\n # Authorization:\n # UserRoleGroupMapping: true\n # PublisherRoleMapping: \"Developers\"\n # AdministratorRoleMapping: \"Administrators\"\n #\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/container-images/private-images.html", - "href": "examples/connect/container-images/private-images.html", - "title": "Configuring Posit Connect to Access Image Registries Requiring Authentication", - "section": "", - "text": "Configuring Posit Connect to Access Image Registries Requiring Authentication\nThis example deploys Posit Connect using custom images in registries requiring authentication instead of the default public Posit provided images.\nThere are a minimum of three images that Connect requires to function in Off-Host Execution mode. They are listed below with their cooresponding default public repositories on ghcr.io\n\nConnect service container ghcr.io/rstudio/rstudio-connect\nContent container ghcr.io/rstudio/content-base\nContent init container ghcr.io/rstudio/rstudio-connect-content-init\n\nThere are several content contents listed as execution enviornments by default on initial Connect startup based on the listing in the default-runtime.yaml file. Setting customRuntimeYaml will instead use the execution environments defined in that section instead of the default ones. Additional content containers may be added to provide more R, Python and Quarto versions and other system dependencies. See the Content Execution Environment section in the Connect Admin Guide for more details.\nThese images can be pulled from your own container registry instead of the public Posit provided images. This example also shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg.\nThe registry credentials secret must be specified in two places in the values to apply to Connect, content and init containers (shown in the example below). Also note the launcher.templateValues.pod.imagePullSecrets provides the pod-level imagePullSecret that provides the secret to pull the launcher.defaultInitContainer as well.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Define the custom image for the Connect pod(s)\nimage:\n repository: ghcr.io/rstudio/rstudio-connect # TODO: Change to match your custom image repository\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n imagePullSecrets:\n - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets\n\nlauncher:\n enabled: true # Required for Off-Host Execution mode\n useTemplates: true\n # Define the custom image(s) for the content pod(s)\n # Note these are only used on the initial creation of the Connect cluster\n # with an empty database. Once Connect is running you should add environments\n # via the UI or Connect API. More information is available in the Admin Guide:\n # https://docs.posit.co/connect/admin/appendix/off-host/execution-environments\n templateValues:\n pod:\n imagePullSecrets:\n - name: private-registery-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets\n customRuntimeYaml:\n name: \"Kubernetes\"\n images:\n # TODO: Add custom images based on the below template\n - name: ghcr.io/rstudio/content-base:r4.2.2-py3.11.3-ubuntu2204 # TODO: Change to match your custom image repository\n python:\n installations:\n -\n path: /opt/python/3.11.3/bin/python3 # TODO: Change to match the Python path available in your image\n version: 3.11.3 # TODO: Change to match the Python version available in your image\n r:\n installations:\n -\n path: /opt/R/4.2.2/bin/R # TODO: Change to match the R path available in your image\n version: 4.2.2 # TODO: Change to match the R version available in your image\n quarto:\n installations:\n - path: /opt/quarto/1.3.340/bin/quarto # TODO: Change to match the quarto path available in your image\n version: 1.3.340 # TODO: Change to match the Quarto version available in your image\n # Define the custom image(s) for the content pod(s) init container\n defaultInitContainer:\n repository: ghcr.io/rstudio/rstudio-connect-content-init # TODO: Change to match your custom image repository\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/ingress/azure-gateway.html", - "href": "examples/connect/ingress/azure-gateway.html", - "title": "Configuring Posit Connect with an Azure Application Gateway Ingress", - "section": "", - "text": "Configuring Posit Connect with an Azure Application Gateway Ingress\nThis example deploys Posit Connect with an Ingress using the Azure Application Gateway Ingress Controller to create an Azure Application Gateway load balancer. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"azure-application-gateway\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n appgw.ingress.kubernetes.io/ssl-redirect: \"true\"\n appgw.ingress.kubernetes.io/request-timeout: \"60\"\n appgw.ingress.kubernetes.io/cookie-based-affinity: \"true\"\n appgw.ingress.kubernetes.io/cookie-based-affinity-distinct-name: \"true\"\n hosts:\n - host: connect.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - connect.example.com # TODO: Change to your domain\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/ingress/nginx.html", - "href": "examples/connect/ingress/nginx.html", - "title": "Configuring Posit Connect with a NGINX Ingress", - "section": "", - "text": "Configuring Posit Connect with a NGINX Ingress\nThis example deploys Posit Connect with an Ingress using the Ingress NGINX Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.\n\n\n\n\n\n\nNote\n\n\n\nThis example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.\n\n\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"nginx\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n nginx.ingress.kubernetes.io/affinity: cookie\n nginx.ingress.kubernetes.io/affinity-mode: persistent\n nginx.ingress.kubernetes.io/session-cookie-name: posit-connect\n nginx.ingress.kubernetes.io/proxy-body-size: \"0\"\n hosts:\n - host: connect.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.\n - secretName: posit-connect-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - connect.example.com # TODO: Change to your domain\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/connect/storage/additional-volumes.html", - "href": "examples/connect/storage/additional-volumes.html", - "title": "Configuring Posit Connect with additional volumes", - "section": "", - "text": "Configuring Posit Connect with additional volumes\nThis example shows how to mount a ConfigMap to the Connect pod and a PVC is mounted to content pods. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.\nDepending on the need to add additional volumes, you may only need to mount to the Connect service or content pods but not both. For example, if you need to add TLS certificates for Connect via a ConfigMap then the content pods do not need the ConfigMap mounted.\nTo use this example you will need:\n\na license file or key\na ReadWriteMany POSIX compliant storage class for sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-connect#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: connect.lic # TODO: Change to the secret key containing your Connect license\n\n# Configures Connect shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: connect-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# This section is used to mount to the Connect container which is\n# often used to add in additional configuration and TLS certificates\n# which are not needed in the content containers.\npod:\n volumeMounts:\n - mountPath: /etc/connect-certs # TODO: Change to your desired mount path\n name: ldap-certificate # TODO: Change to match the volume name below\n volumes:\n - name: ldap-certificate # TODO: Change to match the volumeMounts name above\n # Can be any type of volume... persistentVolumeClaim, configMap, etc.\n # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired\n configMap:\n name: connect-ldap-certificate # TODO: Change to match your ConfigMap name\n\n# This section is only needed if you need to mount to the content containers\n# which is often the case if you need to mount data for content to access\nlauncher:\n useTemplates: true # Required to mount the content pods\n templateValues:\n pod:\n volumeMounts:\n - mountPath: /mnt/data # TODO: Change to your desired mount path\n name: shared-data # TODO: Ensure matches the name specified in volumes below\n volumes:\n - name: shared-data # TODO: Ensure matches the name specified in volumeMounts above\n # Can be any type of volume... persistentVolumeClaim, configMap, etc.\n # Can also provision a PVC or PV via `extraObjects` if desired\n persistentVolumeClaim:\n claimName: shared-data-pvc # TODO: Change to an available PVC name\n\n# The config section overwrites values in Posit Connect's main\n# .gcfg configuration file.\nconfig:\n # Configures the Postgres connection for Posit Connect.\n Database:\n Provider: \"Postgres\"\n Postgres:\n # The URL syntax below is to utilize a PostgreSQL database installed\n # in the cluster as described in the Kubernetes Cluster Preparation\n # page of this guide. Change this URL if your PostgreSQL database is\n # setup externally or in a different location.\n URL: \"postgres://connect@postgres.example.com:5432/connect?sslmode=disable\"\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>." - }, - { - "objectID": "examples/package-manager/container-images/custom-images.html", - "href": "examples/package-manager/container-images/custom-images.html", - "title": "Configuring Posit Package Manager with Custom Container Images", - "section": "", - "text": "Configuring Posit Package Manager with Custom Container Images\nThis example deploys Posit Package Manager using a custom image instead of the default public Posit provided image.\nThe Package Manager image may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images.\nThe default public images are on Docker Hub:\nPackage Manager: rstudio/rstudio-package-manager\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\nimage:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/rstudio-package-manager\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/ingress/aws-alb.html", - "href": "examples/package-manager/ingress/aws-alb.html", - "title": "Configuring Posit Package Manager with an AWS ALB Ingress", - "section": "", - "text": "Configuring Posit Package Manager with an AWS ALB Ingress\nThis example deploys Posit Package Manager with an Ingress using the AWS Load Balancer Controller to create an Application Load Balancer (ALB). This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS and use AWS Certificate Manager if desired.\nThe AWS Load Balancer Controller has a variety of settings and modes of operation. Please visit the AWS documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"alb\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n alb.ingress.kubernetes.io/target-type: ip\n alb.ingress.kubernetes.io/listen-ports: '[{\"HTTP\": 80}, {\"HTTPS\":443}]'\n alb.ingress.kubernetes.io/ssl-redirect: '443'\n alb.ingress.kubernetes.io/scheme: internet-facing # internet-facing or internal\n alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION>:<AWS_ACCOUNT_ID>:certificate/<CERT_ID> # TODO: If you are using AWS Certificate Manager, enter one or more ARNs\n hosts:\n - host: packagemanager.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - packagemanager.example.com # TODO: Change to your domain\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/ingress/gce.html", - "href": "examples/package-manager/ingress/gce.html", - "title": "Configuring Posit Package Manager with a GCE Ingress", - "section": "", - "text": "Configuring Posit Package Manager with a GCE Ingress\nThis example deploys Posit Package Manager with an Ingress using the GKE Ingress Controller to create a GCP Application Load Balancer. This example is provided to show how to set annotations to redirect HTTP traffic to HTTPS and use GCP Certificate Manager if desired.\nThe GKE Ingress Controller has a variety of settings and modes of operation. Please visit the GCP documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n annotations:\n kubernetes.io/ingress.class: gce # TODO: Fill in your desired ingress class for the ingress resource. Note ingress.ingressClassName cannot be used for GKE ingress, it must be supplied as an annotation.\n kubernetes.io/ingress.global-static-ip-name: packagemanager-static-ip # TODO: Change to your static IP name \n networking.gke.io/managed-certificates: packagemanager-managed-cert # TODO: If you are using GCP Certificate Manager, change this to match your ManagedCertificate name (added in extraObjects below)\n networking.gke.io/v1beta1.FrontendConfig: packagemanager-frontend-config # TODO: Change to match the name of the FrontendConfig defined in extraObjects\n kubernetes.io/ingress.allow-http: \"true\" # FrontendConfig defined in extraObjects redirects HTTP to HTTPS with a 301\n hosts:\n - host: packagemanager.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - packagemanager.example.com # TODO: Change to your domain\n\nextraObjects:\n - apiVersion: networking.gke.io/v1beta1\n kind: FrontendConfig\n metadata:\n name: packagemanager-frontend-config\n spec:\n redirectToHttps:\n enabled: true\n responseCodeName: MOVED_PERMANENTLY_DEFAULT\n - apiVersion: networking.gke.io/v1\n kind: ManagedCertificate\n metadata:\n name: packagemanager-managed-cert\n spec:\n domains:\n # TODO: if you want to use GCP managed certificates, change this to your domain, otherwise delete this ManagedCertificate object\n # Please note that wildcard domains are NOT allowed\n - packagemanager.example.com \n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/ingress/traefik.html", - "href": "examples/package-manager/ingress/traefik.html", - "title": "Configuring Posit Package Manager with a Traefik Ingress", - "section": "", - "text": "Configuring Posit Package Manager with a Traefik Ingress\nThis example deploys Posit Package Manager with an Ingress using the Traefik Ingress Controller.\nThe Traefik Ingress Controller has a variety of settings and modes of operation. Please visit the Traefik documentation for more details specific to your use case.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Package Manager license\n\n# Configures Package Manager shared storage\n# This should NOT be set if using S3 for storage\n# Docs here on using S3 instead: https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#s3-configuration\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\ningress:\n enabled: true\n ingressClassName: \"traefik\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n hosts:\n - host: packagemanager.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are supplying a certificate/key secret.\n - secretName: posit-packagemanager-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - packagemanager.example.com # TODO: Change to your domain\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/package-manager/storage/nfs-pv.html", - "href": "examples/package-manager/storage/nfs-pv.html", - "title": "Configuring Posit Package Manager with an NFS-backed PersistentVolume", - "section": "", - "text": "Configuring Posit Package Manager with an NFS-backed PersistentVolume\nThis example deploys Posit Package Manager with a single PersistentVolume backed by an NFS server.\nThe PersistentVolume allows setting NFS mountOptions and it creates a StorageClass that Posit Package Manager then takes advantage of when it creates its PersistentVolumeClaim.\nBoth the PVC and PV will be left around after the helm release is removed (for manual cleanup) due to the persistentVolumeReclaimPolicy: Retain setting.\nTo use this example you will need:\n\na license file or key\na PostgreSQL database\neither\n\na ReadWriteMany POSIX compliant storage class for sharedStorage\nS3\n\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-pm#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: packagemanager.lic # TODO: Change to the secret key containing your Workbench license\n\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-pm-sharedstorage-pv # TODO: Ensure this name matches the name and storageClassName defined in the PV created below in extraObjects.\n # volumeName: pm-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# This is evaluated as a template\n# TODO: Change the `mountOptions` and `nfs` settings to suite your NFS setup\nextraObjects:\n - |\n apiVersion: v1\n kind: PersistentVolume\n metadata:\n name: nfs-pm-sharedstorage-pv\n annotations:\n \"helm.sh/resource-policy\": keep\n spec:\n capacity:\n storage: {{ .Values.sharedStorage.requests.storage }}\n volumeMode: Filesystem\n accessModes:\n - ReadWriteMany\n persistentVolumeReclaimPolicy: Retain\n storageClassName: nfs-pm-sharedstorage-pv\n mountOptions:\n - rw\n - lookupcache=pos\n - vers=4\n nfs:\n path: /\n server: nfs.server.example.com\n\nconfig:\n Database:\n Provider: postgres\n Postgres:\n URL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database.\n Password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>\n UsageDataURL: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>\" # TODO: Change this URI to reach your Postgres database for metrics. This must be either a seperate database or scheam from the main Package Manager database.\n UsageDataPassword: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.Postgres.Password=<your-postgres-password>" - }, - { - "objectID": "examples/workbench/application-configuration/index.html", - "href": "examples/workbench/application-configuration/index.html", - "title": "Configuring Posit Workbench with Recommended Settings", - "section": "", - "text": "Configuring Posit Workbench with Recommended Settings\nThis example deploys Posit Workbench with the recommended application configuration.\nThese settings are recommend for most deployments and are described below:\n\nSet replicas > 1 to deploy Workbench load balanced across multiple pods\nSet a default Posit Connect URL\nSet a default Posit Package Manager CRAN URL\nSet a default Posit Package Manager PyPI URL\nSet RStudio Pro IDE timeout settings\nSet Jupyter IDE timeout settings\nEnable the administrator dashboard and set user group(s) to have admin and admin super user permissions\nSet default and max resource limits for users\n\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\nreplicas: 2 # TODO: Adjust the amount depending on your requirements\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\nlauncher:\n useTemplates: true # Required when specifying custom PyPI repos in `pip.conf`\n\nconfig:\n session:\n rsession.conf:\n default-rsconnect-server: \"\" # TODO: Add your Posit Connect URL to auto populate for users\n # These settings apply to RStudio Pro IDE sessions\n session-timeout-minutes: 60 # TODO: Adjust based on your requirements\n session-timeout-suspend: 1\n session-quit-child-processes-on-exit: 1\n repos.conf:\n # By default Posit Public Package Manager (P3M) is the default R \n # repository for Workbench users. This is recommended as P3M provides\n # linux binaries for many R packages which will decrease package \n # installation time. If you have your own Posit Package Manager server\n # then replace with the URL. Note you can list multiple repos in \n # `repos.conf` but you must include one repo named \"CRAN\".\n CRAN: https://packagemanager.posit.co/cran/__linux__/jammy/latest # TODO: Change this URL to point to your own Package Manager CRAN URL if desired\n pip.conf:\n \"global\":\n index-url: https://packagemanager.posit.co/pypi/latest/simple # TODO: Change this URL to point to your own Package Manager PyPI URL if desired\n trusted-host: packagemanager.posit.co # TODO: Change this to match the domain name specified in `index-url`. Do NOT include http:// or https://\n server:\n rserver.conf:\n admin-enabled: 1 # More information at https://docs.posit.co/ide/server-pro/server_management/administrative_dashboard.html\n admin-group: \"admingroup\" # TODO: Specify Linux group(s) to give administrator privileges\n admin-superuser-group: \"admin-superuser-group\" # TODO: Specify Linux group(s) to give administrator superuser privileges\n jupyter.conf:\n # These settings apply to Jupyter Notebook and JupyterLab IDE sessions\n session-cull-minutes: 60 # TODO: Adjust based on your requirements\n session-shutdown-minutes: 5\n profiles:\n launcher.kubernetes.profiles.conf:\n \"*\": # TODO: Adjust based on your requirements\n # These settings are applied for all users and can be changed to suit\n # your particular user needs. See the following resources for more information:\n # https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#etcrstudiolauncherkubernetesprofilesconf\n # https://docs.posit.co/ide/server-pro/job_launcher/kubernetes_plugin.html#kube-profiles\n default-cpus: \"1.0\"\n default-mem-mb: \"2048\"\n max-cpus: \"4.0\"\n max-mem-mb: \"8192\"\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/auth-user-provisioning/saml.html", - "href": "examples/workbench/auth-user-provisioning/saml.html", - "title": "Configuring Posit Workbench with SAML", - "section": "", - "text": "Configuring Posit Workbench with SAML\nThis example deploys Posit Workbench using SAML SSO for authentication and sssd for user provisioning.\nUsers will be authenticated via SSO (using SAML) and Workbench will match an attribute (Username by default) to a Linux user account in the Workbench container. sssd is already running in the Workbench container and can be used to automatically provision local user accounts using LDAP or Active Directory.\nSee the SAML Single Sign-On Authentication section of the Workbench Admin Guide for more details.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>.\n server:\n rserver.conf:\n auth-saml: 1\n auth-saml-sp-attribute-username: Username # TODO: Verify this works with your IdP. This attribute must match the Linux account usernames.\n auth-saml-metadata-url: https://idp.example.com/saml/metadata # TODO: Change to match your IdP\n # auth-saml-idp-post-binding is set to 0 by default but some IdPs require it be set to 1 (see below):\n # auth-saml-idp-post-binding: 1\n # TODO: Fill out the details of sssd.conf for your specific AD/LDAP setup. sssd is already present in the Workbench image.\n userProvisioning:\n example.com.conf:\n sssd:\n config_file_version: 2\n services: nss, pam\n domains: example.com\n domain/example.com:\n debug_level: 6\n id_provider: ldap\n auth_provider: ldap\n chpass_provider: none\n sudo_provider: none\n access_provider: ldap\n enumerate: true\n cache_credentials: false\n ldap_schema: rfc2307bis\n ldap_uri: ldaps://ldap.example.com\n ldap_search_base: ou=users,dc=example,dc=com\n ldap_user_search_base: ou=users,dc=example,dc=com\n ldap_user_object_class: inetOrgPerson\n ldap_user_name: username\n override_homedir: /mnt/home/%u\n ldap_group_search_base: ou=roles,dc=example,dc=com\n ldap_group_name: cn\n ldap_id_use_start_tls: true\n ldap_tls_reqcert: never\n ldap_tls_cacert: /etc/ssl/certs/ca-certificates.crt\n ldap_default_bind_dn: cn=bind-account,ou=users,dc=example,dc=com\n ldap_default_authtok: placeholder\n ldap_access_filter: (objectClass=inetOrgPerson)\n default_shell: /bin/bash\n ldap_access_order: filter\n ldap_user_uid_number: uidNumber\n ldap_user_gid_number: gidNumber" - }, - { - "objectID": "examples/workbench/container-images/private-images.html", - "href": "examples/workbench/container-images/private-images.html", - "title": "Configuring Posit Workbench to Access Image Registries Requiring Authentication", - "section": "", - "text": "Configuring Posit Workbench to Access Image Registries Requiring Authentication\nThis example deploys Posit Workbench using custom images in registries requiring authentication instead of the default public Posit provided images.\nBoth the Workbench service and session container images may be customized in the helm chart to pull from your own container registry instead of the public Posit provided images. This example also shows where to provide private registry credentials in the form of a Kubernetes secret of type kubernetes.io/dockercfg.\nNote the registry credentials secret must be specified in two places in the values to apply to Workbench and session containers (shown in the example below).\nThe default public images are on Docker Hub:\nWorkbench service: rstudio/rstudio-workbench Workbench sessions: rstudio/r-session-complete\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\nimage:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/rstudio-workbench\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n imagePullSecrets:\n - name: private-registry-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets\n\nsession:\n image:\n tagPrefix: ubuntu2204- # TODO: Change to match your custom image tag prefix\n repository: \"rstudio/r-session-complete\" # TODO: Change to match your custom image repository\n tag: \"\" # TODO: Change to match your custom image tag. By default when this is left blank the chart app version is automatically filled out.\n\nlauncher:\n useTemplates: true # Required to set `imagePullSecrets` for `session.image`\n templateValues:\n imagePullSecrets:\n - name: private-registry-creds # TODO: Change this to match the secret of type kubernetes.io/dockercfg in your cluster containing authentication credentials to your registry. More information: https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/ingress/azure-gateway.html", - "href": "examples/workbench/ingress/azure-gateway.html", - "title": "Configuring Posit Workbench with an Azure Application Gateway Ingress", - "section": "", - "text": "Configuring Posit Workbench with an Azure Application Gateway Ingress\nThis example deploys Posit Workbench with an Ingress using the Azure Application Gateway Ingress Controller to create an Azure Application Gateway load balancer. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Azure Application Gateway Ingress Controller has a variety of settings and modes of operation. Please visit the Azure documentation for more details specific to your use case.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\ningress:\n enabled: true\n ingressClassName: \"azure-application-gateway\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n appgw.ingress.kubernetes.io/ssl-redirect: \"true\"\n appgw.ingress.kubernetes.io/request-timeout: \"60\"\n appgw.ingress.kubernetes.io/cookie-based-affinity: \"true\"\n appgw.ingress.kubernetes.io/cookie-based-affinity-distinct-name: \"true\"\n hosts:\n - host: workbench.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.\n - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - workbench.example.com # TODO: Change to your domain\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/ingress/nginx.html", - "href": "examples/workbench/ingress/nginx.html", - "title": "Configuring Posit Workbench with a NGINX Ingress", - "section": "", - "text": "Configuring Posit Workbench with a NGINX Ingress\nThis example deploys Posit Workbench with an Ingress using the Ingress NGINX Controller. This example is provided to show how to set annotations to enabled session affinity and to redirect HTTP traffic to HTTPS.\nThe Ingress NGINX Controller has a variety of settings and modes of operation. Please visit the NGINX controller documentation for more details specific to your use case.\n\n\n\n\n\n\nNote\n\n\n\nThis example is for the Ingress NGINX Controller which is part of Kubernetes and is located at https://github.com/kubernetes/ingress-nginx. If you are using the NGINX or NGINX Plus Ingress Controllers from NGINX Inc located at https://github.com/nginxinc/kubernetes-ingress then different annotations will need to be applied.\n\n\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\ningress:\n enabled: true\n ingressClassName: \"nginx\" # TODO: Fill in your desired ingressClassName for the ingress resource. If blank it will use the cluster default.\n annotations:\n nginx.ingress.kubernetes.io/affinity: cookie\n nginx.ingress.kubernetes.io/affinity-mode: persistent\n nginx.ingress.kubernetes.io/session-cookie-name: posit-workbench\n hosts:\n - host: workbench.example.com # TODO: Change to your domain\n paths: \n - \"/\" # TODO: Change to your desired path\n tls: # This tls section is only required if you are manually supplying a certificate/key, it may not be required if you are using cert-manager or another automatic TLS certificate manager.\n - secretName: posit-workbench-tls # TODO: Change to the name of your secret of type kubernetes.io/tls\n hosts:\n - workbench.example.com # TODO: Change to your domain\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - }, - { - "objectID": "examples/workbench/storage/additional-volumes.html", - "href": "examples/workbench/storage/additional-volumes.html", - "title": "Configuring Posit Workbench with additional volumes", - "section": "", - "text": "Configuring Posit Workbench with additional volumes\nThis example shows how to mount a ConfigMap to the Workbench pod and a PVC is mounted to session pods. This pattern of specifying the volumes and volumeMounts will work for a variety of volume types: PVC, ConfigMap, etc.\nDepending on the need to add additional volumes, you may only need to mount to the Workbench service or session pods but not both. For example, if you need to add TLS certificates for Workbench via a ConfigMap then the session pods do not need the ConfigMap mounted.\nTo use the example you will need:\n\na license file or key\nReadWriteMany POSIX compliant storage class for homeStorage and sharedStorage\na PostgreSQL database.\n\n\n\nvalues.yaml\n\n# Using a license file with the helm chart:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-file\n# If you would like to use a license key see this documentation:\n# https://github.com/rstudio/helm/tree/main/charts/rstudio-workbench#license-key\nlicense:\n file:\n secret: posit-licenses # TODO: Change to the secret name in your cluster\n secretKey: workbench.lic # TODO: Change to the secret key containing your Workbench license\n\n# Configures user home directory shared storage\nhomeStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-home-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 100G\n\n# Configures Workbench shared storage\nsharedStorage:\n create: true\n mount: true\n storageClassName: nfs-sc-rwx # TODO: Change to a RWX StorageClass available in your cluster\n # volumeName: wb-shared-pv-name # Only needed if PVs have been statically provisioned, in which case this will need to match the PV name.\n requests:\n storage: 1G\n\n# This section is used to mount to the Workbench container which is\n# often used to add in additional configuration and TLS certificates\n# which are not needed in the session containers.\npod:\n volumeMounts:\n - mountPath: /etc/workbench-certs # TODO: Change to your desired mount path\n name: ldap-certificate # TODO: Change to match the volume name below\n volumes:\n - name: ldap-certificate # TODO: Change to match the volumeMounts name above\n # Can be any type of volume... persistentVolumeClaim, configMap, etc.\n # Can also provision a PVC, PV, ConfigMap, etc via `extraObjects` if desired\n configMap:\n name: workbench-ldap-certificate # TODO: Change to match your ConfigMap name\n\n# This section is only needed if you need to mount to the session containers\n# which is often the case if you need to mount data for users to access\n# in their IDE sessions.\nlauncher:\n useTemplates: true # Required to mount the session pods\n templateValues:\n pod:\n volumeMounts:\n - mountPath: /mnt/data # TODO: Change to your desired mount path\n name: shared-data # TODO: Ensure matches the name specified in volumes below\n volumes:\n - name: shared-data # TODO: Ensure matches the name specified in volumeMounts above\n # Can be any type of volume... persistentVolumeClaim, configMap, etc.\n # Can also provision a PVC or PV via `extraObjects` if desired\n persistentVolumeClaim:\n claimName: shared-data-pvc # TODO: Change to an available PVC name\n\nconfig:\n secret:\n database.conf:\n provider: \"postgresql\"\n connection-uri: \"postgres://<USERNAME>@<HOST>:<PORT>/<DATABASE>?sslmode=require\" # TODO: Change this URI to reach your Postgres database.\n password: \"<PASSWORD>\" # TODO: Remove this line and instead set the password during helm install with --set config.secret.database\\.conf.password=<your-postgres-password>." - } -] \ No newline at end of file diff --git a/site_libs/bootstrap/bootstrap-dark.min.css b/site_libs/bootstrap/bootstrap-dark.min.css deleted file mode 100644 index 1046c700..00000000 --- a/site_libs/bootstrap/bootstrap-dark.min.css +++ /dev/null @@ -1,12 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";x h1,x .h1{size:44px}h2,.h2{size:28px}.navbar-title{color:#fff}.nav-link{font-family:"Source Code Pro",monospace;text-transform:uppercase;letter-spacing:.03em;font-size:14px !important;font-weight:500 !important;color:#fff !important}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:#419599 !important;font-weight:700 !important}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:#0f1c29 !important}.nav-footer{color:#fff !important;border-top:solid #404041 1px}.nav-footer a{color:#fff !important}.footnote-back{color:#94bdbf}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#c2c2c4 !important}.nav-page .nav-page-text{color:#c2c2c4}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:rgba(110,118,129,.4) !important;color:#fff}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#000 !important;border:none}.code-with-filename strong{color:#6e9ac3}.nav-tabs .nav-link.active{color:#419599 !important}.nav-tabs .nav-link{text-transform:none !important;font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;color:#fff !important}.nav-tabs .nav-link:hover,.nav-link:focus{color:#419599 !important}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#297075 !important}.nav-pills .nav-link:hover,.nav-link:focus{isolation:isolate;border:none !important}.nav-pills .nav-link.active,.nav-link:hover{color:#fff !important}.sidebar-navigation li a{color:#fff}.sidebar-navigation li a:hover{color:inherit}.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#419599 !important}li::marker{color:#419599}.callout.callout-style-default:not(.no-icon) div.callout-title-container{color:#fff !important}div.callout.callout-style-default>div.callout-header{opacity:none}div.callout-note.callout{border-left-color:#213d4f !important;border-right:1px solid #213d4f !important;border-top:1px solid #213d4f !important;border-bottom:1px solid #213d4f !important}div.callout-note .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzAwMDAwMCIgY2xhc3M9ImJpIGJpLWluZm8tY2lyY2xlIiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYiLz4KICA8cGF0aCBkPSJtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCIvPgo8L3N2Zz4=") !important}div.callout-note.callout-style-default>.callout-header{background-color:#447099 !important}div.callout-warning.callout{border-left-color:#80361c !important;border-right:1px solid #80361c !important;border-top:1px solid #80361c !important;border-bottom:1px solid #80361c !important}div.callout-warning .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzAwMDAwMCIgY2xhc3M9ImJpIGJpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik03LjkzOCAyLjAxNkEuMTMuMTMgMCAwIDEgOC4wMDIgMmEuMTMuMTMgMCAwIDEgLjA2My4wMTYuMTUuMTUgMCAwIDEgLjA1NC4wNTdsNi44NTcgMTEuNjY3Yy4wMzYuMDYuMDM1LjEyNC4wMDIuMTgzYS4yLjIgMCAwIDEtLjA1NC4wNi4xLjEgMCAwIDEtLjA2Ni4wMTdIMS4xNDZhLjEuMSAwIDAgMS0uMDY2LS4wMTcuMi4yIDAgMCAxLS4wNTQtLjA2LjE4LjE4IDAgMCAxIC4wMDItLjE4M0w3Ljg4NCAyLjA3M2EuMTUuMTUgMCAwIDEgLjA1NC0uMDU3bTEuMDQ0LS40NWExLjEzIDEuMTMgMCAwIDAtMS45NiAwTC4xNjUgMTMuMjMzYy0uNDU3Ljc3OC4wOTEgMS43NjcuOTggMS43NjdoMTMuNzEzYy44ODkgMCAxLjQzOC0uOTkuOTgtMS43Njd6Ii8+CiAgPHBhdGggZD0iTTcuMDAyIDEyYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNS45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHoiLz4KPC9zdmc+") !important}div.callout-warning.callout-style-default>.callout-header{background-color:#ab4d26 !important}div.callout-important.callout{border-left-color:#542938 !important;border-right:1px solid #542938 !important;border-top:1px solid #542938 !important;border-bottom:1px solid #542938 !important}div.callout-important .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzAwMDAwMCIgY2xhc3M9ImJpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZSIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Ii8+CiAgPHBhdGggZD0iTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHoiLz4KPC9zdmc+") !important}div.callout-important.callout-style-default>.callout-header{background-color:#9a4665 !important}.table>:not(caption)>*>*{border-top:2px solid #101e2b}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-bg-type: #101e2b !important}.table-hover>tbody>tr:hover>*{--bs-table-bg-state: #001c2b !important}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:1rem;color:#c2c2c4 !important}.preview-header>h1:after,.preview-header>.h1:after,.preview-header>h2:after,.preview-header>.h2:after,.preview-header>h3:after,.preview-header>.h3:after,.preview-header>h4:after,.preview-header>.h4:after,header h1 .preview-header,header .h1 .preview-header,div span.preview-feature{background-color:#ee6331;color:#fff;border:1px solid #ec5119;font-weight:600;font-size:9pt !important;padding:0rem .4rem}div span.preview-feature{margin-left:1em;text-transform:uppercase}ol.groovyAlpha li>p:before{content:counter(list-counter, lower-alpha);font-weight:600}/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 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: #ffffff;--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-default: #dee2e6;--bs-primary: #419599;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222, 226, 230;--bs-primary-rgb: 65, 149, 153;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #1a3c3d;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #d9eaeb;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #b3d5d6;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--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", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, system-ui;--bs-font-monospace: "Source Code Pro", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Open Sans", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, system-ui;--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #c2c2c4;--bs-body-color-rgb: 194, 194, 196;--bs-body-bg: #0c1721;--bs-body-bg-rgb: 12, 23, 33;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(194, 194, 196, 0.75);--bs-secondary-color-rgb: 194, 194, 196;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(194, 194, 196, 0.5);--bs-tertiary-color-rgb: 194, 194, 196;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: #ffffff;--bs-link-color: #419599;--bs-link-color-rgb: 65, 149, 153;--bs-link-decoration: underline;--bs-link-hover-color: #34777a;--bs-link-hover-color-rgb: 52, 119, 122;--bs-code-color: #7d12ba;--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.25rem;--bs-border-radius-sm: 0.2em;--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(65, 149, 153, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[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: #ffffff;--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: #8dbfc2;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #0d1e1f;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #27595c;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #8dbfc2;--bs-link-hover-color: #a4ccce;--bs-link-color-rgb: 141, 191, 194;--bs-link-hover-color-rgb: 164, 204, 206;--bs-code-color: white;--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}:root{font-size:var(--bs-root-font-size)}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:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.4rem + 1.8vw)}@media(min-width: 1200px){h1,.h1{font-size:2.75rem}}h2,.h2{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h2,.h2{font-size:1.75rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-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;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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:"Source Code Pro",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.25rem}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;border-radius:.25rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#0c1721;background-color:#c2c2c4;border-radius:.2em}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:.5rem;padding-bottom:.5rem;color:rgba(194,194,196,.75);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:.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}::-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{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.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:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#0c1721;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(194,194,196,.75)}.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}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #c2c2c4;--bs-table-bg: #0c1721;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #c2c2c4;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #c2c2c4;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #c2c2c4;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .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:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid #fff}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.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)>*{--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: #d9eaeb;--bs-table-border-color: #c3d3d4;--bs-table-striped-bg: #cededf;--bs-table-striped-color: #000;--bs-table-active-bg: #c3d3d4;--bs-table-active-color: #000;--bs-table-hover-bg: #c9d8d9;--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: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--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: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--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: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--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: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--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: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--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: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #ffffff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #ffffff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #ffffff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #ffffff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{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,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(194,194,196,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#c2c2c4;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0c1721;background-clip:padding-box;border:1px solid #dee2e6;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .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:#c2c2c4;background-color:#0c1721;border-color:#a0cacc;outline:0;box-shadow:0 0 0 .25rem rgba(65,149,153,.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:rgba(194,194,196,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#c2c2c4;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#c2c2c4;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 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(1px * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:.2em}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 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:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#c2c2c4;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#0c1721;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#a0cacc;outline:0;box-shadow:0 0 0 .25rem rgba(65,149,153,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #c2c2c4}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2em}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}[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,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #0c1721;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=checkbox],.shiny-input-container .checkbox input[type=checkbox],.shiny-input-container .checkbox-inline input[type=checkbox],.shiny-input-container .radio input[type=checkbox],.shiny-input-container .radio-inline input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#a0cacc;outline:0;box-shadow:0 0 0 .25rem rgba(65,149,153,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#419599;border-color:#419599}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline 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='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline 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='%23000'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#419599;border-color:#419599;--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='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.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 .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='%23a0cacc'/%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='%23000'/%3e%3c/svg%3e")}.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,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.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;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #0c1721,0 0 0 .25rem rgba(65,149,153,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #0c1721,0 0 0 .25rem rgba(65,149,153,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#419599;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c6dfe0}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#419599;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c6dfe0}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(194,194,196,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(194,194,196,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .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 .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.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:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.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 .375rem;z-index:-1;height:1.5em;content:"";background-color:#0c1721;border-radius:.25rem}.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:1px 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:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-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{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#c2c2c4;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2em}.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(1px*-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:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#198754;border-radius:.25rem}.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:#198754;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='%23198754' 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:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.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='%23198754' 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 .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:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.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:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#dc3545;border-radius:.25rem}.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:#dc3545;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='%23dc3545'%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='%23dc3545' 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:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.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='%23dc3545'%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='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .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:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.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{--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: #c2c2c4;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn: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{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189, 192, 196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #000;--bs-btn-bg: #419599;--bs-btn-border-color: #419599;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #5ea5a8;--bs-btn-hover-border-color: #54a0a3;--bs-btn-focus-shadow-rgb: 55, 127, 130;--bs-btn-active-color: #000;--bs-btn-active-bg: #67aaad;--bs-btn-active-border-color: #54a0a3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #419599;--bs-btn-disabled-border-color: #419599}.btn-secondary{--bs-btn-color: #ffffff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #ffffff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #ffffff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #ffffff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222, 226, 230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #419599;--bs-btn-border-color: #419599;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #419599;--bs-btn-hover-border-color: #419599;--bs-btn-focus-shadow-rgb: 65, 149, 153;--bs-btn-active-color: #000;--bs-btn-active-bg: #419599;--bs-btn-active-border-color: #419599;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #419599;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #419599;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #419599;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: #34777a;--bs-btn-hover-border-color: transparent;--bs-btn-active-color: #34777a;--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: 55, 127, 130;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .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 .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .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:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.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: #c2c2c4;--bs-dropdown-bg: #0c1721;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #c2c2c4;--bs-dropdown-link-hover-color: #c2c2c4;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #000;--bs-dropdown-link-active-bg: #419599;--bs-dropdown-link-disabled-color: rgba(194, 194, 196, 0.5);--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)}.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:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.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:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.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:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);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)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.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: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #ffffff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #000;--bs-dropdown-link-active-bg: #419599;--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,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.25rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.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{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{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: #419599;--bs-nav-link-hover-color: #34777a;--bs-nav-link-disabled-color: rgba(194, 194, 196, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .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 .25rem rgba(65,149,153,.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: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #0c1721;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #0c1721;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 rgba(0,0,0,0);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: 0.25rem;--bs-nav-pills-link-active-color: #000;--bs-nav-pills-link-active-bg: #419599}.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)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;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 rgba(0,0,0,0)}.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;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-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{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: #ffffff;--bs-navbar-hover-color: rgba(126, 183, 186, 0.8);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.75);--bs-navbar-active-color: #7eb7ba;--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #ffffff;--bs-navbar-brand-hover-color: #7eb7ba;--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--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='%23ffffff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;display:-webkit-flex;flex-direction:column;-webkit-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:.5rem;padding-bottom:.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%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-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:rgba(0,0,0,0);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;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .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{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: #ffffff;--bs-navbar-hover-color: rgba(126, 183, 186, 0.8);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.75);--bs-navbar-active-color: #7eb7ba;--bs-navbar-brand-color: #ffffff;--bs-navbar-brand-hover-color: #7eb7ba;--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0);--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='%23ffffff' 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='%23ffffff' 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: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #0c1721;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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)}.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;-webkit-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(-0.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(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.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(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.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;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-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: #c2c2c4;--bs-accordion-bg: #0c1721;--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: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #c2c2c4;--bs-accordion-btn-bg: #0c1721;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c2c2c4'%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-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='%231a3c3d'%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-focus-border-color: #a0cacc;--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(65, 149, 153, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #1a3c3d;--bs-accordion-active-bg: #d9eaeb}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-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;-webkit-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;border-color:var(--bs-accordion-btn-focus-border-color);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-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-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-collapse{border-width:0}.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-button,.accordion-flush .accordion-item .accordion-button.collapsed{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='%238dbfc2'%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='%238dbfc2'%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: rgba(194, 194, 196, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(194, 194, 196, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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: #419599;--bs-pagination-bg: #0c1721;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: #34777a;--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: #34777a;--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(65, 149, 153, 0.25);--bs-pagination-active-color: #000;--bs-pagination-active-bg: #419599;--bs-pagination-active-border-color: #419599;--bs-pagination-disabled-color: rgba(194, 194, 196, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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);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(1px*-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: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.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: #ffffff;--bs-badge-border-radius: 0.25rem;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)}.badge:empty{display:none}.btn .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: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--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-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-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{--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{--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{--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{--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{--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{--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{--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: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #ffffff;--bs-progress-bar-bg: #419599;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-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)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-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: #c2c2c4;--bs-list-group-bg: #0c1721;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(194, 194, 196, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #c2c2c4;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(194, 194, 196, 0.75);--bs-list-group-disabled-bg: #0c1721;--bs-list-group-active-color: #000;--bs-list-group-active-bg: #419599;--bs-list-group-active-border-color: #419599;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.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(65, 149, 153, 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:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.25rem;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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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(12, 23, 33, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(194, 194, 196, 0.75);--bs-toast-header-bg: rgba(12, 23, 33, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);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;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-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(-0.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: #0c1721;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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);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;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;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(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.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;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-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: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.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: #0c1721;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--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","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;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:rgba(0,0,0,0);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)}.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)}.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)}.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)}.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: #72994e;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: #ffffff;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #c2c2c4;--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","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;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)}.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:rgba(0,0,0,0);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)}.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)}.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(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.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)}.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;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-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;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .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:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.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='%23ffffff'%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-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%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-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-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;-webkit-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 rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .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:rgba(0,0,0,0)}.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: #c2c2c4;--bs-offcanvas-bg: #0c1721;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--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;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;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-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-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:.5}.placeholder.btn::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:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#000 !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !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:#fff !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-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229, 232, 235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229, 232, 235, var(--bs-link-underline-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(103, 170, 173, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(103, 170, 173, 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(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, 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(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, 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(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, 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(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, 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(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, 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(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, 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(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, 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:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.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: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.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;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-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;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.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:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.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:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.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{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-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !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:.25rem !important}.m-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-2{margin-top:.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:.25rem !important}.me-2{margin-right:.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:.25rem !important}.mb-2{margin-bottom:.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:.25rem !important}.ms-2{margin-left:.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:.25rem !important}.p-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-2{padding-top:.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:.25rem !important}.pe-2{padding-right:.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:.25rem !important}.pb-2{padding-bottom:.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:.25rem !important}.ps-2{padding-left:.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:.25rem !important}.gap-2{gap:.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:.25rem !important}.row-gap-2{row-gap:.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:.25rem !important}.column-gap-2{column-gap:.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.4rem + 1.8vw) !important}.fs-2{font-size:calc(1.3rem + 0.6vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !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}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.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,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--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:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !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-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.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:rgba(0,0,0,0) !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:.25rem !important}.m-sm-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-sm-2{margin-top:.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:.25rem !important}.me-sm-2{margin-right:.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:.25rem !important}.mb-sm-2{margin-bottom:.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:.25rem !important}.ms-sm-2{margin-left:.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:.25rem !important}.p-sm-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-sm-2{padding-top:.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:.25rem !important}.pe-sm-2{padding-right:.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:.25rem !important}.pb-sm-2{padding-bottom:.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:.25rem !important}.ps-sm-2{padding-left:.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:.25rem !important}.gap-sm-2{gap:.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:.25rem !important}.row-gap-sm-2{row-gap:.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:.25rem !important}.column-gap-sm-2{column-gap:.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:.25rem !important}.m-md-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-md-2{margin-top:.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:.25rem !important}.me-md-2{margin-right:.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:.25rem !important}.mb-md-2{margin-bottom:.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:.25rem !important}.ms-md-2{margin-left:.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:.25rem !important}.p-md-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-md-2{padding-top:.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:.25rem !important}.pe-md-2{padding-right:.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:.25rem !important}.pb-md-2{padding-bottom:.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:.25rem !important}.ps-md-2{padding-left:.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:.25rem !important}.gap-md-2{gap:.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:.25rem !important}.row-gap-md-2{row-gap:.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:.25rem !important}.column-gap-md-2{column-gap:.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{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:.25rem !important}.m-lg-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-lg-2{margin-top:.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:.25rem !important}.me-lg-2{margin-right:.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:.25rem !important}.mb-lg-2{margin-bottom:.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:.25rem !important}.ms-lg-2{margin-left:.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:.25rem !important}.p-lg-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-lg-2{padding-top:.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:.25rem !important}.pe-lg-2{padding-right:.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:.25rem !important}.pb-lg-2{padding-bottom:.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:.25rem !important}.ps-lg-2{padding-left:.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:.25rem !important}.gap-lg-2{gap:.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:.25rem !important}.row-gap-lg-2{row-gap:.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:.25rem !important}.column-gap-lg-2{column-gap:.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:.25rem !important}.m-xl-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-xl-2{margin-top:.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:.25rem !important}.me-xl-2{margin-right:.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:.25rem !important}.mb-xl-2{margin-bottom:.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:.25rem !important}.ms-xl-2{margin-left:.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:.25rem !important}.p-xl-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-xl-2{padding-top:.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:.25rem !important}.pe-xl-2{padding-right:.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:.25rem !important}.pb-xl-2{padding-bottom:.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:.25rem !important}.ps-xl-2{padding-left:.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:.25rem !important}.gap-xl-2{gap:.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:.25rem !important}.row-gap-xl-2{row-gap:.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:.25rem !important}.column-gap-xl-2{column-gap:.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:.25rem !important}.m-xxl-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-xxl-2{margin-top:.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:.25rem !important}.me-xxl-2{margin-right:.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:.25rem !important}.mb-xxl-2{margin-bottom:.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:.25rem !important}.ms-xxl-2{margin-left:.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:.25rem !important}.p-xxl-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-xxl-2{padding-top:.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:.25rem !important}.pe-xxl-2{padding-right:.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:.25rem !important}.pb-xxl-2{padding-bottom:.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:.25rem !important}.ps-xxl-2{padding-left:.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:.25rem !important}.gap-xxl-2{gap:.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:.25rem !important}.row-gap-xxl-2{row-gap:.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:.25rem !important}.column-gap-xxl-2{column-gap:.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}}.bg-default{color:#000}.bg-primary{color:#000}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2.75rem !important}.fs-2{font-size:1.75rem !important}.fs-3{font-size:1.45rem !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}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #419599}.bg-primary{--bslib-color-bg: #419599;--bslib-color-fg: #000}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #ffffff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #419599}.bg-primary{--bslib-color-bg: #419599;--bslib-color-fg: #000}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #ffffff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #0c1721);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.3rem + 0.6vw);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.75rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.accordion .accordion-header{font-size:calc(1.3rem + 0.6vw);margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.75rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-page-sidebar-title-bg: #132434;--bslib-page-sidebar-title-color: #ffffff}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:#fff}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:#7eb7ba}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:#9ea2a6}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:#9ea2a6;padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:#9ea2a6}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:#9ea2a6}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(107,172,175,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:#6a6f74}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:#9ea2a6}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(107,172,175,.8)}div.sidebar-item-container.disabled{color:rgba(158,162,166,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#6bacaf}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#0c1721}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#0c1721;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#132434;color:#fff;border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:rgba(102,102,102,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:#34777a}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#0c1721}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:#7c8287}.nav-footer a{color:#7c8287}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:#fff;border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:#9ea2a6;border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#0c1721;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#0c1721;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:#fff;opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:#fff;opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#0c1721;border:1px solid #dee2e6;border-radius:.25rem;color:#c2c2c4;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(65,149,153,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#c2c2c4;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#c2c2c4;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#c2c2c4;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#c2c2c4;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#c2c2c4;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#c2c2c4;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#c2c2c4;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:#132434;padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#419599}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#000;background-color:#419599}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#000;background-color:#35797c}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#72994e}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#c2c2c4}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:#010303}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#72994e;color:#c2c2c4}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#72994e;border-color:#dee2e6;color:#c2c2c4}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#fff}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#9ea2a6}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:rgba(12,23,33,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#0c1721;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#0c1721;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#c2c2c4;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(65,149,153,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(194,194,196,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#419599 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#6c757d !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#198754 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:#0dcaf0 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#ffc107 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:#dc3545 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#212529 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px #203e59;border-bottom:solid 1px #203e59}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:#1e3952}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:#fff}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#c2c2c4}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#c2c2c4}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px #c7c9cd;padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#0c1721;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#0c1721;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#c2c2c4}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#0c1721}.tableFloatingHeaderOriginal{background-color:#0c1721;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#000;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#c2c2c4;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:#f6f6f6;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#419599}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:#f6f6f6;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#419599}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:#f6f6f6;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#419599}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:#f6f6f6;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#419599}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:#f6f6f6;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#419599}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#0c1721;border:solid 1px #dee2e6;border-radius:.25rem;color:#c2c2c4;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#0c1721}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#0c1721}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#0c1721;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#0c1721}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#0c1721;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#c2c2c4}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}div.ansi-escaped-output{font-family:monospace;display:block}/*! -* -* ansi colors from IPython notebook's -* -* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since -* that seems to be what ansi_up emits -* -*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #0c1721;--quarto-body-color: #c2c2c4;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #0c1721;--mermaid-edge-color: #6c757d;--mermaid-node-fg-color: #c2c2c4;--mermaid-fg-color: #c2c2c4;--mermaid-fg-color--lighter: #dcdcdd;--mermaid-fg-color--lightest: #f6f6f6;--mermaid-font-family: Open Sans, Segoe UI, Roboto, Helvetica Neue, Noto Sans, Liberation Sans, Arial, sans-serif, system-ui;--mermaid-label-bg-color: #0c1721;--mermaid-label-fg-color: #419599;--mermaid-node-bg-color: rgba(65, 149, 153, 0.1);--mermaid-node-fg-color: #c2c2c4}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}pre.sourceCode:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}pre.sourceCode:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#0c1721}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#0c1721}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#0c1721}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#0c1721}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#0c1721}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#0c1721}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#0c1721}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#0c1721}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#0c1721}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#0c1721}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#0c1721}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#0c1721}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#0c1721}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#0c1721}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#0c1721}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:#fff;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>section:first-of-type>h2:first-child,main.content>section:first-of-type>.h2:first-child{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#818185}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:#818185}.quarto-layout-cell[data-ref-parent] caption{color:#818185}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#818185;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:#1a3146;border:1px solid #1a3146;border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#818185}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f8f9fa;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#419599}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#419599}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #419599;color:#419599 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#419599 !important}kbd,.kbd{color:#c2c2c4;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#0d6efd}div.callout-note.callout-style-default>.callout-header{background-color:#04214c}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#198754}div.callout-tip.callout-style-default>.callout-header{background-color:#082919}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ffc107}div.callout-warning.callout-style-default>.callout-header{background-color:#4d3a02}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#fd7e14}div.callout-caution.callout-style-default>.callout-header{background-color:#4c2606}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#dc3545}div.callout-important.callout-style-default>.callout-header{background-color:#421015}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#132434;color:#fff}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#0f1c28}#quarto-content .quarto-sidebar-toggle-title{color:#c2c2c4}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#0c1721;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#0c1721;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: #fefefe;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fefefe;--bs-btn-hover-bg: #828a91;--bs-btn-hover-border-color: #7b838a;--bs-btn-focus-shadow-rgb: 130, 138, 144;--bs-btn-active-color: #000;--bs-btn-active-bg: #899197;--bs-btn-active-border-color: #7b838a;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}nav.quarto-secondary-nav.color-navbar{background-color:#132434;color:#fff}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#fff}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! dark */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#0c1721}.code-annotation-gutter{background-color:#1a3146}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:"Source Code Pro",monospace;color:#a8a8ab;border:solid #a8a8ab 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#0c1721;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#1a3146;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:"Source Code Pro",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#0c1721}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#0c1721}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#0c1721}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#0c1721}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#0c1721}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#0c1721}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid #fff;border-bottom:1px solid #fff}.table>thead{border-top-width:0;border-bottom:1px solid #fff}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#fff;background:#132434}.quarto-title-banner a{color:#fff}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:#fff}.quarto-title-banner .code-tools-button{color:#ccc}.quarto-title-banner .code-tools-button:hover{color:#fff}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right} diff --git a/site_libs/bootstrap/bootstrap-icons.css b/site_libs/bootstrap/bootstrap-icons.css deleted file mode 100644 index 285e4448..00000000 --- a/site_libs/bootstrap/bootstrap-icons.css +++ /dev/null @@ -1,2078 +0,0 @@ -/*! - * Bootstrap Icons v1.11.1 (https://icons.getbootstrap.com/) - * Copyright 2019-2023 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) - */ - -@font-face { - font-display: block; - font-family: "bootstrap-icons"; - src: -url("./bootstrap-icons.woff?2820a3852bdb9a5832199cc61cec4e65") format("woff"); -} - -.bi::before, -[class^="bi-"]::before, -[class*=" bi-"]::before { - display: inline-block; - font-family: bootstrap-icons !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - vertical-align: -.125em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.bi-123::before { content: "\f67f"; } -.bi-alarm-fill::before { content: "\f101"; } -.bi-alarm::before { content: "\f102"; } -.bi-align-bottom::before { content: "\f103"; } -.bi-align-center::before { content: "\f104"; } -.bi-align-end::before { content: "\f105"; } -.bi-align-middle::before { content: "\f106"; } -.bi-align-start::before { content: "\f107"; } -.bi-align-top::before { content: "\f108"; } -.bi-alt::before { content: "\f109"; } -.bi-app-indicator::before { content: "\f10a"; } -.bi-app::before { content: "\f10b"; } -.bi-archive-fill::before { content: "\f10c"; } -.bi-archive::before { content: "\f10d"; } -.bi-arrow-90deg-down::before { content: "\f10e"; } -.bi-arrow-90deg-left::before { content: "\f10f"; } -.bi-arrow-90deg-right::before { content: "\f110"; } -.bi-arrow-90deg-up::before { content: "\f111"; } -.bi-arrow-bar-down::before { content: "\f112"; } -.bi-arrow-bar-left::before { content: "\f113"; } -.bi-arrow-bar-right::before { content: "\f114"; } -.bi-arrow-bar-up::before { content: "\f115"; } -.bi-arrow-clockwise::before { content: "\f116"; } -.bi-arrow-counterclockwise::before { content: "\f117"; } -.bi-arrow-down-circle-fill::before { content: "\f118"; } -.bi-arrow-down-circle::before { content: "\f119"; } -.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } -.bi-arrow-down-left-circle::before { content: "\f11b"; } -.bi-arrow-down-left-square-fill::before { content: "\f11c"; } -.bi-arrow-down-left-square::before { content: "\f11d"; } -.bi-arrow-down-left::before { content: "\f11e"; } -.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } -.bi-arrow-down-right-circle::before { content: "\f120"; } -.bi-arrow-down-right-square-fill::before { content: "\f121"; } -.bi-arrow-down-right-square::before { content: "\f122"; } -.bi-arrow-down-right::before { content: "\f123"; } -.bi-arrow-down-short::before { content: "\f124"; } -.bi-arrow-down-square-fill::before { content: "\f125"; } -.bi-arrow-down-square::before { content: "\f126"; } -.bi-arrow-down-up::before { content: "\f127"; } -.bi-arrow-down::before { content: "\f128"; } -.bi-arrow-left-circle-fill::before { content: "\f129"; } -.bi-arrow-left-circle::before { content: "\f12a"; } -.bi-arrow-left-right::before { content: "\f12b"; } -.bi-arrow-left-short::before { content: "\f12c"; } -.bi-arrow-left-square-fill::before { content: "\f12d"; } -.bi-arrow-left-square::before { content: "\f12e"; } -.bi-arrow-left::before { content: "\f12f"; } -.bi-arrow-repeat::before { content: "\f130"; } -.bi-arrow-return-left::before { content: "\f131"; } -.bi-arrow-return-right::before { content: "\f132"; } -.bi-arrow-right-circle-fill::before { content: "\f133"; } -.bi-arrow-right-circle::before { content: "\f134"; } -.bi-arrow-right-short::before { content: "\f135"; } -.bi-arrow-right-square-fill::before { content: "\f136"; } -.bi-arrow-right-square::before { content: "\f137"; } -.bi-arrow-right::before { content: "\f138"; } -.bi-arrow-up-circle-fill::before { content: "\f139"; } -.bi-arrow-up-circle::before { content: "\f13a"; } -.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } -.bi-arrow-up-left-circle::before { content: "\f13c"; } -.bi-arrow-up-left-square-fill::before { content: "\f13d"; } -.bi-arrow-up-left-square::before { content: "\f13e"; } -.bi-arrow-up-left::before { content: "\f13f"; } -.bi-arrow-up-right-circle-fill::before { content: "\f140"; } -.bi-arrow-up-right-circle::before { content: "\f141"; } -.bi-arrow-up-right-square-fill::before { content: "\f142"; } -.bi-arrow-up-right-square::before { content: "\f143"; } -.bi-arrow-up-right::before { content: "\f144"; } -.bi-arrow-up-short::before { content: "\f145"; } -.bi-arrow-up-square-fill::before { content: "\f146"; } -.bi-arrow-up-square::before { content: "\f147"; } -.bi-arrow-up::before { content: "\f148"; } -.bi-arrows-angle-contract::before { content: "\f149"; } -.bi-arrows-angle-expand::before { content: "\f14a"; } -.bi-arrows-collapse::before { content: "\f14b"; } -.bi-arrows-expand::before { content: "\f14c"; } -.bi-arrows-fullscreen::before { content: "\f14d"; } -.bi-arrows-move::before { content: "\f14e"; } -.bi-aspect-ratio-fill::before { content: "\f14f"; } -.bi-aspect-ratio::before { content: "\f150"; } -.bi-asterisk::before { content: "\f151"; } -.bi-at::before { content: "\f152"; } -.bi-award-fill::before { content: "\f153"; } -.bi-award::before { content: "\f154"; } -.bi-back::before { content: "\f155"; } -.bi-backspace-fill::before { content: "\f156"; } -.bi-backspace-reverse-fill::before { content: "\f157"; } -.bi-backspace-reverse::before { content: "\f158"; } -.bi-backspace::before { content: "\f159"; } -.bi-badge-3d-fill::before { content: "\f15a"; } -.bi-badge-3d::before { content: "\f15b"; } -.bi-badge-4k-fill::before { content: "\f15c"; } -.bi-badge-4k::before { content: "\f15d"; } -.bi-badge-8k-fill::before { content: "\f15e"; } -.bi-badge-8k::before { content: "\f15f"; } -.bi-badge-ad-fill::before { content: "\f160"; } -.bi-badge-ad::before { content: "\f161"; } -.bi-badge-ar-fill::before { content: "\f162"; } -.bi-badge-ar::before { content: "\f163"; } -.bi-badge-cc-fill::before { content: "\f164"; } -.bi-badge-cc::before { content: "\f165"; } -.bi-badge-hd-fill::before { content: "\f166"; } -.bi-badge-hd::before { content: "\f167"; } -.bi-badge-tm-fill::before { content: "\f168"; } -.bi-badge-tm::before { content: "\f169"; } -.bi-badge-vo-fill::before { content: "\f16a"; } -.bi-badge-vo::before { content: "\f16b"; } -.bi-badge-vr-fill::before { content: "\f16c"; } -.bi-badge-vr::before { content: "\f16d"; } -.bi-badge-wc-fill::before { content: "\f16e"; } -.bi-badge-wc::before { content: "\f16f"; } -.bi-bag-check-fill::before { content: "\f170"; } -.bi-bag-check::before { content: "\f171"; } -.bi-bag-dash-fill::before { content: "\f172"; } -.bi-bag-dash::before { content: "\f173"; } -.bi-bag-fill::before { content: "\f174"; } -.bi-bag-plus-fill::before { content: "\f175"; } -.bi-bag-plus::before { content: "\f176"; } -.bi-bag-x-fill::before { content: "\f177"; } -.bi-bag-x::before { content: "\f178"; } -.bi-bag::before { content: "\f179"; } -.bi-bar-chart-fill::before { content: "\f17a"; } -.bi-bar-chart-line-fill::before { content: "\f17b"; } -.bi-bar-chart-line::before { content: "\f17c"; } -.bi-bar-chart-steps::before { content: "\f17d"; } -.bi-bar-chart::before { content: "\f17e"; } -.bi-basket-fill::before { content: "\f17f"; } -.bi-basket::before { content: "\f180"; } -.bi-basket2-fill::before { content: "\f181"; } -.bi-basket2::before { content: "\f182"; } -.bi-basket3-fill::before { content: "\f183"; } -.bi-basket3::before { content: "\f184"; } -.bi-battery-charging::before { content: "\f185"; } -.bi-battery-full::before { content: "\f186"; } -.bi-battery-half::before { content: "\f187"; } -.bi-battery::before { content: "\f188"; } -.bi-bell-fill::before { content: "\f189"; } -.bi-bell::before { content: "\f18a"; } -.bi-bezier::before { content: "\f18b"; } -.bi-bezier2::before { content: "\f18c"; } -.bi-bicycle::before { content: "\f18d"; } -.bi-binoculars-fill::before { content: "\f18e"; } -.bi-binoculars::before { content: "\f18f"; } -.bi-blockquote-left::before { content: "\f190"; } -.bi-blockquote-right::before { content: "\f191"; } -.bi-book-fill::before { content: "\f192"; } -.bi-book-half::before { content: "\f193"; } -.bi-book::before { content: "\f194"; } -.bi-bookmark-check-fill::before { content: "\f195"; } -.bi-bookmark-check::before { content: "\f196"; } -.bi-bookmark-dash-fill::before { content: "\f197"; } -.bi-bookmark-dash::before { content: "\f198"; } -.bi-bookmark-fill::before { content: "\f199"; } -.bi-bookmark-heart-fill::before { content: "\f19a"; } -.bi-bookmark-heart::before { content: "\f19b"; } -.bi-bookmark-plus-fill::before { content: "\f19c"; } -.bi-bookmark-plus::before { content: "\f19d"; } -.bi-bookmark-star-fill::before { content: "\f19e"; } -.bi-bookmark-star::before { content: "\f19f"; } -.bi-bookmark-x-fill::before { content: "\f1a0"; } -.bi-bookmark-x::before { content: "\f1a1"; } -.bi-bookmark::before { content: "\f1a2"; } -.bi-bookmarks-fill::before { content: "\f1a3"; } -.bi-bookmarks::before { content: "\f1a4"; } -.bi-bookshelf::before { content: "\f1a5"; } -.bi-bootstrap-fill::before { content: "\f1a6"; } -.bi-bootstrap-reboot::before { content: "\f1a7"; } -.bi-bootstrap::before { content: "\f1a8"; } -.bi-border-all::before { content: "\f1a9"; } -.bi-border-bottom::before { content: "\f1aa"; } -.bi-border-center::before { content: "\f1ab"; } -.bi-border-inner::before { content: "\f1ac"; } -.bi-border-left::before { content: "\f1ad"; } -.bi-border-middle::before { content: "\f1ae"; } -.bi-border-outer::before { content: "\f1af"; } -.bi-border-right::before { content: "\f1b0"; } -.bi-border-style::before { content: "\f1b1"; } -.bi-border-top::before { content: "\f1b2"; } -.bi-border-width::before { content: "\f1b3"; } -.bi-border::before { content: "\f1b4"; } -.bi-bounding-box-circles::before { content: "\f1b5"; } -.bi-bounding-box::before { content: "\f1b6"; } -.bi-box-arrow-down-left::before { content: "\f1b7"; } -.bi-box-arrow-down-right::before { content: "\f1b8"; } -.bi-box-arrow-down::before { content: "\f1b9"; } -.bi-box-arrow-in-down-left::before { content: "\f1ba"; } -.bi-box-arrow-in-down-right::before { content: "\f1bb"; } -.bi-box-arrow-in-down::before { content: "\f1bc"; } -.bi-box-arrow-in-left::before { content: "\f1bd"; } -.bi-box-arrow-in-right::before { content: "\f1be"; } -.bi-box-arrow-in-up-left::before { content: "\f1bf"; } -.bi-box-arrow-in-up-right::before { content: "\f1c0"; } -.bi-box-arrow-in-up::before { content: "\f1c1"; } -.bi-box-arrow-left::before { content: "\f1c2"; } -.bi-box-arrow-right::before { content: "\f1c3"; } -.bi-box-arrow-up-left::before { content: "\f1c4"; } -.bi-box-arrow-up-right::before { content: "\f1c5"; } -.bi-box-arrow-up::before { content: "\f1c6"; } -.bi-box-seam::before { content: "\f1c7"; } -.bi-box::before { content: "\f1c8"; } -.bi-braces::before { content: "\f1c9"; } -.bi-bricks::before { content: "\f1ca"; } -.bi-briefcase-fill::before { content: "\f1cb"; } -.bi-briefcase::before { content: "\f1cc"; } -.bi-brightness-alt-high-fill::before { content: "\f1cd"; } -.bi-brightness-alt-high::before { content: "\f1ce"; } -.bi-brightness-alt-low-fill::before { content: "\f1cf"; } -.bi-brightness-alt-low::before { content: "\f1d0"; } -.bi-brightness-high-fill::before { content: "\f1d1"; } -.bi-brightness-high::before { content: "\f1d2"; } -.bi-brightness-low-fill::before { content: "\f1d3"; } -.bi-brightness-low::before { content: "\f1d4"; } -.bi-broadcast-pin::before { content: "\f1d5"; } -.bi-broadcast::before { content: "\f1d6"; } -.bi-brush-fill::before { content: "\f1d7"; } -.bi-brush::before { content: "\f1d8"; } -.bi-bucket-fill::before { content: "\f1d9"; } -.bi-bucket::before { content: "\f1da"; } -.bi-bug-fill::before { content: "\f1db"; } -.bi-bug::before { content: "\f1dc"; } -.bi-building::before { content: "\f1dd"; } -.bi-bullseye::before { content: "\f1de"; } -.bi-calculator-fill::before { content: "\f1df"; } -.bi-calculator::before { content: "\f1e0"; } -.bi-calendar-check-fill::before { content: "\f1e1"; } -.bi-calendar-check::before { content: "\f1e2"; } -.bi-calendar-date-fill::before { content: "\f1e3"; } -.bi-calendar-date::before { content: "\f1e4"; } -.bi-calendar-day-fill::before { content: "\f1e5"; } -.bi-calendar-day::before { content: "\f1e6"; } -.bi-calendar-event-fill::before { content: "\f1e7"; } -.bi-calendar-event::before { content: "\f1e8"; } -.bi-calendar-fill::before { content: "\f1e9"; } -.bi-calendar-minus-fill::before { content: "\f1ea"; } -.bi-calendar-minus::before { content: "\f1eb"; } -.bi-calendar-month-fill::before { content: "\f1ec"; } -.bi-calendar-month::before { content: "\f1ed"; } -.bi-calendar-plus-fill::before { content: "\f1ee"; } -.bi-calendar-plus::before { content: "\f1ef"; } -.bi-calendar-range-fill::before { content: "\f1f0"; } -.bi-calendar-range::before { content: "\f1f1"; } -.bi-calendar-week-fill::before { content: "\f1f2"; } -.bi-calendar-week::before { content: "\f1f3"; } -.bi-calendar-x-fill::before { content: "\f1f4"; } -.bi-calendar-x::before { content: "\f1f5"; } -.bi-calendar::before { content: "\f1f6"; } -.bi-calendar2-check-fill::before { content: "\f1f7"; } -.bi-calendar2-check::before { content: "\f1f8"; } -.bi-calendar2-date-fill::before { content: "\f1f9"; } -.bi-calendar2-date::before { content: "\f1fa"; } -.bi-calendar2-day-fill::before { content: "\f1fb"; } -.bi-calendar2-day::before { content: "\f1fc"; } -.bi-calendar2-event-fill::before { content: "\f1fd"; } -.bi-calendar2-event::before { content: "\f1fe"; } -.bi-calendar2-fill::before { content: "\f1ff"; } -.bi-calendar2-minus-fill::before { content: "\f200"; } -.bi-calendar2-minus::before { content: "\f201"; } -.bi-calendar2-month-fill::before { content: "\f202"; } -.bi-calendar2-month::before { content: "\f203"; } -.bi-calendar2-plus-fill::before { content: "\f204"; } -.bi-calendar2-plus::before { content: "\f205"; } -.bi-calendar2-range-fill::before { content: "\f206"; } -.bi-calendar2-range::before { content: "\f207"; } -.bi-calendar2-week-fill::before { content: "\f208"; } -.bi-calendar2-week::before { content: "\f209"; } -.bi-calendar2-x-fill::before { content: "\f20a"; } -.bi-calendar2-x::before { content: "\f20b"; } -.bi-calendar2::before { content: "\f20c"; } -.bi-calendar3-event-fill::before { content: "\f20d"; } -.bi-calendar3-event::before { content: "\f20e"; } -.bi-calendar3-fill::before { content: "\f20f"; } -.bi-calendar3-range-fill::before { content: "\f210"; } -.bi-calendar3-range::before { content: "\f211"; } -.bi-calendar3-week-fill::before { content: "\f212"; } -.bi-calendar3-week::before { content: "\f213"; } -.bi-calendar3::before { content: "\f214"; } -.bi-calendar4-event::before { content: "\f215"; } -.bi-calendar4-range::before { content: "\f216"; } -.bi-calendar4-week::before { content: "\f217"; } -.bi-calendar4::before { content: "\f218"; } -.bi-camera-fill::before { content: "\f219"; } -.bi-camera-reels-fill::before { content: "\f21a"; } -.bi-camera-reels::before { content: "\f21b"; } -.bi-camera-video-fill::before { content: "\f21c"; } -.bi-camera-video-off-fill::before { content: "\f21d"; } -.bi-camera-video-off::before { content: "\f21e"; } -.bi-camera-video::before { content: "\f21f"; } -.bi-camera::before { content: "\f220"; } -.bi-camera2::before { content: "\f221"; } -.bi-capslock-fill::before { content: "\f222"; } -.bi-capslock::before { content: "\f223"; } -.bi-card-checklist::before { content: "\f224"; } -.bi-card-heading::before { content: "\f225"; } -.bi-card-image::before { content: "\f226"; } -.bi-card-list::before { content: "\f227"; } -.bi-card-text::before { content: "\f228"; } -.bi-caret-down-fill::before { content: "\f229"; } -.bi-caret-down-square-fill::before { content: "\f22a"; } -.bi-caret-down-square::before { content: "\f22b"; } -.bi-caret-down::before { content: "\f22c"; } -.bi-caret-left-fill::before { content: "\f22d"; } -.bi-caret-left-square-fill::before { content: "\f22e"; } -.bi-caret-left-square::before { content: "\f22f"; } -.bi-caret-left::before { content: "\f230"; } -.bi-caret-right-fill::before { content: "\f231"; } -.bi-caret-right-square-fill::before { content: "\f232"; } -.bi-caret-right-square::before { content: "\f233"; } -.bi-caret-right::before { content: "\f234"; } -.bi-caret-up-fill::before { content: "\f235"; } -.bi-caret-up-square-fill::before { content: "\f236"; } -.bi-caret-up-square::before { content: "\f237"; } -.bi-caret-up::before { content: "\f238"; } -.bi-cart-check-fill::before { content: "\f239"; } -.bi-cart-check::before { content: "\f23a"; } -.bi-cart-dash-fill::before { content: "\f23b"; } -.bi-cart-dash::before { content: "\f23c"; } -.bi-cart-fill::before { content: "\f23d"; } -.bi-cart-plus-fill::before { content: "\f23e"; } -.bi-cart-plus::before { content: "\f23f"; } -.bi-cart-x-fill::before { content: "\f240"; } -.bi-cart-x::before { content: "\f241"; } -.bi-cart::before { content: "\f242"; } -.bi-cart2::before { content: "\f243"; } -.bi-cart3::before { content: "\f244"; } -.bi-cart4::before { content: "\f245"; } -.bi-cash-stack::before { content: "\f246"; } -.bi-cash::before { content: "\f247"; } -.bi-cast::before { content: "\f248"; } -.bi-chat-dots-fill::before { content: "\f249"; } -.bi-chat-dots::before { content: "\f24a"; } -.bi-chat-fill::before { content: "\f24b"; } -.bi-chat-left-dots-fill::before { content: "\f24c"; } -.bi-chat-left-dots::before { content: "\f24d"; } -.bi-chat-left-fill::before { content: "\f24e"; } -.bi-chat-left-quote-fill::before { content: "\f24f"; } -.bi-chat-left-quote::before { content: "\f250"; } -.bi-chat-left-text-fill::before { content: "\f251"; } -.bi-chat-left-text::before { content: "\f252"; } -.bi-chat-left::before { content: "\f253"; } -.bi-chat-quote-fill::before { content: "\f254"; } -.bi-chat-quote::before { content: "\f255"; } -.bi-chat-right-dots-fill::before { content: "\f256"; } -.bi-chat-right-dots::before { content: "\f257"; } -.bi-chat-right-fill::before { content: "\f258"; } -.bi-chat-right-quote-fill::before { content: "\f259"; } -.bi-chat-right-quote::before { content: "\f25a"; } -.bi-chat-right-text-fill::before { content: "\f25b"; } -.bi-chat-right-text::before { content: "\f25c"; } -.bi-chat-right::before { content: "\f25d"; } -.bi-chat-square-dots-fill::before { content: "\f25e"; } -.bi-chat-square-dots::before { content: "\f25f"; } -.bi-chat-square-fill::before { content: "\f260"; } -.bi-chat-square-quote-fill::before { content: "\f261"; } -.bi-chat-square-quote::before { content: "\f262"; } -.bi-chat-square-text-fill::before { content: "\f263"; } -.bi-chat-square-text::before { content: "\f264"; } -.bi-chat-square::before { content: "\f265"; } -.bi-chat-text-fill::before { content: "\f266"; } -.bi-chat-text::before { content: "\f267"; } -.bi-chat::before { content: "\f268"; } -.bi-check-all::before { content: "\f269"; } -.bi-check-circle-fill::before { content: "\f26a"; } -.bi-check-circle::before { content: "\f26b"; } -.bi-check-square-fill::before { content: "\f26c"; } -.bi-check-square::before { content: "\f26d"; } -.bi-check::before { content: "\f26e"; } -.bi-check2-all::before { content: "\f26f"; } -.bi-check2-circle::before { content: "\f270"; } -.bi-check2-square::before { content: "\f271"; } -.bi-check2::before { content: "\f272"; } -.bi-chevron-bar-contract::before { content: "\f273"; } -.bi-chevron-bar-down::before { content: "\f274"; } -.bi-chevron-bar-expand::before { content: "\f275"; } -.bi-chevron-bar-left::before { content: "\f276"; } -.bi-chevron-bar-right::before { content: "\f277"; } -.bi-chevron-bar-up::before { content: "\f278"; } -.bi-chevron-compact-down::before { content: "\f279"; } -.bi-chevron-compact-left::before { content: "\f27a"; } -.bi-chevron-compact-right::before { content: "\f27b"; } -.bi-chevron-compact-up::before { content: "\f27c"; } -.bi-chevron-contract::before { content: "\f27d"; } -.bi-chevron-double-down::before { content: "\f27e"; } -.bi-chevron-double-left::before { content: "\f27f"; } -.bi-chevron-double-right::before { content: "\f280"; } -.bi-chevron-double-up::before { content: "\f281"; } -.bi-chevron-down::before { content: "\f282"; } -.bi-chevron-expand::before { content: "\f283"; } -.bi-chevron-left::before { content: "\f284"; } -.bi-chevron-right::before { content: "\f285"; } -.bi-chevron-up::before { content: "\f286"; } -.bi-circle-fill::before { content: "\f287"; } -.bi-circle-half::before { content: "\f288"; } -.bi-circle-square::before { content: "\f289"; } -.bi-circle::before { content: "\f28a"; } -.bi-clipboard-check::before { content: "\f28b"; } -.bi-clipboard-data::before { content: "\f28c"; } -.bi-clipboard-minus::before { content: "\f28d"; } -.bi-clipboard-plus::before { content: "\f28e"; } -.bi-clipboard-x::before { content: "\f28f"; } -.bi-clipboard::before { content: "\f290"; } -.bi-clock-fill::before { content: "\f291"; } -.bi-clock-history::before { content: "\f292"; } -.bi-clock::before { content: "\f293"; } -.bi-cloud-arrow-down-fill::before { content: "\f294"; } -.bi-cloud-arrow-down::before { content: "\f295"; } -.bi-cloud-arrow-up-fill::before { content: "\f296"; } -.bi-cloud-arrow-up::before { content: "\f297"; } -.bi-cloud-check-fill::before { content: "\f298"; } -.bi-cloud-check::before { content: "\f299"; } -.bi-cloud-download-fill::before { content: "\f29a"; } -.bi-cloud-download::before { content: "\f29b"; } -.bi-cloud-drizzle-fill::before { content: "\f29c"; } -.bi-cloud-drizzle::before { content: "\f29d"; } -.bi-cloud-fill::before { content: "\f29e"; } -.bi-cloud-fog-fill::before { content: "\f29f"; } -.bi-cloud-fog::before { content: "\f2a0"; } -.bi-cloud-fog2-fill::before { content: "\f2a1"; } -.bi-cloud-fog2::before { content: "\f2a2"; } -.bi-cloud-hail-fill::before { content: "\f2a3"; } -.bi-cloud-hail::before { content: "\f2a4"; } -.bi-cloud-haze-fill::before { content: "\f2a6"; } -.bi-cloud-haze::before { content: "\f2a7"; } -.bi-cloud-haze2-fill::before { content: "\f2a8"; } -.bi-cloud-lightning-fill::before { content: "\f2a9"; } -.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } -.bi-cloud-lightning-rain::before { content: "\f2ab"; } -.bi-cloud-lightning::before { content: "\f2ac"; } -.bi-cloud-minus-fill::before { content: "\f2ad"; } -.bi-cloud-minus::before { content: "\f2ae"; } -.bi-cloud-moon-fill::before { content: "\f2af"; } -.bi-cloud-moon::before { content: "\f2b0"; } -.bi-cloud-plus-fill::before { content: "\f2b1"; } -.bi-cloud-plus::before { content: "\f2b2"; } -.bi-cloud-rain-fill::before { content: "\f2b3"; } -.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } -.bi-cloud-rain-heavy::before { content: "\f2b5"; } -.bi-cloud-rain::before { content: "\f2b6"; } -.bi-cloud-slash-fill::before { content: "\f2b7"; } -.bi-cloud-slash::before { content: "\f2b8"; } -.bi-cloud-sleet-fill::before { content: "\f2b9"; } -.bi-cloud-sleet::before { content: "\f2ba"; } -.bi-cloud-snow-fill::before { content: "\f2bb"; } -.bi-cloud-snow::before { content: "\f2bc"; } -.bi-cloud-sun-fill::before { content: "\f2bd"; } -.bi-cloud-sun::before { content: "\f2be"; } -.bi-cloud-upload-fill::before { content: "\f2bf"; } -.bi-cloud-upload::before { content: "\f2c0"; } -.bi-cloud::before { content: "\f2c1"; } -.bi-clouds-fill::before { content: "\f2c2"; } -.bi-clouds::before { content: "\f2c3"; } -.bi-cloudy-fill::before { content: "\f2c4"; } -.bi-cloudy::before { content: "\f2c5"; } -.bi-code-slash::before { content: "\f2c6"; } -.bi-code-square::before { content: "\f2c7"; } -.bi-code::before { content: "\f2c8"; } -.bi-collection-fill::before { content: "\f2c9"; } -.bi-collection-play-fill::before { content: "\f2ca"; } -.bi-collection-play::before { content: "\f2cb"; } -.bi-collection::before { content: "\f2cc"; } -.bi-columns-gap::before { content: "\f2cd"; } -.bi-columns::before { content: "\f2ce"; } -.bi-command::before { content: "\f2cf"; } -.bi-compass-fill::before { content: "\f2d0"; } -.bi-compass::before { content: "\f2d1"; } -.bi-cone-striped::before { content: "\f2d2"; } -.bi-cone::before { content: "\f2d3"; } -.bi-controller::before { content: "\f2d4"; } -.bi-cpu-fill::before { content: "\f2d5"; } -.bi-cpu::before { content: "\f2d6"; } -.bi-credit-card-2-back-fill::before { content: "\f2d7"; } -.bi-credit-card-2-back::before { content: "\f2d8"; } -.bi-credit-card-2-front-fill::before { content: "\f2d9"; } -.bi-credit-card-2-front::before { content: "\f2da"; } -.bi-credit-card-fill::before { content: "\f2db"; } -.bi-credit-card::before { content: "\f2dc"; } -.bi-crop::before { content: "\f2dd"; } -.bi-cup-fill::before { content: "\f2de"; } -.bi-cup-straw::before { content: "\f2df"; } -.bi-cup::before { content: "\f2e0"; } -.bi-cursor-fill::before { content: "\f2e1"; } -.bi-cursor-text::before { content: "\f2e2"; } -.bi-cursor::before { content: "\f2e3"; } -.bi-dash-circle-dotted::before { content: "\f2e4"; } -.bi-dash-circle-fill::before { content: "\f2e5"; } -.bi-dash-circle::before { content: "\f2e6"; } -.bi-dash-square-dotted::before { content: "\f2e7"; } -.bi-dash-square-fill::before { content: "\f2e8"; } -.bi-dash-square::before { content: "\f2e9"; } -.bi-dash::before { content: "\f2ea"; } -.bi-diagram-2-fill::before { content: "\f2eb"; } -.bi-diagram-2::before { content: "\f2ec"; } -.bi-diagram-3-fill::before { content: "\f2ed"; } -.bi-diagram-3::before { content: "\f2ee"; } -.bi-diamond-fill::before { content: "\f2ef"; } -.bi-diamond-half::before { content: "\f2f0"; } -.bi-diamond::before { content: "\f2f1"; } -.bi-dice-1-fill::before { content: "\f2f2"; } -.bi-dice-1::before { content: "\f2f3"; } -.bi-dice-2-fill::before { content: "\f2f4"; } -.bi-dice-2::before { content: "\f2f5"; } -.bi-dice-3-fill::before { content: "\f2f6"; } -.bi-dice-3::before { content: "\f2f7"; } -.bi-dice-4-fill::before { content: "\f2f8"; } -.bi-dice-4::before { content: "\f2f9"; } -.bi-dice-5-fill::before { content: "\f2fa"; } -.bi-dice-5::before { content: "\f2fb"; } -.bi-dice-6-fill::before { content: "\f2fc"; } -.bi-dice-6::before { content: "\f2fd"; } -.bi-disc-fill::before { content: "\f2fe"; } -.bi-disc::before { content: "\f2ff"; } -.bi-discord::before { content: "\f300"; } -.bi-display-fill::before { content: "\f301"; } -.bi-display::before { content: "\f302"; } -.bi-distribute-horizontal::before { content: "\f303"; } -.bi-distribute-vertical::before { content: "\f304"; } -.bi-door-closed-fill::before { content: "\f305"; } -.bi-door-closed::before { content: "\f306"; } -.bi-door-open-fill::before { content: "\f307"; } -.bi-door-open::before { content: "\f308"; } -.bi-dot::before { content: "\f309"; } -.bi-download::before { content: "\f30a"; } -.bi-droplet-fill::before { content: "\f30b"; } -.bi-droplet-half::before { content: "\f30c"; } -.bi-droplet::before { content: "\f30d"; } -.bi-earbuds::before { content: "\f30e"; } -.bi-easel-fill::before { content: "\f30f"; } -.bi-easel::before { content: "\f310"; } -.bi-egg-fill::before { content: "\f311"; } -.bi-egg-fried::before { content: "\f312"; } -.bi-egg::before { content: "\f313"; } -.bi-eject-fill::before { content: "\f314"; } -.bi-eject::before { content: "\f315"; } -.bi-emoji-angry-fill::before { content: "\f316"; } -.bi-emoji-angry::before { content: "\f317"; } -.bi-emoji-dizzy-fill::before { content: "\f318"; } -.bi-emoji-dizzy::before { content: "\f319"; } -.bi-emoji-expressionless-fill::before { content: "\f31a"; } -.bi-emoji-expressionless::before { content: "\f31b"; } -.bi-emoji-frown-fill::before { content: "\f31c"; } -.bi-emoji-frown::before { content: "\f31d"; } -.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } -.bi-emoji-heart-eyes::before { content: "\f31f"; } -.bi-emoji-laughing-fill::before { content: "\f320"; } -.bi-emoji-laughing::before { content: "\f321"; } -.bi-emoji-neutral-fill::before { content: "\f322"; } -.bi-emoji-neutral::before { content: "\f323"; } -.bi-emoji-smile-fill::before { content: "\f324"; } -.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } -.bi-emoji-smile-upside-down::before { content: "\f326"; } -.bi-emoji-smile::before { content: "\f327"; } -.bi-emoji-sunglasses-fill::before { content: "\f328"; } -.bi-emoji-sunglasses::before { content: "\f329"; } -.bi-emoji-wink-fill::before { content: "\f32a"; } -.bi-emoji-wink::before { content: "\f32b"; } -.bi-envelope-fill::before { content: "\f32c"; } -.bi-envelope-open-fill::before { content: "\f32d"; } -.bi-envelope-open::before { content: "\f32e"; } -.bi-envelope::before { content: "\f32f"; } -.bi-eraser-fill::before { content: "\f330"; } -.bi-eraser::before { content: "\f331"; } -.bi-exclamation-circle-fill::before { content: "\f332"; } -.bi-exclamation-circle::before { content: "\f333"; } -.bi-exclamation-diamond-fill::before { content: "\f334"; } -.bi-exclamation-diamond::before { content: "\f335"; } -.bi-exclamation-octagon-fill::before { content: "\f336"; } -.bi-exclamation-octagon::before { content: "\f337"; } -.bi-exclamation-square-fill::before { content: "\f338"; } -.bi-exclamation-square::before { content: "\f339"; } -.bi-exclamation-triangle-fill::before { content: "\f33a"; } -.bi-exclamation-triangle::before { content: "\f33b"; } -.bi-exclamation::before { content: "\f33c"; } -.bi-exclude::before { content: "\f33d"; } -.bi-eye-fill::before { content: "\f33e"; } -.bi-eye-slash-fill::before { content: "\f33f"; } -.bi-eye-slash::before { content: "\f340"; } -.bi-eye::before { content: "\f341"; } -.bi-eyedropper::before { content: "\f342"; } -.bi-eyeglasses::before { content: "\f343"; } -.bi-facebook::before { content: "\f344"; } -.bi-file-arrow-down-fill::before { content: "\f345"; } -.bi-file-arrow-down::before { content: "\f346"; } -.bi-file-arrow-up-fill::before { content: "\f347"; } -.bi-file-arrow-up::before { content: "\f348"; } -.bi-file-bar-graph-fill::before { content: "\f349"; } -.bi-file-bar-graph::before { content: "\f34a"; } -.bi-file-binary-fill::before { content: "\f34b"; } -.bi-file-binary::before { content: "\f34c"; } -.bi-file-break-fill::before { content: "\f34d"; } -.bi-file-break::before { content: "\f34e"; } -.bi-file-check-fill::before { content: "\f34f"; } -.bi-file-check::before { content: "\f350"; } -.bi-file-code-fill::before { content: "\f351"; } -.bi-file-code::before { content: "\f352"; } -.bi-file-diff-fill::before { content: "\f353"; } -.bi-file-diff::before { content: "\f354"; } -.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } -.bi-file-earmark-arrow-down::before { content: "\f356"; } -.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } -.bi-file-earmark-arrow-up::before { content: "\f358"; } -.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } -.bi-file-earmark-bar-graph::before { content: "\f35a"; } -.bi-file-earmark-binary-fill::before { content: "\f35b"; } -.bi-file-earmark-binary::before { content: "\f35c"; } -.bi-file-earmark-break-fill::before { content: "\f35d"; } -.bi-file-earmark-break::before { content: "\f35e"; } -.bi-file-earmark-check-fill::before { content: "\f35f"; } -.bi-file-earmark-check::before { content: "\f360"; } -.bi-file-earmark-code-fill::before { content: "\f361"; } -.bi-file-earmark-code::before { content: "\f362"; } -.bi-file-earmark-diff-fill::before { content: "\f363"; } -.bi-file-earmark-diff::before { content: "\f364"; } -.bi-file-earmark-easel-fill::before { content: "\f365"; } -.bi-file-earmark-easel::before { content: "\f366"; } -.bi-file-earmark-excel-fill::before { content: "\f367"; } -.bi-file-earmark-excel::before { content: "\f368"; } -.bi-file-earmark-fill::before { content: "\f369"; } -.bi-file-earmark-font-fill::before { content: "\f36a"; } -.bi-file-earmark-font::before { content: "\f36b"; } -.bi-file-earmark-image-fill::before { content: "\f36c"; } -.bi-file-earmark-image::before { content: "\f36d"; } -.bi-file-earmark-lock-fill::before { content: "\f36e"; } -.bi-file-earmark-lock::before { content: "\f36f"; } -.bi-file-earmark-lock2-fill::before { content: "\f370"; } -.bi-file-earmark-lock2::before { content: "\f371"; } -.bi-file-earmark-medical-fill::before { content: "\f372"; } -.bi-file-earmark-medical::before { content: "\f373"; } -.bi-file-earmark-minus-fill::before { content: "\f374"; } -.bi-file-earmark-minus::before { content: "\f375"; } -.bi-file-earmark-music-fill::before { content: "\f376"; } -.bi-file-earmark-music::before { content: "\f377"; } -.bi-file-earmark-person-fill::before { content: "\f378"; } -.bi-file-earmark-person::before { content: "\f379"; } -.bi-file-earmark-play-fill::before { content: "\f37a"; } -.bi-file-earmark-play::before { content: "\f37b"; } -.bi-file-earmark-plus-fill::before { content: "\f37c"; } -.bi-file-earmark-plus::before { content: "\f37d"; } -.bi-file-earmark-post-fill::before { content: "\f37e"; } -.bi-file-earmark-post::before { content: "\f37f"; } -.bi-file-earmark-ppt-fill::before { content: "\f380"; } -.bi-file-earmark-ppt::before { content: "\f381"; } -.bi-file-earmark-richtext-fill::before { content: "\f382"; } -.bi-file-earmark-richtext::before { content: "\f383"; } -.bi-file-earmark-ruled-fill::before { content: "\f384"; } -.bi-file-earmark-ruled::before { content: "\f385"; } -.bi-file-earmark-slides-fill::before { content: "\f386"; } -.bi-file-earmark-slides::before { content: "\f387"; } -.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } -.bi-file-earmark-spreadsheet::before { content: "\f389"; } -.bi-file-earmark-text-fill::before { content: "\f38a"; } -.bi-file-earmark-text::before { content: "\f38b"; } -.bi-file-earmark-word-fill::before { content: "\f38c"; } -.bi-file-earmark-word::before { content: "\f38d"; } -.bi-file-earmark-x-fill::before { content: "\f38e"; } -.bi-file-earmark-x::before { content: "\f38f"; } -.bi-file-earmark-zip-fill::before { content: "\f390"; } -.bi-file-earmark-zip::before { content: "\f391"; } -.bi-file-earmark::before { content: "\f392"; } -.bi-file-easel-fill::before { content: "\f393"; } -.bi-file-easel::before { content: "\f394"; } -.bi-file-excel-fill::before { content: "\f395"; } -.bi-file-excel::before { content: "\f396"; } -.bi-file-fill::before { content: "\f397"; } -.bi-file-font-fill::before { content: "\f398"; } -.bi-file-font::before { content: "\f399"; } -.bi-file-image-fill::before { content: "\f39a"; } -.bi-file-image::before { content: "\f39b"; } -.bi-file-lock-fill::before { content: "\f39c"; } -.bi-file-lock::before { content: "\f39d"; } -.bi-file-lock2-fill::before { content: "\f39e"; } -.bi-file-lock2::before { content: "\f39f"; } -.bi-file-medical-fill::before { content: "\f3a0"; } -.bi-file-medical::before { content: "\f3a1"; } -.bi-file-minus-fill::before { content: "\f3a2"; } -.bi-file-minus::before { content: "\f3a3"; } -.bi-file-music-fill::before { content: "\f3a4"; } -.bi-file-music::before { content: "\f3a5"; } -.bi-file-person-fill::before { content: "\f3a6"; } -.bi-file-person::before { content: "\f3a7"; } -.bi-file-play-fill::before { content: "\f3a8"; } -.bi-file-play::before { content: "\f3a9"; } -.bi-file-plus-fill::before { content: "\f3aa"; } -.bi-file-plus::before { content: "\f3ab"; } -.bi-file-post-fill::before { content: "\f3ac"; } -.bi-file-post::before { content: "\f3ad"; } -.bi-file-ppt-fill::before { content: "\f3ae"; } -.bi-file-ppt::before { content: "\f3af"; } -.bi-file-richtext-fill::before { content: "\f3b0"; } -.bi-file-richtext::before { content: "\f3b1"; } -.bi-file-ruled-fill::before { content: "\f3b2"; } -.bi-file-ruled::before { content: "\f3b3"; } -.bi-file-slides-fill::before { content: "\f3b4"; } -.bi-file-slides::before { content: "\f3b5"; } -.bi-file-spreadsheet-fill::before { content: "\f3b6"; } -.bi-file-spreadsheet::before { content: "\f3b7"; } -.bi-file-text-fill::before { content: "\f3b8"; } -.bi-file-text::before { content: "\f3b9"; } -.bi-file-word-fill::before { content: "\f3ba"; } -.bi-file-word::before { content: "\f3bb"; } -.bi-file-x-fill::before { content: "\f3bc"; } -.bi-file-x::before { content: "\f3bd"; } -.bi-file-zip-fill::before { content: "\f3be"; } -.bi-file-zip::before { content: "\f3bf"; } -.bi-file::before { content: "\f3c0"; } -.bi-files-alt::before { content: "\f3c1"; } -.bi-files::before { content: "\f3c2"; } -.bi-film::before { content: "\f3c3"; } -.bi-filter-circle-fill::before { content: "\f3c4"; } -.bi-filter-circle::before { content: "\f3c5"; } -.bi-filter-left::before { content: "\f3c6"; } -.bi-filter-right::before { content: "\f3c7"; } -.bi-filter-square-fill::before { content: "\f3c8"; } -.bi-filter-square::before { content: "\f3c9"; } -.bi-filter::before { content: "\f3ca"; } -.bi-flag-fill::before { content: "\f3cb"; } -.bi-flag::before { content: "\f3cc"; } -.bi-flower1::before { content: "\f3cd"; } -.bi-flower2::before { content: "\f3ce"; } -.bi-flower3::before { content: "\f3cf"; } -.bi-folder-check::before { content: "\f3d0"; } -.bi-folder-fill::before { content: "\f3d1"; } -.bi-folder-minus::before { content: "\f3d2"; } -.bi-folder-plus::before { content: "\f3d3"; } -.bi-folder-symlink-fill::before { content: "\f3d4"; } -.bi-folder-symlink::before { content: "\f3d5"; } -.bi-folder-x::before { content: "\f3d6"; } -.bi-folder::before { content: "\f3d7"; } -.bi-folder2-open::before { content: "\f3d8"; } -.bi-folder2::before { content: "\f3d9"; } -.bi-fonts::before { content: "\f3da"; } -.bi-forward-fill::before { content: "\f3db"; } -.bi-forward::before { content: "\f3dc"; } -.bi-front::before { content: "\f3dd"; } -.bi-fullscreen-exit::before { content: "\f3de"; } -.bi-fullscreen::before { content: "\f3df"; } -.bi-funnel-fill::before { content: "\f3e0"; } -.bi-funnel::before { content: "\f3e1"; } -.bi-gear-fill::before { content: "\f3e2"; } -.bi-gear-wide-connected::before { content: "\f3e3"; } -.bi-gear-wide::before { content: "\f3e4"; } -.bi-gear::before { content: "\f3e5"; } -.bi-gem::before { content: "\f3e6"; } -.bi-geo-alt-fill::before { content: "\f3e7"; } -.bi-geo-alt::before { content: "\f3e8"; } -.bi-geo-fill::before { content: "\f3e9"; } -.bi-geo::before { content: "\f3ea"; } -.bi-gift-fill::before { content: "\f3eb"; } -.bi-gift::before { content: "\f3ec"; } -.bi-github::before { content: "\f3ed"; } -.bi-globe::before { content: "\f3ee"; } -.bi-globe2::before { content: "\f3ef"; } -.bi-google::before { content: "\f3f0"; } -.bi-graph-down::before { content: "\f3f1"; } -.bi-graph-up::before { content: "\f3f2"; } -.bi-grid-1x2-fill::before { content: "\f3f3"; } -.bi-grid-1x2::before { content: "\f3f4"; } -.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } -.bi-grid-3x2-gap::before { content: "\f3f6"; } -.bi-grid-3x2::before { content: "\f3f7"; } -.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } -.bi-grid-3x3-gap::before { content: "\f3f9"; } -.bi-grid-3x3::before { content: "\f3fa"; } -.bi-grid-fill::before { content: "\f3fb"; } -.bi-grid::before { content: "\f3fc"; } -.bi-grip-horizontal::before { content: "\f3fd"; } -.bi-grip-vertical::before { content: "\f3fe"; } -.bi-hammer::before { content: "\f3ff"; } -.bi-hand-index-fill::before { content: "\f400"; } -.bi-hand-index-thumb-fill::before { content: "\f401"; } -.bi-hand-index-thumb::before { content: "\f402"; } -.bi-hand-index::before { content: "\f403"; } -.bi-hand-thumbs-down-fill::before { content: "\f404"; } -.bi-hand-thumbs-down::before { content: "\f405"; } -.bi-hand-thumbs-up-fill::before { content: "\f406"; } -.bi-hand-thumbs-up::before { content: "\f407"; } -.bi-handbag-fill::before { content: "\f408"; } -.bi-handbag::before { content: "\f409"; } -.bi-hash::before { content: "\f40a"; } -.bi-hdd-fill::before { content: "\f40b"; } -.bi-hdd-network-fill::before { content: "\f40c"; } -.bi-hdd-network::before { content: "\f40d"; } -.bi-hdd-rack-fill::before { content: "\f40e"; } -.bi-hdd-rack::before { content: "\f40f"; } -.bi-hdd-stack-fill::before { content: "\f410"; } -.bi-hdd-stack::before { content: "\f411"; } -.bi-hdd::before { content: "\f412"; } -.bi-headphones::before { content: "\f413"; } -.bi-headset::before { content: "\f414"; } -.bi-heart-fill::before { content: "\f415"; } -.bi-heart-half::before { content: "\f416"; } -.bi-heart::before { content: "\f417"; } -.bi-heptagon-fill::before { content: "\f418"; } -.bi-heptagon-half::before { content: "\f419"; } -.bi-heptagon::before { content: "\f41a"; } -.bi-hexagon-fill::before { content: "\f41b"; } -.bi-hexagon-half::before { content: "\f41c"; } -.bi-hexagon::before { content: "\f41d"; } -.bi-hourglass-bottom::before { content: "\f41e"; } -.bi-hourglass-split::before { content: "\f41f"; } -.bi-hourglass-top::before { content: "\f420"; } -.bi-hourglass::before { content: "\f421"; } -.bi-house-door-fill::before { content: "\f422"; } -.bi-house-door::before { content: "\f423"; } -.bi-house-fill::before { content: "\f424"; } -.bi-house::before { content: "\f425"; } -.bi-hr::before { content: "\f426"; } -.bi-hurricane::before { content: "\f427"; } -.bi-image-alt::before { content: "\f428"; } -.bi-image-fill::before { content: "\f429"; } -.bi-image::before { content: "\f42a"; } -.bi-images::before { content: "\f42b"; } -.bi-inbox-fill::before { content: "\f42c"; } -.bi-inbox::before { content: "\f42d"; } -.bi-inboxes-fill::before { content: "\f42e"; } -.bi-inboxes::before { content: "\f42f"; } -.bi-info-circle-fill::before { content: "\f430"; } -.bi-info-circle::before { content: "\f431"; } -.bi-info-square-fill::before { content: "\f432"; } -.bi-info-square::before { content: "\f433"; } -.bi-info::before { content: "\f434"; } -.bi-input-cursor-text::before { content: "\f435"; } -.bi-input-cursor::before { content: "\f436"; } -.bi-instagram::before { content: "\f437"; } -.bi-intersect::before { content: "\f438"; } -.bi-journal-album::before { content: "\f439"; } -.bi-journal-arrow-down::before { content: "\f43a"; } -.bi-journal-arrow-up::before { content: "\f43b"; } -.bi-journal-bookmark-fill::before { content: "\f43c"; } -.bi-journal-bookmark::before { content: "\f43d"; } -.bi-journal-check::before { content: "\f43e"; } -.bi-journal-code::before { content: "\f43f"; } -.bi-journal-medical::before { content: "\f440"; } -.bi-journal-minus::before { content: "\f441"; } -.bi-journal-plus::before { content: "\f442"; } -.bi-journal-richtext::before { content: "\f443"; } -.bi-journal-text::before { content: "\f444"; } -.bi-journal-x::before { content: "\f445"; } -.bi-journal::before { content: "\f446"; } -.bi-journals::before { content: "\f447"; } -.bi-joystick::before { content: "\f448"; } -.bi-justify-left::before { content: "\f449"; } -.bi-justify-right::before { content: "\f44a"; } -.bi-justify::before { content: "\f44b"; } -.bi-kanban-fill::before { content: "\f44c"; } -.bi-kanban::before { content: "\f44d"; } -.bi-key-fill::before { content: "\f44e"; } -.bi-key::before { content: "\f44f"; } -.bi-keyboard-fill::before { content: "\f450"; } -.bi-keyboard::before { content: "\f451"; } -.bi-ladder::before { content: "\f452"; } -.bi-lamp-fill::before { content: "\f453"; } -.bi-lamp::before { content: "\f454"; } -.bi-laptop-fill::before { content: "\f455"; } -.bi-laptop::before { content: "\f456"; } -.bi-layer-backward::before { content: "\f457"; } -.bi-layer-forward::before { content: "\f458"; } -.bi-layers-fill::before { content: "\f459"; } -.bi-layers-half::before { content: "\f45a"; } -.bi-layers::before { content: "\f45b"; } -.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } -.bi-layout-sidebar-inset::before { content: "\f45d"; } -.bi-layout-sidebar-reverse::before { content: "\f45e"; } -.bi-layout-sidebar::before { content: "\f45f"; } -.bi-layout-split::before { content: "\f460"; } -.bi-layout-text-sidebar-reverse::before { content: "\f461"; } -.bi-layout-text-sidebar::before { content: "\f462"; } -.bi-layout-text-window-reverse::before { content: "\f463"; } -.bi-layout-text-window::before { content: "\f464"; } -.bi-layout-three-columns::before { content: "\f465"; } -.bi-layout-wtf::before { content: "\f466"; } -.bi-life-preserver::before { content: "\f467"; } -.bi-lightbulb-fill::before { content: "\f468"; } -.bi-lightbulb-off-fill::before { content: "\f469"; } -.bi-lightbulb-off::before { content: "\f46a"; } -.bi-lightbulb::before { content: "\f46b"; } -.bi-lightning-charge-fill::before { content: "\f46c"; } -.bi-lightning-charge::before { content: "\f46d"; } -.bi-lightning-fill::before { content: "\f46e"; } -.bi-lightning::before { content: "\f46f"; } -.bi-link-45deg::before { content: "\f470"; } -.bi-link::before { content: "\f471"; } -.bi-linkedin::before { content: "\f472"; } -.bi-list-check::before { content: "\f473"; } -.bi-list-nested::before { content: "\f474"; } -.bi-list-ol::before { content: "\f475"; } -.bi-list-stars::before { content: "\f476"; } -.bi-list-task::before { content: "\f477"; } -.bi-list-ul::before { content: "\f478"; } -.bi-list::before { content: "\f479"; } -.bi-lock-fill::before { content: "\f47a"; } -.bi-lock::before { content: "\f47b"; } -.bi-mailbox::before { content: "\f47c"; } -.bi-mailbox2::before { content: "\f47d"; } -.bi-map-fill::before { content: "\f47e"; } -.bi-map::before { content: "\f47f"; } -.bi-markdown-fill::before { content: "\f480"; } -.bi-markdown::before { content: "\f481"; } -.bi-mask::before { content: "\f482"; } -.bi-megaphone-fill::before { content: "\f483"; } -.bi-megaphone::before { content: "\f484"; } -.bi-menu-app-fill::before { content: "\f485"; } -.bi-menu-app::before { content: "\f486"; } -.bi-menu-button-fill::before { content: "\f487"; } -.bi-menu-button-wide-fill::before { content: "\f488"; } -.bi-menu-button-wide::before { content: "\f489"; } -.bi-menu-button::before { content: "\f48a"; } -.bi-menu-down::before { content: "\f48b"; } -.bi-menu-up::before { content: "\f48c"; } -.bi-mic-fill::before { content: "\f48d"; } -.bi-mic-mute-fill::before { content: "\f48e"; } -.bi-mic-mute::before { content: "\f48f"; } -.bi-mic::before { content: "\f490"; } -.bi-minecart-loaded::before { content: "\f491"; } -.bi-minecart::before { content: "\f492"; } -.bi-moisture::before { content: "\f493"; } -.bi-moon-fill::before { content: "\f494"; } -.bi-moon-stars-fill::before { content: "\f495"; } -.bi-moon-stars::before { content: "\f496"; } -.bi-moon::before { content: "\f497"; } -.bi-mouse-fill::before { content: "\f498"; } -.bi-mouse::before { content: "\f499"; } -.bi-mouse2-fill::before { content: "\f49a"; } -.bi-mouse2::before { content: "\f49b"; } -.bi-mouse3-fill::before { content: "\f49c"; } -.bi-mouse3::before { content: "\f49d"; } -.bi-music-note-beamed::before { content: "\f49e"; } -.bi-music-note-list::before { content: "\f49f"; } -.bi-music-note::before { content: "\f4a0"; } -.bi-music-player-fill::before { content: "\f4a1"; } -.bi-music-player::before { content: "\f4a2"; } -.bi-newspaper::before { content: "\f4a3"; } -.bi-node-minus-fill::before { content: "\f4a4"; } -.bi-node-minus::before { content: "\f4a5"; } -.bi-node-plus-fill::before { content: "\f4a6"; } -.bi-node-plus::before { content: "\f4a7"; } -.bi-nut-fill::before { content: "\f4a8"; } -.bi-nut::before { content: "\f4a9"; } -.bi-octagon-fill::before { content: "\f4aa"; } -.bi-octagon-half::before { content: "\f4ab"; } -.bi-octagon::before { content: "\f4ac"; } -.bi-option::before { content: "\f4ad"; } -.bi-outlet::before { content: "\f4ae"; } -.bi-paint-bucket::before { content: "\f4af"; } -.bi-palette-fill::before { content: "\f4b0"; } -.bi-palette::before { content: "\f4b1"; } -.bi-palette2::before { content: "\f4b2"; } -.bi-paperclip::before { content: "\f4b3"; } -.bi-paragraph::before { content: "\f4b4"; } -.bi-patch-check-fill::before { content: "\f4b5"; } -.bi-patch-check::before { content: "\f4b6"; } -.bi-patch-exclamation-fill::before { content: "\f4b7"; } -.bi-patch-exclamation::before { content: "\f4b8"; } -.bi-patch-minus-fill::before { content: "\f4b9"; } -.bi-patch-minus::before { content: "\f4ba"; } -.bi-patch-plus-fill::before { content: "\f4bb"; } -.bi-patch-plus::before { content: "\f4bc"; } -.bi-patch-question-fill::before { content: "\f4bd"; } -.bi-patch-question::before { content: "\f4be"; } -.bi-pause-btn-fill::before { content: "\f4bf"; } -.bi-pause-btn::before { content: "\f4c0"; } -.bi-pause-circle-fill::before { content: "\f4c1"; } -.bi-pause-circle::before { content: "\f4c2"; } -.bi-pause-fill::before { content: "\f4c3"; } -.bi-pause::before { content: "\f4c4"; } -.bi-peace-fill::before { content: "\f4c5"; } -.bi-peace::before { content: "\f4c6"; } -.bi-pen-fill::before { content: "\f4c7"; } -.bi-pen::before { content: "\f4c8"; } -.bi-pencil-fill::before { content: "\f4c9"; } -.bi-pencil-square::before { content: "\f4ca"; } -.bi-pencil::before { content: "\f4cb"; } -.bi-pentagon-fill::before { content: "\f4cc"; } -.bi-pentagon-half::before { content: "\f4cd"; } -.bi-pentagon::before { content: "\f4ce"; } -.bi-people-fill::before { content: "\f4cf"; } -.bi-people::before { content: "\f4d0"; } -.bi-percent::before { content: "\f4d1"; } -.bi-person-badge-fill::before { content: "\f4d2"; } -.bi-person-badge::before { content: "\f4d3"; } -.bi-person-bounding-box::before { content: "\f4d4"; } -.bi-person-check-fill::before { content: "\f4d5"; } -.bi-person-check::before { content: "\f4d6"; } -.bi-person-circle::before { content: "\f4d7"; } -.bi-person-dash-fill::before { content: "\f4d8"; } -.bi-person-dash::before { content: "\f4d9"; } -.bi-person-fill::before { content: "\f4da"; } -.bi-person-lines-fill::before { content: "\f4db"; } -.bi-person-plus-fill::before { content: "\f4dc"; } -.bi-person-plus::before { content: "\f4dd"; } -.bi-person-square::before { content: "\f4de"; } -.bi-person-x-fill::before { content: "\f4df"; } -.bi-person-x::before { content: "\f4e0"; } -.bi-person::before { content: "\f4e1"; } -.bi-phone-fill::before { content: "\f4e2"; } -.bi-phone-landscape-fill::before { content: "\f4e3"; } -.bi-phone-landscape::before { content: "\f4e4"; } -.bi-phone-vibrate-fill::before { content: "\f4e5"; } -.bi-phone-vibrate::before { content: "\f4e6"; } -.bi-phone::before { content: "\f4e7"; } -.bi-pie-chart-fill::before { content: "\f4e8"; } -.bi-pie-chart::before { content: "\f4e9"; } -.bi-pin-angle-fill::before { content: "\f4ea"; } -.bi-pin-angle::before { content: "\f4eb"; } -.bi-pin-fill::before { content: "\f4ec"; } -.bi-pin::before { content: "\f4ed"; } -.bi-pip-fill::before { content: "\f4ee"; } -.bi-pip::before { content: "\f4ef"; } -.bi-play-btn-fill::before { content: "\f4f0"; } -.bi-play-btn::before { content: "\f4f1"; } -.bi-play-circle-fill::before { content: "\f4f2"; } -.bi-play-circle::before { content: "\f4f3"; } -.bi-play-fill::before { content: "\f4f4"; } -.bi-play::before { content: "\f4f5"; } -.bi-plug-fill::before { content: "\f4f6"; } -.bi-plug::before { content: "\f4f7"; } -.bi-plus-circle-dotted::before { content: "\f4f8"; } -.bi-plus-circle-fill::before { content: "\f4f9"; } -.bi-plus-circle::before { content: "\f4fa"; } -.bi-plus-square-dotted::before { content: "\f4fb"; } -.bi-plus-square-fill::before { content: "\f4fc"; } -.bi-plus-square::before { content: "\f4fd"; } -.bi-plus::before { content: "\f4fe"; } -.bi-power::before { content: "\f4ff"; } -.bi-printer-fill::before { content: "\f500"; } -.bi-printer::before { content: "\f501"; } -.bi-puzzle-fill::before { content: "\f502"; } -.bi-puzzle::before { content: "\f503"; } -.bi-question-circle-fill::before { content: "\f504"; } -.bi-question-circle::before { content: "\f505"; } -.bi-question-diamond-fill::before { content: "\f506"; } -.bi-question-diamond::before { content: "\f507"; } -.bi-question-octagon-fill::before { content: "\f508"; } -.bi-question-octagon::before { content: "\f509"; } -.bi-question-square-fill::before { content: "\f50a"; } -.bi-question-square::before { content: "\f50b"; } -.bi-question::before { content: "\f50c"; } -.bi-rainbow::before { content: "\f50d"; } -.bi-receipt-cutoff::before { content: "\f50e"; } -.bi-receipt::before { content: "\f50f"; } -.bi-reception-0::before { content: "\f510"; } -.bi-reception-1::before { content: "\f511"; } -.bi-reception-2::before { content: "\f512"; } -.bi-reception-3::before { content: "\f513"; } -.bi-reception-4::before { content: "\f514"; } -.bi-record-btn-fill::before { content: "\f515"; } -.bi-record-btn::before { content: "\f516"; } -.bi-record-circle-fill::before { content: "\f517"; } -.bi-record-circle::before { content: "\f518"; } -.bi-record-fill::before { content: "\f519"; } -.bi-record::before { content: "\f51a"; } -.bi-record2-fill::before { content: "\f51b"; } -.bi-record2::before { content: "\f51c"; } -.bi-reply-all-fill::before { content: "\f51d"; } -.bi-reply-all::before { content: "\f51e"; } -.bi-reply-fill::before { content: "\f51f"; } -.bi-reply::before { content: "\f520"; } -.bi-rss-fill::before { content: "\f521"; } -.bi-rss::before { content: "\f522"; } -.bi-rulers::before { content: "\f523"; } -.bi-save-fill::before { content: "\f524"; } -.bi-save::before { content: "\f525"; } -.bi-save2-fill::before { content: "\f526"; } -.bi-save2::before { content: "\f527"; } -.bi-scissors::before { content: "\f528"; } -.bi-screwdriver::before { content: "\f529"; } -.bi-search::before { content: "\f52a"; } -.bi-segmented-nav::before { content: "\f52b"; } -.bi-server::before { content: "\f52c"; } -.bi-share-fill::before { content: "\f52d"; } -.bi-share::before { content: "\f52e"; } -.bi-shield-check::before { content: "\f52f"; } -.bi-shield-exclamation::before { content: "\f530"; } -.bi-shield-fill-check::before { content: "\f531"; } -.bi-shield-fill-exclamation::before { content: "\f532"; } -.bi-shield-fill-minus::before { content: "\f533"; } -.bi-shield-fill-plus::before { content: "\f534"; } -.bi-shield-fill-x::before { content: "\f535"; } -.bi-shield-fill::before { content: "\f536"; } -.bi-shield-lock-fill::before { content: "\f537"; } -.bi-shield-lock::before { content: "\f538"; } -.bi-shield-minus::before { content: "\f539"; } -.bi-shield-plus::before { content: "\f53a"; } -.bi-shield-shaded::before { content: "\f53b"; } -.bi-shield-slash-fill::before { content: "\f53c"; } -.bi-shield-slash::before { content: "\f53d"; } -.bi-shield-x::before { content: "\f53e"; } -.bi-shield::before { content: "\f53f"; } -.bi-shift-fill::before { content: "\f540"; } -.bi-shift::before { content: "\f541"; } -.bi-shop-window::before { content: "\f542"; } -.bi-shop::before { content: "\f543"; } -.bi-shuffle::before { content: "\f544"; } -.bi-signpost-2-fill::before { content: "\f545"; } -.bi-signpost-2::before { content: "\f546"; } -.bi-signpost-fill::before { content: "\f547"; } -.bi-signpost-split-fill::before { content: "\f548"; } -.bi-signpost-split::before { content: "\f549"; } -.bi-signpost::before { content: "\f54a"; } -.bi-sim-fill::before { content: "\f54b"; } -.bi-sim::before { content: "\f54c"; } -.bi-skip-backward-btn-fill::before { content: "\f54d"; } -.bi-skip-backward-btn::before { content: "\f54e"; } -.bi-skip-backward-circle-fill::before { content: "\f54f"; } -.bi-skip-backward-circle::before { content: "\f550"; } -.bi-skip-backward-fill::before { content: "\f551"; } -.bi-skip-backward::before { content: "\f552"; } -.bi-skip-end-btn-fill::before { content: "\f553"; } -.bi-skip-end-btn::before { content: "\f554"; } -.bi-skip-end-circle-fill::before { content: "\f555"; } -.bi-skip-end-circle::before { content: "\f556"; } -.bi-skip-end-fill::before { content: "\f557"; } -.bi-skip-end::before { content: "\f558"; } -.bi-skip-forward-btn-fill::before { content: "\f559"; } -.bi-skip-forward-btn::before { content: "\f55a"; } -.bi-skip-forward-circle-fill::before { content: "\f55b"; } -.bi-skip-forward-circle::before { content: "\f55c"; } -.bi-skip-forward-fill::before { content: "\f55d"; } -.bi-skip-forward::before { content: "\f55e"; } -.bi-skip-start-btn-fill::before { content: "\f55f"; } -.bi-skip-start-btn::before { content: "\f560"; } -.bi-skip-start-circle-fill::before { content: "\f561"; } -.bi-skip-start-circle::before { content: "\f562"; } -.bi-skip-start-fill::before { content: "\f563"; } -.bi-skip-start::before { content: "\f564"; } -.bi-slack::before { content: "\f565"; } -.bi-slash-circle-fill::before { content: "\f566"; } -.bi-slash-circle::before { content: "\f567"; } -.bi-slash-square-fill::before { content: "\f568"; } -.bi-slash-square::before { content: "\f569"; } -.bi-slash::before { content: "\f56a"; } -.bi-sliders::before { content: "\f56b"; } -.bi-smartwatch::before { content: "\f56c"; } -.bi-snow::before { content: "\f56d"; } -.bi-snow2::before { content: "\f56e"; } -.bi-snow3::before { content: "\f56f"; } -.bi-sort-alpha-down-alt::before { content: "\f570"; } -.bi-sort-alpha-down::before { content: "\f571"; } -.bi-sort-alpha-up-alt::before { content: "\f572"; } -.bi-sort-alpha-up::before { content: "\f573"; } -.bi-sort-down-alt::before { content: "\f574"; } -.bi-sort-down::before { content: "\f575"; } -.bi-sort-numeric-down-alt::before { content: "\f576"; } -.bi-sort-numeric-down::before { content: "\f577"; } -.bi-sort-numeric-up-alt::before { content: "\f578"; } -.bi-sort-numeric-up::before { content: "\f579"; } -.bi-sort-up-alt::before { content: "\f57a"; } -.bi-sort-up::before { content: "\f57b"; } -.bi-soundwave::before { content: "\f57c"; } -.bi-speaker-fill::before { content: "\f57d"; } -.bi-speaker::before { content: "\f57e"; } -.bi-speedometer::before { content: "\f57f"; } -.bi-speedometer2::before { content: "\f580"; } -.bi-spellcheck::before { content: "\f581"; } -.bi-square-fill::before { content: "\f582"; } -.bi-square-half::before { content: "\f583"; } -.bi-square::before { content: "\f584"; } -.bi-stack::before { content: "\f585"; } -.bi-star-fill::before { content: "\f586"; } -.bi-star-half::before { content: "\f587"; } -.bi-star::before { content: "\f588"; } -.bi-stars::before { content: "\f589"; } -.bi-stickies-fill::before { content: "\f58a"; } -.bi-stickies::before { content: "\f58b"; } -.bi-sticky-fill::before { content: "\f58c"; } -.bi-sticky::before { content: "\f58d"; } -.bi-stop-btn-fill::before { content: "\f58e"; } -.bi-stop-btn::before { content: "\f58f"; } -.bi-stop-circle-fill::before { content: "\f590"; } -.bi-stop-circle::before { content: "\f591"; } -.bi-stop-fill::before { content: "\f592"; } -.bi-stop::before { content: "\f593"; } -.bi-stoplights-fill::before { content: "\f594"; } -.bi-stoplights::before { content: "\f595"; } -.bi-stopwatch-fill::before { content: "\f596"; } -.bi-stopwatch::before { content: "\f597"; } -.bi-subtract::before { content: "\f598"; } -.bi-suit-club-fill::before { content: "\f599"; } -.bi-suit-club::before { content: "\f59a"; } -.bi-suit-diamond-fill::before { content: "\f59b"; } -.bi-suit-diamond::before { content: "\f59c"; } -.bi-suit-heart-fill::before { content: "\f59d"; } -.bi-suit-heart::before { content: "\f59e"; } -.bi-suit-spade-fill::before { content: "\f59f"; } -.bi-suit-spade::before { content: "\f5a0"; } -.bi-sun-fill::before { content: "\f5a1"; } -.bi-sun::before { content: "\f5a2"; } -.bi-sunglasses::before { content: "\f5a3"; } -.bi-sunrise-fill::before { content: "\f5a4"; } -.bi-sunrise::before { content: "\f5a5"; } -.bi-sunset-fill::before { content: "\f5a6"; } -.bi-sunset::before { content: "\f5a7"; } -.bi-symmetry-horizontal::before { content: "\f5a8"; } -.bi-symmetry-vertical::before { content: "\f5a9"; } -.bi-table::before { content: "\f5aa"; } -.bi-tablet-fill::before { content: "\f5ab"; } -.bi-tablet-landscape-fill::before { content: "\f5ac"; } -.bi-tablet-landscape::before { content: "\f5ad"; } -.bi-tablet::before { content: "\f5ae"; } -.bi-tag-fill::before { content: "\f5af"; } -.bi-tag::before { content: "\f5b0"; } -.bi-tags-fill::before { content: "\f5b1"; } -.bi-tags::before { content: "\f5b2"; } -.bi-telegram::before { content: "\f5b3"; } -.bi-telephone-fill::before { content: "\f5b4"; } -.bi-telephone-forward-fill::before { content: "\f5b5"; } -.bi-telephone-forward::before { content: "\f5b6"; } -.bi-telephone-inbound-fill::before { content: "\f5b7"; } -.bi-telephone-inbound::before { content: "\f5b8"; } -.bi-telephone-minus-fill::before { content: "\f5b9"; } -.bi-telephone-minus::before { content: "\f5ba"; } -.bi-telephone-outbound-fill::before { content: "\f5bb"; } -.bi-telephone-outbound::before { content: "\f5bc"; } -.bi-telephone-plus-fill::before { content: "\f5bd"; } -.bi-telephone-plus::before { content: "\f5be"; } -.bi-telephone-x-fill::before { content: "\f5bf"; } -.bi-telephone-x::before { content: "\f5c0"; } -.bi-telephone::before { content: "\f5c1"; } -.bi-terminal-fill::before { content: "\f5c2"; } -.bi-terminal::before { content: "\f5c3"; } -.bi-text-center::before { content: "\f5c4"; } -.bi-text-indent-left::before { content: "\f5c5"; } -.bi-text-indent-right::before { content: "\f5c6"; } -.bi-text-left::before { content: "\f5c7"; } -.bi-text-paragraph::before { content: "\f5c8"; } -.bi-text-right::before { content: "\f5c9"; } -.bi-textarea-resize::before { content: "\f5ca"; } -.bi-textarea-t::before { content: "\f5cb"; } -.bi-textarea::before { content: "\f5cc"; } -.bi-thermometer-half::before { content: "\f5cd"; } -.bi-thermometer-high::before { content: "\f5ce"; } -.bi-thermometer-low::before { content: "\f5cf"; } -.bi-thermometer-snow::before { content: "\f5d0"; } -.bi-thermometer-sun::before { content: "\f5d1"; } -.bi-thermometer::before { content: "\f5d2"; } -.bi-three-dots-vertical::before { content: "\f5d3"; } -.bi-three-dots::before { content: "\f5d4"; } -.bi-toggle-off::before { content: "\f5d5"; } -.bi-toggle-on::before { content: "\f5d6"; } -.bi-toggle2-off::before { content: "\f5d7"; } -.bi-toggle2-on::before { content: "\f5d8"; } -.bi-toggles::before { content: "\f5d9"; } -.bi-toggles2::before { content: "\f5da"; } -.bi-tools::before { content: "\f5db"; } -.bi-tornado::before { content: "\f5dc"; } -.bi-trash-fill::before { content: "\f5dd"; } -.bi-trash::before { content: "\f5de"; } -.bi-trash2-fill::before { content: "\f5df"; } -.bi-trash2::before { content: "\f5e0"; } -.bi-tree-fill::before { content: "\f5e1"; } -.bi-tree::before { content: "\f5e2"; } -.bi-triangle-fill::before { content: "\f5e3"; } -.bi-triangle-half::before { content: "\f5e4"; } -.bi-triangle::before { content: "\f5e5"; } -.bi-trophy-fill::before { content: "\f5e6"; } -.bi-trophy::before { content: "\f5e7"; } -.bi-tropical-storm::before { content: "\f5e8"; } -.bi-truck-flatbed::before { content: "\f5e9"; } -.bi-truck::before { content: "\f5ea"; } -.bi-tsunami::before { content: "\f5eb"; } -.bi-tv-fill::before { content: "\f5ec"; } -.bi-tv::before { content: "\f5ed"; } -.bi-twitch::before { content: "\f5ee"; } -.bi-twitter::before { content: "\f5ef"; } -.bi-type-bold::before { content: "\f5f0"; } -.bi-type-h1::before { content: "\f5f1"; } -.bi-type-h2::before { content: "\f5f2"; } -.bi-type-h3::before { content: "\f5f3"; } -.bi-type-italic::before { content: "\f5f4"; } -.bi-type-strikethrough::before { content: "\f5f5"; } -.bi-type-underline::before { content: "\f5f6"; } -.bi-type::before { content: "\f5f7"; } -.bi-ui-checks-grid::before { content: "\f5f8"; } -.bi-ui-checks::before { content: "\f5f9"; } -.bi-ui-radios-grid::before { content: "\f5fa"; } -.bi-ui-radios::before { content: "\f5fb"; } -.bi-umbrella-fill::before { content: "\f5fc"; } -.bi-umbrella::before { content: "\f5fd"; } -.bi-union::before { content: "\f5fe"; } -.bi-unlock-fill::before { content: "\f5ff"; } -.bi-unlock::before { content: "\f600"; } -.bi-upc-scan::before { content: "\f601"; } -.bi-upc::before { content: "\f602"; } -.bi-upload::before { content: "\f603"; } -.bi-vector-pen::before { content: "\f604"; } -.bi-view-list::before { content: "\f605"; } -.bi-view-stacked::before { content: "\f606"; } -.bi-vinyl-fill::before { content: "\f607"; } -.bi-vinyl::before { content: "\f608"; } -.bi-voicemail::before { content: "\f609"; } -.bi-volume-down-fill::before { content: "\f60a"; } -.bi-volume-down::before { content: "\f60b"; } -.bi-volume-mute-fill::before { content: "\f60c"; } -.bi-volume-mute::before { content: "\f60d"; } -.bi-volume-off-fill::before { content: "\f60e"; } -.bi-volume-off::before { content: "\f60f"; } -.bi-volume-up-fill::before { content: "\f610"; } -.bi-volume-up::before { content: "\f611"; } -.bi-vr::before { content: "\f612"; } -.bi-wallet-fill::before { content: "\f613"; } -.bi-wallet::before { content: "\f614"; } -.bi-wallet2::before { content: "\f615"; } -.bi-watch::before { content: "\f616"; } -.bi-water::before { content: "\f617"; } -.bi-whatsapp::before { content: "\f618"; } -.bi-wifi-1::before { content: "\f619"; } -.bi-wifi-2::before { content: "\f61a"; } -.bi-wifi-off::before { content: "\f61b"; } -.bi-wifi::before { content: "\f61c"; } -.bi-wind::before { content: "\f61d"; } -.bi-window-dock::before { content: "\f61e"; } -.bi-window-sidebar::before { content: "\f61f"; } -.bi-window::before { content: "\f620"; } -.bi-wrench::before { content: "\f621"; } -.bi-x-circle-fill::before { content: "\f622"; } -.bi-x-circle::before { content: "\f623"; } -.bi-x-diamond-fill::before { content: "\f624"; } -.bi-x-diamond::before { content: "\f625"; } -.bi-x-octagon-fill::before { content: "\f626"; } -.bi-x-octagon::before { content: "\f627"; } -.bi-x-square-fill::before { content: "\f628"; } -.bi-x-square::before { content: "\f629"; } -.bi-x::before { content: "\f62a"; } -.bi-youtube::before { content: "\f62b"; } -.bi-zoom-in::before { content: "\f62c"; } -.bi-zoom-out::before { content: "\f62d"; } -.bi-bank::before { content: "\f62e"; } -.bi-bank2::before { content: "\f62f"; } -.bi-bell-slash-fill::before { content: "\f630"; } -.bi-bell-slash::before { content: "\f631"; } -.bi-cash-coin::before { content: "\f632"; } -.bi-check-lg::before { content: "\f633"; } -.bi-coin::before { content: "\f634"; } -.bi-currency-bitcoin::before { content: "\f635"; } -.bi-currency-dollar::before { content: "\f636"; } -.bi-currency-euro::before { content: "\f637"; } -.bi-currency-exchange::before { content: "\f638"; } -.bi-currency-pound::before { content: "\f639"; } -.bi-currency-yen::before { content: "\f63a"; } -.bi-dash-lg::before { content: "\f63b"; } -.bi-exclamation-lg::before { content: "\f63c"; } -.bi-file-earmark-pdf-fill::before { content: "\f63d"; } -.bi-file-earmark-pdf::before { content: "\f63e"; } -.bi-file-pdf-fill::before { content: "\f63f"; } -.bi-file-pdf::before { content: "\f640"; } -.bi-gender-ambiguous::before { content: "\f641"; } -.bi-gender-female::before { content: "\f642"; } -.bi-gender-male::before { content: "\f643"; } -.bi-gender-trans::before { content: "\f644"; } -.bi-headset-vr::before { content: "\f645"; } -.bi-info-lg::before { content: "\f646"; } -.bi-mastodon::before { content: "\f647"; } -.bi-messenger::before { content: "\f648"; } -.bi-piggy-bank-fill::before { content: "\f649"; } -.bi-piggy-bank::before { content: "\f64a"; } -.bi-pin-map-fill::before { content: "\f64b"; } -.bi-pin-map::before { content: "\f64c"; } -.bi-plus-lg::before { content: "\f64d"; } -.bi-question-lg::before { content: "\f64e"; } -.bi-recycle::before { content: "\f64f"; } -.bi-reddit::before { content: "\f650"; } -.bi-safe-fill::before { content: "\f651"; } -.bi-safe2-fill::before { content: "\f652"; } -.bi-safe2::before { content: "\f653"; } -.bi-sd-card-fill::before { content: "\f654"; } -.bi-sd-card::before { content: "\f655"; } -.bi-skype::before { content: "\f656"; } -.bi-slash-lg::before { content: "\f657"; } -.bi-translate::before { content: "\f658"; } -.bi-x-lg::before { content: "\f659"; } -.bi-safe::before { content: "\f65a"; } -.bi-apple::before { content: "\f65b"; } -.bi-microsoft::before { content: "\f65d"; } -.bi-windows::before { content: "\f65e"; } -.bi-behance::before { content: "\f65c"; } -.bi-dribbble::before { content: "\f65f"; } -.bi-line::before { content: "\f660"; } -.bi-medium::before { content: "\f661"; } -.bi-paypal::before { content: "\f662"; } -.bi-pinterest::before { content: "\f663"; } -.bi-signal::before { content: "\f664"; } -.bi-snapchat::before { content: "\f665"; } -.bi-spotify::before { content: "\f666"; } -.bi-stack-overflow::before { content: "\f667"; } -.bi-strava::before { content: "\f668"; } -.bi-wordpress::before { content: "\f669"; } -.bi-vimeo::before { content: "\f66a"; } -.bi-activity::before { content: "\f66b"; } -.bi-easel2-fill::before { content: "\f66c"; } -.bi-easel2::before { content: "\f66d"; } -.bi-easel3-fill::before { content: "\f66e"; } -.bi-easel3::before { content: "\f66f"; } -.bi-fan::before { content: "\f670"; } -.bi-fingerprint::before { content: "\f671"; } -.bi-graph-down-arrow::before { content: "\f672"; } -.bi-graph-up-arrow::before { content: "\f673"; } -.bi-hypnotize::before { content: "\f674"; } -.bi-magic::before { content: "\f675"; } -.bi-person-rolodex::before { content: "\f676"; } -.bi-person-video::before { content: "\f677"; } -.bi-person-video2::before { content: "\f678"; } -.bi-person-video3::before { content: "\f679"; } -.bi-person-workspace::before { content: "\f67a"; } -.bi-radioactive::before { content: "\f67b"; } -.bi-webcam-fill::before { content: "\f67c"; } -.bi-webcam::before { content: "\f67d"; } -.bi-yin-yang::before { content: "\f67e"; } -.bi-bandaid-fill::before { content: "\f680"; } -.bi-bandaid::before { content: "\f681"; } -.bi-bluetooth::before { content: "\f682"; } -.bi-body-text::before { content: "\f683"; } -.bi-boombox::before { content: "\f684"; } -.bi-boxes::before { content: "\f685"; } -.bi-dpad-fill::before { content: "\f686"; } -.bi-dpad::before { content: "\f687"; } -.bi-ear-fill::before { content: "\f688"; } -.bi-ear::before { content: "\f689"; } -.bi-envelope-check-fill::before { content: "\f68b"; } -.bi-envelope-check::before { content: "\f68c"; } -.bi-envelope-dash-fill::before { content: "\f68e"; } -.bi-envelope-dash::before { content: "\f68f"; } -.bi-envelope-exclamation-fill::before { content: "\f691"; } -.bi-envelope-exclamation::before { content: "\f692"; } -.bi-envelope-plus-fill::before { content: "\f693"; } -.bi-envelope-plus::before { content: "\f694"; } -.bi-envelope-slash-fill::before { content: "\f696"; } -.bi-envelope-slash::before { content: "\f697"; } -.bi-envelope-x-fill::before { content: "\f699"; } -.bi-envelope-x::before { content: "\f69a"; } -.bi-explicit-fill::before { content: "\f69b"; } -.bi-explicit::before { content: "\f69c"; } -.bi-git::before { content: "\f69d"; } -.bi-infinity::before { content: "\f69e"; } -.bi-list-columns-reverse::before { content: "\f69f"; } -.bi-list-columns::before { content: "\f6a0"; } -.bi-meta::before { content: "\f6a1"; } -.bi-nintendo-switch::before { content: "\f6a4"; } -.bi-pc-display-horizontal::before { content: "\f6a5"; } -.bi-pc-display::before { content: "\f6a6"; } -.bi-pc-horizontal::before { content: "\f6a7"; } -.bi-pc::before { content: "\f6a8"; } -.bi-playstation::before { content: "\f6a9"; } -.bi-plus-slash-minus::before { content: "\f6aa"; } -.bi-projector-fill::before { content: "\f6ab"; } -.bi-projector::before { content: "\f6ac"; } -.bi-qr-code-scan::before { content: "\f6ad"; } -.bi-qr-code::before { content: "\f6ae"; } -.bi-quora::before { content: "\f6af"; } -.bi-quote::before { content: "\f6b0"; } -.bi-robot::before { content: "\f6b1"; } -.bi-send-check-fill::before { content: "\f6b2"; } -.bi-send-check::before { content: "\f6b3"; } -.bi-send-dash-fill::before { content: "\f6b4"; } -.bi-send-dash::before { content: "\f6b5"; } -.bi-send-exclamation-fill::before { content: "\f6b7"; } -.bi-send-exclamation::before { content: "\f6b8"; } -.bi-send-fill::before { content: "\f6b9"; } -.bi-send-plus-fill::before { content: "\f6ba"; } -.bi-send-plus::before { content: "\f6bb"; } -.bi-send-slash-fill::before { content: "\f6bc"; } -.bi-send-slash::before { content: "\f6bd"; } -.bi-send-x-fill::before { content: "\f6be"; } -.bi-send-x::before { content: "\f6bf"; } -.bi-send::before { content: "\f6c0"; } -.bi-steam::before { content: "\f6c1"; } -.bi-terminal-dash::before { content: "\f6c3"; } -.bi-terminal-plus::before { content: "\f6c4"; } -.bi-terminal-split::before { content: "\f6c5"; } -.bi-ticket-detailed-fill::before { content: "\f6c6"; } -.bi-ticket-detailed::before { content: "\f6c7"; } -.bi-ticket-fill::before { content: "\f6c8"; } -.bi-ticket-perforated-fill::before { content: "\f6c9"; } -.bi-ticket-perforated::before { content: "\f6ca"; } -.bi-ticket::before { content: "\f6cb"; } -.bi-tiktok::before { content: "\f6cc"; } -.bi-window-dash::before { content: "\f6cd"; } -.bi-window-desktop::before { content: "\f6ce"; } -.bi-window-fullscreen::before { content: "\f6cf"; } -.bi-window-plus::before { content: "\f6d0"; } -.bi-window-split::before { content: "\f6d1"; } -.bi-window-stack::before { content: "\f6d2"; } -.bi-window-x::before { content: "\f6d3"; } -.bi-xbox::before { content: "\f6d4"; } -.bi-ethernet::before { content: "\f6d5"; } -.bi-hdmi-fill::before { content: "\f6d6"; } -.bi-hdmi::before { content: "\f6d7"; } -.bi-usb-c-fill::before { content: "\f6d8"; } -.bi-usb-c::before { content: "\f6d9"; } -.bi-usb-fill::before { content: "\f6da"; } -.bi-usb-plug-fill::before { content: "\f6db"; } -.bi-usb-plug::before { content: "\f6dc"; } -.bi-usb-symbol::before { content: "\f6dd"; } -.bi-usb::before { content: "\f6de"; } -.bi-boombox-fill::before { content: "\f6df"; } -.bi-displayport::before { content: "\f6e1"; } -.bi-gpu-card::before { content: "\f6e2"; } -.bi-memory::before { content: "\f6e3"; } -.bi-modem-fill::before { content: "\f6e4"; } -.bi-modem::before { content: "\f6e5"; } -.bi-motherboard-fill::before { content: "\f6e6"; } -.bi-motherboard::before { content: "\f6e7"; } -.bi-optical-audio-fill::before { content: "\f6e8"; } -.bi-optical-audio::before { content: "\f6e9"; } -.bi-pci-card::before { content: "\f6ea"; } -.bi-router-fill::before { content: "\f6eb"; } -.bi-router::before { content: "\f6ec"; } -.bi-thunderbolt-fill::before { content: "\f6ef"; } -.bi-thunderbolt::before { content: "\f6f0"; } -.bi-usb-drive-fill::before { content: "\f6f1"; } -.bi-usb-drive::before { content: "\f6f2"; } -.bi-usb-micro-fill::before { content: "\f6f3"; } -.bi-usb-micro::before { content: "\f6f4"; } -.bi-usb-mini-fill::before { content: "\f6f5"; } -.bi-usb-mini::before { content: "\f6f6"; } -.bi-cloud-haze2::before { content: "\f6f7"; } -.bi-device-hdd-fill::before { content: "\f6f8"; } -.bi-device-hdd::before { content: "\f6f9"; } -.bi-device-ssd-fill::before { content: "\f6fa"; } -.bi-device-ssd::before { content: "\f6fb"; } -.bi-displayport-fill::before { content: "\f6fc"; } -.bi-mortarboard-fill::before { content: "\f6fd"; } -.bi-mortarboard::before { content: "\f6fe"; } -.bi-terminal-x::before { content: "\f6ff"; } -.bi-arrow-through-heart-fill::before { content: "\f700"; } -.bi-arrow-through-heart::before { content: "\f701"; } -.bi-badge-sd-fill::before { content: "\f702"; } -.bi-badge-sd::before { content: "\f703"; } -.bi-bag-heart-fill::before { content: "\f704"; } -.bi-bag-heart::before { content: "\f705"; } -.bi-balloon-fill::before { content: "\f706"; } -.bi-balloon-heart-fill::before { content: "\f707"; } -.bi-balloon-heart::before { content: "\f708"; } -.bi-balloon::before { content: "\f709"; } -.bi-box2-fill::before { content: "\f70a"; } -.bi-box2-heart-fill::before { content: "\f70b"; } -.bi-box2-heart::before { content: "\f70c"; } -.bi-box2::before { content: "\f70d"; } -.bi-braces-asterisk::before { content: "\f70e"; } -.bi-calendar-heart-fill::before { content: "\f70f"; } -.bi-calendar-heart::before { content: "\f710"; } -.bi-calendar2-heart-fill::before { content: "\f711"; } -.bi-calendar2-heart::before { content: "\f712"; } -.bi-chat-heart-fill::before { content: "\f713"; } -.bi-chat-heart::before { content: "\f714"; } -.bi-chat-left-heart-fill::before { content: "\f715"; } -.bi-chat-left-heart::before { content: "\f716"; } -.bi-chat-right-heart-fill::before { content: "\f717"; } -.bi-chat-right-heart::before { content: "\f718"; } -.bi-chat-square-heart-fill::before { content: "\f719"; } -.bi-chat-square-heart::before { content: "\f71a"; } -.bi-clipboard-check-fill::before { content: "\f71b"; } -.bi-clipboard-data-fill::before { content: "\f71c"; } -.bi-clipboard-fill::before { content: "\f71d"; } -.bi-clipboard-heart-fill::before { content: "\f71e"; } -.bi-clipboard-heart::before { content: "\f71f"; } -.bi-clipboard-minus-fill::before { content: "\f720"; } -.bi-clipboard-plus-fill::before { content: "\f721"; } -.bi-clipboard-pulse::before { content: "\f722"; } -.bi-clipboard-x-fill::before { content: "\f723"; } -.bi-clipboard2-check-fill::before { content: "\f724"; } -.bi-clipboard2-check::before { content: "\f725"; } -.bi-clipboard2-data-fill::before { content: "\f726"; } -.bi-clipboard2-data::before { content: "\f727"; } -.bi-clipboard2-fill::before { content: "\f728"; } -.bi-clipboard2-heart-fill::before { content: "\f729"; } -.bi-clipboard2-heart::before { content: "\f72a"; } -.bi-clipboard2-minus-fill::before { content: "\f72b"; } -.bi-clipboard2-minus::before { content: "\f72c"; } -.bi-clipboard2-plus-fill::before { content: "\f72d"; } -.bi-clipboard2-plus::before { content: "\f72e"; } -.bi-clipboard2-pulse-fill::before { content: "\f72f"; } -.bi-clipboard2-pulse::before { content: "\f730"; } -.bi-clipboard2-x-fill::before { content: "\f731"; } -.bi-clipboard2-x::before { content: "\f732"; } -.bi-clipboard2::before { content: "\f733"; } -.bi-emoji-kiss-fill::before { content: "\f734"; } -.bi-emoji-kiss::before { content: "\f735"; } -.bi-envelope-heart-fill::before { content: "\f736"; } -.bi-envelope-heart::before { content: "\f737"; } -.bi-envelope-open-heart-fill::before { content: "\f738"; } -.bi-envelope-open-heart::before { content: "\f739"; } -.bi-envelope-paper-fill::before { content: "\f73a"; } -.bi-envelope-paper-heart-fill::before { content: "\f73b"; } -.bi-envelope-paper-heart::before { content: "\f73c"; } -.bi-envelope-paper::before { content: "\f73d"; } -.bi-filetype-aac::before { content: "\f73e"; } -.bi-filetype-ai::before { content: "\f73f"; } -.bi-filetype-bmp::before { content: "\f740"; } -.bi-filetype-cs::before { content: "\f741"; } -.bi-filetype-css::before { content: "\f742"; } -.bi-filetype-csv::before { content: "\f743"; } -.bi-filetype-doc::before { content: "\f744"; } -.bi-filetype-docx::before { content: "\f745"; } -.bi-filetype-exe::before { content: "\f746"; } -.bi-filetype-gif::before { content: "\f747"; } -.bi-filetype-heic::before { content: "\f748"; } -.bi-filetype-html::before { content: "\f749"; } -.bi-filetype-java::before { content: "\f74a"; } -.bi-filetype-jpg::before { content: "\f74b"; } -.bi-filetype-js::before { content: "\f74c"; } -.bi-filetype-jsx::before { content: "\f74d"; } -.bi-filetype-key::before { content: "\f74e"; } -.bi-filetype-m4p::before { content: "\f74f"; } -.bi-filetype-md::before { content: "\f750"; } -.bi-filetype-mdx::before { content: "\f751"; } -.bi-filetype-mov::before { content: "\f752"; } -.bi-filetype-mp3::before { content: "\f753"; } -.bi-filetype-mp4::before { content: "\f754"; } -.bi-filetype-otf::before { content: "\f755"; } -.bi-filetype-pdf::before { content: "\f756"; } -.bi-filetype-php::before { content: "\f757"; } -.bi-filetype-png::before { content: "\f758"; } -.bi-filetype-ppt::before { content: "\f75a"; } -.bi-filetype-psd::before { content: "\f75b"; } -.bi-filetype-py::before { content: "\f75c"; } -.bi-filetype-raw::before { content: "\f75d"; } -.bi-filetype-rb::before { content: "\f75e"; } -.bi-filetype-sass::before { content: "\f75f"; } -.bi-filetype-scss::before { content: "\f760"; } -.bi-filetype-sh::before { content: "\f761"; } -.bi-filetype-svg::before { content: "\f762"; } -.bi-filetype-tiff::before { content: "\f763"; } -.bi-filetype-tsx::before { content: "\f764"; } -.bi-filetype-ttf::before { content: "\f765"; } -.bi-filetype-txt::before { content: "\f766"; } -.bi-filetype-wav::before { content: "\f767"; } -.bi-filetype-woff::before { content: "\f768"; } -.bi-filetype-xls::before { content: "\f76a"; } -.bi-filetype-xml::before { content: "\f76b"; } -.bi-filetype-yml::before { content: "\f76c"; } -.bi-heart-arrow::before { content: "\f76d"; } -.bi-heart-pulse-fill::before { content: "\f76e"; } -.bi-heart-pulse::before { content: "\f76f"; } -.bi-heartbreak-fill::before { content: "\f770"; } -.bi-heartbreak::before { content: "\f771"; } -.bi-hearts::before { content: "\f772"; } -.bi-hospital-fill::before { content: "\f773"; } -.bi-hospital::before { content: "\f774"; } -.bi-house-heart-fill::before { content: "\f775"; } -.bi-house-heart::before { content: "\f776"; } -.bi-incognito::before { content: "\f777"; } -.bi-magnet-fill::before { content: "\f778"; } -.bi-magnet::before { content: "\f779"; } -.bi-person-heart::before { content: "\f77a"; } -.bi-person-hearts::before { content: "\f77b"; } -.bi-phone-flip::before { content: "\f77c"; } -.bi-plugin::before { content: "\f77d"; } -.bi-postage-fill::before { content: "\f77e"; } -.bi-postage-heart-fill::before { content: "\f77f"; } -.bi-postage-heart::before { content: "\f780"; } -.bi-postage::before { content: "\f781"; } -.bi-postcard-fill::before { content: "\f782"; } -.bi-postcard-heart-fill::before { content: "\f783"; } -.bi-postcard-heart::before { content: "\f784"; } -.bi-postcard::before { content: "\f785"; } -.bi-search-heart-fill::before { content: "\f786"; } -.bi-search-heart::before { content: "\f787"; } -.bi-sliders2-vertical::before { content: "\f788"; } -.bi-sliders2::before { content: "\f789"; } -.bi-trash3-fill::before { content: "\f78a"; } -.bi-trash3::before { content: "\f78b"; } -.bi-valentine::before { content: "\f78c"; } -.bi-valentine2::before { content: "\f78d"; } -.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } -.bi-wrench-adjustable-circle::before { content: "\f78f"; } -.bi-wrench-adjustable::before { content: "\f790"; } -.bi-filetype-json::before { content: "\f791"; } -.bi-filetype-pptx::before { content: "\f792"; } -.bi-filetype-xlsx::before { content: "\f793"; } -.bi-1-circle-fill::before { content: "\f796"; } -.bi-1-circle::before { content: "\f797"; } -.bi-1-square-fill::before { content: "\f798"; } -.bi-1-square::before { content: "\f799"; } -.bi-2-circle-fill::before { content: "\f79c"; } -.bi-2-circle::before { content: "\f79d"; } -.bi-2-square-fill::before { content: "\f79e"; } -.bi-2-square::before { content: "\f79f"; } -.bi-3-circle-fill::before { content: "\f7a2"; } -.bi-3-circle::before { content: "\f7a3"; } -.bi-3-square-fill::before { content: "\f7a4"; } -.bi-3-square::before { content: "\f7a5"; } -.bi-4-circle-fill::before { content: "\f7a8"; } -.bi-4-circle::before { content: "\f7a9"; } -.bi-4-square-fill::before { content: "\f7aa"; } -.bi-4-square::before { content: "\f7ab"; } -.bi-5-circle-fill::before { content: "\f7ae"; } -.bi-5-circle::before { content: "\f7af"; } -.bi-5-square-fill::before { content: "\f7b0"; } -.bi-5-square::before { content: "\f7b1"; } -.bi-6-circle-fill::before { content: "\f7b4"; } -.bi-6-circle::before { content: "\f7b5"; } -.bi-6-square-fill::before { content: "\f7b6"; } -.bi-6-square::before { content: "\f7b7"; } -.bi-7-circle-fill::before { content: "\f7ba"; } -.bi-7-circle::before { content: "\f7bb"; } -.bi-7-square-fill::before { content: "\f7bc"; } -.bi-7-square::before { content: "\f7bd"; } -.bi-8-circle-fill::before { content: "\f7c0"; } -.bi-8-circle::before { content: "\f7c1"; } -.bi-8-square-fill::before { content: "\f7c2"; } -.bi-8-square::before { content: "\f7c3"; } -.bi-9-circle-fill::before { content: "\f7c6"; } -.bi-9-circle::before { content: "\f7c7"; } -.bi-9-square-fill::before { content: "\f7c8"; } -.bi-9-square::before { content: "\f7c9"; } -.bi-airplane-engines-fill::before { content: "\f7ca"; } -.bi-airplane-engines::before { content: "\f7cb"; } -.bi-airplane-fill::before { content: "\f7cc"; } -.bi-airplane::before { content: "\f7cd"; } -.bi-alexa::before { content: "\f7ce"; } -.bi-alipay::before { content: "\f7cf"; } -.bi-android::before { content: "\f7d0"; } -.bi-android2::before { content: "\f7d1"; } -.bi-box-fill::before { content: "\f7d2"; } -.bi-box-seam-fill::before { content: "\f7d3"; } -.bi-browser-chrome::before { content: "\f7d4"; } -.bi-browser-edge::before { content: "\f7d5"; } -.bi-browser-firefox::before { content: "\f7d6"; } -.bi-browser-safari::before { content: "\f7d7"; } -.bi-c-circle-fill::before { content: "\f7da"; } -.bi-c-circle::before { content: "\f7db"; } -.bi-c-square-fill::before { content: "\f7dc"; } -.bi-c-square::before { content: "\f7dd"; } -.bi-capsule-pill::before { content: "\f7de"; } -.bi-capsule::before { content: "\f7df"; } -.bi-car-front-fill::before { content: "\f7e0"; } -.bi-car-front::before { content: "\f7e1"; } -.bi-cassette-fill::before { content: "\f7e2"; } -.bi-cassette::before { content: "\f7e3"; } -.bi-cc-circle-fill::before { content: "\f7e6"; } -.bi-cc-circle::before { content: "\f7e7"; } -.bi-cc-square-fill::before { content: "\f7e8"; } -.bi-cc-square::before { content: "\f7e9"; } -.bi-cup-hot-fill::before { content: "\f7ea"; } -.bi-cup-hot::before { content: "\f7eb"; } -.bi-currency-rupee::before { content: "\f7ec"; } -.bi-dropbox::before { content: "\f7ed"; } -.bi-escape::before { content: "\f7ee"; } -.bi-fast-forward-btn-fill::before { content: "\f7ef"; } -.bi-fast-forward-btn::before { content: "\f7f0"; } -.bi-fast-forward-circle-fill::before { content: "\f7f1"; } -.bi-fast-forward-circle::before { content: "\f7f2"; } -.bi-fast-forward-fill::before { content: "\f7f3"; } -.bi-fast-forward::before { content: "\f7f4"; } -.bi-filetype-sql::before { content: "\f7f5"; } -.bi-fire::before { content: "\f7f6"; } -.bi-google-play::before { content: "\f7f7"; } -.bi-h-circle-fill::before { content: "\f7fa"; } -.bi-h-circle::before { content: "\f7fb"; } -.bi-h-square-fill::before { content: "\f7fc"; } -.bi-h-square::before { content: "\f7fd"; } -.bi-indent::before { content: "\f7fe"; } -.bi-lungs-fill::before { content: "\f7ff"; } -.bi-lungs::before { content: "\f800"; } -.bi-microsoft-teams::before { content: "\f801"; } -.bi-p-circle-fill::before { content: "\f804"; } -.bi-p-circle::before { content: "\f805"; } -.bi-p-square-fill::before { content: "\f806"; } -.bi-p-square::before { content: "\f807"; } -.bi-pass-fill::before { content: "\f808"; } -.bi-pass::before { content: "\f809"; } -.bi-prescription::before { content: "\f80a"; } -.bi-prescription2::before { content: "\f80b"; } -.bi-r-circle-fill::before { content: "\f80e"; } -.bi-r-circle::before { content: "\f80f"; } -.bi-r-square-fill::before { content: "\f810"; } -.bi-r-square::before { content: "\f811"; } -.bi-repeat-1::before { content: "\f812"; } -.bi-repeat::before { content: "\f813"; } -.bi-rewind-btn-fill::before { content: "\f814"; } -.bi-rewind-btn::before { content: "\f815"; } -.bi-rewind-circle-fill::before { content: "\f816"; } -.bi-rewind-circle::before { content: "\f817"; } -.bi-rewind-fill::before { content: "\f818"; } -.bi-rewind::before { content: "\f819"; } -.bi-train-freight-front-fill::before { content: "\f81a"; } -.bi-train-freight-front::before { content: "\f81b"; } -.bi-train-front-fill::before { content: "\f81c"; } -.bi-train-front::before { content: "\f81d"; } -.bi-train-lightrail-front-fill::before { content: "\f81e"; } -.bi-train-lightrail-front::before { content: "\f81f"; } -.bi-truck-front-fill::before { content: "\f820"; } -.bi-truck-front::before { content: "\f821"; } -.bi-ubuntu::before { content: "\f822"; } -.bi-unindent::before { content: "\f823"; } -.bi-unity::before { content: "\f824"; } -.bi-universal-access-circle::before { content: "\f825"; } -.bi-universal-access::before { content: "\f826"; } -.bi-virus::before { content: "\f827"; } -.bi-virus2::before { content: "\f828"; } -.bi-wechat::before { content: "\f829"; } -.bi-yelp::before { content: "\f82a"; } -.bi-sign-stop-fill::before { content: "\f82b"; } -.bi-sign-stop-lights-fill::before { content: "\f82c"; } -.bi-sign-stop-lights::before { content: "\f82d"; } -.bi-sign-stop::before { content: "\f82e"; } -.bi-sign-turn-left-fill::before { content: "\f82f"; } -.bi-sign-turn-left::before { content: "\f830"; } -.bi-sign-turn-right-fill::before { content: "\f831"; } -.bi-sign-turn-right::before { content: "\f832"; } -.bi-sign-turn-slight-left-fill::before { content: "\f833"; } -.bi-sign-turn-slight-left::before { content: "\f834"; } -.bi-sign-turn-slight-right-fill::before { content: "\f835"; } -.bi-sign-turn-slight-right::before { content: "\f836"; } -.bi-sign-yield-fill::before { content: "\f837"; } -.bi-sign-yield::before { content: "\f838"; } -.bi-ev-station-fill::before { content: "\f839"; } -.bi-ev-station::before { content: "\f83a"; } -.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } -.bi-fuel-pump-diesel::before { content: "\f83c"; } -.bi-fuel-pump-fill::before { content: "\f83d"; } -.bi-fuel-pump::before { content: "\f83e"; } -.bi-0-circle-fill::before { content: "\f83f"; } -.bi-0-circle::before { content: "\f840"; } -.bi-0-square-fill::before { content: "\f841"; } -.bi-0-square::before { content: "\f842"; } -.bi-rocket-fill::before { content: "\f843"; } -.bi-rocket-takeoff-fill::before { content: "\f844"; } -.bi-rocket-takeoff::before { content: "\f845"; } -.bi-rocket::before { content: "\f846"; } -.bi-stripe::before { content: "\f847"; } -.bi-subscript::before { content: "\f848"; } -.bi-superscript::before { content: "\f849"; } -.bi-trello::before { content: "\f84a"; } -.bi-envelope-at-fill::before { content: "\f84b"; } -.bi-envelope-at::before { content: "\f84c"; } -.bi-regex::before { content: "\f84d"; } -.bi-text-wrap::before { content: "\f84e"; } -.bi-sign-dead-end-fill::before { content: "\f84f"; } -.bi-sign-dead-end::before { content: "\f850"; } -.bi-sign-do-not-enter-fill::before { content: "\f851"; } -.bi-sign-do-not-enter::before { content: "\f852"; } -.bi-sign-intersection-fill::before { content: "\f853"; } -.bi-sign-intersection-side-fill::before { content: "\f854"; } -.bi-sign-intersection-side::before { content: "\f855"; } -.bi-sign-intersection-t-fill::before { content: "\f856"; } -.bi-sign-intersection-t::before { content: "\f857"; } -.bi-sign-intersection-y-fill::before { content: "\f858"; } -.bi-sign-intersection-y::before { content: "\f859"; } -.bi-sign-intersection::before { content: "\f85a"; } -.bi-sign-merge-left-fill::before { content: "\f85b"; } -.bi-sign-merge-left::before { content: "\f85c"; } -.bi-sign-merge-right-fill::before { content: "\f85d"; } -.bi-sign-merge-right::before { content: "\f85e"; } -.bi-sign-no-left-turn-fill::before { content: "\f85f"; } -.bi-sign-no-left-turn::before { content: "\f860"; } -.bi-sign-no-parking-fill::before { content: "\f861"; } -.bi-sign-no-parking::before { content: "\f862"; } -.bi-sign-no-right-turn-fill::before { content: "\f863"; } -.bi-sign-no-right-turn::before { content: "\f864"; } -.bi-sign-railroad-fill::before { content: "\f865"; } -.bi-sign-railroad::before { content: "\f866"; } -.bi-building-add::before { content: "\f867"; } -.bi-building-check::before { content: "\f868"; } -.bi-building-dash::before { content: "\f869"; } -.bi-building-down::before { content: "\f86a"; } -.bi-building-exclamation::before { content: "\f86b"; } -.bi-building-fill-add::before { content: "\f86c"; } -.bi-building-fill-check::before { content: "\f86d"; } -.bi-building-fill-dash::before { content: "\f86e"; } -.bi-building-fill-down::before { content: "\f86f"; } -.bi-building-fill-exclamation::before { content: "\f870"; } -.bi-building-fill-gear::before { content: "\f871"; } -.bi-building-fill-lock::before { content: "\f872"; } -.bi-building-fill-slash::before { content: "\f873"; } -.bi-building-fill-up::before { content: "\f874"; } -.bi-building-fill-x::before { content: "\f875"; } -.bi-building-fill::before { content: "\f876"; } -.bi-building-gear::before { content: "\f877"; } -.bi-building-lock::before { content: "\f878"; } -.bi-building-slash::before { content: "\f879"; } -.bi-building-up::before { content: "\f87a"; } -.bi-building-x::before { content: "\f87b"; } -.bi-buildings-fill::before { content: "\f87c"; } -.bi-buildings::before { content: "\f87d"; } -.bi-bus-front-fill::before { content: "\f87e"; } -.bi-bus-front::before { content: "\f87f"; } -.bi-ev-front-fill::before { content: "\f880"; } -.bi-ev-front::before { content: "\f881"; } -.bi-globe-americas::before { content: "\f882"; } -.bi-globe-asia-australia::before { content: "\f883"; } -.bi-globe-central-south-asia::before { content: "\f884"; } -.bi-globe-europe-africa::before { content: "\f885"; } -.bi-house-add-fill::before { content: "\f886"; } -.bi-house-add::before { content: "\f887"; } -.bi-house-check-fill::before { content: "\f888"; } -.bi-house-check::before { content: "\f889"; } -.bi-house-dash-fill::before { content: "\f88a"; } -.bi-house-dash::before { content: "\f88b"; } -.bi-house-down-fill::before { content: "\f88c"; } -.bi-house-down::before { content: "\f88d"; } -.bi-house-exclamation-fill::before { content: "\f88e"; } -.bi-house-exclamation::before { content: "\f88f"; } -.bi-house-gear-fill::before { content: "\f890"; } -.bi-house-gear::before { content: "\f891"; } -.bi-house-lock-fill::before { content: "\f892"; } -.bi-house-lock::before { content: "\f893"; } -.bi-house-slash-fill::before { content: "\f894"; } -.bi-house-slash::before { content: "\f895"; } -.bi-house-up-fill::before { content: "\f896"; } -.bi-house-up::before { content: "\f897"; } -.bi-house-x-fill::before { content: "\f898"; } -.bi-house-x::before { content: "\f899"; } -.bi-person-add::before { content: "\f89a"; } -.bi-person-down::before { content: "\f89b"; } -.bi-person-exclamation::before { content: "\f89c"; } -.bi-person-fill-add::before { content: "\f89d"; } -.bi-person-fill-check::before { content: "\f89e"; } -.bi-person-fill-dash::before { content: "\f89f"; } -.bi-person-fill-down::before { content: "\f8a0"; } -.bi-person-fill-exclamation::before { content: "\f8a1"; } -.bi-person-fill-gear::before { content: "\f8a2"; } -.bi-person-fill-lock::before { content: "\f8a3"; } -.bi-person-fill-slash::before { content: "\f8a4"; } -.bi-person-fill-up::before { content: "\f8a5"; } -.bi-person-fill-x::before { content: "\f8a6"; } -.bi-person-gear::before { content: "\f8a7"; } -.bi-person-lock::before { content: "\f8a8"; } -.bi-person-slash::before { content: "\f8a9"; } -.bi-person-up::before { content: "\f8aa"; } -.bi-scooter::before { content: "\f8ab"; } -.bi-taxi-front-fill::before { content: "\f8ac"; } -.bi-taxi-front::before { content: "\f8ad"; } -.bi-amd::before { content: "\f8ae"; } -.bi-database-add::before { content: "\f8af"; } -.bi-database-check::before { content: "\f8b0"; } -.bi-database-dash::before { content: "\f8b1"; } -.bi-database-down::before { content: "\f8b2"; } -.bi-database-exclamation::before { content: "\f8b3"; } -.bi-database-fill-add::before { content: "\f8b4"; } -.bi-database-fill-check::before { content: "\f8b5"; } -.bi-database-fill-dash::before { content: "\f8b6"; } -.bi-database-fill-down::before { content: "\f8b7"; } -.bi-database-fill-exclamation::before { content: "\f8b8"; } -.bi-database-fill-gear::before { content: "\f8b9"; } -.bi-database-fill-lock::before { content: "\f8ba"; } -.bi-database-fill-slash::before { content: "\f8bb"; } -.bi-database-fill-up::before { content: "\f8bc"; } -.bi-database-fill-x::before { content: "\f8bd"; } -.bi-database-fill::before { content: "\f8be"; } -.bi-database-gear::before { content: "\f8bf"; } -.bi-database-lock::before { content: "\f8c0"; } -.bi-database-slash::before { content: "\f8c1"; } -.bi-database-up::before { content: "\f8c2"; } -.bi-database-x::before { content: "\f8c3"; } -.bi-database::before { content: "\f8c4"; } -.bi-houses-fill::before { content: "\f8c5"; } -.bi-houses::before { content: "\f8c6"; } -.bi-nvidia::before { content: "\f8c7"; } -.bi-person-vcard-fill::before { content: "\f8c8"; } -.bi-person-vcard::before { content: "\f8c9"; } -.bi-sina-weibo::before { content: "\f8ca"; } -.bi-tencent-qq::before { content: "\f8cb"; } -.bi-wikipedia::before { content: "\f8cc"; } -.bi-alphabet-uppercase::before { content: "\f2a5"; } -.bi-alphabet::before { content: "\f68a"; } -.bi-amazon::before { content: "\f68d"; } -.bi-arrows-collapse-vertical::before { content: "\f690"; } -.bi-arrows-expand-vertical::before { content: "\f695"; } -.bi-arrows-vertical::before { content: "\f698"; } -.bi-arrows::before { content: "\f6a2"; } -.bi-ban-fill::before { content: "\f6a3"; } -.bi-ban::before { content: "\f6b6"; } -.bi-bing::before { content: "\f6c2"; } -.bi-cake::before { content: "\f6e0"; } -.bi-cake2::before { content: "\f6ed"; } -.bi-cookie::before { content: "\f6ee"; } -.bi-copy::before { content: "\f759"; } -.bi-crosshair::before { content: "\f769"; } -.bi-crosshair2::before { content: "\f794"; } -.bi-emoji-astonished-fill::before { content: "\f795"; } -.bi-emoji-astonished::before { content: "\f79a"; } -.bi-emoji-grimace-fill::before { content: "\f79b"; } -.bi-emoji-grimace::before { content: "\f7a0"; } -.bi-emoji-grin-fill::before { content: "\f7a1"; } -.bi-emoji-grin::before { content: "\f7a6"; } -.bi-emoji-surprise-fill::before { content: "\f7a7"; } -.bi-emoji-surprise::before { content: "\f7ac"; } -.bi-emoji-tear-fill::before { content: "\f7ad"; } -.bi-emoji-tear::before { content: "\f7b2"; } -.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } -.bi-envelope-arrow-down::before { content: "\f7b8"; } -.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } -.bi-envelope-arrow-up::before { content: "\f7be"; } -.bi-feather::before { content: "\f7bf"; } -.bi-feather2::before { content: "\f7c4"; } -.bi-floppy-fill::before { content: "\f7c5"; } -.bi-floppy::before { content: "\f7d8"; } -.bi-floppy2-fill::before { content: "\f7d9"; } -.bi-floppy2::before { content: "\f7e4"; } -.bi-gitlab::before { content: "\f7e5"; } -.bi-highlighter::before { content: "\f7f8"; } -.bi-marker-tip::before { content: "\f802"; } -.bi-nvme-fill::before { content: "\f803"; } -.bi-nvme::before { content: "\f80c"; } -.bi-opencollective::before { content: "\f80d"; } -.bi-pci-card-network::before { content: "\f8cd"; } -.bi-pci-card-sound::before { content: "\f8ce"; } -.bi-radar::before { content: "\f8cf"; } -.bi-send-arrow-down-fill::before { content: "\f8d0"; } -.bi-send-arrow-down::before { content: "\f8d1"; } -.bi-send-arrow-up-fill::before { content: "\f8d2"; } -.bi-send-arrow-up::before { content: "\f8d3"; } -.bi-sim-slash-fill::before { content: "\f8d4"; } -.bi-sim-slash::before { content: "\f8d5"; } -.bi-sourceforge::before { content: "\f8d6"; } -.bi-substack::before { content: "\f8d7"; } -.bi-threads-fill::before { content: "\f8d8"; } -.bi-threads::before { content: "\f8d9"; } -.bi-transparency::before { content: "\f8da"; } -.bi-twitter-x::before { content: "\f8db"; } -.bi-type-h4::before { content: "\f8dc"; } -.bi-type-h5::before { content: "\f8dd"; } -.bi-type-h6::before { content: "\f8de"; } -.bi-backpack-fill::before { content: "\f8df"; } -.bi-backpack::before { content: "\f8e0"; } -.bi-backpack2-fill::before { content: "\f8e1"; } -.bi-backpack2::before { content: "\f8e2"; } -.bi-backpack3-fill::before { content: "\f8e3"; } -.bi-backpack3::before { content: "\f8e4"; } -.bi-backpack4-fill::before { content: "\f8e5"; } -.bi-backpack4::before { content: "\f8e6"; } -.bi-brilliance::before { content: "\f8e7"; } -.bi-cake-fill::before { content: "\f8e8"; } -.bi-cake2-fill::before { content: "\f8e9"; } -.bi-duffle-fill::before { content: "\f8ea"; } -.bi-duffle::before { content: "\f8eb"; } -.bi-exposure::before { content: "\f8ec"; } -.bi-gender-neuter::before { content: "\f8ed"; } -.bi-highlights::before { content: "\f8ee"; } -.bi-luggage-fill::before { content: "\f8ef"; } -.bi-luggage::before { content: "\f8f0"; } -.bi-mailbox-flag::before { content: "\f8f1"; } -.bi-mailbox2-flag::before { content: "\f8f2"; } -.bi-noise-reduction::before { content: "\f8f3"; } -.bi-passport-fill::before { content: "\f8f4"; } -.bi-passport::before { content: "\f8f5"; } -.bi-person-arms-up::before { content: "\f8f6"; } -.bi-person-raised-hand::before { content: "\f8f7"; } -.bi-person-standing-dress::before { content: "\f8f8"; } -.bi-person-standing::before { content: "\f8f9"; } -.bi-person-walking::before { content: "\f8fa"; } -.bi-person-wheelchair::before { content: "\f8fb"; } -.bi-shadows::before { content: "\f8fc"; } -.bi-suitcase-fill::before { content: "\f8fd"; } -.bi-suitcase-lg-fill::before { content: "\f8fe"; } -.bi-suitcase-lg::before { content: "\f8ff"; } -.bi-suitcase::before { content: "\f900"; } -.bi-suitcase2-fill::before { content: "\f901"; } -.bi-suitcase2::before { content: "\f902"; } -.bi-vignette::before { content: "\f903"; } diff --git a/site_libs/bootstrap/bootstrap-icons.woff b/site_libs/bootstrap/bootstrap-icons.woff deleted file mode 100644 index dbeeb055..00000000 Binary files a/site_libs/bootstrap/bootstrap-icons.woff and /dev/null differ diff --git a/site_libs/bootstrap/bootstrap.min.css b/site_libs/bootstrap/bootstrap.min.css deleted file mode 100644 index ea095a11..00000000 --- a/site_libs/bootstrap/bootstrap.min.css +++ /dev/null @@ -1,12 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";h1,.h1{size:44px}h2,.h2{size:28px}body{letter-spacing:-0.2px !important}.navbar{box-shadow:0 0 .2rem rgba(0,0,0,.1019607843),0 .1rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(0.1, 0.7, 0.1, 1),box-shadow .25s}.navbar-title{font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;font-size:1rem;font-weight:500}.navbar-title small,.navbar-title .small{font-size:14px;display:block;padding-left:1em}.navbar-title small,.navbar-title .small{font-size:14px;display:block;padding-left:1em}#footer-right-posit-logo{width:70px;min-width:70px}#footer-right-logo{width:20px;min-width:20px;margin-left:-3px !important;margin-right:-3px !important}.nav-link{font-family:"Source Code Pro",monospace;text-transform:uppercase;letter-spacing:.03em;font-size:14px !important;font-weight:500 !important;color:#404041 !important}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:#000 !important;font-weight:700 !important}.nav-footer{font-family:"Source Code Pro",monospace;text-transform:uppercase;font-size:14px;border-top:solid rgba(0,0,0,.1019607843) .01em;align-items:center !important}.nav-footer .nav-footer-center{min-height:min-content}#footer-right-full-posit-logo{width:70px;min-width:70px}#footer-right-logo{width:24px;min-width:24px;margin-left:-3px !important;margin-right:-3px !important;padding-top:1px}#footer-right-posit-logo{width:18px;min-width:18px;margin-left:-3px !important;margin-right:-3px !important;padding-top:1px}.bi-question-circle-fill{font-size:18px !important}.bi-lightbulb-fill{font-size:18px !important}.footnote-back{font-size:16px !important;font-weight:900px !important;color:#305775}.nav-tabs .nav-link{text-transform:none !important;font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;color:#404041 !important}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000 !important}.nav-tabs .nav-link:hover,.nav-link:focus{color:#447099 !important}.nav-pills{border:none !important}.nav-pills>.nav,.panel-underline>.nav{display:flex;border:none !important;flex-direction:row;justify-content:center}.nav-pills>.nav .nav-link,.panel-underline>.nav .nav-link{cursor:pointer}.nav-pills>.nav .nav-link{border:none !important}.nav-pills .tab-content,.panel-underline .tab-content{padding-left:0;padding-right:0;border:none}.nav-pills .nav-link.active,.nav-pills .nav-item.show .nav-link{color:#fff !important}.nav-pills .nav-link:hover,.nav-link:focus{isolation:isolate;color:#447099 !important;border:none !important}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff !important}.sidebar-item-container .active{font-weight:500}.sidebar-navigation li a{letter-spacing:.03em;font-size:16px}.sidebar-navigation li a{letter-spacing:-0.2px;line-height:normal}.sidebar nav[role=doc-toc]>ul li a{text-transform:none !important;font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;font-weight:400 !important;letter-spacing:-0.2px !important}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{font-weight:700 !important}li::marker{color:#447099}.callout.callout-style-default:not(.no-icon) div.callout-title-container{color:#333 !important}div.callout-note.callout{border-left-color:#447099 !important}div.callout-note .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzE3MjEyQiIgY2xhc3M9ImJpIGJpLWluZm8tY2lyY2xlIiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYiLz4KICA8cGF0aCBkPSJtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCIvPgo8L3N2Zz4=") !important}div.callout-note.callout-style-default>.callout-header{background-color:#dce7f2 !important}div.callout-warning.callout{border-left-color:#ee6331 !important}div.callout-warning .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzQ1MUYxMiIgY2xhc3M9ImJpIGJpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGQ9Ik03LjkzOCAyLjAxNkEuMTMuMTMgMCAwIDEgOC4wMDIgMmEuMTMuMTMgMCAwIDEgLjA2My4wMTYuMTUuMTUgMCAwIDEgLjA1NC4wNTdsNi44NTcgMTEuNjY3Yy4wMzYuMDYuMDM1LjEyNC4wMDIuMTgzYS4yLjIgMCAwIDEtLjA1NC4wNi4xLjEgMCAwIDEtLjA2Ni4wMTdIMS4xNDZhLjEuMSAwIDAgMS0uMDY2LS4wMTcuMi4yIDAgMCAxLS4wNTQtLjA2LjE4LjE4IDAgMCAxIC4wMDItLjE4M0w3Ljg4NCAyLjA3M2EuMTUuMTUgMCAwIDEgLjA1NC0uMDU3bTEuMDQ0LS40NWExLjEzIDEuMTMgMCAwIDAtMS45NiAwTC4xNjUgMTMuMjMzYy0uNDU3Ljc3OC4wOTEgMS43NjcuOTggMS43NjdoMTMuNzEzYy44ODkgMCAxLjQzOC0uOTkuOTgtMS43Njd6Ii8+CiAgPHBhdGggZD0iTTcuMDAyIDEyYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNS45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHoiLz4KPC9zdmc+") !important}div.callout-warning.callout-style-default>.callout-header{background-color:#fad8ca !important}div.callout-important.callout{border-left-color:#9a4665 !important}div.callout-important .callout-icon::before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iIzJFMTcxRiIgY2xhc3M9ImJpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZSIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Ii8+CiAgPHBhdGggZD0iTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHoiLz4KPC9zdmc+") !important}div.callout-important.callout-style-default>.callout-header{background-color:#f2dae3 !important}.preview-header>h1:after,.preview-header>.h1:after,.preview-header>h2:after,.preview-header>.h2:after,.preview-header>h3:after,.preview-header>.h3:after,.preview-header>h4:after,.preview-header>.h4:after,header h1 .preview-header,header .h1 .preview-header{content:"Preview feature";margin-left:1em;position:relative;border-radius:50rem !important;top:-0.5em}.preview-header>h1:after,.preview-header>.h1:after,.preview-header>h2:after,.preview-header>.h2:after,.preview-header>h3:after,.preview-header>.h3:after,.preview-header>h4:after,.preview-header>.h4:after,header h1 .preview-header,header .h1 .preview-header,div span.preview-feature{color:#ee6331;border:1px solid #ec5119;font-weight:400;font-size:9pt !important;padding:0rem .4rem}div span.preview-feature{margin-left:1em;text-transform:uppercase}ol.groovyAlpha{list-style:none;counter-reset:list-counter}ol.groovyAlpha li{counter-increment:list-counter}ol.groovyAlpha li>p:before{content:counter(list-counter, lower-alpha);width:20px;height:20px;text-align:center;margin-right:10px;color:#fff;background-color:#fc403b;display:inline-block;border-radius:10px;font-size:14px;line-height:16px;vertical-align:middle}/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 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: #ffffff;--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-default: #dee2e6;--bs-primary: #447099;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222, 226, 230;--bs-primary-rgb: 68, 112, 153;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #1b2d3d;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #dae2eb;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #b4c6d6;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--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", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, system-ui;--bs-font-monospace: "Source Code Pro", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Open Sans", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, system-ui;--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #404041;--bs-body-color-rgb: 64, 64, 65;--bs-body-bg: #ffffff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(64, 64, 65, 0.75);--bs-secondary-color-rgb: 64, 64, 65;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(64, 64, 65, 0.5);--bs-tertiary-color-rgb: 64, 64, 65;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #447099;--bs-link-color-rgb: 68, 112, 153;--bs-link-decoration: underline;--bs-link-hover-color: #365a7a;--bs-link-hover-color-rgb: 54, 90, 122;--bs-code-color: #7d12ba;--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.25rem;--bs-border-radius-sm: 0.2em;--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(68, 112, 153, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[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: #ffffff;--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: #8fa9c2;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #0e161f;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #29435c;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #8fa9c2;--bs-link-hover-color: #a5bace;--bs-link-color-rgb: 143, 169, 194;--bs-link-hover-color-rgb: 165, 186, 206;--bs-code-color: white;--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}:root{font-size:var(--bs-root-font-size)}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:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:300 !important;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.4rem + 1.8vw)}@media(min-width: 1200px){h1,.h1{font-size:2.75rem}}h2,.h2{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h2,.h2{font-size:1.75rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-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;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-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:"Source Code Pro",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6);border-radius:.25rem}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;border-radius:.25rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#404041;border-radius:.2em}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:.5rem;padding-bottom:.5rem;color:rgba(64,64,65,.75);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:.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}::-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{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.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:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(64,64,65,.75)}.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}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #404041;--bs-table-bg: #ffffff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #404041;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #404041;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #404041;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .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:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid silver}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.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)>*{--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: #dae2eb;--bs-table-border-color: #c4cbd4;--bs-table-striped-bg: #cfd7df;--bs-table-striped-color: #000;--bs-table-active-bg: #c4cbd4;--bs-table-active-color: #000;--bs-table-hover-bg: #cad1d9;--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: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--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: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--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: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--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: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--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: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--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: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #ffffff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #ffffff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #ffffff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #ffffff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{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,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(64,64,65,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#404041;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .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:#404041;background-color:#fff;border-color:#a2b8cc;outline:0;box-shadow:0 0 0 .25rem rgba(68,112,153,.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:rgba(64,64,65,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#404041;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#404041;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 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(1px * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:.2em}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:.25rem}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 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:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#404041;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#a2b8cc;outline:0;box-shadow:0 0 0 .25rem rgba(68,112,153,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #404041}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2em}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}[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,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #ffffff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-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:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=checkbox],.shiny-input-container .checkbox input[type=checkbox],.shiny-input-container .checkbox-inline input[type=checkbox],.shiny-input-container .radio input[type=checkbox],.shiny-input-container .radio-inline input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#a2b8cc;outline:0;box-shadow:0 0 0 .25rem rgba(68,112,153,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#447099;border-color:#447099}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline 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='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline 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='%23ffffff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#447099;border-color:#447099;--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='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.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 .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='%23a2b8cc'/%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='%23ffffff'/%3e%3c/svg%3e")}.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,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.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;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(68,112,153,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(68,112,153,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#447099;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c7d4e0}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#447099;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c7d4e0}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(64,64,65,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(64,64,65,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .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 .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.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:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.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 .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff;border-radius:.25rem}.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:1px 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:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-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{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#404041;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2em}.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(1px*-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:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#198754;border-radius:.25rem}.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:#198754;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='%23198754' 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:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.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='%23198754' 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 .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:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.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:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.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:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#dc3545;border-radius:.25rem}.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:#dc3545;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='%23dc3545'%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='%23dc3545' 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:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.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='%23dc3545'%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='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .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:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.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:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.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{--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: #404041;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn: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{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189, 192, 196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #ffffff;--bs-btn-bg: #447099;--bs-btn-border-color: #447099;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #3a5f82;--bs-btn-hover-border-color: #365a7a;--bs-btn-focus-shadow-rgb: 96, 133, 168;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #365a7a;--bs-btn-active-border-color: #335473;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #447099;--bs-btn-disabled-border-color: #447099}.btn-secondary{--bs-btn-color: #ffffff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #ffffff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #ffffff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #ffffff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222, 226, 230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #447099;--bs-btn-border-color: #447099;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #447099;--bs-btn-hover-border-color: #447099;--bs-btn-focus-shadow-rgb: 68, 112, 153;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #447099;--bs-btn-active-border-color: #447099;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #447099;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #447099;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #ffffff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #ffffff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #447099;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: #365a7a;--bs-btn-hover-border-color: transparent;--bs-btn-active-color: #365a7a;--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: 96, 133, 168;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .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 .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .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:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.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: #404041;--bs-dropdown-bg: #ffffff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #404041;--bs-dropdown-link-hover-color: #404041;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #ffffff;--bs-dropdown-link-active-bg: #447099;--bs-dropdown-link-disabled-color: rgba(64, 64, 65, 0.5);--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)}.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:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.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:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.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:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);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)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.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: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #ffffff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #ffffff;--bs-dropdown-link-active-bg: #447099;--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,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.25rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.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{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{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: #447099;--bs-nav-link-hover-color: #365a7a;--bs-nav-link-disabled-color: rgba(64, 64, 65, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .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 .25rem rgba(68,112,153,.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: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #ffffff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #ffffff;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 rgba(0,0,0,0);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: 0.25rem;--bs-nav-pills-link-active-color: #ffffff;--bs-nav-pills-link-active-bg: #447099}.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)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;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 rgba(0,0,0,0)}.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;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-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{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: #888888;--bs-navbar-hover-color: rgba(0, 0, 0, 0.8);--bs-navbar-disabled-color: rgba(136, 136, 136, 0.75);--bs-navbar-active-color: #000000;--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #404041;--bs-navbar-brand-hover-color: #404041;--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--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='%23888888' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(136, 136, 136, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;display:-webkit-flex;flex-direction:column;-webkit-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:.5rem;padding-bottom:.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%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-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:rgba(0,0,0,0);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;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-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;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .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{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: #888888;--bs-navbar-hover-color: rgba(0, 0, 0, 0.8);--bs-navbar-disabled-color: rgba(136, 136, 136, 0.75);--bs-navbar-active-color: #000000;--bs-navbar-brand-color: #404041;--bs-navbar-brand-hover-color: #404041;--bs-navbar-toggler-border-color: rgba(136, 136, 136, 0);--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='%23888888' 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='%23888888' 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: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #ffffff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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)}.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;-webkit-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(-0.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(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.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(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.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;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-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: #404041;--bs-accordion-bg: #ffffff;--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: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #404041;--bs-accordion-btn-bg: #ffffff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23404041'%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-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='%231b2d3d'%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-focus-border-color: #a2b8cc;--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(68, 112, 153, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #1b2d3d;--bs-accordion-active-bg: #dae2eb}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-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;-webkit-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;border-color:var(--bs-accordion-btn-focus-border-color);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-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-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-collapse{border-width:0}.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-button,.accordion-flush .accordion-item .accordion-button.collapsed{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='%238fa9c2'%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='%238fa9c2'%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: rgba(64, 64, 65, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(64, 64, 65, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-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: #447099;--bs-pagination-bg: #ffffff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: #365a7a;--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: #365a7a;--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(68, 112, 153, 0.25);--bs-pagination-active-color: #ffffff;--bs-pagination-active-bg: #447099;--bs-pagination-active-border-color: #447099;--bs-pagination-disabled-color: rgba(64, 64, 65, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .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);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(1px*-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: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.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: #ffffff;--bs-badge-border-radius: 0.25rem;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)}.badge:empty{display:none}.btn .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: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--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-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-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{--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{--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{--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{--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{--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{--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{--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: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #ffffff;--bs-progress-bar-bg: #447099;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-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)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-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: #447099;--bs-list-group-bg: #ffffff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(64, 64, 65, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #404041;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(64, 64, 65, 0.75);--bs-list-group-disabled-bg: #ffffff;--bs-list-group-active-color: #ffffff;--bs-list-group-active-bg: #447099;--bs-list-group-active-border-color: #447099;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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;-webkit-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-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.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(68, 112, 153, 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:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.25rem;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;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-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(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(64, 64, 65, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);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;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-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(-0.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: #ffffff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-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);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;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;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(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.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;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-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: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.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: #ffffff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--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","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;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:rgba(0,0,0,0);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)}.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)}.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)}.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)}.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: #ffffff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--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: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #404041;--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","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;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)}.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:rgba(0,0,0,0);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)}.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)}.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(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.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)}.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;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-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;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .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 .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;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .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:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.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='%23ffffff'%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-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%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-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-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;-webkit-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 rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .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:rgba(0,0,0,0)}.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: #404041;--bs-offcanvas-bg: #ffffff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--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;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-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;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:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;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-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-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:.5}.placeholder.btn::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:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !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:#fff !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-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(229, 232, 235, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(229, 232, 235, var(--bs-link-underline-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(54, 90, 122, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(54, 90, 122, 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(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, 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(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, 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(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, 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(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, 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(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, 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(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, 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(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, 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:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.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: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.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;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-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;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.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:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.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:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.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{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-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !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:.25rem !important}.m-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-2{margin-top:.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:.25rem !important}.me-2{margin-right:.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:.25rem !important}.mb-2{margin-bottom:.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:.25rem !important}.ms-2{margin-left:.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:.25rem !important}.p-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-2{padding-top:.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:.25rem !important}.pe-2{padding-right:.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:.25rem !important}.pb-2{padding-bottom:.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:.25rem !important}.ps-2{padding-left:.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:.25rem !important}.gap-2{gap:.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:.25rem !important}.row-gap-2{row-gap:.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:.25rem !important}.column-gap-2{column-gap:.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.4rem + 1.8vw) !important}.fs-2{font-size:calc(1.3rem + 0.6vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !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}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.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,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--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:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !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-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.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:rgba(0,0,0,0) !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:.25rem !important}.m-sm-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-sm-2{margin-top:.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:.25rem !important}.me-sm-2{margin-right:.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:.25rem !important}.mb-sm-2{margin-bottom:.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:.25rem !important}.ms-sm-2{margin-left:.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:.25rem !important}.p-sm-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-sm-2{padding-top:.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:.25rem !important}.pe-sm-2{padding-right:.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:.25rem !important}.pb-sm-2{padding-bottom:.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:.25rem !important}.ps-sm-2{padding-left:.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:.25rem !important}.gap-sm-2{gap:.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:.25rem !important}.row-gap-sm-2{row-gap:.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:.25rem !important}.column-gap-sm-2{column-gap:.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:.25rem !important}.m-md-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-md-2{margin-top:.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:.25rem !important}.me-md-2{margin-right:.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:.25rem !important}.mb-md-2{margin-bottom:.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:.25rem !important}.ms-md-2{margin-left:.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:.25rem !important}.p-md-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-md-2{padding-top:.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:.25rem !important}.pe-md-2{padding-right:.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:.25rem !important}.pb-md-2{padding-bottom:.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:.25rem !important}.ps-md-2{padding-left:.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:.25rem !important}.gap-md-2{gap:.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:.25rem !important}.row-gap-md-2{row-gap:.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:.25rem !important}.column-gap-md-2{column-gap:.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{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:.25rem !important}.m-lg-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-lg-2{margin-top:.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:.25rem !important}.me-lg-2{margin-right:.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:.25rem !important}.mb-lg-2{margin-bottom:.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:.25rem !important}.ms-lg-2{margin-left:.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:.25rem !important}.p-lg-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-lg-2{padding-top:.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:.25rem !important}.pe-lg-2{padding-right:.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:.25rem !important}.pb-lg-2{padding-bottom:.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:.25rem !important}.ps-lg-2{padding-left:.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:.25rem !important}.gap-lg-2{gap:.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:.25rem !important}.row-gap-lg-2{row-gap:.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:.25rem !important}.column-gap-lg-2{column-gap:.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:.25rem !important}.m-xl-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-xl-2{margin-top:.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:.25rem !important}.me-xl-2{margin-right:.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:.25rem !important}.mb-xl-2{margin-bottom:.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:.25rem !important}.ms-xl-2{margin-left:.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:.25rem !important}.p-xl-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-xl-2{padding-top:.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:.25rem !important}.pe-xl-2{padding-right:.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:.25rem !important}.pb-xl-2{padding-bottom:.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:.25rem !important}.ps-xl-2{padding-left:.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:.25rem !important}.gap-xl-2{gap:.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:.25rem !important}.row-gap-xl-2{row-gap:.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:.25rem !important}.column-gap-xl-2{column-gap:.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:.25rem !important}.m-xxl-2{margin:.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:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.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:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.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:.25rem !important}.mt-xxl-2{margin-top:.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:.25rem !important}.me-xxl-2{margin-right:.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:.25rem !important}.mb-xxl-2{margin-bottom:.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:.25rem !important}.ms-xxl-2{margin-left:.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:.25rem !important}.p-xxl-2{padding:.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:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.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:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.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:.25rem !important}.pt-xxl-2{padding-top:.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:.25rem !important}.pe-xxl-2{padding-right:.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:.25rem !important}.pb-xxl-2{padding-bottom:.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:.25rem !important}.ps-xxl-2{padding-left:.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:.25rem !important}.gap-xxl-2{gap:.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:.25rem !important}.row-gap-xxl-2{row-gap:.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:.25rem !important}.column-gap-xxl-2{column-gap:.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}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2.75rem !important}.fs-2{font-size:1.75rem !important}.fs-3{font-size:1.45rem !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}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #447099}.bg-primary{--bslib-color-bg: #447099;--bslib-color-fg: #ffffff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #ffffff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #0d6efd;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #0d6efd;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #6f42c1;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #6f42c1;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #d63384;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #d63384;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #dc3545;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #fd7e14;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #fd7e14;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ffc107;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ffc107;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #198754;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #0dcaf0;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #dee2e6}.bg-default{--bslib-color-bg: #dee2e6;--bslib-color-fg: #000}.text-primary{--bslib-color-fg: #447099}.bg-primary{--bslib-color-bg: #447099;--bslib-color-fg: #ffffff}.text-secondary{--bslib-color-fg: #6c757d}.bg-secondary{--bslib-color-bg: #6c757d;--bslib-color-fg: #ffffff}.text-success{--bslib-color-fg: #198754}.bg-success{--bslib-color-bg: #198754;--bslib-color-fg: #ffffff}.text-info{--bslib-color-fg: #0dcaf0}.bg-info{--bslib-color-bg: #0dcaf0;--bslib-color-fg: #000}.text-warning{--bslib-color-fg: #ffc107}.bg-warning{--bslib-color-bg: #ffc107;--bslib-color-fg: #000}.text-danger{--bslib-color-fg: #dc3545}.bg-danger{--bslib-color-bg: #dc3545;--bslib-color-fg: #ffffff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #212529}.bg-dark{--bslib-color-bg: #212529;--bslib-color-fg: #ffffff}.bg-gradient-blue-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #3148f9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3148f9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #345ce5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #345ce5;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #5d56cd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d56cd;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #6057b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6057b3;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #6d74a0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6d74a0;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6e8f9b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6e8f9b;color:#000}.bg-gradient-blue-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #1278b9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1278b9;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #000;--bslib-color-bg: #1592d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1592d4;color:#000}.bg-gradient-blue-cyan{--bslib-color-fg: #000;--bslib-color-bg: #0d93f8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0d6efd var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #0d93f8;color:#000}.bg-gradient-indigo-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4236f6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4236f6;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #6a24de;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #6a24de;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #931ec6;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #931ec6;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #951fad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #951fad;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a23c99;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a23c99;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #ffffff;--bslib-color-bg: #a35794;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a35794;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4740b3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4740b3;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #ffffff;--bslib-color-bg: #425af1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #425af1;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #4854d9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #4854d9;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #6b2ed5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #6b2ed5;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #983ca9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #983ca9;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #9b3d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #9b3d8f;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #ffffff;--bslib-color-bg: #a85a7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #a85a7c;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #000;--bslib-color-bg: #a97577;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #a97577;color:#000}.bg-gradient-purple-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #4d5e95;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #4d5e95;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #ffffff;--bslib-color-bg: #4f78b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4f78b0;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #000;--bslib-color-bg: #4878d4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6f42c1 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #4878d4;color:#000}.bg-gradient-pink-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #864bb4;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #864bb4;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #a925b0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #a925b0;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad399c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #ad399c;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #d8346b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #d8346b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #000;--bslib-color-bg: #e65157;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e65157;color:#000}.bg-gradient-pink-yellow{--bslib-color-fg: #000;--bslib-color-bg: #e66c52;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #e66c52;color:#000}.bg-gradient-pink-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8a5571;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8a5571;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #000;--bslib-color-bg: #8d6f8c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #8d6f8c;color:#000}.bg-gradient-pink-cyan{--bslib-color-fg: #000;--bslib-color-bg: #866faf;background:linear-gradient(var(--bg-gradient-deg, 140deg), #d63384 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #866faf;color:#000}.bg-gradient-red-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #894c8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #894c8f;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #ad268a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #ad268a;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #b03a77;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #b03a77;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #da345e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #da345e;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #000;--bslib-color-bg: #e95231;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #e95231;color:#000}.bg-gradient-red-yellow{--bslib-color-fg: #000;--bslib-color-bg: #ea6d2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #ea6d2c;color:#000}.bg-gradient-red-green{--bslib-color-fg: #ffffff;--bslib-color-bg: #8e564b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #8e564b;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #000;--bslib-color-bg: #917066;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #917066;color:#000}.bg-gradient-red-cyan{--bslib-color-fg: #000;--bslib-color-bg: #897189;background:linear-gradient(var(--bg-gradient-deg, 140deg), #dc3545 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #897189;color:#000}.bg-gradient-orange-blue{--bslib-color-fg: #000;--bslib-color-bg: #9d7871;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9d7871;color:#000}.bg-gradient-orange-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c1526d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c1526d;color:#000}.bg-gradient-orange-purple{--bslib-color-fg: #000;--bslib-color-bg: #c46659;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c46659;color:#000}.bg-gradient-orange-pink{--bslib-color-fg: #000;--bslib-color-bg: #ed6041;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ed6041;color:#000}.bg-gradient-orange-red{--bslib-color-fg: #000;--bslib-color-bg: #f06128;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f06128;color:#000}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #fe990f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #fe990f;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a2822e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a2822e;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #a59c48;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a59c48;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9d9c6c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #fd7e14 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9d9c6c;color:#000}.bg-gradient-yellow-blue{--bslib-color-fg: #000;--bslib-color-bg: #9ea069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #9ea069;color:#000}.bg-gradient-yellow-indigo{--bslib-color-fg: #000;--bslib-color-bg: #c27a65;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c27a65;color:#000}.bg-gradient-yellow-purple{--bslib-color-fg: #000;--bslib-color-bg: #c58e51;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #c58e51;color:#000}.bg-gradient-yellow-pink{--bslib-color-fg: #000;--bslib-color-bg: #ef8839;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #ef8839;color:#000}.bg-gradient-yellow-red{--bslib-color-fg: #000;--bslib-color-bg: #f18920;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #f18920;color:#000}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #fea60c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #fea60c;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #000;--bslib-color-bg: #a3aa26;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #a3aa26;color:#000}.bg-gradient-yellow-teal{--bslib-color-fg: #000;--bslib-color-bg: #a6c441;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6c441;color:#000}.bg-gradient-yellow-cyan{--bslib-color-fg: #000;--bslib-color-bg: #9ec564;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ffc107 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #9ec564;color:#000}.bg-gradient-green-blue{--bslib-color-fg: #ffffff;--bslib-color-bg: #147d98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #147d98;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #ffffff;--bslib-color-bg: #385793;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #385793;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #ffffff;--bslib-color-bg: #3b6b80;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3b6b80;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #ffffff;--bslib-color-bg: #656567;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #656567;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #ffffff;--bslib-color-bg: #67664e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #67664e;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #74833a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #74833a;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #000;--bslib-color-bg: #759e35;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #759e35;color:#000}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #1ca16f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #1ca16f;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #000;--bslib-color-bg: #14a292;background:linear-gradient(var(--bg-gradient-deg, 140deg), #198754 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #14a292;color:#000}.bg-gradient-teal-blue{--bslib-color-fg: #000;--bslib-color-bg: #18a5c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #18a5c0;color:#000}.bg-gradient-teal-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#000}.bg-gradient-teal-purple{--bslib-color-fg: #000;--bslib-color-bg: #4093a8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #4093a8;color:#000}.bg-gradient-teal-pink{--bslib-color-fg: #000;--bslib-color-bg: #698d8f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #698d8f;color:#000}.bg-gradient-teal-red{--bslib-color-fg: #000;--bslib-color-bg: #6b8e76;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #6b8e76;color:#000}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #78ab63;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #78ab63;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #000;--bslib-color-bg: #79c65d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #79c65d;color:#000}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #1daf7c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #1daf7c;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #000;--bslib-color-bg: #18c9bb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #0dcaf0 var(--bg-gradient-end, 180%)) #18c9bb;color:#000}.bg-gradient-cyan-blue{--bslib-color-fg: #000;--bslib-color-bg: #0da5f5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #0d6efd var(--bg-gradient-end, 180%)) #0da5f5;color:#000}.bg-gradient-cyan-indigo{--bslib-color-fg: #000;--bslib-color-bg: #3180f1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3180f1;color:#000}.bg-gradient-cyan-purple{--bslib-color-fg: #000;--bslib-color-bg: #3494dd;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #6f42c1 var(--bg-gradient-end, 180%)) #3494dd;color:#000}.bg-gradient-cyan-pink{--bslib-color-fg: #000;--bslib-color-bg: #5d8ec5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #d63384 var(--bg-gradient-end, 180%)) #5d8ec5;color:#000}.bg-gradient-cyan-red{--bslib-color-fg: #000;--bslib-color-bg: #608eac;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #dc3545 var(--bg-gradient-end, 180%)) #608eac;color:#000}.bg-gradient-cyan-orange{--bslib-color-fg: #000;--bslib-color-bg: #6dac98;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #fd7e14 var(--bg-gradient-end, 180%)) #6dac98;color:#000}.bg-gradient-cyan-yellow{--bslib-color-fg: #000;--bslib-color-bg: #6ec693;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #ffc107 var(--bg-gradient-end, 180%)) #6ec693;color:#000}.bg-gradient-cyan-green{--bslib-color-fg: #000;--bslib-color-bg: #12afb2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #198754 var(--bg-gradient-end, 180%)) #12afb2;color:#000}.bg-gradient-cyan-teal{--bslib-color-fg: #000;--bslib-color-bg: #15cacc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #0dcaf0 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #15cacc;color:#000}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #ffffff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:300 !important;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.3rem + 0.6vw);margin-top:0;margin-bottom:.5rem;font-weight:300 !important;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.75rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.accordion .accordion-header{font-size:calc(1.3rem + 0.6vw);margin-top:0;margin-bottom:.5rem;font-weight:300 !important;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.75rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-page-sidebar-title-bg: #ffffff;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:#888}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:#000}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:#595959}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:#595959;padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(56,92,125,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:#8c8c8c}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:#595959}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(56,92,125,.8)}div.sidebar-item-container.disabled{color:rgba(89,89,89,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#385c7d}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#fff;color:#888;border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:rgba(102,102,102,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:#365a7a}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:#757575}.nav-footer a{color:#757575}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:#888;border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:#595959;border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:#888;opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:#888;opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#404041;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(68,112,153,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#404041;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#404041;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#404041;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#404041;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#404041;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#404041;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#404041;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:#f2f2f2;padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#447099}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#447099}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:#5385b3}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#404041}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:#cbdae8}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#404041}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#404041}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#888}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#595959}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:rgba(255,255,255,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#404041;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(68,112,153,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(64,64,65,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#447099 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#6c757d !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#198754 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:#0dcaf0 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#ffc107 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:#dc3545 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#212529 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px #e6e6e6;border-bottom:solid 1px #e6e6e6}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:#ebebeb}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:#888}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#404041}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#404041}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px #c7c9cd;padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#404041}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#404041;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Open Sans","Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,system-ui;flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:#737374;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#447099}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:#737374;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#447099}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:#737374;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#447099}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:#737374;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#447099}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:#737374;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#447099}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#404041;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#404041}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}div.ansi-escaped-output{font-family:monospace;display:block}/*! -* -* ansi colors from IPython notebook's -* -* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since -* that seems to be what ansi_up emits -* -*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #ffffff;--quarto-body-color: #404041;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #ffffff;--mermaid-edge-color: #6c757d;--mermaid-node-fg-color: #404041;--mermaid-fg-color: #404041;--mermaid-fg-color--lighter: #59595b;--mermaid-fg-color--lightest: #737374;--mermaid-font-family: Open Sans, Segoe UI, Roboto, Helvetica Neue, Noto Sans, Liberation Sans, Arial, sans-serif, system-ui;--mermaid-label-bg-color: #ffffff;--mermaid-label-fg-color: #447099;--mermaid-node-bg-color: rgba(68, 112, 153, 0.1);--mermaid-node-fg-color: #404041}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}pre.sourceCode:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}pre.sourceCode:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>section:first-of-type>h2:first-child,main.content>section:first-of-type>.h2:first-child{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#7f7f81}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:#7f7f81}.quarto-layout-cell[data-ref-parent] caption{color:#7f7f81}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#7f7f81;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65);border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#7f7f81}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f8f9fa;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#447099}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#447099}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #447099;color:#447099 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#447099 !important}kbd,.kbd{color:#404041;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#0d6efd}div.callout-note.callout-style-default>.callout-header{background-color:#e7f1ff}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#198754}div.callout-tip.callout-style-default>.callout-header{background-color:#e8f3ee}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ffc107}div.callout-warning.callout-style-default>.callout-header{background-color:#fff9e6}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#fd7e14}div.callout-caution.callout-style-default>.callout-header{background-color:#fff2e8}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#dc3545}div.callout-important.callout-style-default>.callout-header{background-color:#fcebec}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#fff;color:#888}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#fafafa}#quarto-content .quarto-sidebar-toggle-title{color:#404041}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: #fefefe;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fefefe;--bs-btn-hover-bg: #828a91;--bs-btn-hover-border-color: #7b838a;--bs-btn-focus-shadow-rgb: 130, 138, 144;--bs-btn-active-color: #000;--bs-btn-active-bg: #899197;--bs-btn-active-border-color: #7b838a;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffffff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}nav.quarto-secondary-nav.color-navbar{background-color:#fff;color:#888}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#888}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:"Source Code Pro",monospace;color:#59595b;border:solid #59595b 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:"Source Code Pro",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid #f3f3f3;border-bottom:1px solid #f3f3f3}.table>thead{border-top-width:0;border-bottom:1px solid silver}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#888;background:#fff}.quarto-title-banner a{color:#888}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:#888}.quarto-title-banner .code-tools-button{color:#bbb}.quarto-title-banner .code-tools-button:hover{color:#888}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right} diff --git a/site_libs/bootstrap/bootstrap.min.js b/site_libs/bootstrap/bootstrap.min.js deleted file mode 100644 index e8f21f70..00000000 --- a/site_libs/bootstrap/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/site_libs/clipboard/clipboard.min.js b/site_libs/clipboard/clipboard.min.js deleted file mode 100644 index 1103f811..00000000 --- a/site_libs/clipboard/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1 - - - - - - - - - - - diff --git a/site_libs/quarto-contrib/quarto-project/posit-dev/posit-docs/assets/images/posit-icon-fullcolor.svg b/site_libs/quarto-contrib/quarto-project/posit-dev/posit-docs/assets/images/posit-icon-fullcolor.svg deleted file mode 100644 index ec7f5525..00000000 --- a/site_libs/quarto-contrib/quarto-project/posit-dev/posit-docs/assets/images/posit-icon-fullcolor.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/site_libs/quarto-html/anchor.min.js b/site_libs/quarto-html/anchor.min.js deleted file mode 100644 index 5ac814d1..00000000 --- a/site_libs/quarto-html/anchor.min.js +++ /dev/null @@ -1,9 +0,0 @@ -// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat -// -// AnchorJS - v5.0.0 - 2023-01-18 -// https://www.bryanbraun.com/anchorjs/ -// Copyright (c) 2023 Bryan Braun; Licensed MIT -// -// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat -!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(globalThis,function(){"use strict";return function(A){function u(A){A.icon=Object.prototype.hasOwnProperty.call(A,"icon")?A.icon:"",A.visible=Object.prototype.hasOwnProperty.call(A,"visible")?A.visible:"hover",A.placement=Object.prototype.hasOwnProperty.call(A,"placement")?A.placement:"right",A.ariaLabel=Object.prototype.hasOwnProperty.call(A,"ariaLabel")?A.ariaLabel:"Anchor",A.class=Object.prototype.hasOwnProperty.call(A,"class")?A.class:"",A.base=Object.prototype.hasOwnProperty.call(A,"base")?A.base:"",A.truncate=Object.prototype.hasOwnProperty.call(A,"truncate")?Math.floor(A.truncate):64,A.titleText=Object.prototype.hasOwnProperty.call(A,"titleText")?A.titleText:""}function d(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new TypeError("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],u(this.options),this.add=function(A){var e,t,o,i,n,s,a,r,l,c,h,p=[];if(u(this.options),0!==(e=d(A=A||"h2, h3, h4, h5, h6")).length){for(null===document.head.querySelector("style.anchorjs")&&((A=document.createElement("style")).className="anchorjs",A.appendChild(document.createTextNode("")),void 0===(h=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(A):document.head.insertBefore(A,h),A.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",A.sheet.cssRules.length),A.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); -// @license-end \ No newline at end of file diff --git a/site_libs/quarto-html/popper.min.js b/site_libs/quarto-html/popper.min.js deleted file mode 100644 index e3726d72..00000000 --- a/site_libs/quarto-html/popper.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @popperjs/core v2.11.7 - MIT License - */ - -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); - diff --git a/site_libs/quarto-html/quarto-syntax-highlighting-dark.css b/site_libs/quarto-html/quarto-syntax-highlighting-dark.css deleted file mode 100644 index dd58d165..00000000 --- a/site_libs/quarto-html/quarto-syntax-highlighting-dark.css +++ /dev/null @@ -1,189 +0,0 @@ -/* quarto syntax highlight colors */ -:root { - --quarto-hl-al-color: #f07178; - --quarto-hl-an-color: #d4d0ab; - --quarto-hl-at-color: #00e0e0; - --quarto-hl-bn-color: #d4d0ab; - --quarto-hl-bu-color: #abe338; - --quarto-hl-ch-color: #abe338; - --quarto-hl-co-color: #f8f8f2; - --quarto-hl-cv-color: #ffd700; - --quarto-hl-cn-color: #ffd700; - --quarto-hl-cf-color: #ffa07a; - --quarto-hl-dt-color: #ffa07a; - --quarto-hl-dv-color: #d4d0ab; - --quarto-hl-do-color: #f8f8f2; - --quarto-hl-er-color: #f07178; - --quarto-hl-ex-color: #00e0e0; - --quarto-hl-fl-color: #d4d0ab; - --quarto-hl-fu-color: #ffa07a; - --quarto-hl-im-color: #abe338; - --quarto-hl-in-color: #d4d0ab; - --quarto-hl-kw-color: #ffa07a; - --quarto-hl-op-color: #ffa07a; - --quarto-hl-ot-color: #00e0e0; - --quarto-hl-pp-color: #dcc6e0; - --quarto-hl-re-color: #00e0e0; - --quarto-hl-sc-color: #abe338; - --quarto-hl-ss-color: #abe338; - --quarto-hl-st-color: #abe338; - --quarto-hl-va-color: #00e0e0; - --quarto-hl-vs-color: #abe338; - --quarto-hl-wa-color: #dcc6e0; -} - -/* other quarto variables */ -:root { - --quarto-font-monospace: "Source Code Pro", monospace; -} - -code span.al { - background-color: #2a0f15; - font-weight: bold; - color: #f07178; -} - -code span.an { - color: #d4d0ab; -} - -code span.at { - color: #00e0e0; -} - -code span.bn { - color: #d4d0ab; -} - -code span.bu { - color: #abe338; -} - -code span.ch { - color: #abe338; -} - -code span.co { - font-style: italic; - color: #f8f8f2; -} - -code span.cv { - color: #ffd700; -} - -code span.cn { - color: #ffd700; -} - -code span.cf { - font-weight: bold; - color: #ffa07a; -} - -code span.dt { - color: #ffa07a; -} - -code span.dv { - color: #d4d0ab; -} - -code span.do { - color: #f8f8f2; -} - -code span.er { - color: #f07178; - text-decoration: underline; -} - -code span.ex { - font-weight: bold; - color: #00e0e0; -} - -code span.fl { - color: #d4d0ab; -} - -code span.fu { - color: #ffa07a; -} - -code span.im { - color: #abe338; -} - -code span.in { - color: #d4d0ab; -} - -code span.kw { - font-weight: bold; - color: #ffa07a; -} - -pre > code.sourceCode > span { - color: #f8f8f2; -} - -code span { - color: #f8f8f2; -} - -code.sourceCode > span { - color: #f8f8f2; -} - -div.sourceCode, -div.sourceCode pre.sourceCode { - color: #f8f8f2; -} - -code span.op { - color: #ffa07a; -} - -code span.ot { - color: #00e0e0; -} - -code span.pp { - color: #dcc6e0; -} - -code span.re { - background-color: #f8f8f2; - color: #00e0e0; -} - -code span.sc { - color: #abe338; -} - -code span.ss { - color: #abe338; -} - -code span.st { - color: #abe338; -} - -code span.va { - color: #00e0e0; -} - -code span.vs { - color: #abe338; -} - -code span.wa { - color: #dcc6e0; -} - -.prevent-inlining { - content: " code.sourceCode > span { - color: #003B4F; -} - -code span { - color: #003B4F; -} - -code.sourceCode > span { - color: #003B4F; -} - -div.sourceCode, -div.sourceCode pre.sourceCode { - color: #003B4F; -} - -code span.ot { - color: #003B4F; - font-style: inherit; -} - -code span.at { - color: #657422; - font-style: inherit; -} - -code span.ss { - color: #20794D; - font-style: inherit; -} - -code span.an { - color: #5E5E5E; - font-style: inherit; -} - -code span.fu { - color: #4758AB; - font-style: inherit; -} - -code span.st { - color: #20794D; - font-style: inherit; -} - -code span.cf { - color: #003B4F; - font-weight: bold; - font-style: inherit; -} - -code span.op { - color: #5E5E5E; - font-style: inherit; -} - -code span.er { - color: #AD0000; - font-style: inherit; -} - -code span.bn { - color: #AD0000; - font-style: inherit; -} - -code span.al { - color: #AD0000; - font-style: inherit; -} - -code span.va { - color: #111111; - font-style: inherit; -} - -code span.bu { - font-style: inherit; -} - -code span.ex { - font-style: inherit; -} - -code span.pp { - color: #AD0000; - font-style: inherit; -} - -code span.in { - color: #5E5E5E; - font-style: inherit; -} - -code span.vs { - color: #20794D; - font-style: inherit; -} - -code span.wa { - color: #5E5E5E; - font-style: italic; -} - -code span.do { - color: #5E5E5E; - font-style: italic; -} - -code span.im { - color: #00769E; - font-style: inherit; -} - -code span.ch { - color: #20794D; - font-style: inherit; -} - -code span.dt { - color: #AD0000; - font-style: inherit; -} - -code span.fl { - color: #AD0000; - font-style: inherit; -} - -code span.co { - color: #5E5E5E; - font-style: inherit; -} - -code span.cv { - color: #5E5E5E; - font-style: italic; -} - -code span.cn { - color: #8f5902; - font-style: inherit; -} - -code span.sc { - color: #5E5E5E; - font-style: inherit; -} - -code span.dv { - color: #AD0000; - font-style: inherit; -} - -code span.kw { - color: #003B4F; - font-weight: bold; - font-style: inherit; -} - -.prevent-inlining { - content: " { - // Find any conflicting margin elements and add margins to the - // top to prevent overlap - const marginChildren = window.document.querySelectorAll( - ".column-margin.column-container > *, .margin-caption, .aside" - ); - - let lastBottom = 0; - for (const marginChild of marginChildren) { - if (marginChild.offsetParent !== null) { - // clear the top margin so we recompute it - marginChild.style.marginTop = null; - const top = marginChild.getBoundingClientRect().top + window.scrollY; - if (top < lastBottom) { - const marginChildStyle = window.getComputedStyle(marginChild); - const marginBottom = parseFloat(marginChildStyle["marginBottom"]); - const margin = lastBottom - top + marginBottom; - marginChild.style.marginTop = `${margin}px`; - } - const styles = window.getComputedStyle(marginChild); - const marginTop = parseFloat(styles["marginTop"]); - lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; - } - } -}; - -window.document.addEventListener("DOMContentLoaded", function (_event) { - // Recompute the position of margin elements anytime the body size changes - if (window.ResizeObserver) { - const resizeObserver = new window.ResizeObserver( - throttle(() => { - layoutMarginEls(); - if ( - window.document.body.getBoundingClientRect().width < 990 && - isReaderMode() - ) { - quartoToggleReader(); - } - }, 50) - ); - resizeObserver.observe(window.document.body); - } - - const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); - const sidebarEl = window.document.getElementById("quarto-sidebar"); - const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); - const marginSidebarEl = window.document.getElementById( - "quarto-margin-sidebar" - ); - // function to determine whether the element has a previous sibling that is active - const prevSiblingIsActiveLink = (el) => { - const sibling = el.previousElementSibling; - if (sibling && sibling.tagName === "A") { - return sibling.classList.contains("active"); - } else { - return false; - } - }; - - // fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior) - function fireSlideEnter(e) { - const event = window.document.createEvent("Event"); - event.initEvent("slideenter", true, true); - window.document.dispatchEvent(event); - } - const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); - tabs.forEach((tab) => { - tab.addEventListener("shown.bs.tab", fireSlideEnter); - }); - - // fire slideEnter for tabby tab activations (for htmlwidget resize behavior) - document.addEventListener("tabby", fireSlideEnter, false); - - // Track scrolling and mark TOC links as active - // get table of contents and sidebar (bail if we don't have at least one) - const tocLinks = tocEl - ? [...tocEl.querySelectorAll("a[data-scroll-target]")] - : []; - const makeActive = (link) => tocLinks[link].classList.add("active"); - const removeActive = (link) => tocLinks[link].classList.remove("active"); - const removeAllActive = () => - [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); - - // activate the anchor for a section associated with this TOC entry - tocLinks.forEach((link) => { - link.addEventListener("click", () => { - if (link.href.indexOf("#") !== -1) { - const anchor = link.href.split("#")[1]; - const heading = window.document.querySelector( - `[data-anchor-id="${anchor}"]` - ); - if (heading) { - // Add the class - heading.classList.add("reveal-anchorjs-link"); - - // function to show the anchor - const handleMouseout = () => { - heading.classList.remove("reveal-anchorjs-link"); - heading.removeEventListener("mouseout", handleMouseout); - }; - - // add a function to clear the anchor when the user mouses out of it - heading.addEventListener("mouseout", handleMouseout); - } - } - }); - }); - - const sections = tocLinks.map((link) => { - const target = link.getAttribute("data-scroll-target"); - if (target.startsWith("#")) { - return window.document.getElementById(decodeURI(`${target.slice(1)}`)); - } else { - return window.document.querySelector(decodeURI(`${target}`)); - } - }); - - const sectionMargin = 200; - let currentActive = 0; - // track whether we've initialized state the first time - let init = false; - - const updateActiveLink = () => { - // The index from bottom to top (e.g. reversed list) - let sectionIndex = -1; - if ( - window.innerHeight + window.pageYOffset >= - window.document.body.offsetHeight - ) { - sectionIndex = 0; - } else { - sectionIndex = [...sections].reverse().findIndex((section) => { - if (section) { - return window.pageYOffset >= section.offsetTop - sectionMargin; - } else { - return false; - } - }); - } - if (sectionIndex > -1) { - const current = sections.length - sectionIndex - 1; - if (current !== currentActive) { - removeAllActive(); - currentActive = current; - makeActive(current); - if (init) { - window.dispatchEvent(sectionChanged); - } - init = true; - } - } - }; - - const inHiddenRegion = (top, bottom, hiddenRegions) => { - for (const region of hiddenRegions) { - if (top <= region.bottom && bottom >= region.top) { - return true; - } - } - return false; - }; - - const categorySelector = "header.quarto-title-block .quarto-category"; - const activateCategories = (href) => { - // Find any categories - // Surround them with a link pointing back to: - // #category=Authoring - try { - const categoryEls = window.document.querySelectorAll(categorySelector); - for (const categoryEl of categoryEls) { - const categoryText = categoryEl.textContent; - if (categoryText) { - const link = `${href}#category=${encodeURIComponent(categoryText)}`; - const linkEl = window.document.createElement("a"); - linkEl.setAttribute("href", link); - for (const child of categoryEl.childNodes) { - linkEl.append(child); - } - categoryEl.appendChild(linkEl); - } - } - } catch { - // Ignore errors - } - }; - function hasTitleCategories() { - return window.document.querySelector(categorySelector) !== null; - } - - function offsetRelativeUrl(url) { - const offset = getMeta("quarto:offset"); - return offset ? offset + url : url; - } - - function offsetAbsoluteUrl(url) { - const offset = getMeta("quarto:offset"); - const baseUrl = new URL(offset, window.location); - - const projRelativeUrl = url.replace(baseUrl, ""); - if (projRelativeUrl.startsWith("/")) { - return projRelativeUrl; - } else { - return "/" + projRelativeUrl; - } - } - - // read a meta tag value - function getMeta(metaName) { - const metas = window.document.getElementsByTagName("meta"); - for (let i = 0; i < metas.length; i++) { - if (metas[i].getAttribute("name") === metaName) { - return metas[i].getAttribute("content"); - } - } - return ""; - } - - async function findAndActivateCategories() { - const currentPagePath = offsetAbsoluteUrl(window.location.href); - const response = await fetch(offsetRelativeUrl("listings.json")); - if (response.status == 200) { - return response.json().then(function (listingPaths) { - const listingHrefs = []; - for (const listingPath of listingPaths) { - const pathWithoutLeadingSlash = listingPath.listing.substring(1); - for (const item of listingPath.items) { - if ( - item === currentPagePath || - item === currentPagePath + "index.html" - ) { - // Resolve this path against the offset to be sure - // we already are using the correct path to the listing - // (this adjusts the listing urls to be rooted against - // whatever root the page is actually running against) - const relative = offsetRelativeUrl(pathWithoutLeadingSlash); - const baseUrl = window.location; - const resolvedPath = new URL(relative, baseUrl); - listingHrefs.push(resolvedPath.pathname); - break; - } - } - } - - // Look up the tree for a nearby linting and use that if we find one - const nearestListing = findNearestParentListing( - offsetAbsoluteUrl(window.location.pathname), - listingHrefs - ); - if (nearestListing) { - activateCategories(nearestListing); - } else { - // See if the referrer is a listing page for this item - const referredRelativePath = offsetAbsoluteUrl(document.referrer); - const referrerListing = listingHrefs.find((listingHref) => { - const isListingReferrer = - listingHref === referredRelativePath || - listingHref === referredRelativePath + "index.html"; - return isListingReferrer; - }); - - if (referrerListing) { - // Try to use the referrer if possible - activateCategories(referrerListing); - } else if (listingHrefs.length > 0) { - // Otherwise, just fall back to the first listing - activateCategories(listingHrefs[0]); - } - } - }); - } - } - if (hasTitleCategories()) { - findAndActivateCategories(); - } - - const findNearestParentListing = (href, listingHrefs) => { - if (!href || !listingHrefs) { - return undefined; - } - // Look up the tree for a nearby linting and use that if we find one - const relativeParts = href.substring(1).split("/"); - while (relativeParts.length > 0) { - const path = relativeParts.join("/"); - for (const listingHref of listingHrefs) { - if (listingHref.startsWith(path)) { - return listingHref; - } - } - relativeParts.pop(); - } - - return undefined; - }; - - const manageSidebarVisiblity = (el, placeholderDescriptor) => { - let isVisible = true; - let elRect; - - return (hiddenRegions) => { - if (el === null) { - return; - } - - // Find the last element of the TOC - const lastChildEl = el.lastElementChild; - - if (lastChildEl) { - // Converts the sidebar to a menu - const convertToMenu = () => { - for (const child of el.children) { - child.style.opacity = 0; - child.style.overflow = "hidden"; - } - - nexttick(() => { - const toggleContainer = window.document.createElement("div"); - toggleContainer.style.width = "100%"; - toggleContainer.classList.add("zindex-over-content"); - toggleContainer.classList.add("quarto-sidebar-toggle"); - toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom - toggleContainer.id = placeholderDescriptor.id; - toggleContainer.style.position = "fixed"; - - const toggleIcon = window.document.createElement("i"); - toggleIcon.classList.add("quarto-sidebar-toggle-icon"); - toggleIcon.classList.add("bi"); - toggleIcon.classList.add("bi-caret-down-fill"); - - const toggleTitle = window.document.createElement("div"); - const titleEl = window.document.body.querySelector( - placeholderDescriptor.titleSelector - ); - if (titleEl) { - toggleTitle.append( - titleEl.textContent || titleEl.innerText, - toggleIcon - ); - } - toggleTitle.classList.add("zindex-over-content"); - toggleTitle.classList.add("quarto-sidebar-toggle-title"); - toggleContainer.append(toggleTitle); - - const toggleContents = window.document.createElement("div"); - toggleContents.classList = el.classList; - toggleContents.classList.add("zindex-over-content"); - toggleContents.classList.add("quarto-sidebar-toggle-contents"); - for (const child of el.children) { - if (child.id === "toc-title") { - continue; - } - - const clone = child.cloneNode(true); - clone.style.opacity = 1; - clone.style.display = null; - toggleContents.append(clone); - } - toggleContents.style.height = "0px"; - const positionToggle = () => { - // position the element (top left of parent, same width as parent) - if (!elRect) { - elRect = el.getBoundingClientRect(); - } - toggleContainer.style.left = `${elRect.left}px`; - toggleContainer.style.top = `${elRect.top}px`; - toggleContainer.style.width = `${elRect.width}px`; - }; - positionToggle(); - - toggleContainer.append(toggleContents); - el.parentElement.prepend(toggleContainer); - - // Process clicks - let tocShowing = false; - // Allow the caller to control whether this is dismissed - // when it is clicked (e.g. sidebar navigation supports - // opening and closing the nav tree, so don't dismiss on click) - const clickEl = placeholderDescriptor.dismissOnClick - ? toggleContainer - : toggleTitle; - - const closeToggle = () => { - if (tocShowing) { - toggleContainer.classList.remove("expanded"); - toggleContents.style.height = "0px"; - tocShowing = false; - } - }; - - // Get rid of any expanded toggle if the user scrolls - window.document.addEventListener( - "scroll", - throttle(() => { - closeToggle(); - }, 50) - ); - - // Handle positioning of the toggle - window.addEventListener( - "resize", - throttle(() => { - elRect = undefined; - positionToggle(); - }, 50) - ); - - window.addEventListener("quarto-hrChanged", () => { - elRect = undefined; - }); - - // Process the click - clickEl.onclick = () => { - if (!tocShowing) { - toggleContainer.classList.add("expanded"); - toggleContents.style.height = null; - tocShowing = true; - } else { - closeToggle(); - } - }; - }); - }; - - // Converts a sidebar from a menu back to a sidebar - const convertToSidebar = () => { - for (const child of el.children) { - child.style.opacity = 1; - child.style.overflow = null; - } - - const placeholderEl = window.document.getElementById( - placeholderDescriptor.id - ); - if (placeholderEl) { - placeholderEl.remove(); - } - - el.classList.remove("rollup"); - }; - - if (isReaderMode()) { - convertToMenu(); - isVisible = false; - } else { - // Find the top and bottom o the element that is being managed - const elTop = el.offsetTop; - const elBottom = - elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; - - if (!isVisible) { - // If the element is current not visible reveal if there are - // no conflicts with overlay regions - if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { - convertToSidebar(); - isVisible = true; - } - } else { - // If the element is visible, hide it if it conflicts with overlay regions - // and insert a placeholder toggle (or if we're in reader mode) - if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { - convertToMenu(); - isVisible = false; - } - } - } - } - }; - }; - - const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); - for (const tabEl of tabEls) { - const id = tabEl.getAttribute("data-bs-target"); - if (id) { - const columnEl = document.querySelector( - `${id} .column-margin, .tabset-margin-content` - ); - if (columnEl) - tabEl.addEventListener("shown.bs.tab", function (event) { - const el = event.srcElement; - if (el) { - const visibleCls = `${el.id}-margin-content`; - // walk up until we find a parent tabset - let panelTabsetEl = el.parentElement; - while (panelTabsetEl) { - if (panelTabsetEl.classList.contains("panel-tabset")) { - break; - } - panelTabsetEl = panelTabsetEl.parentElement; - } - - if (panelTabsetEl) { - const prevSib = panelTabsetEl.previousElementSibling; - if ( - prevSib && - prevSib.classList.contains("tabset-margin-container") - ) { - const childNodes = prevSib.querySelectorAll( - ".tabset-margin-content" - ); - for (const childEl of childNodes) { - if (childEl.classList.contains(visibleCls)) { - childEl.classList.remove("collapse"); - } else { - childEl.classList.add("collapse"); - } - } - } - } - } - - layoutMarginEls(); - }); - } - } - - // Manage the visibility of the toc and the sidebar - const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { - id: "quarto-toc-toggle", - titleSelector: "#toc-title", - dismissOnClick: true, - }); - const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { - id: "quarto-sidebarnav-toggle", - titleSelector: ".title", - dismissOnClick: false, - }); - let tocLeftScrollVisibility; - if (leftTocEl) { - tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { - id: "quarto-lefttoc-toggle", - titleSelector: "#toc-title", - dismissOnClick: true, - }); - } - - // Find the first element that uses formatting in special columns - const conflictingEls = window.document.body.querySelectorAll( - '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' - ); - - // Filter all the possibly conflicting elements into ones - // the do conflict on the left or ride side - const arrConflictingEls = Array.from(conflictingEls); - const leftSideConflictEls = arrConflictingEls.filter((el) => { - if (el.tagName === "ASIDE") { - return false; - } - return Array.from(el.classList).find((className) => { - return ( - className !== "column-body" && - className.startsWith("column-") && - !className.endsWith("right") && - !className.endsWith("container") && - className !== "column-margin" - ); - }); - }); - const rightSideConflictEls = arrConflictingEls.filter((el) => { - if (el.tagName === "ASIDE") { - return true; - } - - const hasMarginCaption = Array.from(el.classList).find((className) => { - return className == "margin-caption"; - }); - if (hasMarginCaption) { - return true; - } - - return Array.from(el.classList).find((className) => { - return ( - className !== "column-body" && - !className.endsWith("container") && - className.startsWith("column-") && - !className.endsWith("left") - ); - }); - }); - - const kOverlapPaddingSize = 10; - function toRegions(els) { - return els.map((el) => { - const boundRect = el.getBoundingClientRect(); - const top = - boundRect.top + - document.documentElement.scrollTop - - kOverlapPaddingSize; - return { - top, - bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, - }; - }); - } - - let hasObserved = false; - const visibleItemObserver = (els) => { - let visibleElements = [...els]; - const intersectionObserver = new IntersectionObserver( - (entries, _observer) => { - entries.forEach((entry) => { - if (entry.isIntersecting) { - if (visibleElements.indexOf(entry.target) === -1) { - visibleElements.push(entry.target); - } - } else { - visibleElements = visibleElements.filter((visibleEntry) => { - return visibleEntry !== entry; - }); - } - }); - - if (!hasObserved) { - hideOverlappedSidebars(); - } - hasObserved = true; - }, - {} - ); - els.forEach((el) => { - intersectionObserver.observe(el); - }); - - return { - getVisibleEntries: () => { - return visibleElements; - }, - }; - }; - - const rightElementObserver = visibleItemObserver(rightSideConflictEls); - const leftElementObserver = visibleItemObserver(leftSideConflictEls); - - const hideOverlappedSidebars = () => { - marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); - sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); - if (tocLeftScrollVisibility) { - tocLeftScrollVisibility( - toRegions(leftElementObserver.getVisibleEntries()) - ); - } - }; - - window.quartoToggleReader = () => { - // Applies a slow class (or removes it) - // to update the transition speed - const slowTransition = (slow) => { - const manageTransition = (id, slow) => { - const el = document.getElementById(id); - if (el) { - if (slow) { - el.classList.add("slow"); - } else { - el.classList.remove("slow"); - } - } - }; - - manageTransition("TOC", slow); - manageTransition("quarto-sidebar", slow); - }; - const readerMode = !isReaderMode(); - setReaderModeValue(readerMode); - - // If we're entering reader mode, slow the transition - if (readerMode) { - slowTransition(readerMode); - } - highlightReaderToggle(readerMode); - hideOverlappedSidebars(); - - // If we're exiting reader mode, restore the non-slow transition - if (!readerMode) { - slowTransition(!readerMode); - } - }; - - const highlightReaderToggle = (readerMode) => { - const els = document.querySelectorAll(".quarto-reader-toggle"); - if (els) { - els.forEach((el) => { - if (readerMode) { - el.classList.add("reader"); - } else { - el.classList.remove("reader"); - } - }); - } - }; - - const setReaderModeValue = (val) => { - if (window.location.protocol !== "file:") { - window.localStorage.setItem("quarto-reader-mode", val); - } else { - localReaderMode = val; - } - }; - - const isReaderMode = () => { - if (window.location.protocol !== "file:") { - return window.localStorage.getItem("quarto-reader-mode") === "true"; - } else { - return localReaderMode; - } - }; - let localReaderMode = null; - - const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); - const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; - - // Walk the TOC and collapse/expand nodes - // Nodes are expanded if: - // - they are top level - // - they have children that are 'active' links - // - they are directly below an link that is 'active' - const walk = (el, depth) => { - // Tick depth when we enter a UL - if (el.tagName === "UL") { - depth = depth + 1; - } - - // It this is active link - let isActiveNode = false; - if (el.tagName === "A" && el.classList.contains("active")) { - isActiveNode = true; - } - - // See if there is an active child to this element - let hasActiveChild = false; - for (child of el.children) { - hasActiveChild = walk(child, depth) || hasActiveChild; - } - - // Process the collapse state if this is an UL - if (el.tagName === "UL") { - if (tocOpenDepth === -1 && depth > 1) { - el.classList.add("collapse"); - } else if ( - depth <= tocOpenDepth || - hasActiveChild || - prevSiblingIsActiveLink(el) - ) { - el.classList.remove("collapse"); - } else { - el.classList.add("collapse"); - } - - // untick depth when we leave a UL - depth = depth - 1; - } - return hasActiveChild || isActiveNode; - }; - - // walk the TOC and expand / collapse any items that should be shown - - if (tocEl) { - walk(tocEl, 0); - updateActiveLink(); - } - - // Throttle the scroll event and walk peridiocally - window.document.addEventListener( - "scroll", - throttle(() => { - if (tocEl) { - updateActiveLink(); - walk(tocEl, 0); - } - if (!isReaderMode()) { - hideOverlappedSidebars(); - } - }, 5) - ); - window.addEventListener( - "resize", - throttle(() => { - if (!isReaderMode()) { - hideOverlappedSidebars(); - } - }, 10) - ); - hideOverlappedSidebars(); - highlightReaderToggle(isReaderMode()); -}); - -// grouped tabsets -window.addEventListener("pageshow", (_event) => { - function getTabSettings() { - const data = localStorage.getItem("quarto-persistent-tabsets-data"); - if (!data) { - localStorage.setItem("quarto-persistent-tabsets-data", "{}"); - return {}; - } - if (data) { - return JSON.parse(data); - } - } - - function setTabSettings(data) { - localStorage.setItem( - "quarto-persistent-tabsets-data", - JSON.stringify(data) - ); - } - - function setTabState(groupName, groupValue) { - const data = getTabSettings(); - data[groupName] = groupValue; - setTabSettings(data); - } - - function toggleTab(tab, active) { - const tabPanelId = tab.getAttribute("aria-controls"); - const tabPanel = document.getElementById(tabPanelId); - if (active) { - tab.classList.add("active"); - tabPanel.classList.add("active"); - } else { - tab.classList.remove("active"); - tabPanel.classList.remove("active"); - } - } - - function toggleAll(selectedGroup, selectorsToSync) { - for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { - const active = selectedGroup === thisGroup; - for (const tab of tabs) { - toggleTab(tab, active); - } - } - } - - function findSelectorsToSyncByLanguage() { - const result = {}; - const tabs = Array.from( - document.querySelectorAll(`div[data-group] a[id^='tabset-']`) - ); - for (const item of tabs) { - const div = item.parentElement.parentElement.parentElement; - const group = div.getAttribute("data-group"); - if (!result[group]) { - result[group] = {}; - } - const selectorsToSync = result[group]; - const value = item.innerHTML; - if (!selectorsToSync[value]) { - selectorsToSync[value] = []; - } - selectorsToSync[value].push(item); - } - return result; - } - - function setupSelectorSync() { - const selectorsToSync = findSelectorsToSyncByLanguage(); - Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { - Object.entries(tabSetsByValue).forEach(([value, items]) => { - items.forEach((item) => { - item.addEventListener("click", (_event) => { - setTabState(group, value); - toggleAll(value, selectorsToSync[group]); - }); - }); - }); - }); - return selectorsToSync; - } - - const selectorsToSync = setupSelectorSync(); - for (const [group, selectedName] of Object.entries(getTabSettings())) { - const selectors = selectorsToSync[group]; - // it's possible that stale state gives us empty selections, so we explicitly check here. - if (selectors) { - toggleAll(selectedName, selectors); - } - } -}); - -function throttle(func, wait) { - let waiting = false; - return function () { - if (!waiting) { - func.apply(this, arguments); - waiting = true; - setTimeout(function () { - waiting = false; - }, wait); - } - }; -} - -function nexttick(func) { - return setTimeout(func, 0); -} diff --git a/site_libs/quarto-html/tippy.css b/site_libs/quarto-html/tippy.css deleted file mode 100644 index e6ae635c..00000000 --- a/site_libs/quarto-html/tippy.css +++ /dev/null @@ -1 +0,0 @@ -.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/site_libs/quarto-html/tippy.umd.min.js b/site_libs/quarto-html/tippy.umd.min.js deleted file mode 100644 index ca292be3..00000000 --- a/site_libs/quarto-html/tippy.umd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); - diff --git a/site_libs/quarto-listing/list.min.js b/site_libs/quarto-listing/list.min.js deleted file mode 100644 index 511346fc..00000000 --- a/site_libs/quarto-listing/list.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var List;List=function(){var t={"./src/add-async.js":function(t){t.exports=function(t){return function e(r,n,s){var i=r.splice(0,50);s=(s=s||[]).concat(t.add(i)),r.length>0?setTimeout((function(){e(r,n,s)}),1):(t.update(),n(s))}}},"./src/filter.js":function(t){t.exports=function(t){return t.handlers.filterStart=t.handlers.filterStart||[],t.handlers.filterComplete=t.handlers.filterComplete||[],function(e){if(t.trigger("filterStart"),t.i=1,t.reset.filter(),void 0===e)t.filtered=!1;else{t.filtered=!0;for(var r=t.items,n=0,s=r.length;nv.page,a=new g(t[s],void 0,n),v.items.push(a),r.push(a)}return v.update(),r}m(t.slice(0),e)}},this.show=function(t,e){return this.i=t,this.page=e,v.update(),v},this.remove=function(t,e,r){for(var n=0,s=0,i=v.items.length;s-1&&r.splice(n,1),v},this.trigger=function(t){for(var e=v.handlers[t].length;e--;)v.handlers[t][e](v);return v},this.reset={filter:function(){for(var t=v.items,e=t.length;e--;)t[e].filtered=!1;return v},search:function(){for(var t=v.items,e=t.length;e--;)t[e].found=!1;return v}},this.update=function(){var t=v.items,e=t.length;v.visibleItems=[],v.matchingItems=[],v.templater.clear();for(var r=0;r=v.i&&v.visibleItems.lengthe},innerWindow:function(t,e,r){return t>=e-r&&t<=e+r},dotted:function(t,e,r,n,s,i,a){return this.dottedLeft(t,e,r,n,s,i)||this.dottedRight(t,e,r,n,s,i,a)},dottedLeft:function(t,e,r,n,s,i){return e==r+1&&!this.innerWindow(e,s,i)&&!this.right(e,n)},dottedRight:function(t,e,r,n,s,i,a){return!t.items[a-1].values().dotted&&(e==n&&!this.innerWindow(e,s,i)&&!this.right(e,n))}};return function(e){var n=new i(t.listContainer.id,{listClass:e.paginationClass||"pagination",item:e.item||"
  • ",valueNames:["page","dotted"],searchClass:"pagination-search-that-is-not-supposed-to-exist",sortClass:"pagination-sort-that-is-not-supposed-to-exist"});s.bind(n.listContainer,"click",(function(e){var r=e.target||e.srcElement,n=t.utils.getAttribute(r,"data-page"),s=t.utils.getAttribute(r,"data-i");s&&t.show((s-1)*n+1,n)})),t.on("updated",(function(){r(n,e)})),r(n,e)}}},"./src/parse.js":function(t,e,r){t.exports=function(t){var e=r("./src/item.js")(t),n=function(r,n){for(var s=0,i=r.length;s0?setTimeout((function(){e(r,s)}),1):(t.update(),t.trigger("parseComplete"))};return t.handlers.parseComplete=t.handlers.parseComplete||[],function(){var e=function(t){for(var e=t.childNodes,r=[],n=0,s=e.length;n]/g.exec(t)){var e=document.createElement("tbody");return e.innerHTML=t,e.firstElementChild}if(-1!==t.indexOf("<")){var r=document.createElement("div");return r.innerHTML=t,r.firstElementChild}}},a=function(e,r,n){var s=void 0,i=function(e){for(var r=0,n=t.valueNames.length;r=1;)t.list.removeChild(t.list.firstChild)},function(){var r;if("function"!=typeof t.item){if(!(r="string"==typeof t.item?-1===t.item.indexOf("<")?document.getElementById(t.item):i(t.item):s()))throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.");r=n(r,t.valueNames),e=function(){return r.cloneNode(!0)}}else e=function(e){var r=t.item(e);return i(r)}}()};t.exports=function(t){return new e(t)}},"./src/utils/classes.js":function(t,e,r){var n=r("./src/utils/index-of.js"),s=/\s+/;Object.prototype.toString;function i(t){if(!t||!t.nodeType)throw new Error("A DOM element reference is required");this.el=t,this.list=t.classList}t.exports=function(t){return new i(t)},i.prototype.add=function(t){if(this.list)return this.list.add(t),this;var e=this.array();return~n(e,t)||e.push(t),this.el.className=e.join(" "),this},i.prototype.remove=function(t){if(this.list)return this.list.remove(t),this;var e=this.array(),r=n(e,t);return~r&&e.splice(r,1),this.el.className=e.join(" "),this},i.prototype.toggle=function(t,e){return this.list?(void 0!==e?e!==this.list.toggle(t,e)&&this.list.toggle(t):this.list.toggle(t),this):(void 0!==e?e?this.add(t):this.remove(t):this.has(t)?this.remove(t):this.add(t),this)},i.prototype.array=function(){var t=(this.el.getAttribute("class")||"").replace(/^\s+|\s+$/g,"").split(s);return""===t[0]&&t.shift(),t},i.prototype.has=i.prototype.contains=function(t){return this.list?this.list.contains(t):!!~n(this.array(),t)}},"./src/utils/events.js":function(t,e,r){var n=window.addEventListener?"addEventListener":"attachEvent",s=window.removeEventListener?"removeEventListener":"detachEvent",i="addEventListener"!==n?"on":"",a=r("./src/utils/to-array.js");e.bind=function(t,e,r,s){for(var o=0,l=(t=a(t)).length;o32)return!1;var a=n,o=function(){var t,r={};for(t=0;t=p;b--){var j=o[t.charAt(b-1)];if(C[b]=0===m?(C[b+1]<<1|1)&j:(C[b+1]<<1|1)&j|(v[b+1]|v[b])<<1|1|v[b+1],C[b]&d){var x=l(m,b-1);if(x<=u){if(u=x,!((c=b-1)>a))break;p=Math.max(1,2*a-c)}}}if(l(m+1,a)>u)break;v=C}return!(c<0)}},"./src/utils/get-attribute.js":function(t){t.exports=function(t,e){var r=t.getAttribute&&t.getAttribute(e)||null;if(!r)for(var n=t.attributes,s=n.length,i=0;i=48&&t<=57}function i(t,e){for(var i=(t+="").length,a=(e+="").length,o=0,l=0;o=i&&l=a?-1:l>=a&&o=i?1:i-a}i.caseInsensitive=i.i=function(t,e){return i((""+t).toLowerCase(),(""+e).toLowerCase())},Object.defineProperties(i,{alphabet:{get:function(){return e},set:function(t){r=[];var s=0;if(e=t)for(;s { - if (categoriesLoaded) { - activateCategory(category); - setCategoryHash(category); - } -}; - -window["quarto-listing-loaded"] = () => { - // Process any existing hash - const hash = getHash(); - - if (hash) { - // If there is a category, switch to that - if (hash.category) { - activateCategory(hash.category); - } - // Paginate a specific listing - const listingIds = Object.keys(window["quarto-listings"]); - for (const listingId of listingIds) { - const page = hash[getListingPageKey(listingId)]; - if (page) { - showPage(listingId, page); - } - } - } - - const listingIds = Object.keys(window["quarto-listings"]); - for (const listingId of listingIds) { - // The actual list - const list = window["quarto-listings"][listingId]; - - // Update the handlers for pagination events - refreshPaginationHandlers(listingId); - - // Render any visible items that need it - renderVisibleProgressiveImages(list); - - // Whenever the list is updated, we also need to - // attach handlers to the new pagination elements - // and refresh any newly visible items. - list.on("updated", function () { - renderVisibleProgressiveImages(list); - setTimeout(() => refreshPaginationHandlers(listingId)); - - // Show or hide the no matching message - toggleNoMatchingMessage(list); - }); - } -}; - -window.document.addEventListener("DOMContentLoaded", function (_event) { - // Attach click handlers to categories - const categoryEls = window.document.querySelectorAll( - ".quarto-listing-category .category" - ); - - for (const categoryEl of categoryEls) { - const category = categoryEl.getAttribute("data-category"); - categoryEl.onclick = () => { - activateCategory(category); - setCategoryHash(category); - }; - } - - // Attach a click handler to the category title - // (there should be only one, but since it is a class name, handle N) - const categoryTitleEls = window.document.querySelectorAll( - ".quarto-listing-category-title" - ); - for (const categoryTitleEl of categoryTitleEls) { - categoryTitleEl.onclick = () => { - activateCategory(""); - setCategoryHash(""); - }; - } - - categoriesLoaded = true; -}); - -function toggleNoMatchingMessage(list) { - const selector = `#${list.listContainer.id} .listing-no-matching`; - const noMatchingEl = window.document.querySelector(selector); - if (noMatchingEl) { - if (list.visibleItems.length === 0) { - noMatchingEl.classList.remove("d-none"); - } else { - if (!noMatchingEl.classList.contains("d-none")) { - noMatchingEl.classList.add("d-none"); - } - } - } -} - -function setCategoryHash(category) { - setHash({ category }); -} - -function setPageHash(listingId, page) { - const currentHash = getHash() || {}; - currentHash[getListingPageKey(listingId)] = page; - setHash(currentHash); -} - -function getListingPageKey(listingId) { - return `${listingId}-page`; -} - -function refreshPaginationHandlers(listingId) { - const listingEl = window.document.getElementById(listingId); - const paginationEls = listingEl.querySelectorAll( - ".pagination li.page-item:not(.disabled) .page.page-link" - ); - for (const paginationEl of paginationEls) { - paginationEl.onclick = (sender) => { - setPageHash(listingId, sender.target.getAttribute("data-i")); - showPage(listingId, sender.target.getAttribute("data-i")); - return false; - }; - } -} - -function renderVisibleProgressiveImages(list) { - // Run through the visible items and render any progressive images - for (const item of list.visibleItems) { - const itemEl = item.elm; - if (itemEl) { - const progressiveImgs = itemEl.querySelectorAll( - `img[${kProgressiveAttr}]` - ); - for (const progressiveImg of progressiveImgs) { - const srcValue = progressiveImg.getAttribute(kProgressiveAttr); - if (srcValue) { - progressiveImg.setAttribute("src", srcValue); - } - progressiveImg.removeAttribute(kProgressiveAttr); - } - } - } -} - -function getHash() { - // Hashes are of the form - // #name:value|name1:value1|name2:value2 - const currentUrl = new URL(window.location); - const hashRaw = currentUrl.hash ? currentUrl.hash.slice(1) : undefined; - return parseHash(hashRaw); -} - -const kAnd = "&"; -const kEquals = "="; - -function parseHash(hash) { - if (!hash) { - return undefined; - } - const hasValuesStrs = hash.split(kAnd); - const hashValues = hasValuesStrs - .map((hashValueStr) => { - const vals = hashValueStr.split(kEquals); - if (vals.length === 2) { - return { name: vals[0], value: vals[1] }; - } else { - return undefined; - } - }) - .filter((value) => { - return value !== undefined; - }); - - const hashObj = {}; - hashValues.forEach((hashValue) => { - hashObj[hashValue.name] = decodeURIComponent(hashValue.value); - }); - return hashObj; -} - -function makeHash(obj) { - return Object.keys(obj) - .map((key) => { - return `${key}${kEquals}${obj[key]}`; - }) - .join(kAnd); -} - -function setHash(obj) { - const hash = makeHash(obj); - window.history.pushState(null, null, `#${hash}`); -} - -function showPage(listingId, page) { - const list = window["quarto-listings"][listingId]; - if (list) { - list.show((page - 1) * list.page + 1, list.page); - } -} - -function activateCategory(category) { - // Deactivate existing categories - const activeEls = window.document.querySelectorAll( - ".quarto-listing-category .category.active" - ); - for (const activeEl of activeEls) { - activeEl.classList.remove("active"); - } - - // Activate this category - const categoryEl = window.document.querySelector( - `.quarto-listing-category .category[data-category='${category}'` - ); - if (categoryEl) { - categoryEl.classList.add("active"); - } - - // Filter the listings to this category - filterListingCategory(category); -} - -function filterListingCategory(category) { - const listingIds = Object.keys(window["quarto-listings"]); - for (const listingId of listingIds) { - const list = window["quarto-listings"][listingId]; - if (list) { - if (category === "") { - // resets the filter - list.filter(); - } else { - // filter to this category - list.filter(function (item) { - const itemValues = item.values(); - if (itemValues.categories !== null) { - const categories = itemValues.categories.split(","); - return categories.includes(category); - } else { - return false; - } - }); - } - } - } -} diff --git a/site_libs/quarto-nav/quarto-nav.js b/site_libs/quarto-nav/quarto-nav.js deleted file mode 100644 index 38cc4305..00000000 --- a/site_libs/quarto-nav/quarto-nav.js +++ /dev/null @@ -1,325 +0,0 @@ -const headroomChanged = new CustomEvent("quarto-hrChanged", { - detail: {}, - bubbles: true, - cancelable: false, - composed: false, -}); - -const announceDismiss = () => { - const annEl = window.document.getElementById("quarto-announcement"); - if (annEl) { - annEl.remove(); - - const annId = annEl.getAttribute("data-announcement-id"); - window.localStorage.setItem(`quarto-announce-${annId}`, "true"); - } -}; - -const announceRegister = () => { - const annEl = window.document.getElementById("quarto-announcement"); - if (annEl) { - const annId = annEl.getAttribute("data-announcement-id"); - const isDismissed = - window.localStorage.getItem(`quarto-announce-${annId}`) || false; - if (isDismissed) { - announceDismiss(); - return; - } else { - annEl.classList.remove("hidden"); - } - - const actionEl = annEl.querySelector(".quarto-announcement-action"); - if (actionEl) { - actionEl.addEventListener("click", function (e) { - e.preventDefault(); - // Hide the bar immediately - announceDismiss(); - }); - } - } -}; - -window.document.addEventListener("DOMContentLoaded", function () { - let init = false; - - announceRegister(); - - // Manage the back to top button, if one is present. - let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; - const scrollDownBuffer = 5; - const scrollUpBuffer = 35; - const btn = document.getElementById("quarto-back-to-top"); - const hideBackToTop = () => { - btn.style.display = "none"; - }; - const showBackToTop = () => { - btn.style.display = "inline-block"; - }; - if (btn) { - window.document.addEventListener( - "scroll", - function () { - const currentScrollTop = - window.pageYOffset || document.documentElement.scrollTop; - - // Shows and hides the button 'intelligently' as the user scrolls - if (currentScrollTop - scrollDownBuffer > lastScrollTop) { - hideBackToTop(); - lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; - } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { - showBackToTop(); - lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; - } - - // Show the button at the bottom, hides it at the top - if (currentScrollTop <= 0) { - hideBackToTop(); - } else if ( - window.innerHeight + currentScrollTop >= - document.body.offsetHeight - ) { - showBackToTop(); - } - }, - false - ); - } - - function throttle(func, wait) { - var timeout; - return function () { - const context = this; - const args = arguments; - const later = function () { - clearTimeout(timeout); - timeout = null; - func.apply(context, args); - }; - - if (!timeout) { - timeout = setTimeout(later, wait); - } - }; - } - - function headerOffset() { - // Set an offset if there is are fixed top navbar - const headerEl = window.document.querySelector("header.fixed-top"); - if (headerEl) { - return headerEl.clientHeight; - } else { - return 0; - } - } - - function footerOffset() { - const footerEl = window.document.querySelector("footer.footer"); - if (footerEl) { - return footerEl.clientHeight; - } else { - return 0; - } - } - - function dashboardOffset() { - const dashboardNavEl = window.document.getElementById( - "quarto-dashboard-header" - ); - if (dashboardNavEl !== null) { - return dashboardNavEl.clientHeight; - } else { - return 0; - } - } - - function updateDocumentOffsetWithoutAnimation() { - updateDocumentOffset(false); - } - - function updateDocumentOffset(animated) { - // set body offset - const topOffset = headerOffset(); - const bodyOffset = topOffset + footerOffset() + dashboardOffset(); - const bodyEl = window.document.body; - bodyEl.setAttribute("data-bs-offset", topOffset); - bodyEl.style.paddingTop = topOffset + "px"; - - // deal with sidebar offsets - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - if (!animated) { - sidebar.classList.add("notransition"); - // Remove the no transition class after the animation has time to complete - setTimeout(function () { - sidebar.classList.remove("notransition"); - }, 201); - } - - if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { - sidebar.style.top = "0"; - sidebar.style.maxHeight = "100vh"; - } else { - sidebar.style.top = topOffset + "px"; - sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; - } - }); - - // allow space for footer - const mainContainer = window.document.querySelector(".quarto-container"); - if (mainContainer) { - mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; - } - - // link offset - let linkStyle = window.document.querySelector("#quarto-target-style"); - if (!linkStyle) { - linkStyle = window.document.createElement("style"); - linkStyle.setAttribute("id", "quarto-target-style"); - window.document.head.appendChild(linkStyle); - } - while (linkStyle.firstChild) { - linkStyle.removeChild(linkStyle.firstChild); - } - if (topOffset > 0) { - linkStyle.appendChild( - window.document.createTextNode(` - section:target::before { - content: ""; - display: block; - height: ${topOffset}px; - margin: -${topOffset}px 0 0; - }`) - ); - } - if (init) { - window.dispatchEvent(headroomChanged); - } - init = true; - } - - // initialize headroom - var header = window.document.querySelector("#quarto-header"); - if (header && window.Headroom) { - const headroom = new window.Headroom(header, { - tolerance: 5, - onPin: function () { - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - sidebar.classList.remove("sidebar-unpinned"); - }); - updateDocumentOffset(); - }, - onUnpin: function () { - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - sidebar.classList.add("sidebar-unpinned"); - }); - updateDocumentOffset(); - }, - }); - headroom.init(); - - let frozen = false; - window.quartoToggleHeadroom = function () { - if (frozen) { - headroom.unfreeze(); - frozen = false; - } else { - headroom.freeze(); - frozen = true; - } - }; - } - - window.addEventListener( - "hashchange", - function (e) { - if ( - getComputedStyle(document.documentElement).scrollBehavior !== "smooth" - ) { - window.scrollTo(0, window.pageYOffset - headerOffset()); - } - }, - false - ); - - // Observe size changed for the header - const headerEl = window.document.querySelector("header.fixed-top"); - if (headerEl && window.ResizeObserver) { - const observer = new window.ResizeObserver(() => { - setTimeout(updateDocumentOffsetWithoutAnimation, 0); - }); - observer.observe(headerEl, { - attributes: true, - childList: true, - characterData: true, - }); - } else { - window.addEventListener( - "resize", - throttle(updateDocumentOffsetWithoutAnimation, 50) - ); - } - setTimeout(updateDocumentOffsetWithoutAnimation, 250); - - // fixup index.html links if we aren't on the filesystem - if (window.location.protocol !== "file:") { - const links = window.document.querySelectorAll("a"); - for (let i = 0; i < links.length; i++) { - if (links[i].href) { - links[i].dataset.originalHref = links[i].href; - links[i].href = links[i].href.replace(/\/index\.html/, "/"); - } - } - - // Fixup any sharing links that require urls - // Append url to any sharing urls - const sharingLinks = window.document.querySelectorAll( - "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" - ); - for (let i = 0; i < sharingLinks.length; i++) { - const sharingLink = sharingLinks[i]; - const href = sharingLink.getAttribute("href"); - if (href) { - sharingLink.setAttribute( - "href", - href.replace("|url|", window.location.href) - ); - } - } - - // Scroll the active navigation item into view, if necessary - const navSidebar = window.document.querySelector("nav#quarto-sidebar"); - if (navSidebar) { - // Find the active item - const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); - if (activeItem) { - // Wait for the scroll height and height to resolve by observing size changes on the - // nav element that is scrollable - const resizeObserver = new ResizeObserver((_entries) => { - // The bottom of the element - const elBottom = activeItem.offsetTop; - const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; - - // The element height and scroll height are the same, then we are still loading - if (viewBottom !== navSidebar.scrollHeight) { - // Determine if the item isn't visible and scroll to it - if (elBottom >= viewBottom) { - navSidebar.scrollTop = elBottom; - } - - // stop observing now since we've completed the scroll - resizeObserver.unobserve(navSidebar); - } - }); - resizeObserver.observe(navSidebar); - } - } - } -}); diff --git a/site_libs/quarto-search/autocomplete.umd.js b/site_libs/quarto-search/autocomplete.umd.js deleted file mode 100644 index ae0063aa..00000000 --- a/site_libs/quarto-search/autocomplete.umd.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! @algolia/autocomplete-js 1.11.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function F(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function L(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:r,items:n,insights:a,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function l(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W({clickAnalytics:!0},e?{userToken:e}:{}),insights:a}})}u("addAlgoliaAgent","insights-plugin"),l(),u("onUserTokenChange",l),u("getUserToken",null,(function(e,t){l(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,i=e.source;L(t)&&o({state:n,event:r,insights:a,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:i.getItems().filter(L)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;L(t)&&i({state:r,event:o,insights:a,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(L)}))]})}))},onStateChange:function(e){var t=e.state;c({state:t})},__autocomplete_pluginOptions:e}}function J(e,t){var n=t;return{then:function(t,r){return J(e.then(Y(t,n,e),Y(r,n,e)),n)},catch:function(t){return J(e.catch(Y(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),J(e.finally(Y(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function X(e){return J(e,{isCanceled:!1,onCancelList:[]})}function Y(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Z(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:he({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ye(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:O,onResolve:O};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=te(te({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return he(he({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:he({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Se(e){return Se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Se(e)}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var He,Ve,We,Ke=null,Qe=(He=-1,Ve=-1,We=void 0,function(e){var t=++He;return Promise.resolve(e).then((function(e){return We&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}var tt=["props","refresh","store"],nt=["inputElement","formElement","panelElement"],rt=["inputElement"],ot=["inputElement","maxLength"],it=["source"],ut=["item","source"];function at(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ft(e){var t=e.props,n=e.refresh,r=e.store,o=st(e,tt);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return lt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},st(e,nt))},getRootProps:function(e){return lt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label")},e)},getFormProps:function(e){return e.inputElement,lt({action:"",noValidate:!0,role:"search",onSubmit:function(i){var u;i.preventDefault(),t.onSubmit(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()},onReset:function(i){var u;i.preventDefault(),t.onReset(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},st(e,rt))},getLabelProps:function(e){return lt({htmlFor:ie(t.id,"input"),id:ie(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&$e(lt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=st(a,ot),f=oe(r.getState()),p=function(e){return Boolean(e&&e.match(ue))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return lt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?ie(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label"),value:r.getState().completion||r.getState().query,id:ie(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){$e(lt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=Ze(e,Ge);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=oe(o.getState()),t=n.environment.document.getElementById(ie(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=oe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(Xe({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?$e(Xe({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=oe(o.getState()),c=l.item,s=l.itemInputValue,f=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:f,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:f,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),void n.navigator.navigate({itemUrl:f,item:c,state:o.getState()});$e(Xe({event:t,nextState:{isOpen:!1},props:n,query:s,refresh:r,store:o},i)).then((function(){p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i))}))}}}(lt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:O,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return lt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=st(n,it);return lt({role:"listbox","aria-labelledby":ie(t.id,"label"),id:ie(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=st(e,ut);return lt({id:ie(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=oe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(lt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():$e(lt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(lt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function pt(e){return pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pt(e)}function mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var kt=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function xt(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Nt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?Jt.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return sn(e,u,r,o,null)}function sn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++Yt:o};return null==o&&null!=Xt.vnode&&Xt.vnode(i),i}function fn(e){return e.children}function pn(e,t){this.props=e,this.context=t}function mn(e,t){if(null==t)return e.__?mn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&Zt.sort(nn));yn.__r=0}function bn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||on,g=b.length;for(n.__k=[],s=0;s0?sn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=On(n)))return r;return null}function _n(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||un.test(t)?n:n+"px"}function Sn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||_n(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||_n(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?Pn:jn,i):e.removeEventListener(t,i?Pn:jn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function jn(e){return this.l[e.type+!1](Xt.event?Xt.event(e):e)}function Pn(e){return this.l[e.type+!0](Xt.event?Xt.event(e):e)}function wn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,O,_,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=Xt.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new pn(y,g),s.constructor=P,s.render=Cn),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=an({},s.__s)),an(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(xn);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Tn(e){return function(e){if(Array.isArray(e))return qn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return qn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Fn=new RegExp(/\w/i),Ln=/&(amp|quot|lt|gt|#39);/g,Un=RegExp(Ln.source);function Mn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Fn.test((o=i.value)&&Un.test(o)?o.replace(Ln,(function(e){return Rn[e]})):o)||a!==u?i.isHighlighted:a}function Hn(e){return Hn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hn(e)}function Vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ur(e){return function(e){if(Array.isArray(e))return ar(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ar(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ar(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ar(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!O.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||O.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:br,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},O.value.core.initialState)),P={getEnvironmentProps:O.value.renderer.getEnvironmentProps,getFormProps:O.value.renderer.getFormProps,getInputProps:O.value.renderer.getInputProps,getItemProps:O.value.renderer.getItemProps,getLabelProps:O.value.renderer.getLabelProps,getListProps:O.value.renderer.getListProps,getPanelProps:O.value.renderer.getPanelProps,getRootProps:O.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Ct.bind(O.value.renderer.renderer.createElement)})),A=m((function(){return Gt({autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,environment:O.value.core.environment,isDetached:_.value,placeholder:O.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:O.value.renderer.translations})}));function E(){Ht(A.value.panel,{style:_.value?{}:yr({panelPlacement:O.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:O.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,components:O.value.renderer.components,container:O.value.renderer.container,html:I.value,dom:A.value,panelContainer:_.value?A.value.detachedContainer:O.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:O.value.renderer.renderer},r=!b(e)&&!y.current&&O.value.renderer.renderNoResults||O.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Vt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Vt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Ht(o.label,{hidden:"stalled"===u.status}),Ht(o.loadingIndicator,{hidden:"stalled"!==u.status}),Ht(o.clearButton,{hidden:!u.query}),Ht(o.detachedSearchButtonQuery,{textContent:u.query}),Ht(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=O.value.renderer,n=t.components,r=u(t,gr);g.current=qt(r,O.value.core,{components:Bt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){requestAnimationFrame((function(){var t=O.value.core.environment.document.body.contains(A.value.detachedOverlay);e!==t&&(e?(O.value.core.environment.document.body.appendChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(O.value.core.environment.document.body.removeChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Ht(O.value.core.environment,e),function(){Ht(O.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=_.value?O.value.core.environment.document.body:O.value.renderer.panelContainer,t=_.value?A.value.detachedOverlay:A.value.panel;return _.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&e.removeChild(t)}})),a((function(){var e=O.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(_.value&&r.isOpen!==n.isOpen&&k(n.isOpen),_.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&O.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=_.value;_.value=O.value.core.environment.matchMedia(O.value.renderer.detachedMediaQuery).matches,e!==_.value?C({}):requestAnimationFrame(E)}),20);return O.value.core.environment.addEventListener("resize",e),function(){O.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!_.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=O.value.core.environment.matchMedia(getComputedStyle(O.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=hr({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Or,Object.defineProperty(e,"__esModule",{value:!0})})); - diff --git a/site_libs/quarto-search/fuse.min.js b/site_libs/quarto-search/fuse.min.js deleted file mode 100644 index adc28356..00000000 --- a/site_libs/quarto-search/fuse.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) - * - * Copyright (c) 2022 Kiro Risk (http://kiro.me) - * All Rights Reserved. Apache Software License 2.0 - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ -var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/site_libs/quarto-search/quarto-search.js b/site_libs/quarto-search/quarto-search.js deleted file mode 100644 index 5f723d72..00000000 --- a/site_libs/quarto-search/quarto-search.js +++ /dev/null @@ -1,1286 +0,0 @@ -const kQueryArg = "q"; -const kResultsArg = "show-results"; - -// If items don't provide a URL, then both the navigator and the onSelect -// function aren't called (and therefore, the default implementation is used) -// -// We're using this sentinel URL to signal to those handlers that this -// item is a more item (along with the type) and can be handled appropriately -const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; - -window.document.addEventListener("DOMContentLoaded", function (_event) { - // Ensure that search is available on this page. If it isn't, - // should return early and not do anything - var searchEl = window.document.getElementById("quarto-search"); - if (!searchEl) return; - - const { autocomplete } = window["@algolia/autocomplete-js"]; - - let quartoSearchOptions = {}; - let language = {}; - const searchOptionEl = window.document.getElementById( - "quarto-search-options" - ); - if (searchOptionEl) { - const jsonStr = searchOptionEl.textContent; - quartoSearchOptions = JSON.parse(jsonStr); - language = quartoSearchOptions.language; - } - - // note the search mode - if (quartoSearchOptions.type === "overlay") { - searchEl.classList.add("type-overlay"); - } else { - searchEl.classList.add("type-textbox"); - } - - // Used to determine highlighting behavior for this page - // A `q` query param is expected when the user follows a search - // to this page - const currentUrl = new URL(window.location); - const query = currentUrl.searchParams.get(kQueryArg); - const showSearchResults = currentUrl.searchParams.get(kResultsArg); - const mainEl = window.document.querySelector("main"); - - // highlight matches on the page - if (query && mainEl) { - // perform any highlighting - highlight(escapeRegExp(query), mainEl); - - // fix up the URL to remove the q query param - const replacementUrl = new URL(window.location); - replacementUrl.searchParams.delete(kQueryArg); - window.history.replaceState({}, "", replacementUrl); - } - - // function to clear highlighting on the page when the search query changes - // (e.g. if the user edits the query or clears it) - let highlighting = true; - const resetHighlighting = (searchTerm) => { - if (mainEl && highlighting && query && searchTerm !== query) { - clearHighlight(query, mainEl); - highlighting = false; - } - }; - - // Clear search highlighting when the user scrolls sufficiently - const resetFn = () => { - resetHighlighting(""); - window.removeEventListener("quarto-hrChanged", resetFn); - window.removeEventListener("quarto-sectionChanged", resetFn); - }; - - // Register this event after the initial scrolling and settling of events - // on the page - window.addEventListener("quarto-hrChanged", resetFn); - window.addEventListener("quarto-sectionChanged", resetFn); - - // Responsively switch to overlay mode if the search is present on the navbar - // Note that switching the sidebar to overlay mode requires more coordinate (not just - // the media query since we generate different HTML for sidebar overlays than we do - // for sidebar input UI) - const detachedMediaQuery = - quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; - - // If configured, include the analytics client to send insights - const plugins = configurePlugins(quartoSearchOptions); - - let lastState = null; - const { setIsOpen, setQuery, setCollections } = autocomplete({ - container: searchEl, - detachedMediaQuery: detachedMediaQuery, - defaultActiveItemId: 0, - panelContainer: "#quarto-search-results", - panelPlacement: quartoSearchOptions["panel-placement"], - debug: false, - openOnFocus: true, - plugins, - classNames: { - form: "d-flex", - }, - placeholder: language["search-text-placeholder"], - translations: { - clearButtonTitle: language["search-clear-button-title"], - detachedCancelButtonText: language["search-detached-cancel-button-title"], - submitButtonTitle: language["search-submit-button-title"], - }, - initialState: { - query, - }, - getItemUrl({ item }) { - return item.href; - }, - onStateChange({ state }) { - // If this is a file URL, note that - - // Perhaps reset highlighting - resetHighlighting(state.query); - - // If the panel just opened, ensure the panel is positioned properly - if (state.isOpen) { - if (lastState && !lastState.isOpen) { - setTimeout(() => { - positionPanel(quartoSearchOptions["panel-placement"]); - }, 150); - } - } - - // Perhaps show the copy link - showCopyLink(state.query, quartoSearchOptions); - - lastState = state; - }, - reshape({ sources, state }) { - return sources.map((source) => { - try { - const items = source.getItems(); - - // Validate the items - validateItems(items); - - // group the items by document - const groupedItems = new Map(); - items.forEach((item) => { - const hrefParts = item.href.split("#"); - const baseHref = hrefParts[0]; - const isDocumentItem = hrefParts.length === 1; - - const items = groupedItems.get(baseHref); - if (!items) { - groupedItems.set(baseHref, [item]); - } else { - // If the href for this item matches the document - // exactly, place this item first as it is the item that represents - // the document itself - if (isDocumentItem) { - items.unshift(item); - } else { - items.push(item); - } - groupedItems.set(baseHref, items); - } - }); - - const reshapedItems = []; - let count = 1; - for (const [_key, value] of groupedItems) { - const firstItem = value[0]; - reshapedItems.push({ - ...firstItem, - type: kItemTypeDoc, - }); - - const collapseMatches = quartoSearchOptions["collapse-after"]; - const collapseCount = - typeof collapseMatches === "number" ? collapseMatches : 1; - - if (value.length > 1) { - const target = `search-more-${count}`; - const isExpanded = - state.context.expanded && - state.context.expanded.includes(target); - - const remainingCount = value.length - collapseCount; - - for (let i = 1; i < value.length; i++) { - if (collapseMatches && i === collapseCount) { - reshapedItems.push({ - target, - title: isExpanded - ? language["search-hide-matches-text"] - : remainingCount === 1 - ? `${remainingCount} ${language["search-more-match-text"]}` - : `${remainingCount} ${language["search-more-matches-text"]}`, - type: kItemTypeMore, - href: kItemTypeMoreHref, - }); - } - - if (isExpanded || !collapseMatches || i < collapseCount) { - reshapedItems.push({ - ...value[i], - type: kItemTypeItem, - target, - }); - } - } - } - count += 1; - } - - return { - ...source, - getItems() { - return reshapedItems; - }, - }; - } catch (error) { - // Some form of error occurred - return { - ...source, - getItems() { - return [ - { - title: error.name || "An Error Occurred While Searching", - text: - error.message || - "An unknown error occurred while attempting to perform the requested search.", - type: kItemTypeError, - }, - ]; - }, - }; - } - }); - }, - navigator: { - navigate({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - window.location.assign(itemUrl); - } - }, - navigateNewTab({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - const windowReference = window.open(itemUrl, "_blank", "noopener"); - if (windowReference) { - windowReference.focus(); - } - } - }, - navigateNewWindow({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - window.open(itemUrl, "_blank", "noopener"); - } - }, - }, - getSources({ state, setContext, setActiveItemId, refresh }) { - return [ - { - sourceId: "documents", - getItemUrl({ item }) { - if (item.href) { - return offsetURL(item.href); - } else { - return undefined; - } - }, - onSelect({ - item, - state, - setContext, - setIsOpen, - setActiveItemId, - refresh, - }) { - if (item.type === kItemTypeMore) { - toggleExpanded(item, state, setContext, setActiveItemId, refresh); - - // Toggle more - setIsOpen(true); - } - }, - getItems({ query }) { - if (query === null || query === "") { - return []; - } - - const limit = quartoSearchOptions.limit; - if (quartoSearchOptions.algolia) { - return algoliaSearch(query, limit, quartoSearchOptions.algolia); - } else { - // Fuse search options - const fuseSearchOptions = { - isCaseSensitive: false, - shouldSort: true, - minMatchCharLength: 2, - limit: limit, - }; - - return readSearchData().then(function (fuse) { - return fuseSearch(query, fuse, fuseSearchOptions); - }); - } - }, - templates: { - noResults({ createElement }) { - const hasQuery = lastState.query; - - return createElement( - "div", - { - class: `quarto-search-no-results${ - hasQuery ? "" : " no-query" - }`, - }, - language["search-no-results-text"] - ); - }, - header({ items, createElement }) { - // count the documents - const count = items.filter((item) => { - return item.type === kItemTypeDoc; - }).length; - - if (count > 0) { - return createElement( - "div", - { class: "search-result-header" }, - `${count} ${language["search-matching-documents-text"]}` - ); - } else { - return createElement( - "div", - { class: "search-result-header-no-results" }, - `` - ); - } - }, - footer({ _items, createElement }) { - if ( - quartoSearchOptions.algolia && - quartoSearchOptions.algolia["show-logo"] - ) { - const libDir = quartoSearchOptions.algolia["libDir"]; - const logo = createElement("img", { - src: offsetURL( - `${libDir}/quarto-search/search-by-algolia.svg` - ), - class: "algolia-search-logo", - }); - return createElement( - "a", - { href: "http://www.algolia.com/" }, - logo - ); - } - }, - - item({ item, createElement }) { - return renderItem( - item, - createElement, - state, - setActiveItemId, - setContext, - refresh, - quartoSearchOptions - ); - }, - }, - }, - ]; - }, - }); - - window.quartoOpenSearch = () => { - setIsOpen(false); - setIsOpen(true); - focusSearchInput(); - }; - - document.addEventListener("keyup", (event) => { - const { key } = event; - const kbds = quartoSearchOptions["keyboard-shortcut"]; - const focusedEl = document.activeElement; - - const isFormElFocused = [ - "input", - "select", - "textarea", - "button", - "option", - ].find((tag) => { - return focusedEl.tagName.toLowerCase() === tag; - }); - - if ( - kbds && - kbds.includes(key) && - !isFormElFocused && - !document.activeElement.isContentEditable - ) { - event.preventDefault(); - window.quartoOpenSearch(); - } - }); - - // Remove the labeleledby attribute since it is pointing - // to a non-existent label - if (quartoSearchOptions.type === "overlay") { - const inputEl = window.document.querySelector( - "#quarto-search .aa-Autocomplete" - ); - if (inputEl) { - inputEl.removeAttribute("aria-labelledby"); - } - } - - function throttle(func, wait) { - let waiting = false; - return function () { - if (!waiting) { - func.apply(this, arguments); - waiting = true; - setTimeout(function () { - waiting = false; - }, wait); - } - }; - } - - // If the main document scrolls dismiss the search results - // (otherwise, since they're floating in the document they can scroll with the document) - window.document.body.onscroll = throttle(() => { - // Only do this if we're not detached - // Bug #7117 - // This will happen when the keyboard is shown on ios (resulting in a scroll) - // which then closed the search UI - if (!window.matchMedia(detachedMediaQuery).matches) { - setIsOpen(false); - } - }, 50); - - if (showSearchResults) { - setIsOpen(true); - focusSearchInput(); - } -}); - -function configurePlugins(quartoSearchOptions) { - const autocompletePlugins = []; - const algoliaOptions = quartoSearchOptions.algolia; - if ( - algoliaOptions && - algoliaOptions["analytics-events"] && - algoliaOptions["search-only-api-key"] && - algoliaOptions["application-id"] - ) { - const apiKey = algoliaOptions["search-only-api-key"]; - const appId = algoliaOptions["application-id"]; - - // Aloglia insights may not be loaded because they require cookie consent - // Use deferred loading so events will start being recorded when/if consent - // is granted. - const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { - if ( - window.aa && - window["@algolia/autocomplete-plugin-algolia-insights"] - ) { - window.aa("init", { - appId, - apiKey, - useCookie: true, - }); - - const { createAlgoliaInsightsPlugin } = - window["@algolia/autocomplete-plugin-algolia-insights"]; - // Register the insights client - const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ - insightsClient: window.aa, - onItemsChange({ insights, insightsEvents }) { - const events = insightsEvents.flatMap((event) => { - // This API limits the number of items per event to 20 - const chunkSize = 20; - const itemChunks = []; - const eventItems = event.items; - for (let i = 0; i < eventItems.length; i += chunkSize) { - itemChunks.push(eventItems.slice(i, i + chunkSize)); - } - // Split the items into multiple events that can be sent - const events = itemChunks.map((items) => { - return { - ...event, - items, - }; - }); - return events; - }); - - for (const event of events) { - insights.viewedObjectIDs(event); - } - }, - }); - return algoliaInsightsPlugin; - } - }); - - // Add the plugin - autocompletePlugins.push(algoliaInsightsDeferredPlugin); - return autocompletePlugins; - } -} - -// For plugins that may not load immediately, create a wrapper -// plugin and forward events and plugin data once the plugin -// is initialized. This is useful for cases like cookie consent -// which may prevent the analytics insights event plugin from initializing -// immediately. -function deferredLoadPlugin(createPlugin) { - let plugin = undefined; - let subscribeObj = undefined; - const wrappedPlugin = () => { - if (!plugin && subscribeObj) { - plugin = createPlugin(); - if (plugin && plugin.subscribe) { - plugin.subscribe(subscribeObj); - } - } - return plugin; - }; - - return { - subscribe: (obj) => { - subscribeObj = obj; - }, - onStateChange: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onStateChange) { - plugin.onStateChange(obj); - } - }, - onSubmit: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onSubmit) { - plugin.onSubmit(obj); - } - }, - onReset: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onReset) { - plugin.onReset(obj); - } - }, - getSources: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.getSources) { - return plugin.getSources(obj); - } else { - return Promise.resolve([]); - } - }, - data: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.data) { - plugin.data(obj); - } - }, - }; -} - -function validateItems(items) { - // Validate the first item - if (items.length > 0) { - const item = items[0]; - const missingFields = []; - if (item.href == undefined) { - missingFields.push("href"); - } - if (!item.title == undefined) { - missingFields.push("title"); - } - if (!item.text == undefined) { - missingFields.push("text"); - } - - if (missingFields.length === 1) { - throw { - name: `Error: Search index is missing the ${missingFields[0]} field.`, - message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, - }; - } else if (missingFields.length > 1) { - const missingFieldList = missingFields - .map((field) => { - return `${field}`; - }) - .join(", "); - - throw { - name: `Error: Search index is missing the following fields: ${missingFieldList}.`, - message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, - }; - } - } -} - -let lastQuery = null; -function showCopyLink(query, options) { - const language = options.language; - lastQuery = query; - // Insert share icon - const inputSuffixEl = window.document.body.querySelector( - ".aa-Form .aa-InputWrapperSuffix" - ); - - if (inputSuffixEl) { - let copyButtonEl = window.document.body.querySelector( - ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" - ); - - if (copyButtonEl === null) { - copyButtonEl = window.document.createElement("button"); - copyButtonEl.setAttribute("class", "aa-CopyButton"); - copyButtonEl.setAttribute("type", "button"); - copyButtonEl.setAttribute("title", language["search-copy-link-title"]); - copyButtonEl.onmousedown = (e) => { - e.preventDefault(); - e.stopPropagation(); - }; - - const linkIcon = "bi-clipboard"; - const checkIcon = "bi-check2"; - - const shareIconEl = window.document.createElement("i"); - shareIconEl.setAttribute("class", `bi ${linkIcon}`); - copyButtonEl.appendChild(shareIconEl); - inputSuffixEl.prepend(copyButtonEl); - - const clipboard = new window.ClipboardJS(".aa-CopyButton", { - text: function (_trigger) { - const copyUrl = new URL(window.location); - copyUrl.searchParams.set(kQueryArg, lastQuery); - copyUrl.searchParams.set(kResultsArg, "1"); - return copyUrl.toString(); - }, - }); - clipboard.on("success", function (e) { - // Focus the input - - // button target - const button = e.trigger; - const icon = button.querySelector("i.bi"); - - // flash "checked" - icon.classList.add(checkIcon); - icon.classList.remove(linkIcon); - setTimeout(function () { - icon.classList.remove(checkIcon); - icon.classList.add(linkIcon); - }, 1000); - }); - } - - // If there is a query, show the link icon - if (copyButtonEl) { - if (lastQuery && options["copy-button"]) { - copyButtonEl.style.display = "flex"; - } else { - copyButtonEl.style.display = "none"; - } - } - } -} - -/* Search Index Handling */ -// create the index -var fuseIndex = undefined; -var shownWarning = false; - -// fuse index options -const kFuseIndexOptions = { - keys: [ - { name: "title", weight: 20 }, - { name: "section", weight: 20 }, - { name: "text", weight: 10 }, - ], - ignoreLocation: true, - threshold: 0.1, -}; - -async function readSearchData() { - // Initialize the search index on demand - if (fuseIndex === undefined) { - if (window.location.protocol === "file:" && !shownWarning) { - window.alert( - "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." - ); - shownWarning = true; - return; - } - const fuse = new window.Fuse([], kFuseIndexOptions); - - // fetch the main search.json - const response = await fetch(offsetURL("search.json")); - if (response.status == 200) { - return response.json().then(function (searchDocs) { - searchDocs.forEach(function (searchDoc) { - fuse.add(searchDoc); - }); - fuseIndex = fuse; - return fuseIndex; - }); - } else { - return Promise.reject( - new Error( - "Unexpected status from search index request: " + response.status - ) - ); - } - } - - return fuseIndex; -} - -function inputElement() { - return window.document.body.querySelector(".aa-Form .aa-Input"); -} - -function focusSearchInput() { - setTimeout(() => { - const inputEl = inputElement(); - if (inputEl) { - inputEl.focus(); - } - }, 50); -} - -/* Panels */ -const kItemTypeDoc = "document"; -const kItemTypeMore = "document-more"; -const kItemTypeItem = "document-item"; -const kItemTypeError = "error"; - -function renderItem( - item, - createElement, - state, - setActiveItemId, - setContext, - refresh, - quartoSearchOptions -) { - switch (item.type) { - case kItemTypeDoc: - return createDocumentCard( - createElement, - "file-richtext", - item.title, - item.section, - item.text, - item.href, - item.crumbs, - quartoSearchOptions - ); - case kItemTypeMore: - return createMoreCard( - createElement, - item, - state, - setActiveItemId, - setContext, - refresh - ); - case kItemTypeItem: - return createSectionCard( - createElement, - item.section, - item.text, - item.href - ); - case kItemTypeError: - return createErrorCard(createElement, item.title, item.text); - default: - return undefined; - } -} - -function createDocumentCard( - createElement, - icon, - title, - section, - text, - href, - crumbs, - quartoSearchOptions -) { - const iconEl = createElement("i", { - class: `bi bi-${icon} search-result-icon`, - }); - const titleEl = createElement("p", { class: "search-result-title" }, title); - const titleContents = [iconEl, titleEl]; - const showParent = quartoSearchOptions["show-item-context"]; - if (crumbs && showParent) { - let crumbsOut = undefined; - const crumbClz = ["search-result-crumbs"]; - if (showParent === "root") { - crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; - } else if (showParent === "parent") { - crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; - } else { - crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; - crumbClz.push("search-result-crumbs-wrap"); - } - - const crumbEl = createElement( - "p", - { class: crumbClz.join(" ") }, - crumbsOut - ); - titleContents.push(crumbEl); - } - - const titleContainerEl = createElement( - "div", - { class: "search-result-title-container" }, - titleContents - ); - - const textEls = []; - if (section) { - const sectionEl = createElement( - "p", - { class: "search-result-section" }, - section - ); - textEls.push(sectionEl); - } - const descEl = createElement("p", { - class: "search-result-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - textEls.push(descEl); - - const textContainerEl = createElement( - "div", - { class: "search-result-text-container" }, - textEls - ); - - const containerEl = createElement( - "div", - { - class: "search-result-container", - }, - [titleContainerEl, textContainerEl] - ); - - const linkEl = createElement( - "a", - { - href: offsetURL(href), - class: "search-result-link", - }, - containerEl - ); - - const classes = ["search-result-doc", "search-item"]; - if (!section) { - classes.push("document-selectable"); - } - - return createElement( - "div", - { - class: classes.join(" "), - }, - linkEl - ); -} - -function createMoreCard( - createElement, - item, - state, - setActiveItemId, - setContext, - refresh -) { - const moreCardEl = createElement( - "div", - { - class: "search-result-more search-item", - onClick: (e) => { - // Handle expanding the sections by adding the expanded - // section to the list of expanded sections - toggleExpanded(item, state, setContext, setActiveItemId, refresh); - e.stopPropagation(); - }, - }, - item.title - ); - - return moreCardEl; -} - -function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { - const expanded = state.context.expanded || []; - if (expanded.includes(item.target)) { - setContext({ - expanded: expanded.filter((target) => target !== item.target), - }); - } else { - setContext({ expanded: [...expanded, item.target] }); - } - - refresh(); - setActiveItemId(item.__autocomplete_id); -} - -function createSectionCard(createElement, section, text, href) { - const sectionEl = createSection(createElement, section, text, href); - return createElement( - "div", - { - class: "search-result-doc-section search-item", - }, - sectionEl - ); -} - -function createSection(createElement, title, text, href) { - const descEl = createElement("p", { - class: "search-result-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - - const titleEl = createElement("p", { class: "search-result-section" }, title); - const linkEl = createElement( - "a", - { - href: offsetURL(href), - class: "search-result-link", - }, - [titleEl, descEl] - ); - return linkEl; -} - -function createErrorCard(createElement, title, text) { - const descEl = createElement("p", { - class: "search-error-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - - const titleEl = createElement("p", { - class: "search-error-title", - dangerouslySetInnerHTML: { - __html: ` ${title}`, - }, - }); - const errorEl = createElement("div", { class: "search-error" }, [ - titleEl, - descEl, - ]); - return errorEl; -} - -function positionPanel(pos) { - const panelEl = window.document.querySelector( - "#quarto-search-results .aa-Panel" - ); - const inputEl = window.document.querySelector( - "#quarto-search .aa-Autocomplete" - ); - - if (panelEl && inputEl) { - panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; - if (pos === "start") { - panelEl.style.left = `${Math.round(inputEl.left)}px`; - } else { - panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; - } - } -} - -/* Highlighting */ -// highlighting functions -function highlightMatch(query, text) { - if (text) { - const start = text.toLowerCase().indexOf(query.toLowerCase()); - if (start !== -1) { - const startMark = ""; - const endMark = ""; - - const end = start + query.length; - text = - text.slice(0, start) + - startMark + - text.slice(start, end) + - endMark + - text.slice(end); - const startInfo = clipStart(text, start); - const endInfo = clipEnd( - text, - startInfo.position + startMark.length + endMark.length - ); - text = - startInfo.prefix + - text.slice(startInfo.position, endInfo.position) + - endInfo.suffix; - - return text; - } else { - return text; - } - } else { - return text; - } -} - -function clipStart(text, pos) { - const clipStart = pos - 50; - if (clipStart < 0) { - // This will just return the start of the string - return { - position: 0, - prefix: "", - }; - } else { - // We're clipping before the start of the string, walk backwards to the first space. - const spacePos = findSpace(text, pos, -1); - return { - position: spacePos.position, - prefix: "", - }; - } -} - -function clipEnd(text, pos) { - const clipEnd = pos + 200; - if (clipEnd > text.length) { - return { - position: text.length, - suffix: "", - }; - } else { - const spacePos = findSpace(text, clipEnd, 1); - return { - position: spacePos.position, - suffix: spacePos.clipped ? "…" : "", - }; - } -} - -function findSpace(text, start, step) { - let stepPos = start; - while (stepPos > -1 && stepPos < text.length) { - const char = text[stepPos]; - if (char === " " || char === "," || char === ":") { - return { - position: step === 1 ? stepPos : stepPos - step, - clipped: stepPos > 1 && stepPos < text.length, - }; - } - stepPos = stepPos + step; - } - - return { - position: stepPos - step, - clipped: false, - }; -} - -// removes highlighting as implemented by the mark tag -function clearHighlight(searchterm, el) { - const childNodes = el.childNodes; - for (let i = childNodes.length - 1; i >= 0; i--) { - const node = childNodes[i]; - if (node.nodeType === Node.ELEMENT_NODE) { - if ( - node.tagName === "MARK" && - node.innerText.toLowerCase() === searchterm.toLowerCase() - ) { - el.replaceChild(document.createTextNode(node.innerText), node); - } else { - clearHighlight(searchterm, node); - } - } - } -} - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} - -// highlight matches -function highlight(term, el) { - const termRegex = new RegExp(term, "ig"); - const childNodes = el.childNodes; - - // walk back to front avoid mutating elements in front of us - for (let i = childNodes.length - 1; i >= 0; i--) { - const node = childNodes[i]; - - if (node.nodeType === Node.TEXT_NODE) { - // Search text nodes for text to highlight - const text = node.nodeValue; - - let startIndex = 0; - let matchIndex = text.search(termRegex); - if (matchIndex > -1) { - const markFragment = document.createDocumentFragment(); - while (matchIndex > -1) { - const prefix = text.slice(startIndex, matchIndex); - markFragment.appendChild(document.createTextNode(prefix)); - - const mark = document.createElement("mark"); - mark.appendChild( - document.createTextNode( - text.slice(matchIndex, matchIndex + term.length) - ) - ); - markFragment.appendChild(mark); - - startIndex = matchIndex + term.length; - matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); - if (matchIndex > -1) { - matchIndex = startIndex + matchIndex; - } - } - if (startIndex < text.length) { - markFragment.appendChild( - document.createTextNode(text.slice(startIndex, text.length)) - ); - } - - el.replaceChild(markFragment, node); - } - } else if (node.nodeType === Node.ELEMENT_NODE) { - // recurse through elements - highlight(term, node); - } - } -} - -/* Link Handling */ -// get the offset from this page for a given site root relative url -function offsetURL(url) { - var offset = getMeta("quarto:offset"); - return offset ? offset + url : url; -} - -// read a meta tag value -function getMeta(metaName) { - var metas = window.document.getElementsByTagName("meta"); - for (let i = 0; i < metas.length; i++) { - if (metas[i].getAttribute("name") === metaName) { - return metas[i].getAttribute("content"); - } - } - return ""; -} - -function algoliaSearch(query, limit, algoliaOptions) { - const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; - - const applicationId = algoliaOptions["application-id"]; - const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; - const indexName = algoliaOptions["index-name"]; - const indexFields = algoliaOptions["index-fields"]; - const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); - const searchParams = algoliaOptions["params"]; - const searchAnalytics = !!algoliaOptions["analytics-events"]; - - return getAlgoliaResults({ - searchClient, - queries: [ - { - indexName: indexName, - query, - params: { - hitsPerPage: limit, - clickAnalytics: searchAnalytics, - ...searchParams, - }, - }, - ], - transformResponse: (response) => { - if (!indexFields) { - return response.hits.map((hit) => { - return hit.map((item) => { - return { - ...item, - text: highlightMatch(query, item.text), - }; - }); - }); - } else { - const remappedHits = response.hits.map((hit) => { - return hit.map((item) => { - const newItem = { ...item }; - ["href", "section", "title", "text", "crumbs"].forEach( - (keyName) => { - const mappedName = indexFields[keyName]; - if ( - mappedName && - item[mappedName] !== undefined && - mappedName !== keyName - ) { - newItem[keyName] = item[mappedName]; - delete newItem[mappedName]; - } - } - ); - newItem.text = highlightMatch(query, newItem.text); - return newItem; - }); - }); - return remappedHits; - } - }, - }); -} - -let subSearchTerm = undefined; -let subSearchFuse = undefined; -const kFuseMaxWait = 125; - -async function fuseSearch(query, fuse, fuseOptions) { - let index = fuse; - // Fuse.js using the Bitap algorithm for text matching which runs in - // O(nm) time (no matter the structure of the text). In our case this - // means that long search terms mixed with large index gets very slow - // - // This injects a subIndex that will be used once the terms get long enough - // Usually making this subindex is cheap since there will typically be - // a subset of results matching the existing query - if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) { - // Use the existing subSearchFuse - index = subSearchFuse; - } else if (subSearchFuse !== undefined) { - // The term changed, discard the existing fuse - subSearchFuse = undefined; - subSearchTerm = undefined; - } - - // Search using the active fuse - const then = performance.now(); - const resultsRaw = await index.search(query, fuseOptions); - const now = performance.now(); - - const results = resultsRaw.map((result) => { - const addParam = (url, name, value) => { - const anchorParts = url.split("#"); - const baseUrl = anchorParts[0]; - const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; - anchorParts[0] = baseUrl + sep + name + "=" + value; - return anchorParts.join("#"); - }; - - return { - title: result.item.title, - section: result.item.section, - href: addParam(result.item.href, kQueryArg, query), - text: highlightMatch(query, result.item.text), - crumbs: result.item.crumbs, - }; - }); - - // If we don't have a subfuse and the query is long enough, go ahead - // and create a subfuse to use for subsequent queries - if (now - then > kFuseMaxWait && subSearchFuse === undefined) { - subSearchTerm = query; - subSearchFuse = new window.Fuse([], kFuseIndexOptions); - resultsRaw.forEach((rr) => { - subSearchFuse.add(rr.item); - }); - } - return results; -} diff --git a/sitemap.xml b/sitemap.xml deleted file mode 100644 index e5333a31..00000000 --- a/sitemap.xml +++ /dev/null @@ -1,203 +0,0 @@ - - - - https://helm.rstudio.com/examples/workbench/storage/nfs-pv.html - 2024-04-02T13:31:42.580Z - - - https://helm.rstudio.com/examples/workbench/ingress/traefik.html - 2024-04-02T13:31:42.579Z - - - https://helm.rstudio.com/examples/workbench/ingress/gce.html - 2024-04-02T13:31:42.579Z - - - https://helm.rstudio.com/examples/workbench/ingress/aws-alb.html - 2024-04-02T13:31:42.578Z - - - https://helm.rstudio.com/examples/workbench/container-images/custom-images.html - 2024-05-14T15:18:44.648Z - - - https://helm.rstudio.com/examples/workbench/auth-user-provisioning/oidc.html - 2024-04-02T13:31:42.577Z - - - https://helm.rstudio.com/examples/package-manager/storage/s3.html - 2024-04-02T13:31:42.575Z - - - https://helm.rstudio.com/examples/package-manager/storage/additional-volumes.html - 2024-04-02T13:31:42.575Z - - - https://helm.rstudio.com/examples/package-manager/ingress/nginx.html - 2024-04-02T13:31:42.573Z - - - https://helm.rstudio.com/examples/package-manager/ingress/azure-gateway.html - 2024-04-02T13:31:42.573Z - - - https://helm.rstudio.com/examples/package-manager/container-images/private-images.html - 2024-05-14T15:18:44.749Z - - - https://helm.rstudio.com/examples/connect/storage/nfs-pv.html - 2024-04-02T13:31:42.571Z - - - https://helm.rstudio.com/examples/connect/ingress/traefik.html - 2024-04-02T13:31:42.570Z - - - https://helm.rstudio.com/examples/connect/ingress/gce.html - 2024-04-02T13:31:42.569Z - - - https://helm.rstudio.com/examples/connect/ingress/aws-alb.html - 2024-04-02T13:31:42.569Z - - - https://helm.rstudio.com/examples/connect/container-images/custom-images.html - 2024-05-14T15:18:44.683Z - - - https://helm.rstudio.com/examples/connect/auth/oidc.html - 2024-04-02T13:31:42.566Z - - - https://helm.rstudio.com/index.html - 2024-05-14T15:18:44.638Z - - - https://helm.rstudio.com/examples/package-manager/index.html - 2024-04-02T13:31:42.573Z - - - https://helm.rstudio.com/examples/connect/beta-migration/index.html - 2024-05-14T15:18:44.683Z - - - https://helm.rstudio.com/examples/rbac/README.html - 2023-12-18T19:06:32.969Z - - - https://helm.rstudio.com/charts/posit-chronicle/NEWS.html - 2024-05-14T17:43:38.736Z - - - https://helm.rstudio.com/charts/rstudio-pm/NEWS.html - 2024-05-14T18:32:44.820Z - - - https://helm.rstudio.com/charts/rstudio-connect/NEWS.html - 2024-05-14T18:31:15.868Z - - - https://helm.rstudio.com/charts/rstudio-workbench/NEWS.html - 2024-05-14T18:33:08.038Z - - - https://helm.rstudio.com/charts/rstudio-workbench/README.html - 2024-05-14T22:52:22.951Z - - - https://helm.rstudio.com/charts/rstudio-connect/README.html - 2024-05-14T22:52:22.951Z - - - https://helm.rstudio.com/charts/rstudio-pm/README.html - 2024-05-14T22:52:22.950Z - - - https://helm.rstudio.com/charts/posit-chronicle/README.html - 2024-05-14T22:52:22.949Z - - - https://helm.rstudio.com/examples/auto-scaling/README.html - 2023-12-18T19:06:32.960Z - - - https://helm.rstudio.com/docs/customize.html - 2024-04-02T13:31:42.565Z - - - https://helm.rstudio.com/examples/connect/index.html - 2024-04-02T13:31:42.568Z - - - https://helm.rstudio.com/examples/workbench/index.html - 2024-05-14T15:04:34.219Z - - - https://helm.rstudio.com/examples/connect/application-configuration/index.html - 2024-05-14T15:18:44.683Z - - - https://helm.rstudio.com/examples/connect/auth/saml.html - 2024-04-02T13:31:42.568Z - - - https://helm.rstudio.com/examples/connect/container-images/private-images.html - 2024-05-14T15:18:44.683Z - - - https://helm.rstudio.com/examples/connect/ingress/azure-gateway.html - 2024-04-02T13:31:42.569Z - - - https://helm.rstudio.com/examples/connect/ingress/nginx.html - 2024-04-02T13:31:42.569Z - - - https://helm.rstudio.com/examples/connect/storage/additional-volumes.html - 2024-04-02T13:31:42.570Z - - - https://helm.rstudio.com/examples/package-manager/container-images/custom-images.html - 2024-05-14T15:18:44.749Z - - - https://helm.rstudio.com/examples/package-manager/ingress/aws-alb.html - 2024-04-02T13:31:42.573Z - - - https://helm.rstudio.com/examples/package-manager/ingress/gce.html - 2024-04-02T13:31:42.573Z - - - https://helm.rstudio.com/examples/package-manager/ingress/traefik.html - 2024-04-02T13:31:42.575Z - - - https://helm.rstudio.com/examples/package-manager/storage/nfs-pv.html - 2024-04-02T13:31:42.575Z - - - https://helm.rstudio.com/examples/workbench/application-configuration/index.html - 2024-05-14T15:18:44.648Z - - - https://helm.rstudio.com/examples/workbench/auth-user-provisioning/saml.html - 2024-04-02T13:31:42.578Z - - - https://helm.rstudio.com/examples/workbench/container-images/private-images.html - 2024-05-14T15:18:44.649Z - - - https://helm.rstudio.com/examples/workbench/ingress/azure-gateway.html - 2024-04-02T13:31:42.579Z - - - https://helm.rstudio.com/examples/workbench/ingress/nginx.html - 2024-04-02T13:31:42.579Z - - - https://helm.rstudio.com/examples/workbench/storage/additional-volumes.html - 2024-04-02T13:31:42.580Z - -