diff --git a/docusaurus/.gitignore b/docusaurus/.gitignore
index 69064c5c11..82957bf3ff 100644
--- a/docusaurus/.gitignore
+++ b/docusaurus/.gitignore
@@ -4,6 +4,7 @@
 
 # Production
 /build
+/static
 
 # Generated files
 .docusaurus
diff --git a/docusaurus/docs/cloud/getting-started/deployment.md b/docusaurus/docs/cloud/getting-started/deployment.md
index cd43417956..bd1cd35053 100644
--- a/docusaurus/docs/cloud/getting-started/deployment.md
+++ b/docusaurus/docs/cloud/getting-started/deployment.md
@@ -23,7 +23,7 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
 
 * Strapi version `4.8.2` or higher
 * Project database must be compatible with PostgreSQL. Strapi does not support and does not recommend using any external databases, though it's possible to configure one (see [advanced database configuration](/cloud/advanced/database)).
-* Project(s) source code hosted on <ExternalLink to="https://github.com" text="GitHub"/> or <ExternalLink to="https://about.gitlab.com/" text="GitLab"/>. The connected repository can contain multiple Strapi applications. Each Strapi app must be in a separate directory.
+* Project source code hosted on <ExternalLink to="https://github.com" text="GitHub"/> or <ExternalLink to="https://about.gitlab.com/" text="GitLab"/>. The connected repository can contain multiple Strapi applications. Each Strapi app must be in a separate directory.
 * Specifically for GitLab: at least have "<ExternalLink to="https://docs.gitlab.com/ee/user/permissions.html" text="Maintainer"/>" permissions for the project to import on Strapi Cloud.
 :::
 
@@ -41,7 +41,7 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
     }}
     />
 
-## Deploying a project
+## Creating a project {#deploying-a-project}
 
 1. From the *Projects* page, click the **Create project** button.
 
@@ -53,7 +53,7 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
     }}
     />
 
-2. You will be redirected to the first project deployment interface. This interface contains 3 steps: choosing a plan, connecting a remote git repository, and setting up the project.
+2. You will be redirected to the project creation interface. This interface contains 3 steps: choosing a plan, connecting a remote git repository, and setting up the project.
 
     <ThemedImage
     alt="Strapi Cloud project creation, step 1"
@@ -115,7 +115,7 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
     4.a. (optional) If you are deploying a project for the first time, you may first have to select a git provider: either GitHub or GitLab. If you already deployed a project with one git provider, you can afterward deploy another project using another provider by clicking on the **Switch git provider** button and selecting either GitHub or GitLab.
 
     :::tip
-    Connect the GitHub or GitLab account and/or organizations that own the repository or repositories you want to deploy. This can be different from the account that owns the Strapi Cloud account.
+    Connect the GitHub or GitLab account and/or organizations that owns the repository or repositories you want to deploy. This can be different from the account that own the Strapi Cloud account.
     :::
     :::note
 
@@ -145,12 +145,12 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
     | Setting name | Instructions                                                                                            |
     |--------------|---------------------------------------------------------------------------------------------------------|
     | Display name | Write the name of your Strapi app, this is fetched from the repository name but can be edited. It is automatically converted to slug format (`my-strapi-app`). |
-    | Git branch   | Choose from the drop-down the default branch to use for this deployment. This uses the default branch of the repository. |
-    | Deploy on push | Check the box to automatically deploy the latest changes from the selected branch. When disabled, you will need to manually deploy the latest changes. |
+    | Git branch   | Choose from the drop-down the branch you want to deploy. |
+    | Deploy on push | Tick this box to automatically trigger a deployment when changes are pushed to your selected branch. When disabled, you will need to manually deploy the latest changes. |
     | Region       | Choose the geographic location of the servers where your Strapi application is hosted. Selected region can either be US (East), Europe (West), Asia (Southeast) or Oceania. |
 
     :::note
-    The Git branch and "Deploy on push" settings can be modified afterwards through the project's setting, however the hosting region can only be chosen during the creation of the project (see [Project Settings](/cloud/projects/settings)).
+    The Git branch and "Deploy on push" settings can be modified afterwards through the project's settings, however the hosting region can only be chosen during the creation of the project (see [Project Settings](/cloud/projects/settings)).
     :::
 
     5.b. (optional) Click on **Show advanced settings** to fill in the following options:
@@ -167,7 +167,7 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
     |--------------|---------------------------------------------------------------------------------------------------------|
     | Base directory | Write the name of the directory where your Strapi app is located in the repository. This is useful if you have multiple Strapi apps in the same repository or if you have a monorepo. |
     | Environment variables | Click on **Add variable** to add environment variables used to configure your Strapi app (see [Environment variables](/cms/configurations/environment/) for more information). You can also add environment variables to your Strapi application by adding a `.env` file to the root of your Strapi app directory. The environment variables defined in the `.env` file will be used by Strapi Cloud. |
-    | Node version | Choose a Node version from the drop-down. Default Node version will automatically be chosen to best match the version of your Strapi project. If you manually choose a version that doesn't match with your Strapi project, the build will fail but the explanation will be displayed in the build logs. |
+    | Node version | Choose a Node version from the drop-down. The default Node version will automatically be chosen to best match the version of your Strapi project. If you manually choose a version that doesn't match with your Strapi project, the build will fail but the explanation will be displayed in the build logs. |
 
     :::strapi Using Environment Variables
     You can use environment variable to connect your project to an external database rather than the default one used by Strapi Cloud (see [database configuration](/cms/configurations/database#environment-variables-in-database-configurations) for more details). If you would like to revert and use Strapi's default database again, you have to remove your `DATABASE_` environment variables (no automatic migration implied).
@@ -182,7 +182,7 @@ If you chose the free plan, this billing step will be skipped as you will not be
 
 To upgrade your project to a paid plan, you will need to fill in your billing information in the **Billing** section of your Profile.
 
-<Icon name="fast-forward" /> Skip to step 5 of the section below to finalise the creation of your project.
+<Icon name="fast-forward" /> Skip to step 5 of the section below to finalize the creation of your project.
 :::
 
 1. Click on the **Continue to billing** button. You will directly be redirected to the second and final project deployment interface. There you can review all your new project setup information, enter payment & billing details and receive your invoice.
@@ -195,18 +195,35 @@ To upgrade your project to a paid plan, you will need to fill in your billing in
     }}
     />
 
-2. Review your project: make sure the plan and setup information are correct. If needed, click the <Icon name="pencil-simple" /> **Edit** button to be redirected to the first interface of the project creation and fix any mistake.
+2. Review your project: make sure the plan and setup information are correct. If needed, click the <Icon name="pencil-simple" /> **Edit** button to navigate back to the first step of the project creation and fix any mistake.
 
 3. In the Payment section, fill in at least all mandatory elements for *Payment method* and *Billing information*.
 
 4. Check your invoice which informs you of what should be paid now and the following month. Optionally, you can enter a *Discount code* if you have one.
 
-5. Click on the **Create project** button to finalize the deployment of your new Strapi Cloud project. An initial deployment will automatically be triggered and you will be redirected to the *Projects* page.
+5. Click on the **Create project** button to finalize the creation of your new Strapi Cloud project.
 
-:::caution
-Create your Admin user after the initial deployment is complete. Do not share your application URL with anyone until you have created your Admin user.
+## Deploying your project
+
+After confirming the project creation, you will be redirected to your *Project dashboard* where you will be able to follow its creation and first deployment. 
+
+While your project is deploying, you can already start configuring some of your [project settings](/cloud/projects/settings).
+
+<ThemedImage
+    alt="Project creation steps"
+    sources={{
+        light: '/img/assets/cloud/project-creation-3.png',
+        dark: '/img/assets/cloud/project-creation-3_DARK.png',
+    }}
+    />
+
+:::note
+If an error occurs during the project creation, the progress indicator will stop and display an error message. You will see a **Retry** button next to the failed step, allowing you to restart the creation process.
 :::
 
+Once you project is successfully deployed, the creation tracker will be replaced by your deployments list and you will be able to visit your Cloud hosted project. Don't forget to create the first Admin user before sharing your Strapi project.
+
+
 ## <Icon name="fast-forward" /> What to do next?
 
 Now that you have deployed your project via the Cloud dashboard, we encourage you to explore the following ideas to have an even more complete Strapi Cloud experience:
diff --git a/docusaurus/docs/cloud/projects/settings.md b/docusaurus/docs/cloud/projects/settings.md
index 29bea264bb..cbfbe8d2ef 100644
--- a/docusaurus/docs/cloud/projects/settings.md
+++ b/docusaurus/docs/cloud/projects/settings.md
@@ -143,12 +143,12 @@ To create a new environment:
     | Git branch       | (mandatory) Select the right branch for your new environment.            |
     | Base directory   | Write the name of the base directory of your new environment.            |
     | Import variables | Tick the box to import variable names from an existing environment. Values will not be imported, and all variables will remain blank. |
-    | Auto-deploy      | Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch. Untick it to disable the option. |
+    | Deploy on push      | Tick this box to automatically trigger a deployment when changes are pushed to your selected branch. When disabled, you will need to manually deploy the latest changes. |
 
-4. Click on the **Add environment** button to create your project's new environment. A new deployment will automatically be triggered.
+4. Click on the **Add environment** button to create your project's new environment. You will then be redirected to your *Project dashboard* where you will be able to follow your new environment's creation and first deployment.
 
-:::caution
-If the creation of a new environment fails but you are still charged, try creating the environment again. This time, the environment creation should be successful and you will not be charged a second time. This behaviour is an known issue that should be fixed in the upcoming weeks.
+:::note
+If an error occurs during the environment creation, the progress indicator will stop and display an error message. You will see a **Retry** button next to the failed step, allowing you to restart the creation process.
 :::
 
 ### Billing & Usage
@@ -339,13 +339,14 @@ The <Icon name="arrow-clockwise" /> *Backups* tab informs you of the status and
 
 :::note Notes
 
-- The backup feature is not available for Strapi Cloud projects using the Free or Essential plans. You will need to upgrade to either the Pro or Scale plan to have your project automatically backed up and to have access to manual backups.
+- The backup feature is not available for Strapi Cloud projects on the Free or Essential plans. You will need to upgrade to the Pro or Scale plan to enable automatic backups and access the manual backup option.
+
+- Backups include only the database of your default Production environment. Assets uploaded to your project and databases from any secondary environments are not included.
+
+- The manual backup option becomes available shortly after the project’s first successful deployment.
 
-<!-- - Only project owners can restore a backup. Maintainers have access to the <Icon name="arrow-clockwise" /> *Backups* tab but the **Restore backup** button won't be displayed for them. Refer to [Collaboration](/cloud/projects/collaboration) for more information. -->
 
-- The manual backup option should become available shortly after project's first succesful deployment.
 
-- The backup feature is only available for the default, production environment. Other additional environment's settings will not show the <Icon name="arrow-clockwise" /> *Backups* tab.
 :::
 
 :::tip
@@ -364,7 +365,7 @@ For projects created before the release of the Backup feature in October 2023, t
 
 To create a manual backup, in the <Icon name="arrow-clockwise" /> *Backups* section, click on the **Create backup** button.
 
-The manual backup should start immediately, and restoration or creation of other backups will be disabled until backup is complete.
+The manual backup should start immediately, and restoration or creation of other backups will be disabled until the backup is complete.
 
 :::caution
 When creating a new manual backup, any existing manual backup will be deleted. You can only have one manual backup at a time.
@@ -379,6 +380,18 @@ If you need to restore a backup of your project:
 3. Click on the **Restore** button of the dialog. Once the restoration is finished, your project will be back to the state it was at the time of the chosen backup. You will be able to see the restoration timestamp and the backup restored in the <Icon name="arrow-clockwise"/> *Backups* tab.
 4. The timestamp of the last completed restoration will be displayed to help you track when the project was last restored.
 
+#### Downloading a backup
+
+If you need to download a backup of your project:
+
+1. In the <Icon name="arrow-clockwise" /> *Backups* section, click on the **Download backup** button.
+2. In the dialog, choose one of the available backups (automatic or manual) of your project in the *Choose backup* drop-down.
+3. Click on the **Download** button of the dialog to download the chosen backup's archive file in `.sql` format.
+
+:::note
+The backup file will include only the database of your default Production environment. It will not include assets or any other environment databases.
+:::
+
 ### Domains
 
 The <Icon name="browsers" /> *Domains* tab enables you to manage domains and connect new ones.
diff --git a/docusaurus/docs/cms/admin-panel-customization/wysiwyg-editor.md b/docusaurus/docs/cms/admin-panel-customization/wysiwyg-editor.md
index 462d54d12d..e427877b4b 100644
--- a/docusaurus/docs/cms/admin-panel-customization/wysiwyg-editor.md
+++ b/docusaurus/docs/cms/admin-panel-customization/wysiwyg-editor.md
@@ -15,38 +15,3 @@ Strapi's [admin panel](/cms/admin-panel-customization) comes with a built-in ric
 
 - You can install a third-party plugin, such as one for CKEditor, by visiting <ExternalLink to="https://market.strapi.io/" text="Strapi's Marketplace"/>.
 - You can create your own plugin to create and register a fully custom WYSIWYG field (see [custom fields documentation](/cms/features/custom-fields)).
-- You can take advantage of Strapi's admin panel [extensions](/cms/admin-panel-customization/extension) system and leverage the [bootstrap lifecycle function](/cms/plugins-development/admin-panel-api#bootstrap) of the admin panel.
-
-If you choose to use the extensions system, create your WYSIWYG component in the `/src/admin/extensions` folder and import it in the admin panel's `/src/admin/app.[tsx|js]` entry point file, then declare the new field with the `app.addFields()` function as follows:
-
-<Tabs groupId="js-ts">
-<TabItem value="js" label="JavaScript">
-
-```js title="/src/admin/app.js"
-// The following file contains the logic for your new WYSIWYG editor👇
-import MyNewWYSIGWYG from "./extensions/components/MyNewWYSIGWYG";
-
-export default {
-  bootstrap(app) {
-    app.addFields({ type: "wysiwyg", Component: MyNewWYSIGWYG });
-  },
-};
-```
-
-</TabItem>
-
-<TabItem value="ts" label="TypeScript">
-
-```js title="/src/admin/app.tsx"
-// The following file contains the logic for your new WYSIWYG editor👇
-import MyNewWYSIGWYG from "./extensions/components/MyNewWYSIGWYG";
-
-export default {
-  bootstrap(app) {
-    app.addFields({ type: "wysiwyg", Component: MyNewWYSIGWYG });
-  },
-};
-```
-
-</TabItem>
-</Tabs>
diff --git a/docusaurus/docs/cms/api/content-api.md b/docusaurus/docs/cms/api/content-api.md
index 65a0a04f31..f25f96543f 100644
--- a/docusaurus/docs/cms/api/content-api.md
+++ b/docusaurus/docs/cms/api/content-api.md
@@ -27,8 +27,8 @@ You can also use the [Strapi Client](/cms/api/client) library to interact with t
 
 REST and GraphQL APIs represent the top-level layers of the Content API exposed to external applications. Strapi also provides 2 lower-level APIs:
 
-- The [Document Service API](/cms/api/document-service) is the recommended API to interact with your application's database within the [backend server](/cms/customization) or through [plugins](/cms/plugins-development/developing-plugins). The Document Service is the layer that handles **documents** <DocumentDefinition /> as well as Strapi's complex content structures like components and dynamic zones.
-- The Query Engine API interacts with the database layer at a lower level and is used under the hood to execute database queries. It gives unrestricted internal access to the database layer, but is not aware of any advanced Strapi features that Strapi 5 can handle, like Draft & Publish, Internationalization, Content History, and more.<br/>⚠️ In most, if not all, use cases, you should use the Document Service API instead.
+- The [Document Service API](/cms/api/document-service), accessible through `strapi.documents`, is the recommended API to interact with your application's database within the [backend server](/cms/customization) or through [plugins](/cms/plugins-development/developing-plugins). The Document Service is the layer that handles **documents** <DocumentDefinition /> as well as Strapi's complex content structures like components and dynamic zones.
+- The [Query Engine API](/cms/api/query-engine), accessible through `strapi.db.query`, interacts with the database layer at a lower level and is used under the hood to execute database queries. It gives unrestricted internal access to the database layer, but is not aware of any advanced Strapi features that Strapi 5 can handle, like Draft & Publish, Internationalization, Content History, and more.<br/>⚠️ In most, if not all, use cases, you should use the Document Service API instead.
 
 <ThemedImage
 alt="Content APIs diagram"
diff --git a/docusaurus/docs/cms/api/document-service.md b/docusaurus/docs/cms/api/document-service.md
index a9f98991f6..f03aad1ec2 100644
--- a/docusaurus/docs/cms/api/document-service.md
+++ b/docusaurus/docs/cms/api/document-service.md
@@ -12,16 +12,36 @@ tags:
 
 # Document Service API
 
-The Document Service API is built on top of the **Query Engine API** <Annotation>2 different back-end APIs allow you to interact with your content: <ul><li>The [Query Engine API](/cms/api/query-engine) is the lower-level layer that offers unrestricted access to the database, but is not aware of complex Strapi content structures such as components and dynamic zones.</li><li>The Document Service API is built on top of the Query Engine and is the recommended way to interact with your content while you are customizing the back end server or developing plugins.</li></ul>More details can be found in the [Content API](/cms/api/content-api) and [backend customization](/cms/backend-customization) introductions.</Annotation> and used to perform CRUD ([create](#create), [retrieve](#findone), [update](#update), and [delete](#delete)) operations on **documents** <DocumentDefinition />.
+The Document Service API is built on top of the **Query Engine API** <Annotation>2 different back-end APIs allow you to interact with your content: <ul><li>The [Query Engine API](/cms/api/query-engine) is the lower-level layer that offers unrestricted access to the database, but is not aware of complex Strapi content structures such as components and dynamic zones.</li><li>The Document Service API is built on top of the Query Engine and is the recommended way to interact with your content while you are customizing the back end server or developing plugins.</li></ul>More details can be found in the [Content API](/cms/api/content-api) and [backend customization](/cms/backend-customization) introductions.</Annotation> and is used to perform CRUD ([create](#create), [retrieve](#findone), [update](#update), and [delete](#delete)) operations on **documents** <DocumentDefinition />.
 
-With the Document Service API, you can also [count](#count) documents and, if [Draft & Publish](/cms/features/draft-and-publish) is enabled on the content-type, perform Strapi-specific features such as [publishing](#publish)/[unpublishing](#unpublish) documents and [discarding drafts](#discarddraft).
+The Document Service API also supports [counting](#count) documents and, if [Draft & Publish](/cms/features/draft-and-publish) is enabled on the content-type, performing Strapi-specific operations such as [publishing](#publish), [unpublishing](#unpublish), and [discarding drafts](#discarddraft).
+
+In Strapi 5, documents are uniquely identified by their `documentId` at the API level.
+
+<ExpandableContent maxHeight="80px">
+
+**`documentId` explained: Replacing `id` from Strapi v4**
+
+In previous Strapi versions, the concept of `id` (used both in the Content API and as the database row identifier) was not always stable: a single entry could have multiple versions or localizations, and its numeric identifier `id` could change in cases such as duplication or import/export operations.
+
+To address this limitation, Strapi 5 introduced `documentId`, a 24-character alphanumeric string, as a unique and persistent identifier for a content entry, independent of its physical records.
+
+This new identifier is used internally in Strapi 5 to manage relationships, publishing, localization, and version history, as all possible variations of a content entry are now grouped under a single [document](/cms/api/document) concept.
+
+As a result, starting with Strapi 5, many APIs and services rely on `documentId` instead of `id` to ensure consistency across operations. Some APIs may still return both `documentId` and `id` to ease the transition, but using `documentId` for content queries is strongly recommended, as `documentId` might be the only identifier used in future Strapi versions.
+
+For more details on the transition from `id` to `documentId`, refer to the [breaking change page](/cms/migration/v4-to-v5/breaking-changes/use-document-id) and the [migration guide from Entity Service to Document Service API](/cms/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service).
+
+</ExpandableContent>
 
 :::strapi Entity Service API is deprecated in Strapi 5
-The Document Service API is meant to replace the Entity Service API used in Strapi v4 (<ExternalLink to="https://docs-v4.strapi.io/cms/api/entity-service" text="see Strapi v4 documentation"/>). Additional information on how to transition away from the Entity Service API to the Document Service API can be found in the related [migration reference](/cms/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service).
+The Document Service API replaces the Entity Service API used in Strapi v4 (<ExternalLink to="https://docs-v4.strapi.io/dev-docs/api/entity-service" text="see Strapi v4 documentation"/>).
+
+Additional information on how to migrate from the Entity Service API to the Document Service API can be found in the [migration reference](/cms/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service).
 :::
 
 :::note
-Relations can also be connected, disconnected, and set through the Document Service API just like with the REST API (see the [REST API relations documentation](/cms/api/rest/relations) for examples).
+Relations can also be connected, disconnected, and set through the Document Service API, just like with the REST API (see the [REST API relations documentation](/cms/api/rest/relations) for examples).
 :::
 
 ## `findOne()`
@@ -35,7 +55,7 @@ Syntax: `findOne(parameters: Params) => Document`
 | Parameter | Description | Default | Type |
 |-----------|-------------|---------|------|
 | `documentId` | Document id | | `ID` |
-| [`locale`](/cms/api/document-service/locale#find-one)|  Locale of the documents to create. | Default locale | String or `undefined` |
+| [`locale`](/cms/api/document-service/locale#find-one)|  Locale of the document to find. | Default locale | String or `undefined` |
 | [`status`](/cms/api/document-service/status#find-one) | _If [Draft & Publish](/cms/features/draft-and-publish) is enabled for the content-type_:<br/>Publication status, can be: <ul><li>`'published'` to find only published documents</li><li>`'draft'` to find only draft documents</li></ul> | `'draft'` | `'published'` or `'draft'` |
 | [`fields`](/cms/api/document-service/fields#findone)   | [Select fields](/cms/api/document-service/fields#findone) to return   | All fields<br/>(except those not populated by default)  | Object |
 | [`populate`](/cms/api/document-service/populate) | [Populate](/cms/api/document-service/populate) results with additional fields. | `null` | Object |
@@ -72,6 +92,8 @@ await strapi.documents('api::restaurant.restaurant').findOne({
 
 </ApiCall>
 
+The `findOne()` method returns the matching document if found, otherwise returns `null`.
+
 ## `findFirst()`
 
 Find the first document matching the parameters.
@@ -380,7 +402,10 @@ To update a document and publish the new version right away, you can:
 
 - update its draft version with `update()`, then [publish it](#publish) with `publish()`,
 - or directly add `status: 'published'` along with the other parameters passed to `update()` (see [`status` documentation](/cms/api/document-service/status#update)).
+:::
 
+:::caution
+It's not recommended to update repeatable components with the Document Service API (see the related [breaking change entry](/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api.md) for more details).
 :::
 
 ### Example
diff --git a/docusaurus/docs/cms/api/document.md b/docusaurus/docs/cms/api/document.md
index 8071de4207..b10658543b 100644
--- a/docusaurus/docs/cms/api/document.md
+++ b/docusaurus/docs/cms/api/document.md
@@ -33,7 +33,7 @@ Manipulating documents with the [Document Service API](/cms/api/document-service
 
 The following diagrams represent all the possible variations of content depending on which features, such as [Internationalization (i18n)](/cms/features/internationalization) and [Draft & Publish](/cms/features/draft-and-publish), are enabled for a content-type:
 
-<Tabs>
+<Tabs className="tabs--allow-multiline">
 <TabItem value="document-only" label="Neither i18n nor Draft & Publish enabled">
 
 <MermaidWithFallback
diff --git a/docusaurus/docs/cms/api/graphql.md b/docusaurus/docs/cms/api/graphql.md
index e8be8b6427..0e1853d81e 100644
--- a/docusaurus/docs/cms/api/graphql.md
+++ b/docusaurus/docs/cms/api/graphql.md
@@ -55,10 +55,27 @@ Once installed, the GraphQL playground is accessible at the `/graphql` URL and c
 
 <br/>
 
+The GraphQL plugin exposes only one endpoint that handles all queries and mutations. The default endpoint is `/graphql` and is defined in the [plugins configuration file](/cms/plugins/graphql#code-based-configuration):
+
+```js title="/config/plugins.js|ts"
+  export default {
+    shadowCRUD: true,
+    endpoint: '/graphql', // <— single GraphQL endpoint
+    subscriptions: false,
+    maxLimit: -1,
+    apolloServer: {},
+    v4CompatibilityMode: process.env.STRAPI_GRAPHQL_V4_COMPATIBILITY_MODE ?? false,
+  };
+```
+
 :::note No GraphQL API to upload media files
 The GraphQL API does not support media upload. Use the [REST API `POST /upload` endpoint](/cms/api/rest/upload) for all file uploads and use the returned info to link to it in content types. You can still update or delete uploaded files with the `updateUploadFile` and `deleteUploadFile` mutations using media files `id` (see [mutations on media files](#mutations-on-media-files)).
 :::
 
+:::caution `documentId` only
+The GraphQL API exposes documents using only the `documentId` field. The previous numeric `id` is no longer available here, although it is still returned by the REST API for backward compatibility (see [breaking change](/cms/migration/v4-to-v5/breaking-changes/use-document-id) for details).
+:::
+
 ## Queries
 
 Queries in GraphQL are used to fetch data without modifying it.
@@ -101,6 +118,9 @@ Documents <DocumentDefinition/> can be fetched by their `documentId`.
 
 To fetch multiple documents <DocumentDefinition/> you can use simple, flat queries or <ExternalLink to="https://www.apollographql.com/docs/technotes/TN0029-relay-style-connections/" text="Relay-style"/> queries:
 
+Flat queries return only the requested fields for each document. Relay-style queries end with `_connection` and return a `nodes` array together with a `pageInfo` object. Use Relay-style queries when you need pagination metadata.
+
+
 <Tabs groupId="flat-relay">
 
 <TabItem value="flat" label="Flat queries">
@@ -601,19 +621,24 @@ If upload mutations return a forbidden access error, ensure proper permissions a
 
 ## Filters
 
-<!-- TODO: create examples for every filter and expand this into a section -->
 Queries can accept a `filters` parameter with the following syntax:
 
 `filters: { field: { operator: value } }`
 
-Multiple filters can be combined together, and logical operators (`and`, `or`, `not`) can also be used and accept arrays of objects.
+Multiple filters can be combined together, and logical operators (`and`, `or`, `not`) can also be used and accept arrays of objects. When multiple field conditions are combined, they are implicitly joined with `and`.
+
+:::tip
+`and`, `or` and `not` operators can be nested inside one another.
+:::
 
 The following operators are available:
 
 | Operator       | Description                        |
 | -------------- | ---------------------------------- |
 | `eq`           | Equal                              |
+| `eqi`          | Equal, case insensitive            |
 | `ne`           | Not equal                          |
+| `nei`          | Not equal, case insensitive        |
 | `lt`           | Less than                          |
 | `lte`          | Less than or equal to              |
 | `gt`           | Greater than                       |
@@ -633,16 +658,207 @@ The following operators are available:
 | `or`           | Logical `or`                       |
 | `not`          | Logical `not`                      |
 
-```graphql title="Example with advanced filters: Fetch pizzerias with an averagePrice lower than 20"
+<ExpandableContent>
+
+```graphql title="Simple examples for comparison operators (eq, ne, lt, lte, gt, gte, between)"
+# eq - returns restaurants with the exact name "Biscotte"
+{
+  restaurants(filters: { name: { eq: "Biscotte" } }) {
+    name
+  }
+}
+
+# eqi - returns restaurants whose name equals "Biscotte",
+#       comparison is case-insensitive
+{
+  restaurants(filters: { name: { eqi: "Biscotte" } }) {
+    name
+  }
+}
+
+# ne - returns restaurants whose name is not "Biscotte"
+{
+  restaurants(filters: { name: { ne: "Biscotte" } }) {
+    name
+  }
+}
+
+# nei - returns restaurants whose name is not "Biscotte",
+#       comparison is case-insensitive
+{
+  restaurants(filters: { name: { nei: "Biscotte" } }) {
+    name
+  }
+}
+
+# lt - returns restaurants with averagePrice less than 20
+{
+  restaurants(filters: { averagePrice: { lt: 20 } }) {
+    name
+  }
+}
+
+# lte - returns restaurants with averagePrice less than or equal to 20
+{
+  restaurants(filters: { averagePrice: { lte: 20 } }) {
+    name
+  }
+}
+
+# gt - returns restaurants with averagePrice greater than 20
+{
+  restaurants(filters: { averagePrice: { gt: 20 } }) {
+    name
+  }
+}
+
+# gte - returns restaurants with averagePrice greater than or equal to 20
+{
+  restaurants(filters: { averagePrice: { gte: 20 } }) {
+    name
+  }
+}
+
+# between - returns restaurants with averagePrice between 10 and 30
+{
+  restaurants(filters: { averagePrice: { between: [10, 30] } }) {
+    name
+  }
+}
+```
+
+</ExpandableContent>
+
+```graphql title="Simple examples for membership operators (in, notIn)"
+# in - returns restaurants with category either "pizza" or "burger"
+{
+  restaurants(filters: { category: { in: ["pizza", "burger"] } }) {
+    name
+  }
+}
+
+# notIn - returns restaurants whose category is neither "pizza" nor "burger"
+{
+  restaurants(filters: { category: { notIn: ["pizza", "burger"] } }) {
+    name
+  }
+}
+```
+
+<ExpandableContent>
+
+```graphql title="Simple examples for string matching operators (contains, notContains, containsi, notContains, startsWith, endsWith)"
+# contains - returns restaurants whose name contains "Pizzeria"
+{
+  restaurants(filters: { name: { contains: "Pizzeria" } }) {
+    name
+  }
+}
+
+# notContains - returns restaurants whose name does NOT contain "Pizzeria"
+{
+  restaurants(filters: { name: { notContains: "Pizzeria" } }) {
+    name
+  }
+}
+
+# containsi - returns restaurants whose name contains "pizzeria" (case‑insensitive)
+{
+  restaurants(filters: { name: { containsi: "pizzeria" } }) {
+    name
+  }
+}
+
+# notContainsi - returns restaurants whose name does NOT contain "pizzeria" (case‑insensitive)
+{
+  restaurants(filters: { name: { notContainsi: "pizzeria" } }) {
+    name
+  }
+}
+
+# startsWith - returns restaurants whose name starts with "Pizza"
+{
+  restaurants(filters: { name: { startsWith: "Pizza" } }) {
+    name
+  }
+}
+
+# endsWith - returns restaurants whose name ends with "Inc"
+{
+  restaurants(filters: { name: { endsWith: "Inc" } }) {
+    name
+  }
+}
+```
+
+</ExpandableContent>
+
+```graphql title="Simple examples for null checks operators (null, notNull)"
+# null - returns restaurants where description is null
+{
+  restaurants(filters: { description: { null: true } }) {
+    name
+  }
+}
+
+# notNull - returns restaurants where description is not null
+{
+  restaurants(filters: { description: { notNull: true } }) {
+    name
+  }
+}
+```
+
+```graphql title="Simple examples for logical operators (and, or, not)"
+# and - both category must be "pizza" AND averagePrice must be < 20
+{
+  restaurants(filters: {
+    and: [
+      { category: { eq: "pizza" } },
+      { averagePrice: { lt: 20 } }
+    ]
+  }) {
+    name
+  }
+}
+
+# or - category is "pizza" OR category is "burger"
+{
+  restaurants(filters: {
+    or: [
+      { category: { eq: "pizza" } },
+      { category: { eq: "burger" } }
+    ]
+  }) {
+    name
+  }
+}
+
+# not - category must NOT be "pizza"
+{
+  restaurants(filters: {
+    not: { category: { eq: "pizza" } }
+  }) {
+    name
+  }
+}
+```
+
+```graphql title="Example with nested logical operators: use and, or, and not to find pizzerias under 20 euros"
 {
   restaurants(
-    filters: { 
-      averagePrice: { lt: 20 },
-      or: [
-        { name: { eq: "Pizzeria" }}
-        { name: { startsWith: "Pizzeria" }}
-      ]}
-    ) {
+    filters: {
+      and: [
+        { not: { averagePrice: { gte: 20 } } }
+        {
+          or: [
+            { name: { eq: "Pizzeria" } }
+            { name: { startsWith: "Pizzeria" } }
+          ]
+        }
+      ]
+    }
+  ) {
     documentId
     name
     averagePrice
@@ -894,3 +1110,12 @@ mutation DeleteRestaurant($documentId: ID!, $locale: I18NLocaleCode) {
   }
 }
 ```
+
+## Advanced use cases
+
+Click on the following cards for short guides on more advanced use cases leveraging the GraphQL API and Strapi features: 
+
+<CustomDocCardsWrapper>
+  <CustomDocCard emoji="🖼️" title="Advanced queries" description="View examples of multi-level queries and custom resolver chains for the GraphQL API." link="/cms/api/graphql/advanced-queries" />
+  <CustomDocCard emoji="🖼️" title="Advanced policies" description="View examples of advanced policies such as conditional visibility and group membership for the GraphQL API." link="/cms/api/graphql/advanced-policies" />
+</CustomDocCardsWrapper>
\ No newline at end of file
diff --git a/docusaurus/docs/cms/api/graphql/advanced-policies.md b/docusaurus/docs/cms/api/graphql/advanced-policies.md
new file mode 100644
index 0000000000..6f42fc2a1a
--- /dev/null
+++ b/docusaurus/docs/cms/api/graphql/advanced-policies.md
@@ -0,0 +1,64 @@
+---
+title: Advanced policies for GraphQL
+displayed_sidebar: cmsSidebar
+tags:
+  - GraphQL API
+  - policies
+---
+
+# Advanced policies for the GraphQL API
+
+Requests sent to the [GraphQL API](/cms/api/graphql) pass through Strapi's [middlewares](/cms/backend-customization/middlewares.md) and [policies](/cms/backend-customization/policies.md) system. Policies can be attached to resolvers to implement complex authorization rules, as shown in the present short guide.
+
+For additional information on GraphQL policies, please refer to the [GraphQL plugin configuration](/cms/plugins/graphql#extending-the-schema) documentation.
+
+## Conditional visibility
+
+To limit the number of returned entries for unauthenticated users you can write a policy that modifies resolver arguments:
+
+```ts title="/src/policies/limit-public-results.ts"
+export default async (policyContext, config, { strapi }) => {
+  const { state, args } = policyContext;
+
+  if (!state.user) {
+    args.limit = 4; // only return 4 results for public
+  }
+
+  return true;
+};
+```
+
+Register the policy in `/config/policies.ts` and apply it to a resolver:
+
+```ts title="/config/policies.ts"
+export default {
+  'api::restaurant.restaurant': {
+    find: [ 'global::limit-public-results' ],
+  },
+};
+```
+
+## Group membership
+
+Policies can access `policyContext.state.user` to check group membership, as in the following example:
+
+```ts title="/src/policies/is-group-member.ts"
+export default async ({ state }, config, { strapi }) => {
+  const userGroups = await strapi.query('plugin::users-permissions.group').findMany({
+    where: { users: { id: state.user.id } },
+  });
+  return userGroups.some(g => g.name === config.group);
+};
+```
+
+Use the policy with the following configuration:
+
+```ts title="/config/policies.ts"
+export default {
+  'api::restaurant.restaurant': {
+    find: [{ name: 'global::is-group-member', config: { group: 'editors' } }],
+  },
+};
+```
+
+With this setup the resolver only returns results if the authenticated user belongs to the `editors` group.
diff --git a/docusaurus/docs/cms/api/graphql/advanced-queries.md b/docusaurus/docs/cms/api/graphql/advanced-queries.md
new file mode 100644
index 0000000000..8db3a4d05f
--- /dev/null
+++ b/docusaurus/docs/cms/api/graphql/advanced-queries.md
@@ -0,0 +1,52 @@
+---
+title: Advanced queries for GraphQL
+displayed_sidebar: cmsSidebar
+tags:
+  - GraphQL API
+---
+
+# Advanced queries for the GraphQL API
+
+Strapi's [GraphQL API](/cms/api/graphql) resolves many queries automatically, but complex data access can require deeper relation fetching or chaining resolvers. The present short guide explains how to handle such advanced scenarios.
+
+For additional information, please refer to the [GraphQL customization](/cms/plugins/graphql#extending-the-schema) documentation.
+
+## Multi-level queries
+
+Use nested selection sets to fetch relations several levels deep, as in the following example:
+
+```graphql
+{
+  restaurants {
+    documentId
+    name
+    categories {
+      documentId
+      name
+      parent {
+        documentId
+        name
+      }
+    }
+  }
+}
+```
+
+The GraphQL plugin automatically resolves nested relations. If you need to apply custom logic at a specific level, create a custom resolver for that field.
+
+## Resolver chains
+
+Custom resolvers can call other resolvers to reuse existing logic. A common pattern is to resolve permissions or context data in a parent resolver and pass it down to child resolvers, as in the following example:
+
+```js title="/src/api/restaurant/resolvers/restaurant.ts"
+export default {
+  Query: {
+    restaurants: async (parent, args, ctx) => {
+      const documents = await strapi.documents('api::restaurant.restaurant').findMany(args);
+      return documents.map(doc => ctx.request.graphql.resolve('Restaurant', doc));
+    },
+  },
+};
+```
+
+In this example the parent resolver fetches restaurants using the [Document Service API](/cms/api/document-service), then delegates to the generated `Restaurant` resolver provided by the plugin so default behavior such as field selection still applies.
diff --git a/docusaurus/docs/cms/api/query-engine.md b/docusaurus/docs/cms/api/query-engine.md
index 91575d0c3a..a7d5602125 100644
--- a/docusaurus/docs/cms/api/query-engine.md
+++ b/docusaurus/docs/cms/api/query-engine.md
@@ -13,19 +13,15 @@ tags:
 import EntityQueryKnex from '/docs/snippets/entity-query-knex.md'
 import BackendIntroCrosslink from '/docs/snippets/backend-custom-intro-crosslink.md'
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Query Engine API
 
-The Strapi backend provides a Query Engine API to interact with the database layer at a lower level. 
+The Strapi backend provides a Query Engine API to interact with the database layer at a lower level.
 
 <ConsiderDocumentService />
 
-:::prerequisites
-Before diving deeper into the Query Engine API documentation, it is recommended that you read the following introductions:
-- the [backend customization introduction](/cms/backend-customization),
-- and the [Content APIs introduction](/cms/api/content-api).
-:::
-
+<QueryEnginePrereqs />
 
 ## Basic usage
 
diff --git a/docusaurus/docs/cms/api/query-engine/bulk-operations.md b/docusaurus/docs/cms/api/query-engine/bulk-operations.md
index 8bf48dfc4b..3076222cbc 100644
--- a/docusaurus/docs/cms/api/query-engine/bulk-operations.md
+++ b/docusaurus/docs/cms/api/query-engine/bulk-operations.md
@@ -14,10 +14,12 @@ tags:
 ---
 
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Bulk Operations with the Query Engine API
 
 <ConsiderDocumentService />
+<QueryEnginePrereqs />
 
 :::caution
 To avoid performance issues, bulk operations are not allowed on relations.
diff --git a/docusaurus/docs/cms/api/query-engine/filtering.md b/docusaurus/docs/cms/api/query-engine/filtering.md
index 4cc6da09a1..ecb67af088 100644
--- a/docusaurus/docs/cms/api/query-engine/filtering.md
+++ b/docusaurus/docs/cms/api/query-engine/filtering.md
@@ -13,10 +13,12 @@ tags:
 
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
 import DeepFilteringBlogLink from '/docs/snippets/deep-filtering-blog.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Filtering with the Query Engine API
 
 <ConsiderDocumentService />
+<QueryEnginePrereqs />
 
 The [Query Engine API](/cms/api/query-engine/) offers the ability to filter results found with its [findMany()](/cms/api/query-engine/single-operations#findmany) method.
 
diff --git a/docusaurus/docs/cms/api/query-engine/order-pagination.md b/docusaurus/docs/cms/api/query-engine/order-pagination.md
index f5b94f183a..c4000dde92 100644
--- a/docusaurus/docs/cms/api/query-engine/order-pagination.md
+++ b/docusaurus/docs/cms/api/query-engine/order-pagination.md
@@ -12,10 +12,12 @@ tags:
 ---
 
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Ordering and Paginating with the Query Engine API
 
 <ConsiderDocumentService />
+<QueryEnginePrereqs />
 
 The [Query Engine API](/cms/api/query-engine) offers the ability to [order](#ordering) and [paginate](#pagination) results.
 
diff --git a/docusaurus/docs/cms/api/query-engine/populating.md b/docusaurus/docs/cms/api/query-engine/populating.md
index d5ae891a5a..074821db0a 100644
--- a/docusaurus/docs/cms/api/query-engine/populating.md
+++ b/docusaurus/docs/cms/api/query-engine/populating.md
@@ -12,10 +12,12 @@ tags:
 ---
 
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Populating with the Query Engine API
 
 <ConsiderDocumentService />
+<QueryEnginePrereqs />
 
 Relations and components have a unified API for populating them.
 
diff --git a/docusaurus/docs/cms/api/query-engine/single-operations.md b/docusaurus/docs/cms/api/query-engine/single-operations.md
index fb423f060e..678d621b51 100644
--- a/docusaurus/docs/cms/api/query-engine/single-operations.md
+++ b/docusaurus/docs/cms/api/query-engine/single-operations.md
@@ -17,10 +17,12 @@ tags:
 
 import ManagingRelations from '/docs/snippets/managing-relations.md'
 import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
+import QueryEnginePrereqs from '/docs/snippets/query-engine-prereqs.md'
 
 # Single Operations with the Query Engine API
 
 <ConsiderDocumentService />
+<QueryEnginePrereqs />
 
 ## findOne()
 
diff --git a/docusaurus/docs/cms/api/rest.md b/docusaurus/docs/cms/api/rest.md
index 72b8c61e52..fc09e4f419 100644
--- a/docusaurus/docs/cms/api/rest.md
+++ b/docusaurus/docs/cms/api/rest.md
@@ -134,7 +134,7 @@ The Upload package (which powers the [Media Library feature](/cms/features/media
 Strapi 5's Content API includes 2 major differences with Strapi v4:
 
 - The response format has been flattened, which means attributes are no longer nested in a `data.attributes` object and are directly accessible at the first level of the `data` object (e.g., a content-type's "title" attribute is accessed with `data.title`).
-- Strapi 5 now uses **documents** <DocumentDefinition/> and documents are accessed by their `documentId`.
+- Strapi 5 now uses **documents** <DocumentDefinition/> and documents are accessed by their `documentId` (see [breaking change entry](/cms/migration/v4-to-v5/breaking-changes/use-document-id) for details)
 :::
 
 Requests return a response as an object which usually includes the following keys:
diff --git a/docusaurus/docs/cms/api/rest/filters.md b/docusaurus/docs/cms/api/rest/filters.md
index cfa460c1fb..a248b9e9d5 100644
--- a/docusaurus/docs/cms/api/rest/filters.md
+++ b/docusaurus/docs/cms/api/rest/filters.md
@@ -67,6 +67,12 @@ The following operators are available:
 | `$and`          | Joins the filters in an "and" expression |
 | `$not`          | Joins the filters in an "not" expression |
 
+When several fields are passed in the `filters` object, they are implicitly combined with `$and` (e.g. `GET /api/restaurants?filters[stars][$gte]=3&filters[open][$eq]=true` only returns restaurants that are open and have at least 3 stars).
+
+:::tip
+`$and`, `$or` and `$not` operators can be nested inside one another.
+:::
+
 :::caution
 By default, the filters can only be used from `find` endpoints generated by the Content-type Builder and the CLI.
 :::
@@ -206,7 +212,7 @@ Complex filtering is combining multiple filters using advanced methods such as c
 <ApiCall>
 <Request title="Find books with 2 possible dates and a specific author">
 
-`GET /api/books?filters[$or][0][date][$eq]=2020-01-01&filters[$or][1][date][$eq]=2020-01-02&filters[author][name][$eq]=Kai%20doe`
+`GET /api/books?filters[$and][0][$or][0][date][$eq]=2020-01-01&filters[$and][0][$or][1][date][$eq]=2020-01-02&filters[$and][1][author][name][$eq]=Kai%20doe`
 
 </Request>
 
@@ -219,23 +225,29 @@ Complex filtering is combining multiple filters using advanced methods such as c
 const qs = require('qs');
 const query = qs.stringify({
   filters: {
-    $or: [
+    $and: [
       {
-        date: {
-          $eq: '2020-01-01',
-        },
+        $or: [
+          {
+            date: {
+              $eq: '2020-01-01',
+            },
+          },
+          {
+            date: {
+              $eq: '2020-01-02',
+            },
+          },
+        ],
       },
       {
-        date: {
-          $eq: '2020-01-02',
+        author: {
+          name: {
+            $eq: 'Kai doe',
+          },
         },
       },
     ],
-    author: {
-      name: {
-        $eq: 'Kai doe',
-      },
-    },
   },
 }, {
   encodeValuesOnly: true, // prettify URL
diff --git a/docusaurus/docs/cms/api/rest/guides/intro.md b/docusaurus/docs/cms/api/rest/guides/intro.md
index a6c36c5c7c..204de65784 100644
--- a/docusaurus/docs/cms/api/rest/guides/intro.md
+++ b/docusaurus/docs/cms/api/rest/guides/intro.md
@@ -33,6 +33,8 @@ Some of the additional resources listed in this section have been created for St
 
 Additional tutorials and guides can be found in the following blog posts:
 
+<CustomDocCard emoji="➕" title="What is a REST API? Beginner’s Guide + Examples Using Strapi" description="Learn the founding principles of REST APIs and how you can use the Strapi REST API." link="https://strapi.io/blog/what-is-a-rest-api-beginners-guide-examples-using-strapi" />
+
 <CustomDocCard emoji="➕" title="Authenticating requests with the REST API" description="Learn how to authenticate your REST API queries with JSON Web Tokens and API tokens." link="https://strapi.io/blog/guide-on-authenticating-requests-with-the-rest-api" />
 
 <CustomDocCard emoji="➕" title="Using Fetch with Strapi's Content API" description="Explore how to use the fetch() method of the Fetch API to interact with Strapi's Content API." link="https://strapi.io/blog/mastering-api-requests-using-fetch-with-strapi-content-api" />
diff --git a/docusaurus/docs/cms/backend-customization/controllers.md b/docusaurus/docs/cms/backend-customization/controllers.md
index 6414094fea..1d74990896 100644
--- a/docusaurus/docs/cms/backend-customization/controllers.md
+++ b/docusaurus/docs/cms/backend-customization/controllers.md
@@ -25,7 +25,7 @@ In most cases, the controllers will contain the bulk of a project's business log
   <em><figcaption style={{fontSize: '12px'}}>The diagram represents a simplified version of how a request travels through the Strapi back end, with controllers highlighted. The backend customization introduction page includes a complete, <a href="/cms/backend-customization#interactive-diagram">interactive diagram</a>.</figcaption></em>
 </figure>
 
-## Implementation 
+## Implementation
 
 Controllers can be [generated or added manually](#adding-a-new-controller). Strapi provides a `createCoreController` factory function that automatically generates core controllers and allows building custom ones or [extend or replace the generated controllers](#extending-core-controllers).
 
@@ -249,7 +249,7 @@ Within the Strapi factories the following functions are exposed that can be used
 These functions automatically inherit the sanitization settings from the model and sanitize the data accordingly based on the content-type schema and any of the content API authentication strategies, such as the Users & Permissions plugin or API tokens.
 
 :::warning
-Because these methods use the model associated with the current controller, if you query data that is from another model (i.e., doing a find for "menus" within a "restaurant" controller method), you must instead use the `@strapi/utils` tools, such as `sanitize.contentAPI.query` described in [Sanitizing Custom Controllers](#sanitize-validate-custom-controllers), or else the result of your query will be sanitized against the wrong model.
+Because these methods use the model associated with the current controller, if you query data that is from another model (i.e., doing a find for "menus" within a "restaurant" controller method), you must instead use the `strapi.contentAPI` methods, such as `strapi.contentAPI.sanitize.query` described in [Sanitizing Custom Controllers](#sanitize-validate-custom-controllers), or else the result of your query will be sanitized against the wrong model.
 :::
 
 <Tabs groupId="js-ts">
@@ -298,16 +298,16 @@ export default factories.createCoreController('api::restaurant.restaurant', ({ s
 
 #### Sanitization and validation when building custom controllers  {#sanitize-validate-custom-controllers}
 
-Within custom controllers, there are 5 primary functions exposed via the `@strapi/utils` package that can be used for sanitization and validation:
+Within custom controllers, Strapi exposes the following functions via `strapi.contentAPI` for sanitization and validation:
 
 
 | Function Name                | Parameters         | Description                                             |
 |------------------------------|--------------------|---------------------------------------------------------|
-| `sanitize.contentAPI.input`  | `data`, `schema`, `auth`      | Sanitizes the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
-| `sanitize.contentAPI.output` | `data`, `schema`, `auth`      | Sanitizes the response output including restricted relations, private fields, passwords, and other nested "visitors" added by plugins  |
-| `sanitize.contentAPI.query`  | `ctx.query`, `schema`, `auth` | Sanitizes the request query including filters, sort, fields, and populate  |
-| `validate.contentAPI.query`  | `ctx.query`, `schema`, `auth` | Validates the request query including filters, sort, fields (currently not populate) |
-| `validate.contentAPI.input`  | `data`, `schema`, `auth` | (EXPERIMENTAL) Validates the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
+| `strapi.contentAPI.sanitize.input`  | `data`, `schema`, `auth`      | Sanitizes the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
+| `strapi.contentAPI.sanitize.output` | `data`, `schema`, `auth`      | Sanitizes the response output including restricted relations, private fields, passwords, and other nested "visitors" added by plugins  |
+| `strapi.contentAPI.sanitize.query`  | `ctx.query`, `schema`, `auth` | Sanitizes the request query including filters, sort, fields, and populate  |
+| `strapi.contentAPI.validate.query`  | `ctx.query`, `schema`, `auth` | Validates the request query including filters, sort, fields (currently not populate) |
+| `strapi.contentAPI.validate.input`  | `data`, `schema`, `auth` | (EXPERIMENTAL) Validates the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
 
 :::note 
 Depending on the complexity of your custom controllers, you may need additional sanitization that Strapi cannot currently account for, especially when combining the data from multiple sources.
@@ -319,17 +319,16 @@ Depending on the complexity of your custom controllers, you may need additional
 
 ```js title="./src/api/restaurant/controllers/restaurant.js"
 
-const { sanitize, validate } = require('@strapi/utils');
-
 module.exports = {
   async findCustom(ctx) {
     const contentType = strapi.contentType('api::test.test');
-    await validate.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
-    const sanitizedQueryParams = await sanitize.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
+
+    await strapi.contentAPI.validate.query(ctx.query, contentType, { auth: ctx.state.auth });
+    const sanitizedQueryParams = await strapi.contentAPI.sanitize.query(ctx.query, contentType, { auth: ctx.state.auth });
 
     const documents = await strapi.documents(contentType.uid).findMany(sanitizedQueryParams);
 
-    return await sanitize.contentAPI.output(documents, contentType, { auth: ctx.state.auth });
+    return await strapi.contentAPI.sanitize.output(documents, contentType, { auth: ctx.state.auth });
   }
 }
 ```
@@ -342,18 +341,16 @@ module.exports = {
 
 ```js title="./src/api/restaurant/controllers/restaurant.ts"
 
-import { sanitize, validate } from '@strapi/utils';
-
 export default {
   async findCustom(ctx) {
     const contentType = strapi.contentType('api::test.test');
 
-    await validate.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
-    const sanitizedQueryParams = await sanitize.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
+    await strapi.contentAPI.validate.query(ctx.query, contentType, { auth: ctx.state.auth });
+    const sanitizedQueryParams = await strapi.contentAPI.sanitize.query(ctx.query, contentType, { auth: ctx.state.auth });
 
     const documents = await strapi.documents(contentType.uid).findMany(sanitizedQueryParams);
 
-    return await sanitize.contentAPI.output(documents, contentType, { auth: ctx.state.auth });
+    return await strapi.contentAPI.sanitize.output(documents, contentType, { auth: ctx.state.auth });
   }
 }
 ```
diff --git a/docusaurus/docs/cms/backend-customization/services.md b/docusaurus/docs/cms/backend-customization/services.md
index ee9f2e4c0b..e963e4a79b 100644
--- a/docusaurus/docs/cms/backend-customization/services.md
+++ b/docusaurus/docs/cms/backend-customization/services.md
@@ -264,6 +264,8 @@ export default factories.createCoreController('api::restaurant.restaurant', ({ s
 When a new [content-type](/cms/backend-customization/models.md#content-types) is created, Strapi builds a generic service with placeholder code, ready to be customized.
 :::
 
+
+
 ### Extending core services
 
 Core services are created for each content-type and could be used by [controllers](/cms/backend-customization/controllers.md) to execute reusable logic through a Strapi project. Core services can be customized to implement your own logic. The following code examples should help you get started.
@@ -417,3 +419,39 @@ In the syntax examples above, `serviceName` is the name of the service file for
 :::tip
 To list all the available services, run `yarn strapi services:list`.
 :::
+
+### Core service methods
+
+Services generated with `createCoreService` inherit methods that wrap the [Document Service API](/cms/api/document-service). The available methods depend on the content-type:
+
+#### Collection types
+
+| Method | Description |
+| --- | --- |
+| `find(params)` | Wrapper for [`findMany`](/cms/api/document-service#findmany); returns a paginated list of documents. |
+| `findOne(documentId, params)` | Wrapper for [`findOne`](/cms/api/document-service#findone); returns a single document by its `documentId`. |
+| `create(params)` | Wrapper for [`create`](/cms/api/document-service#create); creates a new document. |
+| `update(documentId, params)` | Wrapper for [`update`](/cms/api/document-service#update); updates an existing document. |
+| `delete(documentId, params)` | Wrapper for [`delete`](/cms/api/document-service#delete); removes a document. |
+| `count(params)` | Wrapper for [`count`](/cms/api/document-service#count); returns the number of matching documents. |
+| `publish(documentId, params)` | Wrapper for [`publish`](/cms/api/document-service#publish); publishes a draft document. |
+| `unpublish(documentId, params)` | Wrapper for [`unpublish`](/cms/api/document-service#unpublish); unpublishes a document. |
+| `discardDraft(documentId, params)` | Wrapper for [`discardDraft`](/cms/api/document-service#discarddraft); deletes the draft copy. |
+
+#### Single types
+
+| Method | Description |
+| --- | --- |
+| `find(params)` | Returns the single document (uses [`findFirst`](/cms/api/document-service#findfirst) internally). |
+| `createOrUpdate({ data, ...params })` | Creates the document if it doesn't exist or updates it (uses [`update`](/cms/api/document-service#update)). |
+| `delete(params)` | Deletes the document (uses [`delete`](/cms/api/document-service#delete)). |
+| `count(params)` | Counts documents matching the filters (uses [`count`](/cms/api/document-service#count)). |
+| `publish(params)` | Publishes a draft document (uses [`publish`](/cms/api/document-service#publish)). |
+| `unpublish(params)` | Unpublishes the document (uses [`unpublish`](/cms/api/document-service#unpublish)). |
+| `discardDraft(params)` | Deletes the draft copy (uses [`discardDraft`](/cms/api/document-service#discarddraft)). |
+
+#### Parameters and default behavior
+
+Core service methods accept the same parameters as their underlying [Document Service API](/cms/api/document-service) calls, such as `fields`, `filters`, `sort`, `pagination`, `populate`, `locale`, and `status`. When no `status` is provided, Strapi automatically sets `status: 'published'` so only published content is returned. To query draft documents, explicitly pass `status: 'draft'` or another value supported by the Document Service.
+
+The `createCoreService` factory also exposes a `getFetchParams(params)` helper that converts a controller's query object into the parameter format expected by these methods. This helper can be reused when overriding core methods to forward sanitized parameters to `strapi.documents()`.
diff --git a/docusaurus/docs/cms/backend-customization/webhooks.md b/docusaurus/docs/cms/backend-customization/webhooks.md
index 503326fbda..a95d0b89d1 100644
--- a/docusaurus/docs/cms/backend-customization/webhooks.md
+++ b/docusaurus/docs/cms/backend-customization/webhooks.md
@@ -506,4 +506,8 @@ The event is triggered when a [release](/cms/features/releases) is published.
 - Implement retries for failed webhook requests to handle transient errors.
 - Log webhook events for debugging and monitoring.
 - Use secure, HTTPS endpoints for receiving webhooks.
-- Set up rate limiting to avoid being overwhelmed by multiple webhook requests.
\ No newline at end of file
+- Set up rate limiting to avoid being overwhelmed by multiple webhook requests.
+
+:::tip
+If you want to learn more about how to use webhooks with Next.js, please have a look at the [dedicated blog article](https://strapi.io/blog/how-to-create-an-ssg-static-site-generation-application-with-strapi-webhooks-and-nextjs).
+:::
\ No newline at end of file
diff --git a/docusaurus/docs/cms/cli.md b/docusaurus/docs/cms/cli.md
index 1bfa305d26..ed308fbefa 100644
--- a/docusaurus/docs/cms/cli.md
+++ b/docusaurus/docs/cms/cli.md
@@ -3,6 +3,7 @@ title: Command Line Interface
 displayed_sidebar: cmsSidebar
 description: Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds.
 sidebar_label: Strapi CLI
+toc_max_heading_level: 2
 tags:
   - Command Line Interface (CLI)
   - strapi develop
@@ -19,7 +20,7 @@ tags:
 Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds. The CLI works with both the `yarn` and `npm` package managers.
 
 :::caution
-Interactive commands such as `strapi admin:create-user` don't display prompts with `npm`. A fix for the `npm` package manager is anticipated by March 2023. In the meantime, consider using the `yarn` package manager.
+Interactive commands such as `strapi admin:create-user` don't display prompts with `npm`. Please consider using the `yarn` package manager.
 :::
 
 :::note
@@ -117,6 +118,8 @@ Deploys to Strapi Cloud (see [Cloud CLI](/cloud/cli/cloud-cli#strapi-deploy) doc
 strapi export
 ```
 
+The archive contains folders such as `configuration`, `entities`, `links`, and `schemas` with data stored in <ExternalLink to="https://jsonlines.org/" text="JSON lines" /> files. Use `--no-encrypt --no-compress` to generate a readable `.tar` that can be inspected or converted to other formats.
+
 The exported file is automatically named using the format `export_YYYYMMDDHHMMSS` with the current date and timestamp. Alternately, you can specify the filename using the `-f` or `--file` flag. The following table provides all of the available options as command line flags:
 
 | Option              |  Type  | Description                                                                                                                |
@@ -147,6 +150,8 @@ strapi export --no-encrypt
 strapi import
 ```
 
+The command accepts archives generated by `strapi export`. Compression (`.gz`) and encryption (`.enc`) are detected from the filename, so providing a plain `.tar` is also valid.
+
 | Option         | Type   | Description                                                               |
 | -------------- | ------ | ------------------------------------------------------------------------- |
 | `-k,` `--key`  | string | Provide the encryption key in the command instead of a subsequent prompt. |
@@ -331,12 +336,132 @@ strapi admin:reset-user-password --email=chef@strapi.io --password=Gourmet1234
 
 ## strapi generate
 
-Run a fully interactive CLI to generate APIs, [controllers](/cms/backend-customization/controllers), [content-types](/cms/backend-customization/models), [plugins](/cms/plugins-development/create-a-plugin), [policies](/cms/backend-customization/policies), [middlewares](/cms/backend-customization/middlewares) and [services](/cms/backend-customization/services), and [migrations](/cms/database-migrations).
+Generate APIs, [controllers](/cms/backend-customization/controllers), [content-types](/cms/backend-customization/models), [policies](/cms/backend-customization/policies), [middlewares](/cms/backend-customization/middlewares), [services](/cms/backend-customization/services), and [migrations](/cms/database-migrations).
 
 ```bash
 strapi generate
 ```
 
+The command displays an interactive menu with the following options:
+
+- **api** - Generate a new API with controller and service
+- **controller** - Generate a new controller
+- **content-type** - Generate a new content type with schema
+- **policy** - Generate a new policy
+- **middleware** - Generate a new middleware
+- **migration** - Generate a new database migration
+- **service** - Generate a new service
+
+![strapi generate GIF](/img/assets/cli/strapi-generate.gif)
+
+The generator detects TypeScript or JavaScript automatically and creates files with the correct extension (`.ts` or `.js`).
+Generated files include commented examples. Singular and plural names must be different and use kebab-case format.
+
+<ExpandableContent maxHeight="120px" showMoreText="Show more…" showLessText="Show less">
+
+### API generator
+
+Creates an API with [controller](/cms/backend-customization/controllers) and [service](/cms/backend-customization/services) files.
+
+**Generated file:** `controllers/[name].js|ts`, `services/[name].js|ts`, and `routes/[name].js|ts` (standard APIs only)
+
+### Content-type generator
+
+Creates a content type schema with optional API files.
+
+#### Available attribute types
+
+| Type | Description |
+|------|-------------|
+| `string` | Short text |
+| `text` | Long text |
+| `richtext` | Rich text editor |
+| `email` | Email field |
+| `password` | Password field |
+| `integer` | Whole number |
+| `biginteger` | Large whole number |
+| `float` | Decimal number |
+| `decimal` | Precise decimal |
+| `date` | Date only |
+| `time` | Time only |
+| `datetime` | Date and time |
+| `timestamp` | Unix timestamp |
+| `boolean` | True/false |
+| `json` | JSON data |
+| `enumeration` | Predefined values |
+| `media` | File upload |
+
+#### Generated files
+
+| Condition | Generated files |
+|-----------|----------------|
+| Content type only | `content-types/[name]/schema.json` |
+| With API bootstrap | <ul><li>`content-types/[name]/schema.json`</li><li>`controllers/[name].js\|ts`</li><li>`services/[name].js\|ts`</li><li>`routes/[name].js\|ts`</li></ul> |
+
+### Controller generator
+
+Creates a [controller](/cms/backend-customization/controllers) file with basic action structure.
+
+**Generated file:** `controllers/[name].js|ts`
+
+### Service generator
+
+Creates a [service](/cms/backend-customization/services) file with basic structure.
+
+**Generated file:** `services/[name].js|ts`
+
+### Policy generator
+
+Creates a [policy](/cms/backend-customization/policies) file for access control.
+
+**Generated file:** `policies/[name].js|ts`
+
+### Middleware generator
+
+Creates a [middleware](/cms/backend-customization/middlewares) file for request processing.
+
+**Generated file:** `middlewares/[name].js|ts`
+
+### Migration generator
+
+Creates a timestamped [migration](/cms/database-migrations) file.
+
+**Generated file:** `database/migrations/[timestamp].[name].js|ts`
+
+### Configuration options
+
+The `strapi generate` interactive CLI may offer various configuration options depending on the chosen Strapi element to generate:
+
+#### Destination choices
+
+When creating a content-type, controller, policy, middleware, or service, you can choose its destination:
+
+| Option | Description |
+|--------|-------------|
+| **New API** | Creates a new API folder |
+| **Existing API** | Adds to existing API folder |
+| **Existing plugin** | Adds to existing plugin folder |
+| **Root** | Adds to project root (policies and middlewares only) |
+
+#### Content-type specific options
+
+When creating a content-type, you can choose to create a collection type or a single type (see [Content-Type Builder](/cms/features/content-type-builder) documentation for differences):
+
+| Type | Description | Example |
+|------|-------------|---------|
+| **Collection Type** | Multiple entries | Articles, users |
+| **Single Type** | Single entry | Homepage, settings |
+
+You will also have to define various types of names. The following table explains their differences. Only the display name needs to be manually defined, and you can press Enter to accept the default suggested name for the singular and plural names. Singular and plural names matter for API endpoints (see [REST API](/cms/api/rest#endpoints) documentation for details):
+
+| Field | Format | Description | Example |
+|-------|--------|-------------|---------|
+| **Display name** | Human-readable | Name shown in admin panel | Blog Post |
+| **Singular name** | Kebab-case | Used for API endpoints | blog-post |
+| **Plural name** | Kebab-case | Used for collections | blog-posts |
+
+</ExpandableContent>
+
 ## strapi templates:generate
 
 Create a template from the current Strapi project.
diff --git a/docusaurus/docs/cms/community.md b/docusaurus/docs/cms/community.md
index 033ad4d91a..a6a3f07c02 100644
--- a/docusaurus/docs/cms/community.md
+++ b/docusaurus/docs/cms/community.md
@@ -12,7 +12,7 @@ tags:
 
 # Community & Support 
 
-Strapi is an open-source project (see <ExternalLink to="https://github.com/strapi/strapi/blob/master/LICENSE" text="LICENSE"/> file for more information). The core project, as well as the documentation and any related tool can be found in the <ExternalLink to="https://github.com/strapi" text="Strapi"/> GitHub organization.
+Strapi is an open-source project (see <ExternalLink to="https://github.com/strapi/strapi/blob/main/LICENSE" text="LICENSE"/> file for more information). The core project, as well as the documentation and any related tool can be found in the <ExternalLink to="https://github.com/strapi" text="Strapi"/> GitHub organization.
 
 ## Open-source & Contribution
 
diff --git a/docusaurus/docs/cms/configurations/database.md b/docusaurus/docs/cms/configurations/database.md
index 72320fa6e2..9026864e00 100644
--- a/docusaurus/docs/cms/configurations/database.md
+++ b/docusaurus/docs/cms/configurations/database.md
@@ -105,8 +105,6 @@ The `settings` object found in `./config/database.js` (or `./config/database.ts`
 | `forceMigration` | Enable or disable the forced database migration.                | `Boolean` | `true`  |
 | `runMigrations`  | Enable or disable database migrations from running on start up. | `Boolean` | `true`  |
 
-<!-- TODO: Open and track a feature request for autoMigration as it doesn't exist in v4 -->
-
 ### Configuration examples
 
 <Tabs>
@@ -118,16 +116,18 @@ module.exports = ({ env }) => ({
   connection: {
     client: 'postgres',
     connection: {
+      connectionString: env('DATABASE_URL'),
       host: env('DATABASE_HOST', '127.0.0.1'),
       port: env.int('DATABASE_PORT', 5432),
       database: env('DATABASE_NAME', 'strapi'),
       user: env('DATABASE_USERNAME', 'strapi'),
       password: env('DATABASE_PASSWORD', 'strapi'),
       schema: env('DATABASE_SCHEMA', 'public'), // Not required
-      ssl: {
+      ssl: env.bool('DATABASE_SSL', false) && {
         rejectUnauthorized: env.bool('DATABASE_SSL_SELF', false), // For self-signed certificates
       },
     },
+    pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
     debug: false,
   },
 });
@@ -212,6 +212,10 @@ module.exports = ({ env }) => ({
 });
 ```
 
+:::tip
+Strapi’s default SQLite database lives at `.tmp/data.db` at the root of the project. If you want to customise the path to store the database elsewhere, set the `DATABASE_FILENAME` environment variable.
+:::
+
 </TabItem>
 
 <TabItem value="typescript" label="TypeScript">
diff --git a/docusaurus/docs/cms/configurations/environment.md b/docusaurus/docs/cms/configurations/environment.md
index edb1d1e702..15186b9b54 100644
--- a/docusaurus/docs/cms/configurations/environment.md
+++ b/docusaurus/docs/cms/configurations/environment.md
@@ -8,6 +8,8 @@ tags:
 - environment
 ---
 
+import SampleEnv from '/docs/snippets/sample-env.md'
+
 # Environment configuration and variables
 
 Strapi provides specific environment variable names. Defining them in an environment file (e.g., `.env`) will make these variables and their values available in your code.
@@ -29,14 +31,27 @@ Strapi provides the following environment variables:
 | `NODE_ENV` | Type of environment where the application is running.<br/><br/>`production` enables specific behaviors (see <ExternalLink to="https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production" text="Node.js documentation"/> for details) | `String` | `'development'` |
 | `BROWSER`                                                  | Open the admin panel in the browser after startup                                                                                                                                                                                                                             | `Boolean` | `true`          |
 | `ENV_PATH`                                                 | Path to the file that contains your environment variables                                                                                                                                                                                                                     | `String`  | `'./.env'`      |
-| `STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE` <br/><br/>_Optional_ | Initialization locale for the application, if the [Internationalization (i18n) plugin](/cms/features/internationalization) is installed and enabled on Content-Types (see [Configuration of i18n in production environments](/cms/features/internationalization#configuration)) | `String`  | `'en'`          |
+| `STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE` <br/><br/>_Optional_ | Initialization locale for the application, if the [Internationalization (i18n) feature](/cms/features/internationalization) is installed and enabled on Content-Types (see [Configuration of i18n in production environments](/cms/features/internationalization#configuration)) | `String`  | `'en'`          |
 | `STRAPI_ENFORCE_SOURCEMAPS`                                | Forces the bundler to emit source-maps, which is helpful for debugging errors in the admin app.  | `boolean` | `false`          |
 | `FAST_REFRESH`                                             | _(Only applies to webpack)_<br/>Use <ExternalLink to="https://github.com/pmmmwh/react-refresh-webpack-plugin" text="react-refresh"/> to enable "Fast Refresh" for near-instant feedback while developing the Strapi admin panel.                                                                                                       | `boolean` | `true`          |
+| `HOST` | Address the Strapi server listens on | `String` | `0.0.0.0` |
+| `PORT` | Port used by the Strapi server | `Number` | `1337` |
+| `APP_KEYS` | Comma-separated keys used to sign cookies and other secrets | `String` | `auto-generated` |
+| `API_TOKEN_SALT` | Salt used when creating [API tokens](/cms/features/api-tokens) | `String` | `auto-generated` |
+| `ADMIN_JWT_SECRET` | Secret for JWT tokens used in the admin panel | `String` | `auto-generated` |
+| `JWT_SECRET` | Secret for JWT tokens generated by the [Users & Permissions](/cms/features/users-permissions) feature | `String` | `auto-generated` |
+| `TRANSFER_TOKEN_SALT` | Salt used for transfer tokens by the [Data Management](/cms/features/data-management) feature | `String` | `auto-generated` |
+| `DATABASE_CLIENT` | Database client to use (e.g., `sqlite`) | `String` | `sqlite` |
+| `DATABASE_FILENAME` | Location of the SQLite database file | `String` | `.tmp/data.db` |
 
 :::tip
 Prefixing an environment variable name with `STRAPI_ADMIN_` exposes the variable to the admin front end (e.g., `STRAPI_ADMIN_MY_PLUGIN_VARIABLE` is accessible through `process.env.STRAPI_ADMIN_MY_PLUGIN_VARIABLE`).
 :::
 
+### Example `.env` file
+
+<SampleEnv />
+
 ## Environment configurations
 
 Configurations can be created with the following naming and structure conventions: `./config/env/{environment}/{filename}`. This is useful when you need specific static configurations for specific environments and using environment variables is not the best solution.
@@ -102,4 +117,4 @@ To learn deeper about how to use environment variables in your code, please refe
 
 <CustomDocCardsWrapper>
 <CustomDocCard icon="chalkboard-simple" title="Access and cast variables" description="Learn how to access and cast environment variables with the env() utility." link="/cms/configurations/guides/access-cast-environment-variables" />
-</CustomDocCardsWrapper>
\ No newline at end of file
+</CustomDocCardsWrapper>
diff --git a/docusaurus/docs/cms/configurations/features.md b/docusaurus/docs/cms/configurations/features.md
index 1713108a7e..7f2454e447 100644
--- a/docusaurus/docs/cms/configurations/features.md
+++ b/docusaurus/docs/cms/configurations/features.md
@@ -31,17 +31,16 @@ To enable a future flag:
 
 1. (_optional_) If the server is running, stop it with `Ctrl-C`.
 2. Open the `config/features.js|ts` file or create it if the file does not exist yet. The file will export a `future` object with all the future flags to enable.
-3. To enable a future flag, add its property name (see [full list](#available-future-flags)) to the `future` object and ensure the property's value is set to `true`. The following example shows how to enable the `contentReleasesScheduling` future flag:
+3. To enable a future flag, add its property name (see [full list](#available-future-flags)) to the `future` object and ensure the property's value is set to `true`. The following example shows how to enable the `experimental_firstPublishedAt` future flag:
 
   <Tabs groupId='js-ts'>
 
   <TabItem value="js" label="JavaScript">
 
   ```ts title="/config/features.ts"
-  module.export = ({ env }) => ({
+  module.exports = ({ env }) => ({
     future: {
-      // You could also simply write: contentReleases: true
-      contentReleasesScheduling: env.bool('STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING', false),
+      experimental_firstPublishedAt: env.bool('STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT', false),
     },
   })
 
@@ -50,10 +49,10 @@ To enable a future flag:
   This example assumes that you have an `.env` environment file at the root of your application and that the file includes the following line:
 
   ```json title=".env"
-  STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING=true
+  STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT=true
   ```
 
-  If your environment file does not include this value, the `contentReleasesScheduling` future flag property value  will default to `false` and the experimental feature will not be enabled.
+  If your environment file does not include this value, the `experimental_firstPublishedAt` future flag property value will default to `false` and the experimental feature will not be enabled.
 
   </TabItem>
 
@@ -62,8 +61,7 @@ To enable a future flag:
   ```ts title="/config/features.ts"
   export default {
     future: {
-      // You could also simply write: contentReleases: true
-      contentReleasesScheduling: env.bool('STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING', false),
+      experimental_firstPublishedAt: env.bool('STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT', false),
     },
   };
   ```
@@ -71,10 +69,10 @@ To enable a future flag:
   This example assumes that you have an `.env` environment file at the root of your application and that the file includes the following line:
 
   ```json title=".env"
-  STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING=true
+  STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT=true
   ```
 
-  If your environment file does not include this value, the `contentReleases` future flag property value will default to `false` and the experimental feature will not be enabled.
+  If your environment file does not include this value, the `experimental_firstPublishedAt` future flag property value will default to `false` and the experimental feature will not be enabled.
 
   </TabItem>
   </Tabs>
@@ -107,10 +105,6 @@ Developers can use the following APIs to interact with future flags:
 
 ## Available future flags
 
-There are currently no available future flags. This section will be updated once new experimental features are available for testing.
-
-<!-- The following future flags are currently available and can be used in the `future` object of the `config/features` configuration file:
-
-| Property name     | Related feature                              | Suggested environment variable name       |
-| ----------------- | -------------------------------------------- | ----------------------------------------- |
-| `contentReleasesScheduling` | [Releases Scheduling](/cms/features/releases#usage) | `STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING` | -->
+| Property name | Related feature | Suggested environment variable name |
+| ------------- | --------------- | ---------------------------------- |
+| `experimental_firstPublishedAt` | [Draft & Publish](/cms/features/draft-and-publish#recording-the-first-publication-date) | `STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT` |
diff --git a/docusaurus/docs/cms/configurations/functions.md b/docusaurus/docs/cms/configurations/functions.md
index 468cfe06b0..687661a8f5 100644
--- a/docusaurus/docs/cms/configurations/functions.md
+++ b/docusaurus/docs/cms/configurations/functions.md
@@ -180,7 +180,7 @@ It can be used to:
 - fill the database with some necessary data
 - declare custom conditions for the [Role-Based Access Control (RBAC)](/cms/configurations/guides/rbac) feature
 
-The `bootstrapi()` function is run _before_ the back-end server starts but _after_ the Strapi application has setup, so you have access to anything from the `strapi` object.
+The `bootstrap()` function is run _before_ the back-end server starts but _after_ the Strapi application has setup, so you have access to anything from the `strapi` object.
 
 :::tip
 You can run `yarn strapi console` (or `npm run strapi console`) in the terminal and interact with the `strapi` object.
@@ -197,4 +197,4 @@ It can be used to gracefully:
 
 :::strapi Additional information
 You might find additional information in <ExternalLink to="https://strapi.io/blog/how-to-use-register-function-to-customize-your-strapi-app" text="this blog article"/> about registering lifecycle functions.
-:::
\ No newline at end of file
+:::
diff --git a/docusaurus/docs/cms/configurations/server.md b/docusaurus/docs/cms/configurations/server.md
index 0e7db097ec..1cb70fe27f 100644
--- a/docusaurus/docs/cms/configurations/server.md
+++ b/docusaurus/docs/cms/configurations/server.md
@@ -52,6 +52,21 @@ The `./config/server.js` file can include the following parameters:
 | `logger.startup.enabled`            | Toggle the the startup message in the terminal                                                                                                                                                                                                                                                                                                                              | boolean                                                                                           | `true`              |
 | `logger.updates.enabled`            | Toggle the notification message about updating strapi in the terminal                                                                                                                                                                                                                                                                                                       | boolean                                                                                           | `true`              |
 
+:::note
+There is no Strapi-specific keep alive configuration option, because Strapi uses Node's default one for incoming HTTP requests, keeping connections alive by default. 
+
+For outgoing HTTP calls, you can pass a keep-alive agent to your HTTP client.
+Example with [`agentkeepalive`](https://github.com/node-modules/agentkeepalive) and Axios:
+
+```js
+const { HttpsAgent } = require('agentkeepalive');
+const axios = require('axios');
+
+const agent = new HttpsAgent();
+axios.get('https://example.com', { httpsAgent: agent });
+```
+:::
+
 ## Configurations
 
 The `./config/server.js` minimal configuration requires the `host` and `port` parameters for development. Additional parameters can be included for a full configuration.
diff --git a/docusaurus/docs/cms/configurations/users-and-permissions-providers.md b/docusaurus/docs/cms/configurations/users-and-permissions-providers.md
index bdd40a8167..9fecbbb7af 100644
--- a/docusaurus/docs/cms/configurations/users-and-permissions-providers.md
+++ b/docusaurus/docs/cms/configurations/users-and-permissions-providers.md
@@ -78,7 +78,7 @@ Instead of a generic explanation we decided to show an example for each provider
 
 In the following examples, the frontend application will be the <ExternalLink to="https://github.com/strapi/strapi-examples/tree/master/examples/login-react" text="react login example application"/>  running on `http://localhost:3000`, while Strapi (i.e., the backend server) will be running on `http://localhost:1337`.
 
-<CustomDocCardsWrapper>
+<ExpandableDocCardsWrapper>
 <CustomDocCard icon="plugs-connected" title="Auth0" description="Configure authentication through the Users & Permissions feature with Auth0." link="/cms/configurations/users-and-permissions-providers/auth-zero" />
 <CustomDocCard icon="plugs-connected" title="AWS Cognito" description="Configure authentication through the Users & Permissions feature with AWS Cognito." link="/cms/configurations/users-and-permissions-providers/aws-cognito" />
 <CustomDocCard icon="plugs-connected" title="CAS" description="Configure authentication through the Users & Permissions feature with CAS." link="/cms/configurations/users-and-permissions-providers/cas" />
@@ -94,7 +94,7 @@ In the following examples, the frontend application will be the <ExternalLink to
 <CustomDocCard icon="plugs-connected" title="Twitch" description="Configure authentication through the Users & Permissions feature with Twitch." link="/cms/configurations/users-and-permissions-providers/twitch" />
 <CustomDocCard icon="plugs-connected" title="Twitter" description="Configure authentication through the Users & Permissions feature with Twitter." link="/cms/configurations/users-and-permissions-providers/twitter" />
 <CustomDocCard icon="plugs-connected" title="VK" description="Configure authentication through the Users & Permissions feature with VK." link="/cms/configurations/users-and-permissions-providers/vk" />
-</CustomDocCardsWrapper>
+</ExpandableDocCardsWrapper>
 
 If you want to create and add a new custom provider, please refer to the following guide:
 
diff --git a/docusaurus/docs/cms/data-management/export.md b/docusaurus/docs/cms/data-management/export.md
index 8b6ec78918..6f7edf0b4c 100644
--- a/docusaurus/docs/cms/data-management/export.md
+++ b/docusaurus/docs/cms/data-management/export.md
@@ -3,6 +3,8 @@ title: Data export
 description: Export data using the Strapi CLI
 displayed_sidebar: cmsSidebar
 canonicalUrl: https://docs.strapi.io/cms/data-management/export.html
+pagination_prev: cms/data-management/import
+pagination_next: cms/data-management/transfer
 tags:
 - configure data encryption
 - data management system
@@ -35,6 +37,51 @@ The following documentation details the available options to customize your data
 * Media from a 3rd party provider (e.g., Cloudinary or AWS S3) are not included in the export as those files do not exist in the upload folders.
 :::
 
+## Understand the exported archive
+
+The exported `.tar` archive contains a flat structure of numbered <ExternalLink to="https://jsonlines.org/" text="JSON lines" /> files arranged in folders for each exported resource:
+
+```text
+export_202401011230.tar
+├── metadata.json
+├── configuration/
+│   └── configuration_00001.jsonl
+├── entities/
+│   └── entities_00001.jsonl
+├── links/
+│   └── links_00001.jsonl
+└── schemas/
+    └── schemas_00001.jsonl
+```
+
+Each folder (except for `metadata.json`) contains one or more `.jsonl` files named sequentially (e.g., `entities_00001.jsonl`). Each line in these `.jsonl` files represents a single record, making the archive convenient for line‑by‑line processing or conversion to formats such as CSV. To inspect these files directly, export without compression or encryption:
+
+<Tabs groupId="yarn-npm">
+
+<TabItem value="yarn" label="Yarn">
+
+```bash
+yarn strapi export --no-encrypt --no-compress -f my-export
+```
+
+</TabItem>
+
+<TabItem value="npm" label="NPM">
+
+```bash
+npm run strapi export -- --no-encrypt --no-compress -f my-export
+```
+
+</TabItem>
+
+</Tabs>
+
+The command above creates `my-export.tar` in the project root. After extracting the archive (`tar -xf my-export.tar`), open any `.jsonl` file to view individual records.
+
+:::note
+Large datasets are automatically split across multiple `.jsonl` files. The `maxSizeJsonl` provider option controls the maximum size of each file.
+:::
+
 ## Name the export file
 
 Exported data are contained in a `.tar` file that is automatically named using the format `export_YYYYMMDDHHMMSS`. You can optionally name the exported file by passing the `--file` or `-f` option with the `strapi export` command. Do not include a file extension as one will be set automatically depending on options provided.
diff --git a/docusaurus/docs/cms/data-management/import.md b/docusaurus/docs/cms/data-management/import.md
index a62735eb4a..58203a88c3 100644
--- a/docusaurus/docs/cms/data-management/import.md
+++ b/docusaurus/docs/cms/data-management/import.md
@@ -3,6 +3,8 @@ title: Data import
 description: Import data using the Strapi CLI
 displayed_sidebar: cmsSidebar
 canonicalUrl: https://docs.strapi.io/cms/data-management/import.html
+pagination_prev: cms/features/data-management
+pagination_next: cms/data-management/export
 tags:
 - data management system
 - data import
@@ -26,16 +28,56 @@ The `strapi import` command is part of the [Data Management feature](/cms/featur
 - schemas,
 - the `metadata.json` file.
 
+The archive follows the same structure as the one produced by [`strapi export`](/cms/data-management/export): a `.tar` containing `configuration`, `entities`, `links`, and `schemas` folders filled with numbered <ExternalLink to="https://jsonlines.org/" text="JSON lines" /> files. Compression (`.gz`) and encryption (`.enc`) are detected from the file extension, so a plain `.tar` can be imported as well.
+
 The following documentation details the available options to customize your data import. The import command and all of the available options are run using the [Strapi CLI](/cms/cli#strapi-import).
 
 :::warning
 
 - `strapi import` deletes all existing data, including the database and uploads directory, before importing the backup file.
 - The source and target schemas must match to successfully use `strapi import`, meaning all content types must be identical.
-- Restored data does not include the `Admin users` table, which means that `createdBy` and `updatedBy` are empty in a restored instance.  
+- Restored data does not include the `Admin users` table, which means that `createdBy` and `updatedBy` are empty in a restored instance.
 
 :::
 
+## Understand the import archive
+
+`strapi import` expects an archive with the same flat structure produced by [the `strapi export` command](/cms/data-management/export#understand-the-exported-archive):
+
+- `configuration/`: project configuration files
+- `entities/`: entity records
+- `links/`: relations between entities
+- `schemas/`: schema definitions
+- `metadata.json`: metadata about the export
+
+Each folder contains one or more `.jsonl` files where each line represents a single record. The format allows you to edit or transform data before re‑importing it.
+
+To prepare an archive for manual review or modification:
+
+<Tabs groupId="yarn-npm">
+
+<TabItem value="yarn" label="Yarn">
+
+```bash
+yarn strapi export --no-encrypt --no-compress -f my-export
+tar -xf my-export.tar
+```
+
+</TabItem>
+
+<TabItem value="npm" label="NPM">
+
+```bash
+npm run strapi export -- --no-encrypt --no-compress -f my-export
+tar -xf my-export.tar
+```
+
+</TabItem>
+
+</Tabs>
+
+After adjusting the `.jsonl` files, re‑create the archive (`tar -cf my-export.tar configuration entities links schemas metadata.json`) and import it with `strapi import -f my-export.tar`. Encryption and compression are detected automatically based on the file extension.
+
 ## Specify the import file
 
 To import data into a Strapi instance use the `strapi import` command in the destination project root directory. Specify the file to be imported using the `-f` or `--file` option. The filename, extension, and path are required. If the file is encrypted, you are prompted for the encryption key before the import starts.
@@ -62,6 +104,28 @@ npm run strapi import -- -f /path/to/my/file/export_20221213105643.tar.gz.enc
 
 </Tabs>
 
+### Example: Import a plain `.tar` archive
+
+<Tabs groupId="yarn-npm">
+
+<TabItem value="yarn" label="yarn">
+
+```bash
+yarn strapi import -f /path/to/my/file/backup.tar
+```
+
+</TabItem>
+
+<TabItem value="npm" label="npm">
+
+```bash
+npm run strapi import -- -f /path/to/my/file/backup.tar
+```
+
+</TabItem>
+
+</Tabs>
+
 ## Provide an encryption key
 
 If you are importing data from an encrypted file the encryption key can be passed with the `strapi import` command by using the `-k` or `--key` option.
diff --git a/docusaurus/docs/cms/data-management/transfer.md b/docusaurus/docs/cms/data-management/transfer.md
index 49ee1b4cdc..8ff488edd8 100644
--- a/docusaurus/docs/cms/data-management/transfer.md
+++ b/docusaurus/docs/cms/data-management/transfer.md
@@ -3,6 +3,7 @@ title: Data transfer
 description: Transfer data using the Strapi CLI
 displayed_sidebar: cmsSidebar
 canonicalUrl: https://docs.strapi.io/cms/data-management/transfer.html
+pagination_prev: cms/data-management/export
 tags:
 - data management system
 - data transfer
diff --git a/docusaurus/docs/cms/deployment.md b/docusaurus/docs/cms/deployment.md
index 22d127454d..0acd6131bc 100644
--- a/docusaurus/docs/cms/deployment.md
+++ b/docusaurus/docs/cms/deployment.md
@@ -71,7 +71,7 @@ module.exports = ({ env }) => ({
 });
 ```
 
-Then you can create a `.env` file or directly set environment variables in your chosen deployment platform:
+Strapi generates a `.env` file with default values when you create a new project. You can edit this file or set variables in your chosen deployment platform (see [example `.env` file](/cms/configurations/environment#example-env-file)):
 
 ```
 HOST=10.0.0.1
diff --git a/docusaurus/docs/cms/faq.md b/docusaurus/docs/cms/faq.md
index d036667ff4..923bccd492 100644
--- a/docusaurus/docs/cms/faq.md
+++ b/docusaurus/docs/cms/faq.md
@@ -52,9 +52,9 @@ If you used `--quickstart` to create your Strapi project, by default this uses t
 
 It is recommended you use a database add-on like Heroku's PostgreSQL. For file uploads, you will need to use one of the 3rd party providers such as Cloudinary or AWS S3.
 
-## How can I upgrade my free Strapi Cloud project to a paid plan?
+## How can I upgrade my free Strapi Cloud to a paid plan?
 
-Whenever you're ready to upgrade your free project to one of the <ExternalLink to="https://strapi.io/pricing-cloud" text="paid plans"/>, please use the _Plans_ section of your Strapi Cloud project's settings (see [Cloud documentation](/cloud/projects/settings#upgrading-to-another-plan) for more details).
+Strapi Cloud provides a free plan. Whenever you're ready to upgrade to one of the <ExternalLink to="https://strapi.io/pricing-cloud" text="paid plans"/>, please use the _Plans_ section of your Strapi Cloud project's settings (see [Cloud documentation](/cloud/projects/settings#upgrading-to-another-plan) for more details).
 
 ## Can Strapi be run in serverless environments?
 
diff --git a/docusaurus/docs/cms/features/admin-panel.md b/docusaurus/docs/cms/features/admin-panel.md
index 313bff9010..90e30a9134 100644
--- a/docusaurus/docs/cms/features/admin-panel.md
+++ b/docusaurus/docs/cms/features/admin-panel.md
@@ -109,6 +109,10 @@ By default, the chosen interface mode is based on your browser's mode. You can h
 Keep in mind that choosing an interface mode only applies to your account on the admin panel.
 :::
 
+### Resetting guided tour
+
+In the *Guided tour* section of your profile, you can click the **Reset guided tour** button to reset the guided tour which is available in the homepage of the admin panel. It allows you to see again the guided tour of the admin panel if you closed it beforehand, and to follow again its various steps.
+
 ### Customizing the logo
 
 **Path to configure the admin panel:** <Icon name="gear-six" /> *Settings > Global settings > Overview*
diff --git a/docusaurus/docs/cms/features/content-type-builder.md b/docusaurus/docs/cms/features/content-type-builder.md
index ac734ac9c5..9191416eb4 100644
--- a/docusaurus/docs/cms/features/content-type-builder.md
+++ b/docusaurus/docs/cms/features/content-type-builder.md
@@ -12,6 +12,7 @@ tags:
 ---
 
 import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
+import ConditionalFields from '/docs/snippets/conditional-fields.md'
 
 # Content-type Builder
 
@@ -94,7 +95,7 @@ New content-types are only considered created once they have been saved. Saving
 />
 
 1. In the Components category of the <Icon name="layout" /> Content-type Builder sub navigation, click on **Create new component**.
-2. In the component creation window, configure the base settings of the new component:
+2. In the component creation window, configure the basic settings of the new component:
    - Write the name of the component in the *Display name* textbox.
    - Select an available category, or enter in the textbox a new category name to create one.
    - _(optional)_ Choose an icon representing the new component. You can use the search <Icon name="magnifying-glass" classes="ph-bold" /> to find an icon instead of scrolling through the list.
@@ -193,7 +194,7 @@ The Text field displays a textbox that can contain small text. This field can be
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name | Instructions                                                                                            |
 |--------------|---------------------------------------------------------------------------------------------------------|
@@ -217,6 +218,12 @@ The Text field displays a textbox that can contain small text. This field can be
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_richtextblocks.svg" /> Rich Text (Blocks) {#rich-text-blocks}
@@ -225,7 +232,7 @@ The Rich Text (Blocks) field displays an editor with live rendering and various
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name | Instructions                                    |
 |--------------|-------------------------------------------------|
@@ -243,6 +250,12 @@ The Rich Text (Blocks) field displays an editor with live rendering and various
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 :::strapi React renderer
@@ -255,7 +268,7 @@ The Number field displays a field for any kind of number: integer, decimal and f
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -278,6 +291,12 @@ The Number field displays a field for any kind of number: integer, decimal and f
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_date.svg" /> Date {#date}
@@ -286,7 +305,7 @@ The Date field can display a date (year, month, day), time (hour, minute, second
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -307,6 +326,12 @@ The Date field can display a date (year, month, day), time (hour, minute, second
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
  
 #### <img width="28" src="/img/assets/icons/v5/ctb_password.svg" /> Password
@@ -315,7 +340,7 @@ The Password field displays a password field that is encrypted.
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -336,6 +361,12 @@ The Password field displays a password field that is encrypted.
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 
@@ -345,7 +376,7 @@ The Media field allows to choose one or more media files (e.g. image, video) fro
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -366,6 +397,12 @@ The Media field allows to choose one or more media files (e.g. image, video) fro
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_relation.svg" /> Relation {#relation}
@@ -383,9 +420,9 @@ There are 6 different types of relations:
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
-Configuring the base settings of the Relation field consists in choosing with which existing content-type the relation should be established and the kind of relation. The edition window of the Relation field displays 2 grey boxes, each representing one of the content-types in relation. Between the grey boxes are displayed all possible relation types.
+Configuring the basic settings of the Relation field consists in choosing with which existing content-type the relation should be established and the kind of relation. The edition window of the Relation field displays 2 grey boxes, each representing one of the content-types in relation. Between the grey boxes are displayed all possible relation types.
 
 1. Click on the 2nd grey box to define the content-type B. It must be an already created collection type.
 2. Click on the icon representing the relation to establish between the content-types.
@@ -402,6 +439,12 @@ Configuring the base settings of the Relation field consists in choosing with wh
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_boolean.svg" /> Boolean {#boolean}
@@ -410,7 +453,7 @@ The Boolean field displays a toggle button to manage boolean values (e.g. Yes or
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -430,6 +473,12 @@ The Boolean field displays a toggle button to manage boolean values (e.g. Yes or
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_json.svg" /> JSON {#json}
@@ -438,7 +487,7 @@ The JSON field allows to configure data in a JSON format, to store JSON objects
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -456,6 +505,12 @@ The JSON field allows to configure data in a JSON format, to store JSON objects
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_email.svg" /> Email {#email}
@@ -464,7 +519,7 @@ The Email field displays an email address field with format validation to ensure
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -486,6 +541,12 @@ The Email field displays an email address field with format validation to ensure
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_password.svg" /> Password {#password}
@@ -494,7 +555,7 @@ The Password field displays a password field that is encrypted.
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -515,6 +576,12 @@ The Password field displays a password field that is encrypted.
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_enum.svg" /> Enumeration {#enum}
@@ -523,7 +590,7 @@ The Enumeration field allows to configure a list of values displayed in a drop-d
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name  | Instructions                                                    |
 |---------------|-----------------------------------------------------------------|
@@ -544,6 +611,12 @@ The Enumeration field allows to configure a list of values displayed in a drop-d
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 :::caution
@@ -556,7 +629,7 @@ The UID field displays a field that sets a unique identifier, optionally based o
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name   | Instructions                                                    |
 |----------------|-----------------------------------------------------------------|
@@ -577,6 +650,12 @@ The UID field displays a field that sets a unique identifier, optionally based o
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 :::tip
@@ -589,7 +668,7 @@ The Rich Text (Markdown) field displays an editor with basic formatting options
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name | Instructions                                      |
 |--------------|---------------------------------------------------|
@@ -610,6 +689,12 @@ The Rich Text (Markdown) field displays an editor with basic formatting options
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_component.svg" /> Components {#components}
@@ -623,7 +708,7 @@ When configuring a component through the Content-type Builder, it is possible to
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name       | Instructions                                                    |
 |--------------------|-----------------------------------------------------------------|
@@ -645,6 +730,12 @@ When configuring a component through the Content-type Builder, it is possible to
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 #### <img width="28" src="/img/assets/icons/v5/ctb_dz.svg" /> Dynamic zones {#dynamiczones}
@@ -653,7 +744,7 @@ Dynamic zones are a combination of components that can be added to content-types
 
 <Tabs>
 
-<TabItem value="base" label="Base settings">
+<TabItem value="base" label="Basic settings">
 
 | Setting name       | Instructions                                                    |
 |--------------------|-----------------------------------------------------------------|
@@ -672,6 +763,12 @@ Dynamic zones are a combination of components that can be added to content-types
 
 </TabItem>
 
+<TabItem value="condition" label="Condition">
+
+<ConditionalFields components={props.components} />
+
+</TabItem>
+
 </Tabs>
 
 After configuring the settings of the dynamic zone, its components must be configured as well. It is possible to either choose an existing component or create a new one.
diff --git a/docusaurus/docs/cms/features/draft-and-publish.md b/docusaurus/docs/cms/features/draft-and-publish.md
index 2d8852c5bd..c03a4ee6d8 100644
--- a/docusaurus/docs/cms/features/draft-and-publish.md
+++ b/docusaurus/docs/cms/features/draft-and-publish.md
@@ -44,6 +44,14 @@ For your content types to be managed with Draft & Publish in the Content Manager
   }}
 />
 
+### Recording the first publication date <FeatureFlagBadge feature="experimental_firstPublishedAt" /> {#recording-the-first-publication-date}
+
+When this future flag is enabled (see [features configuration](/cms/configurations/features)), Strapi automatically adds a `firstPublishedAt` attribute to all content-types that use Draft & Publish. The attribute saves the date and time when an entry is first published and never changes even if the entry is unpublished and published again.
+
+:::caution
+If the feature flag is disabled later, the `firstPublishedAt` attribute and its stored values are removed.
+:::
+
 ## Usage
 
 With Draft & Publish enabled, the [Content Manager's edit view](/cms/features/content-manager#overview) indicates the current status of your content type's entry at the top of the interface. Your content can have 3 statuses:
@@ -101,10 +109,13 @@ When a document has both a draft and a published version available, the publishe
   }}
 />
 
+
 :::tip
 To schedule publication (i.e. convert a draft to a published entry at a given date and time) you can include it in a release and schedule the publication of that release. Please refer to the [Releases feature](/cms/features/releases) documentation for more information.
 :::
 
+
+
 ### Unpublishing content
 
 **Path:** <Icon name="feather" /> Content Manager, edit view of your content type
diff --git a/docusaurus/docs/cms/features/preview.md b/docusaurus/docs/cms/features/preview.md
index cbdbf5b16c..99dff7725e 100644
--- a/docusaurus/docs/cms/features/preview.md
+++ b/docusaurus/docs/cms/features/preview.md
@@ -24,8 +24,8 @@ With the Preview feature, you can preview your front end application directly fr
 <ThemedImage
   alt="Previewing content"
   sources={{
-    light: '/img/assets/content-manager/previewing-content.png',
-    dark: '/img/assets/content-manager/previewing-content.png',
+    light: '/img/assets/content-manager/previewing-content-desktop-mobile.gif',
+    dark: '/img/assets/content-manager/previewing-content-desktop-mobile.gif',
   }}
 />
 
@@ -428,141 +428,6 @@ const pageData = await fetchContentType('api::page.page', {
 });
 ```
 
-#### 6. [Front end] Detect changes in Strapi and refresh the front-end {#6-refresh-frontend}
-
-Strapi emits a `strapiUpdate` message to inform the front end that data has changed. 
-
-To track this, within your front-end application, add an event listener to listen to events posted through [the `postMessage()` API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) on the `window` object. The listener needs to filter through messages and react only to Strapi-initiated messages, then refresh the iframe content.
-
-With Next.js, the recommended way to refresh the iframe content is with <ExternalLink to="https://nextjs.org/docs/app/building-your-application/caching#routerrefresh" text="the `router.refresh()` method" />.
-
-<Tabs groupId="js-ts">
-<TabItem value="js" label="JavaScript" >
-
-```tsx title="next/app/path/to/your/front/end/logic.jsx" {6-17}
-export default function MyClientComponent({...props}) {
-  // …
-  const router = useRouter();
-
-  useEffect(() => {
-    const handleMessage = async (message) => {
-      if (
-        // Filters events emitted through the postMessage() API
-        message.origin === process.env.NEXT_PUBLIC_API_URL &&
-        message.data.type === "strapiUpdate"
-      ) { // Recommended way to refresh with Next.js
-        router.refresh();
-      }
-    };
-
-    // Add the event listener
-    window.addEventListener("message", handleMessage);
-
-    // Cleanup the event listener on unmount
-    return () => {
-      window.removeEventListener("message", handleMessage);
-    };
-  }, [router]);
-
-  // ...
-}
-```
-
-</TabItem>
-<TabItem value="ts" label="TypeScript" >
-
-```tsx title="next/app/path/to/your/front/end/logic.tsx" {6-17}
-export default function MyClientComponent({
-  //…
-  const router = useRouter();
-
-  useEffect(() => {
-    const handleMessage = async (message: MessageEvent<any>) => {
-      if (
-        // Filters events emitted through the postMessage() API
-        message.origin === process.env.NEXT_PUBLIC_API_URL &&
-        message.data.type === "strapiUpdate"
-      ) { // Recommended way to refresh with Next.js
-        router.refresh();
-      }
-    };
-
-    // Add the event listener
-    window.addEventListener("message", handleMessage);
-
-    // Cleanup the event listener on unmount
-    return () => {
-      window.removeEventListener("message", handleMessage);
-    };
-  }, [router]);
-
-  // …
-})
-```
-
-</TabItem>
-
-</Tabs>
-
-<details>
-<summary>Caching in Next.js:</summary>
-
-In Next.js, [cache persistence](https://nextjs.org/docs/app/building-your-application/caching) may require additional steps. You might need to invalidate the cache by making an API call from the client side to the server, where the revalidation logic will be handled. Please refer to Next.js documentation for details, for instance with the [revalidatePath() method](https://nextjs.org/docs/app/building-your-application/caching#revalidatepath).
-<br/>
-
-</details>
-
-#### [Front end] Next steps
-
-Once the preview system is set up, you need to adapt your data fetching logic to handle draft content appropriately. This involves the following steps:
-
-1. Create or adapt your data fetching utility to check if draft mode is enabled
-2. Update your API calls to include the draft status parameter when appropriate
-
-The following, taken from the <ExternalLink to="https://github.com/strapi/LaunchPad/tree/feat/preview" text="Launchpad" /> Strapi demo application, is an example of how to implement draft-aware data fetching in your Next.js front-end application:
-
-```typescript {8-18}
-import { draftMode } from "next/headers";
-import qs from "qs";
-
-export default async function fetchContentType(
-  contentType: string,
-  params: Record = {}
-): Promise {
-  // Check if Next.js draft mode is enabled
-  const { isEnabled: isDraftMode } = draftMode();
-  
-  try {
-    const queryParams = { ...params };
-    // Add status=draft parameter when draft mode is enabled
-    if (isDraftMode) {
-      queryParams.status = "draft";
-    }
-    
-    const url = `${baseURL}/${contentType}?${qs.stringify(queryParams)}`;
-    const response = await fetch(url);
-    if (!response.ok) {
-      throw new Error(
-        `Failed to fetch data from Strapi (url=${url}, status=${response.status})`
-      );
-    }
-    return await response.json();
-  } catch (error) {
-    console.error("Error fetching content:", error);
-    throw error;
-  }
-}
-```
-
-This utility method can then be used in your page components to fetch either draft or published content based on the preview state:
-
-```typescript
-// In your page component:
-const pageData = await fetchContentType('api::page.page', {
-  // Your other query parameters
-});
-```
-
 ## Usage
 
 **Path to use the feature:** <Icon name="feather" /> Content Manager, edit view of your content type
@@ -597,3 +462,7 @@ Additionally, with Live Preview, you can:
 :::note
 In the Edit view of the Content Manager, the Open preview button will be disabled if you have unsaved changes. Save your latest changes and you should be able to preview content again.
 :::
+
+:::tip
+Switch between Desktop and Mobile preview mode using the dropdown at the top to check how the page is displayed on different viewports.
+:::
\ No newline at end of file
diff --git a/docusaurus/docs/cms/installation/cli.md b/docusaurus/docs/cms/installation/cli.md
index 0a1a0e4034..6786c742c6 100644
--- a/docusaurus/docs/cms/installation/cli.md
+++ b/docusaurus/docs/cms/installation/cli.md
@@ -82,9 +82,9 @@ Follow the steps below to create a new Strapi project, being sure to use the app
 
     </Tabs>
 
-2. The terminal will ask you whether you want to `Login/Signup` to Strapi Cloud, or `Skip` this step. Use arrow keys and press `Enter` to make your choice. If you choose to skip this step, you will need to [host the project yourself](#skipping-the-strapi-cloud-login-step).
+2. The terminal will ask you whether you want to `Login/Signup` or `Skip` this step. Use arrow keys and press `Enter` to make your choice. If you choose to login, you'll receive a 30-day trial of the <GrowthBadge /> plan that will be automatically applied to your created project. If you skip this step, the project will fall back to the CMS Free plan.
 
-2. The terminal will ask you a few questions. For each of them, if you press `Enter` instead of typing something, the default answer (Yes) will be used:
+3. The terminal will ask you a few questions. For each of them, if you press `Enter` instead of typing something, the default answer (Yes) will be used:
 
   ![Terminal prompts at installation](/img/assets/installation/prompts.png)
 
@@ -92,7 +92,7 @@ Follow the steps below to create a new Strapi project, being sure to use the app
   You can skip these questions using various options passed to the installation command. Please refer to the [table](#cli-installation-options) for the full list of available options.
   :::
 
-3. _(optional)_ If you answered `n` for "no" to the default (SQLite) database question, the CLI will ask for more questions about the database:
+4. _(optional)_ If you answered `n` for "no" to the default (SQLite) database question, the CLI will ask for more questions about the database:
 
     * Use arrow keys to select the database type you want, then press `Enter`.
     * Give the database a name, define the database host address and port, define the database admin username and password, and define whether the database will use a SSL connection.<br/>For any of these questions, if you press `Enter` without typing anything, the default value (indicated in parentheses in the terminal output) will be used.
@@ -117,7 +117,7 @@ The above installation guide only covers the basic installation option using the
 | `--no-git-init`                     | Do not initialize a git repository, skipping the related CLI prompt                                                                                                                                                                             |
 | `--example`                         | Add example data, skipping the related CLI prompt                                                                                                                                                                                               |
 | `--no-example`                      | Do not add example data, skipping the related CLI prompt                                                                                                                                                                                        |
-| `--skip-cloud`                      | Skip [Strapi Cloud login and project creation steps](#skipping-the-strapi-cloud-login-step)                                                                                                                                                     |
+| `--skip-cloud`                      | Skip [Strapi login and project creation steps](#skipping-the-strapi-login-step)                                                                                                                                                     |
 | `--skip-db`                         | Skip all database-related prompts and create a project with the default (SQLite) database                                                                                                                                                       |
 | `--template <template-name-or-url>` | Create the application based on a given template.<br/>Additional options for templates are available, see the [templates documentation](/cms/templates) for details.                                                                            |
 | `--dbclient <dbclient>`             | Define the database client to use by replacing `<dbclient>` in the command by one of the these values:<ul><li>`sql` for a SQLite database (default)</li><li>`postgres` for a PostgreSQL database</li><li>`mysql` for a MySQL database</li></ul> |
@@ -136,11 +136,17 @@ The above installation guide only covers the basic installation option using the
 * Experimental Strapi versions are released every Tuesday through Saturday at midnight GMT. You can create a new Strapi application based on the latest experimental release using `npx create-strapi@experimental`. Please use these experimental builds at your own risk. It is not recommended to use them in production.
 :::
 
-### Skipping the Strapi Cloud login step
+### Skipping the Strapi login step
 
-When the installation script runs, the terminal will first ask you if you want to login/signup. Choosing `Login/signup` will create a free [Strapi Cloud](/cloud/intro) account as described in the [Quick Start Guide](/cms/quick-start).
+When the installation script runs, the terminal will first ask you if you want to login/signup. Choosing `Login/signup` will provide you with a 30-day trial of the <GrowthBadge tooltip="The CMS Growth plan includes the Live Preview, Releases, and Content History features."/> that will be automatically applied to your created project. This will give you access to advanced CMS features.
 
-If you prefer skipping the Strapi Cloud login part, use the arrow keys to select `Skip`. The script will resume and create a local project. To deploy this project and host it online, you could later choose to:
+If you prefer skipping this Strapi login part, use the arrow keys to select `Skip`. The script will resume and create a local project using the CMS Free plan.
+
+You will be able to purchase a CMS license later by checking out our <ExternalLink to="https://strapi.io/pricing-self-hosted" text="pricing page"/>.
+
+### Hosting your project
+
+You can create a free [Strapi Cloud](/cloud/intro) project. To deploy this project and host it online, you can choose to:
 
 - host it yourself by pushing the project's code to a repository (e.g., on GitHub) before following the [deployment guide](/cms/deployment),
 - or use the [Cloud CLI](/cloud/cli/cloud-cli#) commands to login to Strapi Cloud and deploy your project there for free.
diff --git a/docusaurus/docs/cms/installation/docker.md b/docusaurus/docs/cms/installation/docker.md
index f0eb3e244f..ef6e041837 100644
--- a/docusaurus/docs/cms/installation/docker.md
+++ b/docusaurus/docs/cms/installation/docker.md
@@ -187,7 +187,7 @@ volumes:
 
 networks:
   strapi:
-    name: Strapi
+    name: strapi
     driver: bridge
 ```
 
@@ -253,7 +253,7 @@ volumes:
 
 networks:
   strapi:
-    name: Strapi
+    name: strapi
     driver: bridge
 ```
 
@@ -319,7 +319,7 @@ volumes:
 
 networks:
   strapi:
-    name: Strapi
+    name: strapi
     driver: bridge
 ```
 
diff --git a/docusaurus/docs/cms/intro.md b/docusaurus/docs/cms/intro.md
index ddfa492bc4..e830489fb5 100644
--- a/docusaurus/docs/cms/intro.md
+++ b/docusaurus/docs/cms/intro.md
@@ -66,6 +66,7 @@ The table of content of the Strapi CMS documentation displays 7 main sections in
 - If you prefer learning more about Strapi while looking at the project code structure, you can use the interactive [project structure](/cms/project-structure) page.
 - If demos are more your thing, feel free to watch the <ExternalLink to="https://youtu.be/zd0_S_FPzKg" text="video demo"/>, or you can request a <ExternalLink to="https://strapi.io/demo" text="live demo"/>.
 - Try our AI assistant: Click or tap the **Ask AI** button and ask your questions using natural language. Watch it answer you in real time, then read recommended sources for more details.
+- To help you integrate Strapi Docs with your favorite AI models, you can use the **Copy Markdown** button or visit the [`llms.txt`](/llms.txt) and [`llms-full.txt`](/llms-full.txt) pages.
 :::
 
 :::strapi Information for beginner developers
diff --git a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes.md b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes.md
index a69c3fac4a..181b483007 100644
--- a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes.md
+++ b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes.md
@@ -100,3 +100,4 @@ You can click on the description of any breaking change in the following tables
 | [Some attributes and content-types names are reserved by Strapi](/cms/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved) | Yes | No |
 | [Upload a file at entry creation is no longer possible](/cms/migration/v4-to-v5/breaking-changes/no-upload-at-entry-creation) | Yes | No |
 | [Components and dynamic zones should be populated using the detailed population strategy](/cms/migration/v4-to-v5/breaking-changes/no-shared-population-strategy-components-dynamic-zones) | Yes | No |
+| [Updating repeatable components with the Document Service API is not recommended](/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api) | Yes | No |
diff --git a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api.md b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api.md
new file mode 100644
index 0000000000..65490326ed
--- /dev/null
+++ b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api.md
@@ -0,0 +1,81 @@
+---
+title: defaultIndex removed
+description: In Strapi 5, it's not recommended to update repeatable components with the Document Service API
+sidebar_label: defaultIndex removed
+displayed_sidebar: cmsSidebar
+tags:
+ - breaking changes
+ - middlewares
+ - upgrade to Strapi 5
+---
+
+import Intro from '/docs/snippets/breaking-change-page-intro.md'
+import MigrationIntro from '/docs/snippets/breaking-change-page-migration-intro.md'
+
+#  Updating repeatable components with the Document Service API is not recommended
+
+In Strapi 5, it's not recommended to update repeatable components with the API, due to some limitations of the new Document Service API.
+
+ <Intro />
+
+<BreakingChangeIdCard
+  plugins
+/>
+
+## Breaking change description
+
+<SideBySideContainer>
+
+<SideBySideColumn>
+
+**In Strapi v4**
+
+You could update a repeatable component with its `id`.
+
+</SideBySideColumn>
+
+<SideBySideColumn>
+
+**In Strapi 5**
+
+Strapi 5 uses `documentId` due to the introduction of the [Document Service API](/cms/api/document-service), and you can't update a repeatable component by its `documentId` due to the way the [Draft & Publish](/cms/features/draft-and-publish) feature works with the new API.
+
+</SideBySideColumn>
+
+</SideBySideContainer>
+
+## Migration
+
+<br/>
+
+### Notes
+
+In Strapi 5, draft components and published components have different ids, and you could fetch data like follows:
+
+```js
+// Request
+GET /articles // -> returns published article
+
+// Response
+{
+   documentId …
+   component: [
+     { id: 2, name: 'component-1'  },
+     { id: 4, name: 'component-2'  },
+   ]
+}
+```
+
+You can then try to do the following:
+
+```js
+PUT /articles/{documentId} // <== Update draft article
+{
+   documentId …
+   component: [
+     { id: 2, name: 'component-1-updated'  }, // <== Update component 1
+   ]
+}
+```
+
+However, this would fail because the component id of the draft article is different from the published one. Therefore, it's not recommended to try to update repeatable components with the Document Service API.
diff --git a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/graphql-api-updated.md b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
index 7874d477c3..4217e91a5b 100644
--- a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
+++ b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
@@ -17,6 +17,8 @@ import MigrationIntro from '/docs/snippets/breaking-change-page-migration-intro.
 
 In Strapi 5, the GraphQL API has been updated. It handles the new, flattened response format (see [related breaking change](/cms/migration/v4-to-v5/breaking-changes/new-response-format.md)), and can also now accept <ExternalLink to="https://www.apollographql.com/docs/technotes/TN0029-relay-style-connections/" text="Relay-style"/> queries.
 
+Flat queries still return a simple array of documents. You can also use Relay-style `*_connection` queries, which return `nodes` and a `pageInfo` object to handle pagination. Use these when you need metadata about pages or total counts.
+
 <Intro />
 <BreakingChangeIdCard plugins />
 
@@ -35,7 +37,7 @@ For an extensive description of the new Strapi 5 GraphQL API, please refer to th
 
 To gradually convert to the new GraphQL API format, follow these steps:
 
-1. Enable v4 compatibility mode with the `v4ComptabilityMode` flag in the configuration of the GraphQL plugin (see [plugins configuration](/cms/plugins/graphql#code-based-configuration)):
+1. Enable v4 compatibility mode with the `v4CompatibilityMode` flag in the configuration of the GraphQL plugin (see [plugins configuration](/cms/plugins/graphql#code-based-configuration)):
 
     ```graphql
     {
@@ -89,250 +91,252 @@ To gradually convert to the new GraphQL API format, follow these steps:
 
 2. Use `documentId` instead of `id` for contentType queries & mutations:
 
-  ```graphql
-  {
-    restaurants {
-      data {
-        documentId
-        attributes {
-          title
-          image {
-            data {
-              documentId
-              attributes {
-                url
+    Strapi 5 introduces [`documentId` as the main identifier](/cms/migration/v4-to-v5/breaking-changes/use-document-id) for documents, ensuring uniqueness across databases. The numeric `id` is still returned by the REST API for backward compatibility but is not available in GraphQL.
+
+    ```graphql
+    {
+      restaurants {
+        data {
+          documentId
+          attributes {
+            title
+            image {
+              data {
+                documentId
+                attributes {
+                  url
+                }
               }
             }
-          }
-          images {
-            data {
-              documentId
-              attributes {
-                url
+            images {
+              data {
+                documentId
+                attributes {
+                  url
+                }
               }
             }
-          }
-          xToOneRelation {
-            data {
-              documentId
-              attributes {
-              
-              }
-          }
-          xToManyRelation {
-            data {
-              documentId
-              attributes {
-                field
+            xToOneRelation {
+              data {
+                documentId
+                attributes {
+                
+                }
+            }
+            xToManyRelation {
+              data {
+                documentId
+                attributes {
+                  field
+                }
               }
             }
           }
         }
+        meta {
+          pagination {
+            page
+            pageSize
+          }
+        }
       }
-      meta {
-        pagination {
-          page
-          pageSize
+    }
+    ```
+
+    ```graphql
+    {
+      mutation {
+        updateRestaurant(
+          documentId: "some-doc-id",
+          data: { title: "My great restaurant" }
+        ) {
+          data {
+            documentId
+            attributes {
+              title
+              image {
+                data {
+                  documentId
+                  attributes {
+                    url
+                  }
+                }
+              }
+            }
+          }
         }
       }
     }
-  }
-  ```
+    ```
+
+3. Move to `_connection` without changing response format (only applies to queries):
 
-  ```graphql
-  {
-    mutation {
-      updateRestaurant(
-        documentId: "some-doc-id",
-        data: { title: "My great restaurant" }
-      ) {
+    ```graphql
+    {
+      # collection fields can be renamed to _connection to get a v4 compat response
+      restaurants_connection {
         data {
-          documentId
+          id
           attributes {
             title
             image {
               data {
-                documentId
+                id
+                attributes {
+                  url
+                }
+              }
+            }
+            # collection fields can be renamed to _connection to get a v4 compat response
+            images_connection {
+              data {
+                id
                 attributes {
                   url
                 }
               }
             }
+            xToOneRelation {
+              data {
+                id
+                attributes {
+                  field
+                }
+              }
+            }
+            # collection fields can be renamed to _connection to get a v4 compat response
+            xToManyRelation_connection {
+              data {
+                id
+                attributes {
+                  field
+                }
+              }
+            }
+          }
+        }
+        meta {
+          pagination {
+            page
+            pageSize
           }
         }
       }
     }
-  }
-  ```
+    ```
 
-3. Move to `_connection` without changing response format (only applies to queries):
+4. Remove attributes (applies to queries & mutation responses):
 
-  ```graphql
-  {
-    # collection fields can be renamed to _connection to get a v4 compat response
-    restaurants_connection {
-      data {
-        id
-        attributes {
+    ```graphql
+    {
+      # collection fields can be renamed to _connection to get a v4 compat response
+      restaurants_connection {
+        data {
+          id
           title
           image {
             data {
               id
-              attributes {
-                url
-              }
+              url
             }
           }
           # collection fields can be renamed to _connection to get a v4 compat response
           images_connection {
             data {
               id
-              attributes {
-                url
-              }
+              url
             }
           }
           xToOneRelation {
             data {
               id
-              attributes {
-                field
-              }
+              field
             }
           }
           # collection fields can be renamed to _connection to get a v4 compat response
           xToManyRelation_connection {
             data {
               id
-              attributes {
-                field
-              }
+              field
             }
           }
         }
-      }
-      meta {
-        pagination {
-          page
-          pageSize
+        meta {
+          pagination {
+            page
+            pageSize
+          }
         }
       }
     }
-  }
-  ```
+    ```
 
-4. Remove attributes (applies to queries & mutation responses):
+5. Use new naming or the simpler queries:
 
-  ```graphql
-  {
-    # collection fields can be renamed to _connection to get a v4 compat response
-    restaurants_connection {
-      data {
-        id
-        title
-        image {
-          data {
+    ```graphql
+    {
+      # Rename data to nodes & meta.pagination to pageInfo
+      restaurants_connection {
+        nodes {
+          id
+          title
+          # can remove data in single Images 
+          image {
             id
             url
           }
-        }
-        # collection fields can be renamed to _connection to get a v4 compat response
-        images_connection {
-          data {
-            id
-            url
+          # collection fields can be renamed to _connection to get a v4 compat response
+          images_connection {
+            nodes {
+              id
+              url
+            }
           }
-        }
-        xToOneRelation {
-          data {
+          # can remove data in xToOne 
+          xToOneRelation {
             id
             field
           }
-        }
-        # collection fields can be renamed to _connection to get a v4 compat response
-        xToManyRelation_connection {
-          data {
-            id
-            field
+          # collection fields can be renamed to _connection to get a v4 compat response
+          xToManyRelation_connection {
+            nodes {
+              id
+              field
+            }
           }
         }
-      }
-      meta {
-        pagination {
+        pageInfo {
           page
           pageSize
         }
       }
     }
-  }
-  ```
-
-5. Use new naming or the simpler queries:
+    ```
 
-  ```graphql
-  {
-    # Rename data to nodes & meta.pagination to pageInfo
-    restaurants_connection {
-      nodes {
+    ```graphql
+    {
+      # remove _connection & data if you don't need pagination att all
+      restaurants {
         id
         title
-        # can remove data in single Images 
         image {
           id
           url
         }
-        # collection fields can be renamed to _connection to get a v4 compat response
-        images_connection {
-          nodes {
-            id
-            url
-          }
+        # remove _connection & data
+        images {
+          id
+          url	
         }
-        # can remove data in xToOne 
         xToOneRelation {
           id
           field
         }
-        # collection fields can be renamed to _connection to get a v4 compat response
-        xToManyRelation_connection {
-          nodes {
-            id
-            field
-          }
+        # remove _connection & data
+        xToManyRelation {
+          id
+          field
         }
       }
-      pageInfo {
-        page
-        pageSize
-      }
     }
-  }
-  ```
-
-  ```graphql
-  {
-    # remove _connection & data if you don't need pagination att all
-    restaurants {
-      id
-      title
-      image {
-        id
-        url
-      }
-      # remove _connection & data
-      images {
-        id
-        url	
-      }
-      xToOneRelation {
-        id
-        field
-      }
-      # remove _connection & data
-      xToManyRelation {
-        id
-        field
-      }
-    }
-  }
-  ```
+    ```
diff --git a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/use-document-id.md b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/use-document-id.md
index b41bc9551c..8c933e01b5 100644
--- a/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/use-document-id.md
+++ b/docusaurus/docs/cms/migration/v4-to-v5/breaking-changes/use-document-id.md
@@ -104,4 +104,8 @@ Documents are identified by their `documentId`:
 
 A codemod will partly handle the change, but might probably add `__TODO__` items to your code since it's impossible for the codemod to automatically guess the new `documentId` of your content.
 
-For additional information, please refer to the related [breaking change entry](/cms/migration/v4-to-v5/breaking-changes/entity-service-deprecated), the [step-by-step guide](/cms/migration/v4-to-v5/step-by-step) to upgrade to Strapi 5, and the dedicated migration guide for the [Entity Service API to Document Service API transition](/cms/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service) if this applies to your custom code.
+For additional information, please refer to the following resources:
+
+- related [breaking change entry for Entity Service API deprecation](/cms/migration/v4-to-v5/breaking-changes/entity-service-deprecated),
+- [step-by-step guide](/cms/migration/v4-to-v5/step-by-step) to upgrade to Strapi 5,
+- and dedicated migration guide for the [Entity Service API to Document Service API transition](/cms/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service) if your custom code is affected by these changes.
diff --git a/docusaurus/docs/cms/migration/v4-to-v5/step-by-step.md b/docusaurus/docs/cms/migration/v4-to-v5/step-by-step.md
index 66fd42c6a1..5a1d41dad9 100644
--- a/docusaurus/docs/cms/migration/v4-to-v5/step-by-step.md
+++ b/docusaurus/docs/cms/migration/v4-to-v5/step-by-step.md
@@ -9,7 +9,6 @@ tags:
 - guides
 ---
 
-import DoNotMigrateYet from '/docs/snippets/_do-not-migrate-to-v5-yet.md'
 
 # Step-by-step guide to upgrade to Strapi 5
 
@@ -25,13 +24,10 @@ Your Strapi v4 application is already running on the latest v4 minor and patch v
 
 Before getting into the upgrade process itself, take the following precautions:
 
-1. **Backup your database**.
-
-  If you are using SQLite with the default configuration (the default database provided with Strapi), your database file is named `data.db` and is located in the `.tmp/` folder at the root of your Strapi application.
-  
-  If you are using another type of database, please refer to their official documentation (see <ExternalLink to="https://www.postgresql.org/docs/" text="PostgreSQL docs"/> and <ExternalLink to="https://dev.mysql.com/doc/" text="MySQL docs"/>).
-
-  If your project is hosted on Strapi Cloud, you can manually [create a backup](/cloud/projects/settings#creating-a-manual-backup).
+1. **Backup your database**:
+    * If you are using SQLite with the default configuration (the default database provided with Strapi), your database file is named `data.db` and is located in the `.tmp/` folder at the root of your Strapi application.
+    * If you are using another type of database, please refer to their official documentation (see <ExternalLink to="https://www.postgresql.org/docs/" text="PostgreSQL docs"/> and <ExternalLink to="https://dev.mysql.com/doc/" text="MySQL docs"/>).
+    * If your project is hosted on Strapi Cloud, you can manually [create a backup](/cloud/projects/settings#creating-a-manual-backup).
 2. **Backup your code**:
     * If your code is versioned with git, create a new dedicated branch to run the migration.
     * If your code is _not_ versioned with git, create a backup of your working Strapi v4 code and store it in a safe place.
@@ -114,7 +110,7 @@ Follow the steps below and leverage retro-compatibility flags and guided migrati
 
 ### Migrate GraphQL API calls
 
-1. Enable the retro-compatibility flag by setting `v4ComptabilityMode` to `true` in the `graphql.config` object of [the `/config/plugins.js|ts` file](/cms/plugins/graphql#code-based-configuration).
+1. Enable the retro-compatibility flag by setting `v4CompatibilityMode` to `true` in the `graphql.config` object of [the `/config/plugins.js|ts` file](/cms/plugins/graphql#code-based-configuration).
 2. Update your queries and mutations only, guided by the dedicated [breaking change entry for GraphQL](/cms/migration/v4-to-v5/breaking-changes/graphql-api-updated).
 3. Validate that your client is running correctly.
-4. Disable the retro-compatibily flag by setting `v4ComptabilityMode` to `false` and start using the new response format.
+4. Disable the retro-compatibily flag by setting `v4CompatibilityMode` to `false` and start using the new response format.
diff --git a/docusaurus/docs/cms/plugins-development/admin-panel-api.md b/docusaurus/docs/cms/plugins-development/admin-panel-api.md
index c89115c91d..f803eefdde 100644
--- a/docusaurus/docs/cms/plugins-development/admin-panel-api.md
+++ b/docusaurus/docs/cms/plugins-development/admin-panel-api.md
@@ -481,7 +481,7 @@ Both the `injectComponent()` and `getPlugin('content-manager').injectComponent()
 
 export default {
   bootstrap(app) {
-    app.getPlugin('content-manager').injectComponent()('editView', 'informations', {
+    app.getPlugin('content-manager').injectComponent('editView', 'informations', {
       name: 'my-plugin-my-compo',
       Component: () => 'my-compo',
     });
diff --git a/docusaurus/docs/cms/plugins-development/content-manager-apis.md b/docusaurus/docs/cms/plugins-development/content-manager-apis.md
index 6941c87938..dfeb321cf6 100644
--- a/docusaurus/docs/cms/plugins-development/content-manager-apis.md
+++ b/docusaurus/docs/cms/plugins-development/content-manager-apis.md
@@ -26,20 +26,28 @@ All the Content Manager APIs share the same API shape and must use components.
 
 ### API shape
 
-All Content Manager APIs works in the same way: to use them, call them on your plugin’s [bootstrap](/cms/plugins-development/admin-panel-api#bootstrap) function, in 2 possible ways:
+All Content Manager APIs works in the same way: to use them, call them on your plugin’s [bootstrap](/cms/plugins-development/admin-panel-api#bootstrap) function, in 2 possible ways.
+
+When using TypeScript, the `apis` property returned by `app.getPlugin()` is typed as `unknown`. Cast it to `ContentManagerPlugin['config']['apis']` before calling the APIs:
 
 - Passing an array with what you want to add. For example, the following code would add the ReleasesPanel at the end of the current EditViewSidePanels:
-  
-  ```jsx
-  app.getPlugin('content-manager').apis.addEditViewSidePanel([ReleasesPanel])`
+
+  ```tsx
+  import type { ContentManagerPlugin } from '@strapi/content-manager/strapi-admin';
+
+  const apis =
+    app.getPlugin('content-manager').apis as ContentManagerPlugin['config']['apis'];
+
+  apis.addEditViewSidePanel([ReleasesPanel]);
   ```
 
 - Passing a function that receives the current elements and return the new ones. This is useful if, for example, you want to add something in a specific position in the list, like in the following code:
 
-  ```jsx
-  app.getPlugin('content-manager').apis.addEditViewSidePanel(
-    (panels) => [SuperImportantPanel, ...panels]
-  )
+  ```tsx
+  const apis =
+    app.getPlugin('content-manager').apis as ContentManagerPlugin['config']['apis'];
+
+  apis.addEditViewSidePanel((panels) => [SuperImportantPanel, ...panels]);
   ```
 
 ### Components
@@ -137,17 +145,19 @@ Use this to add new panels to the Edit view sidebar, just like in the following
 addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[])
 ```
 
-#### PanelDescription
+#### PanelComponent
 
-The interface of the API only receives the following 2 properties:
+A `PanelComponent` receives the properties listed in [EditViewContext](#editviewcontext) and returns an object with the following shape:
 
-```jsx
-{
+```tsx
+type PanelComponent = (props: PanelComponentProps) => {
   title: string;
-  content: React.ReactNode;	
-}
+  content: React.ReactNode;
+};
 ```
 
+`PanelComponentProps` extends the [EditViewContext](#editviewcontext).
+
 ### `addDocumentAction`
 
 Use this API to add more actions to the Edit view or the List View of the Content Manager. There are 3 positions available:
diff --git a/docusaurus/docs/cms/plugins-development/server-api.md b/docusaurus/docs/cms/plugins-development/server-api.md
index 1a741eee3c..df6a24bcb6 100644
--- a/docusaurus/docs/cms/plugins-development/server-api.md
+++ b/docusaurus/docs/cms/plugins-development/server-api.md
@@ -226,7 +226,7 @@ export default {
 Once defined, the configuration can be accessed:
 
 - with `strapi.plugin('plugin-name').config('some-key')` for a specific configuration property,
-- or with `strapi.config.get('plugin.plugin-name')` for the whole configuration object.
+- or with `strapi.config.get('plugin::plugin-name')` for the whole configuration object.
 
 :::tip
 Run `yarn strapi console` or `npm run strapi console` to access the strapi object in a live console.
diff --git a/docusaurus/docs/cms/plugins/graphql.md b/docusaurus/docs/cms/plugins/graphql.md
index 834fc561ea..58450f0512 100644
--- a/docusaurus/docs/cms/plugins/graphql.md
+++ b/docusaurus/docs/cms/plugins/graphql.md
@@ -673,6 +673,10 @@ When [extending the GraphQL schema](#extending-the-schema), the `resolversConfig
 * [policies with the `policies`](#policies) key
 * and [middlewares with the `middlewares`](#middlewares) key
 
+:::tip
+The [advanced queries](/cms/api/graphql/advanced-queries) guide might contain additional information suitable for your use case, including multi-level queries and custom resolvers examples.
+:::
+
 ###### Authorization configuration
 
 By default, the authorization of a GraphQL request is handled by the registered authorization strategy that can be either [API token](/cms/features/api-tokens) or through the [Users & Permissions plugin](#usage-with-the-users--permissions-plugin). The Users & Permissions plugin offers a more granular control.
@@ -877,6 +881,10 @@ export default {
 
 </details>
 
+:::tip
+The [advanced policies](/cms/api/graphql/advanced-policies) guide might contain additional information suitable for your use case.
+:::
+
 ###### Middlewares
 
 [Middlewares](/cms/backend-customization/middlewares) can be applied to a GraphQL resolver through the `resolversConfig.[MyResolverName].middlewares` key. The only difference between the GraphQL and REST implementations is that the `config` key becomes `options`.  
diff --git a/docusaurus/docs/cms/quick-start.md b/docusaurus/docs/cms/quick-start.md
index b6084aaef8..6dbd109036 100644
--- a/docusaurus/docs/cms/quick-start.md
+++ b/docusaurus/docs/cms/quick-start.md
@@ -47,7 +47,7 @@ Follow the steps below by clicking on the togglable content to read more instruc
 
     </TabItem>
 
-2. The terminal will invite you to create a Strapi Cloud account. Ensure `Login/Sign up` is selected in the terminal, or use arrow keys to select it, and press Enter.
+2. The terminal will prompt you to log in or sign up. Once you do, a 30-day trial of the <GrowthBadge tooltip="The CMS Growth plan includes the Live Preview, Releases, and Content History features."/> plan will be automatically applied to your project. Ensure `Login/Sign up` is selected in the terminal, or use arrow keys to select it, and press Enter.
 
 3. In the new browser tab that opens, ensure the confirmation code is the same as in the terminal and click **Confirm**.
 
@@ -70,7 +70,8 @@ Follow the steps below by clicking on the togglable content to read more instruc
 As you will see in the terminal, your project is now building locally.
 
 :::info
-* The folder of your project will include a `.strapi-cloud.json` file used to link the local Strapi project on your machine to the Strapi Cloud project.
+
+* The folder of your project will include a `.strapi-cloud.json` file used to link the local Strapi project on your machine to the Strapi servers.
 * Many more installation options are available. Please refer to the [installation documentation](/cms/installation) for details.
 :::
 
@@ -115,6 +116,8 @@ First we will build a content structure for your content. This can only be done
 
 :::tip
 If the server is not already running, in your terminal, `cd` into the `my-strapi-project` folder and run `npm run develop` (or `yarn develop`) to launch it.
+
+You might also need to run `npm run build` or `yarn build` prior to the `develop` command, especially in cases where building the website is important, such as for TypeScript projects for instance.
 :::
 
 The Content-Type Builder helps you create your content structure. When creating an empty project with Strapi, this is where to get the party started!
diff --git a/docusaurus/docs/snippets/conditional-fields.md b/docusaurus/docs/snippets/conditional-fields.md
new file mode 100644
index 0000000000..74e875b228
--- /dev/null
+++ b/docusaurus/docs/snippets/conditional-fields.md
@@ -0,0 +1,3 @@
+1. Click the **Apply condition** button.
+2. Define the *if* part of the condition, based on a Boolean or Enumeration field of the same content-type (e.g. if `boolean_field` is `true`).
+3. Define the *then* part of the condition by choosing whether to hide or show the field you are configuring (e.g. then `show carousel_media`).
\ No newline at end of file
diff --git a/docusaurus/docs/snippets/query-engine-prereqs.md b/docusaurus/docs/snippets/query-engine-prereqs.md
new file mode 100644
index 0000000000..32eb679a8e
--- /dev/null
+++ b/docusaurus/docs/snippets/query-engine-prereqs.md
@@ -0,0 +1,5 @@
+:::prerequisites
+Before diving deeper into the Query Engine API documentation, it is recommended that you read the following introductions:
+- the [backend customization introduction](/cms/backend-customization),
+- and the [Content APIs introduction](/cms/api/content-api).
+:::
\ No newline at end of file
diff --git a/docusaurus/docs/snippets/sample-env.md b/docusaurus/docs/snippets/sample-env.md
new file mode 100644
index 0000000000..2377425268
--- /dev/null
+++ b/docusaurus/docs/snippets/sample-env.md
@@ -0,0 +1,46 @@
+The Strapi CLI generates an `.env` and an `.env.example` file when creating a new project. The files contain automatically-generated security keys and database settings similar to the following:
+
+<Tabs>
+<TabItem value="env-example" label=".env.example">
+
+```env title=".env.example"
+HOST=0.0.0.0
+PORT=1337
+APP_KEYS="toBeModified1,toBeModified2"
+API_TOKEN_SALT=tobemodified
+ADMIN_JWT_SECRET=tobemodified
+TRANSFER_TOKEN_SALT=tobemodified
+JWT_SECRET=tobemodified
+ENCRYPTION_KEY=tobemodified
+```
+
+</TabItem>
+<TabItem value="env" label=".env">
+
+The variables might differ depending on options selected on project creation.
+
+```env title=".env"
+# Server
+HOST=0.0.0.0
+PORT=1337
+
+# Secrets
+APP_KEYS=appkeyvalue1,appkeyvalue2,appkeyvalue3,appkeyvalue4
+API_TOKEN_SALT=anapitokensalt
+ADMIN_JWT_SECRET=youradminjwtsecret
+TRANSFER_TOKEN_SALT=transfertokensaltvalue
+ENCRYPTION_KEY=yourencryptionkey
+
+# Database
+DATABASE_CLIENT=sqlite
+DATABASE_HOST=
+DATABASE_PORT=
+DATABASE_NAME=
+DATABASE_USERNAME=
+DATABASE_PASSWORD=
+DATABASE_SSL=false
+DATABASE_FILENAME=.tmp/data.db
+```
+
+</TabItem>
+</Tabs>
diff --git a/docusaurus/docusaurus.config.js b/docusaurus/docusaurus.config.js
index 306e1d953e..260f5440b2 100644
--- a/docusaurus/docusaurus.config.js
+++ b/docusaurus/docusaurus.config.js
@@ -187,15 +187,15 @@ const config = {
           hideable: true,
         },
       },
-      algolia: {
-        appId: '392RJ63O14',
-        apiKey: '3f4b8953a20a4c5af4614a607ecf9a93',
-        indexName: 'strapi_newCmsCrawler_march2025',
-        contextualSearch: false,
-        searchParameters: {
-          facetFilters: [] 
-        },
-      },
+      // algolia: {
+      //   appId: '392RJ63O14',
+      //   apiKey: '3f4b8953a20a4c5af4614a607ecf9a93',
+      //   indexName: 'strapi_newCmsCrawler_march2025',
+      //   contextualSearch: false,
+      //   searchParameters: {
+      //     facetFilters: [] 
+      //   },
+      // },
       navbar: {
         hideOnScroll: false,
         logo: {
diff --git a/docusaurus/package.json b/docusaurus/package.json
index fdfc3d8fc9..e9a15d2291 100644
--- a/docusaurus/package.json
+++ b/docusaurus/package.json
@@ -1,6 +1,6 @@
 {
   "name": "strapi-docs",
-  "version": "6.4.0",
+  "version": "6.6.6",
   "private": true,
   "scripts": {
     "docusaurus": "docusaurus",
@@ -26,6 +26,7 @@
     "@docusaurus/preset-classic": "3.5.2",
     "@docusaurus/theme-live-codeblock": "3.5.2",
     "@docusaurus/theme-mermaid": "3.5.2",
+    "@inkeep/cxkit-react": "^0.5.82",
     "@mdx-js/react": "^3.0.0",
     "classnames": "^2.5.1",
     "clsx": "^1.2.1",
diff --git a/docusaurus/src/components/ExpandableContent.js b/docusaurus/src/components/ExpandableContent.js
new file mode 100644
index 0000000000..7c1dcea558
--- /dev/null
+++ b/docusaurus/src/components/ExpandableContent.js
@@ -0,0 +1,54 @@
+import React, { useState, useRef } from 'react';
+
+export default function ExpandableContent({ 
+  children, 
+  showMoreText = "Show more…",
+  showLessText = "Show less",
+  maxHeight = "200px"
+}) {
+  const [isExpanded, setIsExpanded] = useState(false);
+  const buttonRef = useRef(null);
+
+  const toggleExpanded = () => {
+    setIsExpanded(!isExpanded);
+    
+    // Si on ferme le contenu, scroll vers le bouton après un petit délai
+    if (isExpanded) {
+      setTimeout(() => {
+        buttonRef.current?.scrollIntoView({ 
+          behavior: 'smooth', 
+          block: 'center' 
+        });
+      }, 100);
+    }
+  };
+
+  return (
+    <div className="expandable-content">
+      <div 
+        className={`expandable-content__wrapper ${!isExpanded ? 'expandable-content__wrapper--collapsed' : ''}`}
+        style={{
+          maxHeight: isExpanded ? 'none' : maxHeight,
+          overflow: 'hidden',
+          position: 'relative'
+        }}
+      >
+        {children}
+        {!isExpanded && (
+          <div className="expandable-content__gradient" />
+        )}
+      </div>
+      
+      <div className="expandable-content__toggle">
+        <button 
+          ref={buttonRef}
+          className="expandable-content__button"
+          onClick={toggleExpanded}
+          type="button"
+        >
+          {isExpanded ? showLessText : showMoreText}
+        </button>
+      </div>
+    </div>
+  );
+}
\ No newline at end of file
diff --git a/docusaurus/src/components/ExpandableDocCardsWrapper.js b/docusaurus/src/components/ExpandableDocCardsWrapper.js
new file mode 100644
index 0000000000..079cc57761
--- /dev/null
+++ b/docusaurus/src/components/ExpandableDocCardsWrapper.js
@@ -0,0 +1,43 @@
+import React, { useState } from 'react';
+import Icon from './Icon';
+
+export default function ExpandableDocCardsWrapper({ 
+  children, 
+  initialVisible = 4,
+  seeMoreText = "See more...",
+  seeLessText = "See less"
+}) {
+  const [isExpanded, setIsExpanded] = useState(false);
+  
+  const childArray = React.Children.toArray(children);
+  const visibleChildren = isExpanded ? childArray : childArray.slice(0, initialVisible);
+  const hasMoreItems = childArray.length > initialVisible;
+
+  const toggleExpanded = () => {
+    setIsExpanded(!isExpanded);
+  };
+
+  return (
+    <div className="expandable-cards-wrapper">
+      <div className="custom-cards-wrapper">
+        {visibleChildren}
+      </div>
+      
+      {hasMoreItems && (
+        <div className="expandable-cards-toggle">
+          <button 
+            className="expandable-cards-button"
+            onClick={toggleExpanded}
+            type="button"
+          >
+            <Icon 
+              name={isExpanded ? "caret-up" : "caret-down"} 
+              classes={`ph-fill expandable-cards-icon ${isExpanded ? 'expandable-cards-icon--up' : 'expandable-cards-icon--down'}`}
+            />
+            {isExpanded ? seeLessText : seeMoreText}
+          </button>
+        </div>
+      )}
+    </div>
+  );
+}
\ No newline at end of file
diff --git a/docusaurus/src/scss/__index.scss b/docusaurus/src/scss/__index.scss
index 29f2637e01..d66766d96a 100644
--- a/docusaurus/src/scss/__index.scss
+++ b/docusaurus/src/scss/__index.scss
@@ -29,6 +29,8 @@
 @use 'copy-markdown-button.scss';
 @use 'custom-doc-cards.scss';
 @use 'custom-search-bar.scss';
+@use 'expandable-doc-cards.scss';
+@use 'expandable-content.scss';
 @use 'details.scss';
 @use 'diagrams.scss';
 @use 'footer.scss';
diff --git a/docusaurus/src/scss/custom-search-bar.scss b/docusaurus/src/scss/custom-search-bar.scss
index 56b7c7c049..ba822ed116 100644
--- a/docusaurus/src/scss/custom-search-bar.scss
+++ b/docusaurus/src/scss/custom-search-bar.scss
@@ -17,155 +17,86 @@
   box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.04);
   font-family: "SF Pro Text", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important; 
 
-  .DocSearch.DocSearch-Button:hover {
-    box-shadow: none;
-  }
-
-  .DocSearch.DocSearch-Button,
-  .kapa-widget-button {
+  // Base style for both buttons
+  > div,
+  > button {
     font-size: var(--strapi-font-size-sm);
-    line-height: var(--strapi-font-size-sm);
+    line-height: var(--strapi-line-height-sm);
     flex: 1 1 50%;
     height: 34px !important;
-  }
-
-  .DocSearch.DocSearch-Button {
     background-color: transparent;
-    width: 65%;
     border: none;
-    justify-content: flex-start;
+    cursor: pointer;
+    padding: 0 12px;
     margin: 0;
-    border-radius: 4px 0 0 4px;
-    position: relative;
-    padding-left: 12px;
-    padding-right: 0;
-    border-right: solid 1px var(--strapi-neutral-200);
-
+    color: var(--strapi-neutral-400);
+    font-weight: 500;
+    display: flex;
+    align-items: center;
+    
     &:hover {
       color: var(--strapi-primary-600);
-      border-radius: 4px 0 0 4px;
-
-      .DocSearch-Button-Placeholder::before {
-        content:'\E30C';
-        color: var(--strapi-neutral-500) !important;
-      }
     }
   }
 
-  .DocSearch-Button-Placeholder {
-    font-size: var(--strapi-font-size-sm);
-    line-height: var(--strapi-line-height-sm);
-    padding-left: 0;
-    color: var(--strapi-neutral-400);
-    font-weight: 500;
-    // left: -16px;
-    position: relative;
+  // Specific search button (div with DocSearch classes)
+  .DocSearch.DocSearch-Button {
+    border-right: solid 1px var(--strapi-neutral-200);
+    border-radius: 4px 0 0 4px;
+    justify-content: flex-start;
 
-    &::before {
-      content: '\E30C';
-      font-family: "Phosphor";
-      color: var(--strapi-neutral-500);
-      margin-right: 6px;
-      font-size: 16px;
-      position: relative;
-      top: 2px;
+    .DocSearch-Button-Container {
+      display: flex;
+      align-items: center;
+      width: 100%;
+
+      .DocSearch-Button-Placeholder {
+        font-size: var(--strapi-font-size-sm);
+        line-height: var(--strapi-line-height-sm);
+        color: inherit;
+        position: relative;
+
+        &::before {
+          content: '\E30C';
+          font-family: "Phosphor";
+          color: var(--strapi-neutral-500);
+          margin-right: 6px;
+          font-size: 16px;
+          position: relative;
+          top: 2px;
+        }
+      }
     }
 
     &:hover {
-      color: var(--strapi-primary-600);
+      .DocSearch-Button-Placeholder::before {
+        color: var(--strapi-primary-600);
+      }
     }
   }
 
-  .DocSearch-Search-Icon {
-    display: none;
-  }
-
-  .DocSearch-Button-Keys {
-    display: none;
-    // min-width: 30px;
-    // position: relative;
-    // top: 1px;
-    // font-size: 1rem;
-
-    // .DocSearch-Button-Key {
-    //   color: var(--strapi-neutral-500);
-    //   box-shadow: none;
-    //   background: none;
-    //   border-radius: 0;
-    //   padding: 0;
-    //   margin-right: 0;
-    //   width: 10px;
-    // }
-  }
-
-
   button.kapa-widget-button {
-    border: none;
-    padding: 0 0 0 12px;
-    width: 100%;
-    height: 36px;
-    overflow: visible;
-    cursor: pointer;
-    position: relative;
-    border-radius: 0 6px 6px 0;
-    background: transparent;
-    text-align: left;
-
-    /* inherit font & color from ancestor */
-    color: var(--strapi-neutral-400);
-    font: inherit;
-    font-size: .95rem;
-    font-weight: 500;
-
-    /* Normalize `line-height`. Cannot be changed from `normal` in Firefox 4+. */
-    line-height: normal;
-
-    /* Corrects font smoothing for webkit */
-    -webkit-font-smoothing: inherit;
-    -moz-osx-font-smoothing: inherit;
-
-    /* Corrects inability to style clickable `input` types in iOS */
-    -webkit-appearance: none;
-    /* Remove excess padding and border in Firefox 4+ */
-    &::-moz-focus-inner {
-      border: 0;
-      padding: 0;
-    }
-
-    svg {
-      position: relative;
-      left: 6px;
-      top: 3px;
-      width: 18px;
-      height: 18px;
-      fill: var(--strapi-neutral-500);
-    }
-
+    border-radius: 0 4px 4px 0;
+    
     .kapa-widget-button-text {
-      position: relative;
+      display: flex;
+      align-items: center;
       font-size: var(--strapi-font-size-sm);
       line-height: var(--strapi-line-height-sm);
-      top: 1px;
+      color: inherit;
 
       i {
         margin-right: 6px;
         color: var(--strapi-neutral-500) !important;
-      }
-
-      @media screen and (max-width: 996px){
-        left: 12px;
+        font-size: 16px;
+        position: relative;
+        top: 1px;
       }
     }
 
-    &:hover,
-    &:active {
-      .kapa-widget-button-text {
-        color: var(--strapi-primary-600);
-      }
-      button {
-        svg {
-          fill: var(--strapi-primary-600);
-        }
+    &:hover {
+      .kapa-widget-button-text i {
+        color: var(--strapi-primary-600) !important;
       }
     }
   }
@@ -187,7 +118,7 @@
     .kapa-widget-button-text {
       display: none;
     }
-    .kapa-widget-button {
+    button.kapa-widget-button {
       border-radius: 50%;
       padding: 0;
       padding-right: 4px;
@@ -201,4 +132,4 @@
     border: var(--strapi-input-border);
     color: var(--strapi-dark-100);
   }
-}
+}
\ No newline at end of file
diff --git a/docusaurus/src/scss/expandable-content.scss b/docusaurus/src/scss/expandable-content.scss
new file mode 100644
index 0000000000..bdb63d0c03
--- /dev/null
+++ b/docusaurus/src/scss/expandable-content.scss
@@ -0,0 +1,131 @@
+/** Component: ExpandableContent */
+@use './mixins' as *;
+
+.expandable-content {
+  margin-bottom: var(--strapi-spacing-6);
+
+  &__wrapper {
+    position: relative;
+    transition: max-height 0.3s ease;
+    
+    &--collapsed {
+      position: relative;
+    }
+  }
+
+  &__gradient {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 80px;
+    background: linear-gradient(
+      to bottom,
+      rgba(255, 255, 255, 0) 0%,
+      rgba(255, 255, 255, 0.3) 30%,
+      rgba(255, 255, 255, 0.7) 60%,
+      rgba(255, 255, 255, 0.95) 85%,
+      rgba(255, 255, 255, 1) 100%
+    );
+    pointer-events: none;
+  }
+
+  &__toggle {
+    display: flex;
+    justify-content: center;
+    margin-top: var(--strapi-spacing-4);
+  }
+
+  &__button {
+    background: rgba(255, 255, 255, 0.95);
+    border: 1px solid var(--strapi-neutral-200);
+    color: var(--strapi-neutral-800);
+    cursor: pointer;
+    font-size: var(--strapi-font-size-sm);
+    font-weight: 500;
+    padding: var(--strapi-spacing-2) var(--strapi-spacing-4);
+    border-radius: var(--strapi-spacing-2);
+    transition: all 0.2s ease;
+    text-decoration: none;
+    backdrop-filter: blur(6px);
+    box-shadow: 
+      0 2px 8px rgba(0, 0, 0, 0.08),
+      0 1px 4px rgba(0, 0, 0, 0.06);
+    
+    &:hover {
+      background: var(--strapi-neutral-0);
+      border-color: var(--strapi-neutral-300);
+      color: var(--strapi-neutral-900);
+      text-decoration: none;
+      transform: translateY(-1px);
+      box-shadow: 
+        0 4px 12px rgba(0, 0, 0, 0.12),
+        0 2px 6px rgba(0, 0, 0, 0.08);
+    }
+
+    &:focus {
+      outline: none;
+      box-shadow: 
+        0 0 0 2px var(--strapi-primary-200),
+        0 2px 8px rgba(0, 0, 0, 0.08);
+    }
+
+    &:focus-visible {
+      outline: none;
+      box-shadow: 
+        0 0 0 2px var(--strapi-primary-500),
+        0 2px 8px rgba(0, 0, 0, 0.08);
+    }
+
+    &:active {
+      transform: translateY(0);
+    }
+  }
+}
+
+@include dark {
+  .expandable-content {
+    &__gradient {
+      background: linear-gradient(
+        to bottom,
+        rgba(33, 33, 52, 0) 0%,
+        rgba(33, 33, 52, 0.2) 20%,
+        rgba(33, 33, 52, 0.5) 40%,
+        rgba(33, 33, 52, 0.8) 65%,
+        rgba(33, 33, 52, 0.95) 85%,
+        rgba(33, 33, 52, 1) 100%
+      );
+    }
+
+    &__button {
+      background: rgba(33, 33, 52, 0.95);
+      border-color: var(--strapi-neutral-200);
+      color: var(--strapi-neutral-800);
+      backdrop-filter: blur(8px);
+      box-shadow: 
+        0 2px 12px rgba(0, 0, 0, 0.3),
+        0 1px 6px rgba(0, 0, 0, 0.2);
+
+      &:hover {
+        background: var(--strapi-neutral-0);
+        border-color: var(--strapi-neutral-300);
+        color: var(--strapi-neutral-900);
+        box-shadow: 
+          0 4px 20px rgba(0, 0, 0, 0.4),
+          0 2px 10px rgba(0, 0, 0, 0.25);
+      }
+
+      &:focus {
+        box-shadow: 
+          0 0 0 2px var(--strapi-primary-600),
+          0 2px 12px rgba(0, 0, 0, 0.3);
+      }
+
+      &:focus-visible {
+        box-shadow: 
+          0 0 0 2px var(--strapi-primary-600),
+          0 2px 12px rgba(0, 0, 0, 0.3);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/docusaurus/src/scss/expandable-doc-cards.scss b/docusaurus/src/scss/expandable-doc-cards.scss
new file mode 100644
index 0000000000..cc4ccb95cb
--- /dev/null
+++ b/docusaurus/src/scss/expandable-doc-cards.scss
@@ -0,0 +1,87 @@
+/** Component: ExpandableDocCardsWrapper */
+@use './mixins' as *;
+
+.expandable-cards-wrapper {
+  .custom-cards-wrapper {
+    // Inherit existing styles from custom-doc-cards.scss
+  }
+
+  .expandable-cards-toggle {
+    display: flex;
+    justify-content: center;
+    margin-top: 16px;
+    margin-bottom: 32px;
+  }
+
+  .expandable-cards-button {
+    background: none;
+    border: none;
+    color: var(--strapi-neutral-600);
+    cursor: pointer;
+    font-size: var(--strapi-font-size-sm);
+    font-weight: 400;
+    padding: 8px 16px;
+    border-radius: var(--strapi-spacing-1);
+    transition: all 0.2s ease;
+    text-decoration: none;
+    display: flex;
+    align-items: flex-start;
+    gap: 8px;
+    
+    &:hover {
+      background-color: var(--strapi-neutral-100);
+      color: var(--strapi-neutral-800);
+      text-decoration: none;
+    }
+
+    &:focus {
+      outline: none;
+      box-shadow: 0 0 0 2px var(--strapi-primary-200);
+    }
+
+    &:focus-visible {
+      outline: none;
+      box-shadow: 0 0 0 2px var(--strapi-primary-400);
+    }
+
+    &:active {
+      transform: translateY(1px);
+    }
+  }
+
+  .expandable-cards-icon {
+    font-size: 14px;
+    transition: transform 0.2s ease;
+    
+    &--down {
+      margin-top: -2px;
+    }
+    
+    &--up {
+      margin-top: 2px;
+    }
+  }
+}
+
+@include dark {
+  .expandable-cards-wrapper {
+    .expandable-cards-button {
+      color: var(--strapi-neutral-400);
+
+      &:hover {
+        background-color: var(--strapi-neutral-800);
+        color: var(--strapi-neutral-200);
+      }
+
+      &:focus {
+        outline: none;
+        box-shadow: 0 0 0 2px var(--strapi-primary-800);
+      }
+
+      &:focus-visible {
+        outline: none;
+        box-shadow: 0 0 0 2px var(--strapi-primary-400);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/docusaurus/src/scss/tabs.scss b/docusaurus/src/scss/tabs.scss
index 6c24d30651..dd50266a46 100644
--- a/docusaurus/src/scss/tabs.scss
+++ b/docusaurus/src/scss/tabs.scss
@@ -3,7 +3,6 @@
 
 // Variables
 :root body {
-  // Using variables to make future changes easier
   --custom-tabs-px: var(--strapi-spacing-5);
   --custom-tabs-py: var(--strapi-spacing-2);
   --ifm-tabs-padding-horizontal: var(--custom-tabs-px);
@@ -111,6 +110,39 @@
       }
     }
   }
+  
+  // Usage: add "tabs--allow-multiline" class to <Tabs> container
+  &.tabs--allow-multiline &__item {
+    height: auto;
+    min-height: var(--tabs-item-height);
+    max-width: 200px;
+    
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
+    
+    button {
+      white-space: normal !important;
+      line-height: 1.3;
+      height: auto !important;
+      min-height: 32px;
+      
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      text-align: center;
+      width: 100%;
+      
+      // Limit to 2 lines maximum
+      overflow: hidden;
+      display: -webkit-box;
+      -webkit-line-clamp: 2;
+      -webkit-box-orient: vertical;
+      
+      padding: 4px 8px;
+    }
+  }
 }
 
 /** Tabs inside Details component */
diff --git a/docusaurus/src/theme/DocSidebar/CustomSearchBar.js b/docusaurus/src/theme/DocSidebar/CustomSearchBar.js
index 090e9fdcbe..82a1e3bb4f 100644
--- a/docusaurus/src/theme/DocSidebar/CustomSearchBar.js
+++ b/docusaurus/src/theme/DocSidebar/CustomSearchBar.js
@@ -1,12 +1,140 @@
-import React from 'react';
-import SearchBar from '@theme-original/SearchBar';
-import Icon from '../../components/Icon.js'
+import React, { useState, useCallback } from 'react';
+import {
+  InkeepModalSearch,
+} from "@inkeep/cxkit-react";
+import Icon from '../../components/Icon.js';
+
+function getInkeepSearchConfig() {
+  const isBrowser = typeof document !== 'undefined';
+
+  return {
+    baseSettings: {
+      apiKey: "c43431665c4e336c02def65c6f90a1e0d943dfe8066dcf43",
+      primaryBrandColor: "#4945FF",
+      organizationDisplayName: "Strapi",
+      colorMode: isBrowser
+        ? {
+            sync: {
+              target: document.documentElement,
+              attributes: ["data-theme"],
+              isDarkMode: (attributes) => {
+                const currentTheme = attributes["data-theme"];
+                return currentTheme === "dracula" || currentTheme === "dark";
+              },
+            },
+          }
+        : undefined, // undefined on server side, no error
+      transformSource: (source) => {
+        const { url } = source;
+        if (!url) {
+          return source;
+        }
+        const urlPatterns = {
+          docs: 'docs.strapi.io',
+          docs_next: 'docs-next.strapi.io',
+          blog: 'strapi.io/blog',
+          strapi: 'strapi.io',
+          youtube: 'youtube.com',
+        }
+        const tabConfig = {
+          [urlPatterns.docs]: {
+            tab: 'Docs',
+          },
+          [urlPatterns.docs_next]: {
+            tab: 'Docs',
+          },
+          [urlPatterns.blog]: {
+            tab: 'Blog',
+          },
+          [urlPatterns.strapi]: {
+            tab: 'Strapi',
+          },
+          [urlPatterns.youtube]: {
+            tab: 'YouTube',
+          }
+        }
+        const matchingPattern = Object.keys(tabConfig).find((pattern) => url.includes(pattern))
+        const config = matchingPattern ? tabConfig[matchingPattern] : null
+        if (!config) {
+          return source;
+        }
+        const existingTabs = source.tabs ?? []
+        const tabExists = existingTabs.some((existingTab) =>
+          typeof existingTab === 'string'
+            ? existingTab === config.tab
+            : Array.isArray(existingTab) && existingTab[0] === config.tab,
+        )
+        const tabs = tabExists
+          ? existingTabs
+          : [
+            ...existingTabs,
+            [config.tab, { breadcrumbs: source.breadcrumbs }],
+          ]
+        return {
+          ...source,
+          tabs,
+        }
+      },
+    },
+    searchSettings: {
+      placeholder: "Search documentation...",
+      view: "dual-pane",
+      tabs: [["Docs", { isAlwaysVisible: true }], "Blog", "Strapi", "GitHub", "YouTube", "All"],
+    }
+  };
+}
 
 export default function CustomSearchBarWrapper(props) {
+  const [isOpen, setIsOpen] = useState(false);
+
+  const handleOpenChange = useCallback((newOpen) => {
+    setIsOpen(newOpen);
+  }, []);
+
+  const config = {
+    ...getInkeepSearchConfig(),
+    modalSettings: {
+      isOpen,
+      onOpenChange: handleOpenChange,
+    },
+  };
+
+  const handleSearchClick = () => {
+    setIsOpen(true);
+  };
+
   return (
-    <div className="my-custom-search-bar">
-      <SearchBar {...props} />
-      <button className="kapa-widget-button"><span className="kapa-widget-button-text"><Icon name="sparkle"/>Ask AI</span></button>
-    </div>
+    <>
+      <div className="my-custom-search-bar">
+        {/* Custom Inkeep trigger that replaces SearchBar */}
+        <div 
+          className="DocSearch DocSearch-Button"
+          onClick={handleSearchClick}
+          role="button"
+          tabIndex="0"
+          onKeyDown={(e) => {
+            if (e.key === 'Enter' || e.key === ' ') {
+              e.preventDefault();
+              handleSearchClick();
+            }
+          }}
+          style={{ cursor: 'pointer' }}
+        >
+          <span className="DocSearch-Button-Container">
+            <span className="DocSearch-Button-Placeholder">Search</span>
+          </span>
+        </div>
+        
+        {/* Keep existing Kapa AI button unchanged */}
+        <button className="kapa-widget-button">
+          <span className="kapa-widget-button-text">
+            <Icon name="sparkle"/>Ask AI
+          </span>
+        </button>
+      </div>
+
+      {/* The Inkeep Modal Component - Search only with advanced config */}
+      <InkeepModalSearch {...config} />
+    </>
   );
-}
+}
\ No newline at end of file
diff --git a/docusaurus/src/theme/MDXComponents.js b/docusaurus/src/theme/MDXComponents.js
index b2a2181c3a..db67509b31 100644
--- a/docusaurus/src/theme/MDXComponents.js
+++ b/docusaurus/src/theme/MDXComponents.js
@@ -17,6 +17,8 @@ import ColumnRight from '../components/ColumnRight';
 import FeedbackPlaceholder from '../components/FeedbackPlaceholder';
 import CustomDocCard from '../components/CustomDocCard';
 import CustomDocCardsWrapper from '../components/CustomDocCardsWrapper';
+import ExpandableDocCardsWrapper from '../components/ExpandableDocCardsWrapper';
+import ExpandableContent from '../components/ExpandableContent.js';
 import { InteractiveQueryBuilder } from '../components/InteractiveQueryBuilder/InteractiveQueryBuilder';
 import { AlphaBadge, BetaBadge, FeatureFlagBadge, EnterpriseBadge, GrowthBadge, SsoBadge, CloudEssentialBadge, CloudProBadge, CloudScaleBadge, NewBadge, UpdatedBadge, VersionBadge } from '../components/Badge';
 import { SideBySideColumn, SideBySideContainer } from '../components';
@@ -70,6 +72,8 @@ export default {
   FeedbackPlaceholder,
   CustomDocCard,
   CustomDocCardsWrapper,
+  ExpandableDocCardsWrapper,
+  ExpandableContent,
   InteractiveQueryBuilder,
   SubtleCallout,
   ThemedImage,
diff --git a/docusaurus/static/img/assets/cli/strapi-generate.gif b/docusaurus/static/img/assets/cli/strapi-generate.gif
new file mode 100644
index 0000000000..7a8eaa2182
Binary files /dev/null and b/docusaurus/static/img/assets/cli/strapi-generate.gif differ
diff --git a/docusaurus/static/img/assets/cloud/account-repo-selection.png b/docusaurus/static/img/assets/cloud/account-repo-selection.png
index 31057af0e6..c477c97054 100644
Binary files a/docusaurus/static/img/assets/cloud/account-repo-selection.png and b/docusaurus/static/img/assets/cloud/account-repo-selection.png differ
diff --git a/docusaurus/static/img/assets/cloud/account-repo-selection_DARK.png b/docusaurus/static/img/assets/cloud/account-repo-selection_DARK.png
index 1277d11de2..12b204981c 100644
Binary files a/docusaurus/static/img/assets/cloud/account-repo-selection_DARK.png and b/docusaurus/static/img/assets/cloud/account-repo-selection_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/environments.png b/docusaurus/static/img/assets/cloud/environments.png
index f6ad58c661..54e157cfa0 100644
Binary files a/docusaurus/static/img/assets/cloud/environments.png and b/docusaurus/static/img/assets/cloud/environments.png differ
diff --git a/docusaurus/static/img/assets/cloud/environments_DARK.png b/docusaurus/static/img/assets/cloud/environments_DARK.png
index b9298c1d18..30f42cb751 100644
Binary files a/docusaurus/static/img/assets/cloud/environments_DARK.png and b/docusaurus/static/img/assets/cloud/environments_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/invoices.png b/docusaurus/static/img/assets/cloud/invoices.png
new file mode 100644
index 0000000000..6f2433e59e
Binary files /dev/null and b/docusaurus/static/img/assets/cloud/invoices.png differ
diff --git a/docusaurus/static/img/assets/cloud/project-creation-3.png b/docusaurus/static/img/assets/cloud/project-creation-3.png
new file mode 100644
index 0000000000..9a24d71442
Binary files /dev/null and b/docusaurus/static/img/assets/cloud/project-creation-3.png differ
diff --git a/docusaurus/static/img/assets/cloud/project-creation-3_DARK.png b/docusaurus/static/img/assets/cloud/project-creation-3_DARK.png
new file mode 100644
index 0000000000..99d2c77a10
Binary files /dev/null and b/docusaurus/static/img/assets/cloud/project-creation-3_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings-variables2.png b/docusaurus/static/img/assets/cloud/settings-variables2.png
index 6dfe4a5f84..9716fc0055 100644
Binary files a/docusaurus/static/img/assets/cloud/settings-variables2.png and b/docusaurus/static/img/assets/cloud/settings-variables2.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings-variables2_DARK.png b/docusaurus/static/img/assets/cloud/settings-variables2_DARK.png
index cc1746eebb..1762eb0871 100644
Binary files a/docusaurus/static/img/assets/cloud/settings-variables2_DARK.png and b/docusaurus/static/img/assets/cloud/settings-variables2_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings.png b/docusaurus/static/img/assets/cloud/settings.png
index 13177e6dc5..8909c9f6c6 100644
Binary files a/docusaurus/static/img/assets/cloud/settings.png and b/docusaurus/static/img/assets/cloud/settings.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_DARK.png b/docusaurus/static/img/assets/cloud/settings_DARK.png
index 2177fbcdf3..7ea1266728 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_DARK.png and b/docusaurus/static/img/assets/cloud/settings_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_backups.png b/docusaurus/static/img/assets/cloud/settings_backups.png
index 98844f87a1..d02764159f 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_backups.png and b/docusaurus/static/img/assets/cloud/settings_backups.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_backups_DARK.png b/docusaurus/static/img/assets/cloud/settings_backups_DARK.png
index 7bbcf116d8..1c07722915 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_backups_DARK.png and b/docusaurus/static/img/assets/cloud/settings_backups_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_billing.png b/docusaurus/static/img/assets/cloud/settings_billing.png
index a7e34def40..a15c21e802 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_billing.png and b/docusaurus/static/img/assets/cloud/settings_billing.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_billing_DARK.png b/docusaurus/static/img/assets/cloud/settings_billing_DARK.png
index 9237324c80..e103916ea6 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_billing_DARK.png and b/docusaurus/static/img/assets/cloud/settings_billing_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_domains.png b/docusaurus/static/img/assets/cloud/settings_domains.png
index bc98b790cb..a085126871 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_domains.png and b/docusaurus/static/img/assets/cloud/settings_domains.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_domains_DARK.png b/docusaurus/static/img/assets/cloud/settings_domains_DARK.png
index 92cb75ed86..898a60c5fd 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_domains_DARK.png and b/docusaurus/static/img/assets/cloud/settings_domains_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_env.png b/docusaurus/static/img/assets/cloud/settings_env.png
index a897f88d76..333261dcb2 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_env.png and b/docusaurus/static/img/assets/cloud/settings_env.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_env_DARK.png b/docusaurus/static/img/assets/cloud/settings_env_DARK.png
index 26142c2188..01a0b32381 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_env_DARK.png and b/docusaurus/static/img/assets/cloud/settings_env_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_invoices.png b/docusaurus/static/img/assets/cloud/settings_invoices.png
index 592ce4b726..6f2433e59e 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_invoices.png and b/docusaurus/static/img/assets/cloud/settings_invoices.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_invoices_DARK.png b/docusaurus/static/img/assets/cloud/settings_invoices_DARK.png
index c262ae35d9..1993027b61 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_invoices_DARK.png and b/docusaurus/static/img/assets/cloud/settings_invoices_DARK.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_plans.png b/docusaurus/static/img/assets/cloud/settings_plans.png
index d32ce769b5..c87ab43061 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_plans.png and b/docusaurus/static/img/assets/cloud/settings_plans.png differ
diff --git a/docusaurus/static/img/assets/cloud/settings_plans_DARK.png b/docusaurus/static/img/assets/cloud/settings_plans_DARK.png
index 9fcdc7d0f6..fd11d34162 100644
Binary files a/docusaurus/static/img/assets/cloud/settings_plans_DARK.png and b/docusaurus/static/img/assets/cloud/settings_plans_DARK.png differ
diff --git a/docusaurus/static/img/assets/content-manager/previewing-content-desktop-mobile.gif b/docusaurus/static/img/assets/content-manager/previewing-content-desktop-mobile.gif
new file mode 100644
index 0000000000..bdbe2798b6
Binary files /dev/null and b/docusaurus/static/img/assets/content-manager/previewing-content-desktop-mobile.gif differ
diff --git a/docusaurus/static/img/assets/getting-started/user-information-profile.png b/docusaurus/static/img/assets/getting-started/user-information-profile.png
index 7752319da7..f6d78e1db0 100644
Binary files a/docusaurus/static/img/assets/getting-started/user-information-profile.png and b/docusaurus/static/img/assets/getting-started/user-information-profile.png differ
diff --git a/docusaurus/static/img/assets/getting-started/user-information-profile_DARK.png b/docusaurus/static/img/assets/getting-started/user-information-profile_DARK.png
index cc6b3778c0..dd02022aa9 100644
Binary files a/docusaurus/static/img/assets/getting-started/user-information-profile_DARK.png and b/docusaurus/static/img/assets/getting-started/user-information-profile_DARK.png differ
diff --git a/docusaurus/static/llms-full.txt b/docusaurus/static/llms-full.txt
index b59da48010..abebe8f27f 100644
--- a/docusaurus/static/llms-full.txt
+++ b/docusaurus/static/llms-full.txt
@@ -1917,7 +1917,7 @@ You can also use the [Strapi Client](/cms/api/client) library to interact with t
 
 REST and GraphQL APIs represent the top-level layers of the Content API exposed to external applications. Strapi also provides 2 lower-level APIs:
 
-- The [Document Service API](/cms/api/document-service) is the recommended API to interact with your application's database within the [backend server](/cms/customization) or through [plugins](/cms/plugins-development/developing-plugins). The Document Service is the layer that handles **documents**
+- The [Document Service API](/cms/api/document-service), accessible through `strapi.documents`, is the recommended API to interact with your application's database within the [backend server](/cms/customization) or through [plugins](/cms/plugins-development/developing-plugins). The Document Service is the layer that handles **documents**
 
 
 
@@ -2118,6 +2118,10 @@ Syntax: `update(parameters: Params) => Promise
 
 </ApiCall>
 
+:::note
+It's not recommended to update repeatable components with the Document Service API (see the related [breaking change entry](/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api.md) for more details).
+:::
+
 <!-- ! not working -->
 <!-- #### Update many document locales
 
@@ -3378,6 +3382,95 @@ The following example fetches the `label`, `start_date`, and `end_date` attribut
 
 Dynamic zones are union types in GraphQL so you need to use 
 
+```graphql title="Simple examples for membership operators (in, notIn)"
+# in - returns restaurants with category either "pizza" or "burger"
+{
+  restaurants(filters: { category: { in: ["pizza", "burger"] } }) {
+    name
+  }
+}
+
+# notIn - returns restaurants whose category is neither "pizza" nor "burger"
+{
+  restaurants(filters: { category: { notIn: ["pizza", "burger"] } }) {
+    name
+  }
+}
+```
+
+```graphql title="Simple examples for null checks operators (null, notNull)"
+# null - returns restaurants where description is null
+{
+  restaurants(filters: { description: { null: true } }) {
+    name
+  }
+}
+
+# notNull - returns restaurants where description is not null
+{
+  restaurants(filters: { description: { notNull: true } }) {
+    name
+  }
+}
+```
+
+```graphql title="Simple examples for logical operators (and, or, not)"
+# and - both category must be "pizza" AND averagePrice must be < 20
+{
+  restaurants(filters: {
+    and: [
+      { category: { eq: "pizza" } },
+      { averagePrice: { lt: 20 } }
+    ]
+  }) {
+    name
+  }
+}
+
+# or - category is "pizza" OR category is "burger"
+{
+  restaurants(filters: {
+    or: [
+      { category: { eq: "pizza" } },
+      { category: { eq: "burger" } }
+    ]
+  }) {
+    name
+  }
+}
+
+# not - category must NOT be "pizza"
+{
+  restaurants(filters: {
+    not: { category: { eq: "pizza" } }
+  }) {
+    name
+  }
+}
+```
+
+```graphql title="Example with nested logical operators: use and, or, and not to find pizzerias under 20 euros"
+{
+  restaurants(
+    filters: {
+      and: [
+        { not: { averagePrice: { gte: 20 } } }
+        {
+          or: [
+            { name: { eq: "Pizzeria" } }
+            { name: { startsWith: "Pizzeria" } }
+          ]
+        }
+      ]
+    }
+  ) {
+    documentId
+    name
+    averagePrice
+  }
+}
+```
+
 </ApiCall>
 
 ### Fetch a document in a specific locale {#locale-fetch}
@@ -5483,6 +5576,42 @@ The service is now available through the `strapi.service('api::restaurant.restau
 When a new [content-type](/cms/backend-customization/models.md#content-types) is created, Strapi builds a generic service with placeholder code, ready to be customized.
 :::
 
+### Core service methods
+
+Services generated with `createCoreService` inherit methods that wrap the [Document Service API](/cms/api/document-service). The available methods depend on the content-type:
+
+#### Collection types
+
+| Method | Description |
+| --- | --- |
+| `find(params)` | Wrapper for [`findMany`](/cms/api/document-service#findmany); returns a paginated list of documents. |
+| `findOne(documentId, params)` | Wrapper for [`findOne`](/cms/api/document-service#findone); returns a single document by its `documentId`. |
+| `create(params)` | Wrapper for [`create`](/cms/api/document-service#create); creates a new document. |
+| `update(documentId, params)` | Wrapper for [`update`](/cms/api/document-service#update); updates an existing document. |
+| `delete(documentId, params)` | Wrapper for [`delete`](/cms/api/document-service#delete); removes a document. |
+| `count(params)` | Wrapper for [`count`](/cms/api/document-service#count); returns the number of matching documents. |
+| `publish(documentId, params)` | Wrapper for [`publish`](/cms/api/document-service#publish); publishes a draft document. |
+| `unpublish(documentId, params)` | Wrapper for [`unpublish`](/cms/api/document-service#unpublish); unpublishes a document. |
+| `discardDraft(documentId, params)` | Wrapper for [`discardDraft`](/cms/api/document-service#discarddraft); deletes the draft copy. |
+
+#### Single types
+
+| Method | Description |
+| --- | --- |
+| `find(params)` | Returns the single document (uses [`findFirst`](/cms/api/document-service#findfirst) internally). |
+| `createOrUpdate({ data, ...params })` | Creates the document if it doesn't exist or updates it (uses [`update`](/cms/api/document-service#update)). |
+| `delete(params)` | Deletes the document (uses [`delete`](/cms/api/document-service#delete)). |
+| `count(params)` | Counts documents matching the filters (uses [`count`](/cms/api/document-service#count)). |
+| `publish(params)` | Publishes a draft document (uses [`publish`](/cms/api/document-service#publish)). |
+| `unpublish(params)` | Unpublishes the document (uses [`unpublish`](/cms/api/document-service#unpublish)). |
+| `discardDraft(params)` | Deletes the draft copy (uses [`discardDraft`](/cms/api/document-service#discarddraft)). |
+
+#### Parameters and default behavior
+
+Core service methods accept the same parameters as their underlying [Document Service API](/cms/api/document-service) calls, such as `fields`, `filters`, `sort`, `pagination`, `populate`, `locale`, and `status`. When no `status` is provided, Strapi automatically sets `status: 'published'` so only published content is returned. To query draft documents, explicitly pass `status: 'draft'` or another value supported by the Document Service.
+
+The `createCoreService` factory also exposes a `getFetchParams(params)` helper that converts a controller's query object into the parameter format expected by these methods. This helper can be reused when overriding core methods to forward sanitized parameters to `strapi.documents()`.
+
 ### Extending core services
 
 Core services are created for each content-type and could be used by [controllers](/cms/backend-customization/controllers.md) to execute reusable logic through a Strapi project. Core services can be customized to implement your own logic. The following code examples should help you get started.
@@ -6767,13 +6896,9 @@ Developers can use the following APIs to interact with future flags:
 
 ## Available future flags
 
-There are currently no available future flags. This section will be updated once new experimental features are available for testing.
-
-<!-- The following future flags are currently available and can be used in the `future` object of the `config/features` configuration file:
-
-| Property name     | Related feature                              | Suggested environment variable name       |
-| ----------------- | -------------------------------------------- | ----------------------------------------- |
-| `contentReleasesScheduling` | [Releases Scheduling](/cms/features/releases#usage) | `STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING` | -->
+| Property name | Related feature | Suggested environment variable name |
+| ------------- | --------------- | ---------------------------------- |
+| `experimental_firstPublishedAt` | [Draft & Publish](/cms/features/draft-and-publish#recording-the-first-publication-date) | `STRAPI_FUTURE_EXPERIMENTAL_FIRST_PUBLISHED_AT` |
 
 
 
@@ -8881,6 +9006,7 @@ You can click on the description of any breaking change in the following tables
 | [Some attributes and content-types names are reserved by Strapi](/cms/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved) | Yes | No |
 | [Upload a file at entry creation is no longer possible](/cms/migration/v4-to-v5/breaking-changes/no-upload-at-entry-creation) | Yes | No |
 | [Components and dynamic zones should be populated using the detailed population strategy](/cms/migration/v4-to-v5/breaking-changes/no-shared-population-strategy-components-dynamic-zones) | Yes | No |
+| [Repeatable components can't be updated with the Document Service API](/cms/migration/v4-to-v5/breaking-changes/do-not-update-repeatable-components-with-document-service-api) | Yes | No |
 
 
 
@@ -8948,13 +9074,10 @@ Your Strapi v4 application is already running on the latest v4 minor and patch v
 
 Before getting into the upgrade process itself, take the following precautions:
 
-1. **Backup your database**.
-
-  If you are using SQLite with the default configuration (the default database provided with Strapi), your database file is named `data.db` and is located in the `.tmp/` folder at the root of your Strapi application.
-  
-  If you are using another type of database, please refer to their official documentation (see  and ).
-
-  If your project is hosted on Strapi Cloud, you can manually [create a backup](/cloud/projects/settings#creating-a-manual-backup).
+1. **Backup your database**:
+    * If you are using SQLite with the default configuration (the default database provided with Strapi), your database file is named `data.db` and is located in the `.tmp/` folder at the root of your Strapi application.
+    * If you are using another type of database, please refer to their official documentation (see  and ).
+    * If your project is hosted on Strapi Cloud, you can manually [create a backup](/cloud/projects/settings#creating-a-manual-backup).
 2. **Backup your code**:
     * If your code is versioned with git, create a new dedicated branch to run the migration.
     * If your code is _not_ versioned with git, create a backup of your working Strapi v4 code and store it in a safe place.
@@ -10658,7 +10781,7 @@ The [destroy](/cms/configurations/functions#destroy) lifecycle function is calle
 Once defined, the configuration can be accessed:
 
 - with `strapi.plugin('plugin-name').config('some-key')` for a specific configuration property,
-- or with `strapi.config.get('plugin.plugin-name')` for the whole configuration object.
+- or with `strapi.config.get('plugin::plugin-name')` for the whole configuration object.
 
 :::tip
 Run `yarn strapi console` or `npm run strapi console` to access the strapi object in a live console.
diff --git a/docusaurus/yarn.lock b/docusaurus/yarn.lock
index 7a4cd87e8f..0299e8f8b0 100644
--- a/docusaurus/yarn.lock
+++ b/docusaurus/yarn.lock
@@ -1235,6 +1235,11 @@
   dependencies:
     regenerator-runtime "^0.14.0"
 
+"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.26.0":
+  version "7.27.4"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.4.tgz#a91ec580e6c00c67118127777c316dfd5a5a6abf"
+  integrity sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==
+
 "@babel/template@^7.24.7", "@babel/template@^7.25.0":
   version "7.25.0"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a"
@@ -1753,6 +1758,33 @@
     utility-types "^3.10.0"
     webpack "^5.88.1"
 
+"@floating-ui/core@^1.7.1":
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.1.tgz#1abc6b157d4a936174f9dbd078278c3a81c8bc6b"
+  integrity sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==
+  dependencies:
+    "@floating-ui/utils" "^0.2.9"
+
+"@floating-ui/dom@^1.0.0":
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.1.tgz#76a4e3cbf7a08edf40c34711cf64e0cc8053d912"
+  integrity sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==
+  dependencies:
+    "@floating-ui/core" "^1.7.1"
+    "@floating-ui/utils" "^0.2.9"
+
+"@floating-ui/react-dom@^2.0.0":
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.3.tgz#1dea32e59514a67d182f0c89c8975ff959774b61"
+  integrity sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==
+  dependencies:
+    "@floating-ui/dom" "^1.0.0"
+
+"@floating-ui/utils@^0.2.9":
+  version "0.2.9"
+  resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
+  integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
+
 "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
   version "9.3.0"
   resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -1765,6 +1797,95 @@
   dependencies:
     "@hapi/hoek" "^9.0.0"
 
+"@inkeep/cxkit-color-mode@0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-color-mode/-/cxkit-color-mode-0.5.82.tgz#fc53fe2b3b0c90e03bdebbd523c4d83415315f14"
+  integrity sha512-lmN+unmz3cC3BHwSA7bA3LMUMN1y5Gcod2qT7ufPAuMAXRDqnqOhbAGPDQiB7Ryac825muWdAQjTVHWBq2b4wg==
+
+"@inkeep/cxkit-primitives@0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-primitives/-/cxkit-primitives-0.5.82.tgz#97d7eb0233e633d9e0e646acbe0ccee9a8104f62"
+  integrity sha512-kX1O1NB1dkM4O5vJrA0FcojUBVnh/SpGSK59iOXdTtspMYCz+cOwaU452oyCAdlbjJye7mhH/jWZ83Jwo2w6YQ==
+  dependencies:
+    "@inkeep/cxkit-color-mode" "0.5.82"
+    "@inkeep/cxkit-theme" "0.5.82"
+    "@inkeep/cxkit-types" "0.5.82"
+    "@radix-ui/primitive" "^1.1.1"
+    "@radix-ui/react-avatar" "1.1.2"
+    "@radix-ui/react-checkbox" "1.1.3"
+    "@radix-ui/react-compose-refs" "^1.1.1"
+    "@radix-ui/react-context" "^1.1.1"
+    "@radix-ui/react-dismissable-layer" "^1.1.5"
+    "@radix-ui/react-focus-guards" "^1.1.1"
+    "@radix-ui/react-focus-scope" "^1.1.2"
+    "@radix-ui/react-hover-card" "^1.1.6"
+    "@radix-ui/react-id" "^1.1.0"
+    "@radix-ui/react-popover" "1.1.6"
+    "@radix-ui/react-portal" "^1.1.4"
+    "@radix-ui/react-presence" "^1.1.2"
+    "@radix-ui/react-primitive" "^2.0.2"
+    "@radix-ui/react-scroll-area" "1.2.2"
+    "@radix-ui/react-select" "^2.1.7"
+    "@radix-ui/react-slot" "^1.2.0"
+    "@radix-ui/react-tabs" "^1.1.4"
+    "@radix-ui/react-tooltip" "1.1.6"
+    "@radix-ui/react-use-callback-ref" "^1.1.0"
+    "@radix-ui/react-use-controllable-state" "^1.1.0"
+    "@zag-js/focus-trap" "^1.7.0"
+    "@zag-js/presence" "^1.13.1"
+    "@zag-js/react" "^1.13.1"
+    altcha-lib "^1.2.0"
+    aria-hidden "^1.2.4"
+    dequal "^2.0.3"
+    humps "2.0.1"
+    lucide-react "^0.503.0"
+    marked "^15.0.9"
+    merge-anything "5.1.7"
+    openai "4.78.1"
+    prism-react-renderer "2.4.1"
+    react-error-boundary "^6.0.0"
+    react-hook-form "7.54.2"
+    react-markdown "9.0.3"
+    react-remove-scroll "2.6.3"
+    react-svg "16.3.0"
+    react-textarea-autosize "8.5.7"
+    rehype-raw "7.0.0"
+    remark-gfm "^4.0.1"
+    unist-util-visit "^5.0.0"
+    use-sync-external-store "^1.4.0"
+
+"@inkeep/cxkit-react@^0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-react/-/cxkit-react-0.5.82.tgz#5e7015940a184bf469e887e1fbda18c063ff8274"
+  integrity sha512-inWnQ0b/fTv3e7VJ+SOF7cc7eOmT4ToLKSBLdz4ZTApf3p1RVxmZzf9Kk90kUBxpRBHhX7k8NJRnZ9QH458+tA==
+  dependencies:
+    "@inkeep/cxkit-styled" "0.5.82"
+    "@radix-ui/react-use-controllable-state" "^1.1.0"
+    lucide-react "^0.503.0"
+
+"@inkeep/cxkit-styled@0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-styled/-/cxkit-styled-0.5.82.tgz#842e85ee228e253c81fb55f91c54ae23ca6b453c"
+  integrity sha512-Ng28T10gEm7A78x1by8a92FkTmR1Gy2lwnJ+ilQZH5A48VTUTnkIYXA6QoEzdDZ3DPdpqyW0svCUS4kaRpezdQ==
+  dependencies:
+    "@inkeep/cxkit-primitives" "0.5.82"
+    class-variance-authority "0.7.1"
+    clsx "2.1.1"
+    merge-anything "5.1.7"
+    tailwind-merge "2.6.0"
+
+"@inkeep/cxkit-theme@0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-theme/-/cxkit-theme-0.5.82.tgz#7c19ef86b95777bd5bc1df4dc5cf462da9318976"
+  integrity sha512-IkPgqOAfWYV4V0BO13m6l4uztq/D8J4HpqeO8bT9D85YiPanp+GwbJyo8nIHpUB2u4LnrF2U31GbyhokyA5T7w==
+  dependencies:
+    colorjs.io "0.5.2"
+
+"@inkeep/cxkit-types@0.5.82":
+  version "0.5.82"
+  resolved "https://registry.yarnpkg.com/@inkeep/cxkit-types/-/cxkit-types-0.5.82.tgz#197ecfe112ce9b2aa3384d5d65a446d1dd1b0ed3"
+  integrity sha512-DmiLrWN3egMN8t1vB5qXmDVFoyFuWFDI4h8pl27A0usdeUl8+IMbPFO3EbJbsUwx7p+SgVqtltW8MUCCBDJEBg==
+
 "@isaacs/cliui@^8.0.2":
   version "8.0.2"
   resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -2033,6 +2154,559 @@
   resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73"
   integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==
 
+"@radix-ui/number@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46"
+  integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==
+
+"@radix-ui/number@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090"
+  integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==
+
+"@radix-ui/primitive@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3"
+  integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==
+
+"@radix-ui/primitive@1.1.2", "@radix-ui/primitive@^1.1.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65"
+  integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==
+
+"@radix-ui/react-arrow@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz#2103721933a8bfc6e53bbfbdc1aaad5fc8ba0dd7"
+  integrity sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==
+  dependencies:
+    "@radix-ui/react-primitive" "2.0.1"
+
+"@radix-ui/react-arrow@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz#30c0d574d7bb10eed55cd7007b92d38b03c6b2ab"
+  integrity sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==
+  dependencies:
+    "@radix-ui/react-primitive" "2.0.2"
+
+"@radix-ui/react-arrow@1.1.7":
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09"
+  integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==
+  dependencies:
+    "@radix-ui/react-primitive" "2.1.3"
+
+"@radix-ui/react-avatar@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz#24af4c66bb5271460a4a6b74c4f4f9d4789d3d90"
+  integrity sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig==
+  dependencies:
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-checkbox@1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.1.3.tgz#0e2ab913fddf3c88603625f7a9457d73882c8a32"
+  integrity sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==
+  dependencies:
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-presence" "1.1.2"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-controllable-state" "1.1.0"
+    "@radix-ui/react-use-previous" "1.1.0"
+    "@radix-ui/react-use-size" "1.1.0"
+
+"@radix-ui/react-collection@1.1.7":
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec"
+  integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-slot" "1.2.3"
+
+"@radix-ui/react-compose-refs@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec"
+  integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==
+
+"@radix-ui/react-compose-refs@1.1.2", "@radix-ui/react-compose-refs@^1.1.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30"
+  integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
+
+"@radix-ui/react-context@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a"
+  integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==
+
+"@radix-ui/react-context@1.1.2", "@radix-ui/react-context@^1.1.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36"
+  integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==
+
+"@radix-ui/react-direction@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc"
+  integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==
+
+"@radix-ui/react-direction@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14"
+  integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==
+
+"@radix-ui/react-dismissable-layer@1.1.10", "@radix-ui/react-dismissable-layer@^1.1.5":
+  version "1.1.10"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz#429b9bada3672c6895a5d6a642aca6ecaf4f18c3"
+  integrity sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==
+  dependencies:
+    "@radix-ui/primitive" "1.1.2"
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+    "@radix-ui/react-use-escape-keydown" "1.1.1"
+
+"@radix-ui/react-dismissable-layer@1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz#4ee0f0f82d53bf5bd9db21665799bb0d1bad5ed8"
+  integrity sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==
+  dependencies:
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-escape-keydown" "1.1.0"
+
+"@radix-ui/react-dismissable-layer@1.1.5":
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz#96dde2be078c694a621e55e047406c58cd5fe774"
+  integrity sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==
+  dependencies:
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.2"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-escape-keydown" "1.1.0"
+
+"@radix-ui/react-focus-guards@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe"
+  integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==
+
+"@radix-ui/react-focus-guards@1.1.2", "@radix-ui/react-focus-guards@^1.1.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed"
+  integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==
+
+"@radix-ui/react-focus-scope@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz#c0a4519cd95c772606a82fc5b96226cd7fdd2602"
+  integrity sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.2"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+
+"@radix-ui/react-focus-scope@1.1.7", "@radix-ui/react-focus-scope@^1.1.2":
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d"
+  integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+
+"@radix-ui/react-hover-card@^1.1.6":
+  version "1.1.14"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz#a557cda6470e214e744e46ede839496e8b291843"
+  integrity sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==
+  dependencies:
+    "@radix-ui/primitive" "1.1.2"
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-dismissable-layer" "1.1.10"
+    "@radix-ui/react-popper" "1.2.7"
+    "@radix-ui/react-portal" "1.1.9"
+    "@radix-ui/react-presence" "1.1.4"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-controllable-state" "1.2.2"
+
+"@radix-ui/react-id@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed"
+  integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==
+  dependencies:
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-id@1.1.1", "@radix-ui/react-id@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7"
+  integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==
+  dependencies:
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-popover@1.1.6":
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.6.tgz#699634dbc7899429f657bb590d71fb3ca0904087"
+  integrity sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==
+  dependencies:
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-dismissable-layer" "1.1.5"
+    "@radix-ui/react-focus-guards" "1.1.1"
+    "@radix-ui/react-focus-scope" "1.1.2"
+    "@radix-ui/react-id" "1.1.0"
+    "@radix-ui/react-popper" "1.2.2"
+    "@radix-ui/react-portal" "1.1.4"
+    "@radix-ui/react-presence" "1.1.2"
+    "@radix-ui/react-primitive" "2.0.2"
+    "@radix-ui/react-slot" "1.1.2"
+    "@radix-ui/react-use-controllable-state" "1.1.0"
+    aria-hidden "^1.2.4"
+    react-remove-scroll "^2.6.3"
+
+"@radix-ui/react-popper@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.1.tgz#2fc66cfc34f95f00d858924e3bee54beae2dff0a"
+  integrity sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==
+  dependencies:
+    "@floating-ui/react-dom" "^2.0.0"
+    "@radix-ui/react-arrow" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+    "@radix-ui/react-use-rect" "1.1.0"
+    "@radix-ui/react-use-size" "1.1.0"
+    "@radix-ui/rect" "1.1.0"
+
+"@radix-ui/react-popper@1.2.2":
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.2.tgz#d2e1ee5a9b24419c5936a1b7f6f472b7b412b029"
+  integrity sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==
+  dependencies:
+    "@floating-ui/react-dom" "^2.0.0"
+    "@radix-ui/react-arrow" "1.1.2"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-primitive" "2.0.2"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+    "@radix-ui/react-use-rect" "1.1.0"
+    "@radix-ui/react-use-size" "1.1.0"
+    "@radix-ui/rect" "1.1.0"
+
+"@radix-ui/react-popper@1.2.7":
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.7.tgz#531cf2eebb3d3270d58f7d8136e4517646429978"
+  integrity sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==
+  dependencies:
+    "@floating-ui/react-dom" "^2.0.0"
+    "@radix-ui/react-arrow" "1.1.7"
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+    "@radix-ui/react-use-rect" "1.1.1"
+    "@radix-ui/react-use-size" "1.1.1"
+    "@radix-ui/rect" "1.1.1"
+
+"@radix-ui/react-portal@1.1.3":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.3.tgz#b0ea5141103a1671b715481b13440763d2ac4440"
+  integrity sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==
+  dependencies:
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-portal@1.1.4":
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.4.tgz#ff5401ff63c8a825c46eea96d3aef66074b8c0c8"
+  integrity sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==
+  dependencies:
+    "@radix-ui/react-primitive" "2.0.2"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-portal@1.1.9", "@radix-ui/react-portal@^1.1.4":
+  version "1.1.9"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472"
+  integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==
+  dependencies:
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-presence@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc"
+  integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-presence@1.1.4", "@radix-ui/react-presence@^1.1.2":
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced"
+  integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-primitive@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz#6d9efc550f7520135366f333d1e820cf225fad9e"
+  integrity sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==
+  dependencies:
+    "@radix-ui/react-slot" "1.1.1"
+
+"@radix-ui/react-primitive@2.0.2":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz#ac8b7854d87b0d7af388d058268d9a7eb64ca8ef"
+  integrity sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==
+  dependencies:
+    "@radix-ui/react-slot" "1.1.2"
+
+"@radix-ui/react-primitive@2.1.3", "@radix-ui/react-primitive@^2.0.2":
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc"
+  integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==
+  dependencies:
+    "@radix-ui/react-slot" "1.2.3"
+
+"@radix-ui/react-roving-focus@1.1.10":
+  version "1.1.10"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz#46030496d2a490c4979d29a7e1252465e51e4b0b"
+  integrity sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==
+  dependencies:
+    "@radix-ui/primitive" "1.1.2"
+    "@radix-ui/react-collection" "1.1.7"
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-direction" "1.1.1"
+    "@radix-ui/react-id" "1.1.1"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+    "@radix-ui/react-use-controllable-state" "1.2.2"
+
+"@radix-ui/react-scroll-area@1.2.2":
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz#28e34fd4d83e9de5d987c5e8914a7bd8be9546a5"
+  integrity sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==
+  dependencies:
+    "@radix-ui/number" "1.1.0"
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-direction" "1.1.0"
+    "@radix-ui/react-presence" "1.1.2"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-select@^2.1.7":
+  version "2.2.5"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.2.5.tgz#9e2fa5b8f4cc99b86ef5bba3cb9b73828afb51f0"
+  integrity sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==
+  dependencies:
+    "@radix-ui/number" "1.1.1"
+    "@radix-ui/primitive" "1.1.2"
+    "@radix-ui/react-collection" "1.1.7"
+    "@radix-ui/react-compose-refs" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-direction" "1.1.1"
+    "@radix-ui/react-dismissable-layer" "1.1.10"
+    "@radix-ui/react-focus-guards" "1.1.2"
+    "@radix-ui/react-focus-scope" "1.1.7"
+    "@radix-ui/react-id" "1.1.1"
+    "@radix-ui/react-popper" "1.2.7"
+    "@radix-ui/react-portal" "1.1.9"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-slot" "1.2.3"
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+    "@radix-ui/react-use-controllable-state" "1.2.2"
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+    "@radix-ui/react-use-previous" "1.1.1"
+    "@radix-ui/react-visually-hidden" "1.2.3"
+    aria-hidden "^1.2.4"
+    react-remove-scroll "^2.6.3"
+
+"@radix-ui/react-slot@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3"
+  integrity sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.1"
+
+"@radix-ui/react-slot@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.2.tgz#daffff7b2bfe99ade63b5168407680b93c00e1c6"
+  integrity sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.1"
+
+"@radix-ui/react-slot@1.2.3", "@radix-ui/react-slot@^1.2.0":
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1"
+  integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==
+  dependencies:
+    "@radix-ui/react-compose-refs" "1.1.2"
+
+"@radix-ui/react-tabs@^1.1.4":
+  version "1.1.12"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz#99b3522c73db9263f429a6d0f5a9acb88df3b129"
+  integrity sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==
+  dependencies:
+    "@radix-ui/primitive" "1.1.2"
+    "@radix-ui/react-context" "1.1.2"
+    "@radix-ui/react-direction" "1.1.1"
+    "@radix-ui/react-id" "1.1.1"
+    "@radix-ui/react-presence" "1.1.4"
+    "@radix-ui/react-primitive" "2.1.3"
+    "@radix-ui/react-roving-focus" "1.1.10"
+    "@radix-ui/react-use-controllable-state" "1.2.2"
+
+"@radix-ui/react-tooltip@1.1.6":
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.6.tgz#eab98e9a5c876ef0abfae3cfeee229870528ed06"
+  integrity sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==
+  dependencies:
+    "@radix-ui/primitive" "1.1.1"
+    "@radix-ui/react-compose-refs" "1.1.1"
+    "@radix-ui/react-context" "1.1.1"
+    "@radix-ui/react-dismissable-layer" "1.1.3"
+    "@radix-ui/react-id" "1.1.0"
+    "@radix-ui/react-popper" "1.2.1"
+    "@radix-ui/react-portal" "1.1.3"
+    "@radix-ui/react-presence" "1.1.2"
+    "@radix-ui/react-primitive" "2.0.1"
+    "@radix-ui/react-slot" "1.1.1"
+    "@radix-ui/react-use-controllable-state" "1.1.0"
+    "@radix-ui/react-visually-hidden" "1.1.1"
+
+"@radix-ui/react-use-callback-ref@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1"
+  integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==
+
+"@radix-ui/react-use-callback-ref@1.1.1", "@radix-ui/react-use-callback-ref@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40"
+  integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==
+
+"@radix-ui/react-use-controllable-state@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0"
+  integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==
+  dependencies:
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+
+"@radix-ui/react-use-controllable-state@1.2.2", "@radix-ui/react-use-controllable-state@^1.1.0":
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190"
+  integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==
+  dependencies:
+    "@radix-ui/react-use-effect-event" "0.0.2"
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-use-effect-event@0.0.2":
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907"
+  integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==
+  dependencies:
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-use-escape-keydown@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754"
+  integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==
+  dependencies:
+    "@radix-ui/react-use-callback-ref" "1.1.0"
+
+"@radix-ui/react-use-escape-keydown@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29"
+  integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==
+  dependencies:
+    "@radix-ui/react-use-callback-ref" "1.1.1"
+
+"@radix-ui/react-use-layout-effect@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27"
+  integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==
+
+"@radix-ui/react-use-layout-effect@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e"
+  integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==
+
+"@radix-ui/react-use-previous@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c"
+  integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==
+
+"@radix-ui/react-use-previous@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz#1a1ad5568973d24051ed0af687766f6c7cb9b5b5"
+  integrity sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==
+
+"@radix-ui/react-use-rect@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88"
+  integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==
+  dependencies:
+    "@radix-ui/rect" "1.1.0"
+
+"@radix-ui/react-use-rect@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152"
+  integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==
+  dependencies:
+    "@radix-ui/rect" "1.1.1"
+
+"@radix-ui/react-use-size@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b"
+  integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==
+  dependencies:
+    "@radix-ui/react-use-layout-effect" "1.1.0"
+
+"@radix-ui/react-use-size@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37"
+  integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==
+  dependencies:
+    "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-visually-hidden@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz#f7b48c1af50dfdc366e92726aee6d591996c5752"
+  integrity sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==
+  dependencies:
+    "@radix-ui/react-primitive" "2.0.1"
+
+"@radix-ui/react-visually-hidden@1.2.3":
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz#a8c38c8607735dc9f05c32f87ab0f9c2b109efbf"
+  integrity sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==
+  dependencies:
+    "@radix-ui/react-primitive" "2.1.3"
+
+"@radix-ui/rect@1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438"
+  integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==
+
+"@radix-ui/rect@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb"
+  integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==
+
 "@sideway/address@^4.1.5":
   version "4.1.5"
   resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -2187,6 +2861,15 @@
   dependencies:
     defer-to-connect "^2.0.1"
 
+"@tanem/svg-injector@^10.1.68":
+  version "10.1.68"
+  resolved "https://registry.yarnpkg.com/@tanem/svg-injector/-/svg-injector-10.1.68.tgz#0bd08da3c4184b055a6fe16909037c96f49e3cd1"
+  integrity sha512-UkJajeR44u73ujtr5GVSbIlELDWD/mzjqWe54YMK61ljKxFcJoPd9RBSaO7xj02ISCWUqJW99GjrS+sVF0UnrA==
+  dependencies:
+    "@babel/runtime" "^7.23.2"
+    content-type "^1.0.5"
+    tslib "^2.6.2"
+
 "@trysound/sax@0.2.0":
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
@@ -2397,6 +3080,14 @@
   resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433"
   integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
 
+"@types/node-fetch@^2.6.4":
+  version "2.6.12"
+  resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03"
+  integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==
+  dependencies:
+    "@types/node" "*"
+    form-data "^4.0.0"
+
 "@types/node-forge@^1.3.0":
   version "1.3.11"
   resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
@@ -2416,6 +3107,13 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
   integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
 
+"@types/node@^18.11.18":
+  version "18.19.110"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.110.tgz#33e25fa1796ba5023cee137f24f15d332d2d45d1"
+  integrity sha512-WW2o4gTmREtSnqKty9nhqF/vA0GKd0V/rbC0OyjSk9Bz6bzlsXKT+i7WDdS/a0z74rfT2PO4dArVCSnapNLA5Q==
+  dependencies:
+    undici-types "~5.26.4"
+
 "@types/parse-json@^4.0.0":
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
@@ -2431,6 +3129,11 @@
   resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451"
   integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==
 
+"@types/prop-types@^15.7.14":
+  version "15.7.14"
+  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2"
+  integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
+
 "@types/qs@*":
   version "6.9.16"
   resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794"
@@ -2683,6 +3386,73 @@
   resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
   integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
 
+"@zag-js/core@1.14.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/core/-/core-1.14.0.tgz#77f44a38ed6526792e9bf0e44bbeb22b4415d56b"
+  integrity sha512-CzL0sxdyOjEzqaWUDC07CyC9Epzc05gstjaAr1/cjD+ez8qdPtoNb5WhWocKvpVBr8JvGau0kNdkhgUeujK/+g==
+  dependencies:
+    "@zag-js/dom-query" "1.14.0"
+    "@zag-js/utils" "1.14.0"
+
+"@zag-js/dom-query@1.14.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/dom-query/-/dom-query-1.14.0.tgz#cd9c69b69bfa6607c7b1a26065456d12328056f4"
+  integrity sha512-+bAAtQY4cOMf9jYxLhgw8nO6i8jpPLplL1sgf0llyspVH6pJKIQMNDMbKD65XSzjcNEbOyzkP5hc7OeHNFw70A==
+  dependencies:
+    "@zag-js/types" "1.14.0"
+
+"@zag-js/focus-trap@^1.7.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/focus-trap/-/focus-trap-1.14.0.tgz#c36a7d82326d2972d8cc7552a576cfca753345da"
+  integrity sha512-xCoWijx6g2cCOszoAc1p+VDumXKb+FoBa6omm1QqwDzbZgTPKkGWdTtGPFySqE3NgYCv+wXnoVUl688PJTKC8g==
+  dependencies:
+    "@zag-js/dom-query" "1.14.0"
+
+"@zag-js/presence@^1.13.1":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/presence/-/presence-1.14.0.tgz#1006ad9e0d3bc0f2644c561a64cc8adacef642fc"
+  integrity sha512-1e5TNrSI5EkADmgV1Od5yc1DXgEcqPE6fihd9BQf6tmSXegTnE7U1EFdgPFye+PelJvtEpMkTje69wCaEIn4AA==
+  dependencies:
+    "@zag-js/core" "1.14.0"
+    "@zag-js/dom-query" "1.14.0"
+    "@zag-js/types" "1.14.0"
+
+"@zag-js/react@^1.13.1":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/react/-/react-1.14.0.tgz#a33900086f945659bcfdd02bf852c6a31c85faf6"
+  integrity sha512-jeMxMlvYWCFVuQ8Hb+QORQiuKkgAnkrDRpLZKbBlCRTghjX9bcsrun9D+ebCDBtD3xZdG+fHc6Lpz6wmgWWorA==
+  dependencies:
+    "@zag-js/core" "1.14.0"
+    "@zag-js/store" "1.14.0"
+    "@zag-js/types" "1.14.0"
+    "@zag-js/utils" "1.14.0"
+
+"@zag-js/store@1.14.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/store/-/store-1.14.0.tgz#92d72c8beebce661de8837d64b6de64da9a310e1"
+  integrity sha512-85XniF5KZjWBMQAB2FzjBYZKdqnG8OCDu33bS6kSDnbhu49Z3I3D9GvMOsODNo4CwJXPSOV0yzRtOiEscMO4zQ==
+  dependencies:
+    proxy-compare "3.0.1"
+
+"@zag-js/types@1.14.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/types/-/types-1.14.0.tgz#d1862fd31f04249134f578442773f01f111ec79e"
+  integrity sha512-7ijOGUMOmTQnOMOvVb4c24F5pWJogXf6tFud2/vFslpiPEzI0Uo3Kvd6ZMFrCifw43ZNpwP2BfpYqoqfnIjvEg==
+  dependencies:
+    csstype "3.1.3"
+
+"@zag-js/utils@1.14.0":
+  version "1.14.0"
+  resolved "https://registry.yarnpkg.com/@zag-js/utils/-/utils-1.14.0.tgz#91ad847c6402e9a962ce5cd1345c3c1a80a7896a"
+  integrity sha512-F0RoA/dJYUxRaTGdhi1LpHqHXnBjLn7ww9UGIzCJ40r7EVVV6jvm6HwC5g19ZbRGYMxR29LO/ipb9CWfR9my4w==
+
+abort-controller@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+  integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+  dependencies:
+    event-target-shim "^5.0.0"
+
 accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
   version "1.3.8"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -2733,6 +3503,13 @@ address@^1.0.1, address@^1.1.2:
   resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
   integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
 
+agentkeepalive@^4.2.1:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a"
+  integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==
+  dependencies:
+    humanize-ms "^1.2.1"
+
 aggregate-error@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -2808,6 +3585,11 @@ algoliasearch@^4.18.0, algoliasearch@^4.19.1:
     "@algolia/requester-node-http" "4.24.0"
     "@algolia/transporter" "4.24.0"
 
+altcha-lib@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/altcha-lib/-/altcha-lib-1.2.0.tgz#a8b874ace261751473686adc5cc210be7449ba0d"
+  integrity sha512-S5WF8QLNRaM1hvK24XPhOLfu9is2EBCvH7+nv50sM5CaIdUCqQCd0WV/qm/ZZFGTdSoKLuDp+IapZxBLvC+SNg==
+
 ansi-align@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
@@ -2879,6 +3661,13 @@ argparse@^2.0.1:
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
   integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
+aria-hidden@^1.2.4:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a"
+  integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==
+  dependencies:
+    tslib "^2.0.0"
+
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -2894,6 +3683,11 @@ astring@^1.8.0:
   resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef"
   integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==
 
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
 at-least-node@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -3099,6 +3893,14 @@ cacheable-request@^10.2.8:
     normalize-url "^8.0.0"
     responselike "^3.0.0"
 
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+  integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+  dependencies:
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+
 call-bind@^1.0.5, call-bind@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
@@ -3257,6 +4059,13 @@ ci-info@^3.2.0:
   resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
   integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
 
+class-variance-authority@0.7.1:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787"
+  integrity sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==
+  dependencies:
+    clsx "^2.1.1"
+
 classnames@^2.5.1:
   version "2.5.1"
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
@@ -3297,16 +4106,16 @@ clone-deep@^4.0.1:
     kind-of "^6.0.2"
     shallow-clone "^3.0.0"
 
+clsx@2.1.1, clsx@^2.0.0, clsx@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
+  integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
 clsx@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
   integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
 
-clsx@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
-  integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
-
 collapse-white-space@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca"
@@ -3346,11 +4155,23 @@ colorette@^2.0.10:
   resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
   integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
 
+colorjs.io@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/colorjs.io/-/colorjs.io-0.5.2.tgz#63b20139b007591ebc3359932bef84628eb3fcef"
+  integrity sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==
+
 combine-promises@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a"
   integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==
 
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
 comma-separated-tokens@^2.0.0:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
@@ -3457,7 +4278,7 @@ content-disposition@0.5.4:
   dependencies:
     safe-buffer "5.2.1"
 
-content-type@~1.0.4, content-type@~1.0.5:
+content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
   integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
@@ -3708,7 +4529,7 @@ csso@^5.0.5:
   dependencies:
     css-tree "~2.2.0"
 
-csstype@^3.0.2:
+csstype@3.1.3, csstype@^3.0.2:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
   integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
@@ -4108,6 +4929,11 @@ delaunator@5:
   dependencies:
     robust-predicates "^3.0.2"
 
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
 depd@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -4118,7 +4944,7 @@ depd@~1.1.2:
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
   integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
 
-dequal@^2.0.0:
+dequal@^2.0.0, dequal@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
   integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
@@ -4133,6 +4959,11 @@ detect-libc@^1.0.3:
   resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
   integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
 
+detect-node-es@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
+  integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
+
 detect-node@^2.0.4:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
@@ -4307,6 +5138,15 @@ dotenv@^6.2.0:
   resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
   integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
 
+dunder-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+  integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+  dependencies:
+    call-bind-apply-helpers "^1.0.1"
+    es-errors "^1.3.0"
+    gopd "^1.2.0"
+
 duplexer@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
@@ -4423,6 +5263,11 @@ es-define-property@^1.0.0:
   dependencies:
     get-intrinsic "^1.2.4"
 
+es-define-property@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+  integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
 es-errors@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
@@ -4433,6 +5278,23 @@ es-module-lexer@^1.2.1:
   resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78"
   integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==
 
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+  integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+  dependencies:
+    es-errors "^1.3.0"
+
+es-set-tostringtag@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+  integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+  dependencies:
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.6"
+    has-tostringtag "^1.0.2"
+    hasown "^2.0.2"
+
 escalade@^3.1.1, escalade@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
@@ -4569,6 +5431,11 @@ eval@^0.1.8:
     "@types/node" "*"
     require-like ">= 0.1.1"
 
+event-target-shim@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+  integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
 eventemitter3@^4.0.0:
   version "4.0.7"
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@@ -4805,16 +5672,39 @@ fork-ts-checker-webpack-plugin@^6.5.0:
     semver "^7.3.2"
     tapable "^1.0.0"
 
+form-data-encoder@1.7.2:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
+  integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
+
 form-data-encoder@^2.1.2:
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
   integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
 
+form-data@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c"
+  integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    es-set-tostringtag "^2.1.0"
+    mime-types "^2.1.12"
+
 format@^0.2.0:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
   integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==
 
+formdata-node@^4.3.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
+  integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
+  dependencies:
+    node-domexception "1.0.0"
+    web-streams-polyfill "4.0.0-beta.3"
+
 forwarded@0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -4894,11 +5784,40 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
     has-symbols "^1.0.3"
     hasown "^2.0.0"
 
+get-intrinsic@^1.2.6:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+  integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    es-define-property "^1.0.1"
+    es-errors "^1.3.0"
+    es-object-atoms "^1.1.1"
+    function-bind "^1.1.2"
+    get-proto "^1.0.1"
+    gopd "^1.2.0"
+    has-symbols "^1.1.0"
+    hasown "^2.0.2"
+    math-intrinsics "^1.1.0"
+
+get-nonce@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
+  integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
+
 get-own-enumerable-property-symbols@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
   integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
 
+get-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+  integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+  dependencies:
+    dunder-proto "^1.0.1"
+    es-object-atoms "^1.0.0"
+
 get-stream@^6.0.0, get-stream@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -5010,6 +5929,11 @@ gopd@^1.0.1:
   dependencies:
     get-intrinsic "^1.1.3"
 
+gopd@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+  integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
 got@^12.1.0:
   version "12.6.1"
   resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549"
@@ -5086,6 +6010,18 @@ has-symbols@^1.0.3:
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
   integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
 
+has-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+  integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+  integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+  dependencies:
+    has-symbols "^1.0.3"
+
 has-yarn@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d"
@@ -5287,6 +6223,11 @@ html-tags@^3.3.1:
   resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
   integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
 
+html-url-attributes@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87"
+  integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==
+
 html-void-elements@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
@@ -5392,6 +6333,18 @@ human-signals@^2.1.0:
   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
   integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
 
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+humps@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa"
+  integrity sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==
+
 iconv-lite@0.4.24:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5689,6 +6642,11 @@ is-typedarray@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
   integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
 
+is-what@^4.1.8:
+  version "4.1.16"
+  resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f"
+  integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==
+
 is-wsl@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -6012,6 +6970,11 @@ lru-cache@^5.1.1:
   dependencies:
     yallist "^3.0.2"
 
+lucide-react@^0.503.0:
+  version "0.503.0"
+  resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.503.0.tgz#4ac55b262fa613f9497531c9df50ea0e883d2de2"
+  integrity sha512-HGGkdlPWQ0vTF8jJ5TdIqhQXZi6uh3LnNgfZ8MHiuxFfX3RZeA79r2MW2tHAZKlAVfoNE8esm3p+O6VkIvpj6w==
+
 magic-string@^0.25.2:
   version "0.25.9"
   resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
@@ -6029,6 +6992,16 @@ markdown-table@^3.0.0:
   resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd"
   integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
 
+marked@^15.0.9:
+  version "15.0.12"
+  resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e"
+  integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==
+
+math-intrinsics@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+  integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
 mdast-util-directive@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f"
@@ -6297,6 +7270,13 @@ memfs@^3.1.2, memfs@^3.4.3:
   dependencies:
     fs-monkey "^1.0.4"
 
+merge-anything@5.1.7:
+  version "5.1.7"
+  resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.1.7.tgz#94f364d2b0cf21ac76067b5120e429353b3525d7"
+  integrity sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==
+  dependencies:
+    is-what "^4.1.8"
+
 merge-descriptors@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
@@ -6959,7 +7939,7 @@ mime-types@2.1.18:
   dependencies:
     mime-db "~1.33.0"
 
-mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
   version "2.1.35"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
   integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -7038,7 +8018,7 @@ ms@2.0.0:
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
   integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
 
-ms@2.1.3, ms@^2.1.3:
+ms@2.1.3, ms@^2.0.0, ms@^2.1.3:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
   integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -7088,6 +8068,11 @@ node-addon-api@^7.0.0:
   resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
   integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
 
+node-domexception@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
+  integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
 node-emoji@^2.1.0:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06"
@@ -7098,6 +8083,13 @@ node-emoji@^2.1.0:
     emojilib "^2.4.0"
     skin-tone "^2.0.0"
 
+node-fetch@^2.6.7:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+  integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+  dependencies:
+    whatwg-url "^5.0.0"
+
 node-forge@^1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -7212,6 +8204,19 @@ open@^8.0.9, open@^8.4.0:
     is-docker "^2.1.1"
     is-wsl "^2.2.0"
 
+openai@4.78.1:
+  version "4.78.1"
+  resolved "https://registry.yarnpkg.com/openai/-/openai-4.78.1.tgz#44c3b195d239891be9c9c53722539ad8a1fcc5f2"
+  integrity sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==
+  dependencies:
+    "@types/node" "^18.11.18"
+    "@types/node-fetch" "^2.6.4"
+    abort-controller "^3.0.0"
+    agentkeepalive "^4.2.1"
+    form-data-encoder "1.7.2"
+    formdata-node "^4.3.2"
+    node-fetch "^2.6.7"
+
 opener@^1.5.2:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -7781,6 +8786,14 @@ pretty-time@^1.1.0:
   resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
   integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
 
+prism-react-renderer@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f"
+  integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==
+  dependencies:
+    "@types/prismjs" "^1.26.0"
+    clsx "^2.0.0"
+
 prism-react-renderer@^2.0.6, prism-react-renderer@^2.1.0, prism-react-renderer@^2.3.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz#c5ea692029c2f8b3fd04f63662d04ffd4eaf10a0"
@@ -7807,7 +8820,7 @@ prompts@^2.4.2:
     kleur "^3.0.3"
     sisteransi "^1.0.5"
 
-prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
   version "15.8.1"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
   integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7834,6 +8847,11 @@ proxy-addr@~2.0.7:
     forwarded "0.2.0"
     ipaddr.js "1.9.1"
 
+proxy-compare@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-3.0.1.tgz#3262cff3a25a6dedeaa299f6cf2369d6f7588a94"
+  integrity sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==
+
 punycode@^1.3.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -7950,6 +8968,13 @@ react-dom@^18.2.0:
     loose-envify "^1.1.0"
     scheduler "^0.23.2"
 
+react-error-boundary@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-6.0.0.tgz#a9e552146958fa77d873b587aa6a5e97544ee954"
+  integrity sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+
 react-error-overlay@^6.0.11:
   version "6.0.11"
   resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
@@ -7980,6 +9005,11 @@ react-helmet-async@^1.3.0:
     react-fast-compare "^3.2.0"
     shallowequal "^1.1.0"
 
+react-hook-form@7.54.2:
+  version "7.54.2"
+  resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211"
+  integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==
+
 react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
   version "16.13.1"
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -8013,6 +9043,52 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1:
   dependencies:
     "@types/react" "*"
 
+react-markdown@9.0.3:
+  version "9.0.3"
+  resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.3.tgz#c12bf60dad05e9bf650b86bcc612d80636e8456e"
+  integrity sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==
+  dependencies:
+    "@types/hast" "^3.0.0"
+    devlop "^1.0.0"
+    hast-util-to-jsx-runtime "^2.0.0"
+    html-url-attributes "^3.0.0"
+    mdast-util-to-hast "^13.0.0"
+    remark-parse "^11.0.0"
+    remark-rehype "^11.0.0"
+    unified "^11.0.0"
+    unist-util-visit "^5.0.0"
+    vfile "^6.0.0"
+
+react-remove-scroll-bar@^2.3.7:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223"
+  integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==
+  dependencies:
+    react-style-singleton "^2.2.2"
+    tslib "^2.0.0"
+
+react-remove-scroll@2.6.3:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2"
+  integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==
+  dependencies:
+    react-remove-scroll-bar "^2.3.7"
+    react-style-singleton "^2.2.3"
+    tslib "^2.1.0"
+    use-callback-ref "^1.3.3"
+    use-sidecar "^1.1.3"
+
+react-remove-scroll@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz#d2101d414f6d81d7d3bf033f3c1cb4785789f753"
+  integrity sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==
+  dependencies:
+    react-remove-scroll-bar "^2.3.7"
+    react-style-singleton "^2.2.3"
+    tslib "^2.1.0"
+    use-callback-ref "^1.3.3"
+    use-sidecar "^1.1.3"
+
 react-router-config@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988"
@@ -8048,6 +9124,33 @@ react-router@5.3.4, react-router@^5.3.4:
     tiny-invariant "^1.0.2"
     tiny-warning "^1.0.0"
 
+react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388"
+  integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==
+  dependencies:
+    get-nonce "^1.0.0"
+    tslib "^2.0.0"
+
+react-svg@16.3.0:
+  version "16.3.0"
+  resolved "https://registry.yarnpkg.com/react-svg/-/react-svg-16.3.0.tgz#de7a4bb6ee2d465c1ff7125ec27414ac27e907d7"
+  integrity sha512-MvoQbITgkmpPJYwDTNdiUyoncJFfoa0D86WzoZuMQ9c/ORJURPR6rPMnXDsLOWDCAyXuV9nKZhQhGyP0HZ0MVQ==
+  dependencies:
+    "@babel/runtime" "^7.26.0"
+    "@tanem/svg-injector" "^10.1.68"
+    "@types/prop-types" "^15.7.14"
+    prop-types "^15.8.1"
+
+react-textarea-autosize@8.5.7:
+  version "8.5.7"
+  resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.7.tgz#b2bf1913383a05ffef7fbc89c2ea21ba8133b023"
+  integrity sha512-2MqJ3p0Jh69yt9ktFIaZmORHXw4c4bxSIhCeWiFwmJ9EYKgLmuNII3e9c9b2UO+ijl4StnpZdqpxNIhTdHvqtQ==
+  dependencies:
+    "@babel/runtime" "^7.20.13"
+    use-composed-ref "^1.3.0"
+    use-latest "^1.2.1"
+
 react@^18.2.0:
   version "18.3.1"
   resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
@@ -8196,7 +9299,7 @@ regjsparser@^0.9.1:
   dependencies:
     jsesc "~0.5.0"
 
-rehype-raw@^7.0.0:
+rehype-raw@7.0.0, rehype-raw@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4"
   integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==
@@ -8253,6 +9356,18 @@ remark-gfm@^4.0.0:
     remark-stringify "^11.0.0"
     unified "^11.0.0"
 
+remark-gfm@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b"
+  integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==
+  dependencies:
+    "@types/mdast" "^4.0.0"
+    mdast-util-gfm "^3.0.0"
+    micromark-extension-gfm "^3.0.0"
+    remark-parse "^11.0.0"
+    remark-stringify "^11.0.0"
+    unified "^11.0.0"
+
 remark-mdx@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.1.tgz#8f73dd635c1874e44426e243f72c0977cf60e212"
@@ -8976,6 +10091,11 @@ svgo@^3.0.2, svgo@^3.2.0:
     csso "^5.0.5"
     picocolors "^1.0.0"
 
+tailwind-merge@2.6.0:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.6.0.tgz#ac5fb7e227910c038d458f396b7400d93a3142d5"
+  integrity sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==
+
 tapable@^1.0.0:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -9063,6 +10183,11 @@ totalist@^3.0.0:
   resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
   integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
 
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
 trim-lines@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
@@ -9083,16 +10208,16 @@ ts-interface-checker@^0.1.9:
   resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
   integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
 
+tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.1, tslib@^2.6.2:
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
 tslib@^2.0.3, tslib@^2.6.0:
   version "2.7.0"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
   integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
 
-tslib@^2.1.0, tslib@^2.4.1:
-  version "2.8.1"
-  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
-  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
 type-fest@^1.0.1:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
@@ -9118,6 +10243,11 @@ typedarray-to-buffer@^3.1.5:
   dependencies:
     is-typedarray "^1.0.0"
 
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
 undici-types@~6.19.2:
   version "6.19.8"
   resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
@@ -9277,11 +10407,48 @@ url-loader@^4.1.1:
     mime-types "^2.1.27"
     schema-utils "^3.0.0"
 
+use-callback-ref@^1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf"
+  integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==
+  dependencies:
+    tslib "^2.0.0"
+
+use-composed-ref@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.4.0.tgz#09e023bf798d005286ad85cd20674bdf5770653b"
+  integrity sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==
+
 use-editable@^2.3.3:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/use-editable/-/use-editable-2.3.3.tgz#a292fe9ba4c291cd28d1cc2728c75a5fc8d9a33f"
   integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA==
 
+use-isomorphic-layout-effect@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce"
+  integrity sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==
+
+use-latest@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.3.0.tgz#549b9b0d4c1761862072f0899c6f096eb379137a"
+  integrity sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==
+  dependencies:
+    use-isomorphic-layout-effect "^1.1.1"
+
+use-sidecar@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb"
+  integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==
+  dependencies:
+    detect-node-es "^1.1.0"
+    tslib "^2.0.0"
+
+use-sync-external-store@^1.4.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
+  integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
+
 util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -9376,11 +10543,21 @@ web-namespaces@^2.0.0:
   resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
   integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
 
+web-streams-polyfill@4.0.0-beta.3:
+  version "4.0.0-beta.3"
+  resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
+  integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
+
 web-worker@^1.2.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.3.0.tgz#e5f2df5c7fe356755a5fb8f8410d4312627e6776"
   integrity sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==
 
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
 webpack-bundle-analyzer@^4.9.0:
   version "4.10.2"
   resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd"
@@ -9513,6 +10690,14 @@ websocket-extensions@>=0.1.1:
   resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
   integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
 
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
 wheel-gestures@^2.2.5:
   version "2.2.48"
   resolved "https://registry.yarnpkg.com/wheel-gestures/-/wheel-gestures-2.2.48.tgz#7b84b2522e66962efb50b5fe7e4a55503061255e"
