diff --git a/source/_ext/datechanged_ext.py b/source/_ext/datechanged_ext.py
new file mode 100644
index 0000000..f7ac257
--- /dev/null
+++ b/source/_ext/datechanged_ext.py
@@ -0,0 +1,19 @@
+"""
+Slight modification of the .. versionchanged:: directive that prints "changed
+on" rather than "changed in version".
+"""
+
+from sphinx.domains import changeset
+from sphinx.locale import _
+
+changeset.versionlabels['datechanged'] = _("Changed on %s")
+changeset.versionlabel_classes['datechanged'] = 'changed'
+
+def setup(app):
+    app.add_directive('datechanged', changeset.VersionChange)
+    return {
+        'version': 'builtin',
+        'env_version': 1,
+        'parallel_read_safe': True,
+        'parallel_write_safe': True,
+    }
diff --git a/source/conf.py b/source/conf.py
index aa15c86..bb72a08 100644
--- a/source/conf.py
+++ b/source/conf.py
@@ -26,6 +26,7 @@ def setup(app):
 extensions = [
     "bioconda_sphinx_ext",
     "details_ext",
+    "datechanged_ext",
     "sphinx.ext.intersphinx",
     "sphinx.ext.todo",
     "sphinx.ext.mathjax",
diff --git a/source/contributor/build-system.rst b/source/contributor/build-system.rst
index 9caa4a0..914084c 100644
--- a/source/contributor/build-system.rst
+++ b/source/contributor/build-system.rst
@@ -1,32 +1,40 @@
 Build system
 ============
 
+.. datechanged:: 2024-03-04
+   Generalized descriptions to reflect multiple CI systems in use
+
 The build system for Bioconda takes recipes and converts them into conda
 packages that are uploaded to anaconda.org as well as Docker containers that
-are uploaded to quay.io as part of the Biocontainers project. All of this happens in a transparent way, with all
-build logs available for inspection. The code for the build system can be found
-in `bioconda-utils <https://github.com/bioconda/bioconda-utils>`_, but parts
-are also with the ``bioconda-recipes`` repo. This document serves as
-a high-level overview; the code remains the authoritative source on exactly
-what happens during a build.
+are uploaded to quay.io as part of the Biocontainers project. All of this
+happens in a transparent way, with all build logs available for inspection. The
+code for the build system can be found in `bioconda-utils
+<https://github.com/bioconda/bioconda-utils>`_, but parts are also with the
+``bioconda-recipes`` repo. This document serves as a high-level overview; the
+code remains the authoritative source on exactly what happens during a build.
 
 Why so complicated? We have to work within the constraints of conda-build,
-Docker, and Azure, while simultaneously supporting the same build system on
-a local machine so contributors can test. We also have isolated bioconda-utils
-from bioconda-recipes to better facilitate testing of the infrastructure, and
-to (one day!) make it general enough that others can use the framework for
-their own specific channels. So there are a lot of moving parts that have to be
-coordinated, resulting in a complex system. That said, we do have some room to
-simplify, and do so where we can.
+Docker, CircleCI, GitHub Actions, and Azure DevOps . . . while simultaneously
+supporting the same build system on a local machine so contributors can test.
+We also have isolated bioconda-utils from bioconda-recipes to better facilitate
+testing of the infrastructure, and to (one day!) make it general enough that
+others can use the framework for their own specific channels. So there are
+a lot of moving parts that have to be coordinated, resulting in a complex
+system. That said, we do have some room to simplify, and do so where we can.
+
+This page gives a high-level overview of the most relevant parts to building
+recipes. See :ref:`ci-inventory` for *all* of the moving parts throughout the
+bioconda ecosystem.
 
 Stages of a bioconda build
 --------------------------
+
 A GitHub pull request, or any pushed changes to a GitHub pull request, triggers
-a new build on Azure DevOps. One build can contain mulitple recipes, limited only
-by the time limit imposed by Azure.
-Each build on Azure starts with a fresh VM, so we
-need to create the entire bioconda-build system environment from scratch for
-each build.
+a new build on CI/CD platforms. One build can contain mulitple recipes, limited
+only by the time limit imposed by each CI platform. Typically, each build
+starts with a fresh VM, so we need to create the entire bioconda-build system
+environment from scratch for each build. When possible, we take advantage of
+caching offered by the CI platform.
 
 When testing locally, we use the
 ``quay.io/bioconda/bioconda-utils-build-env-cos7`` Docker container to avoid changing the
@@ -34,120 +42,49 @@ local system. This container is defined by `this Dockerfile
 <https://github.com/bioconda/bioconda-utils/blob/master/Dockerfile>`_.
 
 
-Otherwise, when running on Azure, a new Linux or MacOS VM is created for
-each build.
-
-The steps are orchestrated by the `Azure config file <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline.yml>`_.
-
 
-Configure the environment
-~~~~~~~~~~~~~~~~~~~~~~~~~
+Build steps
+~~~~~~~~~~~
 
-N.B., due to transitioning to Azure, the remainder of this section is no longer relevant and requires rewritting.
+Once the environment is configured in the first step, the rest of the steps are
+orchestrated by bioconda-utils.
 
-- Configure the CI environment:
-    - ``bioconda-recipes: .circleci/config.yml`` is the primary configuration
-      file for the steps that are run. See https://circleci.com/docs/2.0/ for
-      the configuration documentation.
-    - ``bioconda-common: common.sh`` defines the versions of Miniconda and
-      bioconda-utils to use.
-    - ``bioconda-recipes: .circleci/setup.sh`` installs Miniconda and
-      bioconda-utils, sets the correct channel order
 
-- Run linting on changed recipes
-    - This is triggered by the ``bioconda-recipes: .circleci/config.yml`` "lint"
-      job, which runs ``bioconda-utils: bioconda_utils/cli.py`` and
-      ``bioconda_utils/linting.py``
+- **Configure the environment.** The `bioconda-common
+  <https://github.com/bioconda/bioconda-common>`_ repo has scripts for
+  configuring a working conda environment with `bioconda-utils
+  <https://github.com/bioconda/bioconda-utils>`_ installed. This is used across
+  the various CI systems to minimize maintenance burden.
 
-- Build recipes
-    - Triggered by the ``bioconda-recipes: .circleci/config.yaml`` "test-linux"
-      job, which runs ``bioconda-utils build``. This performs the next steps.
+- **Lint.** This step checks for common errors, formatting, and consistency.
 
-- Filter recipes to only focus on recipes that satisfy the following criteria:
-    - changed recently (we use a ``git diff`` command to identify these
-      recipes; see ``bioconda-utils: bioconda_utils/build.py``
-    - not on any blacklists listed in ``config.yaml``
+- **Build recipes.** Recipes to be built satisfy the following criteria:
+    - changed in this pull request
+    - not on the `build-fail-blacklist`
+    - does not have a build-failure yaml file in the recipe with a hash
+      matching this version
     - package with that version number and build number does not exist in
-      bioconda channel (we check the channel for each of the changed recipes)
-
-- Download the configured Docker container (currently based on CentOS 7)
-    - default configured in ``bioconda-utils: docker_utils.py``
-
-- Build a new, temporary Docker container
-    - Dockerfile configured in ``bioconda-utils: docker_utils.py``; we hope to
-      move to simply pulling from DockerHub now that our build dependencies are
-      not changing as often)
-
-- Topologically sort changed recipes, and build them one-by-one in the Docker
-  container. This runs ``conda-build`` on the recipe while also specifying the
-  correct environment variables.
-
-    - The conda-build directory is exported to the docker container to a temp
-      file and added as a channel. This way, packages built by one container
-      will be visible to containers building subsequent packages in the same
-      Travis-CI build.
-    - ``bioconda-utils: docker_utils.py`` specifies the build script that is
-      run in the container.
-    - At the end of the build, the build script copies the package to the
-      exported conda-bld directory
-    - A whitelist of env vars is exported. The whitelist is configured in
-      ``bioconda-utils: utils.py``.
-
-- Upon successfully building and testing via ``conda-build``, the built package
-  is added to a minimal BusyBox container using ``mulled-build`` (maintained in
-  `galaxy-lib <https://github.com/galaxyproject/galaxy-lib>`_). This acts as
-  a more stringent test than ``conda-build`` alone. The BusyBox container
+      bioconda channel
+
+- **Isolated test.** Upon successfully building and testing via
+  ``conda-build``, the built package is added to a minimal BusyBox container
+  using ``mulled-build`` (maintained in `galaxy-tool-util
+  <https://docs.galaxyproject.org/en/latest/admin/special_topics/mulled_containers.html#automatic-build-of-linux-containers>`_). This acts as a more
+  stringent test than ``conda-build`` alone, because the BusyBox container
   purposefully is missing many system libraries (like libgcc) that may be
   present in the CentOS 7 container. Note that it is common for a package to
   build in the CentOS 7 container but fail in the BusyBox container. When this
   happens, it is often because a dependency needs to be added to the recipe.
 
-- Upon successfully testing the package in the BusyBox container, we have a branch point:
-
-    - if we are on a pull request:
-        - report the successful test back to the GitHub PR, at which time it
-          can be merged into the master branch
-    - if we are on the master branch:
-        - upload the built conda package to anaconda.org, with an optional label
-        - upload the BusyBox container to quay.io
-
-As soon as the package is uploaded to anaconda.org, it is available for
-installing via ``conda``. As soon as the BusyBox container is uploaded to
-quay.io, it is available for use via ``docker pull``.
-
-The ``bulk`` branch
--------------------
-
-Periodically, large-scale maintenance needs to be done on the channel. For
-example, when a new version of Bioconductor comes out, we need to update all
-``bioconductor-*`` packages and rebuild them. Or if we change the version of
-a pinned package in ``scripts/env.yaml``, then all packages depending
-on that package need to be rebuilt. While our build infrastructure will build
-recipes in the correct toplogically sorted order, if there are too many recipes
-then Travis-CI will timeout and the build will fail.
-
-Our solution to avoiding builds failing due to timeouts is the special ``bulk``
-branch. This branch is used by the bioconda core team for maintenance and
-behaves much like the ``master`` branch in that packages, once successfully
-built and tested, are immediately uploaded to anaconda.org. The major
-difference is that ``bulk`` does not go through the pull-request-and-review
-process in order for packages to be built and uploaded to the channel. As such,
-only bioconda core members are able to push to the ``bulk`` branch.
-
-The workflow is to first merge the latest master into ``bulk`` branch and
-resolve any conflicts. Then push (often a large number of) changes to the
-branch, without opening a PR. Unlike the ``master`` branch, which uses
-the shortcut of only checking for recipes in the channel if they have been changed
-according to ``git``, the ``bulk`` branch is configured to do the exhaustive
-check against the channel (which can take some time). Any existing recipe that
-does not exist in the channel will therefore be re-built. As packages build,
-they are uploaded; as they fail, the testing moves on to the next package.  The
-``bulk`` branch runs up until the Travis-CI timeout, at which time the entire
-build fails. But since individual packages were uploaded as they are
-successfully built, our work is saved and we can start the next build where we
-left off. Failing tests are fixed in another round of commits, and these
-changes are then pushed to ``bulk`` and the process repeats. Once ``bulk`` is
-fully successful, a PR is opened to merge the changes into master.
+- **Report.** If we are on a pull request, report the successful test back to
+  the GitHub PR, at which time it can be merged into the master branch
+
+- **Upload.** If we are on the master branch, then upload the built conda
+  package to anaconda.org, and upload the BusyBox container to quay.io
+
+- **Use!** As soon as the package is uploaded to anaconda.org, it is available
+  for installing via ``conda``. As soon as the BusyBox container is uploaded to
+  quay.io, it is available for use via ``docker pull``.
 
 Labels
 ------
diff --git a/source/contributor/cb3.rst b/source/contributor/cb3.rst
deleted file mode 100644
index daecce3..0000000
--- a/source/contributor/cb3.rst
+++ /dev/null
@@ -1,264 +0,0 @@
-.. _cb3-main:
-
-Conda build v3
---------------
-
-Conda build version 3 has lots of nice features that will make managing
-packages in Bioconda much easier. However there are some changes that you will
-need to be aware of, especially if you're used to making recipes using the old
-conda-build v2 way.
-
-This page documents each change and is intended to serve as a reference for the
-transition.
-
-.. _host-section:
-
-The new ``host`` section
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-**Summary:**
-
-- Previously, build-time dependencies were listed in the ``requirements:build:`` section.
-- Conda-build 3 now has an additional ``requirements:host:`` section. It is required if
-  using compilers; otherwise old recipes can remain as-is and can be gradually
-  ported over. New recipes should use the new ``host`` section as described
-  below.
-
-Due to the improved way compilers are now being handled (see
-:ref:`compiler-tools`), the old build section is now split into two sections,
-``build`` and ``host``. This change is largely to support cross-compiling,
-which we are not doing yet. However if a recipe uses one of the new ``{{
-compiler() }}`` methods described in :ref:`compiler-tools`, the ``host``
-section is **required**.
-
-The new ``build`` section should have things like compilers, ``git``,
-``automake``, ``make``, ``cmake``, and other build tools. If there are no
-compilers or other build tools, there should be no ``build:`` section.
-
-The new ``host`` section should have everything else.
-
-There are many existing recipes that only have a ``build:`` section. They will
-work for now; they just won't work if we ever try to cross-compile them.
-However **new** recipes should have the ``host:`` section.
-
-The ``run`` section remains the same.
-
-Before:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      build:
-        - python
-      run:
-        - python
-
-After:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      host:
-        - python
-      run:
-        - python
-
-.. seealso::
-
-    See the `requirements section <conda-build:requirements>` of the
-    conda docs for more info.
-
-
-.. _compiler-tools:
-
-Compiler tools
-~~~~~~~~~~~~~~
-**Summary:**
-
-- Previously we used ``- gcc #[linux]`` and ``- llvm # [osx]`` for compilers
-- Instead, we should use the syntax ``{{ compiler('c') }}``, ``{{
-  compiler('cxx') }}``, and/or ``{{ compiler('fortran') }}``. These should go
-  in the ``build`` section, and all other build dependencies should go in the
-  ``host`` section.
-
-Anaconda now provides platform-specific compilers that are automatically
-determined. The string ``{{ compiler('c') }}`` will resolve to ``gcc`` on
-Linux, but ``clang`` on macOS. This should greatly simplify recipes, as we no
-longer need to have separate lines for linux and osx.
-
-Note that previously we typically would also add ``- libgcc #[linux]`` as a run
-dependency, but this is now taken care of by the compiler tools (see the global
-pinning section below for more on this).
-
-Conda-build 3 also now has the ability to cross-compile, making it now possible
-to compile packages for macOS while running on Linux. To support this, recipes
-must now make a distinction between dependencies that should be specific to the
-building machine and dependencies that should be specific to the running
-machine.
-
-Dependencies specific to the building machine go in ``build``;
-dependencies specific to the running machine go in ``host`` (see
-:ref:`host-section`).
-
-
-Before:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      build:
-        - python
-        - gcc  # [linux]
-        - llvm # [osx]
-      run:
-        - python
-        - libgcc  # [linux]
-
-After:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      build:
-        - {{ compiler('c') }}
-      host:
-        - python
-      run:
-        - python
-
-.. seealso::
-
-    - The `compiler tools <conda-build:compiler-tools>` section of the
-      conda docs has much more info.
-
-    - The default compiler options are defined by conda-build in the
-      `variants.DEFAULT_COMPILERS
-      <https://github.com/conda/conda-build/blob/master/conda_build/variants.py#L42>`_
-      variable.
-
-    - More details on "strong" and "weak" exports (using examples of
-      libpng and libgcc) can be found in the `export runtime
-      requirements <conda-build:run_exports>` conda documentation.
-
-
-.. warning::
-
-    These compilers are only available in the ``defaults`` channel. Until now
-    we have not had this channel as a dependency, so be sure to add the channel
-    when setting up bioconda (see :ref:`set-up-channels`).
-
-.. _global-pinning:
-
-Global pinning
-~~~~~~~~~~~~~~
-
-**Summary:**
-
-- Previously we pinned packages using the syntax ``- zlib {{ CONDA_ZLIB }}*``
-  in both the ``build`` and ``run`` dependencies.
-- Instead, we should now specify only package names in the ``host`` and ``run``
-  sections e.g., as simply ``zlib``. They are pinned automatically.
-
-Global pinning is the idea of making sure all recipes use the same versions of
-common libraries.  Problems arise when the build-time version does not match
-the install-time version. Furthermore, all packages installed into the same
-environment should have been built using the same version so that they can
-co-exist. For example, many bioinformatics tools have ``zlib`` as a dependency.
-The version of ``zlib`` used when building the package should be the same as the
-version used when installing the package into a new environment. This implies
-that we need to specify the ``zlib`` version in one place and have all recipes
-use that version.
-
-Previously we maintained a global, bioconda-specific pinning file (see
-`scripts/env_matrix.yaml
-<https://github.com/bioconda/bioconda-recipes/blob/dd7248c5dcc5ea0237c81bff4d1e6df5a9bdd274/scripts/env_matrix.yml>`_).
-For ``zlib``, that file defined the variable ``CONDA_ZLIB`` and that variable
-was made available to the recipes as a jinja2 variable. One problem with this
-is that we did not often synchronize our pinned versions with conda-forge's
-pinned versions, and this disconnect could cause problems.
-
-There are two major advances in conda-build 3 to address these problems. First
-is the concept of "variants". Variants are a generalized way of specifying one
-or more specific versions, and they come with many weird and wonderful ways to
-specify constraints. Specifying variants generally takes the form of writing
-a YAML file. We have adopted the variants defined by conda-forge by installing
-their `conda-forge-pinning` conda package in our build environment.
-Technically, that package unpacks the config YAML into our conda environment so
-that it can be used for building all recipes. You can see this file at
-`conda_build_config.yaml
-<https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_.
-
-The second major advance in conda-build 3 is the the concept of "run exports".
-The idea here is to specify that any time a dependency (``zlib``, in our running example)
-is used as a build dependency, it should also be automatically be installed as
-a run dependency without having to explicitly add it as such in the recipe.
-This specification is done in the ``zlib`` recipe itself (which is hosted by
-conda-forge), so in general bioconda collaborators can just add ``zlib`` as
-a build dependency.
-
-Note that we don't have to specify the version of ``zlib`` in the recipe -- it
-is pinned in that ``conda_build_config.yaml`` file we share with conda-forge.
-
-In a similar fashion, the reason that we no longer have to specify ``libgcc``
-as a run dependency (as described above in the compilers section) is that ``{{
-compiler('c') }}`` automatically export ``libgcc`` as a run dependency.
-
-Before:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      build:
-        - python
-        - gcc  # [linux]
-        - llvm  # [osx]
-        - zlib {{ CONDA_ZLIB }}*
-      run:
-        - python
-        - libgcc  # [linux]
-        - zlib {{ CONDA_ZLIB }}*
-
-After:
-
-.. code-block:: yaml
-
-    package:
-      name: example
-      version: 0.1
-    requirements:
-      build:
-        - {{ compiler('c') }}
-      host:
-        - python
-        - zlib
-      run:
-        - python
-        - zlib
-
-
-.. seealso::
-
-    The `conda-build:resources/variants` section of the conda docs has
-    much more information.
-
-    We share the packages pinned by conda-forge, which can be found in their
-    `conda_build_config.yaml
-    <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_
-
-    Bio-specific packages additionally pinned by bioconda can be found at
-    ``bioconda_utils-conda_build_config.yaml`` in the bioconda-utils source.
diff --git a/source/contributor/faqs.rst b/source/contributor/faqs.rst
deleted file mode 100644
index cde479b..0000000
--- a/source/contributor/faqs.rst
+++ /dev/null
@@ -1,171 +0,0 @@
-FAQs
-====
-This section is to help contributors get up to speed on various topics related
-to building and testing conda packages.
-
-.. _conda-anaconda-minconda:
-
-What's the difference between Anaconda, conda, and Miniconda?
--------------------------------------------------------------
-
-The `Anaconda Python distribution <https://www.continuum.io/downloads>`_
-started out as a bundle of scientific Python packages that were otherwise
-difficult to install. It was created by `ContinuumIO
-<https://www.continuum.io/>`_ and remains the easiest way to install the full
-scientific Python stack.
-
-Many packaging problems had to be solved in order to provide a cross-platform
-bundle, and one of the tools that came out of that work was the conda package
-manager. So conda is part of Anaconda. But conda ended up being very useful on
-its own and for things other than Python, so ContinuumIO spun it out into its
-own separate `open-source package <https://github.com/conda/conda>`_.
-
-However, conda is not just for Python, it is not "pip-installable" and rather
-needs to be installed in a language-agnostic manner. The conda installer is
-called Miniconda, to differentiate it from the full-size Anaconda.
-
-So: conda is a package manager, Miniconda is the conda installer, and Anaconda
-is a scientific Python distribution that also includes conda.
-
-Recipe vs package
------------------
-
-A *recipe* is a directory containing small set of files that defines name,
-version, dependencies, and URL for source code. A recipe typically contains
-a ``meta.yaml`` file that defines these settings and a ``build.sh`` script that
-builds the software. A recipe is converted into a *package* by running
-`conda-build` on the recipe. A package is a bgzipped tar file (``.tar.bz2``) that
-contains the built software. Packages are uploaded to anaconda.org so that
-users can install them with ``conda install``.
-
-.. seealso::
-
-    The `conda-build:resources/package-spec` has details on exactly
-    what a package contains and how it is installed into an
-    environment.
-
-Continuous integration (Circle CI)
-----------------------------------
-We use the Circle CI continuous integration service. Continuous integration
-tests each small incremental change to code to ensure that everything is
-up-to-date and correct. Circle CI graciously provides this service for free to
-open-source projects. It is connected to GitHub such that each time a pull
-request or merge occurs, a new Circle CI build is created. For bioconda,
-a "build" means identifying any recipes that need to built, running
-`conda-build` on them, and testing to make sure they work.
-
-How is Circle CI set up and configured?
----------------------------------------
-
-- ``.circleci/config.yml`` is read by the Circle CI worker.
-
-- The worker runs ``.circleci/setup.sh``. This installs conda, adds
-  channels, and installs :doc:`../developer/bioconda-utils`
-
-- The worker runs tests defined in ``.circleci/config.yml``.
-
-A local version of the Circle CI tests can be executed via the
-:ref:`Circle CI client <circleci-client>`. Note that this version lacks some
-additional tests that are executed in the online version. Thus, it can be that
-a local test passes while the online test fails.
-Nevertheless, the local test should capture most problems, such that it is highly
-encouraged to first run a local test in order to save quota on Circle CI.
-
-How are dependencies pinned to particular versions?
----------------------------------------------------
-
-In some cases a recipe may need to pin the version of a dependency.
-A global set of default versions to pin against is shared with conda-forge and
-can be found `here <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_.
-For new dependencies that are contained in conda-forge and not yet in this list,
-please update the list via a pull request.
-Local pinnings can be achieved by adding a file ``conda_build_config.yaml`` next
-to your ``meta.yaml``.
-
-To find out against which version you can pin a package, e.g. x.y.* or x.* please use `ABI-Laboratory <https://abi-laboratory.pro/tracker/>`_.
-
-What's the lifecycle of a bioconda package?
--------------------------------------------
-
-- Submit a pull request with a new recipe or an updated recipe
-- Circle CI automatically builds and tests the changed recipe[s] using
-  conda-build. Test results are shown on the PR.
-- If tests fail, push changes to PR until they pass.
-- Once tests pass, merge into master branch
-- Circle CI tests again, but this time after testing the built packages are
-  uploaded to the bioconda channel on anaconda.org.
-- Users can now install the package just like any other conda package with
-  ``conda install``.
-
-Once uploaded to anaconda.org, it is our intention to never delete any old
-packages. Even if a recipe in the bioconda repo is updated to a new version,
-the old version will remain on anaconda.org. ContinuumIO has graciously agreed
-to sponsor the storage required by the bioconda channel.
-Nevertheless, it can sometimes happen that we have to mark packages as broken
-in order to avoid that they are accidentally pulled by the conda solver.
-In such a case it is only possible to install them by specifically considering
-the ``broken`` label, i.e.,
-
-.. code-block:: bash
-
-    conda install -c conda-forge -c bioconda -c defaults -c bioconda/label/broken my-package=<broken-version>
-
-
-.. _circlecimacos:
-
-CircleCI macOS plans
---------------------
-In the past we had recommended enabling CircleCI for your fork to help conserve
-the bioconda team's build time quota. However this did not work very well:
-macOS builds on CircleCI require an extra macOS plan, which is not free to
-users. The result was that contributors' pull requests would fail tests simply
-due to not having a paid macOS plan. Luckily, CircleCI has generously provided
-macOS builds to the bioconda team.
-
-To ensure that CircleCI uses the bioconda team account, please **disable**
-CircleCI on your fork (look for the big red "Stop Building" button at
-https://circleci.com/dashboard under the settings for your fork).
-
-Testing ``bioconda-utils`` locally
-----------------------------------
-
-Follow the instructions at :ref:`bootstrap` to create a separate Miniconda
-installation using the ``bootstrap.py`` script in the ``bioconda-recipes`` repo.
-
-Then, in the activated environment, install the bioconda-utils test
-requirements, from the top-level directory of the ``bioconda-utils`` repo.
-While the bootstrap script installs bioconda-utils dependencies, if there are
-any changes in ``requirements.txt`` you will want to install them as well.
-
-The bootstrap script already installed bioconda-utils, but we want to install
-it in develop mode so we can make local changes and they will be immediately
-picked up. So we need to uninstall and then reinstall bioconda-utils.
-
-Finally, run the tests using ``pytest``.
-
-In summary:
-
-.. code-block:: bash
-
-    # activate env
-    source ~/.config/bioconda/activate
-
-    # install dependencies
-    conda install --file test-requirements.txt --file bioconda_utils/bioconda_utils-requirements.txt
-
-    # uninstall and then reinstall
-    pip uninstall bioconda_utils
-    python setup.py develop
-
-    # run tests
-    pytest test -vv
-
-Where can I find more info on ``meta.yaml``?
---------------------------------------------
-
-The ``meta.yaml`` file is conda's metadata definition file for recipes. 
-If you are developing a new recipe or are trying to update or improve an existing one, it can be helpful to know  
-which elements and values can appear in ``meta.yaml``.
-
-Conda has this information available `here <https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html>`_.
-Please check that you are looking at the correct version of the documentation for the current conda version used by bioconda. 
diff --git a/source/contributor/guidelines.rst b/source/contributor/guidelines.rst
index f519e49..49cd350 100644
--- a/source/contributor/guidelines.rst
+++ b/source/contributor/guidelines.rst
@@ -159,10 +159,13 @@ runs the tests listed in the ``test`` section of the recipe's ``meta.yaml``
 file in an environment which does not have the dependencies listed in the
 ``test: requires:`` section. Because of this, all tests in that section
 must only rely on runtime dependencies or the build will fail.
-Tests that rely on the test-time dependencies listed in ``test: requires:`` should be put in
-the ``run_test.sh`` file in the same directory as the ``meta.yaml`` file. This file is
-picked up and run by the standard build that occurs before the ``mulled-build``, but is
-not passed on to and run by the ``mulled-build``.
+
+If you do want to run tests that rely on dependencies listed in ``test:
+requires:``, those tests should not be written directly in the ``meta.yaml``
+file but instead put in a ``run_test.sh`` file in the same directory as the
+``meta.yaml`` file. This file is picked up and run by the standard conda build
+test that occurs before the ``mulled-build``, but is not passed on to and run
+by the ``mulled-build``.
 
 .. _patching:
 
@@ -215,7 +218,7 @@ a command-line tool, in which case that should be tested as well.
 
 
 By default, Python recipes (those that have ``python`` listed as a dependency)
-must be successfully built and tested on Python 2.7, 3.6, and 3.7 in order to
+must be successfully built and tested on all supported Python versions in order to
 pass. However, many Python packages are not fully compatible across all Python
 versions. Use the `preprocessing selectors <conda-build:preprocess-selectors>`
 in the meta.yaml file along with the ``build/skip`` entry to indicate that
@@ -378,6 +381,12 @@ Use ``conda skeleton cpan <packagename>`` to build a recipe for Perl and
 place the recipe in the ``recipes`` dir. The recipe will have the
 ``perl-`` prefix.
 
+.. note::
+
+   Historically, before conda-forge hosted Perl packages, many
+   non-bioinformatics-related Perl packages were hosted on Bioconda. These are
+   slowly being migrated to conda-forge.
+
 An example of such a package is
 `perl-module-build <https://github.com/bioconda/bioconda-recipes/tree/master/recipes/perl-module-build>`_.
 
diff --git a/source/contributor/index.rst b/source/contributor/index.rst
index 93b5d74..a0610c2 100644
--- a/source/contributor/index.rst
+++ b/source/contributor/index.rst
@@ -40,8 +40,4 @@ challenging to package. The topics below provide more details.
     guidelines
 
     linting
-    faqs
     updating
-    cb3
-
-
diff --git a/source/developer/aarch64.rst b/source/developer/aarch64.rst
new file mode 100644
index 0000000..73ca2bb
--- /dev/null
+++ b/source/developer/aarch64.rst
@@ -0,0 +1,28 @@
+``aarch64`` builds
+==================
+
+.. datechanged:: 2024-03-04
+   Added this section as initial linux-aarch64 builds are starting
+
+While we do not yet have builds for ``osx-arm64`` (see
+:ref:`platform-nomenclature-faq`), we are starting to roll out
+``linux-aarch64`` builds. These run on CircleCI, which offers the
+infrastructure for this.
+
+This is being initially approached as an opt-in process as we make sure
+all the moving parts are working correctly. A recipe can be flagged for
+building on ``linux-aarch64`` by adding the following to the
+:file:`meta.yaml` file:
+
+.. code-block:: yaml
+
+   extra:
+     additional-platforms:
+       - linux-aarch64
+
+The current CircleCI config will only run if at least one recipe in the
+commit range (typically for the PR) includes the above additional
+platform.
+
+Support for building and uploading ``linux-aarch64`` containers is planned but
+not yet implemented (as of March 2023).
diff --git a/source/developer/bulk.rst b/source/developer/bulk.rst
index ed32645..d25f2ad 100644
--- a/source/developer/bulk.rst
+++ b/source/developer/bulk.rst
@@ -29,8 +29,9 @@ decides whether it will run its jobs or not.
 * If any of the pushed commit messages contains the substring ``[ci run]`` the CI jobs are executed.
 * If not, no CI jobs are executed.
 
-The reason for this behavior is that we want to avoid race conditions caused by multiple CI jobs
-spawned from different commits to be exectuted at the same time.
+The reason for this behavior is that we want to avoid race conditions caused by
+multiple CI jobs spawned from different commits, possibly from different
+people, to be exectuted at the same time.
 
 In order to simplify interactions with the bulk CI, bioconda-utils offers therefore
 some dedicated subcommands:
@@ -97,7 +98,7 @@ example is updating pinnings to support Python 3.10.
 
 6. Then, **bulk-commit** and push the changes.
 
-7. Once the CI run has finished, inspect all build failures (see :ref:`handling-build-failues`).
+7. Once the CI run has finished, inspect all build failures (see :ref:`handling-build-failures`).
    For each failure, decide whether the recipe shall be skiplisted or whether you would like to fix it.
    In general it is advisable to fix all libraries on which many recipes depend and anything else
    that is obvious and easy. For the rest, mark the recipes as skiplisted in the build failure file.
@@ -109,8 +110,7 @@ example is updating pinnings to support Python 3.10.
    step 6-7 again. If the run has finished without any build failure and did not time out before checking all
    recipes, you can go on with step 7.
 
-9. Once all the packages have either been successfully built or skiplisted, merge in the master branch 
-   (after doing a git pull on it).
+9. Once all the packages have either been successfully built or skiplisted, pull the master branch and merge it into bulk.
    Usually, conflicts can occur here due to build-numbers having been increased in the master branch while you
    did your changes in bulk. For such cases (which should be not so many) you can just increase the build number to
    ``max(build_number_master, build_number_bulk)`` and **bulk-commit** all of those in a row.
@@ -129,10 +129,12 @@ example is updating pinnings to support Python 3.10.
 Handling build failures
 ~~~~~~~~~~~~~~~~~~~~~~~
 
-Build failures are stored in a file ``build_failure.<arch>.yaml`` next to each failing recipe.
-You can list all build failures stored in the current branch of bioconda-recipes via the command
-``bioconda-utils list-build-failures recipes config.yaml``. The presented table will be sorted by 
-the number of dependencies and package downloads, which should help for prioritizing the fixing work.
+Build failures are stored in a file ``build_failure.<arch>.yaml`` next to each
+failing recipe. You can list all build failures stored in the current branch of
+bioconda-recipes via the command ``bioconda-utils list-build-failures recipes
+config.yml``. This reads the yaml files from failing recipes, and prints
+a table on stdout that will be sorted by the number of dependencies and package
+downloads, which should help for prioritizing the fixing work.
 
 This file can look e.g. like this:
 
@@ -153,7 +155,7 @@ Check out all possibilities in the corresponding help message:
 
 .. code-block:: bash
 
-    bioconda-utils annotate-build-failure --help
+    bioconda-utils annotate-build-failures --help
 
 Skiplisted recipes from the master branch are automatically displayed in a `wiki page <https://github.com/bioconda/bioconda-recipes/wiki/build-failures>`_,
 so that others can pick them up for providing a fix.
@@ -230,5 +232,7 @@ Some unordered notes on working with the bulk branch:
   that don't need to be rebuilt, but that work needs to be done simply to
   figure out if a rebuild is needed, and so this is expected.
 
-- The bulk runs take place on GitHub Actions, and the configuration is in
-  :file:`.github/workflows/Bulk.yml`.
+- For ``linux-64`` and ``osx-64``,  the bulk runs take place on GitHub Actions,
+  and the configuration is in :file:`.github/workflows/Bulk.yml`. For
+  ``linux-aarch64``, the builds take place on CircleCI and the configuration is
+  in :file:`.circleci/config.yml`.
diff --git a/source/developer/ci-inventory.rst b/source/developer/ci-inventory.rst
index a129f36..e0b883e 100644
--- a/source/developer/ci-inventory.rst
+++ b/source/developer/ci-inventory.rst
@@ -1,166 +1,243 @@
+.. _ci-inventory:
+
 CI Inventory
 ============
 
-This page documents the various moving parts that, together, make Bioconda
-work. We rely on a mixture of free services to spread the workload and to
-maintain flexibility over the long term in case a service becomes unusable.
-
-Autobump bot
-------------
-
-Checks upstream repository for version updates, if so, creates a new
-bioconda-recipes recipe with the updated version and an updated hash, and opens
-a new pull request with various templated info and with the "autobump" label
-applied.
-
-:runs on: CircleCI
-:controlled from: bioconda-utils
-:trigger: hourly
-:code references: `config.yml <https://github.com/bioconda/bioconda-utils/blob/master/.circleci/config.yml#L65>`_
-:OS: Linux
-
-Documentation
--------------
-
-Build sphinx documentation (including updated READMEs for every recipe) and
-pushes the changes to
-[bioconda.github.io](https://github.com/bioconda/bioconda.github.io).
-
-:runs on: GitHub Actions
-:controlled from: bioconda-docs
-:trigger: daily, or on push
-:code references: `docs.yml <https://github.com/bioconda/bioconda-docs/blob/main/.github/workflows/docs.yml>`_
-:OS: Linux
-
-bioconda-utils tests
---------------------
-
-Unit tests and functional tests for bioconda-utils
-
-:runs on: GitHub Actions
-:controlled from: bioconda-utils
-:trigger: on push
-:code references: `GithubActionTests.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/GithubActionTests.yml>`_
-:OS: Linux, macOS
-
-Test building bioconda-utils docker image
------------------------------------------
-
-Ensures that bioconda-utils can run inside a newly-built container.
-
-:runs on: GitHub Actions
-:controlled from: bioconda-utils
-:trigger: on push
-:code references: `build-image.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/build-image.yml>`_, `Dockerfile <https://github.com/bioconda/bioconda-utils/blob/master/Dockerfile>`_
-
-Ensure Biocontainers are public
--------------------------------
-
-Checks quay.io to see if any containers are mistakenly private; if so makes them public
-
-:runs on: GitHub Actions
-:controlled from: bioconda-utils
-:triggered: manually
-:code references: `changevisibility.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/changevisibility.yml>`_
-
-conventional PRs
-----------------
-
-Enforces "conventional commit" tags in the title of PRs, like "docs:", "fix:", "ci:", and so on.
-
-:runs on: GitHub Actions
-:controlled from: bioconda-utils
-:trigger: PR open/reopen/edit/sync
-:code references: `conventional-prs.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/conventional-prs.yml>`_
-:OS: Linux
+.. datechanged:: 2023-05-02
+   Use `mergify <https://mergify.com/>`_ instead of AutoMerge.yml GitHub Action
 
-release-please
---------------
+.. datechanged:: 2023-06-06
+   Start using build-failures workflow
 
-Collects PRs that have been merged to master since the last release into
-a separate, special PR. Merging that special PR triggers a new release.
+.. datechanged:: 2024-03-04
+   Start using ``linux-aarch64`` in bulk and recipe tests
 
-:runs on: GitHub Actions
-:controlled from: bioconda-utils
-:trigger: push to master on bioconda-utils
-:code references: `release-please.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/release-please.yml>`_
-:OS: Linux
-
-Recipe tests
-------------
-
-Runs linting and tests for pull requests to bioconda-recipes.
-
-:runs on: Azure Pipelines
-:controlled from: bioconda-recipes
-:trigger: on push
-:code references: `azure-pipeline.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline.yml>`_
-:OS: Linux, macOS
-
-master branch tests
--------------------
-
-Runs the same tests as for PRs, but on the master branch. Note that when the
-bot merges, it uses [ci skip] in the commit comment and works with the
-already-built artifacts, so this doesn't typically run.
-
-:runs on: Azure Pipelines
-:controlled from: bioconda-recipes
-:trigger: push to master
-:code references: `azure-pipeline-master.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline-master.yml>`_
-:OS: Linux, macOS
-
-
-nightly maintenance
--------------------
-Various maintenance tasks:
-
-- build and upload the bioconda-repodata-patches package
-- try to build and upload any remaining packages (runs bioconda-utils build on *all* recipes)
-
-:runs on: Azure Pipelines 
-:controlled from: bioconda-recipes
-:trigger: daily
-:code references: `azure-pipeline-nightly.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline-nightly.yml>`_
-:OS: Linux, macOS
-
-
-automerge, automerge trigger
-----------------------------
-
-This is intended to automatically merge PRs when all checks pass (including the
-review step). It will only be triggered if the AutoMergeTrigger workflow runs
-successfully. If a PR's review is submitted or dismissed, or a PR is labeled
-with "automerge", then this workflow fires, and needs to complete before the
-AutoMerge workflow will run.
-
-:runs on: GitHub Actions 
-:controlled from: bioconda-recipes
-:trigger: completed check suite
-:code references: `AutoMerge.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/AutoMerge.yml>`_, `AutoMergeTrigger.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/AutoMergeTrigger.yml>`_
-
-
-Bulk
-----
-If pushing to the special ``bulk`` branch, this workflow will run. It uses
-special bioconda-utils functionality to split the full DAG into sub-DAGs and
-submits them to independent parallel jobs. When recipes sucessfully build, they
-are *immediately* uploaded. Use with caution. Typically used when migrating
-(e.g., bioconductor updates, pinning updates)
-
-:runs on: GitHub Actions  
-:controlled from: bioconda-recipes
-:trigger: push to ``bulk`` branch of bioconda-utils
-:code references: `Bulk.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/Bulk.yml>`_
-:OS: Linux, macOS
-
-comment responder
------------------
-
-Runs the bioconda-bot container (quay.io/bioconda/bot) with different image tags (merge, comment, update, repost) in response to comments.
+This page documents the various moving parts that, together, make Bioconda
+work. We rely on a mixture of free services to spread the workload and to
+maintain flexibility over the long term in case a service becomes unusable.
 
-:runs on: GitHub Actions 
-:controlled from: bioconda-recipes
-:trigger: @bioconda-bot mentions
-:code references: `CommentResponder.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/CommentResponder.yml>`_
-:OS: Linux
+.. note::
+
+   For the platform column, we use the conda designations when conda packages
+   are built. Otherwise we use operating system.
+   See :ref:`platform-nomenclature-faq` for more info on this.
+
+..
+  When updating this documentation in the future, go through all the existing
+  yaml files you can find across all the bioconda repos and make sure they are
+  represented here.
+
+  bioconda-recipes:
+    - azure-pipeline-master.yml
+    - azure-pipeline-nightly.yml
+    - azure-pipeline.yml
+    - .circleci/config.yml
+    - .github/workflows/Bulk.yml
+    - .github/workflows/CommentResponder.yml
+    - .github/workflows/PR.yml <-------- appears to be manually disabled?
+    - .github/workflows/build-failures.yml
+    - .github/workflows/master.yml
+    - .github/workflows/nightly.yml <------- appears to be manually disabled?
+
+  bioconda-utils:
+    - .circleci/config.yml
+    - .github/workfows/GithubActionTests.yml
+    - .github/workfows/build-image.yml
+    - .github/workfows/changevisibility.yml
+    - .github/workfows/conventional-prs.yml
+    - .github/workfows/release-please.yml
+
+  bioconda-plots:
+    - .github/workfows/generate-plots.yml
+
+
+
+.. list-table::
+    :header-rows: 1
+    :class: inventory
+
+    * - Name
+      - Runs on
+      - Controlled from
+      - Trigger
+      - Code references
+      - Platform
+      - Description
+
+
+    * - Recipe tests
+      - Azure Pipelines, CircleCI
+      - ``bioconda-recipes``
+      - on push
+      - `azure-pipeline.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline.yml>`_ (``linux-64``, ``osx-64``);
+        `config.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.circleci/config.yml>`_ (``linux-aarch64``)
+      - ``linux-64``, ``osx-64``, ``linux-aarch``
+      - These are the most-run tests: these are what run on every change on
+        pull requests to bioconda-recipes, and they must pass before the recipe
+        is merged into the master branch.
+
+
+    * - Comment responder
+      - GitHub Actions
+      - ``bioconda-recipes``
+      - @BiocondaBot mentions
+      - `CommentResponder.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/CommentResponder.yml>`_
+      - Linux
+      - Runs the bioconda-bot container (quay.io/bioconda/bot) with different
+        image tags (merge, comment, update, repost) in response to comments.
+        This allows fast response time (rather than, say, restoring a cache
+        each time).
+
+
+    * - Master branch tests
+      - Azure Pipelines
+      - ``bioconda-recipes``
+      - push to master (bioconda-recipes)
+      - `azure-pipeline-master.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline-master.yml>`_
+      - ``linux-64``, ``osx-64``, ``linux-aarch64``
+      - Runs the same tests as for PRs, but on the master branch. Note that
+        when the bot is doing the merge, it adds ``[ci skip]`` in the commit
+        comment, and works with the already-built artifacts from the PR.
+
+
+    * - Mergify
+      - `mergify <https://mergify.com/>`_
+      - ``bioconda-recipes``
+      - Successful tests on an autobumped recipe
+      - `.mergify.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.mergify.yml>`_
+      - Linux
+      - If a recipe was autobumped, the tests passed, and it's been more than
+        3 days, then automatically merge the updated recipe.
+
+
+    * - Autobump bot
+      - CircleCI
+      - ``bioconda-utils``
+      - hourly
+      - `config.yml <https://github.com/bioconda/bioconda-utils/blob/8255afdd9e5c0fd3cb09cb11269f5ff3397c959e/.circleci/config.yml#L69>`_
+      - Linux
+      - Checks upstream repository for version updates, if so, creates a new
+        bioconda-recipes recipe with the updated version and an updated hash,
+        and opens a new pull request with various templated info and with the
+        "autobump" label applied.
+
+
+    * - Build failures
+      - GitHub Actions
+      - ``bioconda-recipes``
+      - daily
+      - `build-failures.yaml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/build-failures.yml>`_
+      - Linux
+      - Runs ``bioconda-utils list-build-failures`` to generate and publish
+        a `wiki page listing prioritized failures
+        <https://github.com/bioconda/bioconda-recipes/wiki/build-failures>`_.
+
+
+    * - Docs
+      - GitHub Actions
+      - ``bioconda-docs``
+      - daily, or on push
+      - `docs.yml <https://github.com/bioconda/bioconda-docs/blob/main/.github/workflows/docs.yml>`_
+      - Linux
+      - Build sphinx documentation (including updated READMEs for every recipe)
+        and pushes the changes to
+        [bioconda.github.io](https://github.com/bioconda/bioconda.github.io).
+
+
+    * - bioconda-utils tests
+      - GitHub Actions
+      - ``bioconda-utils``
+      - on push
+      - `GithubActionTests.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/GithubActionTests.yml>`_
+      - ``linux-64``, ``osx-64``
+      - Unit tests and functional tests for bioconda-utils.
+
+
+    * - Docker image test
+      - GitHub Actions
+      - ``bioconda-utils``
+      - on push
+      - `build-image.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/build-image.yml>`_,
+        `Dockerfile <https://github.com/bioconda/bioconda-utils/blob/master/Dockerfile>`_
+      - Linux
+      - Ensures that bioconda-utils can run inside a newly-built container.
+
+
+    * - Check public containers
+      - GitHub Actions
+      - ``bioconda-utils``
+      - manually
+      - `changevisibility.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/changevisibility.yml>`_
+      - Linux
+      - Checks quay.io to see if any containers are mistakenly private; if so
+        makes them public
+
+
+    * - Conventional PRs
+      - GitHub Actions
+      - ``bioconda-utils``
+      - bioconda-utils PR open/reopen/edit/sync
+      - `conventional-prs.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/conventional-prs.yml>`_
+      - Linux
+      - Enforces "conventional commit" tags in the title of PRs, like "docs:",
+        "fix:", "ci:", and so on in bioconda-utils. This enables better
+        automation of releases.
+
+
+    * - Release-please
+      - GitHub Actions
+      - ``bioconda-utils``
+      - push to master on bioconda-utils
+      - `release-please.yml <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/release-please.yml>`_
+      - Linux
+      - Collects PRs that have been merged to master since the last release
+        into a separate, special PR. Merging that special PR is what triggers
+        a new release.
+
+
+    * - Nightly maintenance
+      - Azure Pipelines
+      - ``bioconda-recipes``
+      - daily
+      - `azure-pipeline-nightly.yml <https://github.com/bioconda/bioconda-recipes/blob/master/azure-pipeline-nightly.yml>`_
+      - Linux, macOS
+      - Various maintenance tasks: build and upload the
+        bioconda-repodata-patches package; try to build and upload any
+        remaining packages (runs bioconda-utils build on *all* recipes)
+
+
+    * - Bulk
+      - GitHub Actions
+      - ``bioconda-recipes``
+      - push to ``bulk`` branch of bioconda-utils
+      - `Bulk.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/Bulk.yml>`_ (``linux-64``, ``osx-64``);
+        `config.yml <https://github.com/bioconda/bioconda-recipes/blob/master/.circleci/config.yml>`_ (``linux-aarch64``)
+      - ``linux-64``, ``osx-64``, ``linux-aarch64``
+      - If pushing to the special ``bulk`` branch, this workflow will run. It
+        uses special bioconda-utils functionality to split the full DAG into
+        sub-DAGs and submits them to independent parallel jobs. When recipes
+        sucessfully build, they are *immediately* uploaded. Use with caution.
+        Typically used when migrating (e.g., bioconductor updates, pinning
+        updates)
+
+
+    * - Compile stats for plots
+      - GitHub Actions
+      - ``bioconda-stats``
+      - several times a day
+      - `packages-anaconda-org.yml <https://github.com/bioconda/bioconda-stats/blob/main/.github/workflows/packages-anaconda-org.yml>`_
+      - Linux
+      - Builds a zip file containing TSVs for each package, which are inspected
+        and compiled into json files in ``bioconda-plots``.
+
+
+    * - Generate plots
+      - GitHub Actions
+      - ``bioconda-plots``
+      - daily
+      - `generate-plots.yml <https://github.com/bioconda/bioconda-plots/blob/main/.github/workflows/generate-plots.yml>`_;
+        `test-plots.yml <https://github.com/bioconda/bioconda-plots/blob/main/.github/workflows/test-plots.yml>`_ runs minor tests on the plot-generating code.
+      - Linux
+      - Using stats compiled in ``bioconda-stats``, builds json files for each
+        package that are used by plotting code on bioconda.github.io recipe
+        pages.
diff --git a/source/developer/dockerfile-inventory.rst b/source/developer/dockerfile-inventory.rst
new file mode 100644
index 0000000..2a31a8c
--- /dev/null
+++ b/source/developer/dockerfile-inventory.rst
@@ -0,0 +1,223 @@
+.. _dockerfile-inventory:
+
+Dockerfile inventory
+====================
+
+.. datechanged:: 2024-03-04
+   Added section
+
+Containers are used in multiple ways by bioconda-utils. Broadly, we can
+divide them into containers used for *building* packages, containers for
+*running* packages, and containers used for the bot.
+
+.. details:: Containers vs images
+
+    An image is like a static snapshot, while a container is a running instance
+    of an image. A single image can be used to start multiple containers. Changes
+    made to a container are not saved back to the original image used to start the
+    container, but it is possible to make a *new* image from the latest state
+    of a container . . . which can later be used image to start yet more
+    containers that start from that latest state.
+
+.. details:: Docker, podman, buildah, OCI
+
+  Open Container Initiative (OCI) specification defines the format of images.
+  Buildah is a tool for creating OCI images, and podman is a tool for running
+  them. Docker is a tool for both creating OCI images and running containers
+  made from them.
+
+
+Overview of containers used in building
+---------------------------------------
+
+For every recipe, Bioconda builds not only conda packages for mulitple
+architectures like osx, linux/amd64, linux/arm64, but also OCI images
+(linux/amd64, linux/arm64) with the package installed. Here's how it works.
+
+.. figure:: ../images/bioconda-containers.png
+
+   Sketch of how containers and packages interact with :command:`bioconda-utils
+   build --docker --mulled-test`. See below for details. [:download:`excalidraw
+   <../images/bioconda-containers.excalidraw>`] [:download:`SVG
+   <../images/bioconda-containers.svg>`]
+
+**Description of steps:**
+
+These steps are all coordinated with running :command:`bioconda-utils build
+pkgname` in the bioconda-recipes repo.
+
+
+1. Recipe on the host is mounted as a volume in the build container.
+   The host's conda-bld directory is also mounted in the container. We call this
+   the *build-env* container.
+2. The build-env container uses conda-build to build a conda package from the
+   mounted recipe.
+3. The newly-built conda package is saved in the conda-bld directory mounted from the
+   host. The build-env container exits.
+4. The new conda package is mounted into a minimal container that has
+   conda installed (but *not* conda-build or bioconda-utils or any other
+   dependencies). This is the *create-env* container.
+5. The package is installed (with :command:`conda install`) into create-env's
+   conda environment. This of course includes all dependencies specified in the recipe.
+   The recipe's test commands are also extracted.
+6. Only the contents of the :file:`env/` directory in the *create-env*
+   container are copied over into the :file:`/usr/local` dir of a minimal *base
+   container* (which does not even include conda). The extracted tests are run
+   in the container as a final check (see notes below on
+   :command:`--mulled-test`), and then the container is ready to upload to
+   a container registry.
+
+Why do we do it this way? The short answer is to ensure that all dependencies
+are accurately captured in the recipe.
+
+More details on this rationale:
+
+We build on multiple CI providers (CircleCI, GitHub Actions, Azure DevOps). Any
+one of these providers may install or update libraries on their hosts at any
+time. If we didn't use containers for isolation when building packages,
+a package could silently depend on those system libraries when building. While
+the build might work on CI that already has those libraries, it will be broken
+on ar machine without those libraries.
+
+So :command:`bioconda-utils build --docker` runs conda-build inside a Docker
+container, isolating it from the host and preventing any host libraries from
+being used. As with a normal :command:`conda build` command, the resulting
+package is found in the host's :file:`conda-bld` directory. This is illustrated
+in steps 1-3 above.
+
+When we additionally use the :command:`--mulled-test` argument,
+:program:`bioconda-utils` will run :program:`mulled-build` from the `galaxy-lib
+<https://galaxy-lib.readthedocs.io/en/latest/topics/mulled.html>`_ package.
+:program:`mulled-build` is a tool to convert conda packages into Docker images.
+It uses `involucro <https://github.com/involucro/involucro>`_ to make a final,
+minimal image with a dramatically reduced file size. This is illustrated in
+steps 4-6 above.
+
+The base image has very few packages or libraries installed -- not even conda.
+So the end result is a fully-isolated, minimal Docker image with nothing but
+the installed package and its dependencies (and therefore a small size), ready
+to be uploaded to a repository.
+
+Note that :command:`--mulled-test` runs the tests extracted from the recipe in
+the minimal container. Since the container only contains the package and its
+dependencies, any tests must use only these. Even if the recipe specifies
+additional test dependencies or additional test data (which is supported by
+standard conda-build), these are not copied over to the final image and tests
+with additional dependencies will therefore fail.
+
+Details of containers using in building
+---------------------------------------
+
+The **build-env image** is used for *building* a package in a manner that is
+isolated from the host. The built package appears back on the host's local
+channel.
+
+The **create-env image** is used by mulled-build for creating a conda
+environment with the package and dependencies installed in such a way that the
+resulting conda env can be easily copied out by involucro.
+
+The **base image** is used by involucro as a starting image into which it will
+copy the conda env created by mulled-build in the conda image
+
+The **extended base image** is used in rare cases where very minimal base image
+is *too* minimal. In this case, recipe authors can specify
+``container:extended-base:true`` in the meta.yaml file, and the extended image
+will be used as the base instead.
+
+Here are the images, their respective Dockerfiles, and their quay.io repository
+names. All images are built in the `bioconda-utils build-images GitHub Action
+workflow
+<https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/build-images.yml>`_.
+
+The base image and extended base image have major.minor.patch versions (e.g.,
+``1.2.3``) as their tags. The build-env image and the create-env image have
+both the bioconda-utils version as well as the base image version (e.g.,
+``2.11.1-base1.2.3``). This is because the images loosely depend on each other
+for things like locale, and exact version of conda/mamba.
+
+.. list-table::
+  :header-rows: 1
+  :class: inventory
+
+  * - description
+    - image
+    - maintained in
+    - dockerfile
+    - built by
+
+  * - build image
+    - ``quay.io/bioconda/bioconda-utils-build-env-cos7``
+    - bioconda-utils
+    - `Dockerfile <https://github.com/bioconda/bioconda-utils/blob/master/Dockerfile>`_
+    - `GitHub Action workflow <https://github.com/bioconda/bioconda-utils/blob/master/.github/workflows/build-image.yml>`_
+
+  * - conda image
+    - ``quay.io/bioconda/create-env:latest``
+    - bioconda-containers
+    - `Dockerfile <https://github.com/bioconda/bioconda-containers/blob/main/images/create-env/Dockerfile>`_
+    - `GitHub Action workflow <https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/create-env.yaml>`_
+
+  * - base image
+    - ``quay.io/bioconda/base-glibc-busybox-bash:3.0``
+    - bioconda-containers
+    - `Dockerfile <https://github.com/bioconda/bioconda-containers/blob/main/images/base-glibc-busybox-bash/Dockerfile>`_
+    - `GitHub Action workflow <https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/base-glibc-busybox-bash.yaml>`_
+
+  * - extended base image
+    - ``quay.io/bioconda/base-glibc-debian-bash:3.0``
+    - bioconda-containers
+    - `Dockerfile <https://github.com/bioconda/bioconda-containers/blob/main/images/base-glibc-debian-bash/Dockerfile>`_
+    - `GitHub Action workflow <https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/base-glibc-debian-bash.yaml>`_
+
+As of Nov 2023, each of these is configured to be built on both amd64 and arm64
+(a.k.a x86_64 and aarch64) architectures.
+
+In the actual :program:`bioconda-utils` code, the containers are specified in
+several ways. Note that the links to code below point to specific commits in
+order to highlight a line, so these may not be the most up-to-date code. But it
+can give you a starting point for where to look.
+
+- The build image is configured in `bioconda_utils/cli <https://github.com/bioconda/bioconda-utils/blob/2c5d4ad754f7bfa17b90495dc602118c7270d4bc/bioconda_utils/cli.py#L473>`_.
+
+- mulled-build pays attention to `env vars
+  <https://github.com/galaxyproject/galaxy/blob/01c4de53162f4e4ee306ebdd008199a897222dc3/lib/galaxy/tool_util/deps/mulled/mulled_build.py>`_
+  that define what images to use.
+
+- `bioconda_utils.pkg_test.test_package()
+  <https://github.com/bioconda/bioconda-utils/blob/2c5d4ad754f7bfa17b90495dc602118c7270d4bc/bioconda_utils/pkg_test.py#L172>`_
+  sets DEST_BASE_IMAGE to the `base_image` arg, which in turn is set in
+  `bioconda_utils.build.build()
+  <https://github.com/bioconda/bioconda-utils/blob/2c5d4ad754f7bfa17b90495dc602118c7270d4bc/bioconda_utils/build.py#L125-L129>`_.
+  This can take one of two hard-coded values, depending on if the recipe needed
+  an extended image or not.
+
+- mulled-build also needs a conda image to use. This is set by bioconda-utils
+  in `pkg_test.py
+  <https://github.com/bioconda/bioconda-utils/blob/2c5d4ad754f7bfa17b90495dc602118c7270d4bc/bioconda_utils/pkg_test.py#L20>`_
+  which is then passed to `build.build
+  <https://github.com/bioconda/bioconda-utils/blob/2c5d4ad754f7bfa17b90495dc602118c7270d4bc/bioconda_utils/build.py#L61>`_.
+
+
+The bot
+-------
+
+The BiocondaBot responds to comments on PRs an interacts with some artifacts
+created by package builds. In order to have rapid response times, the bot is
+implemented as a set of tagged Docker containers.
+
+The bot actions largely consist of relatively simple HTTP requests. The code
+for these actions is maintained in the `src/bioconda_bot
+<https://github.com/bioconda/bioconda-containers/tree/main/images/bot/src/bioconda_bot>`_
+Python package, within the bioconda-containers repo. There are different tagged
+images for the different behaviors of the bot, which are built and pushed in
+the `bot.yaml
+<https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/bot.yaml>`_
+GitHub Action workflow in the bioconda-containers repo. For example, the
+comment behavior on bioconda-recipes is defined `here
+<https://github.com/bioconda/bioconda-recipes/blob/master/.github/workflows/CommentResponder.yml#L17-L44>`_,
+which uses the ``quay.io/bioconda/bot:comment`` container, sets some env
+variables that GitHub Actions has access to, and runs :command:`bioconda-bot
+comment` in the container. This container was created `here
+<https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/bot.yaml#L34-L46>`_,
+when the `matrix.tag was set to "comment"
+<https://github.com/bioconda/bioconda-containers/blob/main/.github/workflows/bot.yaml#L20>`_.
diff --git a/source/developer/index.rst b/source/developer/index.rst
index d8fa3c5..37f721a 100644
--- a/source/developer/index.rst
+++ b/source/developer/index.rst
@@ -9,4 +9,6 @@ Developer Docs
     bulk
     repodata_patching
     ci-inventory
-
+    dockerfile-inventory
+    repo-inventory
+    aarch64
diff --git a/source/developer/repo-inventory.rst b/source/developer/repo-inventory.rst
new file mode 100644
index 0000000..8976444
--- /dev/null
+++ b/source/developer/repo-inventory.rst
@@ -0,0 +1,55 @@
+Repository inventory
+====================
+
+.. list-table::
+  :header-rows: 1
+  :class: inventory
+
+  * - repo
+    - description
+
+  * - `bioconda-recipes <https://github.com/bioconda/bioconda-recipes>`_
+    - Recipes that are automatically built
+
+  * - `bioconda-utils <https://github.com/bioconda/bioconda-utils>`_
+    - The build system that orchestrates everything
+
+  * - `bioconda-docs <https://github.com/bioconda/bioconda-docs>`_
+    - Home of the documentation
+
+  * - `bioconda-common <https://github.com/bioconda/bioconda-common>`_
+    - Centralized location for installation/config
+
+  * - `bioconda-containers <https://github.com/bioconda/bioconda-containers>`_
+    - Dockerfiles and CI config for building :ref:`bioconda containers <dockerfile-inventory>`
+
+  * - `bioconda.github.io <https://github.com/bioconda/bioconda.github.io>`_
+    - Docs built by bioconda-docs are pushed here for hosting by GitHub
+
+  * - `bioconda-stats <https://github.com/bioconda/bioconda-stats>`_
+    - Gathers and stores statistics from the bioconda channel
+
+  * - `bioconda-plots <https://github.com/bioconda/bioconda-plots>`_
+    - Converts data from bioconda-stats into plots used by the docs
+
+  * - `bioconda-paper <https://github.com/bioconda/bioconda-paper>`_
+    - Code and data for generating the figures in https://doi.org/10.1038/s41592-018-0046-7
+
+  * - `bioconda-tests <https://github.com/bioconda/bioconda-tests>`_
+    - Intended to trigger periodic tests of all packages
+
+  * - `bioconda-outreach <https://github.com/bioconda/bioconda-outreach>`_
+    - Presentations and training materials
+
+  * - `bioconda-actions <https://github.com/bioconda/bioconda-actions>`_
+    - DEPRECATED, previously used for factoring out GitHub Actions
+
+  * - `bioconda-repodata-patches <https://github.com/bioconda/bioconda-repodata-patches>`_
+    - DEPRECATED, this is now moved to the corresponding `recipe <https://github.com/bioconda/bioconda-recipes/tree/master/recipes/bioconda-repodata-patches>`_
+
+  * - `bioconda-extended-base-image <https://github.com/bioconda/bioconda-repodata-patches>`_
+    - DEPRECATED, this is now handled in `bioconda-containers <https://github.com/bioconda/bioconda-containers>`_
+
+  * - `quay.io/organization/bioconda <https://quay.io/organization/bioconda>`_
+    - Docker containers
+
diff --git a/source/developer/repodata_patching.rst b/source/developer/repodata_patching.rst
index b54502b..539a05a 100644
--- a/source/developer/repodata_patching.rst
+++ b/source/developer/repodata_patching.rst
@@ -7,17 +7,22 @@ That wouldn't be a problem, except nanoqc doesn't restrict the range of `bokeh`
 that can be installed. Thus, you and everyone else in the world, will
 constantly get non-functional installs whenever creating new environments with
 nanoqc. Sure you can get around this with `conda create -n nanoqc nanoqc bokeh=2.4.3`,
-but that still leaves things broken for everyone else in the world. Wouldn't it
-be nice if you could just fix the nanoqc package, in place, such that it
-magically contains a restriction on the version of bokeh that it depends on? It
-turns out you **CAN** do this with repodata patching.
+but that still leaves things broken for everyone else in the world. Another
+option would be to update the nanoqc recipe in bioconda-recipes, and this
+should also be done if the latest version is problematic, but this would not
+solve all other existing, earlier versions of nanoqc packages that also do not
+restrict bokeh.
+
+Wouldn't it be nice if you could just fix the nanoqc package, in place, such
+that it magically contains a restriction on the version of bokeh that it
+depends on? It turns out you **CAN** do this with repodata patching.
 
 What is repodata?
 -----------------
 
 Repodata is a JSON file that contains a variety of information for each package
-in Bioconda. There is one for each architecture (linux-64, osx-64, noarch, etc.)
-and they're hosted by bioconda. For example, the noarch repodata.json file `is
+in Bioconda. There is one for each architecture (linux-64, linux-aarch64, osx-64, noarch, etc.)
+and they're hosted in the bioconda channel. For example, the noarch repodata.json file `is
 available here <https://conda.anaconda.org/bioconda/noarch/repodata.json>`_.
 Let's take a look at the what sorts of things are stored within this file for a
 single package:
@@ -60,9 +65,10 @@ This is what's used by `conda` and `mamba` for determining what packages exist
 and their dependencies. Note that the exact fields have changed over time, with
 older packages lacking things like the `timestamp` value.
 
-In order to add/remove/update a dependency, we need to modify the `depends` list
-in each package that should be modified. We can't directly modify these files,
-instead we need to patch them with the bioconda-repodata-patches package.
+In order to add/remove/update a dependency (like restricting the bokeh
+version), we need to modify the `depends` list in each package that should be
+modified. We can't directly modify these files, instead we need to patch them
+with the bioconda-repodata-patches package.
 
 The bioconda-repodata-patches package
 -------------------------------------
@@ -77,9 +83,11 @@ each architecture::
     │   └── patch_instructions.json
     └── osx-64
         └── patch_instructions.json
+..
+  TODO: update when bioconda-repodata-patches is updated with linux-aarch64
 
-For an individual package, the json file will contain the updated dependencies.
-For the `nanoqc` example above, that would look like::
+For an individual package, the json file will eventually contain the updated dependencies.
+For the `nanoqc` example above, that will eventually look like::
 
     "nanoqc-0.9.4-py_0.tar.bz2": {
       "depends": [
@@ -92,11 +100,15 @@ For the `nanoqc` example above, that would look like::
 
 Thankfully, you do not need to manually update each package and in fact if you
 do your changes will almost certainly be lost over time. Instead, within the
-`bioconda-repodata-patches` recipe, edit and run the `gen_patch_json.py` script.
+`bioconda-repodata-patches` recipe, edit and run the `gen_patch_json.py` script
+as described below.
 
 Modifying gen_patch_json.py
 ---------------------------
 
+We will be working in the `bioconda-repodata-patches recipe
+<https://github.com/bioconda/bioconda-recipes/tree/master/recipes/bioconda-repodata-patches>`_.
+
 The `gen_patch_json.py` file is borrowed from conda-forge and has one function
 that should typically be modified: `_gen_new_index`. Within this function, each
 record in repodata.json is iterated over and changes that should be made to it
diff --git a/source/faqs.rst b/source/faqs.rst
index e2c6f75..e0f3d31 100644
--- a/source/faqs.rst
+++ b/source/faqs.rst
@@ -15,6 +15,7 @@ How do I speed up package installation?
 Speedup option 1: use ``mamba``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+
 `mamba <https://github.com/mamba-org/mamba>`_ is a drop-in replacement for
 conda that uses a faster dependency solving library and parts reimplemented in
 C++ for speed. Install it just into the base environment so that it's always
@@ -39,10 +40,11 @@ channels.
 
 Speedup option 2: use environments strategically
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 Here are several ways you can use environments to minimize the time spent on
 solving dependencies, which typically is what takes the longest amount of time:
 
-1. Keep the ``base`` environment small.
+1. **Keep the base environment small.**
 
    If you install everything into the same environment (e.g. the ``base``
    environment, which is used any time you don't otherwise specify an
@@ -50,73 +52,61 @@ solving dependencies, which typically is what takes the longest amount of time:
    to do a lot of work to make sure all of the many packages are mutually
    compatible with each other.
 
-2. Use smaller environments.
+2. **Use smaller environments.**
 
    Fewer packages means less work for the solver. Try to use environments only
    containing what you need for a particular project or task.
 
-3. Pin dependencies.
+3. **Pin dependencies.**
 
    Sometimes pinning dependencies to a specific version can speed up the
    solving, since it reduces the search space for the solver. In some cases
    this may backfire though. For example, you can't pin an older version of
    R and also use newer R packages that don't support that version of R.
 
-4. Create an environment from a file with all dependencies.
+4. **Create an environment from a file with all dependencies.**
 
    Creating an environment with all dependencies at once can be faster than
    incrementally adding packages to an existing environment. For example
    ``conda create -n myenv --file requirements.txt``, or ``conda env create
    --file env.yaml``.
 
-5. Use strict channel priority.
+5. **Use strict channel priority.**
 
    Ensure that you've run ``conda config --set channel_priority strict`` to
-   respect the configured channel order. This can also speed up the solving.
+   respect the configured channel order, as recommended in the setup
+   instructions. This can also speed up the solving.
 
 What versions are supported?
 ----------------------------
 
-Operating Systems
-~~~~~~~~~~~~~~~~~
-
-Bioconda only supports 64-bit Linux and macOS. ARM is not currently supported.
+**Operating Systems:**
+Bioconda supports Linux (x86_64 and aarch64/arm64) and
+macOS (x86_64). ARM is not currently supported for macOS. Windows is not
+supported.
 
-Python
-~~~~~~
+**Python:**
+Bioconda currently supports Python 3.8, 3.9, and 3.10 (see "pinned packages"
+below for where this is configured). There are still packages in the Bioconda
+channel for earlier versions of Python (2.7, 3.6, and 3.7), but new packages
+are not built for these versions.
 
-Bioconda only supports Python 3.8, 3.9 and 3.10.
+Packages which declare `noarch: python` and only depend on packages that also
+declare `noarch: python` can be installed in an environment with any version of
+Python they say they can support. However many Python packages in Bioconda
+depend on other Bioconda packages with architecture specific builds, such as
+`pysam`, and so do not meet this criteria.
 
-The exception to this is Bioconda packages which declare `noarch: python` and
-only depend on such packages - those packages can be installed in an
-environment with any version of Python they say they can support. However many
-python packages in Bioconda depend on other Bioconda packages with architecture
-specific builds, such as `pysam`, and so do not meet this criteria.
+.. datechanged:: 2022-09-01
+   Python 3.10 support started in Aug 2022
 
 
-Pinned packages
-~~~~~~~~~~~~~~~
+.. datechanged:: 2023-05-01
+   Python 2.7, 3.6, 3.7 support were dropped for new recipes in May 2023.
 
-Some packages require `ABI
-<https://en.wikipedia.org/wiki/Application_binary_interface>`_ compatibility
-with underlying libraries. To ensure that packages can work together, there are
-some libraries that need to be *pinned*, or fixed to a particular version.
-Other packages are then built with that specific version (and therefore that
-specific ABI) to ensure they can all work together.
-
-The authoritative source for which packages are pinned and to which versions
-can be found in the `bioconda_utils-conda_build_config.yaml
-<https://github.com/bioconda/bioconda-utils/blob/master/bioconda_utils/bioconda_utils-conda_build_config.yaml>`_
-file.
-
-This is *in addition to* the conda-forge specified versions,
-`conda_build_config.yaml
-<https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_
-which pins versions of base dependencies like boost, zlib, and many others.
-
-Unsupported versions
-~~~~~~~~~~~~~~~~~~~~
+**Globally-pinned versions:** See :ref:`global-pinning` for details.
 
+**Unsupported versions:**
 If there is a version of a dependency you wish to build against that Bioconda
 does not currently support, please reach out to the `Bioconda Gitter
 <https://gitter.im/bioconda/Lobby>`_ for more information about if supporting
@@ -133,7 +123,7 @@ You can view your created environments with ``conda env list``.
 
 Note that if keeping track of different environment names
 becomes a burden, you can create an environment in the same directory as
-a project with the ``-p`` argument, e.g., 
+a project with the ``-p`` argument, e.g.,
 
 .. code-block:: bash
 
@@ -150,16 +140,30 @@ maintain) the same environment.
 
 .. _conda-anaconda-minconda:
 
-What's the difference between Anaconda, conda, Miniconda, and mamba?
---------------------------------------------------------------------
+What's the difference between Anaconda, conda, Miniconda, mamba, Mambaforge, micromamba?
+----------------------------------------------------------------------------------------
+
+This `blog post from Anaconda <https://www.anaconda.com/blog/is-conda-free>`_
+gives a lot of context on the Anaconda/conda ecosystem.
 
-- conda is the name of the package manager, which is what runs when you call,
+
+- **conda** is the name of the package manager, which is what runs when you call,
   e.g., ``conda install``.
-- mamba is a drop-in replacement for conda (see above for details)
-- Anaconda is a large installation including Python, conda, and a large number
+- **mamba** is a drop-in replacement for conda
+- **Anaconda** is a large installation including Python, conda, and a large number
   of packages.
-- Miniconda just has conda and its dependencies (in contrast to the larger
-  Anaconda distribution).
+- **Miniconda** just has conda and its dependencies (in contrast to the larger
+  Anaconda distribution)
+- **Miniforge** is like miniconda, but with the conda-forge channel
+  preconfigured and all packages coming from the conda-forge and *not* the
+  ``defaults`` channel. It also now has mamba and libmamba included.
+- **Mambaforge** is like miniforge, but has mamba installed into the base
+  environment. While not strictly deprecated, its use is discouraged as of
+  Sept 2023 (see `miniforge README <https://github.com/conda-forge/miniforge>`_)>
+- **Micromamba** is not a conda distribution. Rather, it is a minimal binary
+  that has roughly the same commands as mamba, so that a single executable
+  (rather than an entire Python installation required for conda itself) can be
+  used to create environments. Micromamba is currently still experimental.
 
 The `Anaconda Python distribution <https://www.continuum.io/downloads>`_
 started out as a bundle of scientific Python packages that were otherwise
@@ -181,8 +185,15 @@ This installs only what you need to run conda itself, which can then be used to
 create other environments. So the "mini" in Miniconda means that it's
 a fraction of the size of the full Anaconda installation.
 
-So: conda is a package manager, Miniconda is the conda installer, and Anaconda
-is a scientific Python distribution that also includes conda.
+Then the conda-forge channel gained popularity. Miniforge was developed to
+quickly and easily get a conda-forge-ready conda installation. Then as mamba
+gained popularity, the Mambaforge variant was created.
+
+Even with those easier methods, sometimes the entire base Python installation that comes with conda/mamba was too much overhead. Micromamba has a single binary that is very fast to install, and is perfect for CI environments.
+
+So: conda is a package manager, Anaconda is a scientific Python distribution
+that also includes conda, and the rest are other flavors of getting
+a conda/mamba installation.
 
 What's the difference between a recipe and a package?
 -----------------------------------------------------
@@ -209,22 +220,6 @@ with ``conda install``.
     what a package contains and how it is installed into an
     environment.
 
-What's the difference between miniconda, miniforge, mambaforge, micromamba?
----------------------------------------------------------------------------
-
-**Miniconda** is the slimmed-down version of the Anaconda distribution;
-miniconda only has conda and its dependencies.
-
-**Miniforge** is like miniconda, but with the conda-forge channel preconfigured
-and all packages coming from the conda-forge and *not* the ``defaults``
-channel.
-
-**Mambaforge** is like miniforge, but has mamba installed into the base environment.
-
-**Micromamba** is not a conda distribution. Rather, it is a minimal binary that
-has roughly the same commands as mamba, so that a single executable (rather
-than an entire Python installation required for conda itself) can be used to
-create environments. Micromamba is currently still experimental.
 
 Why are Bioconductor data packages failing to install?
 ------------------------------------------------------
@@ -341,7 +336,7 @@ everywhere in conda-forge and Bioconda to maintain ABI compatibility
 conda-forge pinnings `here
 <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/main/recipe/conda_build_config.yaml>`_,
 and the bioconda-specific ones `here
-<https://github.com/bioconda/bioconda-utils/blob/master/bioconda_utils/bioconda_utils-conda_build_config.yaml>`_. 
+<https://github.com/bioconda/bioconda-utils/blob/master/bioconda_utils/bioconda_utils-conda_build_config.yaml>`_.
 
 In the case of samtools, that hash ``h1170115`` incorporates the packages and
 versions of all of its dependencies that are pinned. That includes gcc, zlib,
@@ -373,3 +368,208 @@ The ``--no-builds`` argument completely removes the build number from the
 output, avoiding future errors when trying to rebuild the environment, and
 allowing the conda solver to identify the packages that can co-exist in the
 same environment.
+
+How are dependencies pinned to particular versions?
+---------------------------------------------------
+
+In some cases a recipe may need to pin the version of a dependency.
+A global set of default versions to pin against is shared with conda-forge and
+can be found `here <https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_.
+For new dependencies that are contained in conda-forge and not yet in this list,
+please update the list via a pull request.
+Local pinnings can be achieved by adding a file ``conda_build_config.yaml`` next
+to your ``meta.yaml``.
+
+To find out against which version you can pin a package, e.g. x.y.* or x.* please use `ABI-Laboratory <https://abi-laboratory.pro/tracker/>`_.
+
+What's the lifecycle of a bioconda package?
+-------------------------------------------
+
+- Submit a pull request with a new recipe or an updated recipe
+- CI (see :ref:`ci-inventory`) automatically builds and tests the changed
+  recipe[s] using conda-build. Test results are shown on the PR.
+- If tests fail, push changes to PR until they pass.
+- Once tests pass, merge into master branch
+- CI tests again, but this time after testing the built packages are
+  uploaded to the bioconda channel on anaconda.org.
+- Users can now install the package just like any other conda package with
+  ``conda install``.
+
+Once uploaded to anaconda.org, it is our intention to never delete any old
+packages. Even if a recipe in the bioconda repo is updated to a new version,
+the old version will remain on anaconda.org. ContinuumIO has graciously agreed
+to sponsor the storage required by the bioconda channel.
+Nevertheless, it can sometimes happen that we have to mark packages as broken
+in order to avoid that they are accidentally pulled by the conda solver.
+In such a case it is only possible to install them by specifically considering
+the ``broken`` label, i.e.,
+
+.. code-block:: bash
+
+    conda install -c conda-forge -c bioconda -c defaults -c bioconda/label/broken my-package=<broken-version>
+
+Where can I find more info on ``meta.yaml``?
+--------------------------------------------
+
+The ``meta.yaml`` file is conda's metadata definition file for recipes.
+If you are developing a new recipe or are trying to update or improve an existing one, it can be helpful to know
+which elements and values can appear in ``meta.yaml``.
+
+Conda has this information available `here
+<https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html>`_.
+Please check that you are looking at the correct version of the documentation
+for the current conda version used by bioconda.
+
+What are the ``host`` and ``build`` sections of a recipe?
+---------------------------------------------------------
+
+The ``requirements:build`` section of a meta.yaml file is used to specify the
+tools for *building* the package, but not necessarily for *running* it. This is
+where compilers should go. The build section might also include tools like
+``make``, ``automake``, ``cmake``, or ``git``. If there are no compilers or
+other build tools, there should be no ``build:`` section.
+
+The ``requirements:host`` section is used to specify *shared libraries*. It was
+originally introduced to support cross-compiling (e.g., build on linux-64 but
+output a package to be used on linux-aarch64) and the shared libraries here are
+what's needed on the target (e.g. linux-aarch64 in this example). In practice,
+this is where the base interpreter ``python`` or ``r-base`` should go for
+Python and R packages. ``pip`` is usually here as well, and ``setuptools`` if
+it is required for the build process. ``cython`` would go here. If a package
+`builds against numpy
+<https://conda-forge.org/docs/maintainer/knowledge_base.html#building-against-numpy>`_,
+then ``numpy`` should go here (otherwise, it should go in the ``run:``
+requirements). Shared libraries like ``zlib``, ``hdf5``, ``libcurl``, and
+``htslib`` should go here in ``requirements:host``.
+
+The ``requirements:run`` section of a meta.yaml is used to specify the
+*runtime* dependencies of the package.
+
+.. seealso::
+
+    See the `requirements section <conda-build:requirements>` of the
+    conda docs for more info.
+
+
+.. _compiler-tools:
+
+Compiler tools
+--------------
+
+Use the syntax ``{{ compiler('c') }}``, ``{{ compiler('cxx') }}``, and/or ``{{
+compiler('fortran') }}``. These should go in the ``build`` section, and all
+other build dependencies should go in the ``host`` section.
+
+Anaconda provides platform-specific compilers that are automatically
+determined. The string ``{{ compiler('c') }}`` will resolve to ``gcc`` on
+Linux, but ``clang`` on macOS (osx-64).
+
+
+.. seealso::
+
+    - The `compiler tools <conda-build:compiler-tools>` section of the
+      conda docs has much more info.
+
+    - The default compiler options are defined by conda-build in the
+      `variants.DEFAULT_COMPILERS
+      <https://github.com/conda/conda-build/blob/master/conda_build/variants.py#L42>`_
+      variable.
+
+    - More details on "strong" and "weak" exports (using examples of
+      libpng and libgcc) can be found in the `export runtime
+      requirements <conda-build:run_exports>` conda documentation.
+
+
+.. _global-pinning:
+
+How does global pinning work?
+-----------------------------
+
+We can have conflicts when the version of a common library used when the
+package is originally *built* differs from the version when the package is
+*installed*. All packages intending to be installed into the same environment
+should be built using the same versions of common libraries so that they can
+co-exist. **Global pinning** is the idea of making sure all recipes use the
+same versions of common libraries.
+
+For example, many bioinformatics tools have ``zlib`` as a dependency.
+The version of ``zlib`` used when building the package should be the same as the
+version used when installing the package into a new environment. This implies
+that we need to specify the ``zlib`` version in one place and have *all recipes
+intended to coexist in the same environment* use that version.
+
+This is configured with special build config files. Since we rely heavily on
+the conda-forge channel, the bioconda build system installs the conda-forge
+`conda_build_config.yaml
+<https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/master/recipe/conda_build_config.yaml>`_
+into our build environment so that it can be used for building all recipes.
+This is then combined with the bioconda-specific
+`bioconda-Utils-conda_build_config.yaml
+<https://github.com/bioconda/bioconda-utils/blob/master/bioconda_utils/bioconda_utils-conda_build_config.yaml>`_.
+Note that in some cases the bioconda config may override some of the
+conda-forge configs. For example, historically, we did this when we wanted to
+support older Python versions.
+
+The idea here is to specify that any time a dependency (``zlib``, in our
+running example) is used as a build dependency, it should also be automatically
+be installed as a run dependency without having to explicitly add it as such in
+the recipe. This specification is done in the ``zlib`` recipe itself (which is
+hosted by conda-forge), so in general bioconda collaborators can just add
+``zlib`` as a build dependency.
+
+Note that we don't have to specify the version of ``zlib`` in the recipe -- it
+is pinned in that ``conda_build_config.yaml`` file we share with conda-forge.
+
+In a similar fashion, the reason that we don't have to specify ``libgcc`` as
+a *run* dependency is that ``{{ compiler('c') }}`` automatically exports
+``libgcc`` as a run dependency of any package that uses the C compiler to
+build.
+
+.. _platform-nomenclature-faq:
+
+Understanding platform nomenclature
+-----------------------------------
+
+.. datechanged:: 2024-03-04
+   Added section
+
+Different CPU chips use different architecture, so programs are written
+fundamentally differently for them. A package with compiled dependencies must
+therefore use platform-specific dependencies.
+
+There is a lot of confusing nomenclature surrounding them. Here is an attempt
+at clearing them up, or at least providing enough context that you can look up
+more details on your own:
+
+**ISA, instruction set, CISC, RISC, RISC-V**: The *instruction set* is the assembly
+code commands that are possible for the chip. *CISC* is "complex instruction
+set computer" which prioritizes flexibility. *RISC* is "reduced instruction set
+computer" which prioritizing power consumption (this is an oversimplification,
+but that's the general idea). Instruction sets can be proprietary. `Arm
+<https://arm.com/company>`_ is a company that licenses a widely-used
+proprietary reduced instruction set. RISC-V is an open (non-proprietary)
+reduced instruction set.
+
+**Arm vs ARM:** Arm is the company that licenses the proprietary instruction
+set. For example, they license it to Apple to run on their M-series chips. ARM
+(in all caps) refers to the family of RISC instruction sets, and by extension
+chips that use the instruction sets. It is also an acronym for Advanced RISC
+Machines and the eariler Acorn RISC Machine. This `blog post
+<https://nickdesaulniers.github.io/blog/2023/03/10/disambiguating-arm/>`_ goes
+into lots more detail.
+
+``x86_64``, ``amd64``: These are synonyms for the original Intel/AMD
+architecture.
+
+``linux/x86_64``, ``linux/arm64``, ``darwin/amd64``: These are the platform
+designators when using Docker (see `multi-platform images
+<https://docs.docker.com/build/building/multi-platform/>`_ in the Docker
+documentation).
+
+``linux-64``, ``linux-aarch64``, ``osx-64``, ``osx-arm64``: These are the
+platform designators used by conda in channels hosted by Anaconda.
+
+``aarch64``, ``arm64``: These are synonyms for ARM 64-bit architecture.
+
+**M1, M2, M3, Apple Silicon**: These are chips made by Apple and used in Macs.
+Apple licenses the ARM RISC, so they are considered aarch64 or arm64.
diff --git a/source/images/bioconda-containers.excalidraw b/source/images/bioconda-containers.excalidraw
new file mode 100644
index 0000000..5791dcb
--- /dev/null
+++ b/source/images/bioconda-containers.excalidraw
@@ -0,0 +1,1656 @@
+{
+  "type": "excalidraw",
+  "version": 2,
+  "source": "https://excalidraw.com",
+  "elements": [
+    {
+      "type": "rectangle",
+      "version": 428,
+      "versionNonce": 1274662954,
+      "isDeleted": false,
+      "id": "Ry0HXcfp2TtDCwDgRSN05",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 315.244140625,
+      "y": 439.88203125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "#ffd43b",
+      "width": 641.97265625,
+      "height": 29.2,
+      "seed": 591301005,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "92AKwAgt4H6S0AAjrQu_3"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 492,
+      "versionNonce": 1701453686,
+      "isDeleted": false,
+      "id": "92AKwAgt4H6S0AAjrQu_3",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 570.60546875,
+      "y": 444.88203125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 131.25,
+      "height": 19.2,
+      "seed": 1410176237,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "bioconda-utils",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "Ry0HXcfp2TtDCwDgRSN05",
+      "originalText": "bioconda-utils",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "rectangle",
+      "version": 494,
+      "versionNonce": 358759146,
+      "isDeleted": false,
+      "id": "DMfgmgWEVMH6fhFuNgxVr",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 504.8535156250001,
+      "y": 479.989453125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "#ffec99",
+      "width": 446.31640624999983,
+      "height": 29.2,
+      "seed": 129562083,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "ebIoI_c0AL2Mect1VXg5P"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 454,
+      "versionNonce": 354599094,
+      "isDeleted": false,
+      "id": "ebIoI_c0AL2Mect1VXg5P",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 671.76171875,
+      "y": 484.989453125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 112.5,
+      "height": 19.2,
+      "seed": 1102745517,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "mulled-build",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "DMfgmgWEVMH6fhFuNgxVr",
+      "originalText": "mulled-build",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "rectangle",
+      "version": 664,
+      "versionNonce": 1408191914,
+      "isDeleted": false,
+      "id": "abSQmI8Tl4VEY2QBVppey",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 733.376953125,
+      "y": 517.59375,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "#fff9db",
+      "width": 216.76171874999997,
+      "height": 29.2,
+      "seed": 1468203427,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "QDHZi5ciBJh_S7srIu1IG"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 653,
+      "versionNonce": 531970550,
+      "isDeleted": false,
+      "id": "QDHZi5ciBJh_S7srIu1IG",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 799.5703125,
+      "y": 522.59375,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 84.375,
+      "height": 19.2,
+      "seed": 1066980675,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "involucro",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "abSQmI8Tl4VEY2QBVppey",
+      "originalText": "involucro",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "line",
+      "version": 219,
+      "versionNonce": 1288439914,
+      "isDeleted": false,
+      "id": "cCiUDhdHKsMRPLATOl74B",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 152.51953125,
+      "y": 686.49609375,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 766.21484375,
+      "height": 0,
+      "seed": 2081779939,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "startBinding": null,
+      "endBinding": null,
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": null,
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          766.21484375,
+          0
+        ]
+      ]
+    },
+    {
+      "type": "text",
+      "version": 217,
+      "versionNonce": 2099417936,
+      "isDeleted": false,
+      "id": "lzBDka8XJXnQKztZ11Dxh",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 278.33984375,
+      "y": 748.20078125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 150,
+      "height": 19.2,
+      "seed": 507070019,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "YBQpyBT_TcIo47RBV5WZP",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1708529841161,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "recipes/pkgname/",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "recipes/pkgname/",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "text",
+      "version": 181,
+      "versionNonce": 1249839536,
+      "isDeleted": false,
+      "id": "uD7PB-jAZk41aqxRuaISt",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 469.8046875,
+      "y": 748.18125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 234.375,
+      "height": 19.2,
+      "seed": 797833347,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "Wv4FKPgKrMaF6iDzDn0Lx",
+          "type": "arrow"
+        },
+        {
+          "id": "z2WjdCLrgR50gxx-9Mp6i",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1708529841161,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "conda-bld/pkgname.tar.bz2",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "conda-bld/pkgname.tar.bz2",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "arrow",
+      "version": 1346,
+      "versionNonce": 1821449109,
+      "isDeleted": false,
+      "id": "YBQpyBT_TcIo47RBV5WZP",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 323.61229028882474,
+      "y": 736.7515625,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 19.372450779387577,
+      "height": 50.2429816377379,
+      "seed": 2043726947,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1709584334242,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "lzBDka8XJXnQKztZ11Dxh",
+        "gap": 11.44921875,
+        "focus": -0.4822151595925682
+      },
+      "endBinding": {
+        "elementId": "ZSPG8ACP4jq3ssZMYNzQW",
+        "gap": 13.940205936079337,
+        "focus": 0.20174636147394562
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          19.372450779387577,
+          -50.2429816377379
+        ]
+      ]
+    },
+    {
+      "type": "arrow",
+      "version": 1380,
+      "versionNonce": 2032700629,
+      "isDeleted": false,
+      "id": "Wv4FKPgKrMaF6iDzDn0Lx",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 504.06124691603935,
+      "y": 680.6695012070668,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 32.93216823870722,
+      "height": 58.85159254293319,
+      "seed": 1479936387,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1709584334241,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "ZSPG8ACP4jq3ssZMYNzQW",
+        "gap": 9.063868781165752,
+        "focus": -0.32741834502722905
+      },
+      "endBinding": {
+        "elementId": "uD7PB-jAZk41aqxRuaISt",
+        "gap": 8.66015625,
+        "focus": -0.32458329747209613
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          32.93216823870722,
+          58.85159254293319
+        ]
+      ]
+    },
+    {
+      "type": "arrow",
+      "version": 916,
+      "versionNonce": 1335473590,
+      "isDeleted": false,
+      "id": "z2WjdCLrgR50gxx-9Mp6i",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 578.3213788819246,
+      "y": 739.74765625,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 33.700690869569144,
+      "height": 83.9816591883033,
+      "seed": 2070448685,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "uD7PB-jAZk41aqxRuaISt",
+        "focus": -0.13192007287625357,
+        "gap": 8.43359375
+      },
+      "endBinding": {
+        "elementId": "Mp4CB3RLFFYLjwBEjjBCf",
+        "focus": 0.4992174931088646,
+        "gap": 1.4331845616966348
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          33.700690869569144,
+          -83.9816591883033
+        ]
+      ]
+    },
+    {
+      "type": "rectangle",
+      "version": 705,
+      "versionNonce": 1481517226,
+      "isDeleted": false,
+      "id": "YagLhsW7rU9oRtGDs3MVQ",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 815.67578125,
+      "y": 567.35546875,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 140.07812499999994,
+      "height": 93.99609375,
+      "seed": 471524227,
+      "groupIds": [
+        "qxo2_x0gTN9YPhOX7abNO"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "UOwu-SVo7CcdghHvhRNoO"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 735,
+      "versionNonce": 965054198,
+      "isDeleted": false,
+      "id": "UOwu-SVo7CcdghHvhRNoO",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 844.5771484375,
+      "y": 572.35546875,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 82.275390625,
+      "height": 46,
+      "seed": 1318681379,
+      "groupIds": [
+        "qxo2_x0gTN9YPhOX7abNO"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 2,
+      "text": "base \ncontainer",
+      "textAlign": "center",
+      "verticalAlign": "top",
+      "containerId": "YagLhsW7rU9oRtGDs3MVQ",
+      "originalText": "base container",
+      "lineHeight": 1.15,
+      "baseline": 42
+    },
+    {
+      "type": "rectangle",
+      "version": 776,
+      "versionNonce": 915899242,
+      "isDeleted": false,
+      "id": "90jJda8XDVExXoLSysirR",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 823.23828125,
+      "y": 623.15234375,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 129.57031250000003,
+      "height": 29.2,
+      "seed": 1352933059,
+      "groupIds": [
+        "qxo2_x0gTN9YPhOX7abNO"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "HBYY_8kDzFZ8A95N1D3Xr"
+        },
+        {
+          "id": "NixZifivTH-xD1rNFKj8g",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 867,
+      "versionNonce": 1126449206,
+      "isDeleted": false,
+      "id": "HBYY_8kDzFZ8A95N1D3Xr",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 841.1484375,
+      "y": 628.15234375,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 93.75,
+      "height": 19.2,
+      "seed": 1826180707,
+      "groupIds": [
+        "qxo2_x0gTN9YPhOX7abNO"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "/usr/local",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "90jJda8XDVExXoLSysirR",
+      "originalText": "/usr/local",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "arrow",
+      "version": 618,
+      "versionNonce": 1071442971,
+      "isDeleted": false,
+      "id": "NixZifivTH-xD1rNFKj8g",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 697.4339676060858,
+      "y": 643.6608595218478,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 117.65587614391416,
+      "height": 0.13468787353406242,
+      "seed": 359479811,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1709584345826,
+      "link": null,
+      "locked": false,
+      "startBinding": null,
+      "endBinding": {
+        "elementId": "90jJda8XDVExXoLSysirR",
+        "focus": -0.4175158043271526,
+        "gap": 8.1484375
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          117.65587614391416,
+          0.13468787353406242
+        ]
+      ]
+    },
+    {
+      "type": "rectangle",
+      "version": 528,
+      "versionNonce": 542820726,
+      "isDeleted": false,
+      "id": "y8aZgYOatYLM0Fa3dOUuj",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 586.07421875,
+      "y": 525,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 140.07812499999994,
+      "height": 136.27343750000003,
+      "seed": 2095935789,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "Gr5IokqxpJqxRSfCPzEZl"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 554,
+      "versionNonce": 1459001845,
+      "isDeleted": false,
+      "id": "Gr5IokqxpJqxRSfCPzEZl",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 606.0888671875,
+      "y": 530,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 100.048828125,
+      "height": 46,
+      "seed": 702595981,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1709584311047,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 2,
+      "text": "create-env \ncontainer",
+      "textAlign": "center",
+      "verticalAlign": "top",
+      "containerId": "y8aZgYOatYLM0Fa3dOUuj",
+      "originalText": "create-env container",
+      "lineHeight": 1.15,
+      "baseline": 42
+    },
+    {
+      "type": "rectangle",
+      "version": 612,
+      "versionNonce": 1064768379,
+      "isDeleted": false,
+      "id": "Mp4CB3RLFFYLjwBEjjBCf",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 588.9375,
+      "y": 625.1328125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 129.57031250000003,
+      "height": 29.2,
+      "seed": 1275482339,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "-3ke31NdzuocXVw_hkILy"
+        },
+        {
+          "id": "z2WjdCLrgR50gxx-9Mp6i",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1709584345825,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 694,
+      "versionNonce": 1692894122,
+      "isDeleted": false,
+      "id": "-3ke31NdzuocXVw_hkILy",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 634.97265625,
+      "y": 630.1328125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 37.5,
+      "height": 19.2,
+      "seed": 1030765699,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "env/",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "Mp4CB3RLFFYLjwBEjjBCf",
+      "originalText": "env/",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "rectangle",
+      "version": 614,
+      "versionNonce": 1644389366,
+      "isDeleted": false,
+      "id": "HZ-rnkXnVkb89LtWcmhUZ",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 590.48046875,
+      "y": 590.4585937500001,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 129.57031250000003,
+      "height": 29.2,
+      "seed": 180706349,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "x4SHbu6J53EOkI86YBWpP"
+        }
+      ],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 699,
+      "versionNonce": 1028488810,
+      "isDeleted": false,
+      "id": "x4SHbu6J53EOkI86YBWpP",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 631.828125,
+      "y": 595.4585937500001,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 46.875,
+      "height": 19.2,
+      "seed": 730025613,
+      "groupIds": [
+        "EBigXOisoe8W1KUQ3lS5K"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "conda",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "HZ-rnkXnVkb89LtWcmhUZ",
+      "originalText": "conda",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "text",
+      "version": 177,
+      "versionNonce": 656373046,
+      "isDeleted": false,
+      "id": "T80XglCa2EMVp9kTzyUad",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 176.8662109375,
+      "y": 592.29921875,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "#ffec99",
+      "width": 88.689453125,
+      "height": 32.199999999999996,
+      "seed": 1326686243,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 28,
+      "fontFamily": 2,
+      "text": "Docker",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "Docker",
+      "lineHeight": 1.15,
+      "baseline": 26
+    },
+    {
+      "type": "text",
+      "version": 215,
+      "versionNonce": 1957044522,
+      "isDeleted": false,
+      "id": "8U-iTgt9HlDYzlNCGtoI9",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 176.8662109375,
+      "y": 717.353125,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "#ffec99",
+      "width": 57.572265625,
+      "height": 32.199999999999996,
+      "seed": 1374987693,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337711919,
+      "link": null,
+      "locked": false,
+      "fontSize": 28,
+      "fontFamily": 2,
+      "text": "Host",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "Host",
+      "lineHeight": 1.15,
+      "baseline": 26
+    },
+    {
+      "type": "rectangle",
+      "version": 575,
+      "versionNonce": 906972693,
+      "isDeleted": false,
+      "id": "ZSPG8ACP4jq3ssZMYNzQW",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 312.4609375,
+      "y": 504.44337492618274,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 187.53515625,
+      "height": 168.12499999999997,
+      "seed": 2141807747,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "RSmIGjVVf1qi-P26cGPBy"
+        },
+        {
+          "id": "Wv4FKPgKrMaF6iDzDn0Lx",
+          "type": "arrow"
+        },
+        {
+          "id": "YBQpyBT_TcIo47RBV5WZP",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1709584334240,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 639,
+      "versionNonce": 1735581941,
+      "isDeleted": false,
+      "id": "RSmIGjVVf1qi-P26cGPBy",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 362.3125,
+      "y": 509.44337492618274,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 87.83203125,
+      "height": 46,
+      "seed": 1033868227,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1709584334242,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 2,
+      "text": "build-env\n container",
+      "textAlign": "center",
+      "verticalAlign": "top",
+      "containerId": "ZSPG8ACP4jq3ssZMYNzQW",
+      "originalText": "build-env\n container",
+      "lineHeight": 1.15,
+      "baseline": 42
+    },
+    {
+      "type": "rectangle",
+      "version": 699,
+      "versionNonce": 118079509,
+      "isDeleted": false,
+      "id": "wBcYIwBjFolSi4vZE0mDW",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 342.443359375,
+      "y": 573.2676711402182,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 129.57031250000003,
+      "height": 29.2,
+      "seed": 741604525,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "Xiop5TihDc0Y2uoKalufe"
+        }
+      ],
+      "updated": 1709584327997,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 784,
+      "versionNonce": 1684206965,
+      "isDeleted": false,
+      "id": "Xiop5TihDc0Y2uoKalufe",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 383.791015625,
+      "y": 578.2676711402182,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 46.875,
+      "height": 19.2,
+      "seed": 1464459021,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1709584327997,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "conda",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "wBcYIwBjFolSi4vZE0mDW",
+      "originalText": "conda",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "rectangle",
+      "version": 714,
+      "versionNonce": 531529429,
+      "isDeleted": false,
+      "id": "uL7UDVECJInJJUMUqODvN",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 342.7518848002268,
+      "y": 613.9595617836726,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 129.57031250000003,
+      "height": 29.2,
+      "seed": 686579213,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "Q1r1idMiMOx9hFfsS5wvt"
+        }
+      ],
+      "updated": 1709584327997,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 825,
+      "versionNonce": 1870781493,
+      "isDeleted": false,
+      "id": "Q1r1idMiMOx9hFfsS5wvt",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 355.9745410502268,
+      "y": 618.9595617836726,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 103.125,
+      "height": 19.2,
+      "seed": 1897534787,
+      "groupIds": [
+        "VKry84j3vgFdUIVvIcZot"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1709584327997,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 3,
+      "text": "conda-build",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "uL7UDVECJInJJUMUqODvN",
+      "originalText": "conda-build",
+      "lineHeight": 1.2,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 568,
+      "versionNonce": 1095690806,
+      "isDeleted": false,
+      "id": "Y8CtHy2gv3zxdPojUf7L3",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 272.8351696995087,
+      "y": 694.64140625,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 2006391094,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "N6KMnt43uVIlLK3Z4KOso"
+        }
+      ],
+      "updated": 1705337790340,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 412,
+      "versionNonce": 396374902,
+      "isDeleted": false,
+      "id": "N6KMnt43uVIlLK3Z4KOso",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 288.88948087591933,
+      "y": 705.9457172356758,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 1980335350,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337790340,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "1",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "Y8CtHy2gv3zxdPojUf7L3",
+      "originalText": "1",
+      "lineHeight": 1.15,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 610,
+      "versionNonce": 1803370154,
+      "isDeleted": false,
+      "id": "IJM7hd-nLRds4mMsxy8C6",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 288.8351696995087,
+      "y": 490.64140625000005,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 994929398,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "ZkNf9fJytMEUCiohoP48a"
+        }
+      ],
+      "updated": 1705337781507,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 454,
+      "versionNonce": 1008356330,
+      "isDeleted": false,
+      "id": "ZkNf9fJytMEUCiohoP48a",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 304.88948087591933,
+      "y": 501.94571723567583,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 2060150634,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337776025,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "2",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "IJM7hd-nLRds4mMsxy8C6",
+      "originalText": "2",
+      "lineHeight": 1.15,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 679,
+      "versionNonce": 200183722,
+      "isDeleted": false,
+      "id": "clU19FQCAD7zyXa4A3uEp",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 465.8351696995087,
+      "y": 694.64140625,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 1651920374,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "8LnDOKQq4T22dg3EYMuaq"
+        }
+      ],
+      "updated": 1705337795712,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 523,
+      "versionNonce": 496790186,
+      "isDeleted": false,
+      "id": "8LnDOKQq4T22dg3EYMuaq",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 481.88948087591933,
+      "y": 705.9457172356758,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 1633039466,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337797947,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "3",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "clU19FQCAD7zyXa4A3uEp",
+      "originalText": "3",
+      "lineHeight": 1.15,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 1001,
+      "versionNonce": 1660453034,
+      "isDeleted": false,
+      "id": "kPtMFuoLB5CW-Vw395RG3",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 600.8351696995087,
+      "y": 697.64140625,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 1955416106,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "CDjph4pnXE_2D7g2BCAUY"
+        }
+      ],
+      "updated": 1705337819537,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 845,
+      "versionNonce": 708238186,
+      "isDeleted": false,
+      "id": "CDjph4pnXE_2D7g2BCAUY",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 616.8894808759194,
+      "y": 708.9457172356758,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 1542072182,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337819537,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "4",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "kPtMFuoLB5CW-Vw395RG3",
+      "originalText": "4",
+      "lineHeight": 1.15,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 1063,
+      "versionNonce": 1345914282,
+      "isDeleted": false,
+      "id": "r4dTiBdf_M1Zge8gYzVTq",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 560.8351696995087,
+      "y": 516.64140625,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 1954017654,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "6GqtRDsMkX9IH1jFZ9eQ4"
+        }
+      ],
+      "updated": 1705337822598,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 907,
+      "versionNonce": 1711005866,
+      "isDeleted": false,
+      "id": "6GqtRDsMkX9IH1jFZ9eQ4",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 576.8894808759194,
+      "y": 527.9457172356758,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 609388778,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337825109,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "5",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "r4dTiBdf_M1Zge8gYzVTq",
+      "originalText": "5",
+      "lineHeight": 1.15,
+      "baseline": 15
+    },
+    {
+      "type": "ellipse",
+      "version": 1133,
+      "versionNonce": 1452724650,
+      "isDeleted": false,
+      "id": "tj4xtVc1Oj1bcmtp_1RGq",
+      "fillStyle": "solid",
+      "strokeWidth": 4,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 792.8351696995087,
+      "y": 559.64140625,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "#ffffff",
+      "width": 41,
+      "height": 41,
+      "seed": 1571983734,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [
+        {
+          "type": "text",
+          "id": "YOochIApNbIqGsJ-8vmWA"
+        }
+      ],
+      "updated": 1705337831322,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 977,
+      "versionNonce": 1494461610,
+      "isDeleted": false,
+      "id": "YOochIApNbIqGsJ-8vmWA",
+      "fillStyle": "solid",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 0,
+      "opacity": 100,
+      "angle": 0,
+      "x": 808.8894808759194,
+      "y": 570.9457172356758,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 8.899999618530273,
+      "height": 18.4,
+      "seed": 2039605482,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1705337833141,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 2,
+      "text": "6",
+      "textAlign": "center",
+      "verticalAlign": "middle",
+      "containerId": "tj4xtVc1Oj1bcmtp_1RGq",
+      "originalText": "6",
+      "lineHeight": 1.15,
+      "baseline": 15
+    }
+  ],
+  "appState": {
+    "gridSize": null,
+    "viewBackgroundColor": "#ffffff"
+  },
+  "files": {}
+}
\ No newline at end of file
diff --git a/source/images/bioconda-containers.png b/source/images/bioconda-containers.png
new file mode 100644
index 0000000..42e56e5
Binary files /dev/null and b/source/images/bioconda-containers.png differ
diff --git a/source/images/bioconda-containers.svg b/source/images/bioconda-containers.svg
new file mode 100644
index 0000000..1e74110
--- /dev/null
+++ b/source/images/bioconda-containers.svg
@@ -0,0 +1,21 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 824.7632543509826 347.51875" width="824.7632543509826" height="347.51875">
+  <!-- svg-source:excalidraw -->
+  
+  <defs>
+    <style class="style-fonts">
+      @font-face {
+        font-family: "Virgil";
+        src: url("https://excalidraw.com/Virgil.woff2");
+      }
+      @font-face {
+        font-family: "Cascadia";
+        src: url("https://excalidraw.com/Cascadia.woff2");
+      }
+      @font-face {
+        font-family: "Assistant";
+        src: url("https://excalidraw.com/Assistant-Regular.woff2");
+      }
+    </style>
+    
+  </defs>
+  <rect x="0" y="0" width="824.7632543509826" height="347.51875" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(172.7905981009826 10) rotate(0 320.986328125 14.599999999999994)"><path d="M7.3 0 C216.49 3.8, 425.92 3.46, 634.67 0 C637.39 -1.83, 642.12 3.8, 641.97 7.3 C641.55 8.45, 640.57 14.69, 641.97 21.9 C638.81 25.24, 637.15 27.29, 634.67 29.2 C384.28 31.33, 136.12 29.88, 7.3 29.2 C4.11 32.22, 0.06 29.71, 0 21.9 C0.61 16.5, -0.81 13.16, 0 7.3 C2.41 1.09, 5.34 1.69, 7.3 0" stroke="none" stroke-width="0" fill="#ffd43b"></path><path d="M7.3 0 C160.42 -0.26, 314.45 -0.32, 634.67 0 M7.3 0 C226.98 2.49, 446.19 2.19, 634.67 0 M634.67 0 C640.68 -1.21, 642.53 1.45, 641.97 7.3 M634.67 0 C639.32 0.3, 639.93 3.58, 641.97 7.3 M641.97 7.3 C641.8 10.89, 641.64 16.14, 641.97 21.9 M641.97 7.3 C642.26 10.91, 642.31 13.23, 641.97 21.9 M641.97 21.9 C643.82 25.34, 640.87 29.32, 634.67 29.2 M641.97 21.9 C641.02 27.38, 639.72 27.06, 634.67 29.2 M634.67 29.2 C443.86 30.95, 254.18 30.4, 7.3 29.2 M634.67 29.2 C440.53 29.78, 246.98 29.57, 7.3 29.2 M7.3 29.2 C2.06 28.82, 1.93 28.31, 0 21.9 M7.3 29.2 C4.2 27.94, -0.04 26.24, 0 21.9 M0 21.9 C-0.06 16.66, 0.32 10.37, 0 7.3 M0 21.9 C-0.43 18.34, -0.2 15.42, 0 7.3 M0 7.3 C1.26 0.96, 4.14 0.4, 7.3 0 M0 7.3 C1.39 4.18, 1.71 -1.21, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(428.1519262259826 15) rotate(0 65.625 9.599999999999994)"><text x="65.625" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">bioconda-utils</text></g><g stroke-linecap="round" transform="translate(362.3999731009827 50.107421875) rotate(0 223.15820312499994 14.599999999999994)"><path d="M7.3 0 C146.18 -1.12, 281.73 2.32, 439.02 0 C442 1.2, 444.2 1.4, 446.32 7.3 C444.34 12.63, 445.25 12.37, 446.32 21.9 C447.69 24.04, 443.28 29.44, 439.02 29.2 C296.12 32.88, 150.12 33.53, 7.3 29.2 C4 29.31, -1.12 25.42, 0 21.9 C-1.66 14.42, -0.52 11.58, 0 7.3 C-2.58 3.28, 1.67 1.66, 7.3 0" stroke="none" stroke-width="0" fill="#ffec99"></path><path d="M7.3 0 C119.54 0.45, 230.03 0.81, 439.02 0 M7.3 0 C164.27 1.27, 320.77 1.26, 439.02 0 M439.02 0 C444.81 1.87, 448 3.08, 446.32 7.3 M439.02 0 C443.58 -0.5, 447.51 3.97, 446.32 7.3 M446.32 7.3 C445.57 11.68, 447.85 13.96, 446.32 21.9 M446.32 7.3 C446.13 11.62, 446.19 16.75, 446.32 21.9 M446.32 21.9 C446.58 27.54, 442.94 29.43, 439.02 29.2 M446.32 21.9 C447.18 27.5, 443.24 30.12, 439.02 29.2 M439.02 29.2 C310.09 31.33, 179.23 30.85, 7.3 29.2 M439.02 29.2 C279.73 27.15, 119.83 26.8, 7.3 29.2 M7.3 29.2 C0.53 27.88, -1.68 25.93, 0 21.9 M7.3 29.2 C1.5 27.71, -1.58 26.16, 0 21.9 M0 21.9 C1 17.63, 1.46 14.24, 0 7.3 M0 21.9 C-0.26 16.36, -0.26 12.56, 0 7.3 M0 7.3 C-0.29 2.5, 1.51 0.11, 7.3 0 M0 7.3 C-0.56 3.62, 3 1.93, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(529.3081762259826 55.107421875) rotate(0 56.25 9.599999999999994)"><text x="56.25" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">mulled-build</text></g><g stroke-linecap="round" transform="translate(590.9234106009826 87.71171874999999) rotate(0 108.380859375 14.600000000000023)"><path d="M7.3 0 C74.23 4.73, 140.52 1.23, 209.46 0 C213.04 2.42, 215.69 3.15, 216.76 7.3 C215.17 8.76, 214.66 15.07, 216.76 21.9 C216.55 29.93, 215.18 28.92, 209.46 29.2 C134.27 32.51, 65.51 30.71, 7.3 29.2 C5.62 26.71, -2.57 26.25, 0 21.9 C-1.07 18.78, 1.58 17.39, 0 7.3 C3.01 -0.43, 5.84 1.54, 7.3 0" stroke="none" stroke-width="0" fill="#fff9db"></path><path d="M7.3 0 C54.92 1.11, 103.02 1.4, 209.46 0 M7.3 0 C81.08 -0.73, 153.43 -0.81, 209.46 0 M209.46 0 C212.58 0.87, 215.81 3.19, 216.76 7.3 M209.46 0 C216.35 -0.59, 215.85 0.52, 216.76 7.3 M216.76 7.3 C217.93 10.91, 216.6 14.74, 216.76 21.9 M216.76 7.3 C216.95 11.75, 216.81 14.5, 216.76 21.9 M216.76 21.9 C215.87 25.86, 213.63 29.17, 209.46 29.2 M216.76 21.9 C218.45 26.62, 214.29 30.1, 209.46 29.2 M209.46 29.2 C149.41 31.51, 88.73 28.94, 7.3 29.2 M209.46 29.2 C165.42 29.57, 121.08 29.13, 7.3 29.2 M7.3 29.2 C1.94 28.76, 1.16 27.84, 0 21.9 M7.3 29.2 C2.55 31.45, -0.11 26.95, 0 21.9 M0 21.9 C1.41 17.98, 1.45 13.52, 0 7.3 M0 21.9 C0.52 18.77, 0.6 16.25, 0 7.3 M0 7.3 C1.81 3.45, 2.08 0.62, 7.3 0 M0 7.3 C-0.09 0.7, 3.7 2.23, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(657.1167699759826 92.71171874999999) rotate(0 42.1875 9.600000000000023)"><text x="42.1875" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">involucro</text></g><g stroke-linecap="round"><g transform="translate(10.065988725982606 256.6140625) rotate(0 383.5501428942196 0.2850690942630649)"><path d="M0.91 -0.06 C128.93 -0.14, 639.81 0.18, 767.17 0.11 M-0.07 -1.14 C127.95 -1.05, 638.82 1.41, 766.72 1.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(135.8863012259826 318.31874999999997) rotate(0 75 9.600000000000023)"><text x="0" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">recipes/pkgname/</text></g><g transform="translate(327.3511449759826 318.29921874999997) rotate(0 117.1875 9.600000000000023)"><text x="0" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">conda-bld/pkgname.tar.bz2</text></g><g stroke-linecap="round"><g transform="translate(181.15874776480734 306.86953124999997) rotate(0 8.98510049172205 -25.085081877849632)"><path d="M-0.99 0.47 C2.06 -7.78, 15.63 -40.78, 18.96 -49.11 M0.69 -0.33 C3.49 -8.92, 14.9 -42.11, 17.8 -50.64" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(181.15874776480734 306.86953124999997) rotate(0 8.98510049172205 -25.085081877849632)"><path d="M18.3 -25.64 C18.82 -35.15, 19.76 -43.88, 17.8 -50.64 M18.3 -25.64 C17.64 -34.23, 18.2 -44.43, 17.8 -50.64" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(181.15874776480734 306.86953124999997) rotate(0 8.98510049172205 -25.085081877849632)"><path d="M2.11 -31.17 C8.36 -38.59, 15.01 -45.38, 17.8 -50.64 M2.11 -31.17 C7.23 -37.73, 13.62 -45.93, 17.8 -50.64" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(361.60770439202196 250.78746995706678) rotate(0 16.241189966809145 29.980914284807568)"><path d="M-0.17 0.91 C4.99 10.72, 26.52 49.91, 31.99 59.62 M-1.72 0.35 C3.73 9.75, 28.63 47.85, 34.2 57.89" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(361.60770439202196 250.78746995706678) rotate(0 16.241189966809145 29.980914284807568)"><path d="M14.68 42.28 C23.78 46.71, 31.01 53.79, 34.2 57.89 M14.68 42.28 C21.96 47.22, 26.57 53.01, 34.2 57.89" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(361.60770439202196 250.78746995706678) rotate(0 16.241189966809145 29.980914284807568)"><path d="M29.28 33.38 C32.84 41.2, 34.48 51.69, 34.2 57.89 M29.28 33.38 C31.78 41.17, 31.63 49.85, 34.2 57.89" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(435.8678363579072 309.86562499999997) rotate(0 17.200704021272884 -41.592000035687875)"><path d="M-0.89 -1.19 C4.64 -15.17, 27.1 -70.09, 32.97 -83.99 M0.84 0.81 C6.77 -12.97, 29.79 -68.39, 35.3 -82.46" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(435.8678363579072 309.86562499999997) rotate(0 17.200704021272884 -41.592000035687875)"><path d="M34.39 -57.47 C32.69 -65.75, 34.91 -70.54, 35.3 -82.46 M34.39 -57.47 C35.29 -64.67, 34.28 -69.31, 35.3 -82.46" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(435.8678363579072 309.86562499999997) rotate(0 17.200704021272884 -41.592000035687875)"><path d="M18.55 -63.9 C21.32 -70.24, 28.01 -73.22, 35.3 -82.46 M18.55 -63.9 C23.35 -69.42, 26.29 -72.46, 35.3 -82.46" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(673.2222387259826 137.4734375) rotate(0 70.0390625 46.998046875)"><path d="M23.5 0 C59.23 -0.94, 95.32 1.58, 116.58 0 M23.5 0 C44.57 -0.49, 67.83 0.4, 116.58 0 M116.58 0 C131.7 1.1, 141.29 8.89, 140.08 23.5 M116.58 0 C130.65 -1.35, 138.2 9.58, 140.08 23.5 M140.08 23.5 C140.91 33.66, 139.8 47.44, 140.08 70.5 M140.08 23.5 C138.7 40.75, 139.14 59.28, 140.08 70.5 M140.08 70.5 C140.02 87.12, 133.75 92.69, 116.58 94 M140.08 70.5 C141.02 86.49, 133.16 96.13, 116.58 94 M116.58 94 C84.35 95.54, 48.67 92.35, 23.5 94 M116.58 94 C89.12 93.16, 61.71 93.03, 23.5 94 M23.5 94 C8 95.81, -0.14 86.84, 0 70.5 M23.5 94 C5.79 92.87, 0.09 85.37, 0 70.5 M0 70.5 C-0.95 60.71, 1.18 50.99, 0 23.5 M0 70.5 C-0.18 56.99, 0.25 43.1, 0 23.5 M0 23.5 C-0.68 8.06, 9.16 -0.83, 23.5 0 M0 23.5 C-1.94 6.99, 8.61 0.67, 23.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(702.1236059134826 142.4734375) rotate(0 41.1376953125 23)"><text x="41.1376953125" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">base </text><text x="41.1376953125" y="23" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">container</text></g><g stroke-linecap="round" transform="translate(680.7847387259826 193.2703125) rotate(0 64.78515625 14.600000000000023)"><path d="M7.3 0 C32.26 0.11, 60.89 -2.12, 122.27 0 M7.3 0 C41.43 -0.46, 76.7 -0.48, 122.27 0 M122.27 0 C125.75 -1.18, 127.94 3.95, 129.57 7.3 M122.27 0 C126.05 0.04, 127.7 3.38, 129.57 7.3 M129.57 7.3 C130.82 9.07, 128.77 12.16, 129.57 21.9 M129.57 7.3 C129.48 10.67, 130.05 12.85, 129.57 21.9 M129.57 21.9 C130.39 27.05, 127.93 31.06, 122.27 29.2 M129.57 21.9 C131.07 25.89, 127.57 31.23, 122.27 29.2 M122.27 29.2 C79.85 26.55, 35.65 28.68, 7.3 29.2 M122.27 29.2 C87.48 30, 52.46 29.43, 7.3 29.2 M7.3 29.2 C0.66 28.22, 0.08 26.07, 0 21.9 M7.3 29.2 C0.43 31.04, 0.94 26.11, 0 21.9 M0 21.9 C-0.23 16.25, -0.85 12.03, 0 7.3 M0 21.9 C-0.23 17.28, 0.5 12.19, 0 7.3 M0 7.3 C-1.69 1.7, 3.11 0.58, 7.3 0 M0 7.3 C-0.09 3.3, 4.53 0.93, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(698.6948949759826 198.2703125) rotate(0 46.875 9.600000000000023)"><text x="46.875" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">/usr/local</text></g><g stroke-linecap="round"><g transform="translate(554.9804250820685 213.77882827184777) rotate(0 57.96308842048256 0.25675588445386666)"><path d="M-0.13 -1.1 C19.52 -1.12, 97.89 -0.29, 117.58 0.05 M-1.65 0.93 C17.86 1.1, 96.75 1.86, 116.59 1.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(554.9804250820685 213.77882827184777) rotate(0 57.96308842048256 0.25675588445386666)"><path d="M93.11 10.12 C97.67 7.68, 105.77 6.06, 116.59 1.54 M93.11 10.12 C101.79 6.58, 109.95 4.91, 116.59 1.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(554.9804250820685 213.77882827184777) rotate(0 57.96308842048256 0.25675588445386666)"><path d="M93.09 -6.98 C97.68 -4.76, 105.78 -1.71, 116.59 1.54 M93.09 -6.98 C101.87 -4.27, 110.04 0.33, 116.59 1.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(443.6206762259826 95.11796874999999) rotate(0 70.0390625 68.13671875)"><path d="M32 0 C52.61 0.75, 72.9 -0.71, 108.08 0 M32 0 C57.1 -0.66, 80.96 0.45, 108.08 0 M108.08 0 C131.39 0.43, 140.64 9.12, 140.08 32 M108.08 0 C130.56 1.9, 139.82 9.53, 140.08 32 M140.08 32 C137.7 59.4, 141.28 86.37, 140.08 104.27 M140.08 32 C141.37 51.01, 140.73 69.83, 140.08 104.27 M140.08 104.27 C138.86 126.31, 130.38 137.04, 108.08 136.27 M140.08 104.27 C141.81 124.59, 128.72 136.88, 108.08 136.27 M108.08 136.27 C77.31 135.88, 49.14 136.13, 32 136.27 M108.08 136.27 C89.81 136.35, 71.75 134.59, 32 136.27 M32 136.27 C9.79 135.08, 1.75 123.93, 0 104.27 M32 136.27 C12.18 137.71, 0.74 125.39, 0 104.27 M0 104.27 C-0.79 78.24, 1.17 56.38, 0 32 M0 104.27 C1.24 78.87, 0.98 53.42, 0 32 M0 32 C-0.6 9.9, 11.08 0.52, 32 0 M0 32 C-0.6 11.72, 8.98 2.08, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(463.6353246634826 100.11796874999999) rotate(0 50.0244140625 23)"><text x="50.0244140625" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">create-env </text><text x="50.0244140625" y="23" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">container</text></g><g stroke-linecap="round" transform="translate(446.4839574759826 195.25078125) rotate(0 64.78515625 14.600000000000023)"><path d="M7.3 0 C34.56 1.72, 63.88 -1, 122.27 0 M7.3 0 C32.18 0.98, 55.95 0.67, 122.27 0 M122.27 0 C127.57 1.28, 128.23 2.65, 129.57 7.3 M122.27 0 C126.18 -1.13, 128.53 4.72, 129.57 7.3 M129.57 7.3 C129.27 13.62, 129.79 18.47, 129.57 21.9 M129.57 7.3 C130.06 10.86, 129.6 15.17, 129.57 21.9 M129.57 21.9 C128.5 25.31, 128.21 30.7, 122.27 29.2 M129.57 21.9 C129 27.93, 125.98 31.42, 122.27 29.2 M122.27 29.2 C79.79 30.08, 35.32 30.89, 7.3 29.2 M122.27 29.2 C85.77 31.18, 49.98 30.8, 7.3 29.2 M7.3 29.2 C2.15 27.61, 1.99 26.46, 0 21.9 M7.3 29.2 C3.79 30.34, 1.6 25.67, 0 21.9 M0 21.9 C-0.1 17.87, -0.85 11.29, 0 7.3 M0 21.9 C-0.36 17.32, -0.09 12.08, 0 7.3 M0 7.3 C-1.62 3.76, 1.22 1.93, 7.3 0 M0 7.3 C2.22 1.54, 3.52 -1.01, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(492.5191137259826 200.25078125) rotate(0 18.75 9.600000000000023)"><text x="18.75" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">env/</text></g><g stroke-linecap="round" transform="translate(448.0269262259826 160.57656250000008) rotate(0 64.78515625 14.600000000000023)"><path d="M7.3 0 C50.89 0.15, 96.86 -0.33, 122.27 0 M7.3 0 C34.83 -0.24, 62.97 0.91, 122.27 0 M122.27 0 C127.84 1.15, 130.75 1.83, 129.57 7.3 M122.27 0 C127.21 -1.3, 128.72 2.31, 129.57 7.3 M129.57 7.3 C130.54 11.32, 130.8 15.19, 129.57 21.9 M129.57 7.3 C129.53 11.71, 129.08 15, 129.57 21.9 M129.57 21.9 C129.78 25.67, 128.17 27.51, 122.27 29.2 M129.57 21.9 C131.76 25.81, 125.69 26.98, 122.27 29.2 M122.27 29.2 C97.74 30.18, 75.93 27.04, 7.3 29.2 M122.27 29.2 C81.76 27.77, 38.73 27.81, 7.3 29.2 M7.3 29.2 C2.12 27.54, -1.26 24.79, 0 21.9 M7.3 29.2 C2.52 30.22, -1.24 26.18, 0 21.9 M0 21.9 C0.42 17.48, -0.12 12.96, 0 7.3 M0 21.9 C0.16 17.4, 0.56 12.32, 0 7.3 M0 7.3 C0.54 3.61, 2.76 1.66, 7.3 0 M0 7.3 C1.89 1.44, 0.52 -0.21, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(489.3745824759826 165.57656250000008) rotate(0 23.4375 9.600000000000023)"><text x="23.4375" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">conda</text></g><g transform="translate(34.412668413482606 162.4171875) rotate(0 44.3447265625 16.100000000000023)"><text x="0" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Docker</text></g><g transform="translate(34.412668413482606 287.47109374999997) rotate(0 28.7861328125 16.100000000000023)"><text x="0" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Host</text></g><g stroke-linecap="round" transform="translate(170.0073949759826 74.56134367618273) rotate(0 93.767578125 84.0625)"><path d="M32 0 C68.56 1.45, 101.09 -1.11, 155.54 0 M32 0 C59.41 0.32, 88.06 -0.34, 155.54 0 M155.54 0 C175.91 0.98, 189.28 11.57, 187.54 32 M155.54 0 C176.19 -0.43, 189.82 9.82, 187.54 32 M187.54 32 C185.44 56.17, 188.13 83.04, 187.54 136.12 M187.54 32 C188.72 64.42, 188.29 96.71, 187.54 136.12 M187.54 136.12 C189.11 158.29, 178.42 168.29, 155.54 168.12 M187.54 136.12 C186.39 158.25, 175.26 166.98, 155.54 168.12 M155.54 168.12 C107.5 168.36, 61.58 166.41, 32 168.12 M155.54 168.12 C109.43 167.93, 64.73 166.31, 32 168.12 M32 168.12 C10.24 169.45, 1.27 159, 0 136.12 M32 168.12 C12.15 167.44, 0.82 156.71, 0 136.12 M0 136.12 C1.68 104.36, 0.8 70.55, 0 32 M0 136.12 C-0.46 98.87, -0.83 62.79, 0 32 M0 32 C0.26 12.39, 11.18 1.4, 32 0 M0 32 C-1.37 12.63, 11.04 -2.07, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(219.8589574759826 79.56134367618273) rotate(0 43.916015625 23)"><text x="43.916015625" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">build-env</text><text x="43.916015625" y="23" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge"> container</text></g><g stroke-linecap="round" transform="translate(199.9898168509826 143.38563989021821) rotate(0 64.78515625 14.600000000000023)"><path d="M7.3 0 C47.23 1.29, 88.66 2.65, 122.27 0 M7.3 0 C43.1 -0.71, 79.87 -0.5, 122.27 0 M122.27 0 C125.37 -0.59, 130.28 2.07, 129.57 7.3 M122.27 0 C128.94 -1.71, 131.71 2.84, 129.57 7.3 M129.57 7.3 C130.44 12.64, 130.34 17.65, 129.57 21.9 M129.57 7.3 C128.89 9.92, 129.02 13.37, 129.57 21.9 M129.57 21.9 C130.61 25.15, 125.84 29.44, 122.27 29.2 M129.57 21.9 C130.84 25.19, 127.76 30.23, 122.27 29.2 M122.27 29.2 C87.75 31.74, 56.5 30.33, 7.3 29.2 M122.27 29.2 C91.42 29.29, 61.01 28.29, 7.3 29.2 M7.3 29.2 C2.82 30.62, -0.31 28.33, 0 21.9 M7.3 29.2 C2.92 29.08, -0.64 24.99, 0 21.9 M0 21.9 C0.02 17.1, 0.13 9.5, 0 7.3 M0 21.9 C-0.62 18.67, 0.65 14.17, 0 7.3 M0 7.3 C0.2 1.51, 1.89 0.35, 7.3 0 M0 7.3 C-0.46 2.18, 4.02 -0.21, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(241.3374731009826 148.38563989021821) rotate(0 23.4375 9.600000000000023)"><text x="23.4375" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">conda</text></g><g stroke-linecap="round" transform="translate(200.29834227620938 184.0775305336726) rotate(0 64.78515625 14.600000000000023)"><path d="M7.3 0 C49.88 2.09, 93.22 0.49, 122.27 0 M7.3 0 C44.87 -0.72, 82.48 -1.66, 122.27 0 M122.27 0 C127.37 1.39, 127.71 1.3, 129.57 7.3 M122.27 0 C127.2 0.49, 127.55 2.13, 129.57 7.3 M129.57 7.3 C128.45 11.91, 130.41 14.49, 129.57 21.9 M129.57 7.3 C129.67 11.93, 130.12 17.22, 129.57 21.9 M129.57 21.9 C128.91 25.79, 127.09 30.94, 122.27 29.2 M129.57 21.9 C131.6 28.07, 129.12 28.56, 122.27 29.2 M122.27 29.2 C80.18 29.47, 34.03 28.09, 7.3 29.2 M122.27 29.2 C94.36 28.9, 65.08 28.3, 7.3 29.2 M7.3 29.2 C1.02 28.05, 0.57 27.9, 0 21.9 M7.3 29.2 C3.66 28.75, 1.21 25.42, 0 21.9 M0 21.9 C-1.11 18.09, 0.38 15.57, 0 7.3 M0 21.9 C0.11 19.03, -0.5 14.56, 0 7.3 M0 7.3 C1.74 1.35, 3.96 -1.7, 7.3 0 M0 7.3 C-0.3 3.51, 0.92 1.51, 7.3 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(213.52099852620938 189.0775305336726) rotate(0 51.5625 9.600000000000023)"><text x="51.5625" y="0" font-family="Cascadia, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">conda-build</text></g><g stroke-linecap="round" transform="translate(130.3816271754913 264.75937500000003) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(146.43593835190194 276.0636859856758) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">1</text></g><g stroke-linecap="round" transform="translate(146.3816271754913 60.759375000000034) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(162.43593835190194 72.06368598567582) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">2</text></g><g stroke-linecap="round" transform="translate(323.3816271754913 264.75937500000003) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(339.43593835190194 276.0636859856758) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">3</text></g><g stroke-linecap="round" transform="translate(458.3816271754913 267.75937500000003) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(474.435938351902 279.0636859856758) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">4</text></g><g stroke-linecap="round" transform="translate(418.3816271754913 86.75937500000003) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(434.435938351902 98.06368598567582) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">5</text></g><g stroke-linecap="round" transform="translate(650.3816271754913 129.75937500000003) rotate(0 20.5 20.5)"><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M41 20.5 C41 21.69, 40.89 22.89, 40.69 24.06 C40.48 25.23, 40.17 26.4, 39.76 27.51 C39.36 28.63, 38.85 29.72, 38.25 30.75 C37.66 31.78, 36.97 32.77, 36.2 33.68 C35.44 34.59, 34.59 35.44, 33.68 36.2 C32.77 36.97, 31.78 37.66, 30.75 38.25 C29.72 38.85, 28.63 39.36, 27.51 39.76 C26.4 40.17, 25.23 40.48, 24.06 40.69 C22.89 40.89, 21.69 41, 20.5 41 C19.31 41, 18.11 40.89, 16.94 40.69 C15.77 40.48, 14.6 40.17, 13.49 39.76 C12.37 39.36, 11.28 38.85, 10.25 38.25 C9.22 37.66, 8.23 36.97, 7.32 36.2 C6.41 35.44, 5.56 34.59, 4.8 33.68 C4.03 32.77, 3.34 31.78, 2.75 30.75 C2.15 29.72, 1.64 28.63, 1.24 27.51 C0.83 26.4, 0.52 25.23, 0.31 24.06 C0.11 22.89, 0 21.69, 0 20.5 C0 19.31, 0.11 18.11, 0.31 16.94 C0.52 15.77, 0.83 14.6, 1.24 13.49 C1.64 12.37, 2.15 11.28, 2.75 10.25 C3.34 9.22, 4.03 8.23, 4.8 7.32 C5.56 6.41, 6.41 5.56, 7.32 4.8 C8.23 4.03, 9.22 3.34, 10.25 2.75 C11.28 2.15, 12.37 1.64, 13.49 1.24 C14.6 0.83, 15.77 0.52, 16.94 0.31 C18.11 0.11, 19.31 0, 20.5 0 C21.69 0, 22.89 0.11, 24.06 0.31 C25.23 0.52, 26.4 0.83, 27.51 1.24 C28.63 1.64, 29.72 2.15, 30.75 2.75 C31.78 3.34, 32.77 4.03, 33.68 4.8 C34.59 5.56, 35.44 6.41, 36.2 7.32 C36.97 8.23, 37.66 9.22, 38.25 10.25 C38.85 11.28, 39.36 12.37, 39.76 13.49 C40.17 14.6, 40.48 15.77, 40.69 16.94 C40.89 18.11, 40.95 19.91, 41 20.5 C41.05 21.09, 41.05 19.91, 41 20.5" stroke="#1971c2" stroke-width="4" fill="none"></path></g><g transform="translate(666.435938351902 141.06368598567582) rotate(0 4.449999809265137 9.199999999999989)"><text x="4.449999809265137" y="0" font-family="Helvetica, Segoe UI Emoji" font-size="16px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">6</text></g></svg>
\ No newline at end of file
diff --git a/source/index.rst b/source/index.rst
index 7d5ffbc..991416a 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -3,9 +3,11 @@
    To build the documentation locally, first create an environment using
    bioconda_utils/bioconda_utils-requirements.txt.
 
-   Then activate the env and run:
+   mamba create -p ./env --file https://raw.githubusercontent.com/bioconda/bioconda-utils/master/bioconda_utils/bioconda_utils-requirements.txt -y
 
-     make -C docs/ BIOCONDA_FILTER_RECIPES=2 SPHINXOPTS="-E" html
+   With that env activated, run:
+
+     make BIOCONDA_FILTER_RECIPES=2 SPHINXOPTS="-E" html
 
    This will only build 2 of the recipes pages, dramatically speeding up the
    build process.
@@ -18,7 +20,7 @@
 **Bioconda** lets you install thousands of software packages related to
 biomedical research using the `conda <https://conda.io>`_ package manager.
 
-**NOTE**: *Bioconda supports only 64-bit Linux and macOS*
+**NOTE**: *Bioconda supports only Linux (64-bit and AArch64) and macOS (x86_64)*
 
 Usage
 =====
@@ -142,7 +144,7 @@ system consists of the components illustrated in the diagram below.
 
 **Legend** (starting from the bottom):
 
-:circlednumber:`①` Over 1400 contributors who add,
+:circlednumber:`①` Over 1800 contributors who add,
 modify, update, and maintain recipes and packages
 
 .. details:: Details
@@ -185,9 +187,9 @@ package and a Docker container
     the process repeats until all tests pass.
 
     Our `build system`_, `bioconda-utils`, orchestrates the various building
-    and testing steps on Azure Pipelines. The output consists of both a `conda
-    package`_ and a `Biocontainer`_ that can be inspected before merging the
-    pull request.
+    and testing steps on CI infrastructure like CircleCI, Azure Pipelines, and
+    GitHub Actions. The output consists of both a `conda package`_ and
+    a `Biocontainer`_ that can be inspected before merging the pull request.
 
 
 :circlednumber:`④` A repository of packages and a registry of containers
@@ -279,6 +281,7 @@ Core
 * `Elmar Pruesse <https://github.com/epruesse>`_
 * `Robert A. Petit III <https://github.com/rpetit3>`_
 * `Christian Brueffer <https://github.com/cbrueffer>`_
+* `Alicia Evans <https://github.com/aliciaaevans>`_
 
 Former core members
 ~~~~~~~~~~~~~~~~~~~
@@ -291,12 +294,10 @@ Team
 ~~~~
 
 Bioconda would not exist without the continuous hard work and support of the
-wonderful community which includes over 1400 (as of 2022) `contributors
+wonderful community which includes over 1800 (as of 2023) `contributors
 <https://github.com/bioconda/bioconda-recipes/graphs/contributors>`_.
 
 
-
-
 Table of contents
 =================
 
diff --git a/source/static/style.css b/source/static/style.css
index c76fb1b..f6ee1a1 100644
--- a/source/static/style.css
+++ b/source/static/style.css
@@ -152,6 +152,7 @@ details div.details {
     font-style: italic;
 }
 
+/* Used on the front page to describe the workflow diagram */
 .circlednumber {
     font-size: 150%;
     font-weight: bold;
@@ -164,7 +165,71 @@ details div.details {
     margin-top: -15px;
 }
 
+/* If a details section includes an anchor, this styles the "¶" symbol */
 details a.headerlink {
     color: #ccc;
     visibility: visible;
 }
+
+/* when using .. datechanged:: directive, makes the whole thing italic and
+* a little smaller */
+div.datechanged {
+    font-style: italic;
+    font-size: 0.9em;
+}
+
+/* "conda green" for the .. datechanged:: label */
+.versionmodified {
+    color: #3eb049;
+}
+
+
+/* make the inventory tables (for ci and docker) fit a little better on screen */
+table.inventory {
+    overflow-x: scroll;
+    font-size: 0.8em;
+}
+
+table.inventory th, td {
+    min-width: 100px;
+}
+
+code.xref {
+    font-weight: normal;
+}
+
+/* for :program:`program-name` roles */
+.program {
+    font-weight: normal;
+    font-style: italic;
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+}
+/* for :command:`cmd here` roles */
+.command {
+    font-weight: normal;
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+}
+
+/* for :file:`path` roles */
+.file {
+    font-weight: normal;
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+    background-color: transparent;
+}
+
+/* Text under figures */ 
+.caption-text {
+    font-style: italic;
+    font-size: 0.9em;
+}
+
+/* add more space to lists */
+ol.simple p {
+    margin-bottom: 1em;
+}
+ul.simple p {
+    margin-bottom: 1em;
+}