diff --git a/.eslintrc.js b/.eslintrc.js
index ef6a7944b1941f0f1a8b59117df4a08ce379e434..8b0915b65b3a66d3f0b065f30b4a1b667de74946 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -2,8 +2,8 @@ module.exports = {
   parser: '@typescript-eslint/parser', // Specifies the ESLint parser
   extends: [
     'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react
-    'plugin:@typescript-eslint/recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin
-    'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
+    'plugin:@typescript-eslint/eslint-recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin
+    'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
     'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
     'plugin:react-hooks/recommended',
   ],
@@ -17,7 +17,6 @@ module.exports = {
   rules: {
     // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
     '@typescript-eslint/explicit-function-return-type': 'off',
-    '@typescript-eslint/no-var-requires': 'warn',
     'react/prop-types': 'warn',
   },
   settings: {
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 22fc8967f41b599cb8e10b8c6db4be33a3deaf0a..4d46400d68689b5e59d89423aea806f358080f3f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,5 @@
 default:
-  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:14.15.4-alpine
+  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:14.19.3-alpine
   services:
     - name: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/docker:20.10.9-dind
       alias: docker
diff --git a/.prettierrc b/.prettierrc
index 83d4731a79ba8b5d27114e9fc0db0364bb03103a..08012e88dcedff56c24e3231c56b7e2210c8e2ff 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -3,5 +3,6 @@
   "semi": false,
   "singleQuote": true,
   "tabWidth": 2,
-  "trailingComma": "es5"
+  "trailingComma": "es5",
+  "arrowParens": "avoid"
 }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3929136f760101cce8bd38ba4fdd4c7388c7a060..7bcc0d75a59eb366a02ac5869a689b7a83936b8b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,49 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [1.10.0](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.9.4...v1.10.0) (2022-07-07)
+
+
+### Features
+
+* **cgu:** update cgu, legal terms & consent ([f68d3d7](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/f68d3d768557f918450535d71c2957311accf54d))
+* **dacc v2:** dacc v2 ([d43817c](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/d43817c7a96c5d779669fb6c50f8bbfbd2185297))
+* **dev:** point to new docker image hosted by grandlyon for local dev ([0157477](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/0157477a79ae0eeab7b0d7e1b7af50b5e9f432b4))
+* **duel:** final duel perf view ([f71e523](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/f71e523d858dad4cb89a7dfe9051fed4160cc16c))
+* **matomo:** tacking + opt out in settings ([79fa859](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/79fa859805108f96848c71c0afb97402abe31c46))
+* **newsletter:** info field is now optional ([1b73f8b](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/1b73f8b279fdf459834fc65098e65e91c69a4182))
+
+
+### Bug Fixes
+
+* **analysis:** Fix navigation issue in monthly analysis ([d45e4f3](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/d45e4f39e64e181886ebefa92d56f93a4f3fa72e))
+* **dacc:** Remove temp code for recalculation ([e5a68cf](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/e5a68cfc5ce0fb98f9eb87d1f25cf5aefc8cabaa))
+* **deps:** update dependency @material-ui/core to ~4.12.0 ([78eb34c](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/78eb34c64e0d2f87ea809e7de6985fc4ef41d565))
+* **deps:** update dependency axios to ^0.27.0 ([c03bf96](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/c03bf96763d5ef56a60ebe0f1587c95031d4e8a0))
+* **deps:** update dependency cozy-bar to v8 ([6c0810a](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/6c0810a7890b7eef211bd69a4ac3abe5e03b042f))
+* **deps:** update dependency cozy-client to v32.1.1 ([53a45e8](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/53a45e8cd1ac5cc172e88e9011cf2d5496ec2b84))
+* **deps:** update dependency cozy-client to v32.2.0 ([5d4f3bd](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/5d4f3bdb9aff879983b452cc540ea42b551d9bbe))
+* **deps:** update dependency cozy-client to v32.2.1 ([1e0eb54](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/1e0eb54af0f64ff89524672a2139397128da4c2c))
+* **deps:** update dependency cozy-harvest-lib to v9.15.4 ([e97d16e](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/e97d16e076e686b02013353409cdfd5b326a6d9f))
+* **deps:** update dependency cozy-harvest-lib to v9.16.0 ([eaa03ff](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/eaa03ffe85ce6472c835737305ab76c097452a36))
+* **deps:** update dependency cozy-harvest-lib to v9.18.0 ([42e023e](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/42e023e143d1cd4cfda5cea6b49bdbca4865d132))
+* **deps:** update dependency cozy-harvest-lib to v9.18.1 ([37ed6a4](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/37ed6a4695ab002ec08797506a15c1e1e3b72ebd))
+* **deps:** update dependency cozy-ui to v68.9.1 ([596c045](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/596c0451879c265ed1aa20b7f6ede01d22fb5377))
+* **deps:** update dependency eslint-config-cozy-app to v1.6.0 ([d9bc3f0](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/d9bc3f032f962e7aa680cce5e39268c78cf251c0))
+* **deps:** update dependency luxon to v2 ([cb6e59c](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/cb6e59c26718204c78503e909d3fd157a90175fb))
+* **deps:** update dependency object-hash to v3 ([213a0e1](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/213a0e19d6b05e04a3ec4fd4faa948fdab202b69))
+* **deps:** update dependency react-router-dom to v5.3.3 ([b76925f](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/b76925f33a8453da4f4db49013e5396334a326f0))
+* **deps:** update dependency react-swipeable-views to v0.14.0 ([b2a651b](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/b2a651b4c411d54afeccd62c91c244caeb5fd52b))
+* **deps:** update dependency to husky v8 ([a0bf48c](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/a0bf48c5f43f09a6e1dfd360c38a8649d4837b06))
+* **ecogesture:** Reload on single ecogesture won't make the app crash anymore ([be0baa7](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/be0baa7b7ab4d4c773e1328f055b3dadba44a175))
+* **lint:** fix format ([a3f22fe](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/a3f22fec453ab6b25c25363ab68872e9cb1aed37))
+* **oauth:** add old way to declare token and domain ([8d9ef95](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/8d9ef9542b7befe8dee12b664cafc5ec76eb2518))
+* **oauth:** update cozy dependencies version ([5a05443](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/5a054431df7ed7d98e800a95356c9584feec9a13))
+* Remove deprecated modal parameters from material ui ([2f4bfd9](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/2f4bfd9e3ca1e6a4766dc891cdbc3638f0e21a6f))
+* Resolve "[DACC] - Les variations de consommation sont inversées" ([635ec6b](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/635ec6b0437205482209b30c28dc1751da97dbe0))
+* Update cozy-ui lib and adapt deprecated components ([d50f7cd](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/d50f7cded95c4380d0125851a881a51825231f1c))
+* update yarn lock ([498fd40](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/498fd40b281da482b3218dcfc452dd410b334fc0))
+
 ### [1.9.4](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.9.3...v1.9.4) (2022-05-18)
 
 
@@ -10,6 +53,13 @@ All notable changes to this project will be documented in this file. See [standa
 * **profileType:** invert month and year fields ([be836f9](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/be836f9d5e4ff07e5c56175d932aa753515a0c1b))
 
 
+### Bug Fixes
+
+* **ecogestures:** Update ecogesture profile and profiletype properly ([5f2d053](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/5f2d0535ee5103c5b76a0446c11f399e1c9a682e))
+
+### [1.9.3](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.9.2...v1.9.3) (2022-05-10)
+
+
 ### Bug Fixes
 
 * **ecogestures:** Update ecogesture profile and profiletype properly ([5f2d053](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/5f2d0535ee5103c5b76a0446c11f399e1c9a682e))
diff --git a/app.config.environment.alpha.js b/app.config.environment.alpha.js
index 65e8495114766d3cfb68e796f0e39e09bee65a7d..e0c4b0b3eef2dc34174673b70fb38d0e48f04934 100644
--- a/app.config.environment.alpha.js
+++ b/app.config.environment.alpha.js
@@ -17,6 +17,8 @@ module.exports = {
       __DEVELOPMENT__: false,
       __DEVTOOLS__: false,
       __STACK_ASSETS__: target !== 'mobile',
+      __PIWIK_TRACKER_URL__: JSON.stringify('https://statweb.grandlyon.com/'),
+      __PIWIK_SITEID__: 117,
     }),
   ],
   optimization: {
diff --git a/app.config.environment.dev.js b/app.config.environment.dev.js
index 86282e3bca1a3c7ba9ed26ce2c08b0f1842ca3f3..31cbe4a8ce3c192dae0a38450fa5cfafbb4af6aa 100644
--- a/app.config.environment.dev.js
+++ b/app.config.environment.dev.js
@@ -19,7 +19,10 @@ const stackProvidedLibsConfig = {
     new webpack.DefinePlugin({
       'process.env.NODE_ENV': JSON.stringify('development'),
       __IS_ALPHA__: true,
+      __DEVELOPMENT__: true,
       __STACK_ASSETS__: true,
+      __PIWIK_TRACKER_URL__: JSON.stringify('http://localhost:9800/'),
+      __PIWIK_SITEID__: 1,
     }),
   ],
   module: {
diff --git a/app.config.environment.prod.js b/app.config.environment.prod.js
index 9e5401b8d3c62ff9b25fb0316b460c837d9a0452..7dc15dbcfe681d98d64c73b52327f5c51f27a5f1 100644
--- a/app.config.environment.prod.js
+++ b/app.config.environment.prod.js
@@ -17,6 +17,8 @@ module.exports = {
       __DEVELOPMENT__: false,
       __DEVTOOLS__: false,
       __STACK_ASSETS__: target !== 'mobile',
+      __PIWIK_TRACKER_URL__: JSON.stringify('https://statweb.grandlyon.com/'),
+      __PIWIK_SITEID__: 118,
     }),
   ],
   optimization: {
diff --git a/babel.config.js b/babel.config.js
index 7bfca0c0c8169d8ad78e9c01eaaac2b912928c74..f1c965bcdc02c16b146866e329cbdadbe3d279db 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -3,6 +3,5 @@ module.exports = {
   plugins: [
     '@babel/transform-runtime',
     '@babel/plugin-transform-modules-commonjs',
-    'react-hot-loader/babel',
   ],
 }
diff --git a/docker-compose.yml b/docker-compose.yml
index cebbbbb7a65d2cfdeb796490cb65c8cfb939945a..1dfd3d0fb4c4753495af545554e191970768d242 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,14 +1,26 @@
 version: '3.7'
 services:
   stack:
-    image: cozy/cozy-app-dev:1.5.4
+    image: registry.forge.grandlyon.com/web-et-numerique/llle_project/cozy-stack:1.5.7
+    container_name: cozy-stack
+    depends_on:
+      - cozy-db
     ports:
       - 8080:8080
-      - 5984:5984
       - 8025:8025
     volumes:
       - ./docker/cozy-app-dev-with-app.sh:/usr/bin/cozy-app-dev.sh
       - ./build:/data/cozy-app/ecolyo
-      - ./data/db:/usr/local/couchdb/data
+      # - ./data/db:/usr/local/couchdb/data
       - ./data/storage:/data/cozy-storage
-      - ./docker/disableCSP.yaml:/etc/cozy/cozy.yaml
+      - ./docker/cozy.yaml:/etc/cozy/cozy.yaml
+
+  cozy-db:
+    image: couchdb:3.2.2
+    container_name: cozy-db
+    volumes:
+      - ./data/db:/opt/couchdb/data
+      - ./docker/local.ini:/opt/couchdb/etc/local.ini
+    restart: unless-stopped
+    ports:
+      - 5984:5984
diff --git a/docker/cozy-app-dev-with-app.sh b/docker/cozy-app-dev-with-app.sh
index 3847650d3f0034fe2a57b16f38d23a88b1ee873d..e53fc8881b7018f837bf9de7c815b75298fe17d8 100755
--- a/docker/cozy-app-dev-with-app.sh
+++ b/docker/cozy-app-dev-with-app.sh
@@ -8,7 +8,7 @@ set -m
 [ -z "${COZY_STACK_PORT}" ] && COZY_STACK_PORT="8080"
 [ -z "${COZY_STACK_PASS}" ] && COZY_STACK_PASS="cozy"
 [ -z "${COZY_STACK_ADMIN_PORT}" ] && COZY_STACK_ADMIN_PORT="6060"
-[ -z "${COUCHDB_URL}" ] && COUCHDB_URL="http://localhost:5984/"
+[ -z "${COUCHDB_URL}" ] && COUCHDB_URL="http://admin:password@cozy-db:5984/"
 [ -n "${COZY_KONNECTORS_CMD}" ] && COZY_KONNECTORS_CMD_OPTION="--konnectors-cmd $COZY_KONNECTORS_CMD"
 
 if [ -d "${COZY_STACK_PATH}" ] && [ -f "${COZY_STACK_PATH}/cozy-stack" ]; then
@@ -138,7 +138,8 @@ do_check_couchdb() {
 
 	printf "checking couchdb on %s... " "${COUCHDB_URL}"
 	couch_test=$(curl -s -XGET "${COUCHDB_URL}" || echo "")
-	couch_vers=$(grep "\"version\":\s*\"2" <<< "${couch_test}" || echo "")
+	printf "checking couchdb on %s... " "${couch_test}"
+	couch_vers=$(grep "\"version\":\s*\"3" <<< "${couch_test}" || echo "")
 
 	if [ -z "${couch_test}" ]; then
 		echo "failed"
@@ -146,8 +147,9 @@ do_check_couchdb() {
 		exit 1
 	elif [ -z "${couch_vers}" ]; then
 		echo "failed"
+    echo "${couch_vers}"
 		echo_err "couchdb v1 is running on ${COUCHDB_URL}"
-		echo_err "you need couchdb version >= 2"
+		echo_err "you need couchdb version >= 3"
 		exit 1
 	fi
 
diff --git a/docker/disableCSP.yaml b/docker/cozy.yaml
similarity index 99%
rename from docker/disableCSP.yaml
rename to docker/cozy.yaml
index 1ed8eaa9b39b9837af64a75f7503ef3d2d77b0c3..525c2f3142f3f876108665b2286b42c04ba0a977 100644
--- a/docker/disableCSP.yaml
+++ b/docker/cozy.yaml
@@ -4,6 +4,5 @@
 # You will ALWAYS have CSPs working on a real Cozy
 # so your final application must work with them on
 disable_csp: true
-
 # You can find a complete example of the cozy-stack config file here:
 # https://github.com/cozy/cozy-stack/blob/master/cozy.example.yaml
diff --git a/docker/docker-compose.matomo.yml b/docker/docker-compose.matomo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a0a90254efbabe79f3c8bc443e950f93537fd7e4
--- /dev/null
+++ b/docker/docker-compose.matomo.yml
@@ -0,0 +1,38 @@
+version: '3.8'
+
+services:
+  db:
+    image: mariadb
+    command: --max-allowed-packet=64MB
+    restart: always
+    environment:
+      - MYSQL_ROOT_PASSWORD=root
+      - MYSQL_PASSWORD=password
+      - MYSQL_DATABASE=matomo
+      - MYSQL_USER=matomo
+    volumes:
+      - db:/var/lib/mysql
+
+  app:
+    image: matomo:latest
+    restart: always
+    depends_on:
+      - db
+    environment:
+      - MATOMO_DATABASE_HOST=db
+      - MATOMO_DATABASE_ADAPTER=mysql
+      - MATOMO_DATABASE_TABLES_PREFIX=matomo_
+      - MATOMO_DATABASE_USERNAME=matomo
+      - MATOMO_DATABASE_PASSWORD=password
+      - MATOMO_DATABASE_DBNAME=matomo
+      - PHP_MEMORY_LIMIT=2048M
+    volumes:
+      # - ./config:/var/www/html/config:rw
+      # - ./logs:/var/www/html/logs
+      - matomo:/var/www/html
+    ports:
+      - 9800:80
+
+volumes:
+  db:
+  matomo:
diff --git a/docker/local.ini b/docker/local.ini
new file mode 100644
index 0000000000000000000000000000000000000000..c9b3888799b787df0a38db8c8316adfde3070076
--- /dev/null
+++ b/docker/local.ini
@@ -0,0 +1,95 @@
+; CouchDB Configuration Settings
+
+; Custom settings should be made in this file. They will override settings
+; in default.ini, but unlike changes made to default.ini, this file won't be
+; overwritten on server upgrade.
+
+[couchdb]
+;max_document_size = 4294967296 ; bytes
+;os_process_timeout = 5000
+
+[couch_peruser]
+; If enabled, couch_peruser ensures that a private per-user database
+; exists for each document in _users. These databases are writable only
+; by the corresponding user. Databases are in the following form:
+; userdb-{hex encoded username}
+;enable = true
+; If set to true and a user is deleted, the respective database gets
+; deleted as well.
+;delete_dbs = true
+; Set a default q value for peruser-created databases that is different from
+; cluster / q
+;q = 1
+
+[chttpd]
+;port = 5984
+;bind_address = 127.0.0.1
+; Options for the MochiWeb HTTP server.
+;server_options = [{backlog, 128}, {acceptor_pool_size, 16}]
+; For more socket options, consult Erlang's module 'inet' man page.
+;socket_options = [{sndbuf, 262144}, {nodelay, true}]
+
+[httpd]
+; NOTE that this only configures the "backend" node-local port, not the
+; "frontend" clustered port. You probably don't want to change anything in
+; this section.
+; Uncomment next line to trigger basic-auth popup on unauthorized requests.
+;WWW-Authenticate = Basic realm="administrator"
+
+; Uncomment next line to set the configuration modification whitelist. Only
+; whitelisted values may be changed via the /_config URLs. To allow the admin
+; to change this value over HTTP, remember to include {httpd,config_whitelist}
+; itself. Excluding it from the list would require editing this file to update
+; the whitelist.
+;config_whitelist = [{httpd,config_whitelist}, {log,level}, {etc,etc}]
+
+[chttpd_auth]
+; If you set this to true, you should also uncomment the WWW-Authenticate line
+; above. If you don't configure a WWW-Authenticate header, CouchDB will send
+; Basic realm="server" in order to prevent you getting logged out.
+; require_valid_user = false
+
+[ssl]
+;enable = true
+;cert_file = /full/path/to/server_cert.pem
+;key_file = /full/path/to/server_key.pem
+;password = somepassword
+; set to true to validate peer certificates
+;verify_ssl_certificates = false
+; Set to true to fail if the client does not send a certificate. Only used if verify_ssl_certificates is true.
+;fail_if_no_peer_cert = false
+; Path to file containing PEM encoded CA certificates (trusted
+; certificates used for verifying a peer certificate). May be omitted if
+; you do not want to verify the peer.
+;cacert_file = /full/path/to/cacertf
+; The verification fun (optional) if not specified, the default
+; verification fun will be used.
+;verify_fun = {Module, VerifyFun}
+; maximum peer certificate depth
+;ssl_certificate_max_depth = 1
+;
+; Reject renegotiations that do not live up to RFC 5746.
+;secure_renegotiate = true
+; The cipher suites that should be supported.
+; Can be specified in erlang format "{ecdhe_ecdsa,aes_128_cbc,sha256}"
+; or in OpenSSL format "ECDHE-ECDSA-AES128-SHA256".
+;ciphers = ["ECDHE-ECDSA-AES128-SHA256", "ECDHE-ECDSA-AES128-SHA"]
+; The SSL/TLS versions to support
+;tls_versions = [tlsv1, 'tlsv1.1', 'tlsv1.2']
+
+; To enable Virtual Hosts in CouchDB, add a vhost = path directive. All requests to
+; the Virual Host will be redirected to the path. In the example below all requests
+; to http://example.com/ are redirected to /database.
+; If you run CouchDB on a specific port, include the port number in the vhost:
+; example.com:5984 = /database
+[vhosts]
+;example.com = /database/
+
+; To create an admin account uncomment the '[admins]' section below and add a
+; line in the format 'username = password'. When you next start CouchDB, it
+; will change the password to a hash (so that your passwords don't linger
+; around in plain-text files). You can add more admin accounts with more
+; 'username = password' lines. Don't forget to restart CouchDB after
+; changing this.
+[admins]
+admin = password
diff --git a/jest.config.js b/jest.config.js
index 6cf339521a29b3096017066df033214ee39a3733..b6a027a5b05f2f8316ff6f26570db8a860f997be 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -18,6 +18,7 @@ module.exports = {
   globals: {
     __ALLOW_HTTP__: false,
     __TARGET__: 'browser',
+    __PIWIK_TRACKER_URL__: 'http://localhost:9800/',
     cozy: {},
   },
 }
diff --git a/manifest.webapp b/manifest.webapp
index 079a72070b0abed84ee4c82b81f485cbfe10f664..ddcbfaecf4abb6c802ef54af3b6c2c632e3d66b9 100644
--- a/manifest.webapp
+++ b/manifest.webapp
@@ -3,7 +3,7 @@
   "slug": "ecolyo",
   "icon": "icon.svg",
   "categories": ["energy"],
-  "version": "1.9.4",
+  "version": "1.10.0",
   "licence": "AGPL-3.0",
   "editor": "Métropole de Lyon",
   "default_locale": "fr",
@@ -221,11 +221,11 @@
       "verbs": ["GET"]
     },
     "dacc": {
-      "type": "cc.cozycloud.dacc",
+      "type": "cc.cozycloud.dacc_v2",
       "verbs": ["ALL"]
     },
     "dacc-dev": {
-      "type": "cc.cozycloud.dacc.dev",
+      "type": "cc.cozycloud.dacc.dev_v2",
       "verbs": ["ALL"]
     },
     "backoffice-rec": {
diff --git a/package.json b/package.json
index c4308dd99314ddf16f653175cb9b3b527d014012..786e3e12bfd57ecafc82f7ea82c1f9669d5753fe 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,10 @@
 {
   "name": "ecolyo",
-  "version": "1.9.4",
+  "version": "1.10.0",
   "scripts": {
     "tx": "tx pull --all || true",
-    "lint": "yarn lint:js && yarn lint:styles",
-    "lint:js": "cs lint {src,test}/**/*.{js,jsx,ts,tsx}",
-    "lint:styles": "stylint src/styles --config ./.stylintrc",
+    "lint": "yarn lint:js",
+    "lint:js": "cs lint {src,test}/**/*.{js,jsx,ts,tsx} --fix",
     "prebuild": "yarn lint",
     "build:cs": "build:browser",
     "build-dev:browser": "cs build --browser --config app.config.alpha.js",
@@ -21,14 +20,14 @@
     "deploy-test": "git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-test} --repo=${DEPLOY_REPOSITORY:-https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo.git}",
     "test": "cs test --verbose --coverage",
     "cozyPublish": "git fetch origin ${DEPLOY_BRANCH:-build}:${DEPLOY_BRANCH:-build} && cs publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})",
-    "build:css": "node-sass -c ./src/styles -o src/styles",
-    "watch:css": "yarn run build:css && node-sass -c -w ./src/styles -o src/styles",
+    "build:css": "sass -c ./src/styles",
     "start": "npm-run-all -p start:cs",
     "build": "yarn run build:css && yarn run build:browser",
     "build-dev": "yarn run build:css && yarn run build-dev:browser",
     "release": "standard-version --no-verify",
     "load-data": "cd test && importData.bat",
-    "start-stack": "cs start --hot --browser --stack"
+    "start-stack": "cs start --hot --browser --stack",
+    "prepare": "husky install"
   },
   "repository": {
     "type": "git",
@@ -41,94 +40,97 @@
     "url": "https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/issues"
   },
   "homepage": "https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo#readme",
+  "dependencies": {
+    "@babel/plugin-transform-modules-commonjs": "^7.7.5",
+    "@babel/plugin-transform-runtime": "^7.8.3",
+    "@cozy/minilog": "^1.0.0",
+    "@material-ui/core": "~4.12.0",
+    "@material-ui/styles": "^4.11.3",
+    "@simbathesailor/use-what-changed": "^2.0.0",
+    "axios": "^0.27.0",
+    "cozy-bar": "8.7.5",
+    "cozy-client": "32.2.1",
+    "cozy-device-helper": ">=2.1.0",
+    "cozy-flags": ">2.8.6",
+    "cozy-harvest-lib": "9.18.1",
+    "cozy-intent": ">=1.14.1",
+    "cozy-keys-lib": ">=4.1.9",
+    "cozy-logger": ">1.7.0",
+    "cozy-realtime": "4.2.1",
+    "cozy-scripts": "5.13.0",
+    "cozy-ui": "68.9.1",
+    "d3": "^5.15.0",
+    "detect-browser": "^5.1.1",
+    "eslint-config-cozy-app": "4.2.0",
+    "global": "^4.4.0",
+    "handlebars": "^4.7.7",
+    "handlebars-loader": "^1.7.1",
+    "htmlparser2": "^8.0.1",
+    "lodash": "^4.17.15",
+    "mjml-browser": "^4.10.2",
+    "null-loader": "^4.0.1",
+    "object-hash": "^3.0.0",
+    "react": "16.14.0",
+    "react-dom": "16.14.0",
+    "react-lottie": "^1.2.3",
+    "react-redux": "^7.2.2",
+    "react-router-dom": "5.3.3",
+    "react-swipeable-views": "0.14.0",
+    "redux-devtools-extension": "^2.13.8"
+  },
   "devDependencies": {
     "@babel/preset-typescript": "^7.7.4",
-    "@testing-library/react-hooks": "^5.0.0",
+    "@testing-library/react-hooks": "^8.0.0",
     "@types/classnames": "^2.2.10",
     "@types/d3": "^5.7.2",
     "@types/enzyme": "^3.10.8",
     "@types/history": "^4.7.5",
-    "@types/jest": "^24.0.25",
+    "@types/jest": "^28.0.0",
     "@types/lodash": "^4.14.149",
-    "@types/luxon": "^1.21.0",
+    "@types/luxon": "^2.0.0",
     "@types/node-fetch": "^2.5.7",
-    "@types/object-hash": "^1.3.1",
+    "@types/object-hash": "^2.0.0",
     "@types/react": "^16.9.15",
     "@types/react-dom": "^16.9.8",
     "@types/react-lottie": "^1.2.3",
     "@types/react-redux": "^7.1.11",
     "@types/react-router-dom": "^5.1.3",
     "@types/redux-mock-store": "^1.0.2",
-    "@typescript-eslint/eslint-plugin": "^2.10.0",
-    "@typescript-eslint/parser": "^2.10.0",
+    "@typescript-eslint/eslint-plugin": "^5.30.0",
+    "@typescript-eslint/parser": "^5.30.0",
     "babel-polyfill": "^6.26.0",
-    "babel-preset-cozy-app": "1.5.2",
+    "babel-preset-cozy-app": "1.12.0",
     "copy-webpack-plugin": "6.4.1",
-    "cozy-app-publish": "^0.22.3",
+    "cozy-app-publish": "^0.30.0",
     "cozy-jobs-cli": "^1.13.6",
     "enzyme": "3.11.0",
     "enzyme-adapter-react-16": "1.15.6",
-    "eslint": "^6.7.2",
-    "eslint-config-prettier": "^6.7.0",
-    "eslint-plugin-prettier": "^3.1.1",
-    "eslint-plugin-react": "7.14.2",
+    "enzyme-to-json": "^3.6.2",
+    "eslint": "^8.18.0",
+    "eslint-config-prettier": "^8.5.0",
+    "eslint-plugin-prettier": "^4.2.1",
+    "eslint-plugin-react": "7.30.1",
     "eslint-plugin-react-hooks": "^4.2.0",
     "git-directory-deploy": "1.5.1",
-    "html-minifier-terser": "^5.1.1",
-    "husky": "^4.3.8",
+    "husky": "^8.0.1",
     "jest-canvas-mock": "^2.3.0",
-    "jest-junit": "^12.0.0",
+    "jest-junit": "^14.0.0",
     "lint-staged": ">=8",
     "loglevel": "^1.6.6",
+    "luxon": "^2.0.0",
     "mjml": "^4.10.2",
     "mjml-web": "^4.10.0",
     "npm-run-all": "^4.1.5",
-    "prettier": "^1.19.1",
-    "prettier-eslint": "^9.0.1",
-    "react-test-renderer": "16.8.6",
-    "redux-mock-store": "1.5.3",
+    "prettier": "^2.7.1",
+    "prettier-eslint": "^15.0.1",
+    "react-test-renderer": "16.14.0",
+    "redux-mock-store": "1.5.4",
+    "sass": "^1.49.11",
+    "sass-loader": "^8.0.0",
     "standard-version": "^9.3.1",
-    "stylint": "1.5.9",
-    "typescript": "^3.7.3",
+    "typescript": "^4.0.0",
     "uglifyjs-webpack-plugin": "^2.2.0",
-    "webextension-polyfill": "^0.6.0"
-  },
-  "dependencies": {
-    "@babel/plugin-transform-modules-commonjs": "^7.7.5",
-    "@babel/plugin-transform-runtime": "^7.8.3",
-    "@cozy/minilog": "^1.0.0",
-    "@material-ui/core": "~4.8.3",
-    "@material-ui/styles": "^4.11.3",
-    "@simbathesailor/use-what-changed": "^2.0.0",
-    "axios": "^0.19.0",
-    "cozy-bar": "7.14.0",
-    "cozy-client": "24.9.2",
-    "cozy-harvest-lib": "6.8.0",
-    "cozy-keys-lib": "^3.11.0",
-    "cozy-realtime": "3.10.5",
-    "cozy-scripts": "5.13.0",
-    "cozy-ui": "51.11.0",
-    "d3": "^5.15.0",
-    "detect-browser": "^5.1.1",
-    "eslint-config-cozy-app": "1.1.12",
-    "global": "^4.4.0",
-    "handlebars": "^4.7.7",
-    "handlebars-loader": "^1.7.1",
-    "htmlparser2": "^6.1.0",
-    "lodash": "^4.17.15",
-    "luxon": "^1.21.3",
-    "mjml-browser": "^4.10.2",
-    "node-sass": "^4.14.0",
-    "null-loader": "^4.0.1",
-    "object-hash": "^2.0.3",
-    "react": "16.14.0",
-    "react-dom": "16.14.0",
-    "react-lottie": "^1.2.3",
-    "react-redux": "^7.2.2",
-    "react-router-dom": "5.2.0",
-    "react-swipeable-views": "0.13.4",
-    "redux-devtools-extension": "^2.13.8",
-    "sass-loader": "^8.0.0"
+    "webextension-polyfill": "^0.9.0"
   },
   "husky": {
     "hooks": {
@@ -140,5 +142,9 @@
       "eslint --fix",
       "git add"
     ]
+  },
+  "resolutions": {
+    "cheerio": "1.0.0-rc.10",
+    "parse5-htmlparser2-tree-adapter": "^6.0.0"
   }
 }
diff --git a/renovate.json b/renovate.json
index 4f481f3cbed5c648182ff20897c87113be293f3a..6e459e2d781bc967d75e83fbf5b8af4d8b04b4b4 100644
--- a/renovate.json
+++ b/renovate.json
@@ -1,5 +1,6 @@
 {
+  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
   "extends": [
-    "cozy"
+    "local>systemes-dinformation/renovate/renovate-config"
   ]
 }
diff --git a/src/assets/icons/visu/challenge/ecolyo.svg b/src/assets/icons/visu/challenge/ecolyo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..504f722c6051fd1557b500fc889cec674f6c5af4
--- /dev/null
+++ b/src/assets/icons/visu/challenge/ecolyo.svg
@@ -0,0 +1,6 @@
+<svg width="62" height="62" viewBox="0 0 62 62" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M30.9999 58.3539C57.4593 48.0072 55.4028 33.2974 54.0319 11.3573C45.532 10.9834 37.9918 8.36552 30.9999 4.00244C24.0081 8.36552 16.4679 10.9834 7.96801 11.3573C6.59706 33.2974 4.54064 48.0072 30.9999 58.3539Z" fill="#1B1C22"/>
+<path d="M31 0L29.2075 1.11858C22.6524 5.20911 15.6717 7.61771 7.81931 7.96319L4.77457 8.09716L4.58414 11.1446C4.52759 12.0496 4.46881 12.95 4.41037 13.8451C3.78152 23.4778 3.1917 32.5124 5.83816 40.2978C8.88926 49.2736 15.9673 56.1216 29.7672 61.5179L31 62V58.3535C5.57809 48.4124 6.4797 34.4437 7.80541 13.9043C7.85951 13.0662 7.91431 12.2171 7.96806 11.3569C16.4679 10.9829 24.0082 8.36507 31 4.00199V0Z" fill="#FFC600"/>
+<path d="M31 0L32.7925 1.11858C39.3476 5.20911 46.3283 7.61771 54.1807 7.96319L57.2254 8.09716L57.4159 11.1446C57.4724 12.0496 57.5312 12.95 57.5896 13.8451C58.2185 23.4778 58.8083 32.5124 56.1618 40.2978C53.1107 49.2736 46.0327 56.1216 32.2328 61.5179L31 62V58.3535C56.4219 48.4124 55.5203 34.4437 54.1946 13.9043C54.1405 13.0662 54.0857 12.2171 54.0319 11.3569C45.5321 10.9829 37.9918 8.36507 31 4.00199V0Z" fill="#DB8300"/>
+<path d="M22.639 21.3672H23.8419C24.3222 21.3672 24.783 21.5561 25.1226 21.8925C25.4623 22.2289 25.6532 22.6851 25.6532 23.1608V41.3684H20.8277V23.1608C20.8277 22.6851 21.0185 22.2289 21.3582 21.8925C21.6979 21.5561 22.1586 21.3672 22.639 21.3672ZM30.9965 30.2331H32.1993C32.6797 30.2331 33.1404 30.4221 33.4801 30.7585C33.8198 31.0948 34.0107 31.5511 34.0107 32.0268V41.3684H29.1852V32.0268C29.1852 31.5511 29.376 31.0948 29.7157 30.7585C30.0554 30.4221 30.5161 30.2331 30.9965 30.2331ZM39.8521 26.8035H41.055C41.5353 26.8035 41.9961 26.9925 42.3358 27.3288C42.6754 27.6652 42.8663 28.1214 42.8663 28.5971V41.3684H38.0408V28.5971C38.0408 28.1214 38.2316 27.6652 38.5713 27.3288C38.911 26.9925 39.3717 26.8035 39.8521 26.8035Z" fill="#FFC600"/>
+</svg>
diff --git a/src/assets/icons/visu/duel/star.svg b/src/assets/icons/visu/duel/star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..59414adf150623d959f4e7b714b7ea9a73ba0267
--- /dev/null
+++ b/src/assets/icons/visu/duel/star.svg
@@ -0,0 +1,9 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M46.4486 17.7627L32.0591 15.7204L25.6267 2.98519C25.451 2.6365 25.1619 2.35424 24.8049 2.18266C23.9094 1.75096 22.8213 2.11071 22.3736 2.98519L15.9411 15.7204L1.55164 17.7627C1.15492 17.818 0.792211 18.0007 0.514509 18.2774C0.178784 18.6144 -0.00621659 19.0678 0.000159514 19.5379C0.00653562 20.008 0.203766 20.4564 0.548513 20.7846L10.9595 30.6972L8.49984 44.6943C8.44216 45.0199 8.47906 45.3548 8.60634 45.6609C8.73363 45.9671 8.94621 46.2323 9.21999 46.4265C9.49376 46.6207 9.81777 46.7361 10.1553 46.7596C10.4928 46.7831 10.8303 46.7137 11.1295 46.5595L24.0001 39.9511L36.8707 46.5595C37.2221 46.7421 37.6302 46.803 38.0212 46.7366C39.0073 46.5705 39.6704 45.6573 39.5004 44.6943L37.0407 30.6972L47.4517 20.7846C47.7351 20.5134 47.9221 20.1592 47.9788 19.7718C48.1318 18.8032 47.4404 17.9066 46.4486 17.7627Z" fill="url(#paint0_linear_12656_82845)"/>
+<defs>
+<linearGradient id="paint0_linear_12656_82845" x1="23.175" y1="2" x2="23.175" y2="46.764" gradientUnits="userSpaceOnUse">
+<stop stop-color="#61F0F2"/>
+<stop offset="1" stop-color="#48C2C4"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/src/components/Action/ActionBegin.spec.tsx b/src/components/Action/ActionBegin.spec.tsx
index e8430a43bcc4d0ced37f1fca94cda4144f1e1a6b..d3294a161e28b0e80e8c050b281e93ec1f33fdf8 100644
--- a/src/components/Action/ActionBegin.spec.tsx
+++ b/src/components/Action/ActionBegin.spec.tsx
@@ -148,10 +148,7 @@ describe('ActionBegin component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(wrapper.find(ActionModal).exists()).toBeTruthy()
     expect(wrapper.find(ActionModal).prop('open')).toBeTruthy()
   })
@@ -178,9 +175,6 @@ describe('ActionBegin component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
   })
 })
diff --git a/src/components/Action/ActionCard.spec.tsx b/src/components/Action/ActionCard.spec.tsx
index 6076a3da0e25a1f2d8154568c956f4299409e794..afc9734f174bb23432660f46ee6ea36c767192dd 100644
--- a/src/components/Action/ActionCard.spec.tsx
+++ b/src/components/Action/ActionCard.spec.tsx
@@ -66,10 +66,7 @@ describe('ActionCard component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(wrapper.find(EcogestureModal).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Action/ActionDone.spec.tsx b/src/components/Action/ActionDone.spec.tsx
index f59cfe61f12856fbc63e7b227ac25c43b6907ff1..748320be93efa459470c709d50a7bf510d8fc61a 100644
--- a/src/components/Action/ActionDone.spec.tsx
+++ b/src/components/Action/ActionDone.spec.tsx
@@ -78,10 +78,7 @@ describe('ActionDone component', () => {
         <ActionDone currentChallenge={userChallengeData[1]} />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     await act(async () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
diff --git a/src/components/Action/ActionDone.tsx b/src/components/Action/ActionDone.tsx
index 2e909dad7f9bdfa7a3e8898539ea843f654b23d9..b5d5731bdc542a3abaa662515a8017512ef672e5 100644
--- a/src/components/Action/ActionDone.tsx
+++ b/src/components/Action/ActionDone.tsx
@@ -27,10 +27,11 @@ const ActionDone: React.FC<ActionDoneProps> = ({
   const history = useHistory()
   const handleEndAction = useCallback(async () => {
     const challengeService = new ChallengeService(client)
-    const updatedChallenge: UserChallenge = await challengeService.updateUserChallenge(
-      currentChallenge,
-      UserChallengeUpdateFlag.ACTION_DONE
-    )
+    const updatedChallenge: UserChallenge =
+      await challengeService.updateUserChallenge(
+        currentChallenge,
+        UserChallengeUpdateFlag.ACTION_DONE
+      )
     await UsageEventService.addEvent(client, {
       type: UsageEventType.ACTION_END_EVENT,
       target: currentChallenge.action.ecogesture
diff --git a/src/components/Action/ActionModal.spec.tsx b/src/components/Action/ActionModal.spec.tsx
index 8e072fd7050f4e12771b6c805bead56d6d36db4f..29c27a23afa20af6ac35660e2bc30ae6d2616f19 100644
--- a/src/components/Action/ActionModal.spec.tsx
+++ b/src/components/Action/ActionModal.spec.tsx
@@ -83,10 +83,7 @@ describe('ActionModal component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     await act(async () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
diff --git a/src/components/Action/ActionModal.tsx b/src/components/Action/ActionModal.tsx
index cfc32d6fab7eafc6d80647902f6b6340b9b14ccc..4ae600afff45ff7b75fab5642e23d72ef8f07755 100644
--- a/src/components/Action/ActionModal.tsx
+++ b/src/components/Action/ActionModal.tsx
@@ -31,13 +31,14 @@ const ActionModal: React.FC<ActionModalProps> = ({
   const { t } = useI18n()
   const launchAction = useCallback(async () => {
     const challengeService = new ChallengeService(client)
-    const updatedChallenge: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.ACTION_START,
-      undefined,
-      undefined,
-      action
-    )
+    const updatedChallenge: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.ACTION_START,
+        undefined,
+        undefined,
+        action
+      )
     dispatch(updateUserChallengeList(updatedChallenge))
   }, [action, client, dispatch, userChallenge])
 
diff --git a/src/components/Action/ActionOnGoing.spec.tsx b/src/components/Action/ActionOnGoing.spec.tsx
index b5a9a0ed8c7944b0efbf34990b9fcaedfb7a85af..ddf95e7df910db9b83eba2e7430c300b6679b027 100644
--- a/src/components/Action/ActionOnGoing.spec.tsx
+++ b/src/components/Action/ActionOnGoing.spec.tsx
@@ -80,10 +80,7 @@ describe('ActionOnGoing component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(wrapper.find(EcogestureModal).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Action/ActionOnGoing.tsx b/src/components/Action/ActionOnGoing.tsx
index cb7a95266822e7f06bf4e2741315ca009bffb6dc..5253eaa6765133bc1ceb5f83ddb1ccb1039e30a8 100644
--- a/src/components/Action/ActionOnGoing.tsx
+++ b/src/components/Action/ActionOnGoing.tsx
@@ -39,8 +39,9 @@ const ActionOnGoing: React.FC<ActionOnGoingProps> = ({
         return `linear-gradient(90deg, #121212 50%, #58ffff 50%)`
       } else if (progress > circle / 2) {
         if (durationInDays / 3 === 1) {
-          return `linear-gradient(${progress /
-            2}deg, transparent 50%, #58ffff  50%),
+          return `linear-gradient(${
+            progress / 2
+          }deg, transparent 50%, #58ffff  50%),
           
         linear-gradient(90deg, transparent 50%, #58ffff 50%)`
         } else {
@@ -51,8 +52,9 @@ const ActionOnGoing: React.FC<ActionOnGoingProps> = ({
         if (durationInDays / 3 === 1) {
           return `linear-gradient(90deg, #121212 50%,transparent 50%), linear-gradient(240deg, #58ffff 50%, transparent 50%)`
         } else {
-          return `linear-gradient(90deg, #121212 50%,transparent 50%), linear-gradient(${progress *
-            2}deg, #58ffff 50%, transparent 50%)`
+          return `linear-gradient(90deg, #121212 50%,transparent 50%), linear-gradient(${
+            progress * 2
+          }deg, #58ffff 50%, transparent 50%)`
         }
       }
     }
diff --git a/src/components/Action/ActionView.spec.tsx b/src/components/Action/ActionView.spec.tsx
index 8442277f410b7c0b37b595374f43322a2aa542e9..736802cd2e43895ed6c08ca1cf59290f6ea3563c 100644
--- a/src/components/Action/ActionView.spec.tsx
+++ b/src/components/Action/ActionView.spec.tsx
@@ -21,6 +21,9 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
     }),
   }
 })
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 
 const mockStore = configureStore([])
 describe('ActionView component', () => {
@@ -34,7 +37,7 @@ describe('ActionView component', () => {
     }
     const store = mockStore({
       ecolyo: {
-        challenge: userChallenge,
+        challenge: { currentChallenge: userChallenge },
         global: { ...globalStateData, fluidTypes: [0, 1, 2] },
         profile: profileData,
         modal: modalStateData,
@@ -45,7 +48,7 @@ describe('ActionView component', () => {
         <ActionView />
       </Provider>
     )
-    expect(wrapper.find(ActionChoose).exists())
+    expect(wrapper.find(ActionChoose).exists()).toBeTruthy()
     expect(wrapper).toMatchSnapshot()
   })
   it('should render ActionDone component', () => {
@@ -58,7 +61,7 @@ describe('ActionView component', () => {
     }
     const store = mockStore({
       ecolyo: {
-        challenge: userChallenge,
+        challenge: { currentChallenge: userChallenge },
         global: { ...globalStateData, fluidTypes: [0, 1, 2] },
         profile: profileData,
         modal: modalStateData,
@@ -69,7 +72,7 @@ describe('ActionView component', () => {
         <ActionView />
       </Provider>
     )
-    expect(wrapper.find(ActionDone).exists())
+    expect(wrapper.find(ActionDone).exists()).toBeTruthy()
   })
   it('should render ActionOnGoing component', () => {
     const userChallenge = {
@@ -81,7 +84,7 @@ describe('ActionView component', () => {
     }
     const store = mockStore({
       ecolyo: {
-        challenge: userChallenge,
+        challenge: { currentChallenge: userChallenge },
         global: { ...globalStateData, fluidTypes: [0, 1, 2] },
         modal: modalStateData,
         profile: profileData,
@@ -92,6 +95,6 @@ describe('ActionView component', () => {
         <ActionView />
       </Provider>
     )
-    expect(wrapper.find(ActionOnGoing).exists())
+    expect(wrapper.find(ActionOnGoing).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Analysis/AnalysisConsumption.spec.tsx b/src/components/Analysis/AnalysisConsumption.spec.tsx
index 1fbcf4bebf43199fbc9de40997bfd2ca7b796c4d..fb9eea498122754f72d2df482be6a41e06e0fc77 100644
--- a/src/components/Analysis/AnalysisConsumption.spec.tsx
+++ b/src/components/Analysis/AnalysisConsumption.spec.tsx
@@ -198,10 +198,7 @@ describe('AnalysisConsumption component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find('.link-ideal')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-ideal').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -233,10 +230,7 @@ describe('AnalysisConsumption component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find('.link-average')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-average').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -279,10 +273,7 @@ describe('AnalysisConsumption component', () => {
     expect(mockgetMonthlyForecast).toHaveBeenCalledWith(
       profileData.monthlyAnalysisDate.month - 1
     )
-    wrapper
-      .find('.link-ideal')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-ideal').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -327,10 +318,7 @@ describe('AnalysisConsumption component', () => {
     expect(mockgetMonthlyForecast).toHaveBeenCalledWith(
       profileData.monthlyAnalysisDate.month - 1
     )
-    wrapper
-      .find('.link-average')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-average').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -371,10 +359,7 @@ describe('AnalysisConsumption component', () => {
     expect(mockgetMonthlyForecast).toHaveBeenCalledWith(
       profileData.monthlyAnalysisDate.month - 1
     )
-    wrapper
-      .find('.link-ideal')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-ideal').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -414,10 +399,7 @@ describe('AnalysisConsumption component', () => {
     expect(mockgetMonthlyForecast).toHaveBeenCalledWith(
       profileData.monthlyAnalysisDate.month - 1
     )
-    wrapper
-      .find('.link-average')
-      .first()
-      .simulate('click')
+    wrapper.find('.link-average').first().simulate('click')
     expect(
       wrapper
         .find('#analysisconsumptionrow')
@@ -450,10 +432,7 @@ describe('AnalysisConsumption component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHistoryPush).toBeCalledWith('/profileType')
   })
 })
diff --git a/src/components/Analysis/AnalysisConsumption.tsx b/src/components/Analysis/AnalysisConsumption.tsx
index 2a589da8f8f2ba16c067c01a98b870934a6d1fba..83fc2cfc6267fbc864b647591648d6e986906d36 100644
--- a/src/components/Analysis/AnalysisConsumption.tsx
+++ b/src/components/Analysis/AnalysisConsumption.tsx
@@ -90,18 +90,20 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
     let subscribed = true
     async function loadAverageComsumption() {
       const profileTypeEntityService = new ProfileTypeEntityService(client)
-      const profileType: ProfileType | null = await profileTypeEntityService.getProfileType(
-        analysisDate.minus({ month: 1 }).startOf('month')
-      )
+      const profileType: ProfileType | null =
+        await profileTypeEntityService.getProfileType(
+          analysisDate.minus({ month: 1 }).startOf('month')
+        )
       if (profileType !== null) {
         const profileTypeService: ProfileTypeService = new ProfileTypeService(
           profileType,
           client,
           analysisDate.year
         )
-        const monthlyForecast: MonthlyForecast = await profileTypeService.getMonthlyForecast(
-          analysisDate.minus({ month: 1 }).startOf('month').month
-        )
+        const monthlyForecast: MonthlyForecast =
+          await profileTypeService.getMonthlyForecast(
+            analysisDate.minus({ month: 1 }).startOf('month').month
+          )
         if (subscribed) {
           setForecast(monthlyForecast)
           if (monthlyForecast) {
@@ -255,8 +257,9 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
 
             <StyledCard
               onClick={toggleAverage}
-              className={`link-average ${toggleHome === 'average' &&
-                'active'} grid-align`}
+              className={`link-average ${
+                toggleHome === 'average' && 'active'
+              } grid-align`}
             >
               <span className="check-icon"></span>
               <span className="link-label text-16-normal">
@@ -265,8 +268,9 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
             </StyledCard>
             <StyledCard
               onClick={toggleIdeal}
-              className={`link-ideal ${toggleHome === 'ideal' &&
-                'active'} grid-align`}
+              className={`link-ideal ${
+                toggleHome === 'ideal' && 'active'
+              } grid-align`}
             >
               <span className="check-icon"></span>
               <span className="link-label text-16-normal">
diff --git a/src/components/Analysis/AnalysisConsumptionRow.spec.tsx b/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
index 6bc0b0db5935c6e8819af0705eef162c299a126a..866717ba5f698741665112769fdf6a01f0506f24 100644
--- a/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
+++ b/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
@@ -39,18 +39,8 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-multifluid').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('20,00 €')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('18,00 €')
+    expect(wrapper.find('.price').first().text()).toBe('20,00 €')
+    expect(wrapper.find('.price').last().text()).toBe('18,00 €')
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -71,18 +61,8 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-multifluid').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('analysis.not_connected')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('18,00 €')
+    expect(wrapper.find('.price').first().text()).toBe('analysis.not_connected')
+    expect(wrapper.find('.price').last().text()).toBe('18,00 €')
     expect(wrapper.find('.graph').exists()).toBeFalsy()
     expect(wrapper.find('.not-connected').exists()).toBeTruthy()
   })
@@ -101,18 +81,12 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-electricity').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('25 FLUID.ELECTRICITY.UNIT')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
+    expect(wrapper.find('.price').first().text()).toBe(
+      '25 FLUID.ELECTRICITY.UNIT'
+    )
+    expect(wrapper.find('.price').last().text()).toBe(
+      '4340 FLUID.ELECTRICITY.UNIT'
+    )
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -132,18 +106,12 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-electricity').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('25 FLUID.ELECTRICITY.UNIT')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('3906 FLUID.ELECTRICITY.UNIT')
+    expect(wrapper.find('.price').first().text()).toBe(
+      '25 FLUID.ELECTRICITY.UNIT'
+    )
+    expect(wrapper.find('.price').last().text()).toBe(
+      '3906 FLUID.ELECTRICITY.UNIT'
+    )
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -163,18 +131,10 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-electricity').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('analysis.not_connected')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
+    expect(wrapper.find('.price').first().text()).toBe('analysis.not_connected')
+    expect(wrapper.find('.price').last().text()).toBe(
+      '4340 FLUID.ELECTRICITY.UNIT'
+    )
     expect(wrapper.find('.graph').exists()).toBeFalsy()
     expect(wrapper.find('.not-connected').exists()).toBeTruthy()
   })
@@ -194,18 +154,10 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-electricity').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('-')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
+    expect(wrapper.find('.price').first().text()).toBe('-')
+    expect(wrapper.find('.price').last().text()).toBe(
+      '4340 FLUID.ELECTRICITY.UNIT'
+    )
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -237,18 +189,12 @@ describe('AnalysisConsumptionRow component', () => {
       />
     )
     expect(wrapper.find('.consumption-electricity').exists()).toBeTruthy()
-    expect(
-      wrapper
-        .find('.price')
-        .first()
-        .text()
-    ).toBe('25 FLUID.ELECTRICITY.UNIT')
-    expect(
-      wrapper
-        .find('.price')
-        .last()
-        .text()
-    ).toBe('50 FLUID.ELECTRICITY.UNIT')
+    expect(wrapper.find('.price').first().text()).toBe(
+      '25 FLUID.ELECTRICITY.UNIT'
+    )
+    expect(wrapper.find('.price').last().text()).toBe(
+      '50 FLUID.ELECTRICITY.UNIT'
+    )
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
diff --git a/src/components/Analysis/AnalysisConsumptionRow.tsx b/src/components/Analysis/AnalysisConsumptionRow.tsx
index 405dd753585707d8d499dfbe006da307c0bbe4df..e3830ee19ffd749cd38e36aa9123d00774f2a706 100644
--- a/src/components/Analysis/AnalysisConsumptionRow.tsx
+++ b/src/components/Analysis/AnalysisConsumptionRow.tsx
@@ -98,9 +98,11 @@ const AnalysisConsumptionRow: React.FC<AnalysisConsumptionRowProps> = ({
     if (_fluid === FluidType.MULTIFLUID) {
       return `${(userPriceConsumption / maxPriceConsumption) * 100}%`
     } else {
-      return `${(converterService.LoadToEuro(performanceValue || 0, _fluid) /
-        maxPriceConsumption) *
-        100}%`
+      return `${
+        (converterService.LoadToEuro(performanceValue || 0, _fluid) /
+          maxPriceConsumption) *
+        100
+      }%`
     }
   }
 
diff --git a/src/components/Analysis/AnalysisError.spec.tsx b/src/components/Analysis/AnalysisError.spec.tsx
index 2b44b6209c4fd0b89e34212345f1eca13e96f1a5..efd24091194803c39bbc3b6813ce30bdb31e5a79 100644
--- a/src/components/Analysis/AnalysisError.spec.tsx
+++ b/src/components/Analysis/AnalysisError.spec.tsx
@@ -56,10 +56,7 @@ describe('AnalysisErrorModal component', () => {
         <AnalysisErrorModal />
       </Provider>
     )
-    wrapper
-      .find('.btn-secondary-positive')
-      .first()
-      .simulate('click')
+    wrapper.find('.btn-secondary-positive').first().simulate('click')
   })
   it('should redirect to options', () => {
     const store = mockStore({
@@ -73,9 +70,6 @@ describe('AnalysisErrorModal component', () => {
         <AnalysisErrorModal />
       </Provider>
     )
-    wrapper
-      .find('.btn-highlight')
-      .first()
-      .simulate('click')
+    wrapper.find('.btn-highlight').first().simulate('click')
   })
 })
diff --git a/src/components/Analysis/AnalysisErrorModal.tsx b/src/components/Analysis/AnalysisErrorModal.tsx
index 61c5a1a6e96f842ae6288d3ffab64ed1e1ae99b7..b83f392cc47e95dddae6ad5b8769952397c32d69 100644
--- a/src/components/Analysis/AnalysisErrorModal.tsx
+++ b/src/components/Analysis/AnalysisErrorModal.tsx
@@ -19,9 +19,10 @@ const AnalysisErrorModal: React.FC = () => {
   return (
     <Dialog
       open={true}
-      disableBackdropClick
+      onClose={(event, reason): void => {
+        event && reason !== 'backdropClick' && goBack()
+      }}
       disableEscapeKeyDown
-      onClose={goBack}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/Analysis/AnalysisView.spec.tsx b/src/components/Analysis/AnalysisView.spec.tsx
index 286f6cf6b1da754e00ebf01abd88085f258e5790..e3c5062d544c10835394610a6af00cb96ea3e24b 100644
--- a/src/components/Analysis/AnalysisView.spec.tsx
+++ b/src/components/Analysis/AnalysisView.spec.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/display-name */
 import React from 'react'
 import { mount } from 'enzyme'
 import * as reactRedux from 'react-redux'
diff --git a/src/components/Analysis/AnalysisView.tsx b/src/components/Analysis/AnalysisView.tsx
index 9ca28b01cd1cfcda03f8c091b997801b7a216dde..5e427339814e260898b1689f616628e4e9236927 100644
--- a/src/components/Analysis/AnalysisView.tsx
+++ b/src/components/Analysis/AnalysisView.tsx
@@ -25,9 +25,8 @@ const AnalysisView: React.FC = () => {
   } = useSelector((state: AppStore) => state.ecolyo)
 
   const { selectedDate } = useSelector((state: AppStore) => state.ecolyo.chart)
-  const [currentAnalysisDate, setCurrentAnalysisDate] = useState<DateTime>(
-    monthlyAnalysisDate
-  )
+  const [currentAnalysisDate, setCurrentAnalysisDate] =
+    useState<DateTime>(monthlyAnalysisDate)
   const { mailToken } = useSelector((state: AppStore) => state.ecolyo.profile)
   const dispatch = useDispatch()
 
diff --git a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.spec.tsx b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.spec.tsx
index 299d2a4da67c4bdb964de2cc7608efca9c4dc1fe..02cfa8bca48d4c991fbeafdef5040fc8fb59bf77 100644
--- a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.spec.tsx
+++ b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.spec.tsx
@@ -126,10 +126,7 @@ describe('ElecHalfHourMonthlyAnalysis component', () => {
       />
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(IconButton)
-      .first()
-      .simulate('click')
+    wrapper.find(IconButton).first().simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(wrapper.find('.week').exists()).toBeTruthy()
   })
@@ -153,16 +150,10 @@ describe('ElecHalfHourMonthlyAnalysis component', () => {
       />
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find('.showmodal')
-      .first()
-      .simulate('click')
+    wrapper.find('.showmodal').first().simulate('click')
     await waitForComponentToPaint(wrapper)
-    expect(
-      wrapper
-        .find('mock-elecinfomodal')
-        .prop('open')
-        ?.valueOf()
-    ).toBe(true)
+    expect(wrapper.find('mock-elecinfomodal').prop('open')?.valueOf()).toBe(
+      true
+    )
   })
 })
diff --git a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
index e93d9fc31cbed610adf8676d93330ae83340ccc7..644dcd3fab609c92cc504179649b0d3e17b07b38 100644
--- a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
+++ b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
@@ -35,10 +35,9 @@ interface ElecHalfHourMonthlyAnalysisProps {
   perfIndicator: PerformanceIndicator
 }
 
-const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> = ({
-  analysisDate,
-  perfIndicator,
-}: ElecHalfHourMonthlyAnalysisProps) => {
+const ElecHalfHourMonthlyAnalysis: React.FC<
+  ElecHalfHourMonthlyAnalysisProps
+> = ({ analysisDate, perfIndicator }: ElecHalfHourMonthlyAnalysisProps) => {
   const { t } = useI18n()
   const client = useClient()
   const fluidConfig: Array<FluidConfig> = new ConfigService().getFluidConfig()
@@ -46,12 +45,10 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> =
   const [isWeekend, setisWeekend] = useState<boolean>(true)
   const [isHalfHourActivated, setisHalfHourActivated] = useState<boolean>(true)
   const [isLoading, setisLoading] = useState<boolean>(true)
-  const [monthDataloads, setMonthDataloads] = useState<
-    AggregatedEnedisMonthlyDataloads
-  >()
-  const [enedisAnalysisValues, setenedisAnalysisValues] = useState<
-    EnedisMonthlyAnalysisData
-  >()
+  const [monthDataloads, setMonthDataloads] =
+    useState<AggregatedEnedisMonthlyDataloads>()
+  const [enedisAnalysisValues, setenedisAnalysisValues] =
+    useState<EnedisMonthlyAnalysisData>()
   const [facturePercentage, setFacturePercentage] = useState<number>()
   const [elecPrice, setElecPrice] = useState<FluidPrice>()
   const [openInfoModal, setOpenInfoModal] = useState<boolean>(false)
@@ -63,6 +60,24 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> =
   const toggleOpenModal = useCallback(() => {
     setOpenInfoModal(prev => !prev)
   }, [])
+  const getPowerChart = useCallback((): JSX.Element => {
+    if (
+      monthDataloads &&
+      monthDataloads.weekend &&
+      monthDataloads.week &&
+      monthDataloads.weekend[0] !== null &&
+      monthDataloads.week[0] !== null
+    ) {
+      return (
+        <ElecHalfHourChart
+          dataLoad={isWeekend ? monthDataloads.weekend : monthDataloads.week}
+          isWeekend={isWeekend}
+        />
+      )
+    } else {
+      return <p className={`text-20-bold no_data`}>{t('analysis.no_data')}</p>
+    }
+  }, [isWeekend, monthDataloads, t])
 
   useEffect(() => {
     let subscribed = true
@@ -76,10 +91,11 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> =
         if (activateHalfHourLoad) {
           const emas = new EnedisMonthlyAnalysisDataService(client)
           const aggegatedDate = analysisDate.minus({ month: 1 })
-          const data: EnedisMonthlyAnalysisData[] = await emas.getEnedisMonthlyAnalysisByDate(
-            aggegatedDate.year,
-            aggegatedDate.month
-          )
+          const data: EnedisMonthlyAnalysisData[] =
+            await emas.getEnedisMonthlyAnalysisByDate(
+              aggegatedDate.year,
+              aggegatedDate.month
+            )
           if (subscribed && data && data.length) {
             const aggregatedData = emas.aggregateValuesToDataLoad(data[0])
             setenedisAnalysisValues(data[0])
@@ -160,18 +176,7 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> =
           </div>
           {!isLoading ? (
             <>
-              {monthDataloads ? (
-                <ElecHalfHourChart
-                  dataLoad={
-                    isWeekend ? monthDataloads.weekend : monthDataloads.week
-                  }
-                  isWeekend={isWeekend}
-                />
-              ) : (
-                <p className={`text-20-bold no_data`}>
-                  {t('analysis.no_data')}
-                </p>
-              )}
+              {getPowerChart()}
               {enedisAnalysisValues && (
                 <div className="min-max">
                   <div className="container">
@@ -215,7 +220,7 @@ const ElecHalfHourMonthlyAnalysis: React.FC<ElecHalfHourMonthlyAnalysisProps> =
                             <span className="text-18-normal"> %</span>
                           </div>
                           <div className="text-18-bold">
-                            {elecPrice
+                            {elecPrice && elecPrice.price
                               ? (
                                   enedisAnalysisValues.minimumLoad *
                                   elecPrice.price
diff --git a/src/components/Analysis/MaxConsumptionCard.spec.tsx b/src/components/Analysis/MaxConsumptionCard.spec.tsx
index bf2cf699dd5406776c9e7904849120c106294235..2ddf41589a393cecfcbc066aae5d5efaff276123 100644
--- a/src/components/Analysis/MaxConsumptionCard.spec.tsx
+++ b/src/components/Analysis/MaxConsumptionCard.spec.tsx
@@ -79,26 +79,14 @@ describe('MaxConsumptionCard component', () => {
     )
     expect(wrapper.find('.arrow-next').exists()).toBeTruthy()
     //navigate next
-    wrapper
-      .find('.arrow-next')
-      .first()
-      .simulate('click')
+    wrapper.find('.arrow-next').first().simulate('click')
     expect(wrapper.find('.fluid').text()).toBe('FLUID.GAS.LABEL')
-    wrapper
-      .find('.arrow-next')
-      .first()
-      .simulate('click')
+    wrapper.find('.arrow-next').first().simulate('click')
     expect(wrapper.find('.fluid').text()).toBe('FLUID.ELECTRICITY.LABEL')
     //navigate prev
-    wrapper
-      .find('.arrow-prev')
-      .first()
-      .simulate('click')
+    wrapper.find('.arrow-prev').first().simulate('click')
     expect(wrapper.find('.fluid').text()).toBe('FLUID.GAS.LABEL')
-    wrapper
-      .find('.arrow-prev')
-      .first()
-      .simulate('click')
+    wrapper.find('.arrow-prev').first().simulate('click')
     expect(wrapper.find('.fluid').text()).toBe('FLUID.ELECTRICITY.LABEL')
   })
 })
diff --git a/src/components/Analysis/MonthlyAnalysis.tsx b/src/components/Analysis/MonthlyAnalysis.tsx
index 9349cf5284c3193003ea010af02042a8d2ecb846..4f7287762b7246b6a910a68bf6a061dadefa2b96 100644
--- a/src/components/Analysis/MonthlyAnalysis.tsx
+++ b/src/components/Analysis/MonthlyAnalysis.tsx
@@ -36,14 +36,12 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
     PerformanceIndicator[]
   >([])
   const [loadAnalysis, setLoadAnalysis] = useState<boolean>(false)
-  const [
-    aggregatedPerformanceIndicators,
-    setAggregatedPerformanceIndicators,
-  ] = useState<PerformanceIndicator>({
-    value: 0,
-    compareValue: 0,
-    percentageVariation: 0,
-  })
+  const [aggregatedPerformanceIndicators, setAggregatedPerformanceIndicators] =
+    useState<PerformanceIndicator>({
+      value: 0,
+      compareValue: 0,
+      percentageVariation: 0,
+    })
   const [isLoaded, setIsLoaded] = useState<boolean>(false)
   const configService = new ConfigService()
   const fluidConfig = configService.getFluidConfig()
@@ -66,12 +64,13 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
             endDate: analysisDate.minus({ month: 2 }).endOf('month'),
           },
         }
-        const fetchedPerformanceIndicators = await consumptionService.getPerformanceIndicators(
-          periods.timePeriod,
-          timeStep,
-          fluidTypes,
-          periods.comparisonTimePeriod
-        )
+        const fetchedPerformanceIndicators =
+          await consumptionService.getPerformanceIndicators(
+            periods.timePeriod,
+            timeStep,
+            fluidTypes,
+            periods.comparisonTimePeriod
+          )
         if (subscribed) {
           if (fetchedPerformanceIndicators) {
             setPerformanceIndicators(fetchedPerformanceIndicators)
diff --git a/src/components/Analysis/__snapshots__/ElecHalfHourMonthlyAnalysis.spec.tsx.snap b/src/components/Analysis/__snapshots__/ElecHalfHourMonthlyAnalysis.spec.tsx.snap
index 3e66e5b70ea8e852ea46c8d5b18f7bdf2b35e28b..28a533d97ce044334a6213acf0d79b18e3bf25ec 100644
--- a/src/components/Analysis/__snapshots__/ElecHalfHourMonthlyAnalysis.spec.tsx.snap
+++ b/src/components/Analysis/__snapshots__/ElecHalfHourMonthlyAnalysis.spec.tsx.snap
@@ -192,36 +192,34 @@ exports[`ElecHalfHourMonthlyAnalysis component should be rendered correctly when
                   </div>
                 </div>
               </span>
-              <NoSsr>
-                <WithStyles(memo)
+              <WithStyles(memo)
+                center={false}
+              >
+                <ForwardRef(TouchRipple)
                   center={false}
-                >
-                  <ForwardRef(TouchRipple)
-                    center={false}
-                    classes={
-                      Object {
-                        "child": "MuiTouchRipple-child",
-                        "childLeaving": "MuiTouchRipple-childLeaving",
-                        "childPulsate": "MuiTouchRipple-childPulsate",
-                        "ripple": "MuiTouchRipple-ripple",
-                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                        "rippleVisible": "MuiTouchRipple-rippleVisible",
-                        "root": "MuiTouchRipple-root",
-                      }
+                  classes={
+                    Object {
+                      "child": "MuiTouchRipple-child",
+                      "childLeaving": "MuiTouchRipple-childLeaving",
+                      "childPulsate": "MuiTouchRipple-childPulsate",
+                      "ripple": "MuiTouchRipple-ripple",
+                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                      "rippleVisible": "MuiTouchRipple-rippleVisible",
+                      "root": "MuiTouchRipple-root",
                     }
+                  }
+                >
+                  <span
+                    className="MuiTouchRipple-root"
                   >
-                    <span
-                      className="MuiTouchRipple-root"
-                    >
-                      <TransitionGroup
-                        childFactory={[Function]}
-                        component={null}
-                        exit={true}
-                      />
-                    </span>
-                  </ForwardRef(TouchRipple)>
-                </WithStyles(memo)>
-              </NoSsr>
+                    <TransitionGroup
+                      childFactory={[Function]}
+                      component={null}
+                      exit={true}
+                    />
+                  </span>
+                </ForwardRef(TouchRipple)>
+              </WithStyles(memo)>
             </button>
           </ForwardRef(ButtonBase)>
         </WithStyles(ForwardRef(ButtonBase))>
@@ -374,36 +372,34 @@ exports[`ElecHalfHourMonthlyAnalysis component should be rendered correctly when
                     </Component>
                   </Icon>
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={true}
+                >
+                  <ForwardRef(TouchRipple)
                     center={true}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={true}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
@@ -521,45 +517,45 @@ exports[`ElecHalfHourMonthlyAnalysis component should be rendered correctly when
                     </Component>
                   </Icon>
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={true}
+                >
+                  <ForwardRef(TouchRipple)
                     center={true}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={true}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
         </ForwardRef(IconButton)>
       </WithStyles(ForwardRef(IconButton))>
     </div>
-    <mock-elechalfhourchart
-      isWeekend={true}
-    />
+    <p
+      className="text-20-bold no_data"
+    >
+      analysis.no_data
+    </p>
     <div
       className="min-max"
     >
diff --git a/src/components/Analysis/__snapshots__/ElecInfoModal.spec.tsx.snap b/src/components/Analysis/__snapshots__/ElecInfoModal.spec.tsx.snap
index de76327d5dce258bb938a4feb475ed28aae917d7..d77706c0830547b97016cdb499cc9751fc49dbf1 100644
--- a/src/components/Analysis/__snapshots__/ElecInfoModal.spec.tsx.snap
+++ b/src/components/Analysis/__snapshots__/ElecInfoModal.spec.tsx.snap
@@ -96,12 +96,17 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -361,7 +366,6 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -554,7 +558,7 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -604,8 +608,8 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -761,36 +765,34 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -836,7 +838,7 @@ exports[`ElecInfoModal component should be rendered correctly 1`] = `
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/App.tsx b/src/components/App.tsx
index 86d54f5d42de5d53ecbbe39e9a760de279aea935..2877180faca003b9ef1c3cd4f465b6c49fbc3e9e 100644
--- a/src/components/App.tsx
+++ b/src/components/App.tsx
@@ -1,7 +1,5 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-import React from 'react'
+import React, { useEffect } from 'react'
 import { HashRouter } from 'react-router-dom'
-import { createBrowserHistory } from 'history'
 import { Layout, Main, Content } from 'cozy-ui/transpiled/react/Layout'
 import { useSelector } from 'react-redux'
 import { AppStore } from 'store'
@@ -12,14 +10,30 @@ import SplashRoot from 'components/Splash/SplashRoot'
 import SplashScreen from 'components/Splash/SplashScreen'
 import SplashScreenError from 'components/Splash/SplashScreenError'
 import WelcomeModal from 'components/Onboarding/WelcomeModal'
+import MatomoTracker from 'utils/matomoTracker'
+import EnvironmentService from 'services/environment.service'
 
-export const history = createBrowserHistory()
+interface AppProps {
+  tracker: MatomoTracker
+}
 
-export const App = () => {
+export const App = ({ tracker }: AppProps) => {
   const { onboarding, isProfileEcogestureCompleted } = useSelector(
     (state: AppStore) => state.ecolyo.profile
   )
   const { termsStatus } = useSelector((state: AppStore) => state.ecolyo.global)
+  const isDev = new EnvironmentService().isLocal()
+
+  useEffect(() => {
+    if (tracker && !isDev) {
+      if (termsStatus.accepted) {
+        tracker.connectToHistory()
+      }
+      return () => {
+        tracker.disconnectFromHistory()
+      }
+    }
+  }, [termsStatus.accepted, tracker, isDev])
 
   return (
     <HashRouter {...history}>
diff --git a/src/components/Challenge/ChallengeCard.tsx b/src/components/Challenge/ChallengeCard.tsx
index 852f3395f068d089e0d07c9335d1a028ff9001ae..6336cc75b7e92c9d2cf094248d5b6b63f893628e 100644
--- a/src/components/Challenge/ChallengeCard.tsx
+++ b/src/components/Challenge/ChallengeCard.tsx
@@ -6,13 +6,15 @@ import ChallengeCardLocked from './ChallengeCardLocked'
 import ChallengeCardOnGoing from './ChallengeCardOnGoing'
 import ChallengeCardUnlocked from './ChallengeCardUnlocked'
 import './challengeCard.scss'
+import ChallengeCardLast from './ChallengeCardLast'
 
 interface ChallengeCardProps {
-  userChallenge: UserChallenge
+  userChallenge?: UserChallenge
   indexSlider: number
   index: number
   cardWidth: number
   cardHeight: number
+  isChallengeCardLast: boolean
   moveToSlide: (slideIndex: number) => void
 }
 
@@ -22,10 +24,12 @@ const ChallengeCard: React.FC<ChallengeCardProps> = ({
   index,
   cardWidth,
   cardHeight,
+  isChallengeCardLast,
   moveToSlide,
 }: ChallengeCardProps) => {
-  const renderCard = (state: UserChallengeState) => {
-    switch (state) {
+  const renderCard = (userChallenge: UserChallenge | undefined) => {
+    if (!userChallenge || isChallengeCardLast) return <ChallengeCardLast />
+    switch (userChallenge.state) {
       case UserChallengeState.LOCKED:
         return <ChallengeCardLocked userChallenge={userChallenge} />
       case UserChallengeState.UNLOCKED:
@@ -50,7 +54,7 @@ const ChallengeCard: React.FC<ChallengeCardProps> = ({
         height: `${cardHeight}px`,
       }}
     >
-      {renderCard(userChallenge.state)}
+      {renderCard(userChallenge)}
     </div>
   )
 }
diff --git a/src/components/Challenge/ChallengeCardDone.tsx b/src/components/Challenge/ChallengeCardDone.tsx
index cdb4ec3e6fef4f618214585842bbe490b03d3e98..9bcb3e36f99ffc04327b8fb64df99d6429681a64 100644
--- a/src/components/Challenge/ChallengeCardDone.tsx
+++ b/src/components/Challenge/ChallengeCardDone.tsx
@@ -8,6 +8,8 @@ import { UserChallengeSuccess } from 'enum/userChallenge.enum'
 import { DateTime } from 'luxon'
 import defaultIcon from 'assets/icons/visu/duelResult/default.svg'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import { useHistory } from 'react-router-dom'
+import { Button } from '@material-ui/core'
 
 interface ChallengeCardDoneProps {
   userChallenge: UserChallenge
@@ -17,46 +19,17 @@ const ChallengeCardDone: React.FC<ChallengeCardDoneProps> = ({
   userChallenge,
 }: ChallengeCardDoneProps) => {
   const { t } = useI18n()
+  const history = useHistory()
   const [winIcon, setWinIcon] = useState<string>(defaultIcon)
   const [lossIcon, setLossIcon] = useState<string>(defaultIcon)
 
-  // TODO Use pluarality of I18n
-  const getNumberDayProgress = (_userChallenge: UserChallenge) => {
-    if (
-      _userChallenge.startDate !== null &&
-      _userChallenge.endingDate !== null
-    ) {
-      const startDate: DateTime = _userChallenge.startDate
-      const endDate: DateTime = _userChallenge.endingDate
-
-      const delta = endDate.diff(startDate, 'days').toObject()
-      if (delta && delta.days !== undefined) {
-        delta.days = Math.round(delta.days + 1)
-        const label =
-          delta.days == 1
-            ? t('challenge.card_done.day')
-            : t('challenge.card_done.days')
-        return ' ' + delta.days + ' ' + label
-      }
-    } else return ''
-  }
-
   const getUserSaving = (_userChallenge: UserChallenge) => {
     let label
     if (_userChallenge.success === UserChallengeSuccess.WIN)
       label = t('challenge.card_done.saving')
     else label = t('challenge.card_done.depense')
 
-    return (
-      label +
-      ' ' +
-      formatNumberValues(
-        Math.abs(
-          _userChallenge.duel.threshold - _userChallenge.duel.userConsumption
-        )
-      ) +
-      '€'
-    )
+    return label + ' '
   }
 
   const getResultLabel = (_userChallenge: UserChallenge) => {
@@ -64,6 +37,7 @@ const ChallengeCardDone: React.FC<ChallengeCardDoneProps> = ({
       case UserChallengeSuccess.WIN:
         return t('challenge.card_done.win')
       case UserChallengeSuccess.LOST:
+      default:
         return t('challenge.card_done.lost')
     }
   }
@@ -73,6 +47,10 @@ const ChallengeCardDone: React.FC<ChallengeCardDoneProps> = ({
     else return lossIcon
   }
 
+  const goDuel = async () => {
+    history.push('/challenges/duel?id=' + userChallenge.id)
+  }
+
   useEffect(() => {
     async function handleEcogestureIcon() {
       const icon = await importIconbyId(userChallenge.id + '-1', 'duelResult')
@@ -93,7 +71,7 @@ const ChallengeCardDone: React.FC<ChallengeCardDoneProps> = ({
 
   return (
     <div className="cardContent cardDone">
-      <div className="challengeName text-20-bold">
+      <div className="challengeName text-22-bold">
         {userChallenge.duel.title}
       </div>
       <div className="iconResult">
@@ -103,32 +81,40 @@ const ChallengeCardDone: React.FC<ChallengeCardDoneProps> = ({
           size={180}
         />
       </div>
-      <div
-        className={classNames('labelResult', {
-          ['win']: userChallenge.success === UserChallengeSuccess.WIN,
-          ['lost']: userChallenge.success === UserChallengeSuccess.LOST,
-        })}
-      >
-        {getResultLabel(userChallenge)}
-      </div>
       <div className="statsResult">
-        <span className="text-18-bold">
-          {userChallenge.progress.actionProgress +
-            userChallenge.progress.explorationProgress +
-            userChallenge.progress.quizProgress}
-          {t('challenge.card_done.stars')}
+        <div
+          className={classNames('labelResult', {
+            ['win']: userChallenge.success === UserChallengeSuccess.WIN,
+            ['lost']: userChallenge.success === UserChallengeSuccess.LOST,
+          })}
+        >
+          {getResultLabel(userChallenge)}
+        </div>
+        <span className="text-18">
+          {getUserSaving(userChallenge)}
+          <span className="text-18-bold">
+            {formatNumberValues(
+              Math.abs(
+                userChallenge.duel.threshold -
+                  userChallenge.duel.userConsumption
+              )
+            ) + ' '}
+            €
+          </span>
+          <br />
+          {t('challenge.card_done.final_defi')}
         </span>
-        <br />
-        {t('challenge.card_done.get_in')}
-        <span className="text-18-bold">
-          {getNumberDayProgress(userChallenge)}
-        </span>
-        <br />
-        <br />
-        <span className="text-18-bold">{getUserSaving(userChallenge)}</span>
-        <br />
-        {t('challenge.card_done.final_defi')}
       </div>
+      <Button
+        aria-label={t('challenge.card_done.final_defi_view')}
+        onClick={goDuel}
+        classes={{
+          root: 'btn-secondary-negative review-btn',
+          label: 'text-15-bold',
+        }}
+      >
+        {t('challenge.card_done.final_defi_view')}
+      </Button>
     </div>
   )
 }
diff --git a/src/components/Challenge/ChallengeCardLast.spec.tsx b/src/components/Challenge/ChallengeCardLast.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..68b0c68149f6f47706cecf0809fba50836e6f954
--- /dev/null
+++ b/src/components/Challenge/ChallengeCardLast.spec.tsx
@@ -0,0 +1,34 @@
+import React from 'react'
+import { mount } from 'enzyme'
+import ChallengeCardLast from './ChallengeCardLast'
+import { Provider } from 'react-redux'
+import configureStore from 'redux-mock-store'
+import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
+
+jest.mock('cozy-ui/transpiled/react/I18n', () => {
+  return {
+    useI18n: jest.fn(() => {
+      return {
+        t: (str: string) => str,
+      }
+    }),
+  }
+})
+
+const mockStore = configureStore([])
+
+describe('ChallengeCardLast component', () => {
+  it('should be rendered correctly', () => {
+    const store = mockStore({
+      ecolyo: {
+        global: globalStateData,
+      },
+    })
+    const wrapper = mount(
+      <Provider store={store}>
+        <ChallengeCardLast />
+      </Provider>
+    )
+    expect(wrapper).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Challenge/ChallengeCardLast.tsx b/src/components/Challenge/ChallengeCardLast.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..345753b9662de26739f3db7b74f15497b461f5c4
--- /dev/null
+++ b/src/components/Challenge/ChallengeCardLast.tsx
@@ -0,0 +1,49 @@
+import React from 'react'
+import './challengeCardLast.scss'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import ecolyoIcon from 'assets/icons/visu/challenge/ecolyo.svg'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import { Button } from '@material-ui/core'
+import { updateModalIsFeedbacksOpen } from 'store/modal/modal.actions'
+import { useDispatch } from 'react-redux'
+
+interface ChallengeCardLastProps {}
+
+const ChallengeCardLast: React.FC = () => {
+  const { t } = useI18n()
+  const dispatch = useDispatch()
+
+  const handleClickFeedbacks = (): void => {
+    dispatch(updateModalIsFeedbacksOpen(true))
+  }
+
+  return (
+    <div className="cardLast">
+      <StyledIcon icon={ecolyoIcon} size={62} />
+      <div className="content">
+        <div className="text-22-bold title-last">
+          {t('challenge.card_last.title')}
+        </div>
+        <div className="text-18-normal message">
+          {t('challenge.card_last.message1')}
+        </div>
+        <div className="text-18-normal message">
+          {t('challenge.card_last.message2')}
+        </div>
+      </div>
+      <Button
+        aria-label={t('challenge.card_last.button')}
+        onClick={handleClickFeedbacks}
+        className="btn1"
+        classes={{
+          root: 'btn-secondary-negative btn_lastCard',
+          label: 'text-15-bold',
+        }}
+      >
+        {t('challenge.card_last.button')}
+      </Button>
+    </div>
+  )
+}
+
+export default ChallengeCardLast
diff --git a/src/components/Challenge/ChallengeCardOnGoing.tsx b/src/components/Challenge/ChallengeCardOnGoing.tsx
index 6bdb08685301b261b2f427e43df06265098d97f9..25388104f9af31a5870a45002f7c9b249acecd68 100644
--- a/src/components/Challenge/ChallengeCardOnGoing.tsx
+++ b/src/components/Challenge/ChallengeCardOnGoing.tsx
@@ -65,7 +65,7 @@ const ChallengeCardOnGoing: React.FC<ChallengeCardOnGoingProps> = ({
         dispatch(updateUserChallengeList(updatedChallenge))
       }
       setIsLoading(false)
-      history.push('/challenges/duel')
+      history.push('/challenges/duel?id=' + userChallenge.id)
     } else {
       setIsLoading(false)
       toggleNoFluidModal()
@@ -271,10 +271,11 @@ const ChallengeCardOnGoing: React.FC<ChallengeCardOnGoingProps> = ({
         <div className={'smallCard duelCard'}>
           <p className="starCount">
             <StyledIcon icon={circleStar} size={30} />
-            <span className="blueNumber">{`${userChallenge.progress
-              .quizProgress +
+            <span className="blueNumber">{`${
+              userChallenge.progress.quizProgress +
               userChallenge.progress.explorationProgress +
-              userChallenge.progress.actionProgress}  `}</span>
+              userChallenge.progress.actionProgress
+            }  `}</span>
             <span>{` / ${userChallenge.target}`}</span>
           </p>
           <StyledIcon className="duelLocked" icon={duelLocked} size={60} />
diff --git a/src/components/Challenge/ChallengeCardUnlocked.spec.tsx b/src/components/Challenge/ChallengeCardUnlocked.spec.tsx
index f90d1834703b5f467bfe866b9afa1fd83b6168f1..22c9a2f9d376cfc4da5c088bf102268b51593210 100644
--- a/src/components/Challenge/ChallengeCardUnlocked.spec.tsx
+++ b/src/components/Challenge/ChallengeCardUnlocked.spec.tsx
@@ -68,10 +68,7 @@ describe('ChallengeCardUnlocked component', () => {
         <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
       </Provider>
     )
-    wrapper
-      .find('.btn-duel-active')
-      .first()
-      .simulate('click')
+    wrapper.find('.btn-duel-active').first().simulate('click')
     expect(wrapper.find(ChallengeNoFluidModal).exists()).toBeTruthy()
     expect(wrapper.find(ChallengeNoFluidModal).prop('open')).toBeTruthy()
   })
@@ -92,10 +89,7 @@ describe('ChallengeCardUnlocked component', () => {
         <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
       </Provider>
     )
-    wrapper
-      .find('.btn-duel-active')
-      .first()
-      .simulate('click')
+    wrapper.find('.btn-duel-active').first().simulate('click')
     expect(wrapper.find(ChallengeNoFluidModal).exists()).toBeTruthy()
     expect(wrapper.find(ChallengeNoFluidModal).prop('open')).toBeFalsy()
     expect(mockStartUserChallenge).toHaveBeenCalledWith(userChallengeData[0])
diff --git a/src/components/Challenge/ChallengeNoFluidModal.tsx b/src/components/Challenge/ChallengeNoFluidModal.tsx
index 614a3ccf5a85666c4c275f9bd406211a4ef8ccd6..b9d5ff8cc8b6c48189cb9a1f2f6cbb305bc9cbed 100644
--- a/src/components/Challenge/ChallengeNoFluidModal.tsx
+++ b/src/components/Challenge/ChallengeNoFluidModal.tsx
@@ -18,9 +18,10 @@ const ChallengeNoFluidModal: React.FC<ChallengeNoFluidModalProps> = ({
   return (
     <Dialog
       open={open}
-      disableBackdropClick
       disableEscapeKeyDown
-      onClose={handleCloseClick}
+      onClose={(event, reason): void => {
+        event && reason !== 'backdropClick' && handleCloseClick()
+      }}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/Challenge/ChallengeView.spec.tsx b/src/components/Challenge/ChallengeView.spec.tsx
index aff70fdae981e3f9fbc59c88497c74ce3c47d6e7..1e33a61329085affa7c19b006327cbb235a5dc19 100644
--- a/src/components/Challenge/ChallengeView.spec.tsx
+++ b/src/components/Challenge/ChallengeView.spec.tsx
@@ -1,8 +1,13 @@
 import React from 'react'
-import { shallow } from 'enzyme'
+import { mount } from 'enzyme'
+import toJson from 'enzyme-to-json'
 import ChallengeView from 'components/Challenge/ChallengeView'
 import * as reactRedux from 'react-redux'
 import { challengeStateDataFull } from '../../../tests/__mocks__/challengeStateData.mock'
+import {
+  createMockStore,
+  mockInitialEcolyoState,
+} from '../../../tests/__mocks__/store'
 
 const mockUseSelector = jest.spyOn(reactRedux, 'useSelector')
 
@@ -16,10 +21,28 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
   }
 })
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
+jest.mock('components/Challenge/ChallengeCard', () => 'mock-challengecard')
+
+const useSelectorSpy = jest.spyOn(reactRedux, 'useSelector')
+
 describe('ChallengeView component', () => {
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  let store: any
+  beforeEach(() => {
+    store = createMockStore(mockInitialEcolyoState)
+    useSelectorSpy.mockClear()
+  })
+
   it('should be rendered correctly', () => {
     mockUseSelector.mockReturnValue(challengeStateDataFull)
-    const component = shallow(<ChallengeView />).getElement()
-    expect(component).toMatchSnapshot()
+    const wrapper = mount(
+      <reactRedux.Provider store={store}>
+        <ChallengeView />
+      </reactRedux.Provider>
+    )
+    expect(toJson(wrapper)).toMatchSnapshot()
   })
 })
diff --git a/src/components/Challenge/ChallengeView.tsx b/src/components/Challenge/ChallengeView.tsx
index 0b1c7d76c21944b23b22e47d80bf9e35fcad4221..aaa1b27e4014761c84fd12d0b25046e53c9e480a 100644
--- a/src/components/Challenge/ChallengeView.tsx
+++ b/src/components/Challenge/ChallengeView.tsx
@@ -31,9 +31,9 @@ const ChallengeView: React.FC = () => {
   const [touchEnd, setTouchEnd] = useState<number>()
   const [index, setindex] = useState<number>(0)
   const [lastChallengeIndex, setlastChallengeIndex] = useState<number>(0)
-  const [containerTranslation, setcontainerTranslation] = useState<number>(
-    marginPx
-  )
+  const [isLastDuelDone, setIsLastDuelDone] = useState<boolean>(false)
+  const [containerTranslation, setcontainerTranslation] =
+    useState<number>(marginPx)
   const defineHeaderHeight = (height: number) => {
     setHeaderHeight(height)
   }
@@ -45,7 +45,10 @@ const ChallengeView: React.FC = () => {
   }
 
   const moveSliderRight = useCallback(() => {
-    if (index < userChallengeList.length - 1) {
+    if (
+      index < userChallengeList.length - 1 ||
+      (isLastDuelDone && index < userChallengeList.length)
+    ) {
       if (index === 0)
         setcontainerTranslation(
           (prev: number) => prev - cardWitdh - marginPx * 1.2
@@ -124,10 +127,22 @@ const ChallengeView: React.FC = () => {
             0 - cardWitdh * lastChallengeIndex - marginPx * 1.2
           )
         }
+        if (isLastDuelDone) {
+          setlastChallengeIndex(i + 1)
+        }
         setindex(i)
       }
     })
-  }, [userChallengeList, lastChallengeIndex, cardWitdh])
+  }, [userChallengeList, lastChallengeIndex, cardWitdh, isLastDuelDone])
+
+  useEffect(() => {
+    if (
+      userChallengeList[userChallengeList.length - 1].state ==
+      UserChallengeState.DONE
+    ) {
+      setIsLastDuelDone(true)
+    }
+  }, [userChallengeList])
 
   return (
     <>
@@ -161,9 +176,21 @@ const ChallengeView: React.FC = () => {
                 index={i}
                 cardWidth={cardWitdh}
                 cardHeight={cardHeight}
+                isChallengeCardLast={false}
                 moveToSlide={moveToSlide}
               />
             ))}
+
+            {isLastDuelDone && (
+              <ChallengeCard
+                indexSlider={index}
+                index={5}
+                cardWidth={cardWitdh}
+                cardHeight={cardHeight}
+                isChallengeCardLast={true}
+                moveToSlide={moveToSlide}
+              />
+            )}
           </div>
         </div>
         <div className="sliderButtons">
diff --git a/src/components/Challenge/__snapshots__/ChallengeCardDone.spec.tsx.snap b/src/components/Challenge/__snapshots__/ChallengeCardDone.spec.tsx.snap
index 5c4a5b38ef2eaaff7577a7bf58f82dc02be446d4..ff1a9be37f62505fd20e7b875e84fa34b3ff37b2 100644
--- a/src/components/Challenge/__snapshots__/ChallengeCardDone.spec.tsx.snap
+++ b/src/components/Challenge/__snapshots__/ChallengeCardDone.spec.tsx.snap
@@ -5,7 +5,7 @@ exports[`ChallengeCardDone component should be rendered correctly 1`] = `
   className="cardContent cardDone"
 >
   <div
-    className="challengeName text-20-bold"
+    className="challengeName text-22-bold"
   >
     Title DUEL001
   </div>
@@ -18,38 +18,41 @@ exports[`ChallengeCardDone component should be rendered correctly 1`] = `
       size={180}
     />
   </div>
-  <div
-    className="labelResult win"
-  >
-    challenge.card_done.win
-  </div>
   <div
     className="statsResult"
   >
-    <span
-      className="text-18-bold"
+    <div
+      className="labelResult win"
     >
-      0
-      challenge.card_done.stars
-    </span>
-    <br />
-    challenge.card_done.get_in
+      challenge.card_done.win
+    </div>
     <span
-      className="text-18-bold"
+      className="text-18"
     >
-      
-    </span>
-    <br />
-    <br />
-    <span
-      className="text-18-bold"
-    >
-      challenge.card_done.saving function () {
+      challenge.card_done.saving 
+      <span
+        className="text-18-bold"
+      >
+        function () {
         return fn.apply(this, arguments);
-      }€
+      } 
+        €
+      </span>
+      <br />
+      challenge.card_done.final_defi
     </span>
-    <br />
-    challenge.card_done.final_defi
   </div>
+  <WithStyles(ForwardRef(Button))
+    aria-label="challenge.card_done.final_defi_view"
+    classes={
+      Object {
+        "label": "text-15-bold",
+        "root": "btn-secondary-negative review-btn",
+      }
+    }
+    onClick={[Function]}
+  >
+    challenge.card_done.final_defi_view
+  </WithStyles(ForwardRef(Button))>
 </div>
 `;
diff --git a/src/components/Challenge/__snapshots__/ChallengeCardLast.spec.tsx.snap b/src/components/Challenge/__snapshots__/ChallengeCardLast.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..efa5167434fb0e24a32c5fca7598b47712b53300
--- /dev/null
+++ b/src/components/Challenge/__snapshots__/ChallengeCardLast.spec.tsx.snap
@@ -0,0 +1,3 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`ChallengeCardLast component should be rendered correctly 1`] = `ReactWrapper {}`;
diff --git a/src/components/Challenge/__snapshots__/ChallengeNoFluidModal.spec.tsx.snap b/src/components/Challenge/__snapshots__/ChallengeNoFluidModal.spec.tsx.snap
index 7ab0df69c4e941122c4543485d603fe762e03181..924173886a3f52fcf8ccf580a5407f05b7494f8d 100644
--- a/src/components/Challenge/__snapshots__/ChallengeNoFluidModal.spec.tsx.snap
+++ b/src/components/Challenge/__snapshots__/ChallengeNoFluidModal.spec.tsx.snap
@@ -9,9 +9,8 @@ exports[`ChallengeNoFluidModal component should be rendered correctly opened 1`]
       "root": "modal-root",
     }
   }
-  disableBackdropClick={true}
   disableEscapeKeyDown={true}
-  onClose={[MockFunction]}
+  onClose={[Function]}
   open={true}
 >
   <div
diff --git a/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap b/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
index ee1c09130e36abbe633c586977028ea7a54e1e2f..80f37a2cbed5893658b1c5ad8750161511129f84 100644
--- a/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
+++ b/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
@@ -1,953 +1,1262 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`ChallengeView component should be rendered correctly 1`] = `
-<React.Fragment>
-  <CozyBar
-    titleKey="common.title_challenge"
-  />
-  <Header
-    desktopTitleKey="common.title_challenge"
-    setHeaderHeight={[Function]}
-  />
-  <Content
-    height={0}
-  >
-    <div
-      className="challengeSlider"
-      onClick={[Function]}
-      onMouseDown={[Function]}
-      onMouseMove={[Function]}
-      onMouseUp={[Function]}
-      onTouchEnd={[Function]}
-      onTouchMove={[Function]}
-      onTouchStart={[Function]}
+<Provider
+  store={
+    Object {
+      "clearActions": [Function],
+      "dispatch": [Function],
+      "getActions": [Function],
+      "getState": [Function],
+      "replaceReducer": [Function],
+      "subscribe": [Function],
+    }
+  }
+>
+  <ChallengeView>
+    <mock-cozybar
+      titleKey="common.title_challenge"
+    />
+    <mock-header
+      desktopTitleKey="common.title_challenge"
+      setHeaderHeight={[Function]}
+    />
+    <mock-content
+      height={0}
     >
       <div
-        className="challenge-container"
-        style={
-          Object {
-            "transform": "translateX(16px)",
-          }
-        }
+        className="challengeSlider"
+        onClick={[Function]}
+        onMouseDown={[Function]}
+        onMouseMove={[Function]}
+        onMouseUp={[Function]}
+        onTouchEnd={[Function]}
+        onTouchMove={[Function]}
+        onTouchStart={[Function]}
       >
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={0}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
+        <div
+          className="challenge-container"
+          style={
             Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 1",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0001",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+              "transform": "translateX(-874.2px)",
+            }
+          }
+        >
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={0}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="0"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 1",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0001",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
-                "state": 0,
-              },
-              "startDate": null,
-              "state": 4,
-              "success": 2,
-              "target": 15,
-              "title": "Challenge 1",
+                "state": 4,
+                "success": 2,
+                "target": 15,
+                "title": "Challenge 1",
+              }
             }
-          }
-        />
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={1}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
-            Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 2",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0002",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+          />
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={1}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="1"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 2",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0002",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
-                "state": 0,
-              },
-              "startDate": null,
-              "state": 4,
-              "success": 1,
-              "target": 15,
-              "title": "Challenge 2",
+                "state": 4,
+                "success": 1,
+                "target": 15,
+                "title": "Challenge 2",
+              }
             }
-          }
-        />
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={2}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
-            Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 3",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0003",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+          />
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={2}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="2"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 3",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0003",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
-                "state": 0,
-              },
-              "startDate": null,
-              "state": 2,
-              "success": 0,
-              "target": 15,
-              "title": "Challenge 3",
+                "state": 2,
+                "success": 0,
+                "target": 15,
+                "title": "Challenge 3",
+              }
             }
-          }
-        />
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={3}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
-            Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 4",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0004",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+          />
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={3}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="3"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 4",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0004",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
-                "state": 0,
-              },
-              "startDate": null,
-              "state": 1,
-              "success": 0,
-              "target": 15,
-              "title": "Challenge 4",
+                "state": 1,
+                "success": 0,
+                "target": 15,
+                "title": "Challenge 4",
+              }
             }
-          }
-        />
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={4}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
-            Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 5",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0005",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+          />
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={4}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="4"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 5",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0005",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
                 "state": 0,
-              },
-              "startDate": null,
-              "state": 0,
-              "success": 0,
-              "target": 15,
-              "title": "Challenge 5",
+                "success": 0,
+                "target": 15,
+                "title": "Challenge 5",
+              }
             }
-          }
-        />
-        <ChallengeCard
-          cardHeight={384}
-          cardWidth={285}
-          index={5}
-          indexSlider={0}
-          moveToSlide={[Function]}
-          userChallenge={
-            Object {
-              "action": Object {
-                "ecogesture": null,
-                "startDate": null,
-                "state": 0,
-              },
-              "description": "Description challenge 6",
-              "duel": Object {
-                "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
-                "duration": "P30D",
-                "fluidTypes": Array [],
-                "id": "DUEL001",
-                "startDate": null,
-                "state": 0,
-                "threshold": 0,
-                "title": "Title DUEL001",
-                "userConsumption": 0,
-              },
-              "endingDate": null,
-              "exploration": Object {
-                "complementary_description": "Refaire un tour dans son profil si déjà fait",
-                "date": null,
-                "description": "Avoir complété son profil",
-                "ecogesture_id": "",
-                "fluid_condition": Array [],
-                "id": "EXPLORATION001",
-                "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
-                "progress": 0,
-                "state": 0,
-                "target": 1,
-                "type": 1,
-              },
-              "id": "CHALLENGE0006",
-              "progress": Object {
-                "actionProgress": 0,
-                "explorationProgress": 0,
-                "quizProgress": 0,
-              },
-              "quiz": Object {
-                "customQuestion": Object {
-                  "interval": 20,
-                  "period": Object {},
-                  "questionLabel": "Custom1",
-                  "result": 0,
-                  "singleFluid": false,
-                  "timeStep": 20,
-                  "type": 0,
+          />
+          <mock-challengecard
+            cardHeight={384}
+            cardWidth={285}
+            index={5}
+            indexSlider={3}
+            isChallengeCardLast={false}
+            key="5"
+            moveToSlide={[Function]}
+            userChallenge={
+              Object {
+                "action": Object {
+                  "ecogesture": null,
+                  "startDate": null,
+                  "state": 0,
                 },
-                "id": "QUIZ001",
-                "questions": Array [
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "86 km",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "78 km",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "56 km",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
-                    "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 800 habitants.",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 400 habitants.",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "1 point d’eau public pour 200 habitants.",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "François Mitterrand",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon Ier",
-                        "isTrue": true,
-                      },
-                      Object {
-                        "answerLabel": "Napoléon III",
-                        "isTrue": false,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
-                    "result": 0,
-                    "source": "string",
-                  },
-                  Object {
-                    "answers": Array [
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "string",
-                        "isTrue": false,
-                      },
-                      Object {
-                        "answerLabel": "Aristide Dumont",
-                        "isTrue": true,
-                      },
-                    ],
-                    "explanation": "string",
-                    "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                "description": "Description challenge 6",
+                "duel": Object {
+                  "description": "Je parie un ours polaire que vous ne pouvez pas consommer moins que #CONSUMPTION € en 1 semaine",
+                  "duration": "P30D",
+                  "fluidTypes": Array [],
+                  "id": "DUEL001",
+                  "startDate": null,
+                  "state": 0,
+                  "threshold": 0,
+                  "title": "Title DUEL001",
+                  "userConsumption": 0,
+                },
+                "endingDate": null,
+                "exploration": Object {
+                  "complementary_description": "Refaire un tour dans son profil si déjà fait",
+                  "date": null,
+                  "description": "Avoir complété son profil",
+                  "ecogesture_id": "",
+                  "fluid_condition": Array [],
+                  "id": "EXPLORATION001",
+                  "message_success": "Vous avez complété votre profil ou refait un tour dans votre profil",
+                  "progress": 0,
+                  "state": 0,
+                  "target": 1,
+                  "type": 1,
+                },
+                "id": "CHALLENGE0006",
+                "progress": Object {
+                  "actionProgress": 0,
+                  "explorationProgress": 0,
+                  "quizProgress": 0,
+                },
+                "quiz": Object {
+                  "customQuestion": Object {
+                    "interval": 20,
+                    "period": Object {},
+                    "questionLabel": "Custom1",
                     "result": 0,
-                    "source": "string",
+                    "singleFluid": false,
+                    "timeStep": 20,
+                    "type": 0,
                   },
-                ],
-                "result": 0,
+                  "id": "QUIZ001",
+                  "questions": Array [
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "86 km",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "78 km",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "56 km",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "L’aqueduc du Gier est un des aqueducs antiques de Lyon desservant la ville antique de Lugdunum. Avec ses 86 km il est le plus long des quatre aqueducs ayant alimenté la ville en eau, et celui dont les structures sont le mieux conservées. Il doit son nom au fait qu'il puise aux sources du Gier, affluent du Rhône",
+                      "questionLabel": "Quelle longueur faisait l’aqueduc du Gier pour acheminer l’eau sur Lyon à l’époque romaine ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 800 habitants.",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 400 habitants.",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "1 point d’eau public pour 200 habitants.",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "En 1800 à Lyon, combien de points d'eau y avait-il par habitants ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "François Mitterrand",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon Ier",
+                          "isTrue": true,
+                        },
+                        Object {
+                          "answerLabel": "Napoléon III",
+                          "isTrue": false,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Qui officialise la création de la Compagnie Générale des eaux ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                    Object {
+                      "answers": Array [
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "string",
+                          "isTrue": false,
+                        },
+                        Object {
+                          "answerLabel": "Aristide Dumont",
+                          "isTrue": true,
+                        },
+                      ],
+                      "explanation": "string",
+                      "questionLabel": "Quel ingénieur est à l’origine du projet d’alimentation en eau en 1856 ?",
+                      "result": 0,
+                      "source": "string",
+                    },
+                  ],
+                  "result": 0,
+                  "startDate": null,
+                  "state": 0,
+                },
                 "startDate": null,
                 "state": 0,
-              },
-              "startDate": null,
-              "state": 0,
-              "success": 0,
-              "target": 15,
-              "title": "Challenge 6",
+                "success": 0,
+                "target": 15,
+                "title": "Challenge 6",
+              }
             }
-          }
-        />
+          />
+        </div>
       </div>
-    </div>
-    <div
-      className="sliderButtons"
-    >
-      <StyledIconButton
-        aria-label="challenge.accessibility.button_slider_previous"
-        icon="test-file-stub"
-        onClick={[Function]}
-        size={16}
-      />
-      <StyledIconButton
-        aria-label="challenge.accessibility.button_slider_next"
-        icon="test-file-stub"
-        onClick={[Function]}
-        size={16}
-      />
-    </div>
-  </Content>
-</React.Fragment>
+      <div
+        className="sliderButtons"
+      >
+        <StyledIconButton
+          aria-label="challenge.accessibility.button_slider_previous"
+          icon="test-file-stub"
+          onClick={[Function]}
+          size={16}
+        >
+          <WithStyles(WithStyles(ForwardRef(IconButton)))
+            aria-label="challenge.accessibility.button_slider_previous"
+            onClick={[Function]}
+          >
+            <WithStyles(ForwardRef(IconButton))
+              aria-label="challenge.accessibility.button_slider_previous"
+              classes={
+                Object {
+                  "root": "WithStyles(ForwardRef(IconButton))-root-1",
+                }
+              }
+              onClick={[Function]}
+            >
+              <ForwardRef(IconButton)
+                aria-label="challenge.accessibility.button_slider_previous"
+                classes={
+                  Object {
+                    "colorInherit": "MuiIconButton-colorInherit",
+                    "colorPrimary": "MuiIconButton-colorPrimary",
+                    "colorSecondary": "MuiIconButton-colorSecondary",
+                    "disabled": "Mui-disabled",
+                    "edgeEnd": "MuiIconButton-edgeEnd",
+                    "edgeStart": "MuiIconButton-edgeStart",
+                    "label": "MuiIconButton-label",
+                    "root": "MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1",
+                    "sizeSmall": "MuiIconButton-sizeSmall",
+                  }
+                }
+                onClick={[Function]}
+              >
+                <WithStyles(ForwardRef(ButtonBase))
+                  aria-label="challenge.accessibility.button_slider_previous"
+                  centerRipple={true}
+                  className="MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                  disabled={false}
+                  focusRipple={true}
+                  onClick={[Function]}
+                >
+                  <ForwardRef(ButtonBase)
+                    aria-label="challenge.accessibility.button_slider_previous"
+                    centerRipple={true}
+                    className="MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                    classes={
+                      Object {
+                        "disabled": "Mui-disabled",
+                        "focusVisible": "Mui-focusVisible",
+                        "root": "MuiButtonBase-root",
+                      }
+                    }
+                    disabled={false}
+                    focusRipple={true}
+                    onClick={[Function]}
+                  >
+                    <button
+                      aria-label="challenge.accessibility.button_slider_previous"
+                      className="MuiButtonBase-root MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                      disabled={false}
+                      onBlur={[Function]}
+                      onClick={[Function]}
+                      onDragLeave={[Function]}
+                      onFocus={[Function]}
+                      onKeyDown={[Function]}
+                      onKeyUp={[Function]}
+                      onMouseDown={[Function]}
+                      onMouseLeave={[Function]}
+                      onMouseUp={[Function]}
+                      onTouchEnd={[Function]}
+                      onTouchMove={[Function]}
+                      onTouchStart={[Function]}
+                      tabIndex={0}
+                      type="button"
+                    >
+                      <span
+                        className="MuiIconButton-label"
+                      >
+                        <StyledIcon
+                          icon="test-file-stub"
+                          size={16}
+                        >
+                          <Icon
+                            aria-hidden={true}
+                            icon="test-file-stub"
+                            size={16}
+                            spin={false}
+                          >
+                            <Component
+                              aria-hidden={true}
+                              className="styles__icon___23x3R"
+                              height={16}
+                              style={Object {}}
+                              width={16}
+                            >
+                              <svg
+                                aria-hidden={true}
+                                className="styles__icon___23x3R"
+                                height={16}
+                                style={Object {}}
+                                width={16}
+                              >
+                                <use
+                                  xlinkHref="#test-file-stub"
+                                />
+                              </svg>
+                            </Component>
+                          </Icon>
+                        </StyledIcon>
+                      </span>
+                      <WithStyles(memo)
+                        center={true}
+                      >
+                        <ForwardRef(TouchRipple)
+                          center={true}
+                          classes={
+                            Object {
+                              "child": "MuiTouchRipple-child",
+                              "childLeaving": "MuiTouchRipple-childLeaving",
+                              "childPulsate": "MuiTouchRipple-childPulsate",
+                              "ripple": "MuiTouchRipple-ripple",
+                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                              "root": "MuiTouchRipple-root",
+                            }
+                          }
+                        >
+                          <span
+                            className="MuiTouchRipple-root"
+                          >
+                            <TransitionGroup
+                              childFactory={[Function]}
+                              component={null}
+                              exit={true}
+                            />
+                          </span>
+                        </ForwardRef(TouchRipple)>
+                      </WithStyles(memo)>
+                    </button>
+                  </ForwardRef(ButtonBase)>
+                </WithStyles(ForwardRef(ButtonBase))>
+              </ForwardRef(IconButton)>
+            </WithStyles(ForwardRef(IconButton))>
+          </WithStyles(WithStyles(ForwardRef(IconButton)))>
+        </StyledIconButton>
+        <StyledIconButton
+          aria-label="challenge.accessibility.button_slider_next"
+          icon="test-file-stub"
+          onClick={[Function]}
+          size={16}
+        >
+          <WithStyles(WithStyles(ForwardRef(IconButton)))
+            aria-label="challenge.accessibility.button_slider_next"
+            onClick={[Function]}
+          >
+            <WithStyles(ForwardRef(IconButton))
+              aria-label="challenge.accessibility.button_slider_next"
+              classes={
+                Object {
+                  "root": "WithStyles(ForwardRef(IconButton))-root-1",
+                }
+              }
+              onClick={[Function]}
+            >
+              <ForwardRef(IconButton)
+                aria-label="challenge.accessibility.button_slider_next"
+                classes={
+                  Object {
+                    "colorInherit": "MuiIconButton-colorInherit",
+                    "colorPrimary": "MuiIconButton-colorPrimary",
+                    "colorSecondary": "MuiIconButton-colorSecondary",
+                    "disabled": "Mui-disabled",
+                    "edgeEnd": "MuiIconButton-edgeEnd",
+                    "edgeStart": "MuiIconButton-edgeStart",
+                    "label": "MuiIconButton-label",
+                    "root": "MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1",
+                    "sizeSmall": "MuiIconButton-sizeSmall",
+                  }
+                }
+                onClick={[Function]}
+              >
+                <WithStyles(ForwardRef(ButtonBase))
+                  aria-label="challenge.accessibility.button_slider_next"
+                  centerRipple={true}
+                  className="MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                  disabled={false}
+                  focusRipple={true}
+                  onClick={[Function]}
+                >
+                  <ForwardRef(ButtonBase)
+                    aria-label="challenge.accessibility.button_slider_next"
+                    centerRipple={true}
+                    className="MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                    classes={
+                      Object {
+                        "disabled": "Mui-disabled",
+                        "focusVisible": "Mui-focusVisible",
+                        "root": "MuiButtonBase-root",
+                      }
+                    }
+                    disabled={false}
+                    focusRipple={true}
+                    onClick={[Function]}
+                  >
+                    <button
+                      aria-label="challenge.accessibility.button_slider_next"
+                      className="MuiButtonBase-root MuiIconButton-root WithStyles(ForwardRef(IconButton))-root-1"
+                      disabled={false}
+                      onBlur={[Function]}
+                      onClick={[Function]}
+                      onDragLeave={[Function]}
+                      onFocus={[Function]}
+                      onKeyDown={[Function]}
+                      onKeyUp={[Function]}
+                      onMouseDown={[Function]}
+                      onMouseLeave={[Function]}
+                      onMouseUp={[Function]}
+                      onTouchEnd={[Function]}
+                      onTouchMove={[Function]}
+                      onTouchStart={[Function]}
+                      tabIndex={0}
+                      type="button"
+                    >
+                      <span
+                        className="MuiIconButton-label"
+                      >
+                        <StyledIcon
+                          icon="test-file-stub"
+                          size={16}
+                        >
+                          <Icon
+                            aria-hidden={true}
+                            icon="test-file-stub"
+                            size={16}
+                            spin={false}
+                          >
+                            <Component
+                              aria-hidden={true}
+                              className="styles__icon___23x3R"
+                              height={16}
+                              style={Object {}}
+                              width={16}
+                            >
+                              <svg
+                                aria-hidden={true}
+                                className="styles__icon___23x3R"
+                                height={16}
+                                style={Object {}}
+                                width={16}
+                              >
+                                <use
+                                  xlinkHref="#test-file-stub"
+                                />
+                              </svg>
+                            </Component>
+                          </Icon>
+                        </StyledIcon>
+                      </span>
+                      <WithStyles(memo)
+                        center={true}
+                      >
+                        <ForwardRef(TouchRipple)
+                          center={true}
+                          classes={
+                            Object {
+                              "child": "MuiTouchRipple-child",
+                              "childLeaving": "MuiTouchRipple-childLeaving",
+                              "childPulsate": "MuiTouchRipple-childPulsate",
+                              "ripple": "MuiTouchRipple-ripple",
+                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                              "root": "MuiTouchRipple-root",
+                            }
+                          }
+                        >
+                          <span
+                            className="MuiTouchRipple-root"
+                          >
+                            <TransitionGroup
+                              childFactory={[Function]}
+                              component={null}
+                              exit={true}
+                            />
+                          </span>
+                        </ForwardRef(TouchRipple)>
+                      </WithStyles(memo)>
+                    </button>
+                  </ForwardRef(ButtonBase)>
+                </WithStyles(ForwardRef(ButtonBase))>
+              </ForwardRef(IconButton)>
+            </WithStyles(ForwardRef(IconButton))>
+          </WithStyles(WithStyles(ForwardRef(IconButton)))>
+        </StyledIconButton>
+      </div>
+    </mock-content>
+  </ChallengeView>
+</Provider>
 `;
diff --git a/src/components/Challenge/challengeCardDone.scss b/src/components/Challenge/challengeCardDone.scss
index 9b2ce26a7af4317567010328a4eda29e66aa1fd4..f03683ea5b0f4e48af5fb1d90e269d2969e96de6 100644
--- a/src/components/Challenge/challengeCardDone.scss
+++ b/src/components/Challenge/challengeCardDone.scss
@@ -9,9 +9,14 @@
     flex-direction: column;
     justify-content: space-between;
     align-items: center;
+    padding: 5% !important;
 
+    .challengeName {
+      margin: 0.5rem 0rem;
+    }
     .iconResult {
       display: flex;
+      margin: 1rem 0rem;
       @media all and(max-height: 700px) {
         width: 55%;
         margin: auto;
@@ -23,11 +28,13 @@
     }
     .labelResult {
       font-weight: bold;
-      font-size: 24px;
+      font-size: 28px;
       line-height: 120%;
+      text-transform: uppercase;
+      margin-bottom: 0.5rem;
     }
     .win {
-      color: $gold;
+      color: $gold-shadow;
     }
     .lost {
       color: $red-primary;
@@ -35,5 +42,9 @@
     .statsResult {
       text-align: center;
     }
+    .review-btn {
+      padding: 0.625rem;
+      border: 1px solid $grey-bright;
+    }
   }
 }
diff --git a/src/components/Challenge/challengeCardLast.scss b/src/components/Challenge/challengeCardLast.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a33b5213e170b2d0efeaabad7df147cd3313669d
--- /dev/null
+++ b/src/components/Challenge/challengeCardLast.scss
@@ -0,0 +1,41 @@
+@import '../../styles/base/typo-variables';
+@import '../../styles/base/color';
+
+.cardLast {
+  width: 100%;
+  height: inherit;
+  box-sizing: border-box;
+  padding: 5%;
+  transition: all 300ms ease;
+  border: 1px solid $grey-bright;
+  border-radius: 4px;
+  align-items: center;
+  text-align: center;
+  display: flex;
+  flex-direction: column;
+  .content {
+    max-height: 350px;
+    flex-direction: column;
+    display: flex;
+  }
+  svg {
+    max-height: 150px;
+  }
+  .title-last {
+    padding: 1rem 2.3rem 1.5rem;
+  }
+  .message {
+    margin: 0 0 0.7rem;
+  }
+  .btn_lastCard {
+    padding: 8px;
+    max-height: 33px;
+  }
+  .content,
+  .title-last,
+  .message,
+  .btn_lastCard,
+  svg {
+    flex: 1;
+  }
+}
diff --git a/src/components/Charts/Bar.spec.tsx b/src/components/Charts/Bar.spec.tsx
index 76e3f1a904e5acacd18d15a52192dead5ad2b7fb..84c59fb729c26951e627bb8e16e6abb5d99494f6 100644
--- a/src/components/Charts/Bar.spec.tsx
+++ b/src/components/Charts/Bar.spec.tsx
@@ -146,10 +146,7 @@ describe('Bar component test', () => {
         </svg>
       </Provider>
     )
-    wrapper
-      .find('rect')
-      .first()
-      .simulate('click')
+    wrapper.find('rect').first().simulate('click')
     expect(setSelectedDateSpy).toBeCalledTimes(1)
     expect(setSelectedDateSpy).toHaveBeenCalledWith(
       graphData.actualData[0].date
diff --git a/src/components/CommonKit/ErrorPage/__snapshots__/ErrorPage.spec.tsx.snap b/src/components/CommonKit/ErrorPage/__snapshots__/ErrorPage.spec.tsx.snap
index bf887521e977eb7e5d8226e3ad4713e0388ba034..c64f4b6b02e307fe810c4422e6e978a7efce4eae 100644
--- a/src/components/CommonKit/ErrorPage/__snapshots__/ErrorPage.spec.tsx.snap
+++ b/src/components/CommonKit/ErrorPage/__snapshots__/ErrorPage.spec.tsx.snap
@@ -181,36 +181,34 @@ exports[`ErrorPage component should be rendered correctly 1`] = `
                     >
                       error_page.back
                     </span>
-                    <NoSsr>
-                      <WithStyles(memo)
+                    <WithStyles(memo)
+                      center={false}
+                    >
+                      <ForwardRef(TouchRipple)
                         center={false}
-                      >
-                        <ForwardRef(TouchRipple)
-                          center={false}
-                          classes={
-                            Object {
-                              "child": "MuiTouchRipple-child",
-                              "childLeaving": "MuiTouchRipple-childLeaving",
-                              "childPulsate": "MuiTouchRipple-childPulsate",
-                              "ripple": "MuiTouchRipple-ripple",
-                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                              "root": "MuiTouchRipple-root",
-                            }
+                        classes={
+                          Object {
+                            "child": "MuiTouchRipple-child",
+                            "childLeaving": "MuiTouchRipple-childLeaving",
+                            "childPulsate": "MuiTouchRipple-childPulsate",
+                            "ripple": "MuiTouchRipple-ripple",
+                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                            "rippleVisible": "MuiTouchRipple-rippleVisible",
+                            "root": "MuiTouchRipple-root",
                           }
+                        }
+                      >
+                        <span
+                          className="MuiTouchRipple-root"
                         >
-                          <span
-                            className="MuiTouchRipple-root"
-                          >
-                            <TransitionGroup
-                              childFactory={[Function]}
-                              component={null}
-                              exit={true}
-                            />
-                          </span>
-                        </ForwardRef(TouchRipple)>
-                      </WithStyles(memo)>
-                    </NoSsr>
+                          <TransitionGroup
+                            childFactory={[Function]}
+                            component={null}
+                            exit={true}
+                          />
+                        </span>
+                      </ForwardRef(TouchRipple)>
+                    </WithStyles(memo)>
                   </button>
                 </ForwardRef(ButtonBase)>
               </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/CommonKit/Icon/StyledIcon.tsx b/src/components/CommonKit/Icon/StyledIcon.tsx
index 663e1b926f0b919e9fa73d8a268eab63d3523466..c8b093a822191d2020a9d7e379408a3c5edf9af5 100644
--- a/src/components/CommonKit/Icon/StyledIcon.tsx
+++ b/src/components/CommonKit/Icon/StyledIcon.tsx
@@ -10,13 +10,17 @@ interface StyledIconProps {
   title?: string
 }
 
-const StyledIcon: React.ComponentType<StyledIconProps> = ({
+const StyledIcon: React.FC<StyledIconProps> = ({
   icon,
   ariaHidden = true,
   size = 16,
   ...props
 }: StyledIconProps) => {
-  return <Icon aria-hidden={ariaHidden} icon={icon} size={size} {...props} />
+  return (
+    <>
+      <Icon aria-hidden={ariaHidden} icon={icon} size={size} {...props} />
+    </>
+  )
 }
 
 export default StyledIcon
diff --git a/src/components/CommonKit/IconButton/StyledIconBorderedButton.tsx b/src/components/CommonKit/IconButton/StyledIconBorderedButton.tsx
index eb9e5475c382904a1e30df7680c9c07f0545b744..57dad61b73ea1055620af3b7fbe9f44bd13f956c 100644
--- a/src/components/CommonKit/IconButton/StyledIconBorderedButton.tsx
+++ b/src/components/CommonKit/IconButton/StyledIconBorderedButton.tsx
@@ -37,7 +37,9 @@ interface StyledIconBorderedButtonProps extends IconButtonProps {
   children?: React.ReactNode
 }
 
-const StyledIconBorderedButton: React.ComponentType<StyledIconBorderedButtonProps> = ({
+const StyledIconBorderedButton: React.ComponentType<
+  StyledIconBorderedButtonProps
+> = ({
   icon,
   size = 16,
   selected = false,
diff --git a/src/components/Connection/ConnectionLogin.tsx b/src/components/Connection/ConnectionLogin.tsx
index 4ece0f1ea3cd76e608f429e5423707d45538486b..ae572a9ebc7ab629c580e9fd61e014ec51b825ed 100644
--- a/src/components/Connection/ConnectionLogin.tsx
+++ b/src/components/Connection/ConnectionLogin.tsx
@@ -18,14 +18,10 @@ const ConnectionLogin: React.FC<ConnectionLoginProps> = ({
   const konnectorSlug: string = fluidStatus.connection.konnectorConfig.slug
   const siteLink: string = fluidStatus.connection.konnectorConfig.siteLink
 
-  const [
-    openPartenerConnectionModal,
-    setOpenPartenerConnectionModal,
-  ] = useState<boolean>(false)
-  const [
-    hasSeenPartnerConnectionModal,
-    setHasSeenPartnerConnectionModal,
-  ] = useState<boolean>(false)
+  const [openPartenerConnectionModal, setOpenPartenerConnectionModal] =
+    useState<boolean>(false)
+  const [hasSeenPartnerConnectionModal, setHasSeenPartnerConnectionModal] =
+    useState<boolean>(false)
 
   const togglePartnerConnectionModal = useCallback(() => {
     setOpenPartenerConnectionModal(prev => !prev)
diff --git a/src/components/Connection/ConnectionOAuth.tsx b/src/components/Connection/ConnectionOAuth.tsx
index 97e56a07737753752f745f554fb45e74db0accda..a87eaa1b76daa3a7a29db8c549421105b9b7a26a 100644
--- a/src/components/Connection/ConnectionOAuth.tsx
+++ b/src/components/Connection/ConnectionOAuth.tsx
@@ -24,14 +24,10 @@ const ConnectionOAuth: React.FC<ConnectionOAuthProps> = ({
   const client = useClient()
   const dispatch = useDispatch()
 
-  const [
-    openPartenerConnectionModal,
-    setOpenPartenerConnectionModal,
-  ] = useState<boolean>(false)
-  const [
-    hasSeenPartnerConnectionModal,
-    setHasSeenPartnerConnectionModal,
-  ] = useState<boolean>(false)
+  const [openPartenerConnectionModal, setOpenPartenerConnectionModal] =
+    useState<boolean>(false)
+  const [hasSeenPartnerConnectionModal, setHasSeenPartnerConnectionModal] =
+    useState<boolean>(false)
 
   const konnectorSlug: string = fluidStatus.connection.konnectorConfig.slug
   const siteLink: string = fluidStatus.connection.konnectorConfig.siteLink
diff --git a/src/components/Connection/ConnectionResult.tsx b/src/components/Connection/ConnectionResult.tsx
index e5e94863b03e0a687dbb1d88b052d31dad6967e0..d24a9512e494e5546809e58163c9570284330b65 100644
--- a/src/components/Connection/ConnectionResult.tsx
+++ b/src/components/Connection/ConnectionResult.tsx
@@ -48,9 +48,8 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({
   const [konnectorError, setKonnectorError] = useState<string>('')
   const [status, setStatus] = useState<string>('')
   const [outDatedDataDays, setOutDatedDataDays] = useState<number | null>(null)
-  const [openGRDFDeletionModal, setOpenGRDFDeletionModal] = useState<boolean>(
-    false
-  )
+  const [openGRDFDeletionModal, setOpenGRDFDeletionModal] =
+    useState<boolean>(false)
   const toggleGRDFDeletionModal = useCallback(() => {
     setOpenGRDFDeletionModal(prev => !prev)
   }, [])
@@ -79,9 +78,8 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({
           account.account_type
         )
         for (const _account of accounts) {
-          const trigger: Trigger | null = await triggerService.getTriggerForAccount(
-            _account
-          )
+          const trigger: Trigger | null =
+            await triggerService.getTriggerForAccount(_account)
           if (trigger) await triggerService.deleteTrigger(trigger)
           await accountService.deleteAccount(_account)
         }
diff --git a/src/components/Connection/DeleteGRDFAccountModal.spec.tsx b/src/components/Connection/DeleteGRDFAccountModal.spec.tsx
index 915201412ac71bf8bea5f7d2554752b6671fdbc2..a517038943eb0573b83e3a2c183a8c20874a8007 100644
--- a/src/components/Connection/DeleteGRDFAccountModal.spec.tsx
+++ b/src/components/Connection/DeleteGRDFAccountModal.spec.tsx
@@ -35,10 +35,7 @@ describe('DeleteGRDFAccountModal component', () => {
         deleteAccount={mockDelete}
       />
     )
-    component
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    component.find(Button).at(1).simulate('click')
     expect(mockDelete).toHaveBeenCalledTimes(1)
   })
 })
diff --git a/src/components/Connection/ExpiredConsentModal.spec.tsx b/src/components/Connection/ExpiredConsentModal.spec.tsx
index 0f4931663ffa367e3b71262e2502828180057af7..b52ebe5644ccd1d9d1152c00cb57763d9339c2e8 100644
--- a/src/components/Connection/ExpiredConsentModal.spec.tsx
+++ b/src/components/Connection/ExpiredConsentModal.spec.tsx
@@ -58,10 +58,7 @@ describe('ExpiredConsentModal component', () => {
         />
       </Provider>
     )
-    component
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    component.find(Button).at(1).simulate('click')
     expect(useDispatchSpy).toHaveBeenCalledTimes(1)
     expect(mockHistoryPush).toHaveBeenCalledTimes(1)
   })
diff --git a/src/components/Connection/FormLogin.tsx b/src/components/Connection/FormLogin.tsx
index c184fa7155e7936461b9487879ddf58e7829c9d5..38251f47a1f45160ba09fc5ce83354b676a330a8 100644
--- a/src/components/Connection/FormLogin.tsx
+++ b/src/components/Connection/FormLogin.tsx
@@ -88,10 +88,8 @@ const FormLogin: React.FC<FormLoginProps> = ({
         target: konnectorSlug,
         result: 'error',
       })
-      const {
-        account: _account,
-        trigger: _trigger,
-      } = await connectionService.connectNewUser(konnectorSlug, login, password)
+      const { account: _account, trigger: _trigger } =
+        await connectionService.connectNewUser(konnectorSlug, login, password)
       if (!_trigger) {
         setError(t('konnector_form.error_account_creation'))
         sendUsageEventError(konnectorSlug)
diff --git a/src/components/Connection/__snapshots__/DeleteGRDFAccountModal.spec.tsx.snap b/src/components/Connection/__snapshots__/DeleteGRDFAccountModal.spec.tsx.snap
index 9836a6dbdffcac33733a3a4802584bb3bcc2ea8e..a4e7f3907e8a2eb069fa1ead7e820147dc35f397 100644
--- a/src/components/Connection/__snapshots__/DeleteGRDFAccountModal.spec.tsx.snap
+++ b/src/components/Connection/__snapshots__/DeleteGRDFAccountModal.spec.tsx.snap
@@ -97,12 +97,17 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -362,7 +367,6 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -591,7 +595,7 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -641,8 +645,8 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -798,36 +802,34 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -979,36 +981,34 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                                           >
                                             delete_grdf_modal.cancel
                                           </span>
-                                          <NoSsr>
-                                            <WithStyles(memo)
+                                          <WithStyles(memo)
+                                            center={false}
+                                          >
+                                            <ForwardRef(TouchRipple)
                                               center={false}
-                                            >
-                                              <ForwardRef(TouchRipple)
-                                                center={false}
-                                                classes={
-                                                  Object {
-                                                    "child": "MuiTouchRipple-child",
-                                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                                    "ripple": "MuiTouchRipple-ripple",
-                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                    "root": "MuiTouchRipple-root",
-                                                  }
+                                              classes={
+                                                Object {
+                                                  "child": "MuiTouchRipple-child",
+                                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                                  "ripple": "MuiTouchRipple-ripple",
+                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                  "root": "MuiTouchRipple-root",
                                                 }
+                                              }
+                                            >
+                                              <span
+                                                className="MuiTouchRipple-root"
                                               >
-                                                <span
-                                                  className="MuiTouchRipple-root"
-                                                >
-                                                  <TransitionGroup
-                                                    childFactory={[Function]}
-                                                    component={null}
-                                                    exit={true}
-                                                  />
-                                                </span>
-                                              </ForwardRef(TouchRipple)>
-                                            </WithStyles(memo)>
-                                          </NoSsr>
+                                                <TransitionGroup
+                                                  childFactory={[Function]}
+                                                  component={null}
+                                                  exit={true}
+                                                />
+                                              </span>
+                                            </ForwardRef(TouchRipple)>
+                                          </WithStyles(memo)>
                                         </button>
                                       </ForwardRef(ButtonBase)>
                                     </WithStyles(ForwardRef(ButtonBase))>
@@ -1112,36 +1112,34 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                                           >
                                             delete_grdf_modal.go
                                           </span>
-                                          <NoSsr>
-                                            <WithStyles(memo)
+                                          <WithStyles(memo)
+                                            center={false}
+                                          >
+                                            <ForwardRef(TouchRipple)
                                               center={false}
-                                            >
-                                              <ForwardRef(TouchRipple)
-                                                center={false}
-                                                classes={
-                                                  Object {
-                                                    "child": "MuiTouchRipple-child",
-                                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                                    "ripple": "MuiTouchRipple-ripple",
-                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                    "root": "MuiTouchRipple-root",
-                                                  }
+                                              classes={
+                                                Object {
+                                                  "child": "MuiTouchRipple-child",
+                                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                                  "ripple": "MuiTouchRipple-ripple",
+                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                  "root": "MuiTouchRipple-root",
                                                 }
+                                              }
+                                            >
+                                              <span
+                                                className="MuiTouchRipple-root"
                                               >
-                                                <span
-                                                  className="MuiTouchRipple-root"
-                                                >
-                                                  <TransitionGroup
-                                                    childFactory={[Function]}
-                                                    component={null}
-                                                    exit={true}
-                                                  />
-                                                </span>
-                                              </ForwardRef(TouchRipple)>
-                                            </WithStyles(memo)>
-                                          </NoSsr>
+                                                <TransitionGroup
+                                                  childFactory={[Function]}
+                                                  component={null}
+                                                  exit={true}
+                                                />
+                                              </span>
+                                            </ForwardRef(TouchRipple)>
+                                          </WithStyles(memo)>
                                         </button>
                                       </ForwardRef(ButtonBase)>
                                     </WithStyles(ForwardRef(ButtonBase))>
@@ -1159,7 +1157,7 @@ exports[`DeleteGRDFAccountModal component should be rendered correctly 1`] = `
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/Connection/__snapshots__/ExpiredConsentModal.spec.tsx.snap b/src/components/Connection/__snapshots__/ExpiredConsentModal.spec.tsx.snap
index 1e18710ba52c158356a14fcf9c967ff362f63084..1ee47a975ce6cb8a834d5af119c0ba4d7379f568 100644
--- a/src/components/Connection/__snapshots__/ExpiredConsentModal.spec.tsx.snap
+++ b/src/components/Connection/__snapshots__/ExpiredConsentModal.spec.tsx.snap
@@ -109,12 +109,17 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -374,7 +379,6 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={false}
           disableEscapeKeyDown={false}
           onClose={[MockFunction]}
           open={true}
@@ -603,7 +607,7 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                     </ForwardRef(Fade)>
                   </ForwardRef(Backdrop)>
                 </WithStyles(ForwardRef(Backdrop))>
-                <TrapFocus
+                <Unstable_TrapFocus
                   disableAutoFocus={false}
                   disableEnforceFocus={false}
                   disableRestoreFocus={false}
@@ -653,8 +657,8 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                     >
                       <div
                         className="MuiDialog-container MuiDialog-scrollPaper"
-                        onClick={[Function]}
                         onMouseDown={[Function]}
+                        onMouseUp={[Function]}
                         role="none presentation"
                         style={
                           Object {
@@ -810,36 +814,34 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                                             </Component>
                                           </Icon>
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={true}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={true}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={true}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -991,36 +993,34 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                                             >
                                               consent_outdated.later
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1124,36 +1124,34 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                                             >
                                               consent_outdated.go
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1171,7 +1169,7 @@ exports[`ExpiredConsentModal component should be rendered correctly 1`] = `
                     data-test="sentinelEnd"
                     tabIndex={0}
                   />
-                </TrapFocus>
+                </Unstable_TrapFocus>
               </div>
             </Portal>
           </ForwardRef(Portal)>
diff --git a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
index 11d88685726a9b85c7e6aa98dad3b06a19564283..11007d24c1da41a0801b87ef401646ba4c4a66a6 100644
--- a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
+++ b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
@@ -41,7 +41,7 @@ const ConsumptionVisualizer: React.FC<ConsumptionVisualizerProps> = ({
         }
       }
       if (lastDays.length > 0) {
-        lastDay = lastDays.reduce(function(a, b) {
+        lastDay = lastDays.reduce(function (a, b) {
           return a < b ? a : b
         })
       }
diff --git a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx
index d8ff32d39c3499893d0e514f1a7188d12306ed1c..74f271ffd71581b9e202aff8bcb5fa1fc0637989 100644
--- a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx
+++ b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx
@@ -130,12 +130,7 @@ describe('Dataload consumption visualizer component', () => {
         />
       </Provider>
     )
-    expect(
-      wrapper
-        .find('.estimated')
-        .first()
-        .simulate('click')
-    )
+    expect(wrapper.find('.estimated').first().simulate('click'))
   })
   it('should render multifluid with no compare and navigate to singleFluid page', async () => {
     const store = mockStore({
@@ -170,10 +165,7 @@ describe('Dataload consumption visualizer component', () => {
     UsageEventService.addEvent = mockAddEvent
 
     //Render Navlinks to fluids
-    wrapper
-      .find('.dataloadvisualizer-euro-fluid')
-      .first()
-      .simulate('click')
+    wrapper.find('.dataloadvisualizer-euro-fluid').first().simulate('click')
     expect(mockAddEvent).toHaveBeenCalled()
   })
 })
diff --git a/src/components/ConsumptionVisualizer/DataloadSectionValue.spec.tsx b/src/components/ConsumptionVisualizer/DataloadSectionValue.spec.tsx
index 0297049b01392e1e2713f8f5d6f504349070b92e..4181b6a2ebccde40cdd799e5df89b08349f84fcf 100644
--- a/src/components/ConsumptionVisualizer/DataloadSectionValue.spec.tsx
+++ b/src/components/ConsumptionVisualizer/DataloadSectionValue.spec.tsx
@@ -48,10 +48,7 @@ describe('DataloadSectionValue component', () => {
         />
       )
       expect(
-        wrapper
-          .find(DataloadSectionValue)
-          .first()
-          .contains('12,00')
+        wrapper.find(DataloadSectionValue).first().contains('12,00')
       ).toBeTruthy()
       expect(wrapper.find('.text-18-normal').text()).toBe(
         'FLUID.ELECTRICITY.UNIT'
@@ -68,10 +65,7 @@ describe('DataloadSectionValue component', () => {
         />
       )
       expect(
-        wrapper
-          .find(DataloadSectionValue)
-          .first()
-          .contains('1,00')
+        wrapper.find(DataloadSectionValue).first().contains('1,00')
       ).toBeTruthy()
       expect(wrapper.find('.text-18-normal').text()).toBe(
         'FLUID.ELECTRICITY.MEGAUNIT'
@@ -90,10 +84,7 @@ describe('DataloadSectionValue component', () => {
         />
       )
       expect(
-        wrapper
-          .find(DataloadSectionValue)
-          .first()
-          .contains('12,00')
+        wrapper.find(DataloadSectionValue).first().contains('12,00')
       ).toBeTruthy()
       expect(wrapper.find('.euroUnit').exists()).toBeTruthy()
     })
@@ -107,10 +98,7 @@ describe('DataloadSectionValue component', () => {
         />
       )
       expect(
-        wrapper
-          .find(DataloadSectionValue)
-          .first()
-          .contains('12,00')
+        wrapper.find(DataloadSectionValue).first().contains('12,00')
       ).toBeTruthy()
       expect(wrapper.find('.euroUnit').exists()).toBeTruthy()
       expect(wrapper.find('.estimated').exists()).toBeTruthy()
diff --git a/src/components/Content/Content.tsx b/src/components/Content/Content.tsx
index 6e141e27364bfbdc739d623e8d636136fe291fef..0df5633eb4973f5c81f24fb70dbecdf68241ab84 100644
--- a/src/components/Content/Content.tsx
+++ b/src/components/Content/Content.tsx
@@ -1,13 +1,12 @@
 import React, { useCallback, useEffect } from 'react'
 import './content.scss'
-import { history } from 'components/App'
 import { useSelector, useDispatch } from 'react-redux'
 import { AppStore } from 'store'
 import { changeScreenType } from 'store/global/global.actions'
 import { updateModalIsFeedbacksOpen } from 'store/modal/modal.actions'
 import { ScreenType } from 'enum/screen.enum'
 import FeedbackModal from 'components/Feedback/FeedbackModal'
-
+import { useHistory } from 'react-router-dom'
 interface ContentProps {
   children?: React.ReactNode
   height?: number
@@ -20,6 +19,7 @@ const Content: React.FC<ContentProps> = ({
   background = 'inherit',
 }: ContentProps) => {
   const dispatch = useDispatch()
+  const history = useHistory()
   const { screenType } = useSelector((state: AppStore) => state.ecolyo.global)
   const { isFeedbacksOpen } = useSelector(
     (state: AppStore) => state.ecolyo.modal
@@ -38,10 +38,10 @@ const Content: React.FC<ContentProps> = ({
   /**
    * Handle Desktop scroll
    */
-  const handleWindowScroll = () => {
+  const handleWindowScroll = useCallback(() => {
     app && app.scrollTo(0, 0)
     window.scrollTo(0, 0)
-  }
+  }, [app])
 
   // Set listners for scroll
   useEffect(() => {
@@ -50,7 +50,7 @@ const Content: React.FC<ContentProps> = ({
       // remove listner subscription
       listner()
     }
-  }, [])
+  }, [handleWindowScroll, history])
 
   useEffect(() => {
     function handleResize() {
diff --git a/src/components/DateNavigator/DateNavigator.spec.tsx b/src/components/DateNavigator/DateNavigator.spec.tsx
index 05504108fbfba0ac81ca663d93355979fbf46bc5..bfa2adf669b49e918aaea35a329ded17f0b74871 100644
--- a/src/components/DateNavigator/DateNavigator.spec.tsx
+++ b/src/components/DateNavigator/DateNavigator.spec.tsx
@@ -62,10 +62,7 @@ describe('DateNavigator component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(IconButton)
-      .first()
-      .simulate('click')
+    wrapper.find(IconButton).first().simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(2)
   })
   it('should click on right arrow and change date', async () => {
@@ -84,10 +81,7 @@ describe('DateNavigator component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(IconButton)
-      .at(1)
-      .simulate('click')
+    wrapper.find(IconButton).at(1).simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(3)
   })
 
@@ -107,10 +101,7 @@ describe('DateNavigator component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(IconButton)
-      .at(0)
-      .simulate('click')
+    wrapper.find(IconButton).at(0).simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(4)
   })
   it('should be rendered without analysis date and change to next index', async () => {
@@ -129,10 +120,7 @@ describe('DateNavigator component', () => {
       await new Promise(resolve => setTimeout(resolve))
       wrapper.update()
     })
-    wrapper
-      .find(IconButton)
-      .at(1)
-      .simulate('click')
+    wrapper.find(IconButton).at(1).simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(5)
   })
 })
diff --git a/src/components/DateNavigator/DateNavigator.tsx b/src/components/DateNavigator/DateNavigator.tsx
index 6ab0e3bdd0851dc9d436848b507626bcbefd9d12..ff14f1f74173d11f91fc91a5861725c5eaf6dd88 100644
--- a/src/components/DateNavigator/DateNavigator.tsx
+++ b/src/components/DateNavigator/DateNavigator.tsx
@@ -73,11 +73,12 @@ const DateNavigator: React.FC<DateNavigatorProps> = ({
 
   const handleChangePrevIndex = () => {
     if (!disablePrev && isKonnectorActive(fluidStatus, FluidType.MULTIFLUID)) {
-      const increment: number = dateChartService.defineIncrementForPreviousIndex(
-        currentTimeStep,
-        selectedDate,
-        currentIndex
-      )
+      const increment: number =
+        dateChartService.defineIncrementForPreviousIndex(
+          currentTimeStep,
+          selectedDate,
+          currentIndex
+        )
       if (currentAnalysisDate) {
         handleClickMove(-1)
       } else handleClickMove(increment)
diff --git a/src/components/Duel/DuelBar.tsx b/src/components/Duel/DuelBar.tsx
index 91aa601dfdfa3ffbe0dcb61ff6c01256969bcdd2..5ba505e98d059fbccc7f603a609e449a1ae6e943 100644
--- a/src/components/Duel/DuelBar.tsx
+++ b/src/components/Duel/DuelBar.tsx
@@ -16,6 +16,7 @@ import { FluidType } from 'enum/fluid.enum'
 
 export interface BarChartProps {
   userChallenge: UserChallenge
+  finishedDataLoad?: Dataload[]
   average: number
   timeStep: TimeStep
   width?: number
@@ -40,6 +41,7 @@ type PropsWithDefaults = BarChartProps & DefaultProps
 const DuelBar: React.FC<BarChartProps> = (props: BarChartProps) => {
   const {
     userChallenge,
+    finishedDataLoad,
     timeStep,
     average,
     width,
@@ -53,7 +55,9 @@ const DuelBar: React.FC<BarChartProps> = (props: BarChartProps) => {
   const { currentDataload } = useSelector(
     (state: AppStore) => state.ecolyo.challenge
   )
-
+  const dataload: Dataload[] = finishedDataLoad
+    ? finishedDataLoad
+    : currentDataload
   const getContentWidth = () => {
     return width - marginLeft - marginRight
   }
@@ -63,15 +67,15 @@ const DuelBar: React.FC<BarChartProps> = (props: BarChartProps) => {
   }
 
   const getMaxLoad = () => {
-    const maxLoad = currentDataload
-      ? Math.max(...currentDataload.map((d: Dataload) => d.value))
+    const maxLoad = dataload
+      ? Math.max(...dataload.map((d: Dataload) => d.value))
       : 0
     return maxLoad
   }
 
   const xScale: ScaleBand<string> = scaleBand()
     .domain(
-      currentDataload.map((d: Dataload) =>
+      dataload.map((d: Dataload) =>
         d.date.toLocaleString(DateTime.DATETIME_SHORT)
       )
     )
@@ -115,7 +119,7 @@ const DuelBar: React.FC<BarChartProps> = (props: BarChartProps) => {
         marginTop={marginTop}
       />
       <g transform={`translate(${marginLeft},${marginTop})`}>
-        {currentDataload.map((d: Dataload, index: number) => {
+        {dataload.map((d: Dataload, index: number) => {
           if (!isUpcoming(d)) {
             return (
               <Bar
@@ -158,7 +162,7 @@ const DuelBar: React.FC<BarChartProps> = (props: BarChartProps) => {
         />
       </g>
       <AxisBottom
-        data={currentDataload}
+        data={dataload}
         timeStep={timeStep}
         xScale={xScale}
         height={height}
diff --git a/src/components/Duel/DuelChart.tsx b/src/components/Duel/DuelChart.tsx
index 25b83d1724a21fbc8e0896dd8a88626e6d8ec20d..54538e998c97100782a69f08e9adec67e798a21c 100644
--- a/src/components/Duel/DuelChart.tsx
+++ b/src/components/Duel/DuelChart.tsx
@@ -1,17 +1,19 @@
 import React, { useState, useEffect } from 'react'
 import './duelChart.scss'
 import { TimeStep } from 'enum/timeStep.enum'
-import { UserChallenge } from 'models'
+import { Dataload, UserChallenge } from 'models'
 import DuelBar from 'components/Duel/DuelBar'
 
 interface DuelChartProps {
   userChallenge: UserChallenge
+  finishedDataLoad?: Dataload[]
   width: number
   height: number
 }
 
 const DuelChart: React.FC<DuelChartProps> = ({
   userChallenge,
+  finishedDataLoad,
   width,
   height,
 }: DuelChartProps) => {
@@ -25,6 +27,7 @@ const DuelChart: React.FC<DuelChartProps> = ({
     <div className="fs-slide">
       <DuelBar
         userChallenge={userChallenge}
+        finishedDataLoad={finishedDataLoad}
         average={average}
         timeStep={TimeStep.DAY}
         height={height}
diff --git a/src/components/Duel/DuelOngoing.tsx b/src/components/Duel/DuelOngoing.tsx
index 9dd80796d852c1396c5c92c9d91f9937030da7e0..8b78f74c796c8c267cf57647b175928623911ba0 100644
--- a/src/components/Duel/DuelOngoing.tsx
+++ b/src/components/Duel/DuelOngoing.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect, useRef, useState } from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import { useHistory } from 'react-router-dom'
 import './duelOngoing.scss'
 import { Client, useClient } from 'cozy-client'
@@ -12,8 +12,11 @@ import {
 import { toggleChallengeDuelNotification } from 'store/global/global.actions'
 import { formatNumberValues } from 'utils/utils'
 
-import { UserDuel, UserChallenge } from 'models'
-import { UserChallengeUpdateFlag } from 'enum/userChallenge.enum'
+import { UserDuel, UserChallenge, Dataload } from 'models'
+import {
+  UserChallengeSuccess,
+  UserChallengeUpdateFlag,
+} from 'enum/userChallenge.enum'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import CaptionAverageIcon from 'assets/icons/visu/duel/captionAverage.svg'
 import CaptionConsumptionIcon from 'assets/icons/visu/duel/captionConsumption.svg'
@@ -21,15 +24,19 @@ import CaptionIncomingIcon from 'assets/icons/visu/duel/captionIncoming.svg'
 import ChallengeService from 'services/challenge.service'
 import DuelChart from 'components/Duel/DuelChart'
 import DuelResultModal from 'components/Duel/DuelResultModal'
+import LastDuelModal from 'components/Duel/lastDuelModal'
 import UsageEventService from 'services/usageEvent.service'
 import { UsageEventType } from 'enum/usageEvent.enum'
+import { UserDuelState } from 'enum/userDuel.enum'
 
 interface DuelOngoingProps {
   userChallenge: UserChallenge
+  isFinished?: boolean
 }
 
 const DuelOngoing: React.FC<DuelOngoingProps> = ({
   userChallenge,
+  isFinished,
 }: DuelOngoingProps) => {
   const client: Client = useClient()
   const { t } = useI18n()
@@ -40,9 +47,15 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
   const history = useHistory()
   const [resultModal, setResultModal] = useState<boolean>(false)
   const [winChallenge, setWinChallenge] = useState<boolean>(false)
+  const [isLastDuel, setIsLastDuel] = useState<boolean>(false)
   const [width, setWidth] = useState<number>(0)
   const [height, setHeight] = useState<number>(0)
+  const [finishedDataLoad, setfinishedDataLoad] = useState<Dataload[]>()
   const chartContainer = useRef<HTMLDivElement>(null)
+  const challengeService = useMemo(() => new ChallengeService(client), [client])
+  const { userChallengeList } = useSelector(
+    (state: AppStore) => state.ecolyo.challenge
+  )
 
   const duel: UserDuel = userChallenge.duel
   const title: string = duel.title
@@ -78,8 +91,25 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
     dispatch(unlockNextUserChallenge(updatedChallenge))
     dispatch(toggleChallengeDuelNotification(false))
 
+    if (
+      userChallenge.id == userChallengeList[userChallengeList.length - 1].id
+    ) {
+      setIsLastDuel(true)
+    } else {
+      history.push('/challenges')
+    }
+  }, [
+    client,
+    userChallenge,
+    winChallenge,
+    dispatch,
+    userChallengeList,
+    history,
+  ])
+
+  const setLastResult = useCallback(async () => {
     history.push('/challenges')
-  }, [client, dispatch, userChallenge, history, winChallenge])
+  }, [history])
 
   useEffect(() => {
     function handleResize() {
@@ -104,7 +134,6 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
   }, [])
 
   useEffect(() => {
-    const challengeService = new ChallengeService(client)
     let subscribed = true
     async function setChallengeResult() {
       const { isDone, isWin } = await challengeService.isChallengeDone(
@@ -120,25 +149,49 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
     return () => {
       subscribed = false
     }
-  }, [client, currentDataload, userChallenge])
+  }, [challengeService, client, currentDataload, userChallenge])
+
+  useEffect(() => {
+    let subscribed = true
+    async function populateData() {
+      if (isFinished) {
+        const dataloads: Dataload[] = await challengeService.getUserChallengeDataload(
+          userChallenge
+        )
+        if (subscribed) {
+          setfinishedDataLoad(dataloads)
+        }
+      }
+    }
+    populateData()
+    return () => {
+      subscribed = false
+    }
+  }, [challengeService, dispatch, isFinished, userChallenge])
 
   return (
     <>
       <div className="duel-ongoing-container">
         <div className="duel-title text-16-normal">{duel.title}</div>
-        <div className="duel-goal text-18-normal">
-          {t('duel.goal1', {
-            durationInDays,
-            // eslint-disable-next-line @typescript-eslint/camelcase
-            smart_count: durationInDays,
-          })}
-          <span> </span>
-          {t('duel.goal2', {
-            title,
-            // eslint-disable-next-line @typescript-eslint/camelcase
-            smart_count: title,
-          })}
-        </div>
+        {duel.state === UserDuelState.DONE ? (
+          <div className="duel-goal text-26-bold">
+            {userChallenge.success === UserChallengeSuccess.WIN
+              ? t('duel.goal_done')
+              : t('duel.goal_failed')}
+          </div>
+        ) : (
+          <div className="duel-goal text-18-normal">
+            {t('duel.goal1', {
+              durationInDays,
+              smart_count: durationInDays,
+            })}
+            <span> </span>
+            {t('duel.goal2', {
+              title,
+              smart_count: title,
+            })}
+          </div>
+        )}
         <div className="duel-consumption text-28-normal">
           <span className="consumption">{userConsumption}</span>
           {` / ${average} €`}
@@ -146,6 +199,7 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
         <div className="duel-chart fs-root" ref={chartContainer}>
           <DuelChart
             userChallenge={userChallenge}
+            finishedDataLoad={finishedDataLoad}
             width={width}
             height={height}
           />
@@ -183,6 +237,7 @@ const DuelOngoing: React.FC<DuelOngoingProps> = ({
         win={winChallenge}
         handleCloseClick={setResult}
       />
+      <LastDuelModal open={isLastDuel} handleCloseClick={setLastResult} />
     </>
   )
 }
diff --git a/src/components/Duel/DuelUnlocked.spec.tsx b/src/components/Duel/DuelUnlocked.spec.tsx
index cde3182efe7e14ba7dbc605b92c323c60b2911b3..74b23a0543a853eac78a4ee6f0b2d967ec14ab56 100644
--- a/src/components/Duel/DuelUnlocked.spec.tsx
+++ b/src/components/Duel/DuelUnlocked.spec.tsx
@@ -88,10 +88,7 @@ describe('DuelUnlocked component', () => {
         <DuelUnlocked userChallenge={userChallengeData[0]} />
       </Provider>
     )
-    wrapper
-      .find('.button-start')
-      .find(Button)
-      .simulate('click')
+    wrapper.find('.button-start').find(Button).simulate('click')
     expect(mockUserChallengeUpdateFlag).toHaveBeenCalledWith(
       userChallengeData[0],
       UserChallengeUpdateFlag.DUEL_START
diff --git a/src/components/Duel/DuelView.spec.tsx b/src/components/Duel/DuelView.spec.tsx
index 5d6eece3cf01f26b9ecca538b2eec92301fc5c1f..da088b854b7204eb110fd7f54844adb717eadc67 100644
--- a/src/components/Duel/DuelView.spec.tsx
+++ b/src/components/Duel/DuelView.spec.tsx
@@ -10,8 +10,22 @@ import DuelUnlocked from './DuelUnlocked'
 import DuelOngoing from './DuelOngoing'
 import { UserDuelState } from 'enum/userDuel.enum'
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
+
 const mockUseSelector = jest.spyOn(reactRedux, 'useSelector')
 
+const mockHistoryGoBack = jest.fn()
+jest.mock('react-router-dom', () => ({
+  useLocation: () => ({
+    search: '?id=CHALLENGE0002',
+  }),
+  useHistory: () => ({
+    goBack: mockHistoryGoBack,
+  }),
+}))
+
 describe('DuelView component', () => {
   it('should be rendered with DuelError component when no current challenge', () => {
     mockUseSelector.mockReturnValue(challengeStateData)
@@ -19,7 +33,7 @@ describe('DuelView component', () => {
     expect(wrapper.find(DuelError).exists()).toBeTruthy()
   })
 
-  it('should be rendered with DuelError component when current challenge with state = duel and duel state = done', () => {
+  it('should be rendered with DuelOngoing component when current challenge with state = duel and duel state = done', () => {
     const updatedUserChallenge = {
       ...userChallengeData[1],
       state: UserChallengeState.DUEL,
@@ -27,11 +41,13 @@ describe('DuelView component', () => {
     }
     const updatedChallengeState = {
       ...challengeStateData,
+      userChallengeList: userChallengeData,
       currentChallenge: updatedUserChallenge,
     }
+    updatedChallengeState.userChallengeList[1] = updatedUserChallenge
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<DuelView />)
-    expect(wrapper.find(DuelError).exists()).toBeTruthy()
+    expect(wrapper.find(DuelOngoing).exists()).toBeTruthy()
   })
 
   it('should be rendered with DuelError component when current challenge with state = duel and duel state = locked', () => {
@@ -42,8 +58,10 @@ describe('DuelView component', () => {
     }
     const updatedChallengeState = {
       ...challengeStateData,
+      userChallengeList: userChallengeData,
       currentChallenge: updatedUserChallenge,
     }
+    updatedChallengeState.userChallengeList[1] = updatedUserChallenge
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<DuelView />)
     expect(wrapper.find(DuelError).exists()).toBeTruthy()
@@ -56,8 +74,10 @@ describe('DuelView component', () => {
     }
     const updatedChallengeState = {
       ...challengeStateData,
+      userChallengeList: userChallengeData,
       currentChallenge: updatedUserChallenge,
     }
+    updatedChallengeState.userChallengeList[1] = updatedUserChallenge
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<DuelView />)
     expect(wrapper.find(DuelError).exists()).toBeTruthy()
@@ -71,8 +91,10 @@ describe('DuelView component', () => {
     }
     const updatedChallengeState = {
       ...challengeStateData,
+      userChallengeList: userChallengeData,
       currentChallenge: updatedUserChallenge,
     }
+    updatedChallengeState.userChallengeList[1] = updatedUserChallenge
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<DuelView />)
     expect(wrapper.find(DuelUnlocked).exists()).toBeTruthy()
@@ -86,8 +108,10 @@ describe('DuelView component', () => {
     }
     const updatedChallengeState = {
       ...challengeStateData,
+      userChallengeList: userChallengeData,
       currentChallenge: updatedUserChallenge,
     }
+    updatedChallengeState.userChallengeList[1] = updatedUserChallenge
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<DuelView />)
     expect(wrapper.find(DuelOngoing).exists()).toBeTruthy()
diff --git a/src/components/Duel/DuelView.tsx b/src/components/Duel/DuelView.tsx
index 006f902152d63bf2437802dfe55924c3f035c5e4..731659e942fd7d4e6e632b881c6a43cd656f7534 100644
--- a/src/components/Duel/DuelView.tsx
+++ b/src/components/Duel/DuelView.tsx
@@ -12,13 +12,18 @@ import { UserDuelState } from 'enum/userDuel.enum'
 import { UserChallenge } from 'models'
 import DuelOngoing from './DuelOngoing'
 import DuelEmptyValueModal from './DuelEmptyValueModal'
-import { useHistory } from 'react-router-dom'
+import { useHistory, useLocation } from 'react-router-dom'
 
 const DuelView: React.FC = () => {
   const [headerHeight, setHeaderHeight] = useState<number>(0)
-  const { currentChallenge } = useSelector(
+  const { userChallengeList } = useSelector(
     (state: AppStore) => state.ecolyo.challenge
   )
+  const id = new URLSearchParams(useLocation().search).get('id')
+  const challengeToDisplay: UserChallenge | undefined = userChallengeList.find(
+    challenge => challenge.id === id
+  )
+
   const history = useHistory()
   const defineHeaderHeight = useCallback((height: number) => {
     setHeaderHeight(height)
@@ -32,6 +37,8 @@ const DuelView: React.FC = () => {
         return <DuelUnlocked userChallenge={challenge} />
       case UserDuelState.ONGOING:
         return <DuelOngoing userChallenge={challenge} />
+      case UserDuelState.DONE:
+        return <DuelOngoing userChallenge={challenge} isFinished={true} />
       case UserDuelState.NO_REF_PERIOD_VALID:
         return (
           <DuelEmptyValueModal
@@ -58,9 +65,10 @@ const DuelView: React.FC = () => {
       ></Header>
       <Content height={headerHeight}>
         <div>
-          {currentChallenge &&
-          currentChallenge.state === UserChallengeState.DUEL ? (
-            renderDuel(currentChallenge)
+          {challengeToDisplay &&
+          (challengeToDisplay.state === UserChallengeState.DUEL ||
+            challengeToDisplay.state === UserChallengeState.DONE) ? (
+            renderDuel(challengeToDisplay)
           ) : (
             <DuelError />
           )}
diff --git a/src/components/Duel/__snapshots__/lastDuelModal.spec.tsx.snap b/src/components/Duel/__snapshots__/lastDuelModal.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..2b0bc89e8b41e20ba968ff23738915c21538f2ae
--- /dev/null
+++ b/src/components/Duel/__snapshots__/lastDuelModal.spec.tsx.snap
@@ -0,0 +1,3 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`lastDuelModal component should render correctly 1`] = `ReactWrapper {}`;
diff --git a/src/components/Duel/lastDuelModal.scss b/src/components/Duel/lastDuelModal.scss
new file mode 100644
index 0000000000000000000000000000000000000000..16e4bafe7ed5711ccebf9369a0415ddd1f9962db
--- /dev/null
+++ b/src/components/Duel/lastDuelModal.scss
@@ -0,0 +1,29 @@
+@import '../../styles/base/color';
+
+.duel-last-modal-root {
+  text-align: center;
+  .closeIcon {
+    float: right;
+    cursor: pointer;
+  }
+  .icon {
+    margin: 2rem 0 0;
+  }
+  .title {
+    margin: 1rem 0 1rem;
+  }
+  .subtitle {
+    color: $blue-light;
+    margin: 1rem 0 0.5rem;
+  }
+  .content {
+    margin: 0.5rem 0;
+  }
+  button.btn-secondary-negative {
+    margin: 2rem 0.25rem 0.5rem;
+  }
+}
+
+#accessibility-title {
+  display: none;
+}
diff --git a/src/components/Duel/lastDuelModal.spec.tsx b/src/components/Duel/lastDuelModal.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..10c3783167dfadf026429c797d88b2d8fadc3e0f
--- /dev/null
+++ b/src/components/Duel/lastDuelModal.spec.tsx
@@ -0,0 +1,27 @@
+import React from 'react'
+import { mount } from 'enzyme'
+import { act } from 'react-dom/test-utils'
+import LastDuelModal from './lastDuelModal'
+
+jest.mock('cozy-ui/transpiled/react/I18n', () => {
+  return {
+    useI18n: jest.fn(() => {
+      return {
+        t: (str: string) => str,
+      }
+    }),
+  }
+})
+
+describe('lastDuelModal component', () => {
+  it('should render correctly', async () => {
+    const wrapper = mount(
+      <LastDuelModal open={true} handleCloseClick={jest.fn()} />
+    )
+    await act(async () => {
+      await new Promise(resolve => setTimeout(resolve))
+      wrapper.update()
+    })
+    expect(wrapper).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Duel/lastDuelModal.tsx b/src/components/Duel/lastDuelModal.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..5ebd3f2e8252d86472169d7fad0e95559d8a4bfe
--- /dev/null
+++ b/src/components/Duel/lastDuelModal.tsx
@@ -0,0 +1,51 @@
+import React, { useEffect, useState } from 'react'
+import './lastDuelModal.scss'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import Dialog from '@material-ui/core/Dialog'
+import star from 'assets/icons/visu/duel/star.svg'
+import CloseIcon from 'assets/icons/ico/close.svg'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+
+interface LastDuelModalProps {
+  open: boolean
+  handleCloseClick: () => void
+}
+
+const LastDuelModal: React.FC<LastDuelModalProps> = ({
+  open,
+  handleCloseClick,
+}: LastDuelModalProps) => {
+  const { t } = useI18n()
+
+  return (
+    <Dialog
+      open={open}
+      onClose={handleCloseClick}
+      aria-labelledby={'accessibility-title'}
+      classes={{
+        root: 'modal-root',
+        paper: 'modal-paper blue-light-border',
+      }}
+    >
+      <div id={'accessibility-title'}>{t('last_duel_modal.title')}</div>
+      <div className="duel-last-modal-root">
+        <div onClick={handleCloseClick}>
+          <StyledIcon className="closeIcon" icon={CloseIcon} size={16} />
+        </div>
+        <StyledIcon className="icon" icon={star} size={48} />
+        <div className="text-28-bold title">{t('last_duel_modal.title')}</div>
+        <div className="text-22-bold subtitle">
+          {t('last_duel_modal.subtitle')}
+        </div>
+        <div className="text-18-normal content">
+          {t('last_duel_modal.message1')}
+        </div>
+        <div className="text-18-normal content">
+          {t('last_duel_modal.message2')}
+        </div>
+      </div>
+    </Dialog>
+  )
+}
+
+export default LastDuelModal
diff --git a/src/components/Ecogesture/EcogestureEmptyList.spec.tsx b/src/components/Ecogesture/EcogestureEmptyList.spec.tsx
index 1093a09a8df46b210f413ec0e7e223b13c53ada5..c6318f0fc9b76f936c2da157e13bfcd5374f3814 100644
--- a/src/components/Ecogesture/EcogestureEmptyList.spec.tsx
+++ b/src/components/Ecogesture/EcogestureEmptyList.spec.tsx
@@ -61,10 +61,7 @@ describe('EcogestureEmptyList component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockChangeTab).toHaveBeenCalledTimes(1)
   })
   it('should launch ecogesture form', () => {
@@ -83,10 +80,7 @@ describe('EcogestureEmptyList component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     expect(mockHistoryPush).toHaveBeenCalledWith('/ecogesture-form')
   })
   it('should render doing text with empty list on completed selection', () => {
@@ -106,12 +100,9 @@ describe('EcogestureEmptyList component', () => {
       </Provider>
     )
 
-    expect(
-      wrapper
-        .find('.text')
-        .first()
-        .text()
-    ).toBe('ecogesture.emptyList.doing1_done')
+    expect(wrapper.find('.text').first().text()).toBe(
+      'ecogesture.emptyList.doing1_done'
+    )
   })
   it('should render objective text with empty list on completed selection', () => {
     const store = mockStore({
@@ -130,11 +121,8 @@ describe('EcogestureEmptyList component', () => {
       </Provider>
     )
 
-    expect(
-      wrapper
-        .find('.text')
-        .first()
-        .text()
-    ).toBe('ecogesture.emptyList.obj1_done')
+    expect(wrapper.find('.text').first().text()).toBe(
+      'ecogesture.emptyList.obj1_done'
+    )
   })
 })
diff --git a/src/components/Ecogesture/EcogestureInitModal.spec.tsx b/src/components/Ecogesture/EcogestureInitModal.spec.tsx
index 298dd9d9330ba76d3dc56029d2361bd98ff31a7b..ed59dc9cb4583e1bfa5df52f01ea136e99926d84 100644
--- a/src/components/Ecogesture/EcogestureInitModal.spec.tsx
+++ b/src/components/Ecogesture/EcogestureInitModal.spec.tsx
@@ -76,10 +76,7 @@ describe('EcogestureInitModal component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHandleClose).toHaveBeenCalledTimes(1)
   })
   it('should close modal and maunch form', async () => {
@@ -100,10 +97,7 @@ describe('EcogestureInitModal component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     expect(mockHandleLaunchForm).toHaveBeenCalledTimes(1)
   })
 })
diff --git a/src/components/Ecogesture/EcogestureList.spec.tsx b/src/components/Ecogesture/EcogestureList.spec.tsx
index f56bd2f2352d1207de14f95851f41a095c44d8b7..e0ab6d225753f18c4b336200e5e58ed41beece17 100644
--- a/src/components/Ecogesture/EcogestureList.spec.tsx
+++ b/src/components/Ecogesture/EcogestureList.spec.tsx
@@ -69,15 +69,9 @@ describe('EcogesturesList component', () => {
     )
     await waitForComponentToPaint(wrapper)
     wrapper.find('.filter-button').simulate('click')
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(wrapper.find('.filter-menu').exists()).toBeTruthy()
-    wrapper
-      .find(MenuItem)
-      .at(1)
-      .simulate('click')
+    wrapper.find(MenuItem).at(1).simulate('click')
     expect(wrapper.find('.ecogestures').text()).toBe('ecogesture.HEATING')
   })
 
diff --git a/src/components/Ecogesture/EcogestureModal.tsx b/src/components/Ecogesture/EcogestureModal.tsx
index 8d31c646d0f8c35577bc06a00d92010b0dfe7ac2..1ea598db980a17a795365d9bd56faa8dfe97752a 100644
--- a/src/components/Ecogesture/EcogestureModal.tsx
+++ b/src/components/Ecogesture/EcogestureModal.tsx
@@ -120,7 +120,7 @@ const EcogestureModal: React.FC<EcogestureModalProps> = ({
               ))}
             </div>
           </div>
-          <div className="long-name">{ecogesture.longName}</div>
+          <div className="text-16-bold long-name">{ecogesture.longName}</div>
           {isAction ? (
             <Button
               aria-label={t(
diff --git a/src/components/Ecogesture/EcogestureView.spec.tsx b/src/components/Ecogesture/EcogestureView.spec.tsx
index 0c7ab368b83f4f492036b88c08246bc8fe91195f..b62290252e0b1148e071f4dc42d6e3272a9412f9 100644
--- a/src/components/Ecogesture/EcogestureView.spec.tsx
+++ b/src/components/Ecogesture/EcogestureView.spec.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/display-name */
 import React from 'react'
 import { mount } from 'enzyme'
 import { Provider } from 'react-redux'
@@ -122,10 +121,7 @@ describe('EcogestureView component', () => {
     await waitForComponentToPaint(wrapper)
 
     expect(wrapper.find(EcogestureInitModal).exists()).toBeTruthy()
-    wrapper
-      .find(IconButton)
-      .first()
-      .simulate('click')
+    wrapper.find(IconButton).first().simulate('click')
     await waitForComponentToPaint(wrapper)
 
     expect(updateProfileSpy).toHaveBeenCalledWith({
@@ -167,10 +163,7 @@ describe('EcogestureView component', () => {
     )
     await waitForComponentToPaint(wrapper)
 
-    wrapper
-      .find(Tab)
-      .first()
-      .simulate('click')
+    wrapper.find(Tab).first().simulate('click')
     mockgetAllEcogestures.mockResolvedValueOnce([])
 
     await waitForComponentToPaint(wrapper)
diff --git a/src/components/Ecogesture/EcogestureView.tsx b/src/components/Ecogesture/EcogestureView.tsx
index afd4096cc011e072107f3918ecff3dfc69cf08e2..05f9f3cf7953ef73a7f3b1e53021c0aea41dff43 100644
--- a/src/components/Ecogesture/EcogestureView.tsx
+++ b/src/components/Ecogesture/EcogestureView.tsx
@@ -77,12 +77,10 @@ const EcogestureView: React.FC = () => {
   >([])
   const [totalViewed, setTotalViewed] = useState<number>(0)
   const [totalAvailable, setTotalAvailable] = useState<number>(0)
-  const [openEcogestureInitModal, setOpenEcogestureInitModal] = useState<
-    boolean
-  >(!haveSeenEcogestureModal)
-  const [openEcogestureReinitModal, setOpenEcogestureReinitModal] = useState<
-    boolean
-  >(false)
+  const [openEcogestureInitModal, setOpenEcogestureInitModal] =
+    useState<boolean>(!haveSeenEcogestureModal)
+  const [openEcogestureReinitModal, setOpenEcogestureReinitModal] =
+    useState<boolean>(false)
 
   const handleReinitClick = useCallback(() => {
     setOpenEcogestureReinitModal(true)
@@ -159,9 +157,8 @@ const EcogestureView: React.FC = () => {
     async function loadEcogestures() {
       const ecogestureService = new EcogestureService(client)
       const dataAll = await ecogestureService.getAllEcogestures(getSeason())
-      const availableList: Ecogesture[] = await ecogestureService.getEcogestureListByProfile(
-        profileEcogesture
-      )
+      const availableList: Ecogesture[] =
+        await ecogestureService.getEcogestureListByProfile(profileEcogesture)
       const filteredList: Ecogesture[] = availableList.filter(
         (ecogesture: Ecogesture) => ecogesture.viewedInSelection === false
       )
diff --git a/src/components/Ecogesture/SingleEcogesture.spec.tsx b/src/components/Ecogesture/SingleEcogesture.spec.tsx
index ae4e3360ee6982f4c34bbc59f26ad5c20eebfa3a..b70a8f41f32171d533b46b873cf88b5f394aed6b 100644
--- a/src/components/Ecogesture/SingleEcogesture.spec.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.spec.tsx
@@ -107,10 +107,7 @@ describe('SingleEcogesture component', () => {
     )
     await waitForComponentToPaint(wrapper)
 
-    wrapper
-      .find('.doing-btn')
-      .first()
-      .simulate('click')
+    wrapper.find('.doing-btn').first().simulate('click')
     await waitForComponentToPaint(wrapper)
 
     expect(mockupdateEcogesture).toHaveBeenCalledWith(updatedEcogesture)
@@ -139,10 +136,7 @@ describe('SingleEcogesture component', () => {
     )
     await waitForComponentToPaint(wrapper)
 
-    wrapper
-      .find('.objective-btn')
-      .first()
-      .simulate('click')
+    wrapper.find('.objective-btn').first().simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(mockupdateEcogesture).toHaveBeenCalledWith(updatedEcogesture)
   })
@@ -168,10 +162,7 @@ describe('SingleEcogesture component', () => {
     )
     await waitForComponentToPaint(wrapper)
 
-    wrapper
-      .find('.toggle-text')
-      .first()
-      .simulate('click')
+    wrapper.find('.toggle-text').first().simulate('click')
     await waitForComponentToPaint(wrapper)
 
     expect(wrapper.find('.toggle-text').text()).toBe(
diff --git a/src/components/Ecogesture/SingleEcogesture.tsx b/src/components/Ecogesture/SingleEcogesture.tsx
index 5694040186f35cc094a56adf5b7e7620272d51ed..1b5f7e7985a3d339b37a43a7934fdbf9e26edf22 100644
--- a/src/components/Ecogesture/SingleEcogesture.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.tsx
@@ -44,11 +44,13 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
   const [isObjective, setIsObjective] = useState<boolean>(false)
   const [isLoading, setIsLoading] = useState<boolean>(true)
   const ecogestureID: string = match.params.id
-  const selectionCompleted = location.state.selectionCompleted
+  const selectionCompleted =
+    location && location.state && location.state.selectionCompleted
 
-  const ecogestureService = useMemo(() => new EcogestureService(client), [
-    client,
-  ])
+  const ecogestureService = useMemo(
+    () => new EcogestureService(client),
+    [client]
+  )
   const { currentChallenge } = useSelector(
     (state: AppStore) => state.ecolyo.challenge
   )
@@ -58,7 +60,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
   }
   const [, setValidExploration] = useExploration()
   const toggleMoreDetail = () => {
-    setIsMoreDetail(prev => !prev)
+    setIsMoreDetail((prev) => !prev)
   }
   const toggleObjective = useCallback(async () => {
     if (ecogesture) {
@@ -67,7 +69,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
         toUpdate
       )
       if (updatedEcogesture) {
-        setIsObjective(prev => !prev)
+        setIsObjective((prev) => !prev)
         setEcogesture(updatedEcogesture)
       }
     }
@@ -80,7 +82,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
         toUpdate
       )
       if (updatedEcogesture) {
-        setIsDoing(prev => !prev)
+        setIsDoing((prev) => !prev)
         setEcogesture(updatedEcogesture)
       }
     }
@@ -140,13 +142,13 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
   return ecogesture ? (
     <>
       <CozyBar
-        titleKey={ecogesture && ecogesture.shortName}
+        titleKey={t('common.title_ecogesture')}
         isNotKey={true}
         displayBackArrow={true}
       />
       <Header
         setHeaderHeight={defineHeaderHeight}
-        desktopTitleKey={ecogesture && ecogesture.shortName}
+        desktopTitleKey={t('common.title_ecogesture')}
         displayBackArrow={true}
         isNotKey={true}
       ></Header>
@@ -162,6 +164,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
             )}
           </div>
           <div className="details">
+            <div className="text-22 title">{ecogesture.shortName}</div>
             <div className="efficiency">
               <span className="text text-14-normal">
                 {t('ecogesture_modal.efficiency')}
@@ -170,9 +173,9 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
             </div>
           </div>
           <div className="styled-container">
-            <div className="long-name">{ecogesture.longName}</div>
+            <div className="long-name text-18-bold">{ecogesture.longName}</div>
             <div
-              className={classNames('description text-16-normal-150', {
+              className={classNames('description text-18-normal-150', {
                 ['block']: isMoreDetail === true,
               })}
             >
@@ -193,8 +196,9 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
                 aria-label={t('ecogesture.objective')}
                 onClick={toggleObjective}
                 classes={{
-                  root: `btn-secondary-negative objective-btn ${isObjective &&
-                    'active'}`,
+                  root: `btn-secondary-negative objective-btn ${
+                    isObjective && 'active'
+                  }`,
                   label: 'text-15-normal',
                 }}
               >
@@ -211,8 +215,9 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
                 aria-label={t('ecogesture.doing')}
                 onClick={toggleDoing}
                 classes={{
-                  root: `btn-secondary-negative doing-btn ${isDoing &&
-                    'active'}`,
+                  root: `btn-secondary-negative doing-btn ${
+                    isDoing && 'active'
+                  }`,
                   label: 'text-15-normal',
                 }}
               >
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
index 5101707fde8e729be87ba46df5f4ed6d8eb7abf9..2048000ad326de83daed64f01f35e5f163905be2 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
@@ -413,36 +413,34 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
                                     <span
                                       className="MuiCardActionArea-focusHighlight"
                                     />
-                                    <NoSsr>
-                                      <WithStyles(memo)
+                                    <WithStyles(memo)
+                                      center={false}
+                                    >
+                                      <ForwardRef(TouchRipple)
                                         center={false}
-                                      >
-                                        <ForwardRef(TouchRipple)
-                                          center={false}
-                                          classes={
-                                            Object {
-                                              "child": "MuiTouchRipple-child",
-                                              "childLeaving": "MuiTouchRipple-childLeaving",
-                                              "childPulsate": "MuiTouchRipple-childPulsate",
-                                              "ripple": "MuiTouchRipple-ripple",
-                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                              "root": "MuiTouchRipple-root",
-                                            }
+                                        classes={
+                                          Object {
+                                            "child": "MuiTouchRipple-child",
+                                            "childLeaving": "MuiTouchRipple-childLeaving",
+                                            "childPulsate": "MuiTouchRipple-childPulsate",
+                                            "ripple": "MuiTouchRipple-ripple",
+                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                            "root": "MuiTouchRipple-root",
                                           }
+                                        }
+                                      >
+                                        <span
+                                          className="MuiTouchRipple-root"
                                         >
-                                          <span
-                                            className="MuiTouchRipple-root"
-                                          >
-                                            <TransitionGroup
-                                              childFactory={[Function]}
-                                              component={null}
-                                              exit={true}
-                                            />
-                                          </span>
-                                        </ForwardRef(TouchRipple)>
-                                      </WithStyles(memo)>
-                                    </NoSsr>
+                                          <TransitionGroup
+                                            childFactory={[Function]}
+                                            component={null}
+                                            exit={true}
+                                          />
+                                        </span>
+                                      </ForwardRef(TouchRipple)>
+                                    </WithStyles(memo)>
                                   </button>
                                 </ForwardRef(ButtonBase)>
                               </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureEmptyList.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureEmptyList.spec.tsx.snap
index db551a11f78ecb9ab71eb9e9a261063f0a689022..328305ab2f0a815cf71602e0cc0079e6e057a5c9 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureEmptyList.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureEmptyList.spec.tsx.snap
@@ -168,36 +168,34 @@ exports[`EcogestureEmptyList component should be rendered correctly 1`] = `
                     >
                       ecogesture.emptyList.btn1
                     </span>
-                    <NoSsr>
-                      <WithStyles(memo)
+                    <WithStyles(memo)
+                      center={false}
+                    >
+                      <ForwardRef(TouchRipple)
                         center={false}
-                      >
-                        <ForwardRef(TouchRipple)
-                          center={false}
-                          classes={
-                            Object {
-                              "child": "MuiTouchRipple-child",
-                              "childLeaving": "MuiTouchRipple-childLeaving",
-                              "childPulsate": "MuiTouchRipple-childPulsate",
-                              "ripple": "MuiTouchRipple-ripple",
-                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                              "root": "MuiTouchRipple-root",
-                            }
+                        classes={
+                          Object {
+                            "child": "MuiTouchRipple-child",
+                            "childLeaving": "MuiTouchRipple-childLeaving",
+                            "childPulsate": "MuiTouchRipple-childPulsate",
+                            "ripple": "MuiTouchRipple-ripple",
+                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                            "rippleVisible": "MuiTouchRipple-rippleVisible",
+                            "root": "MuiTouchRipple-root",
                           }
+                        }
+                      >
+                        <span
+                          className="MuiTouchRipple-root"
                         >
-                          <span
-                            className="MuiTouchRipple-root"
-                          >
-                            <TransitionGroup
-                              childFactory={[Function]}
-                              component={null}
-                              exit={true}
-                            />
-                          </span>
-                        </ForwardRef(TouchRipple)>
-                      </WithStyles(memo)>
-                    </NoSsr>
+                          <TransitionGroup
+                            childFactory={[Function]}
+                            component={null}
+                            exit={true}
+                          />
+                        </span>
+                      </ForwardRef(TouchRipple)>
+                    </WithStyles(memo)>
                   </button>
                 </ForwardRef(ButtonBase)>
               </WithStyles(ForwardRef(ButtonBase))>
@@ -301,36 +299,34 @@ exports[`EcogestureEmptyList component should be rendered correctly 1`] = `
                     >
                       ecogesture.emptyList.btn2
                     </span>
-                    <NoSsr>
-                      <WithStyles(memo)
+                    <WithStyles(memo)
+                      center={false}
+                    >
+                      <ForwardRef(TouchRipple)
                         center={false}
-                      >
-                        <ForwardRef(TouchRipple)
-                          center={false}
-                          classes={
-                            Object {
-                              "child": "MuiTouchRipple-child",
-                              "childLeaving": "MuiTouchRipple-childLeaving",
-                              "childPulsate": "MuiTouchRipple-childPulsate",
-                              "ripple": "MuiTouchRipple-ripple",
-                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                              "root": "MuiTouchRipple-root",
-                            }
+                        classes={
+                          Object {
+                            "child": "MuiTouchRipple-child",
+                            "childLeaving": "MuiTouchRipple-childLeaving",
+                            "childPulsate": "MuiTouchRipple-childPulsate",
+                            "ripple": "MuiTouchRipple-ripple",
+                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                            "rippleVisible": "MuiTouchRipple-rippleVisible",
+                            "root": "MuiTouchRipple-root",
                           }
+                        }
+                      >
+                        <span
+                          className="MuiTouchRipple-root"
                         >
-                          <span
-                            className="MuiTouchRipple-root"
-                          >
-                            <TransitionGroup
-                              childFactory={[Function]}
-                              component={null}
-                              exit={true}
-                            />
-                          </span>
-                        </ForwardRef(TouchRipple)>
-                      </WithStyles(memo)>
-                    </NoSsr>
+                          <TransitionGroup
+                            childFactory={[Function]}
+                            component={null}
+                            exit={true}
+                          />
+                        </span>
+                      </ForwardRef(TouchRipple)>
+                    </WithStyles(memo)>
                   </button>
                 </ForwardRef(ButtonBase)>
               </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureInitModal.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureInitModal.spec.tsx.snap
index 84d7f084314a1ebadc63c942ff82061649576dea..ab830dd0628564a7762dc2ba9277159e7ddf21a1 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureInitModal.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureInitModal.spec.tsx.snap
@@ -109,12 +109,17 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -374,7 +379,6 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={false}
           disableEscapeKeyDown={false}
           onClose={[MockFunction]}
           open={true}
@@ -590,7 +594,7 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                     </ForwardRef(Fade)>
                   </ForwardRef(Backdrop)>
                 </WithStyles(ForwardRef(Backdrop))>
-                <TrapFocus
+                <Unstable_TrapFocus
                   disableAutoFocus={false}
                   disableEnforceFocus={false}
                   disableRestoreFocus={false}
@@ -640,8 +644,8 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                     >
                       <div
                         className="MuiDialog-container MuiDialog-scrollPaper"
-                        onClick={[Function]}
                         onMouseDown={[Function]}
+                        onMouseUp={[Function]}
                         role="none presentation"
                         style={
                           Object {
@@ -797,36 +801,34 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                                             </Component>
                                           </Icon>
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={true}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={true}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={true}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -953,36 +955,34 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                                             >
                                               ecogesture.initModal.btn1
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1086,36 +1086,34 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                                             >
                                               ecogesture.initModal.btn2
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1133,7 +1131,7 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                     data-test="sentinelEnd"
                     tabIndex={0}
                   />
-                </TrapFocus>
+                </Unstable_TrapFocus>
               </div>
             </Portal>
           </ForwardRef(Portal)>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
index 2b952c562e3f62fd514c329cf197985559249d2c..d8031cfefc297d58b2611c7629fb2223d84568c1 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
@@ -303,36 +303,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                               ecogesture.MENU_TITLE
                             </span>
                           </span>
-                          <NoSsr>
-                            <WithStyles(memo)
+                          <WithStyles(memo)
+                            center={false}
+                          >
+                            <ForwardRef(TouchRipple)
                               center={false}
-                            >
-                              <ForwardRef(TouchRipple)
-                                center={false}
-                                classes={
-                                  Object {
-                                    "child": "MuiTouchRipple-child",
-                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                    "ripple": "MuiTouchRipple-ripple",
-                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                    "root": "MuiTouchRipple-root",
-                                  }
+                              classes={
+                                Object {
+                                  "child": "MuiTouchRipple-child",
+                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                  "ripple": "MuiTouchRipple-ripple",
+                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                  "root": "MuiTouchRipple-root",
                                 }
+                              }
+                            >
+                              <span
+                                className="MuiTouchRipple-root"
                               >
-                                <span
-                                  className="MuiTouchRipple-root"
-                                >
-                                  <TransitionGroup
-                                    childFactory={[Function]}
-                                    component={null}
-                                    exit={true}
-                                  />
-                                </span>
-                              </ForwardRef(TouchRipple)>
-                            </WithStyles(memo)>
-                          </NoSsr>
+                                <TransitionGroup
+                                  childFactory={[Function]}
+                                  component={null}
+                                  exit={true}
+                                />
+                              </span>
+                            </ForwardRef(TouchRipple)>
+                          </WithStyles(memo)>
                         </button>
                       </ForwardRef(ButtonBase)>
                     </WithStyles(ForwardRef(ButtonBase))>
@@ -386,6 +384,11 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                           },
                         }
                       }
+                      TransitionProps={
+                        Object {
+                          "onEntering": [Function],
+                        }
+                      }
                       anchorEl={null}
                       anchorOrigin={
                         Object {
@@ -401,7 +404,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                       getContentAnchorEl={[Function]}
                       keepMounted={true}
                       onClose={[Function]}
-                      onEntering={[Function]}
                       open={false}
                       transformOrigin={
                         Object {
@@ -419,6 +421,11 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                             },
                           }
                         }
+                        TransitionProps={
+                          Object {
+                            "onEntering": [Function],
+                          }
+                        }
                         anchorEl={null}
                         anchorOrigin={
                           Object {
@@ -435,7 +442,6 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                         getContentAnchorEl={[Function]}
                         keepMounted={true}
                         onClose={[Function]}
-                        onEntering={[Function]}
                         open={false}
                         transformOrigin={
                           Object {
@@ -604,7 +610,7 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                   onClick={[Function]}
                                   open={false}
                                 />
-                                <TrapFocus
+                                <Unstable_TrapFocus
                                   disableAutoFocus={false}
                                   disableEnforceFocus={false}
                                   disableRestoreFocus={false}
@@ -913,36 +919,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                       </div>
                                                                     </ForwardRef(ListItemIcon)>
                                                                   </WithStyles(ForwardRef(ListItemIcon))>
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1056,36 +1060,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.HEATING
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1199,36 +1201,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.AIR_CONDITIONING
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1342,36 +1342,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.ECS
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1485,36 +1483,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.COLD_WATER
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1628,36 +1624,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.ELECTRICITY_SPECIFIC
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1771,36 +1765,34 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                                                   tabIndex={-1}
                                                                 >
                                                                   ecogesture.COOKING
-                                                                  <NoSsr>
-                                                                    <WithStyles(memo)
+                                                                  <WithStyles(memo)
+                                                                    center={false}
+                                                                  >
+                                                                    <ForwardRef(TouchRipple)
                                                                       center={false}
-                                                                    >
-                                                                      <ForwardRef(TouchRipple)
-                                                                        center={false}
-                                                                        classes={
-                                                                          Object {
-                                                                            "child": "MuiTouchRipple-child",
-                                                                            "childLeaving": "MuiTouchRipple-childLeaving",
-                                                                            "childPulsate": "MuiTouchRipple-childPulsate",
-                                                                            "ripple": "MuiTouchRipple-ripple",
-                                                                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                                            "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                                            "root": "MuiTouchRipple-root",
-                                                                          }
+                                                                      classes={
+                                                                        Object {
+                                                                          "child": "MuiTouchRipple-child",
+                                                                          "childLeaving": "MuiTouchRipple-childLeaving",
+                                                                          "childPulsate": "MuiTouchRipple-childPulsate",
+                                                                          "ripple": "MuiTouchRipple-ripple",
+                                                                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                                          "root": "MuiTouchRipple-root",
                                                                         }
+                                                                      }
+                                                                    >
+                                                                      <span
+                                                                        className="MuiTouchRipple-root"
                                                                       >
-                                                                        <span
-                                                                          className="MuiTouchRipple-root"
-                                                                        >
-                                                                          <TransitionGroup
-                                                                            childFactory={[Function]}
-                                                                            component={null}
-                                                                            exit={true}
-                                                                          />
-                                                                        </span>
-                                                                      </ForwardRef(TouchRipple)>
-                                                                    </WithStyles(memo)>
-                                                                  </NoSsr>
+                                                                        <TransitionGroup
+                                                                          childFactory={[Function]}
+                                                                          component={null}
+                                                                          exit={true}
+                                                                        />
+                                                                      </span>
+                                                                    </ForwardRef(TouchRipple)>
+                                                                  </WithStyles(memo)>
                                                                 </li>
                                                               </ForwardRef(ButtonBase)>
                                                             </WithStyles(ForwardRef(ButtonBase))>
@@ -1821,7 +1813,7 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                                     data-test="sentinelEnd"
                                     tabIndex={0}
                                   />
-                                </TrapFocus>
+                                </Unstable_TrapFocus>
                               </div>
                             </Portal>
                           </ForwardRef(Portal)>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap
index 49f0e57d37977177e6f46d84c0f160ae16bbab66..9539b429090cbf3829daebb4201acf11754c729b 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap
@@ -109,12 +109,17 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -374,7 +379,6 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={false}
           disableEscapeKeyDown={false}
           onClose={[MockFunction]}
           open={true}
@@ -616,7 +620,7 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                     </ForwardRef(Fade)>
                   </ForwardRef(Backdrop)>
                 </WithStyles(ForwardRef(Backdrop))>
-                <TrapFocus
+                <Unstable_TrapFocus
                   disableAutoFocus={false}
                   disableEnforceFocus={false}
                   disableRestoreFocus={false}
@@ -666,8 +670,8 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                     >
                       <div
                         className="MuiDialog-container MuiDialog-scrollPaper"
-                        onClick={[Function]}
                         onMouseDown={[Function]}
+                        onMouseUp={[Function]}
                         role="none presentation"
                         style={
                           Object {
@@ -823,36 +827,34 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                                             </Component>
                                           </Icon>
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={true}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={true}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={true}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -1019,36 +1021,34 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                                             >
                                               ecogesture.reinitModal.btn1
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1152,36 +1152,34 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                                             >
                                               ecogesture.reinitModal.btn2
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1199,7 +1197,7 @@ exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
                     data-test="sentinelEnd"
                     tabIndex={0}
                   />
-                </TrapFocus>
+                </Unstable_TrapFocus>
               </div>
             </Portal>
           </ForwardRef(Portal)>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
index 32c9365cd3446fe235df5db765ea157aaba4e915..ad6c92b1efe5377c455bb714d02db5bfcb985c76 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
@@ -61,7 +61,6 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
           value={2}
         >
           <div
-            aria-label="ecogestures-tabs"
             className="MuiTabs-root ecogestures-tabs"
           >
             <div
@@ -75,7 +74,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
               }
             >
               <div
+                aria-label="ecogestures-tabs"
                 className="MuiTabs-flexContainer MuiTabs-centered"
+                onKeyDown={[Function]}
                 role="tablist"
               >
                 <WithStyles(ForwardRef(Tab))
@@ -137,7 +138,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                       focusRipple={true}
                       id="simple-tab-0"
                       onClick={[Function]}
+                      onFocus={[Function]}
                       role="tab"
+                      tabIndex={-1}
                     >
                       <ForwardRef(ButtonBase)
                         aria-controls="simple-tabpanel-0"
@@ -154,7 +157,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                         focusRipple={true}
                         id="simple-tab-0"
                         onClick={[Function]}
+                        onFocus={[Function]}
                         role="tab"
+                        tabIndex={-1}
                       >
                         <button
                           aria-controls="simple-tabpanel-0"
@@ -175,7 +180,7 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                           onTouchMove={[Function]}
                           onTouchStart={[Function]}
                           role="tab"
-                          tabIndex={0}
+                          tabIndex={-1}
                           type="button"
                         >
                           <span
@@ -185,36 +190,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             <br />
                             (0)
                           </span>
-                          <NoSsr>
-                            <WithStyles(memo)
+                          <WithStyles(memo)
+                            center={false}
+                          >
+                            <ForwardRef(TouchRipple)
                               center={false}
-                            >
-                              <ForwardRef(TouchRipple)
-                                center={false}
-                                classes={
-                                  Object {
-                                    "child": "MuiTouchRipple-child",
-                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                    "ripple": "MuiTouchRipple-ripple",
-                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                    "root": "MuiTouchRipple-root",
-                                  }
+                              classes={
+                                Object {
+                                  "child": "MuiTouchRipple-child",
+                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                  "ripple": "MuiTouchRipple-ripple",
+                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                  "root": "MuiTouchRipple-root",
                                 }
+                              }
+                            >
+                              <span
+                                className="MuiTouchRipple-root"
                               >
-                                <span
-                                  className="MuiTouchRipple-root"
-                                >
-                                  <TransitionGroup
-                                    childFactory={[Function]}
-                                    component={null}
-                                    exit={true}
-                                  />
-                                </span>
-                              </ForwardRef(TouchRipple)>
-                            </WithStyles(memo)>
-                          </NoSsr>
+                                <TransitionGroup
+                                  childFactory={[Function]}
+                                  component={null}
+                                  exit={true}
+                                />
+                              </span>
+                            </ForwardRef(TouchRipple)>
+                          </WithStyles(memo)>
                         </button>
                       </ForwardRef(ButtonBase)>
                     </WithStyles(ForwardRef(ButtonBase))>
@@ -279,7 +282,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                       focusRipple={true}
                       id="simple-tab-1"
                       onClick={[Function]}
+                      onFocus={[Function]}
                       role="tab"
+                      tabIndex={-1}
                     >
                       <ForwardRef(ButtonBase)
                         aria-controls="simple-tabpanel-1"
@@ -296,7 +301,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                         focusRipple={true}
                         id="simple-tab-1"
                         onClick={[Function]}
+                        onFocus={[Function]}
                         role="tab"
+                        tabIndex={-1}
                       >
                         <button
                           aria-controls="simple-tabpanel-1"
@@ -317,7 +324,7 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                           onTouchMove={[Function]}
                           onTouchStart={[Function]}
                           role="tab"
-                          tabIndex={0}
+                          tabIndex={-1}
                           type="button"
                         >
                           <span
@@ -327,36 +334,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             <br />
                             (0)
                           </span>
-                          <NoSsr>
-                            <WithStyles(memo)
+                          <WithStyles(memo)
+                            center={false}
+                          >
+                            <ForwardRef(TouchRipple)
                               center={false}
-                            >
-                              <ForwardRef(TouchRipple)
-                                center={false}
-                                classes={
-                                  Object {
-                                    "child": "MuiTouchRipple-child",
-                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                    "ripple": "MuiTouchRipple-ripple",
-                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                    "root": "MuiTouchRipple-root",
-                                  }
+                              classes={
+                                Object {
+                                  "child": "MuiTouchRipple-child",
+                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                  "ripple": "MuiTouchRipple-ripple",
+                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                  "root": "MuiTouchRipple-root",
                                 }
+                              }
+                            >
+                              <span
+                                className="MuiTouchRipple-root"
                               >
-                                <span
-                                  className="MuiTouchRipple-root"
-                                >
-                                  <TransitionGroup
-                                    childFactory={[Function]}
-                                    component={null}
-                                    exit={true}
-                                  />
-                                </span>
-                              </ForwardRef(TouchRipple)>
-                            </WithStyles(memo)>
-                          </NoSsr>
+                                <TransitionGroup
+                                  childFactory={[Function]}
+                                  component={null}
+                                  exit={true}
+                                />
+                              </span>
+                            </ForwardRef(TouchRipple)>
+                          </WithStyles(memo)>
                         </button>
                       </ForwardRef(ButtonBase)>
                     </WithStyles(ForwardRef(ButtonBase))>
@@ -421,7 +426,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                       focusRipple={true}
                       id="simple-tab-2"
                       onClick={[Function]}
+                      onFocus={[Function]}
                       role="tab"
+                      tabIndex={0}
                     >
                       <ForwardRef(ButtonBase)
                         aria-controls="simple-tabpanel-2"
@@ -438,7 +445,9 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                         focusRipple={true}
                         id="simple-tab-2"
                         onClick={[Function]}
+                        onFocus={[Function]}
                         role="tab"
+                        tabIndex={0}
                       >
                         <button
                           aria-controls="simple-tabpanel-2"
@@ -469,36 +478,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             <br />
                             (3)
                           </span>
-                          <NoSsr>
-                            <WithStyles(memo)
+                          <WithStyles(memo)
+                            center={false}
+                          >
+                            <ForwardRef(TouchRipple)
                               center={false}
-                            >
-                              <ForwardRef(TouchRipple)
-                                center={false}
-                                classes={
-                                  Object {
-                                    "child": "MuiTouchRipple-child",
-                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                    "ripple": "MuiTouchRipple-ripple",
-                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                    "root": "MuiTouchRipple-root",
-                                  }
+                              classes={
+                                Object {
+                                  "child": "MuiTouchRipple-child",
+                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                  "ripple": "MuiTouchRipple-ripple",
+                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                  "root": "MuiTouchRipple-root",
                                 }
+                              }
+                            >
+                              <span
+                                className="MuiTouchRipple-root"
                               >
-                                <span
-                                  className="MuiTouchRipple-root"
-                                >
-                                  <TransitionGroup
-                                    childFactory={[Function]}
-                                    component={null}
-                                    exit={true}
-                                  />
-                                </span>
-                              </ForwardRef(TouchRipple)>
-                            </WithStyles(memo)>
-                          </NoSsr>
+                                <TransitionGroup
+                                  childFactory={[Function]}
+                                  component={null}
+                                  exit={true}
+                                />
+                              </span>
+                            </ForwardRef(TouchRipple)>
+                          </WithStyles(memo)>
                         </button>
                       </ForwardRef(ButtonBase)>
                     </WithStyles(ForwardRef(ButtonBase))>
@@ -720,36 +727,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             >
                               ecogesture.emptyList.btn1
                             </span>
-                            <NoSsr>
-                              <WithStyles(memo)
+                            <WithStyles(memo)
+                              center={false}
+                            >
+                              <ForwardRef(TouchRipple)
                                 center={false}
-                              >
-                                <ForwardRef(TouchRipple)
-                                  center={false}
-                                  classes={
-                                    Object {
-                                      "child": "MuiTouchRipple-child",
-                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                      "ripple": "MuiTouchRipple-ripple",
-                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                      "root": "MuiTouchRipple-root",
-                                    }
+                                classes={
+                                  Object {
+                                    "child": "MuiTouchRipple-child",
+                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                    "ripple": "MuiTouchRipple-ripple",
+                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                    "root": "MuiTouchRipple-root",
                                   }
+                                }
+                              >
+                                <span
+                                  className="MuiTouchRipple-root"
                                 >
-                                  <span
-                                    className="MuiTouchRipple-root"
-                                  >
-                                    <TransitionGroup
-                                      childFactory={[Function]}
-                                      component={null}
-                                      exit={true}
-                                    />
-                                  </span>
-                                </ForwardRef(TouchRipple)>
-                              </WithStyles(memo)>
-                            </NoSsr>
+                                  <TransitionGroup
+                                    childFactory={[Function]}
+                                    component={null}
+                                    exit={true}
+                                  />
+                                </span>
+                              </ForwardRef(TouchRipple)>
+                            </WithStyles(memo)>
                           </button>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
@@ -853,36 +858,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             >
                               ecogesture.emptyList.btn2
                             </span>
-                            <NoSsr>
-                              <WithStyles(memo)
+                            <WithStyles(memo)
+                              center={false}
+                            >
+                              <ForwardRef(TouchRipple)
                                 center={false}
-                              >
-                                <ForwardRef(TouchRipple)
-                                  center={false}
-                                  classes={
-                                    Object {
-                                      "child": "MuiTouchRipple-child",
-                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                      "ripple": "MuiTouchRipple-ripple",
-                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                      "root": "MuiTouchRipple-root",
-                                    }
+                                classes={
+                                  Object {
+                                    "child": "MuiTouchRipple-child",
+                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                    "ripple": "MuiTouchRipple-ripple",
+                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                    "root": "MuiTouchRipple-root",
                                   }
+                                }
+                              >
+                                <span
+                                  className="MuiTouchRipple-root"
                                 >
-                                  <span
-                                    className="MuiTouchRipple-root"
-                                  >
-                                    <TransitionGroup
-                                      childFactory={[Function]}
-                                      component={null}
-                                      exit={true}
-                                    />
-                                  </span>
-                                </ForwardRef(TouchRipple)>
-                              </WithStyles(memo)>
-                            </NoSsr>
+                                  <TransitionGroup
+                                    childFactory={[Function]}
+                                    component={null}
+                                    exit={true}
+                                  />
+                                </span>
+                              </ForwardRef(TouchRipple)>
+                            </WithStyles(memo)>
                           </button>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1060,36 +1063,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             >
                               ecogesture.emptyList.btn1
                             </span>
-                            <NoSsr>
-                              <WithStyles(memo)
+                            <WithStyles(memo)
+                              center={false}
+                            >
+                              <ForwardRef(TouchRipple)
                                 center={false}
-                              >
-                                <ForwardRef(TouchRipple)
-                                  center={false}
-                                  classes={
-                                    Object {
-                                      "child": "MuiTouchRipple-child",
-                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                      "ripple": "MuiTouchRipple-ripple",
-                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                      "root": "MuiTouchRipple-root",
-                                    }
+                                classes={
+                                  Object {
+                                    "child": "MuiTouchRipple-child",
+                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                    "ripple": "MuiTouchRipple-ripple",
+                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                    "root": "MuiTouchRipple-root",
                                   }
+                                }
+                              >
+                                <span
+                                  className="MuiTouchRipple-root"
                                 >
-                                  <span
-                                    className="MuiTouchRipple-root"
-                                  >
-                                    <TransitionGroup
-                                      childFactory={[Function]}
-                                      component={null}
-                                      exit={true}
-                                    />
-                                  </span>
-                                </ForwardRef(TouchRipple)>
-                              </WithStyles(memo)>
-                            </NoSsr>
+                                  <TransitionGroup
+                                    childFactory={[Function]}
+                                    component={null}
+                                    exit={true}
+                                  />
+                                </span>
+                              </ForwardRef(TouchRipple)>
+                            </WithStyles(memo)>
                           </button>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1193,36 +1194,34 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                             >
                               ecogesture.emptyList.btn2
                             </span>
-                            <NoSsr>
-                              <WithStyles(memo)
+                            <WithStyles(memo)
+                              center={false}
+                            >
+                              <ForwardRef(TouchRipple)
                                 center={false}
-                              >
-                                <ForwardRef(TouchRipple)
-                                  center={false}
-                                  classes={
-                                    Object {
-                                      "child": "MuiTouchRipple-child",
-                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                      "ripple": "MuiTouchRipple-ripple",
-                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                      "root": "MuiTouchRipple-root",
-                                    }
+                                classes={
+                                  Object {
+                                    "child": "MuiTouchRipple-child",
+                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                    "ripple": "MuiTouchRipple-ripple",
+                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                    "root": "MuiTouchRipple-root",
                                   }
+                                }
+                              >
+                                <span
+                                  className="MuiTouchRipple-root"
                                 >
-                                  <span
-                                    className="MuiTouchRipple-root"
-                                  >
-                                    <TransitionGroup
-                                      childFactory={[Function]}
-                                      component={null}
-                                      exit={true}
-                                    />
-                                  </span>
-                                </ForwardRef(TouchRipple)>
-                              </WithStyles(memo)>
-                            </NoSsr>
+                                  <TransitionGroup
+                                    childFactory={[Function]}
+                                    component={null}
+                                    exit={true}
+                                  />
+                                </span>
+                              </ForwardRef(TouchRipple)>
+                            </WithStyles(memo)>
                           </button>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
index 52ff638316feb318e17e07f0229cb3a3c06cb696..74d690fb4bb3ebbeb961c77fe06678c21f34eb0c 100644
--- a/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/SingleEcogesture.spec.tsx.snap
@@ -25,14 +25,14 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
     <Component
       displayBackArrow={true}
       isNotKey={true}
-      titleKey="Bonhomme de neige"
+      titleKey="common.title_ecogesture"
     >
       <div
         id="CozyBar"
       />
     </Component>
     <Component
-      desktopTitleKey="Bonhomme de neige"
+      desktopTitleKey="common.title_ecogesture"
       displayBackArrow={true}
       isNotKey={true}
       setHeaderHeight={[Function]}
@@ -56,6 +56,11 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
           <div
             className="details"
           >
+            <div
+              className="text-22 title"
+            >
+              Bonhomme de neige
+            </div>
             <div
               className="efficiency"
             >
@@ -77,12 +82,12 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
             className="styled-container"
           >
             <div
-              className="long-name"
+              className="long-name text-18-bold"
             >
               Je baisse le chauffage en mode hors gel lorsque je m'absente plus de 2 jours.
             </div>
             <div
-              className="description text-16-normal-150"
+              className="description text-18-normal-150"
             >
               On se demande parfois si cela vaut le coup de "couper le chauffage" quand on s’absente… dès qu’il s’agit d’un week-end la réponse est « oui sûrement » ! Attention cependant au retour à ne pas faire de la surchauffe ! L’idéal est bien évidemment de régler sa programmation pour que le chauffage se relance quelques heures avant votre retour…
             </div>
@@ -196,36 +201,34 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
                           ecogesture.objective
                         </span>
                       </span>
-                      <NoSsr>
-                        <WithStyles(memo)
+                      <WithStyles(memo)
+                        center={true}
+                      >
+                        <ForwardRef(TouchRipple)
                           center={true}
-                        >
-                          <ForwardRef(TouchRipple)
-                            center={true}
-                            classes={
-                              Object {
-                                "child": "MuiTouchRipple-child",
-                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                "ripple": "MuiTouchRipple-ripple",
-                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                "root": "MuiTouchRipple-root",
-                              }
+                          classes={
+                            Object {
+                              "child": "MuiTouchRipple-child",
+                              "childLeaving": "MuiTouchRipple-childLeaving",
+                              "childPulsate": "MuiTouchRipple-childPulsate",
+                              "ripple": "MuiTouchRipple-ripple",
+                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                              "root": "MuiTouchRipple-root",
                             }
+                          }
+                        >
+                          <span
+                            className="MuiTouchRipple-root"
                           >
-                            <span
-                              className="MuiTouchRipple-root"
-                            >
-                              <TransitionGroup
-                                childFactory={[Function]}
-                                component={null}
-                                exit={true}
-                              />
-                            </span>
-                          </ForwardRef(TouchRipple)>
-                        </WithStyles(memo)>
-                      </NoSsr>
+                            <TransitionGroup
+                              childFactory={[Function]}
+                              component={null}
+                              exit={true}
+                            />
+                          </span>
+                        </ForwardRef(TouchRipple)>
+                      </WithStyles(memo)>
                     </button>
                   </ForwardRef(ButtonBase)>
                 </WithStyles(ForwardRef(ButtonBase))>
@@ -331,36 +334,34 @@ exports[`SingleEcogesture component should be rendered correctly 1`] = `
                           ecogesture.doing
                         </span>
                       </span>
-                      <NoSsr>
-                        <WithStyles(memo)
+                      <WithStyles(memo)
+                        center={true}
+                      >
+                        <ForwardRef(TouchRipple)
                           center={true}
-                        >
-                          <ForwardRef(TouchRipple)
-                            center={true}
-                            classes={
-                              Object {
-                                "child": "MuiTouchRipple-child",
-                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                "ripple": "MuiTouchRipple-ripple",
-                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                "root": "MuiTouchRipple-root",
-                              }
+                          classes={
+                            Object {
+                              "child": "MuiTouchRipple-child",
+                              "childLeaving": "MuiTouchRipple-childLeaving",
+                              "childPulsate": "MuiTouchRipple-childPulsate",
+                              "ripple": "MuiTouchRipple-ripple",
+                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                              "root": "MuiTouchRipple-root",
                             }
+                          }
+                        >
+                          <span
+                            className="MuiTouchRipple-root"
                           >
-                            <span
-                              className="MuiTouchRipple-root"
-                            >
-                              <TransitionGroup
-                                childFactory={[Function]}
-                                component={null}
-                                exit={true}
-                              />
-                            </span>
-                          </ForwardRef(TouchRipple)>
-                        </WithStyles(memo)>
-                      </NoSsr>
+                            <TransitionGroup
+                              childFactory={[Function]}
+                              component={null}
+                              exit={true}
+                            />
+                          </span>
+                        </ForwardRef(TouchRipple)>
+                      </WithStyles(memo)>
                     </button>
                   </ForwardRef(ButtonBase)>
                 </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/Ecogesture/singleEcogesture.scss b/src/components/Ecogesture/singleEcogesture.scss
index 0ae3efe906985832775fb92aaeab34ff66b97a0d..0ed06b392d43b9e19454b7090a01cce62c826ae0 100644
--- a/src/components/Ecogesture/singleEcogesture.scss
+++ b/src/components/Ecogesture/singleEcogesture.scss
@@ -19,8 +19,7 @@
   padding: 1rem 1.2rem;
   .icon-container {
     margin: auto;
-    max-width: 250px;
-    height: 250px;
+    max-width: 180px;
     width: 100%;
     display: flex;
     .icon-big {
@@ -28,10 +27,15 @@
     }
   }
   .details {
+    flex-direction: column;
+    display: flex;
+    .title {
+      color: $soft-grey;
+    }
     .efficiency {
       display: flex;
       text-align: center;
-      margin: auto;
+      margin: 0.7rem auto 0;
       .text {
         margin-right: 0.7rem;
       }
@@ -39,15 +43,8 @@
   }
   .styled-container {
     line-height: 150%;
-    background: radial-gradient(
-      60.65% 30.62% at 50% 3.13%,
-      #2a2b30 0%,
-      #1b1c22 100%
-    );
-    border: 3px solid $blue-40;
-    padding: 1.5rem 0.6rem;
-    border-radius: 50px 1px 50px 1px;
-    margin: 1.5rem 0 1rem;
+    padding: 1.5rem 0.6rem 0;
+    margin: 0.5rem 0;
     max-width: 500px;
     .long-name {
       text-align: center;
@@ -65,7 +62,7 @@
     .toggle-text {
       text-align: center;
       text-decoration: underline;
-      margin-top: 1rem;
+      margin-top: 2rem;
       cursor: pointer;
     }
   }
diff --git a/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx b/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
index 536dcb3817aa92add426165d4cde497eb1c7d746..c98ae70938cafcd87d014c33995974e2612d4290 100644
--- a/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
@@ -80,10 +80,7 @@ describe('EcogestureFormEquipment component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(2)
   })
   it('should select equipment and unselect it', async () => {
@@ -105,29 +102,13 @@ describe('EcogestureFormEquipment component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find('.item-eq')
-      .first()
-      .simulate('change')
+    wrapper.find('.item-eq').first().simulate('change')
     await waitForComponentToPaint(wrapper)
 
-    expect(
-      wrapper
-        .find('.item-eq')
-        .first()
-        .hasClass('checked')
-    ).toBeTruthy
-    wrapper
-      .find('.checked')
-      .first()
-      .simulate('change')
+    expect(wrapper.find('.item-eq').first().hasClass('checked')).toBeTruthy
+    wrapper.find('.checked').first().simulate('change')
     await waitForComponentToPaint(wrapper)
-    expect(
-      wrapper
-        .find('.item-eq')
-        .first()
-        .hasClass('checked')
-    ).toBeFalsy()
+    expect(wrapper.find('.item-eq').first().hasClass('checked')).toBeFalsy()
   })
 
   it('should click on disabled back button', async () => {
@@ -148,10 +129,7 @@ describe('EcogestureFormEquipment component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     await waitForComponentToPaint(wrapper)
 
     expect(wrapper.find('.icons-container').exists()).toBeTruthy()
diff --git a/src/components/EcogestureForm/EcogestureFormSingleChoice.spec.tsx b/src/components/EcogestureForm/EcogestureFormSingleChoice.spec.tsx
index 09853bbc8a422791d0904b682afb394fb5d7b993..f86f26f4ded285cbc6c24755055ace4a1eadd8e2 100644
--- a/src/components/EcogestureForm/EcogestureFormSingleChoice.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureFormSingleChoice.spec.tsx
@@ -70,10 +70,7 @@ describe('EcogestureFormSingleChoice component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHandlePreviousStep).toHaveBeenCalledTimes(0)
   })
 
@@ -91,15 +88,9 @@ describe('EcogestureFormSingleChoice component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find('input')
-      .first()
-      .simulate('change')
+    wrapper.find('input').first().simulate('change')
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
 
     expect(mockHandleNextStep).toHaveBeenCalledTimes(1)
   })
@@ -117,10 +108,7 @@ describe('EcogestureFormSingleChoice component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHandlePreviousStep).toHaveBeenCalledTimes(1)
   })
   it('should keep previous answer', async () => {
@@ -137,11 +125,6 @@ describe('EcogestureFormSingleChoice component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    expect(
-      wrapper
-        .find('input')
-        .first()
-        .hasClass('checked-input')
-    ).toBe(true)
+    expect(wrapper.find('input').first().hasClass('checked-input')).toBe(true)
   })
 })
diff --git a/src/components/EcogestureForm/EcogestureFormView.spec.tsx b/src/components/EcogestureForm/EcogestureFormView.spec.tsx
index 7dfa7f922b5d8feaaf630112efdb69031dce99f6..0a86e6bb37e37c13ddb29c0a45c33bf6c259d453 100644
--- a/src/components/EcogestureForm/EcogestureFormView.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureFormView.spec.tsx
@@ -85,15 +85,9 @@ describe('EcogestureFormView component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find('input')
-      .first()
-      .simulate('change')
+    wrapper.find('input').first().simulate('change')
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(wrapper.find('.ecogesture-form-single').exists()).toBeTruthy()
   })
@@ -105,22 +99,13 @@ describe('EcogestureFormView component', () => {
     )
     //go first to next step
     await waitForComponentToPaint(wrapper)
-    wrapper
-      .find('input')
-      .first()
-      .simulate('change')
+    wrapper.find('input').first().simulate('change')
     await waitForComponentToPaint(wrapper)
     console.log(wrapper.debug())
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     await waitForComponentToPaint(wrapper)
     //then go back
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(wrapper.find('.ecogesture-form-single').exists()).toBeTruthy()
   })
 })
diff --git a/src/components/EcogestureForm/EcogestureFormView.tsx b/src/components/EcogestureForm/EcogestureFormView.tsx
index cb07519ce15b54b21fb914f1e883c49c65011351..23dda80906d54d6babef45b41a01ca1238e0eba7 100644
--- a/src/components/EcogestureForm/EcogestureFormView.tsx
+++ b/src/components/EcogestureForm/EcogestureFormView.tsx
@@ -49,9 +49,8 @@ const EcogestureFormView: React.FC = () => {
     shouldOpenModal !== 'false' ? true : false
   )
   const [viewedStep, setViewedStep] = useState<number>(-1)
-  const [profileEcogesture, setProfileEcogesture] = useState<ProfileEcogesture>(
-    curProfileEcogesture
-  )
+  const [profileEcogesture, setProfileEcogesture] =
+    useState<ProfileEcogesture>(curProfileEcogesture)
   const setNextStep = useCallback(
     (_profileEcogesture: ProfileEcogesture) => {
       setProfileEcogesture(_profileEcogesture)
@@ -61,9 +60,8 @@ const EcogestureFormView: React.FC = () => {
       if (nextStep > viewedStep) {
         setViewedStep(nextStep)
       }
-      const _answerType: ProfileEcogestureAnswer = ProfileEcogestureFormService.getAnswerForStep(
-        nextStep
-      )
+      const _answerType: ProfileEcogestureAnswer =
+        ProfileEcogestureFormService.getAnswerForStep(nextStep)
       setAnswerType(_answerType)
       setStep(nextStep)
     },
@@ -75,9 +73,8 @@ const EcogestureFormView: React.FC = () => {
       const pefs = new ProfileEcogestureFormService(_profileEcogesture)
       const previousStep: EcogestureStepForm = pefs.getPreviousFormStep(step)
       setIsLoading(true)
-      const _answerType: ProfileEcogestureAnswer = ProfileEcogestureFormService.getAnswerForStep(
-        previousStep
-      )
+      const _answerType: ProfileEcogestureAnswer =
+        ProfileEcogestureFormService.getAnswerForStep(previousStep)
       setAnswerType(_answerType)
       setStep(previousStep)
     },
@@ -85,9 +82,8 @@ const EcogestureFormView: React.FC = () => {
   )
 
   useEffect(() => {
-    const _answerType: ProfileEcogestureAnswer = ProfileEcogestureFormService.getAnswerForStep(
-      step
-    )
+    const _answerType: ProfileEcogestureAnswer =
+      ProfileEcogestureFormService.getAnswerForStep(step)
     setAnswerType(_answerType)
     setIsLoading(false)
   }, [step])
diff --git a/src/components/EcogestureForm/EcogestureLaunchFormModal.spec.tsx b/src/components/EcogestureForm/EcogestureLaunchFormModal.spec.tsx
index 33e0bbaa3353ddc921f2c51f812acf57a768c02b..c41160d25732bac5a45416d1128c9ff9a16fecaf 100644
--- a/src/components/EcogestureForm/EcogestureLaunchFormModal.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureLaunchFormModal.spec.tsx
@@ -32,10 +32,7 @@ describe('EcogestureLaunchFormModal component', () => {
         handleCloseClick={mockHandleClose}
       />
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHandleClose).toHaveBeenCalledTimes(1)
   })
 })
diff --git a/src/components/EcogestureForm/EquipmentIcon.spec.tsx b/src/components/EcogestureForm/EquipmentIcon.spec.tsx
index 8e341372ed4226b931de772f7b08f05bcbb777bc..701193a4d9f3d7b9c13cf22844b955380c97abbe 100644
--- a/src/components/EcogestureForm/EquipmentIcon.spec.tsx
+++ b/src/components/EcogestureForm/EquipmentIcon.spec.tsx
@@ -38,11 +38,6 @@ describe('EcogestureFormSingleChoice component', () => {
       <EquipmentIcon equipment={EquipmentType.BOILER} isChecked={true} />
     )
     await waitForComponentToPaint(wrapper)
-    expect(
-      wrapper
-        .find('.checked')
-        .first()
-        .exists()
-    ).toBeTruthy()
+    expect(wrapper.find('.checked').first().exists()).toBeTruthy()
   })
 })
diff --git a/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap b/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
index 8d8812b8b13da3ff901bfff8ed673c388ac52ad4..e4159159d59f8551d5711d9a52186e5022644fa8 100644
--- a/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
+++ b/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
@@ -521,36 +521,34 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                     >
                       profile_type.form.button_next &gt;
                     </span>
-                    <NoSsr>
-                      <WithStyles(memo)
+                    <WithStyles(memo)
+                      center={false}
+                    >
+                      <ForwardRef(TouchRipple)
                         center={false}
-                      >
-                        <ForwardRef(TouchRipple)
-                          center={false}
-                          classes={
-                            Object {
-                              "child": "MuiTouchRipple-child",
-                              "childLeaving": "MuiTouchRipple-childLeaving",
-                              "childPulsate": "MuiTouchRipple-childPulsate",
-                              "ripple": "MuiTouchRipple-ripple",
-                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                              "root": "MuiTouchRipple-root",
-                            }
+                        classes={
+                          Object {
+                            "child": "MuiTouchRipple-child",
+                            "childLeaving": "MuiTouchRipple-childLeaving",
+                            "childPulsate": "MuiTouchRipple-childPulsate",
+                            "ripple": "MuiTouchRipple-ripple",
+                            "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                            "rippleVisible": "MuiTouchRipple-rippleVisible",
+                            "root": "MuiTouchRipple-root",
                           }
+                        }
+                      >
+                        <span
+                          className="MuiTouchRipple-root"
                         >
-                          <span
-                            className="MuiTouchRipple-root"
-                          >
-                            <TransitionGroup
-                              childFactory={[Function]}
-                              component={null}
-                              exit={true}
-                            />
-                          </span>
-                        </ForwardRef(TouchRipple)>
-                      </WithStyles(memo)>
-                    </NoSsr>
+                          <TransitionGroup
+                            childFactory={[Function]}
+                            component={null}
+                            exit={true}
+                          />
+                        </span>
+                      </ForwardRef(TouchRipple)>
+                    </WithStyles(memo)>
                   </button>
                 </ForwardRef(ButtonBase)>
               </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/EcogestureForm/__snapshots__/EcogestureLaunchFormModal.spec.tsx.snap b/src/components/EcogestureForm/__snapshots__/EcogestureLaunchFormModal.spec.tsx.snap
index df73463356a5f652304dfc46ed47b4b8a4108040..11bbbe72d35769a15252dc8cee1606a0a411877d 100644
--- a/src/components/EcogestureForm/__snapshots__/EcogestureLaunchFormModal.spec.tsx.snap
+++ b/src/components/EcogestureForm/__snapshots__/EcogestureLaunchFormModal.spec.tsx.snap
@@ -96,12 +96,17 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -361,7 +366,6 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -553,7 +557,7 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -603,8 +607,8 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -760,36 +764,34 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -906,36 +908,34 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                                         >
                                           ecogesture.initModal.btn2
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={false}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={false}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={false}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -952,7 +952,7 @@ exports[`EcogestureLaunchFormModal component should be rendered correctly 1`] =
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/EcogestureSelection/EcogestureSelection.tsx b/src/components/EcogestureSelection/EcogestureSelection.tsx
index 870a7719f2f41255ae25139eed4697dbca61b211..43a2b0c6f22ae2e628fb18eeac557f28a06aaee9 100644
--- a/src/components/EcogestureSelection/EcogestureSelection.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelection.tsx
@@ -26,18 +26,17 @@ const EcogestureSelection: React.FC = () => {
   const [ecogestureList, setEcogestureList] = useState<Ecogesture[]>([])
   const [totalViewed, setTotalViewed] = useState<number>(0)
   const [totalAvailable, setTotalAvailable] = useState<number>(0)
-  const [
-    openEcogestureSelectionModal,
-    setOpenEcogestureSelectionModal,
-  ] = useState(false)
+  const [openEcogestureSelectionModal, setOpenEcogestureSelectionModal] =
+    useState(false)
 
   const defineHeaderHeight = useCallback((height: number) => {
     setHeaderHeight(height)
   }, [])
 
-  const ecogestureService = useMemo(() => new EcogestureService(client), [
-    client,
-  ])
+  const ecogestureService = useMemo(
+    () => new EcogestureService(client),
+    [client]
+  )
   const profileEcogesture: ProfileEcogesture = useSelector(
     (state: AppStore) => state.ecolyo.profileEcogesture
   )
@@ -54,27 +53,25 @@ const EcogestureSelection: React.FC = () => {
 
   const validateChoice = useCallback(
     async (objective: boolean, doing: boolean) => {
-      const updatedEcogesture: Ecogesture = await ecogestureService.updateEcogesture(
-        {
+      const updatedEcogesture: Ecogesture =
+        await ecogestureService.updateEcogesture({
           ...ecogestureList[indexEcogesture],
           objective: objective,
           doing: doing,
           viewedInSelection: true,
-        }
-      )
+        })
       const updatedList: Ecogesture[] = ecogestureList
       updatedList[indexEcogesture] = updatedEcogesture
       setEcogestureList(updatedList)
-      setIndexEcogesture(prev => prev + 1)
+      setIndexEcogesture((prev) => prev + 1)
     },
     [ecogestureList, ecogestureService, indexEcogesture]
   )
 
   const restartSelection = useCallback(async () => {
     setIsLoading(true)
-    const availableList: Ecogesture[] = await ecogestureService.getEcogestureListByProfile(
-      profileEcogesture
-    )
+    const availableList: Ecogesture[] =
+      await ecogestureService.getEcogestureListByProfile(profileEcogesture)
     const filteredList: Ecogesture[] = availableList.filter(
       (ecogesture: Ecogesture) => ecogesture.viewedInSelection === false
     )
@@ -88,9 +85,8 @@ const EcogestureSelection: React.FC = () => {
   useEffect(() => {
     let subscribed = true
     async function getFilteredList() {
-      const availableList: Ecogesture[] = await ecogestureService.getEcogestureListByProfile(
-        profileEcogesture
-      )
+      const availableList: Ecogesture[] =
+        await ecogestureService.getEcogestureListByProfile(profileEcogesture)
       const filteredList: Ecogesture[] = availableList.filter(
         (ecogesture: Ecogesture) => ecogesture.viewedInSelection === false
       )
@@ -128,17 +124,17 @@ const EcogestureSelection: React.FC = () => {
   return (
     <>
       <CozyBar
-        titleKey={getTitle()}
+        titleKey={t('common.title_ecogestures_choice')}
         isNotKey={true}
         displayBackArrow={indexEcogesture === 0 ? false : true}
-        backFunction={() => setIndexEcogesture(prev => prev - 1)}
+        backFunction={() => setIndexEcogesture((prev) => prev - 1)}
       />
       <Header
         setHeaderHeight={defineHeaderHeight}
-        desktopTitleKey={getTitle()}
+        desktopTitleKey={t('common.title_ecogestures_choice')}
         displayBackArrow={indexEcogesture === 0 ? false : true}
         isNotKey={true}
-        backFunction={() => setIndexEcogesture(prev => prev - 1)}
+        backFunction={() => setIndexEcogesture((prev) => prev - 1)}
       >
         <div className="eg-selection-header">
           {indexEcogesture <= ecogestureList.length - 1
@@ -151,6 +147,7 @@ const EcogestureSelection: React.FC = () => {
           <EcogestureSelectionDetail
             ecogesture={ecogestureList[indexEcogesture]}
             validate={validateChoice}
+            title={getTitle()}
           />
         ) : totalAvailable > totalViewed + ecogestureList.length ? (
           <EcogestureSelectionRestart
diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail.spec.tsx b/src/components/EcogestureSelection/EcogestureSelectionDetail.spec.tsx
index 73075d03ba3a7864e6656e41eb7440d061da4124..b3503365c5ff2d2eed4b8b788b18af26c627cdb8 100644
--- a/src/components/EcogestureSelection/EcogestureSelectionDetail.spec.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelectionDetail.spec.tsx
@@ -51,10 +51,7 @@ describe('EcogestureSelectionDetail component', () => {
         validate={mockValidate}
       />
     )
-    wrapper
-      .find(Button)
-      .at(0)
-      .simulate('click')
+    wrapper.find(Button).at(0).simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(mockValidate).toHaveBeenCalledWith(true, false)
   })
@@ -67,10 +64,7 @@ describe('EcogestureSelectionDetail component', () => {
         validate={mockValidate}
       />
     )
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(mockValidate).toHaveBeenCalledWith(false, true)
   })
@@ -83,10 +77,7 @@ describe('EcogestureSelectionDetail component', () => {
         validate={mockValidate}
       />
     )
-    wrapper
-      .find(Button)
-      .at(2)
-      .simulate('click')
+    wrapper.find(Button).at(2).simulate('click')
     await waitForComponentToPaint(wrapper)
     expect(mockValidate).toHaveBeenCalledWith(false, false)
   })
diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail.tsx b/src/components/EcogestureSelection/EcogestureSelectionDetail.tsx
index 5f79549fc7b92f9214766f98ab9fa43a3454a5d3..4ea75639e9caeb8c2c3a23fc3a2829491d939d29 100644
--- a/src/components/EcogestureSelection/EcogestureSelectionDetail.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelectionDetail.tsx
@@ -13,11 +13,13 @@ import { importIconbyId } from 'utils/utils'
 interface EcogestureSelectionDetailProps {
   ecogesture: Ecogesture
   validate: (objective: boolean, doing: boolean) => void
+  title: string
 }
 
 const EcogestureSelectionDetail: React.FC<EcogestureSelectionDetailProps> = ({
   ecogesture,
   validate,
+  title,
 }: EcogestureSelectionDetailProps) => {
   const { t } = useI18n()
   const [ecogestureIcon, setEcogestureIcon] = useState<string>('')
@@ -44,7 +46,8 @@ const EcogestureSelectionDetail: React.FC<EcogestureSelectionDetailProps> = ({
     <div className="eg-selection-detail-container">
       <div className="content">
         <StyledIcon className="icon" icon={ecogestureIcon} size={240} />
-        <div className="text text-16-normal">{ecogesture.longName}</div>
+        <div className="text-22 title">{title}</div>
+        <div className="text text-18-bold">{ecogesture.longName}</div>
       </div>
       <div className="buttons">
         <Button
diff --git a/src/components/EcogestureSelection/EcogestureSelectionRestart.spec.tsx b/src/components/EcogestureSelection/EcogestureSelectionRestart.spec.tsx
index 58b4685381bb323a08acf5c0f7511f03049e464d..3f1835b689348d93c3cb1b3fbf6fbcafe910c761 100644
--- a/src/components/EcogestureSelection/EcogestureSelectionRestart.spec.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelectionRestart.spec.tsx
@@ -39,10 +39,7 @@ describe('EcogestureSelectionRestart component', () => {
     const wrapper = mount(
       <EcogestureSelectionRestart listLength={10} restart={mockRestart} />
     )
-    wrapper
-      .find(Button)
-      .at(0)
-      .simulate('click')
+    wrapper.find(Button).at(0).simulate('click')
     expect(mockHistoryPush).toHaveBeenCalledWith('/ecogestures?tab=0')
   })
 
@@ -50,10 +47,7 @@ describe('EcogestureSelectionRestart component', () => {
     const wrapper = mount(
       <EcogestureSelectionRestart listLength={10} restart={mockRestart} />
     )
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     expect(mockRestart).toHaveBeenCalledTimes(1)
   })
 })
diff --git a/src/components/EcogestureSelection/__snapshots__/EcogestureSelection.spec.tsx.snap b/src/components/EcogestureSelection/__snapshots__/EcogestureSelection.spec.tsx.snap
index ff696014729bcae1956c5c2c931737879190cad4..7bf5a2890a74340c966a3baadba5fb0b89517315 100644
--- a/src/components/EcogestureSelection/__snapshots__/EcogestureSelection.spec.tsx.snap
+++ b/src/components/EcogestureSelection/__snapshots__/EcogestureSelection.spec.tsx.snap
@@ -18,11 +18,11 @@ exports[`EcogestureSelection component should be rendered correctly 1`] = `
       backFunction={[Function]}
       displayBackArrow={false}
       isNotKey={true}
-      titleKey="Bonhomme de neige"
+      titleKey="common.title_ecogestures_choice"
     />
     <mock-header
       backFunction={[Function]}
-      desktopTitleKey="Bonhomme de neige"
+      desktopTitleKey="common.title_ecogestures_choice"
       displayBackArrow={false}
       isNotKey={true}
       setHeaderHeight={[Function]}
@@ -70,6 +70,7 @@ exports[`EcogestureSelection component should be rendered correctly 1`] = `
             "viewedInSelection": false,
           }
         }
+        title="Bonhomme de neige"
         validate={[Function]}
       />
     </mock-content>
diff --git a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap
index 2eaf1e7ab2f2ffca19057a87b6a1c90cef18aa60..b75cf8e8a6fc00a05347245c6640bc9071ba725d 100644
--- a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap
+++ b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionDetail.spec.tsx.snap
@@ -77,7 +77,10 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] =
         </Icon>
       </StyledIcon>
       <div
-        className="text text-16-normal"
+        className="text-22 title"
+      />
+      <div
+        className="text text-18-bold"
       >
         Je baisse le chauffage en mode hors gel lorsque je m'absente plus de 2 jours.
       </div>
@@ -215,36 +218,34 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] =
                   </StyledIcon>
                   ecogesture_selection.button_objective
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
@@ -380,36 +381,34 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] =
                   </StyledIcon>
                   ecogesture_selection.button_doing
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
@@ -545,36 +544,34 @@ exports[`EcogestureSelectionDetail component should be rendered correctly 1`] =
                   </StyledIcon>
                   ecogesture_selection.button_skip
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionEnd.spec.tsx.snap b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionEnd.spec.tsx.snap
index 1b1ea7fd1956ac4587e955680a8176b9071a0480..82c3300b01227f80f3275354e41b5bb8886c52b0 100644
--- a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionEnd.spec.tsx.snap
+++ b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionEnd.spec.tsx.snap
@@ -156,36 +156,34 @@ exports[`EcogestureSelectionEnd component should be rendered correctly 1`] = `
                 >
                   ecogesture_selection.button_ok
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionModal.spec.tsx.snap b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionModal.spec.tsx.snap
index 233978637306bec8261505551c00c96c4fb22916..aeaea3ddbcfd3f8f52b21262f05266c9d5fc18a4 100644
--- a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionModal.spec.tsx.snap
+++ b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionModal.spec.tsx.snap
@@ -96,12 +96,17 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -361,7 +366,6 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -553,7 +557,7 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -603,8 +607,8 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -760,36 +764,34 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -906,36 +908,34 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                                         >
                                           ecogesture_selection.selectionModal.button_close
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={false}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={false}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={false}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -952,7 +952,7 @@ exports[`EcogestureInitModal component should be rendered correctly 1`] = `
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionRestart.spec.tsx.snap b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionRestart.spec.tsx.snap
index 0dc2cff5a3fb8d1819f7d58b0d4b6f43d61a4d92..4d8563d6d8af7c5aba8d3260662d5ba318404c94 100644
--- a/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionRestart.spec.tsx.snap
+++ b/src/components/EcogestureSelection/__snapshots__/EcogestureSelectionRestart.spec.tsx.snap
@@ -154,36 +154,34 @@ exports[`EcogestureSelectionRestart component should be rendered correctly 1`] =
                 >
                   ecogesture_selection.button_go_to_ecogesture
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
@@ -287,36 +285,34 @@ exports[`EcogestureSelectionRestart component should be rendered correctly 1`] =
                 >
                   ecogesture_selection.button_continue
                 </span>
-                <NoSsr>
-                  <WithStyles(memo)
+                <WithStyles(memo)
+                  center={false}
+                >
+                  <ForwardRef(TouchRipple)
                     center={false}
-                  >
-                    <ForwardRef(TouchRipple)
-                      center={false}
-                      classes={
-                        Object {
-                          "child": "MuiTouchRipple-child",
-                          "childLeaving": "MuiTouchRipple-childLeaving",
-                          "childPulsate": "MuiTouchRipple-childPulsate",
-                          "ripple": "MuiTouchRipple-ripple",
-                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                          "rippleVisible": "MuiTouchRipple-rippleVisible",
-                          "root": "MuiTouchRipple-root",
-                        }
+                    classes={
+                      Object {
+                        "child": "MuiTouchRipple-child",
+                        "childLeaving": "MuiTouchRipple-childLeaving",
+                        "childPulsate": "MuiTouchRipple-childPulsate",
+                        "ripple": "MuiTouchRipple-ripple",
+                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                        "rippleVisible": "MuiTouchRipple-rippleVisible",
+                        "root": "MuiTouchRipple-root",
                       }
+                    }
+                  >
+                    <span
+                      className="MuiTouchRipple-root"
                     >
-                      <span
-                        className="MuiTouchRipple-root"
-                      >
-                        <TransitionGroup
-                          childFactory={[Function]}
-                          component={null}
-                          exit={true}
-                        />
-                      </span>
-                    </ForwardRef(TouchRipple)>
-                  </WithStyles(memo)>
-                </NoSsr>
+                      <TransitionGroup
+                        childFactory={[Function]}
+                        component={null}
+                        exit={true}
+                      />
+                    </span>
+                  </ForwardRef(TouchRipple)>
+                </WithStyles(memo)>
               </button>
             </ForwardRef(ButtonBase)>
           </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/EcogestureSelection/ecogestureSelectionDetail.scss b/src/components/EcogestureSelection/ecogestureSelectionDetail.scss
index 51956d80474f8324f80b90625194f83d22252cfa..2ef624130480c5ac35b124dd23587eabf102dc99 100644
--- a/src/components/EcogestureSelection/ecogestureSelectionDetail.scss
+++ b/src/components/EcogestureSelection/ecogestureSelectionDetail.scss
@@ -27,6 +27,14 @@
       @media #{$large-phone} {
         margin: 1rem 0 0;
       }
+      @media #{$phone} {
+        width: 50%;
+        height: 50%;
+      }
+      @media #{$small-phone} {
+        width: 30%;
+        height: 30%;
+      }
     }
     .text {
       min-height: 4.875rem;
@@ -63,4 +71,8 @@
       background: transparent;
     }
   }
+
+  .title {
+    color: $soft-grey;
+  }
 }
diff --git a/src/components/Exploration/ExplorationFinished.spec.tsx b/src/components/Exploration/ExplorationFinished.spec.tsx
index acf9914d843657e48536ba121d006d7daa61b0e5..76557e2c0346a38cfd1fb4147e14b9cd7d10b104 100644
--- a/src/components/Exploration/ExplorationFinished.spec.tsx
+++ b/src/components/Exploration/ExplorationFinished.spec.tsx
@@ -58,9 +58,6 @@ describe('ExplorationFinished', () => {
         <ExplorationFinished userChallenge={userChallengeData[0]} />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
   })
 })
diff --git a/src/components/Exploration/ExplorationOngoing.spec.tsx b/src/components/Exploration/ExplorationOngoing.spec.tsx
index 58298416b24af5ea215c12f0f7c65d583819e51a..5a54053636e6bbeb64667845e781126b71c0c759 100644
--- a/src/components/Exploration/ExplorationOngoing.spec.tsx
+++ b/src/components/Exploration/ExplorationOngoing.spec.tsx
@@ -52,16 +52,10 @@ describe('ExplorationOngoing component', () => {
       </Provider>
     )
     expect(
-      wrapper
-        .find('.exploration-explanation > div')
-        .first()
-        .text()
+      wrapper.find('.exploration-explanation > div').first().text()
     ).toEqual(userChallengeData[1].exploration.description)
     expect(
-      wrapper
-        .find('.exploration-explanation > div')
-        .last()
-        .text()
+      wrapper.find('.exploration-explanation > div').last().text()
     ).toEqual(userChallengeData[1].exploration.complementary_description)
     expect(wrapper.find('.button-start').exists()).toBeTruthy()
   })
diff --git a/src/components/Exploration/ExplorationView.spec.tsx b/src/components/Exploration/ExplorationView.spec.tsx
index afc90e3104495de4f9e48c1526640ed962d4b717..af8c18175b1be1c10018d36a4e447df74aaddaf1 100644
--- a/src/components/Exploration/ExplorationView.spec.tsx
+++ b/src/components/Exploration/ExplorationView.spec.tsx
@@ -8,19 +8,39 @@ import { challengeStateData } from '../../../tests/__mocks__/challengeStateData.
 import ExplorationFinished from './ExplorationFinished'
 import ExplorationError from './ExplorationError'
 import ExplorationOngoing from './ExplorationOngoing'
+import { UserExplorationState } from 'enum/userExploration.enum'
+
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 
 const mockUseSelector = jest.spyOn(reactRedux, 'useSelector')
 
 describe('ExplorationView', () => {
-  it('should be rendered with ExplorationView component when no exploration state', () => {
-    mockUseSelector.mockReturnValue(challengeStateData)
+  it('should be rendered with ExplorationError component when unknown exploration state', () => {
+    const updatedUserChallenge = {
+      ...userChallengeData[0],
+      exploration: {
+        ...userChallengeData[0].exploration,
+        state: 99,
+      },
+    }
+    const updatedChallengeState = {
+      ...challengeStateData,
+      currentChallenge: updatedUserChallenge,
+    }
+    mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<ExplorationView />)
-    expect(wrapper.find(ExplorationError).exists())
+    expect(wrapper.find(ExplorationError).exists()).toBeTruthy()
   })
-  it('should be rendered with ExplorationView component when exploration state = unlocked', () => {
+
+  it('should be rendered with ExplorationOngoing component when exploration state = unlocked', () => {
     const updatedUserChallenge = {
       ...userChallengeData[0],
-      quiz: { ...userChallengeData[0].quiz, state: UserQuizState.UNLOCKED },
+      exploration: {
+        ...userChallengeData[0].exploration,
+        state: UserExplorationState.UNLOCKED,
+      },
     }
     const updatedChallengeState = {
       ...challengeStateData,
@@ -28,12 +48,16 @@ describe('ExplorationView', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<ExplorationView />)
-    expect(wrapper.find(ExplorationOngoing).exists())
+    expect(wrapper.find(ExplorationOngoing).exists()).toBeTruthy()
   })
-  it('should be rendered with ExplorationView component when exploration state = ongoing', () => {
+
+  it('should be rendered with ExplorationOngoing component when exploration state = ongoing', () => {
     const updatedUserChallenge = {
       ...userChallengeData[0],
-      quiz: { ...userChallengeData[0].quiz, state: UserQuizState.ONGOING },
+      exploration: {
+        ...userChallengeData[0].exploration,
+        state: UserExplorationState.ONGOING,
+      },
     }
     const updatedChallengeState = {
       ...challengeStateData,
@@ -41,12 +65,16 @@ describe('ExplorationView', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<ExplorationView />)
-    expect(wrapper.find(ExplorationOngoing).exists())
+    expect(wrapper.find(ExplorationOngoing).exists()).toBeTruthy()
   })
-  it('should be rendered with ExplorationView component when exploration state = Done', () => {
+
+  it('should be rendered with ExplorationFinished component when exploration state = Done', () => {
     const updatedUserChallenge = {
       ...userChallengeData[0],
-      quiz: { ...userChallengeData[0].quiz, state: UserQuizState.DONE },
+      exploration: {
+        ...userChallengeData[0].exploration,
+        state: UserExplorationState.DONE,
+      },
     }
     const updatedChallengeState = {
       ...challengeStateData,
@@ -54,6 +82,6 @@ describe('ExplorationView', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<ExplorationView />)
-    expect(wrapper.find(ExplorationFinished).exists())
+    expect(wrapper.find(ExplorationFinished).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/FAQ/FAQContent.tsx b/src/components/FAQ/FAQContent.tsx
index 996c0ac54c5dd46e83a7641bd8bf5b56dba1b7d2..e510abed50c1cae5f10496562cc7e5907348ccd5 100644
--- a/src/components/FAQ/FAQContent.tsx
+++ b/src/components/FAQ/FAQContent.tsx
@@ -3,9 +3,11 @@ import './faqContent.scss'
 import { useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import FaqData from 'components/FAQ/FAQData'
-import ExpansionPanel from '@material-ui/core/ExpansionPanel'
-import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary'
-import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails'
+import {
+  Accordion,
+  AccordionSummary,
+  AccordionDetails,
+} from '@material-ui/core'
 import ChevronOffIcon from 'assets/icons/ico/chevron-off.svg'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import { FAQSection } from 'models'
@@ -18,13 +20,11 @@ const FAQContent: React.FC = () => {
   const [expanded, setExpanded] = useState<string | false>(false)
   const [faqData, setFaqData] = useState<FAQSection[]>([])
 
-  const handleChange = (panel: string) => (
-    event: React.ChangeEvent<{}>,
-    isExpanded: boolean
-  ) => {
-    event.preventDefault()
-    setExpanded(isExpanded ? panel : false)
-  }
+  const handleChange =
+    (panel: string) => (event: React.ChangeEvent<{}>, isExpanded: boolean) => {
+      event.preventDefault()
+      setExpanded(isExpanded ? panel : false)
+    }
 
   useEffect(() => {
     let subscribed = true
@@ -57,7 +57,7 @@ const FAQContent: React.FC = () => {
               <div className="text-16-normal-uppercase">{faq.section}</div>
               {faq.questions.map((question, index2) => {
                 return (
-                  <ExpansionPanel
+                  <Accordion
                     key={index2}
                     expanded={expanded === `panel${index}_${index2}`}
                     onChange={handleChange(`panel${index}_${index2}`)}
@@ -65,7 +65,7 @@ const FAQContent: React.FC = () => {
                       root: 'expansion-panel-root',
                     }}
                   >
-                    <ExpansionPanelSummary
+                    <AccordionSummary
                       aria-label={t('faq.accessibility.button_toggle_detail')}
                       expandIcon={<StyledIcon icon={ChevronOffIcon} />}
                       classes={{
@@ -74,15 +74,15 @@ const FAQContent: React.FC = () => {
                       }}
                     >
                       {question.summary}
-                    </ExpansionPanelSummary>
-                    <ExpansionPanelDetails
+                    </AccordionSummary>
+                    <AccordionDetails
                       classes={{
                         root: 'expansion-panel-details',
                       }}
                     >
                       {question.details}
-                    </ExpansionPanelDetails>
-                  </ExpansionPanel>
+                    </AccordionDetails>
+                  </Accordion>
                 )
               })}
             </div>
diff --git a/src/components/FAQ/FAQView.spec.tsx b/src/components/FAQ/FAQView.spec.tsx
index 0cf009bf050a365e30a9e57b179ffbe328304f2f..74f74ef60abcb520e3ff5571e0c85389b725583b 100644
--- a/src/components/FAQ/FAQView.spec.tsx
+++ b/src/components/FAQ/FAQView.spec.tsx
@@ -11,6 +11,9 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
     }),
   }
 })
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 
 describe('FAQView component', () => {
   it('should render only the parent component', () => {
diff --git a/src/components/FAQ/__snapshots__/FAQContent.spec.tsx.snap b/src/components/FAQ/__snapshots__/FAQContent.spec.tsx.snap
index dde06eb7baaa31fbfde109a57e24cb40bec7ede7..2a395d05dd96bb4ad578c010d150c736f31edc47 100644
--- a/src/components/FAQ/__snapshots__/FAQContent.spec.tsx.snap
+++ b/src/components/FAQ/__snapshots__/FAQContent.spec.tsx.snap
@@ -17,7 +17,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
         >
           Mes données
         </div>
-        <WithStyles(ForwardRef(ExpansionPanel))
+        <WithStyles(ForwardRef(Accordion))
           classes={
             Object {
               "root": "expansion-panel-root",
@@ -27,24 +27,24 @@ exports[`FAQContent should render the full FAQ 1`] = `
           key="0"
           onChange={[Function]}
         >
-          <ForwardRef(ExpansionPanel)
+          <ForwardRef(Accordion)
             classes={
               Object {
                 "disabled": "Mui-disabled",
                 "expanded": "Mui-expanded",
-                "root": "MuiExpansionPanel-root expansion-panel-root",
-                "rounded": "MuiExpansionPanel-rounded",
+                "root": "MuiAccordion-root expansion-panel-root",
+                "rounded": "MuiAccordion-rounded",
               }
             }
             expanded={false}
             onChange={[Function]}
           >
             <WithStyles(ForwardRef(Paper))
-              className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+              className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
               square={false}
             >
               <ForwardRef(Paper)
-                className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+                className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
                 classes={
                   Object {
                     "elevation0": "MuiPaper-elevation0",
@@ -80,9 +80,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 square={false}
               >
                 <div
-                  className="MuiPaper-root MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded MuiPaper-elevation1 MuiPaper-rounded"
+                  className="MuiPaper-root MuiAccordion-root expansion-panel-root MuiAccordion-rounded MuiPaper-elevation1 MuiPaper-rounded"
                 >
-                  <WithStyles(ForwardRef(ExpansionPanelSummary))
+                  <WithStyles(ForwardRef(AccordionSummary))
                     aria-label="faq.accessibility.button_toggle_detail"
                     classes={
                       Object {
@@ -97,16 +97,17 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     }
                     key=".0"
                   >
-                    <ForwardRef(ExpansionPanelSummary)
+                    <ForwardRef(AccordionSummary)
                       aria-label="faq.accessibility.button_toggle_detail"
                       classes={
                         Object {
-                          "content": "MuiExpansionPanelSummary-content expansion-panel-content",
+                          "content": "MuiAccordionSummary-content expansion-panel-content",
                           "disabled": "Mui-disabled",
-                          "expandIcon": "MuiExpansionPanelSummary-expandIcon",
+                          "expandIcon": "MuiAccordionSummary-expandIcon",
                           "expanded": "Mui-expanded",
+                          "focusVisible": "Mui-focusVisible",
                           "focused": "Mui-focused",
-                          "root": "MuiExpansionPanelSummary-root expansion-panel-summary small bold-text",
+                          "root": "MuiAccordionSummary-root expansion-panel-summary small bold-text",
                         }
                       }
                       expandIcon={
@@ -118,19 +119,18 @@ exports[`FAQContent should render the full FAQ 1`] = `
                       <WithStyles(ForwardRef(ButtonBase))
                         aria-expanded={false}
                         aria-label="faq.accessibility.button_toggle_detail"
-                        className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                        className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                         component="div"
                         disableRipple={true}
                         disabled={false}
                         focusRipple={false}
-                        onBlur={[Function]}
+                        focusVisibleClassName="Mui-focusVisible Mui-focused"
                         onClick={[Function]}
-                        onFocusVisible={[Function]}
                       >
                         <ForwardRef(ButtonBase)
                           aria-expanded={false}
                           aria-label="faq.accessibility.button_toggle_detail"
-                          className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                          className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                           classes={
                             Object {
                               "disabled": "Mui-disabled",
@@ -142,15 +142,14 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           disableRipple={true}
                           disabled={false}
                           focusRipple={false}
-                          onBlur={[Function]}
+                          focusVisibleClassName="Mui-focusVisible Mui-focused"
                           onClick={[Function]}
-                          onFocusVisible={[Function]}
                         >
                           <div
                             aria-disabled={false}
                             aria-expanded={false}
                             aria-label="faq.accessibility.button_toggle_detail"
-                            className="MuiButtonBase-root MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                            className="MuiButtonBase-root MuiAccordionSummary-root expansion-panel-summary small bold-text"
                             onBlur={[Function]}
                             onClick={[Function]}
                             onDragLeave={[Function]}
@@ -167,13 +166,13 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             tabIndex={0}
                           >
                             <div
-                              className="MuiExpansionPanelSummary-content expansion-panel-content"
+                              className="MuiAccordionSummary-content expansion-panel-content"
                             >
                               Comment accéder à mes données électricité ?
                             </div>
                             <WithStyles(ForwardRef(IconButton))
                               aria-hidden={true}
-                              className="MuiExpansionPanelSummary-expandIcon"
+                              className="MuiAccordionSummary-expandIcon"
                               component="div"
                               edge="end"
                               role={null}
@@ -181,7 +180,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             >
                               <ForwardRef(IconButton)
                                 aria-hidden={true}
-                                className="MuiExpansionPanelSummary-expandIcon"
+                                className="MuiAccordionSummary-expandIcon"
                                 classes={
                                   Object {
                                     "colorInherit": "MuiIconButton-colorInherit",
@@ -203,7 +202,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                 <WithStyles(ForwardRef(ButtonBase))
                                   aria-hidden={true}
                                   centerRipple={true}
-                                  className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                  className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                   component="div"
                                   disabled={false}
                                   focusRipple={true}
@@ -213,7 +212,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   <ForwardRef(ButtonBase)
                                     aria-hidden={true}
                                     centerRipple={true}
-                                    className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                    className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                     classes={
                                       Object {
                                         "disabled": "Mui-disabled",
@@ -230,7 +229,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                     <div
                                       aria-disabled={false}
                                       aria-hidden={true}
-                                      className="MuiButtonBase-root MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                      className="MuiButtonBase-root MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                       onBlur={[Function]}
                                       onDragLeave={[Function]}
                                       onFocus={[Function]}
@@ -279,36 +278,34 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                           </Icon>
                                         </StyledIcon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </div>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -317,8 +314,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           </div>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
-                    </ForwardRef(ExpansionPanelSummary)>
-                  </WithStyles(ForwardRef(ExpansionPanelSummary))>
+                    </ForwardRef(AccordionSummary)>
+                  </WithStyles(ForwardRef(AccordionSummary))>
                   <WithStyles(ForwardRef(Collapse))
                     in={false}
                     timeout="auto"
@@ -326,9 +323,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     <ForwardRef(Collapse)
                       classes={
                         Object {
-                          "container": "MuiCollapse-container",
                           "entered": "MuiCollapse-entered",
                           "hidden": "MuiCollapse-hidden",
+                          "root": "MuiCollapse-root",
                           "wrapper": "MuiCollapse-wrapper",
                           "wrapperInner": "MuiCollapse-wrapperInner",
                         }
@@ -353,7 +350,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                         unmountOnExit={false}
                       >
                         <div
-                          className="MuiCollapse-container MuiCollapse-hidden"
+                          className="MuiCollapse-root MuiCollapse-hidden"
                           style={
                             Object {
                               "minHeight": "0px",
@@ -369,7 +366,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                               <div
                                 role="region"
                               >
-                                <WithStyles(ForwardRef(ExpansionPanelDetails))
+                                <WithStyles(ForwardRef(AccordionDetails))
                                   classes={
                                     Object {
                                       "root": "expansion-panel-details",
@@ -377,22 +374,22 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   }
                                   key=".1"
                                 >
-                                  <ForwardRef(ExpansionPanelDetails)
+                                  <ForwardRef(AccordionDetails)
                                     classes={
                                       Object {
-                                        "root": "MuiExpansionPanelDetails-root expansion-panel-details",
+                                        "root": "MuiAccordionDetails-root expansion-panel-details",
                                       }
                                     }
                                   >
                                     <div
-                                      className="MuiExpansionPanelDetails-root expansion-panel-details"
+                                      className="MuiAccordionDetails-root expansion-panel-details"
                                     >
                                       <div>
                                         Rendez-vous dans la partie Options du service et cliquer sur le bouton "Se connecter à l\\'électricité". Suivez la procédure (en vous créant un compte Enedis si nécessaire). Une fois votre consentement donné, vos données de consommation seront récupérées.
                                       </div>
                                     </div>
-                                  </ForwardRef(ExpansionPanelDetails)>
-                                </WithStyles(ForwardRef(ExpansionPanelDetails))>
+                                  </ForwardRef(AccordionDetails)>
+                                </WithStyles(ForwardRef(AccordionDetails))>
                               </div>
                             </div>
                           </div>
@@ -403,9 +400,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 </div>
               </ForwardRef(Paper)>
             </WithStyles(ForwardRef(Paper))>
-          </ForwardRef(ExpansionPanel)>
-        </WithStyles(ForwardRef(ExpansionPanel))>
-        <WithStyles(ForwardRef(ExpansionPanel))
+          </ForwardRef(Accordion)>
+        </WithStyles(ForwardRef(Accordion))>
+        <WithStyles(ForwardRef(Accordion))
           classes={
             Object {
               "root": "expansion-panel-root",
@@ -415,24 +412,24 @@ exports[`FAQContent should render the full FAQ 1`] = `
           key="1"
           onChange={[Function]}
         >
-          <ForwardRef(ExpansionPanel)
+          <ForwardRef(Accordion)
             classes={
               Object {
                 "disabled": "Mui-disabled",
                 "expanded": "Mui-expanded",
-                "root": "MuiExpansionPanel-root expansion-panel-root",
-                "rounded": "MuiExpansionPanel-rounded",
+                "root": "MuiAccordion-root expansion-panel-root",
+                "rounded": "MuiAccordion-rounded",
               }
             }
             expanded={false}
             onChange={[Function]}
           >
             <WithStyles(ForwardRef(Paper))
-              className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+              className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
               square={false}
             >
               <ForwardRef(Paper)
-                className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+                className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
                 classes={
                   Object {
                     "elevation0": "MuiPaper-elevation0",
@@ -468,9 +465,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 square={false}
               >
                 <div
-                  className="MuiPaper-root MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded MuiPaper-elevation1 MuiPaper-rounded"
+                  className="MuiPaper-root MuiAccordion-root expansion-panel-root MuiAccordion-rounded MuiPaper-elevation1 MuiPaper-rounded"
                 >
-                  <WithStyles(ForwardRef(ExpansionPanelSummary))
+                  <WithStyles(ForwardRef(AccordionSummary))
                     aria-label="faq.accessibility.button_toggle_detail"
                     classes={
                       Object {
@@ -485,16 +482,17 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     }
                     key=".0"
                   >
-                    <ForwardRef(ExpansionPanelSummary)
+                    <ForwardRef(AccordionSummary)
                       aria-label="faq.accessibility.button_toggle_detail"
                       classes={
                         Object {
-                          "content": "MuiExpansionPanelSummary-content expansion-panel-content",
+                          "content": "MuiAccordionSummary-content expansion-panel-content",
                           "disabled": "Mui-disabled",
-                          "expandIcon": "MuiExpansionPanelSummary-expandIcon",
+                          "expandIcon": "MuiAccordionSummary-expandIcon",
                           "expanded": "Mui-expanded",
+                          "focusVisible": "Mui-focusVisible",
                           "focused": "Mui-focused",
-                          "root": "MuiExpansionPanelSummary-root expansion-panel-summary small bold-text",
+                          "root": "MuiAccordionSummary-root expansion-panel-summary small bold-text",
                         }
                       }
                       expandIcon={
@@ -506,19 +504,18 @@ exports[`FAQContent should render the full FAQ 1`] = `
                       <WithStyles(ForwardRef(ButtonBase))
                         aria-expanded={false}
                         aria-label="faq.accessibility.button_toggle_detail"
-                        className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                        className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                         component="div"
                         disableRipple={true}
                         disabled={false}
                         focusRipple={false}
-                        onBlur={[Function]}
+                        focusVisibleClassName="Mui-focusVisible Mui-focused"
                         onClick={[Function]}
-                        onFocusVisible={[Function]}
                       >
                         <ForwardRef(ButtonBase)
                           aria-expanded={false}
                           aria-label="faq.accessibility.button_toggle_detail"
-                          className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                          className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                           classes={
                             Object {
                               "disabled": "Mui-disabled",
@@ -530,15 +527,14 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           disableRipple={true}
                           disabled={false}
                           focusRipple={false}
-                          onBlur={[Function]}
+                          focusVisibleClassName="Mui-focusVisible Mui-focused"
                           onClick={[Function]}
-                          onFocusVisible={[Function]}
                         >
                           <div
                             aria-disabled={false}
                             aria-expanded={false}
                             aria-label="faq.accessibility.button_toggle_detail"
-                            className="MuiButtonBase-root MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                            className="MuiButtonBase-root MuiAccordionSummary-root expansion-panel-summary small bold-text"
                             onBlur={[Function]}
                             onClick={[Function]}
                             onDragLeave={[Function]}
@@ -555,13 +551,13 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             tabIndex={0}
                           >
                             <div
-                              className="MuiExpansionPanelSummary-content expansion-panel-content"
+                              className="MuiAccordionSummary-content expansion-panel-content"
                             >
                               Comment accéder à mes données gaz ?
                             </div>
                             <WithStyles(ForwardRef(IconButton))
                               aria-hidden={true}
-                              className="MuiExpansionPanelSummary-expandIcon"
+                              className="MuiAccordionSummary-expandIcon"
                               component="div"
                               edge="end"
                               role={null}
@@ -569,7 +565,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             >
                               <ForwardRef(IconButton)
                                 aria-hidden={true}
-                                className="MuiExpansionPanelSummary-expandIcon"
+                                className="MuiAccordionSummary-expandIcon"
                                 classes={
                                   Object {
                                     "colorInherit": "MuiIconButton-colorInherit",
@@ -591,7 +587,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                 <WithStyles(ForwardRef(ButtonBase))
                                   aria-hidden={true}
                                   centerRipple={true}
-                                  className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                  className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                   component="div"
                                   disabled={false}
                                   focusRipple={true}
@@ -601,7 +597,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   <ForwardRef(ButtonBase)
                                     aria-hidden={true}
                                     centerRipple={true}
-                                    className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                    className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                     classes={
                                       Object {
                                         "disabled": "Mui-disabled",
@@ -618,7 +614,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                     <div
                                       aria-disabled={false}
                                       aria-hidden={true}
-                                      className="MuiButtonBase-root MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                      className="MuiButtonBase-root MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                       onBlur={[Function]}
                                       onDragLeave={[Function]}
                                       onFocus={[Function]}
@@ -667,36 +663,34 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                           </Icon>
                                         </StyledIcon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </div>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -705,8 +699,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           </div>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
-                    </ForwardRef(ExpansionPanelSummary)>
-                  </WithStyles(ForwardRef(ExpansionPanelSummary))>
+                    </ForwardRef(AccordionSummary)>
+                  </WithStyles(ForwardRef(AccordionSummary))>
                   <WithStyles(ForwardRef(Collapse))
                     in={false}
                     timeout="auto"
@@ -714,9 +708,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     <ForwardRef(Collapse)
                       classes={
                         Object {
-                          "container": "MuiCollapse-container",
                           "entered": "MuiCollapse-entered",
                           "hidden": "MuiCollapse-hidden",
+                          "root": "MuiCollapse-root",
                           "wrapper": "MuiCollapse-wrapper",
                           "wrapperInner": "MuiCollapse-wrapperInner",
                         }
@@ -741,7 +735,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                         unmountOnExit={false}
                       >
                         <div
-                          className="MuiCollapse-container MuiCollapse-hidden"
+                          className="MuiCollapse-root MuiCollapse-hidden"
                           style={
                             Object {
                               "minHeight": "0px",
@@ -757,7 +751,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                               <div
                                 role="region"
                               >
-                                <WithStyles(ForwardRef(ExpansionPanelDetails))
+                                <WithStyles(ForwardRef(AccordionDetails))
                                   classes={
                                     Object {
                                       "root": "expansion-panel-details",
@@ -765,22 +759,22 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   }
                                   key=".1"
                                 >
-                                  <ForwardRef(ExpansionPanelDetails)
+                                  <ForwardRef(AccordionDetails)
                                     classes={
                                       Object {
-                                        "root": "MuiExpansionPanelDetails-root expansion-panel-details",
+                                        "root": "MuiAccordionDetails-root expansion-panel-details",
                                       }
                                     }
                                   >
                                     <div
-                                      className="MuiExpansionPanelDetails-root expansion-panel-details"
+                                      className="MuiAccordionDetails-root expansion-panel-details"
                                     >
                                       <div>
                                         Rendez-vous dans la partie Options du service et cliquez sur le bouton "Se connecter au gaz". Suivez la procédure (en vous créant un compte GRDF si nécessaire). Une fois votre consentement donné, vos données de consommation seront récupérées.',
                                       </div>
                                     </div>
-                                  </ForwardRef(ExpansionPanelDetails)>
-                                </WithStyles(ForwardRef(ExpansionPanelDetails))>
+                                  </ForwardRef(AccordionDetails)>
+                                </WithStyles(ForwardRef(AccordionDetails))>
                               </div>
                             </div>
                           </div>
@@ -791,8 +785,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 </div>
               </ForwardRef(Paper)>
             </WithStyles(ForwardRef(Paper))>
-          </ForwardRef(ExpansionPanel)>
-        </WithStyles(ForwardRef(ExpansionPanel))>
+          </ForwardRef(Accordion)>
+        </WithStyles(ForwardRef(Accordion))>
       </div>
       <div
         className="faq-section"
@@ -803,7 +797,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
         >
           Contenu du service
         </div>
-        <WithStyles(ForwardRef(ExpansionPanel))
+        <WithStyles(ForwardRef(Accordion))
           classes={
             Object {
               "root": "expansion-panel-root",
@@ -813,24 +807,24 @@ exports[`FAQContent should render the full FAQ 1`] = `
           key="0"
           onChange={[Function]}
         >
-          <ForwardRef(ExpansionPanel)
+          <ForwardRef(Accordion)
             classes={
               Object {
                 "disabled": "Mui-disabled",
                 "expanded": "Mui-expanded",
-                "root": "MuiExpansionPanel-root expansion-panel-root",
-                "rounded": "MuiExpansionPanel-rounded",
+                "root": "MuiAccordion-root expansion-panel-root",
+                "rounded": "MuiAccordion-rounded",
               }
             }
             expanded={false}
             onChange={[Function]}
           >
             <WithStyles(ForwardRef(Paper))
-              className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+              className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
               square={false}
             >
               <ForwardRef(Paper)
-                className="MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded"
+                className="MuiAccordion-root expansion-panel-root MuiAccordion-rounded"
                 classes={
                   Object {
                     "elevation0": "MuiPaper-elevation0",
@@ -866,9 +860,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 square={false}
               >
                 <div
-                  className="MuiPaper-root MuiExpansionPanel-root expansion-panel-root MuiExpansionPanel-rounded MuiPaper-elevation1 MuiPaper-rounded"
+                  className="MuiPaper-root MuiAccordion-root expansion-panel-root MuiAccordion-rounded MuiPaper-elevation1 MuiPaper-rounded"
                 >
-                  <WithStyles(ForwardRef(ExpansionPanelSummary))
+                  <WithStyles(ForwardRef(AccordionSummary))
                     aria-label="faq.accessibility.button_toggle_detail"
                     classes={
                       Object {
@@ -883,16 +877,17 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     }
                     key=".0"
                   >
-                    <ForwardRef(ExpansionPanelSummary)
+                    <ForwardRef(AccordionSummary)
                       aria-label="faq.accessibility.button_toggle_detail"
                       classes={
                         Object {
-                          "content": "MuiExpansionPanelSummary-content expansion-panel-content",
+                          "content": "MuiAccordionSummary-content expansion-panel-content",
                           "disabled": "Mui-disabled",
-                          "expandIcon": "MuiExpansionPanelSummary-expandIcon",
+                          "expandIcon": "MuiAccordionSummary-expandIcon",
                           "expanded": "Mui-expanded",
+                          "focusVisible": "Mui-focusVisible",
                           "focused": "Mui-focused",
-                          "root": "MuiExpansionPanelSummary-root expansion-panel-summary small bold-text",
+                          "root": "MuiAccordionSummary-root expansion-panel-summary small bold-text",
                         }
                       }
                       expandIcon={
@@ -904,19 +899,18 @@ exports[`FAQContent should render the full FAQ 1`] = `
                       <WithStyles(ForwardRef(ButtonBase))
                         aria-expanded={false}
                         aria-label="faq.accessibility.button_toggle_detail"
-                        className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                        className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                         component="div"
                         disableRipple={true}
                         disabled={false}
                         focusRipple={false}
-                        onBlur={[Function]}
+                        focusVisibleClassName="Mui-focusVisible Mui-focused"
                         onClick={[Function]}
-                        onFocusVisible={[Function]}
                       >
                         <ForwardRef(ButtonBase)
                           aria-expanded={false}
                           aria-label="faq.accessibility.button_toggle_detail"
-                          className="MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                          className="MuiAccordionSummary-root expansion-panel-summary small bold-text"
                           classes={
                             Object {
                               "disabled": "Mui-disabled",
@@ -928,15 +922,14 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           disableRipple={true}
                           disabled={false}
                           focusRipple={false}
-                          onBlur={[Function]}
+                          focusVisibleClassName="Mui-focusVisible Mui-focused"
                           onClick={[Function]}
-                          onFocusVisible={[Function]}
                         >
                           <div
                             aria-disabled={false}
                             aria-expanded={false}
                             aria-label="faq.accessibility.button_toggle_detail"
-                            className="MuiButtonBase-root MuiExpansionPanelSummary-root expansion-panel-summary small bold-text"
+                            className="MuiButtonBase-root MuiAccordionSummary-root expansion-panel-summary small bold-text"
                             onBlur={[Function]}
                             onClick={[Function]}
                             onDragLeave={[Function]}
@@ -953,13 +946,13 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             tabIndex={0}
                           >
                             <div
-                              className="MuiExpansionPanelSummary-content expansion-panel-content"
+                              className="MuiAccordionSummary-content expansion-panel-content"
                             >
                               Pourquoi les prix affichés sont-ils différents de ceux indiqués sur ma facture ?
                             </div>
                             <WithStyles(ForwardRef(IconButton))
                               aria-hidden={true}
-                              className="MuiExpansionPanelSummary-expandIcon"
+                              className="MuiAccordionSummary-expandIcon"
                               component="div"
                               edge="end"
                               role={null}
@@ -967,7 +960,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                             >
                               <ForwardRef(IconButton)
                                 aria-hidden={true}
-                                className="MuiExpansionPanelSummary-expandIcon"
+                                className="MuiAccordionSummary-expandIcon"
                                 classes={
                                   Object {
                                     "colorInherit": "MuiIconButton-colorInherit",
@@ -989,7 +982,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                 <WithStyles(ForwardRef(ButtonBase))
                                   aria-hidden={true}
                                   centerRipple={true}
-                                  className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                  className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                   component="div"
                                   disabled={false}
                                   focusRipple={true}
@@ -999,7 +992,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   <ForwardRef(ButtonBase)
                                     aria-hidden={true}
                                     centerRipple={true}
-                                    className="MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                    className="MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                     classes={
                                       Object {
                                         "disabled": "Mui-disabled",
@@ -1016,7 +1009,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                     <div
                                       aria-disabled={false}
                                       aria-hidden={true}
-                                      className="MuiButtonBase-root MuiIconButton-root MuiExpansionPanelSummary-expandIcon MuiIconButton-edgeEnd"
+                                      className="MuiButtonBase-root MuiIconButton-root MuiAccordionSummary-expandIcon MuiIconButton-edgeEnd"
                                       onBlur={[Function]}
                                       onDragLeave={[Function]}
                                       onFocus={[Function]}
@@ -1065,36 +1058,34 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                           </Icon>
                                         </StyledIcon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </div>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1103,8 +1094,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                           </div>
                         </ForwardRef(ButtonBase)>
                       </WithStyles(ForwardRef(ButtonBase))>
-                    </ForwardRef(ExpansionPanelSummary)>
-                  </WithStyles(ForwardRef(ExpansionPanelSummary))>
+                    </ForwardRef(AccordionSummary)>
+                  </WithStyles(ForwardRef(AccordionSummary))>
                   <WithStyles(ForwardRef(Collapse))
                     in={false}
                     timeout="auto"
@@ -1112,9 +1103,9 @@ exports[`FAQContent should render the full FAQ 1`] = `
                     <ForwardRef(Collapse)
                       classes={
                         Object {
-                          "container": "MuiCollapse-container",
                           "entered": "MuiCollapse-entered",
                           "hidden": "MuiCollapse-hidden",
+                          "root": "MuiCollapse-root",
                           "wrapper": "MuiCollapse-wrapper",
                           "wrapperInner": "MuiCollapse-wrapperInner",
                         }
@@ -1139,7 +1130,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                         unmountOnExit={false}
                       >
                         <div
-                          className="MuiCollapse-container MuiCollapse-hidden"
+                          className="MuiCollapse-root MuiCollapse-hidden"
                           style={
                             Object {
                               "minHeight": "0px",
@@ -1155,7 +1146,7 @@ exports[`FAQContent should render the full FAQ 1`] = `
                               <div
                                 role="region"
                               >
-                                <WithStyles(ForwardRef(ExpansionPanelDetails))
+                                <WithStyles(ForwardRef(AccordionDetails))
                                   classes={
                                     Object {
                                       "root": "expansion-panel-details",
@@ -1163,15 +1154,15 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                   }
                                   key=".1"
                                 >
-                                  <ForwardRef(ExpansionPanelDetails)
+                                  <ForwardRef(AccordionDetails)
                                     classes={
                                       Object {
-                                        "root": "MuiExpansionPanelDetails-root expansion-panel-details",
+                                        "root": "MuiAccordionDetails-root expansion-panel-details",
                                       }
                                     }
                                   >
                                     <div
-                                      className="MuiExpansionPanelDetails-root expansion-panel-details"
+                                      className="MuiAccordionDetails-root expansion-panel-details"
                                     >
                                       <div>
                                         <p>
@@ -1182,8 +1173,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                                         </p>
                                       </div>
                                     </div>
-                                  </ForwardRef(ExpansionPanelDetails)>
-                                </WithStyles(ForwardRef(ExpansionPanelDetails))>
+                                  </ForwardRef(AccordionDetails)>
+                                </WithStyles(ForwardRef(AccordionDetails))>
                               </div>
                             </div>
                           </div>
@@ -1194,8 +1185,8 @@ exports[`FAQContent should render the full FAQ 1`] = `
                 </div>
               </ForwardRef(Paper)>
             </WithStyles(ForwardRef(Paper))>
-          </ForwardRef(ExpansionPanel)>
-        </WithStyles(ForwardRef(ExpansionPanel))>
+          </ForwardRef(Accordion)>
+        </WithStyles(ForwardRef(Accordion))>
       </div>
     </div>
   </div>
diff --git a/src/components/FAQ/__snapshots__/FAQView.spec.tsx.snap b/src/components/FAQ/__snapshots__/FAQView.spec.tsx.snap
index d39d3478bcca7a209cdf08cfc7eb3e8ee35366f1..285ef8a29c5ce9475e1167d5d092bfd17c0099e4 100644
--- a/src/components/FAQ/__snapshots__/FAQView.spec.tsx.snap
+++ b/src/components/FAQ/__snapshots__/FAQView.spec.tsx.snap
@@ -1,20 +1,20 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`FAQView component should render only the parent component 1`] = `
-<React.Fragment>
-  <CozyBar
-    displayBackArrow={true}
-    titleKey="common.title_faq"
-  />
-  <Header
-    desktopTitleKey="common.title_faq"
-    displayBackArrow={true}
-    setHeaderHeight={[Function]}
-  />
-  <Content
-    height={0}
-  >
-    <FAQContent />
-  </Content>
-</React.Fragment>
-`;
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`FAQView component should render only the parent component 1`] = `
+<React.Fragment>
+  <mock-cozybar
+    displayBackArrow={true}
+    titleKey="common.title_faq"
+  />
+  <mock-header
+    desktopTitleKey="common.title_faq"
+    displayBackArrow={true}
+    setHeaderHeight={[Function]}
+  />
+  <mock-content
+    height={0}
+  >
+    <FAQContent />
+  </mock-content>
+</React.Fragment>
+`;
diff --git a/src/components/Feedback/FeedbackModal.spec.tsx b/src/components/Feedback/FeedbackModal.spec.tsx
index 31650c119d1e0ea221dbed1d74ceccd2a8a0b089..3a5a63748ee16066ca0b263c49899a9950e8fe59 100644
--- a/src/components/Feedback/FeedbackModal.spec.tsx
+++ b/src/components/Feedback/FeedbackModal.spec.tsx
@@ -131,10 +131,7 @@ describe('FeedbackModal functionnalities', () => {
       ],
     }
 
-    wrapper
-      .find('div.fb-selector-item')
-      .first()
-      .simulate('click')
+    wrapper.find('div.fb-selector-item').first().simulate('click')
     wrapper.find('#idFeedbackDescription').simulate('change', {
       target: {
         value: 'La description',
@@ -169,10 +166,7 @@ describe('FeedbackModal functionnalities', () => {
         value: 'La description',
       },
     })
-    wrapper
-      .find('.modal-paper-close-button')
-      .first()
-      .simulate('click')
+    wrapper.find('.modal-paper-close-button').first().simulate('click')
     expect(handleFeedbackModalClose).toHaveBeenCalledTimes(1)
     setTimeout(() => {
       expect(wrapper.find('#idFeedbackDescription').prop('value')).toBe('')
@@ -197,11 +191,6 @@ describe('FeedbackModal functionnalities', () => {
     const readAsDataURLSpy = jest.spyOn(FileReader.prototype, 'readAsDataURL')
     wrapper.find('#folder').simulate('change', { target: { files: [file] } })
     expect(readAsDataURLSpy).toBeCalledWith(file)
-    expect(
-      wrapper
-        .find('.removeUploaded')
-        .first()
-        .simulate('click')
-    )
+    expect(wrapper.find('.removeUploaded').first().simulate('click'))
   })
 })
diff --git a/src/components/Feedback/FeedbackModal.tsx b/src/components/Feedback/FeedbackModal.tsx
index d387c86b8177ef109f2ce5662021c6edbcad4c07..9dabd1b1452261515e24d29250d5a88bf330415f 100644
--- a/src/components/Feedback/FeedbackModal.tsx
+++ b/src/components/Feedback/FeedbackModal.tsx
@@ -201,9 +201,10 @@ const FeedbackModal: React.FC<FeedbackModalProps> = ({
   return (
     <Dialog
       open={open}
-      disableBackdropClick
+      onClose={(event, reason): void => {
+        event && reason !== 'backdropClick' && closeModal()
+      }}
       disableEscapeKeyDown
-      onClose={closeModal}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/FluidChart/FluidChart.tsx b/src/components/FluidChart/FluidChart.tsx
index 161f7e01e7b5e6fdc1cc399f60c994cff1f2f79c..e24c47f472b1d04c783a36a042affd8fa4c6c2f2 100644
--- a/src/components/FluidChart/FluidChart.tsx
+++ b/src/components/FluidChart/FluidChart.tsx
@@ -63,9 +63,8 @@ const FluidChart: React.FC<FluidChartProps> = ({
         )
       }
       if (currentTimeStep === TimeStep.HALF_AN_HOUR && activateHalfHourLoad) {
-        isEnedisConsentValid = await consumptionService.checkEnedisHalHourConsent(
-          selectedDate
-        )
+        isEnedisConsentValid =
+          await consumptionService.checkEnedisHalHourConsent(selectedDate)
       }
       if (subscribed) {
         if (!activateHalfHourLoad) {
diff --git a/src/components/GCU/GCUContent.spec.tsx b/src/components/GCU/GCUContent.spec.tsx
index 70d90112c326f5312d29f9162f591a0466f1e81c..7b79865dec3e577616cd4c72a26ad0416f8d6dc4 100644
--- a/src/components/GCU/GCUContent.spec.tsx
+++ b/src/components/GCU/GCUContent.spec.tsx
@@ -8,7 +8,7 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
       return {
         t: (str: string) => {
           if (str === 'gcu.content.part9_4_content') {
-            return "test <a href=\"link.com\">link</a>fin test"
+            return 'test <a href="link.com">link</a>fin test'
           } else {
             return str
           }
diff --git a/src/components/GCU/GCUView.spec.tsx b/src/components/GCU/GCUView.spec.tsx
index 809feee5f8f215e804951195b91b10e2448ca2a3..6ede9dbdc54199016cf3717f459440d15105735f 100644
--- a/src/components/GCU/GCUView.spec.tsx
+++ b/src/components/GCU/GCUView.spec.tsx
@@ -2,6 +2,10 @@ import React from 'react'
 import { shallow } from 'enzyme'
 import GCUView from 'components/GCU/GCUView'
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
+
 describe('GCUView component', () => {
   it('should be rendered correctly', () => {
     const component = shallow(<GCUView />).getElement()
diff --git a/src/components/GCU/__snapshots__/GCUView.spec.tsx.snap b/src/components/GCU/__snapshots__/GCUView.spec.tsx.snap
index 33e490ab2cee7cf73924e66f7e9dfaed67e42d16..bcc93b8a7020797f0037ffa7d0db41ef8be7f3e6 100644
--- a/src/components/GCU/__snapshots__/GCUView.spec.tsx.snap
+++ b/src/components/GCU/__snapshots__/GCUView.spec.tsx.snap
@@ -2,19 +2,19 @@
 
 exports[`GCUView component should be rendered correctly 1`] = `
 <React.Fragment>
-  <CozyBar
+  <mock-cozybar
     displayBackArrow={true}
     titleKey="common.title_gcu"
   />
-  <Header
+  <mock-header
     desktopTitleKey="common.title_gcu"
     displayBackArrow={true}
     setHeaderHeight={[Function]}
   />
-  <Content
+  <mock-content
     height={0}
   >
     <GCUContent />
-  </Content>
+  </mock-content>
 </React.Fragment>
 `;
diff --git a/src/components/Header/CozyBar.spec.tsx b/src/components/Header/CozyBar.spec.tsx
index 2e612a0935dcd2cfe5913544793da432a8a3fd3a..16c35eb6696054095afc56adc62c93e317a4289f 100644
--- a/src/components/Header/CozyBar.spec.tsx
+++ b/src/components/Header/CozyBar.spec.tsx
@@ -55,11 +55,7 @@ describe('CozyBar component', () => {
       </Provider>
     )
     expect(wrapper.find('BarLeft')).toHaveLength(1)
-    wrapper
-      .find('BarLeft')
-      .find('.cv-button')
-      .first()
-      .simulate('click')
+    wrapper.find('BarLeft').find('.cv-button').first().simulate('click')
     expect(mockGoBack).toHaveBeenCalled()
   })
 
@@ -76,11 +72,7 @@ describe('CozyBar component', () => {
       </Provider>
     )
     const updateModalSpy = jest.spyOn(ModalAction, 'updateModalIsFeedbacksOpen')
-    wrapper
-      .find('BarRight')
-      .find('.cv-button')
-      .first()
-      .simulate('click')
+    wrapper.find('BarRight').find('.cv-button').first().simulate('click')
     expect(updateModalSpy).toHaveBeenCalledWith(true)
   })
 
diff --git a/src/components/Header/Header.spec.tsx b/src/components/Header/Header.spec.tsx
index 5e59a39939b69721ba9c81c757ca166267182c7d..3aab69e60e9d74357fee306a45a6702effc59c42 100644
--- a/src/components/Header/Header.spec.tsx
+++ b/src/components/Header/Header.spec.tsx
@@ -55,12 +55,7 @@ describe('Header component', () => {
         <Header textKey={'KEY'} setHeaderHeight={mocksetHeaderHeight} />
       </Provider>
     )
-    expect(
-      wrapper
-        .find('.header-text')
-        .first()
-        .text()
-    ).toEqual('KEY')
+    expect(wrapper.find('.header-text').first().text()).toEqual('KEY')
   })
 
   it('should display title and back button when desktopTitle key provided and displayBackArrow is true', () => {
@@ -78,17 +73,9 @@ describe('Header component', () => {
         />
       </Provider>
     )
+    expect(wrapper.find('.header-text-desktop').first().text()).toEqual('KEY')
     expect(
-      wrapper
-        .find('.header-text-desktop')
-        .first()
-        .text()
-    ).toEqual('KEY')
-    expect(
-      wrapper
-        .find(IconButton)
-        .find('.header-back-button')
-        .first()
+      wrapper.find(IconButton).find('.header-back-button').first()
     ).toHaveLength(1)
   })
 
diff --git a/src/components/Home/ConsumptionView.spec.tsx b/src/components/Home/ConsumptionView.spec.tsx
index a272d2bf25de666933374873ca1bbaec1ffd4698..1692736e7d99cba2e99ac6a3701b00b80cf215bf 100644
--- a/src/components/Home/ConsumptionView.spec.tsx
+++ b/src/components/Home/ConsumptionView.spec.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/display-name */
 import React from 'react'
 import { mount } from 'enzyme'
 import { Provider } from 'react-redux'
@@ -12,6 +11,8 @@ import * as chartActions from 'store/chart/chart.actions'
 import { FluidState, FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
+import FluidButtons from 'components/Home/FluidButtons'
+import KonnectorViewerList from 'components/Konnector/KonnectorViewerList'
 import ConsumptionView from './ConsumptionView'
 import { FluidStatus } from 'models'
 import { mockTestProfile1 } from '../../../tests/__mocks__/profileType.mock'
@@ -77,6 +78,7 @@ describe('ConsumptionView component', () => {
       loading: false,
       fluidStatus: mockFluidStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     const wrapper = mount(
       <Provider store={store}>
@@ -100,6 +102,7 @@ describe('ConsumptionView component', () => {
       loading: true,
       fluidStatus: mockFluidStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     const wrapper = mount(
       <Provider store={store}>
@@ -118,6 +121,7 @@ describe('ConsumptionView component', () => {
       loading: true,
       fluidStatus: mockInitialEcolyoState.global.fluidStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     mount(
       <Provider store={store}>
@@ -127,12 +131,14 @@ describe('ConsumptionView component', () => {
     expect(setCurrentTimeStepSpy).toBeCalledTimes(1)
     expect(setCurrentTimeStepSpy).toHaveBeenCalledWith(TimeStep.WEEK)
   })
+
   it('should render konnector list when no fluid is connected', () => {
     useSelectorSpy.mockReturnValue({
       currentTimeStep: TimeStep.WEEK,
       loading: true,
       fluidStatus: mockInitialEcolyoState.global.fluidStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     const wrapper = mount(
       <Provider store={store}>
@@ -141,6 +147,7 @@ describe('ConsumptionView component', () => {
     )
     expect(wrapper.find('mock-consumptiondetails').exists()).toBeTruthy()
   })
+
   it('should render mutlifluid consumption if at least one fluid is connected', () => {
     const updatedStatus: FluidStatus[] =
       mockInitialEcolyoState.global.fluidStatus
@@ -151,6 +158,7 @@ describe('ConsumptionView component', () => {
       loading: true,
       fluidStatus: updatedStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     const wrapper = mount(
       <Provider store={store}>
@@ -159,6 +167,7 @@ describe('ConsumptionView component', () => {
     )
     expect(wrapper.find('.consumptionview-content').exists()).toBeTruthy()
   })
+
   it('should render Electricity when elec is connected', () => {
     const updatedStatus: FluidStatus[] =
       mockInitialEcolyoState.global.fluidStatus
@@ -168,6 +177,7 @@ describe('ConsumptionView component', () => {
       loading: true,
       fluidStatus: updatedStatus,
       releaseNotes: mockInitialEcolyoState.global.releaseNotes,
+      openPartnersIssueModal: false,
     })
     const wrapper = mount(
       <Provider store={store}>
diff --git a/src/components/Home/ConsumptionView.tsx b/src/components/Home/ConsumptionView.tsx
index 9902d21d2fabe01e8dcc6c2cb11b177bb86e967e..ac64219d36b8a0a79c44dc362d81e60942594350 100644
--- a/src/components/Home/ConsumptionView.tsx
+++ b/src/components/Home/ConsumptionView.tsx
@@ -49,9 +49,8 @@ const ConsumptionView: React.FC<ConsumptionViewProps> = ({
 
   const [headerHeight, setHeaderHeight] = useState<number>(0)
   const [active, setActive] = useState<boolean>(false)
-  const [openExpiredConsentModal, setopenExpiredConsentModal] = useState<
-    boolean
-  >(true)
+  const [openExpiredConsentModal, setopenExpiredConsentModal] =
+    useState<boolean>(true)
   const [consentExpiredFluids, setconsentExpiredFluids] = useState<FluidType[]>(
     []
   )
@@ -59,10 +58,9 @@ const ConsumptionView: React.FC<ConsumptionViewProps> = ({
 
   const updatekey =
     fluidType !== FluidType.MULTIFLUID && fluidStatus[fluidType].lastDataDate
-      ? `${fluidStatus[
-          fluidType
-        ].lastDataDate!.toLocaleString()} + ${fluidStatus[fluidType].status +
-          fluidType}`
+      ? `${fluidStatus[fluidType].lastDataDate!.toLocaleString()} + ${
+          fluidStatus[fluidType].status + fluidType
+        }`
       : ''
   const lastDataDateKey =
     fluidType !== FluidType.MULTIFLUID && fluidStatus[fluidType].lastDataDate
diff --git a/src/components/Home/FluidButton.tsx b/src/components/Home/FluidButton.tsx
index 39cae3cf2cd42eab8bf2871af6ed3a0c6b5290ff..c0e14b19c0704659906fdda1954122bf0dde4693 100644
--- a/src/components/Home/FluidButton.tsx
+++ b/src/components/Home/FluidButton.tsx
@@ -115,9 +115,9 @@ const FluidButton: React.FC<FluidButtonProps> = ({
         )
       )}
       <div
-        className={`fluid-title ${FluidType[
-          fluidType
-        ].toLowerCase()} ${isActive && 'active'} text-14-normal`}
+        className={`fluid-title ${FluidType[fluidType].toLowerCase()} ${
+          isActive && 'active'
+        } text-14-normal`}
       >
         {t('FLUID.' + FluidType[fluidType] + '.LABEL')}
       </div>
diff --git a/src/components/Home/releaseNotesModal.tsx b/src/components/Home/releaseNotesModal.tsx
index 981bc4fd59f20493aac5a0d31a2479e87778062b..e46be103f00791fa7fbc9cdcec30e3b71849e711 100644
--- a/src/components/Home/releaseNotesModal.tsx
+++ b/src/components/Home/releaseNotesModal.tsx
@@ -21,9 +21,10 @@ const ReleaseNotesModal: React.FC<ReleaseNotesModalProps> = ({
   return (
     <Dialog
       open={open}
-      disableBackdropClick
       disableEscapeKeyDown
-      onClose={handleCloseClick}
+      onClose={(event, reason): void => {
+        event && reason !== 'backdropClick' && handleCloseClick()
+      }}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/Konnector/KonnectorModal.tsx b/src/components/Konnector/KonnectorModal.tsx
index 457ebb041cf6b5cbb40126252f0199cbce288243..d2c16a07e84868ec8a7feb89f975b601455de324 100644
--- a/src/components/Konnector/KonnectorModal.tsx
+++ b/src/components/Konnector/KonnectorModal.tsx
@@ -75,9 +75,12 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({
   return (
     <Dialog
       open={open}
-      disableBackdropClick
       disableEscapeKeyDown
-      onClose={() => handleCloseClick(state === SUCCESS_EVENT)}
+      onClose={(event, reason): void => {
+        event &&
+          reason !== 'backdropClick' &&
+          handleCloseClick(state === SUCCESS_EVENT)
+      }}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx
index d7cb6b235827ea72c3ba258276dab460503a479e..c3f19abf018095c5df960ba48c8c7fdd5185c324 100644
--- a/src/components/Konnector/KonnectorViewerCard.tsx
+++ b/src/components/Konnector/KonnectorViewerCard.tsx
@@ -30,9 +30,11 @@ import AccountService from 'services/account.service'
 
 import chevronDown from 'assets/icons/ico/chevron-down.svg'
 import Icon from 'cozy-ui/transpiled/react/Icon'
-import ExpansionPanel from '@material-ui/core/ExpansionPanel'
-import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary'
-import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails'
+import {
+  Accordion,
+  AccordionSummary,
+  AccordionDetails,
+} from '@material-ui/core'
 import ErrorNotif from 'assets/icons/ico/notif_error.svg'
 import PartnersIssueNotif from 'assets/icons/ico/notif_maintenance.svg'
 import ConnectionNotFound from 'components/Connection/ConnectionNotFound'
@@ -100,9 +102,10 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
     (state: AppStore) => state.ecolyo.challenge
   )
   const fluidService = useMemo(() => new FluidService(client), [client])
-  const partnersInfoService = useMemo(() => new PartnersInfoService(client), [
-    client,
-  ])
+  const partnersInfoService = useMemo(
+    () => new PartnersInfoService(client),
+    [client]
+  )
 
   /* eslint-disable @typescript-eslint/no-non-null-assertion */
   const lastDataDate =
@@ -122,7 +125,8 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
   const updateGlobalFluidStatus = useCallback(async (): Promise<
     FluidStatus[]
   > => {
-    const _updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus()
+    const _updatedFluidStatus: FluidStatus[] =
+      await fluidService.getFluidStatus()
     setUpdatedFluidStatus(_updatedFluidStatus)
     const refDate: DateTime = DateTime.fromISO('0001-01-01')
     let _lastDataDate: DateTime | null = DateTime.fromISO('0001-01-01')
@@ -145,10 +149,8 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
       currentChallenge.duel.state === UserDuelState.ONGOING
     ) {
       const challengeService = new ChallengeService(client)
-      const {
-        updatedUserChallenge,
-        dataloads,
-      } = await challengeService.initChallengeDuelProgress(currentChallenge)
+      const { updatedUserChallenge, dataloads } =
+        await challengeService.initChallengeDuelProgress(currentChallenge)
       dispatch(setChallengeConsumption(updatedUserChallenge, dataloads))
       // Check is duel is done and display notification
       const { isDone } = await challengeService.isChallengeDone(
@@ -163,10 +165,10 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
     await refreshChallengeState()
     const _updatedFluidStatus = await updateGlobalFluidStatus()
     if (_updatedFluidStatus.length > 0) {
-      const partnersInfo: PartnersInfo = await partnersInfoService.getPartnersInfo()
-      const updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus(
-        partnersInfo
-      )
+      const partnersInfo: PartnersInfo | undefined =
+        await partnersInfoService.getPartnersInfo()
+      const updatedFluidStatus: FluidStatus[] =
+        await fluidService.getFluidStatus(partnersInfo)
       dispatch(setFluidStatus(updatedFluidStatus))
     }
     setActive(false)
@@ -202,10 +204,10 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
           )
         }
         if (updatedFluidStatus.length > 0) {
-          const partnersInfo: PartnersInfo = await partnersInfoService.getPartnersInfo()
-          const _updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus(
-            partnersInfo
-          )
+          const partnersInfo: PartnersInfo | undefined =
+            await partnersInfoService.getPartnersInfo()
+          const _updatedFluidStatus: FluidStatus[] =
+            await fluidService.getFluidStatus(partnersInfo)
           dispatch(setFluidStatus(_updatedFluidStatus))
         }
       }
@@ -458,7 +460,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
   return (
     <>
       {!isDisconnected ? (
-        <ExpansionPanel
+        <Accordion
           expanded={active}
           onChange={toggleAccordion}
           classes={{
@@ -472,7 +474,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
             }`,
           }}
         >
-          <ExpansionPanelSummary
+          <AccordionSummary
             aria-label={t(
               `konnector_options.accessibility.button_toggle_detail_${FluidType[
                 fluidStatus.fluidType
@@ -496,15 +498,15 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
             >
               {displayKonnectorHeader()}
             </div>
-          </ExpansionPanelSummary>
-          <ExpansionPanelDetails
+          </AccordionSummary>
+          <AccordionDetails
             classes={{
               root: 'expansion-panel-details',
             }}
           >
             {getConnectionCard()}
-          </ExpansionPanelDetails>
-        </ExpansionPanel>
+          </AccordionDetails>
+        </Accordion>
       ) : (
         <>{getConnectionCard()}</>
       )}
diff --git a/src/components/Konnector/KonnectorViewerList.spec.tsx b/src/components/Konnector/KonnectorViewerList.spec.tsx
index c830ad75ddc00145c4e353c7cb01fa9cb1fa78b6..b87e6632f3191d4c3158e0cb5ac0659408ecc138 100644
--- a/src/components/Konnector/KonnectorViewerList.spec.tsx
+++ b/src/components/Konnector/KonnectorViewerList.spec.tsx
@@ -52,10 +52,7 @@ describe('KonnectorViewerList component', () => {
         <KonnectorViewerList />
       </Provider>
     )
-    wrapper
-      .find('.connection-card')
-      .first()
-      .simulate('click')
+    wrapper.find('.connection-card').first().simulate('click')
     expect(mockHistoryPush).toHaveBeenCalled()
   })
 })
diff --git a/src/components/LegalNotice/LegalNoticeContent.tsx b/src/components/LegalNotice/LegalNoticeContent.tsx
index fb937b997ad995178c6b255ef1708c0111d286f7..66b9eedd6ec4dec558b5ba1e43b59191aa239b46 100644
--- a/src/components/LegalNotice/LegalNoticeContent.tsx
+++ b/src/components/LegalNotice/LegalNoticeContent.tsx
@@ -56,7 +56,8 @@ const LegalNoticeContent: React.FC = () => {
                     <li>{t('legal.part2-2-1')}</li>
                     <li>{t('legal.part2-2-2')}</li>
                     <li>{t('legal.part2-2-3')}</li>
-                    <li>{t('legal.part2-2-4')}</li>
+                    <li>{decoreText(t('legal.part2-2-4'))}</li>
+                    <li>{t('legal.part2-2-5')}</li>
                   </ul>
                 </li>
                 <li>{t('legal.part2-3')}</li>
diff --git a/src/components/LegalNotice/LegalNoticeView.spec.tsx b/src/components/LegalNotice/LegalNoticeView.spec.tsx
index d63efac8a14437c8c49ad0e10b4cd91f33940459..2c3c35247f8254d480c68843e29cc04757bb8d5e 100644
--- a/src/components/LegalNotice/LegalNoticeView.spec.tsx
+++ b/src/components/LegalNotice/LegalNoticeView.spec.tsx
@@ -2,6 +2,10 @@ import React from 'react'
 import { shallow } from 'enzyme'
 import LegalNoticeView from 'components/LegalNotice/LegalNoticeView'
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
+
 describe('LegalNoticeView component', () => {
   it('should be rendered correctly', () => {
     const component = shallow(<LegalNoticeView />).getElement()
diff --git a/src/components/LegalNotice/__snapshots__/LegalNoticeContent.spec.tsx.snap b/src/components/LegalNotice/__snapshots__/LegalNoticeContent.spec.tsx.snap
index e651a2e9d8e99c743716ec0ac8e7a2033a7e9783..a76fba0e2b2c4883efee3ad5e2947ab25bd39a79 100644
--- a/src/components/LegalNotice/__snapshots__/LegalNoticeContent.spec.tsx.snap
+++ b/src/components/LegalNotice/__snapshots__/LegalNoticeContent.spec.tsx.snap
@@ -132,6 +132,9 @@ exports[`LegalNoticeContent component should be rendered correctly 1`] = `
                 <li>
                   legal.part2-2-4
                 </li>
+                <li>
+                  legal.part2-2-5
+                </li>
               </ul>
             </li>
             <li>
diff --git a/src/components/LegalNotice/__snapshots__/LegalNoticeView.spec.tsx.snap b/src/components/LegalNotice/__snapshots__/LegalNoticeView.spec.tsx.snap
index 50fb84232368727f90e205ec6ade27e17ca50ca2..52b42634ccd99ef5cc0458c03738dcb536858289 100644
--- a/src/components/LegalNotice/__snapshots__/LegalNoticeView.spec.tsx.snap
+++ b/src/components/LegalNotice/__snapshots__/LegalNoticeView.spec.tsx.snap
@@ -2,19 +2,19 @@
 
 exports[`LegalNoticeView component should be rendered correctly 1`] = `
 <React.Fragment>
-  <CozyBar
+  <mock-cozybar
     displayBackArrow={true}
     titleKey="common.title_legal_notice"
   />
-  <Header
+  <mock-header
     desktopTitleKey="common.title_legal_notice"
     displayBackArrow={true}
     setHeaderHeight={[Function]}
   />
-  <Content
+  <mock-content
     height={0}
   >
     <LegalNoticeContent />
-  </Content>
+  </mock-content>
 </React.Fragment>
 `;
diff --git a/src/components/Navbar/Navbar.spec.tsx b/src/components/Navbar/Navbar.spec.tsx
index 441ab394586a86fa504c7edafedb5ccffa583130..07be998ffe070da06a074117d7a28b891c5e0bd8 100644
--- a/src/components/Navbar/Navbar.spec.tsx
+++ b/src/components/Navbar/Navbar.spec.tsx
@@ -54,18 +54,8 @@ describe('Navbar component', () => {
         </BrowserRouter>
       </Provider>
     )
-    expect(
-      wrapper
-        .find('.nb-notif')
-        .first()
-        .text()
-    ).toEqual('1')
-    expect(
-      wrapper
-        .find('.nb-notif')
-        .last()
-        .text()
-    ).toEqual('1')
+    expect(wrapper.find('.nb-notif').first().text()).toEqual('1')
+    expect(wrapper.find('.nb-notif').last().text()).toEqual('1')
   })
 
   it('should be rendered correctly without notifications', () => {
diff --git a/src/components/Onboarding/WelcomeModal.spec.tsx b/src/components/Onboarding/WelcomeModal.spec.tsx
index 9be659c49a17cfdd18097956870a6f3a710e9a07..9c46bca76a57a7ca522fc35693d1ef3aadab36fd 100644
--- a/src/components/Onboarding/WelcomeModal.spec.tsx
+++ b/src/components/Onboarding/WelcomeModal.spec.tsx
@@ -108,10 +108,7 @@ describe('WelcomeModal component', () => {
         <WelcomeModal open={true} />
       </Provider>
     )
-    component
-      .find(Button)
-      .first()
-      .simulate('click')
+    component.find(Button).first().simulate('click')
     expect(mockSendMail).toBeCalled()
     expect(updateProfileSpy).toHaveBeenCalledWith({
       isFirstConnection: false,
@@ -132,10 +129,7 @@ describe('WelcomeModal component', () => {
         <WelcomeModal open={true} />
       </Provider>
     )
-    component
-      .find(IconButton)
-      .first()
-      .simulate('click')
+    component.find(IconButton).first().simulate('click')
     expect(mockSendMail).toBeCalled()
     expect(updateProfileSpy).toHaveBeenCalledWith({
       isFirstConnection: false,
diff --git a/src/components/Onboarding/__snapshots__/WelcomeModal.spec.tsx.snap b/src/components/Onboarding/__snapshots__/WelcomeModal.spec.tsx.snap
index aa3ec99575ed2df068ced3cfb0f6104c296636fa..ed873b9546d9006b7802abbe801655d430759071 100644
--- a/src/components/Onboarding/__snapshots__/WelcomeModal.spec.tsx.snap
+++ b/src/components/Onboarding/__snapshots__/WelcomeModal.spec.tsx.snap
@@ -107,12 +107,17 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -372,7 +377,6 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={false}
           disableEscapeKeyDown={false}
           onClose={[Function]}
           open={true}
@@ -586,7 +590,7 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                     </ForwardRef(Fade)>
                   </ForwardRef(Backdrop)>
                 </WithStyles(ForwardRef(Backdrop))>
-                <TrapFocus
+                <Unstable_TrapFocus
                   disableAutoFocus={false}
                   disableEnforceFocus={false}
                   disableRestoreFocus={false}
@@ -636,8 +640,8 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                     >
                       <div
                         className="MuiDialog-container MuiDialog-scrollPaper"
-                        onClick={[Function]}
                         onMouseDown={[Function]}
+                        onMouseUp={[Function]}
                         role="none presentation"
                         style={
                           Object {
@@ -795,36 +799,34 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                                             </Component>
                                           </Icon>
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={true}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={true}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={true}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -974,36 +976,34 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                                             >
                                               onboarding.welcomeModal.button_valid
                                             </span>
-                                            <NoSsr>
-                                              <WithStyles(memo)
+                                            <WithStyles(memo)
+                                              center={false}
+                                            >
+                                              <ForwardRef(TouchRipple)
                                                 center={false}
-                                              >
-                                                <ForwardRef(TouchRipple)
-                                                  center={false}
-                                                  classes={
-                                                    Object {
-                                                      "child": "MuiTouchRipple-child",
-                                                      "childLeaving": "MuiTouchRipple-childLeaving",
-                                                      "childPulsate": "MuiTouchRipple-childPulsate",
-                                                      "ripple": "MuiTouchRipple-ripple",
-                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                      "root": "MuiTouchRipple-root",
-                                                    }
+                                                classes={
+                                                  Object {
+                                                    "child": "MuiTouchRipple-child",
+                                                    "childLeaving": "MuiTouchRipple-childLeaving",
+                                                    "childPulsate": "MuiTouchRipple-childPulsate",
+                                                    "ripple": "MuiTouchRipple-ripple",
+                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                    "root": "MuiTouchRipple-root",
                                                   }
+                                                }
+                                              >
+                                                <span
+                                                  className="MuiTouchRipple-root"
                                                 >
-                                                  <span
-                                                    className="MuiTouchRipple-root"
-                                                  >
-                                                    <TransitionGroup
-                                                      childFactory={[Function]}
-                                                      component={null}
-                                                      exit={true}
-                                                    />
-                                                  </span>
-                                                </ForwardRef(TouchRipple)>
-                                              </WithStyles(memo)>
-                                            </NoSsr>
+                                                  <TransitionGroup
+                                                    childFactory={[Function]}
+                                                    component={null}
+                                                    exit={true}
+                                                  />
+                                                </span>
+                                              </ForwardRef(TouchRipple)>
+                                            </WithStyles(memo)>
                                           </button>
                                         </ForwardRef(ButtonBase)>
                                       </WithStyles(ForwardRef(ButtonBase))>
@@ -1021,7 +1021,7 @@ exports[`WelcomeModal component should be rendered correctly 1`] = `
                     data-test="sentinelEnd"
                     tabIndex={0}
                   />
-                </TrapFocus>
+                </Unstable_TrapFocus>
               </div>
             </Portal>
           </ForwardRef(Portal)>
@@ -1139,12 +1139,17 @@ exports[`WelcomeModal component should not be rendered 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -1404,7 +1409,6 @@ exports[`WelcomeModal component should not be rendered 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={false}
           disableEscapeKeyDown={false}
           onClose={[Function]}
           open={false}
diff --git a/src/components/Options/MatomoOptOut.spec.tsx b/src/components/Options/MatomoOptOut.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..11ca220012806d180ab8d95272e65ad1679325d2
--- /dev/null
+++ b/src/components/Options/MatomoOptOut.spec.tsx
@@ -0,0 +1,20 @@
+import React from 'react'
+import { shallow } from 'enzyme'
+import { MatomoOptOut } from './MatomoOptOut'
+
+jest.mock('cozy-ui/transpiled/react/I18n', () => {
+  return {
+    useI18n: jest.fn(() => {
+      return {
+        t: (str: string) => str,
+      }
+    }),
+  }
+})
+
+describe('MatomoOptOut component', () => {
+  it('should be rendered correctly', () => {
+    const component = shallow(<MatomoOptOut />).getElement()
+    expect(component).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Options/MatomoOptOut.tsx b/src/components/Options/MatomoOptOut.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..69e16ae49cc8eca9e7897a869c213e541d36ac5a
--- /dev/null
+++ b/src/components/Options/MatomoOptOut.tsx
@@ -0,0 +1,24 @@
+import React from 'react'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import './matomoOptOut.scss'
+
+declare let __PIWIK_TRACKER_URL__: string
+
+export const MatomoOptOut: React.FC = () => {
+  const { t } = useI18n()
+  const baseUrl = __PIWIK_TRACKER_URL__
+
+  return (
+    <div className="matomo-opt-out-container">
+      <div className="matomo-opt-out">
+        <div className="opt-out-header text-16-normal-uppercase">
+          {t('matomo.matomo_title')}
+        </div>
+        <iframe
+          style={{ height: '250px' }}
+          src={`${baseUrl}index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=121212&fontColor=e0e0e0&fontSize=&fontFamily=sans-serif`}
+        ></iframe>
+      </div>
+    </div>
+  )
+}
diff --git a/src/components/Options/OptionsView.spec.tsx b/src/components/Options/OptionsView.spec.tsx
index a1fc5688d7e559de5cd87cf117d7ac545217cb88..0f2f73c8d8ff3cec0c7882d4425683ba66266c7e 100644
--- a/src/components/Options/OptionsView.spec.tsx
+++ b/src/components/Options/OptionsView.spec.tsx
@@ -2,9 +2,12 @@ import React from 'react'
 import { shallow } from 'enzyme'
 import OptionsView from 'components/Options/OptionsView'
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 jest.mock(
   'components/Konnector/KonnectorViewerList',
-  () => 'KonnectorViewerList'
+  () => 'mock-konnectorviewerlist'
 )
 
 describe('OptionsView component', () => {
diff --git a/src/components/Options/OptionsView.tsx b/src/components/Options/OptionsView.tsx
index a6fb18867dd2b948369bd0bd0a1ecec6c7fc5f33..906e5c209d0978b3b12c1675201476e4b29c103b 100644
--- a/src/components/Options/OptionsView.tsx
+++ b/src/components/Options/OptionsView.tsx
@@ -10,6 +10,7 @@ import Version from 'components/Version/Version'
 import ProfileTypeOptions from './ProfileTypeOptions'
 
 import logos from 'assets/png/logos.png'
+import { MatomoOptOut } from './MatomoOptOut'
 
 const OptionsView: React.FC = () => {
   const [headerHeight, setHeaderHeight] = useState<number>(0)
@@ -29,6 +30,7 @@ const OptionsView: React.FC = () => {
         <FAQLink />
         <LegalNoticeLink />
         <GCULink />
+        <MatomoOptOut />
         <div className="parameters-logos">
           <img src={logos} alt="ensemble de logos" />
         </div>
diff --git a/src/components/Options/ProfileTypeOptions.spec.tsx b/src/components/Options/ProfileTypeOptions.spec.tsx
index 6b3690acebe086c380791263f529030f28367ae6..e9e76356b6fd67b89366fe4504cc1e67421adc9f 100644
--- a/src/components/Options/ProfileTypeOptions.spec.tsx
+++ b/src/components/Options/ProfileTypeOptions.spec.tsx
@@ -52,10 +52,7 @@ describe('ProfileTypeOptions component', () => {
     expect(wrapper.find(StyledCard).exists()).toBeTruthy()
     expect(wrapper.find(StyledIcon).exists()).toBeTruthy()
     expect(wrapper.find(profileIcon)).toBeTruthy()
-    wrapper
-      .find('.profile-link')
-      .first()
-      .simulate('click')
+    wrapper.find('.profile-link').first().simulate('click')
   })
   it('should be rendered when user complete profile type form', () => {
     const profileTypeCompleted = { ...profileData }
diff --git a/src/components/Options/ProfileTypeOptions.tsx b/src/components/Options/ProfileTypeOptions.tsx
index e73c1cf2cadf205d238080a4bf6b3b6fb15be5da..639467f227a40ea43aeef30f4959f982ee1b093c 100644
--- a/src/components/Options/ProfileTypeOptions.tsx
+++ b/src/components/Options/ProfileTypeOptions.tsx
@@ -13,9 +13,11 @@ import {
 import { FluidType } from 'enum/fluid.enum'
 import { useHistory } from 'react-router-dom'
 
-import ExpansionPanel from '@material-ui/core/ExpansionPanel'
-import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary'
-import ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails'
+import {
+  Accordion,
+  AccordionSummary,
+  AccordionDetails,
+} from '@material-ui/core'
 import Icon from 'cozy-ui/transpiled/react/Icon'
 import chevronDown from 'assets/icons/ico/chevron-down.svg'
 import StyledCard from 'components/CommonKit/Card/StyledCard'
@@ -50,14 +52,14 @@ const ProfileTypeOptions: React.FC = () => {
           {t('profile_type.title_profile')}
         </div>
         {profile.isProfileTypeCompleted && (
-          <ExpansionPanel
+          <Accordion
             expanded={active}
             onChange={toggleAccordion}
             classes={{
               root: 'expansion-panel-root',
             }}
           >
-            <ExpansionPanelSummary
+            <AccordionSummary
               aria-label={t(
                 'profile_type.accessibility.button_toggle_detail_profile'
               )}
@@ -70,8 +72,8 @@ const ProfileTypeOptions: React.FC = () => {
               <div className="text-18-normal">
                 {t('profile_type.your_profile')}
               </div>
-            </ExpansionPanelSummary>
-            <ExpansionPanelDetails
+            </AccordionSummary>
+            <AccordionDetails
               classes={{
                 root: 'expansion-panel-details',
               }}
@@ -87,8 +89,9 @@ const ProfileTypeOptions: React.FC = () => {
                   {profileType.constructionYear && (
                     <div className="value">
                       {t(
-                        `profile_type.construction_year.${'text_' +
-                          profileType.constructionYear}`
+                        `profile_type.construction_year.${
+                          'text_' + profileType.constructionYear
+                        }`
                       )}
                     </div>
                   )}
@@ -126,8 +129,9 @@ const ProfileTypeOptions: React.FC = () => {
                         {profileType.warmingFluid == null
                           ? t('profile_type.warming_fluid.no_fluid_text')
                           : t(
-                              `profile_type.warming_fluid.${profileType.warmingFluid +
-                                '_text'}`
+                              `profile_type.warming_fluid.${
+                                profileType.warmingFluid + '_text'
+                              }`
                             )}
                       </div>
                       {(profileType.hasInstalledVentilation ===
@@ -169,8 +173,9 @@ const ProfileTypeOptions: React.FC = () => {
                     {profileType.warmingFluid !== null &&
                     profileType.heating === IndividualOrCollective.INDIVIDUAL
                       ? t(
-                          `profile_type.hot_water_fluid.${profileType.hotWaterFluid +
-                            '_text'}`
+                          `profile_type.hot_water_fluid.${
+                            profileType.hotWaterFluid + '_text'
+                          }`
                         )
                       : profileType.heating ===
                         IndividualOrCollective.INDIVIDUAL
@@ -228,8 +233,8 @@ const ProfileTypeOptions: React.FC = () => {
                   </Button>
                 </div>
               </div>
-            </ExpansionPanelDetails>
-          </ExpansionPanel>
+            </AccordionDetails>
+          </Accordion>
         )}
         {profile.isProfileTypeCompleted === false && (
           <StyledCard onClick={goToForm} className="profile-link">
diff --git a/src/components/Options/ReportOptions.spec.tsx b/src/components/Options/ReportOptions.spec.tsx
index fc6cac7487ab47e31ba255c58b8cfc9fbf15d02d..f97b6ddad87824400d8cd65bfa56ad4336ba3a78 100644
--- a/src/components/Options/ReportOptions.spec.tsx
+++ b/src/components/Options/ReportOptions.spec.tsx
@@ -55,10 +55,7 @@ describe('ReportOptions component', () => {
         <ReportOptions />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(updateProfileSpy).toBeCalledTimes(1)
     expect(updateProfileSpy).toHaveBeenCalledWith({
       sendAnalysisNotification: false,
@@ -73,10 +70,7 @@ describe('ReportOptions component', () => {
         <ReportOptions />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(updateProfileSpy).toBeCalledTimes(1)
     expect(updateProfileSpy).toHaveBeenCalledWith({
       sendAnalysisNotification: true,
@@ -94,12 +88,7 @@ describe('ReportOptions component', () => {
       </Provider>
     )
     expect(wrapper.find(StyledSwitch)).toHaveLength(1)
-    expect(
-      wrapper
-        .find(StyledSwitch)
-        .first()
-        .props().checked
-    ).toBeFalsy()
+    expect(wrapper.find(StyledSwitch).first().props().checked).toBeFalsy()
   })
 
   it('should update the profile with sendConsumptionAlert to true', () => {
diff --git a/src/components/Options/ReportOptions.tsx b/src/components/Options/ReportOptions.tsx
index 5a74cb99020ea89de6f4aaf77990b3bbae8f1cbb..0a5778ad3741afaf1cd7afc9c7aff452e0e1e061 100644
--- a/src/components/Options/ReportOptions.tsx
+++ b/src/components/Options/ReportOptions.tsx
@@ -56,9 +56,7 @@ const ReportOptions: React.FC = () => {
     let subscribed = true
     async function getMaxLoadData() {
       const timePeriod: TimePeriod = {
-        startDate: DateTime.now()
-          .minus({ month: 6 })
-          .startOf('month'),
+        startDate: DateTime.now().minus({ month: 6 }).startOf('month'),
         endDate: DateTime.now(),
       }
       const consumptionService = new ConsumptionDataManager(client)
diff --git a/src/components/Options/UnSubscribe.spec.tsx b/src/components/Options/UnSubscribe.spec.tsx
index e77f60d6a8a88b94a347005ed2aaf50a70ac364b..bd7b90d4697e2b2ef304a4aa301fd30d4544b1a1 100644
--- a/src/components/Options/UnSubscribe.spec.tsx
+++ b/src/components/Options/UnSubscribe.spec.tsx
@@ -1,5 +1,6 @@
 import React from 'react'
 import { mount } from 'enzyme'
+import toJson from 'enzyme-to-json'
 import { Provider } from 'react-redux'
 import {
   createMockStore,
@@ -18,6 +19,9 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
     }),
   }
 })
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 
 const mockUpdateProfile = jest.fn()
 jest.mock('services/profile.service', () => {
@@ -27,7 +31,6 @@ jest.mock('services/profile.service', () => {
     }
   })
 })
-// const useDispatchSpy = jest.spyOn(reactRedux, 'useDispatch')
 const updateProfileSpy = jest.spyOn(profileActions, 'updateProfile')
 
 describe('UnSubscribe component', () => {
@@ -43,8 +46,8 @@ describe('UnSubscribe component', () => {
       <Provider store={store}>
         <UnSubscribe />
       </Provider>
-    ).getElement()
-    expect(wrapper).toMatchSnapshot()
+    )
+    expect(toJson(wrapper)).toMatchSnapshot()
   })
 
   it('should click on button and deactivate report', () => {
diff --git a/src/components/Options/__snapshots__/MatomoOptOut.spec.tsx.snap b/src/components/Options/__snapshots__/MatomoOptOut.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..599b28c0a472fe9b02fd1b93dc448c2b6e597659
--- /dev/null
+++ b/src/components/Options/__snapshots__/MatomoOptOut.spec.tsx.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`MatomoOptOut component should be rendered correctly 1`] = `
+<div
+  className="matomo-opt-out-container"
+>
+  <div
+    className="matomo-opt-out"
+  >
+    <div
+      className="opt-out-header text-16-normal-uppercase"
+    >
+      matomo.matomo_title
+    </div>
+    <iframe
+      src="http://localhost:9800/index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=121212&fontColor=e0e0e0&fontSize=&fontFamily=sans-serif"
+      style={
+        Object {
+          "height": "250px",
+        }
+      }
+    />
+  </div>
+</div>
+`;
diff --git a/src/components/Options/__snapshots__/OptionsView.spec.tsx.snap b/src/components/Options/__snapshots__/OptionsView.spec.tsx.snap
index a77207e38365d2469fe2a4384dff0645f4ad9872..3cdb93ecb9ac5e5207444fe7bc45111e528e874e 100644
--- a/src/components/Options/__snapshots__/OptionsView.spec.tsx.snap
+++ b/src/components/Options/__snapshots__/OptionsView.spec.tsx.snap
@@ -2,14 +2,14 @@
 
 exports[`OptionsView component should be rendered correctly 1`] = `
 <React.Fragment>
-  <CozyBar
+  <mock-cozybar
     titleKey="common.title_options"
   />
-  <Header
+  <mock-header
     desktopTitleKey="common.title_options"
     setHeaderHeight={[Function]}
   />
-  <Content
+  <mock-content
     height={0}
   >
     <ProfileTypeOptions />
@@ -17,6 +17,7 @@ exports[`OptionsView component should be rendered correctly 1`] = `
     <FAQLink />
     <LegalNoticeLink />
     <GCULink />
+    <MatomoOptOut />
     <div
       className="parameters-logos"
     >
@@ -26,6 +27,6 @@ exports[`OptionsView component should be rendered correctly 1`] = `
       />
     </div>
     <Version />
-  </Content>
+  </mock-content>
 </React.Fragment>
 `;
diff --git a/src/components/Options/__snapshots__/UnSubscribe.spec.tsx.snap b/src/components/Options/__snapshots__/UnSubscribe.spec.tsx.snap
index fc7a7ac6793887011529c6731c5460c3afba29f7..d06e84f78e27bb05e0db7fe618368590e8998070 100644
--- a/src/components/Options/__snapshots__/UnSubscribe.spec.tsx.snap
+++ b/src/components/Options/__snapshots__/UnSubscribe.spec.tsx.snap
@@ -13,6 +13,200 @@ exports[`UnSubscribe component should be rendered correctly 1`] = `
     }
   }
 >
-  <UnSubscribe />
+  <UnSubscribe>
+    <mock-cozybar
+      titleKey="common.title_analysis"
+    />
+    <mock-header
+      desktopTitleKey="common.title_analysis"
+      setHeaderHeight={[Function]}
+    />
+    <mock-content
+      height={0}
+    >
+      <div
+        className="unsubscribe-container"
+      >
+        <StyledIcon
+          className="profile-icon"
+          icon="test-file-stub"
+          size={250}
+        >
+          <Icon
+            aria-hidden={true}
+            className="profile-icon"
+            icon="test-file-stub"
+            size={250}
+            spin={false}
+          >
+            <Component
+              aria-hidden={true}
+              className="profile-icon styles__icon___23x3R"
+              height={250}
+              style={Object {}}
+              width={250}
+            >
+              <svg
+                aria-hidden={true}
+                className="profile-icon styles__icon___23x3R"
+                height={250}
+                style={Object {}}
+                width={250}
+              >
+                <use
+                  xlinkHref="#test-file-stub"
+                />
+              </svg>
+            </Component>
+          </Icon>
+        </StyledIcon>
+        <div
+          className="text-20-bold head"
+        >
+          unsubscribe.title
+        </div>
+        <div
+          className="text-16-normal question"
+        >
+          unsubscribe.content
+        </div>
+        <WithStyles(ForwardRef(Button))
+          aria-label="unsubscribe.button_accessibility"
+          classes={
+            Object {
+              "label": "text-18-bold",
+              "root": "btn-highlight",
+            }
+          }
+          onClick={[Function]}
+          type="submit"
+          variant="contained"
+        >
+          <ForwardRef(Button)
+            aria-label="unsubscribe.button_accessibility"
+            classes={
+              Object {
+                "colorInherit": "MuiButton-colorInherit",
+                "contained": "MuiButton-contained",
+                "containedPrimary": "MuiButton-containedPrimary",
+                "containedSecondary": "MuiButton-containedSecondary",
+                "containedSizeLarge": "MuiButton-containedSizeLarge",
+                "containedSizeSmall": "MuiButton-containedSizeSmall",
+                "disableElevation": "MuiButton-disableElevation",
+                "disabled": "Mui-disabled",
+                "endIcon": "MuiButton-endIcon",
+                "focusVisible": "Mui-focusVisible",
+                "fullWidth": "MuiButton-fullWidth",
+                "iconSizeLarge": "MuiButton-iconSizeLarge",
+                "iconSizeMedium": "MuiButton-iconSizeMedium",
+                "iconSizeSmall": "MuiButton-iconSizeSmall",
+                "label": "MuiButton-label text-18-bold",
+                "outlined": "MuiButton-outlined",
+                "outlinedPrimary": "MuiButton-outlinedPrimary",
+                "outlinedSecondary": "MuiButton-outlinedSecondary",
+                "outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
+                "outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
+                "root": "MuiButton-root btn-highlight",
+                "sizeLarge": "MuiButton-sizeLarge",
+                "sizeSmall": "MuiButton-sizeSmall",
+                "startIcon": "MuiButton-startIcon",
+                "text": "MuiButton-text",
+                "textPrimary": "MuiButton-textPrimary",
+                "textSecondary": "MuiButton-textSecondary",
+                "textSizeLarge": "MuiButton-textSizeLarge",
+                "textSizeSmall": "MuiButton-textSizeSmall",
+              }
+            }
+            onClick={[Function]}
+            type="submit"
+            variant="contained"
+          >
+            <WithStyles(ForwardRef(ButtonBase))
+              aria-label="unsubscribe.button_accessibility"
+              className="MuiButton-root btn-highlight MuiButton-contained"
+              component="button"
+              disabled={false}
+              focusRipple={true}
+              focusVisibleClassName="Mui-focusVisible"
+              onClick={[Function]}
+              type="submit"
+            >
+              <ForwardRef(ButtonBase)
+                aria-label="unsubscribe.button_accessibility"
+                className="MuiButton-root btn-highlight MuiButton-contained"
+                classes={
+                  Object {
+                    "disabled": "Mui-disabled",
+                    "focusVisible": "Mui-focusVisible",
+                    "root": "MuiButtonBase-root",
+                  }
+                }
+                component="button"
+                disabled={false}
+                focusRipple={true}
+                focusVisibleClassName="Mui-focusVisible"
+                onClick={[Function]}
+                type="submit"
+              >
+                <button
+                  aria-label="unsubscribe.button_accessibility"
+                  className="MuiButtonBase-root MuiButton-root btn-highlight MuiButton-contained"
+                  disabled={false}
+                  onBlur={[Function]}
+                  onClick={[Function]}
+                  onDragLeave={[Function]}
+                  onFocus={[Function]}
+                  onKeyDown={[Function]}
+                  onKeyUp={[Function]}
+                  onMouseDown={[Function]}
+                  onMouseLeave={[Function]}
+                  onMouseUp={[Function]}
+                  onTouchEnd={[Function]}
+                  onTouchMove={[Function]}
+                  onTouchStart={[Function]}
+                  tabIndex={0}
+                  type="submit"
+                >
+                  <span
+                    className="MuiButton-label text-18-bold"
+                  >
+                    unsubscribe.button_text
+                  </span>
+                  <WithStyles(memo)
+                    center={false}
+                  >
+                    <ForwardRef(TouchRipple)
+                      center={false}
+                      classes={
+                        Object {
+                          "child": "MuiTouchRipple-child",
+                          "childLeaving": "MuiTouchRipple-childLeaving",
+                          "childPulsate": "MuiTouchRipple-childPulsate",
+                          "ripple": "MuiTouchRipple-ripple",
+                          "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                          "rippleVisible": "MuiTouchRipple-rippleVisible",
+                          "root": "MuiTouchRipple-root",
+                        }
+                      }
+                    >
+                      <span
+                        className="MuiTouchRipple-root"
+                      >
+                        <TransitionGroup
+                          childFactory={[Function]}
+                          component={null}
+                          exit={true}
+                        />
+                      </span>
+                    </ForwardRef(TouchRipple)>
+                  </WithStyles(memo)>
+                </button>
+              </ForwardRef(ButtonBase)>
+            </WithStyles(ForwardRef(ButtonBase))>
+          </ForwardRef(Button)>
+        </WithStyles(ForwardRef(Button))>
+      </div>
+    </mock-content>
+  </UnSubscribe>
 </Provider>
 `;
diff --git a/src/components/Options/matomoOptOut.scss b/src/components/Options/matomoOptOut.scss
new file mode 100644
index 0000000000000000000000000000000000000000..184e9e44e3ae351ae99a80537907fc0d187336bc
--- /dev/null
+++ b/src/components/Options/matomoOptOut.scss
@@ -0,0 +1,27 @@
+@import 'src/styles/base/color';
+@import 'src/styles/base/breakpoint';
+@import 'src/styles/base/typo-variables';
+
+.matomo-opt-out-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 0 1.5rem;
+  margin: 1rem 0;
+
+  .matomo-opt-out {
+    margin: 0 auto;
+    width: 100%;
+    @media (min-width: $width-large-phone) {
+      width: 45.75rem;
+    }
+    .opt-out-header {
+      color: $grey-bright;
+    }
+
+    * {
+      font-family: $text-font;
+    }
+  }
+}
diff --git a/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.spec.tsx b/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.spec.tsx
index 07dc5f128739b16960a82d4f4a8e0d5130078258..c8b94ee62e07f54d9ce5bcc19f3f054cef2c5851 100644
--- a/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.spec.tsx
+++ b/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.spec.tsx
@@ -52,10 +52,7 @@ describe('PartnerConnectionStepsModal component', () => {
         handleEndSteps={mockHandleEndSteps}
       />
     )
-    component
-      .find(IconButton)
-      .first()
-      .simulate('click')
+    component.find(IconButton).first().simulate('click')
     expect(mockHandleCloseClick).toBeCalled()
   })
 
@@ -69,10 +66,7 @@ describe('PartnerConnectionStepsModal component', () => {
         handleEndSteps={mockHandleEndSteps}
       />
     )
-    component
-      .find(Button)
-      .last()
-      .simulate('click')
+    component.find(Button).last().simulate('click')
     const step: string = component
       .find('.partners-connection-step-progress')
       .first()
@@ -90,23 +84,14 @@ describe('PartnerConnectionStepsModal component', () => {
         handleEndSteps={mockHandleEndSteps}
       />
     )
-    component
-      .find(Button)
-      .last()
-      .simulate('click')
-    component
-      .find(Button)
-      .last()
-      .simulate('click')
+    component.find(Button).last().simulate('click')
+    component.find(Button).last().simulate('click')
     const step: string = component
       .find('.partners-connection-step-progress')
       .first()
       .text()
     expect(step).toEqual('3 / 3')
-    component
-      .find(Button)
-      .last()
-      .simulate('click')
+    component.find(Button).last().simulate('click')
     expect(mockHandleEndSteps).toBeCalled()
   })
 })
diff --git a/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.tsx b/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.tsx
index 70988ddd09907e998b20ebcc7537f6ef87d080c1..a5f41c520ba150dd70a0261ef650d8603f17ee0e 100644
--- a/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.tsx
+++ b/src/components/PartnerConnectionStepsModal/PartnerConnectionStepsModal.tsx
@@ -65,8 +65,9 @@ const PartnerConnectionStepsModal = ({
         <Icon icon={CloseIcon} size={16} />
       </IconButton>
       <div className="partners-connection-step-content">
-        <div className="partners-connection-step-progress">{`${stepIndex +
-          1} / ${steps.length}`}</div>
+        <div className="partners-connection-step-progress">{`${
+          stepIndex + 1
+        } / ${steps.length}`}</div>
         <StepDetail step={steps[stepIndex]} />
       </div>
       <div className="partners-connection-step-navigation">
diff --git a/src/components/PartnerConnectionStepsModal/__snapshots__/PartnerConnectionStepsModal.spec.tsx.snap b/src/components/PartnerConnectionStepsModal/__snapshots__/PartnerConnectionStepsModal.spec.tsx.snap
index 24aae2ac9d18a75bd6649a3f0f91a138fcf9ebf0..8349a835e595c9dec73adafb88d0bb131ba4e4e9 100644
--- a/src/components/PartnerConnectionStepsModal/__snapshots__/PartnerConnectionStepsModal.spec.tsx.snap
+++ b/src/components/PartnerConnectionStepsModal/__snapshots__/PartnerConnectionStepsModal.spec.tsx.snap
@@ -98,12 +98,17 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -363,7 +368,6 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -594,7 +598,7 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -644,8 +648,8 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -801,36 +805,34 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1107,36 +1109,34 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                                         >
                                           partner_connection_steps.button_next &gt;
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={false}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={false}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={false}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -1153,7 +1153,7 @@ exports[`PartnerConnectionStepsModal component should be rendered correctly 1`]
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/PartnersIssue/PartnersIssueModal.tsx b/src/components/PartnersIssue/PartnersIssueModal.tsx
index 84a49f61d48be1006412829b5198450b3742102d..e29c89b237f9032dea5b87be941e523c11cf53f2 100644
--- a/src/components/PartnersIssue/PartnersIssueModal.tsx
+++ b/src/components/PartnersIssue/PartnersIssueModal.tsx
@@ -34,9 +34,10 @@ const PartnersIssueModal: React.FC<PartnersIssueModalProps> = ({
   return (
     <Dialog
       open={open}
-      disableBackdropClick
       disableEscapeKeyDown
-      onClose={handleCloseClick}
+      onClose={(event, reason): void => {
+        event && reason !== 'backdropClick' && handleCloseClick()
+      }}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
diff --git a/src/components/PartnersIssue/__snapshots__/PartnersIssueModal.spec.tsx.snap b/src/components/PartnersIssue/__snapshots__/PartnersIssueModal.spec.tsx.snap
index f3a773803581b4d3dcc445c61ef957e9a02f5af9..6c4bfa3e7818464f168fba11ce330ff0bfee6ba0 100644
--- a/src/components/PartnersIssue/__snapshots__/PartnersIssueModal.spec.tsx.snap
+++ b/src/components/PartnersIssue/__snapshots__/PartnersIssueModal.spec.tsx.snap
@@ -92,9 +92,8 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
           "root": "modal-root",
         }
       }
-      disableBackdropClick={true}
       disableEscapeKeyDown={true}
-      onClose={[MockFunction]}
+      onClose={[Function]}
       open={true}
     >
       <ForwardRef(Dialog)
@@ -118,9 +117,8 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
             "scrollPaper": "MuiDialog-scrollPaper",
           }
         }
-        disableBackdropClick={true}
         disableEscapeKeyDown={true}
-        onClose={[MockFunction]}
+        onClose={[Function]}
         open={true}
       >
         <ForwardRef(Modal)
@@ -179,12 +177,17 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                   "overrides": Object {},
                   "palette": Object {
                     "action": Object {
+                      "activatedOpacity": 0.12,
                       "active": "rgba(0, 0, 0, 0.54)",
                       "disabled": "rgba(0, 0, 0, 0.26)",
                       "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                      "hover": "rgba(0, 0, 0, 0.08)",
-                      "hoverOpacity": 0.08,
-                      "selected": "rgba(0, 0, 0, 0.14)",
+                      "disabledOpacity": 0.38,
+                      "focus": "rgba(0, 0, 0, 0.12)",
+                      "focusOpacity": 0.12,
+                      "hover": "rgba(0, 0, 0, 0.04)",
+                      "hoverOpacity": 0.04,
+                      "selected": "rgba(0, 0, 0, 0.08)",
+                      "selectedOpacity": 0.08,
                     },
                     "augmentColor": [Function],
                     "background": Object {
@@ -444,9 +447,8 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
           }
           className="MuiDialog-root modal-root"
           closeAfterTransition={true}
-          disableBackdropClick={true}
           disableEscapeKeyDown={true}
-          onClose={[MockFunction]}
+          onClose={[Function]}
           open={true}
         >
           <ForwardRef(Portal)
@@ -651,7 +653,7 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                     </ForwardRef(Fade)>
                   </ForwardRef(Backdrop)>
                 </WithStyles(ForwardRef(Backdrop))>
-                <TrapFocus
+                <Unstable_TrapFocus
                   disableAutoFocus={false}
                   disableEnforceFocus={false}
                   disableRestoreFocus={false}
@@ -701,8 +703,8 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                     >
                       <div
                         className="MuiDialog-container MuiDialog-scrollPaper"
-                        onClick={[Function]}
                         onMouseDown={[Function]}
+                        onMouseUp={[Function]}
                         role="none presentation"
                         style={
                           Object {
@@ -858,36 +860,34 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                                             </Component>
                                           </Icon>
                                         </span>
-                                        <NoSsr>
-                                          <WithStyles(memo)
+                                        <WithStyles(memo)
+                                          center={true}
+                                        >
+                                          <ForwardRef(TouchRipple)
                                             center={true}
-                                          >
-                                            <ForwardRef(TouchRipple)
-                                              center={true}
-                                              classes={
-                                                Object {
-                                                  "child": "MuiTouchRipple-child",
-                                                  "childLeaving": "MuiTouchRipple-childLeaving",
-                                                  "childPulsate": "MuiTouchRipple-childPulsate",
-                                                  "ripple": "MuiTouchRipple-ripple",
-                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                  "root": "MuiTouchRipple-root",
-                                                }
+                                            classes={
+                                              Object {
+                                                "child": "MuiTouchRipple-child",
+                                                "childLeaving": "MuiTouchRipple-childLeaving",
+                                                "childPulsate": "MuiTouchRipple-childPulsate",
+                                                "ripple": "MuiTouchRipple-ripple",
+                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                "root": "MuiTouchRipple-root",
                                               }
+                                            }
+                                          >
+                                            <span
+                                              className="MuiTouchRipple-root"
                                             >
-                                              <span
-                                                className="MuiTouchRipple-root"
-                                              >
-                                                <TransitionGroup
-                                                  childFactory={[Function]}
-                                                  component={null}
-                                                  exit={true}
-                                                />
-                                              </span>
-                                            </ForwardRef(TouchRipple)>
-                                          </WithStyles(memo)>
-                                        </NoSsr>
+                                              <TransitionGroup
+                                                childFactory={[Function]}
+                                                component={null}
+                                                exit={true}
+                                              />
+                                            </span>
+                                          </ForwardRef(TouchRipple)>
+                                        </WithStyles(memo)>
                                       </button>
                                     </ForwardRef(ButtonBase)>
                                   </WithStyles(ForwardRef(ButtonBase))>
@@ -1038,36 +1038,34 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                                           >
                                             consumption.partners_issue_modal.button_validate
                                           </span>
-                                          <NoSsr>
-                                            <WithStyles(memo)
+                                          <WithStyles(memo)
+                                            center={false}
+                                          >
+                                            <ForwardRef(TouchRipple)
                                               center={false}
-                                            >
-                                              <ForwardRef(TouchRipple)
-                                                center={false}
-                                                classes={
-                                                  Object {
-                                                    "child": "MuiTouchRipple-child",
-                                                    "childLeaving": "MuiTouchRipple-childLeaving",
-                                                    "childPulsate": "MuiTouchRipple-childPulsate",
-                                                    "ripple": "MuiTouchRipple-ripple",
-                                                    "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                    "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                    "root": "MuiTouchRipple-root",
-                                                  }
+                                              classes={
+                                                Object {
+                                                  "child": "MuiTouchRipple-child",
+                                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                                  "ripple": "MuiTouchRipple-ripple",
+                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                  "root": "MuiTouchRipple-root",
                                                 }
+                                              }
+                                            >
+                                              <span
+                                                className="MuiTouchRipple-root"
                                               >
-                                                <span
-                                                  className="MuiTouchRipple-root"
-                                                >
-                                                  <TransitionGroup
-                                                    childFactory={[Function]}
-                                                    component={null}
-                                                    exit={true}
-                                                  />
-                                                </span>
-                                              </ForwardRef(TouchRipple)>
-                                            </WithStyles(memo)>
-                                          </NoSsr>
+                                                <TransitionGroup
+                                                  childFactory={[Function]}
+                                                  component={null}
+                                                  exit={true}
+                                                />
+                                              </span>
+                                            </ForwardRef(TouchRipple)>
+                                          </WithStyles(memo)>
                                         </button>
                                       </ForwardRef(ButtonBase)>
                                     </WithStyles(ForwardRef(ButtonBase))>
@@ -1084,7 +1082,7 @@ exports[`PartnersIssueModal component should render correctly 1`] = `
                     data-test="sentinelEnd"
                     tabIndex={0}
                   />
-                </TrapFocus>
+                </Unstable_TrapFocus>
               </div>
             </Portal>
           </ForwardRef(Portal)>
diff --git a/src/components/PerformanceIndicator/FluidPerformanceIndicator.tsx b/src/components/PerformanceIndicator/FluidPerformanceIndicator.tsx
index a331d9ddb2998c86e383a66746d4e493ec27d8d2..b5f3f51601a5e3044dc8704a2e217d9ddbd154a7 100644
--- a/src/components/PerformanceIndicator/FluidPerformanceIndicator.tsx
+++ b/src/components/PerformanceIndicator/FluidPerformanceIndicator.tsx
@@ -1,13 +1,13 @@
-import React from 'react'
-import './fluidPerformanceIndicator.scss'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { DateTime } from 'luxon'
+import React from 'react'
+import './fluidPerformanceIndicator.scss'
 
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import { FluidType } from 'enum/fluid.enum'
 import { PerformanceIndicator } from 'models'
 import { getPicto } from 'utils/picto'
 import { formatNumberValues, getPreviousMonthName } from 'utils/utils'
-import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 
 interface FluidPerformanceIndicatorProps {
   performanceIndicator: PerformanceIndicator
@@ -54,18 +54,18 @@ const FluidPerformanceIndicator: React.FC<FluidPerformanceIndicatorProps> = ({
                         performanceIndicator &&
                         performanceIndicator.percentageVariation &&
                         performanceIndicator.percentageVariation > 0
-                          ? 'negative'
-                          : 'positive'
+                          ? 'positive'
+                          : 'negative'
                       }`}
                     >
                       {performanceIndicator &&
                       performanceIndicator.percentageVariation ? (
                         performanceIndicator.percentageVariation > 0 ? (
-                          `-${formatNumberValues(
+                          `+${formatNumberValues(
                             performanceIndicator.percentageVariation * 100
                           )} %`
                         ) : (
-                          `+${formatNumberValues(
+                          `-${formatNumberValues(
                             Math.abs(performanceIndicator.percentageVariation) *
                               100
                           )} %`
diff --git a/src/components/PerformanceIndicator/PerformanceIndicatorContent.tsx b/src/components/PerformanceIndicator/PerformanceIndicatorContent.tsx
index 44380016085d123a1729f10fb9755bee2f04ebe9..e9df3d07bee2348c36219eb3d9c40da781de5780 100644
--- a/src/components/PerformanceIndicator/PerformanceIndicatorContent.tsx
+++ b/src/components/PerformanceIndicator/PerformanceIndicatorContent.tsx
@@ -24,7 +24,9 @@ interface PerformanceIndicatorContentProps {
   analysisDate?: DateTime
 }
 
-const PerformanceIndicatorContent: React.FC<PerformanceIndicatorContentProps> = ({
+const PerformanceIndicatorContent: React.FC<
+  PerformanceIndicatorContentProps
+> = ({
   performanceIndicator,
   fluidLackOfData = [],
   analysisDate,
diff --git a/src/components/ProfileType/FormNavigation.spec.tsx b/src/components/ProfileType/FormNavigation.spec.tsx
index 01d0dc8bb12c8685352e454582c43be99528148f..fbb34ae60ebc1375821ed973657ef5e71d22a3d0 100644
--- a/src/components/ProfileType/FormNavigation.spec.tsx
+++ b/src/components/ProfileType/FormNavigation.spec.tsx
@@ -39,14 +39,8 @@ describe('FormNavigation component', () => {
         />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .at(0)
-      .simulate('click')
-    wrapper
-      .find(Button)
-      .at(1)
-      .simulate('click')
+    wrapper.find(Button).at(0).simulate('click')
+    wrapper.find(Button).at(1).simulate('click')
     expect(wrapper.find('profile-navigation')).toBeTruthy()
     expect(wrapper.find(Button)).toBeTruthy()
     expect(mockhandlePrevious.mock.calls.length).toEqual(1)
diff --git a/src/components/ProfileType/ProfileTypeFinished.spec.tsx b/src/components/ProfileType/ProfileTypeFinished.spec.tsx
index 60f540a189cae15d509f1f49d466241cf8dc1b3a..3f49551416a5157ce23a376a804ce02e7c0ab34b 100644
--- a/src/components/ProfileType/ProfileTypeFinished.spec.tsx
+++ b/src/components/ProfileType/ProfileTypeFinished.spec.tsx
@@ -57,10 +57,7 @@ describe('ProfileTypeFinished component', () => {
         <ProfileTypeFinished profileType={mockProfileType} />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(mockHistoryPush).toHaveBeenCalledWith('/ecogesture-selection')
   })
 })
diff --git a/src/components/ProfileType/ProfileTypeFinished.tsx b/src/components/ProfileType/ProfileTypeFinished.tsx
index be6a82b0c28f9351c09d2526f2240e8cef9e9ae1..24832b694861de70e83e7578e9ef7465a728ff66 100644
--- a/src/components/ProfileType/ProfileTypeFinished.tsx
+++ b/src/components/ProfileType/ProfileTypeFinished.tsx
@@ -49,9 +49,8 @@ const ProfileTypeFinished: React.FC<ProfileTypeFinishedProps> = ({
 
   useEffect(() => {
     async function checkForExistingProfileType() {
-      const consistentProfileType: ProfileType = ProfileTypeService.checkConsistency(
-        profileType
-      )
+      const consistentProfileType: ProfileType =
+        ProfileTypeService.checkConsistency(profileType)
       const chosenPeriod: TimePeriod = {
         startDate: profileType.updateDate.setZone('utc', {
           keepLocalTime: true,
@@ -61,9 +60,8 @@ const ProfileTypeFinished: React.FC<ProfileTypeFinishedProps> = ({
         }),
       }
       const profileTypeEntityService = new ProfileTypeEntityService(client)
-      const myProfileTypes:
-        | ProfileType[]
-        | null = await profileTypeEntityService.getAllProfileTypes(chosenPeriod)
+      const myProfileTypes: ProfileType[] | null =
+        await profileTypeEntityService.getAllProfileTypes(chosenPeriod)
       if (myProfileTypes !== null) {
         const destroyPT = await profileTypeEntityService.deleteProfileTypes(
           myProfileTypes
diff --git a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx
index 05b3b77afb774d9bae601360d4f3ee7f88c974e5..9b85807d035ec1d65d5ecee9f225a95a8d867620 100644
--- a/src/components/ProfileType/ProfileTypeFormDateSelection.tsx
+++ b/src/components/ProfileType/ProfileTypeFormDateSelection.tsx
@@ -29,7 +29,9 @@ interface SelectionMonth {
   value: string
 }
 
-const ProfileTypeFormDateSelection: React.FC<ProfileTypeFormDateSelectionProps> = ({
+const ProfileTypeFormDateSelection: React.FC<
+  ProfileTypeFormDateSelectionProps
+> = ({
   step,
   viewedStep,
   profileType,
@@ -41,9 +43,7 @@ const ProfileTypeFormDateSelection: React.FC<ProfileTypeFormDateSelectionProps>
   const { t } = useI18n()
   const [selectedMonth, setSelectedMonth] = useState<any>({
     label: DateTime.now().toLocaleString({ month: 'long' }),
-    value: DateTime.now()
-      .month.toString()
-      .padStart(2, '0'), // Date.getMonth starts at 0
+    value: DateTime.now().month.toString().padStart(2, '0'), // Date.getMonth starts at 0
   })
   const [selectedYear, setSelectedYear] = useState<number>(DateTime.now().year)
   const [answer, setAnswer] = useState<ProfileTypeAnswerChoices>('')
diff --git a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx
index 93b0da660df1546a047e68b22061e1d4f9df0a44..57ea92b703bba66b17ba70319281aed606736593 100644
--- a/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx
+++ b/src/components/ProfileType/ProfileTypeFormMultiChoice.tsx
@@ -42,11 +42,11 @@ const ProfileTypeFormMultiChoice: React.FC<ProfileTypeFormMultiChoiceProps> = ({
     if (value === 'none' && !tempAnswer.includes(value)) {
       tempAnswer = [value]
     } else if (tempAnswer.includes(value)) {
-      remove(tempAnswer, function(n) {
+      remove(tempAnswer, function (n) {
         return n === 'none' || n === value
       })
     } else {
-      remove(tempAnswer, function(n) {
+      remove(tempAnswer, function (n) {
         return n === 'none'
       })
       tempAnswer.push(value)
diff --git a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx
index 9f8ffeabe2960d4611e7ff8c40fe9b706ef49301..2979bb1723adb28a352f9b91c58f07acaf327500 100644
--- a/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx
+++ b/src/components/ProfileType/ProfileTypeFormNumberSelection.tsx
@@ -20,7 +20,9 @@ interface ProfileTypeFormNumberSelectionProps {
   isProfileTypeComplete: boolean
 }
 
-const ProfileTypeFormNumberSelection: React.FC<ProfileTypeFormNumberSelectionProps> = ({
+const ProfileTypeFormNumberSelection: React.FC<
+  ProfileTypeFormNumberSelectionProps
+> = ({
   step,
   viewedStep,
   profileType,
diff --git a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx
index 0c6265ad526d1a59fb073307c6e6c64c5a21c5ae..d39461b166bd3daaa16cc94b1ad251a615a9b90b 100644
--- a/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx
+++ b/src/components/ProfileType/ProfileTypeFormSingleChoice.tsx
@@ -21,7 +21,9 @@ interface ProfileTypeFormSingleChoiceProps {
   isProfileTypeComplete: boolean
 }
 
-const ProfileTypeFormSingleChoice: React.FC<ProfileTypeFormSingleChoiceProps> = ({
+const ProfileTypeFormSingleChoice: React.FC<
+  ProfileTypeFormSingleChoiceProps
+> = ({
   step,
   viewedStep,
   profileType,
diff --git a/src/components/ProfileType/ProfileTypeView.spec.tsx b/src/components/ProfileType/ProfileTypeView.spec.tsx
index 8bc1460237445aa465f15481260e1b57c212fe8f..8c3385e1fa77235043a1e3834d89ff02ee0c2d4e 100644
--- a/src/components/ProfileType/ProfileTypeView.spec.tsx
+++ b/src/components/ProfileType/ProfileTypeView.spec.tsx
@@ -2,9 +2,6 @@ import React from 'react'
 import { Provider } from 'react-redux'
 import { mount } from 'enzyme'
 import ProfileTypeView from 'components/ProfileType/ProfileTypeView'
-import CozyBar from 'components/Header/CozyBar'
-import Header from 'components/Header/Header'
-import Content from 'components/Content/Content'
 import {
   createMockStore,
   mockInitialEcolyoState,
@@ -20,6 +17,10 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
   }
 })
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
+
 describe('ProfileTypeView component', () => {
   // eslint-disable-next-line @typescript-eslint/no-explicit-any
   let store: any
@@ -33,8 +34,9 @@ describe('ProfileTypeView component', () => {
         <ProfileTypeView />
       </Provider>
     )
-    expect(wrapper.find(CozyBar)).toBeTruthy()
-    expect(wrapper.find(Header)).toBeTruthy()
-    expect(wrapper.find(Content)).toBeTruthy()
+    expect(wrapper.find('mock-cozybar').exists()).toBeTruthy()
+    expect(wrapper.find('mock-header').exists()).toBeTruthy()
+    expect(wrapper.find('mock-content').exists()).toBeTruthy()
+    expect(wrapper.find('.profile-type-container').exists()).toBeTruthy()
   })
 })
diff --git a/src/components/ProfileType/ProfileTypeView.tsx b/src/components/ProfileType/ProfileTypeView.tsx
index 8d43c4f1f7d9fd414e75fe17013e87be23ce6bcb..49de9edb4eb2b6fcf59393070300cb5d8a53f9c8 100644
--- a/src/components/ProfileType/ProfileTypeView.tsx
+++ b/src/components/ProfileType/ProfileTypeView.tsx
@@ -16,11 +16,11 @@ import {
   IndividualOrCollective,
   OutsideFacingWalls,
   ProfileTypeFormType,
+  ProfileTypeStepForm,
   ThreeChoicesAnswer,
   WarmingType,
 } from 'enum/profileType.enum'
 import { FluidType } from 'enum/fluid.enum'
-import { ProfileTypeStepForm } from 'enum/profileType.enum'
 import ProfileTypeFormMultiChoice from 'components/ProfileType/ProfileTypeFormMultiChoice'
 import ProfileTypeFormNumber from 'components/ProfileType/ProfileTypeFormNumber'
 import ProfileTypeFormNumberSelection from 'components/ProfileType/ProfileTypeFormNumberSelection'
@@ -97,10 +97,11 @@ const ProfileTypeView: React.FC = () => {
           ...profileType,
         })
       }
-      const nextStep: ProfileTypeStepForm = profileTypeFormService.getNextFormStep(
-        step,
-        !profile.isProfileTypeCompleted
-      )
+      const nextStep: ProfileTypeStepForm =
+        profileTypeFormService.getNextFormStep(
+          step,
+          !profile.isProfileTypeCompleted
+        )
       setIsLoading(true)
       if (nextStep > viewedStep) {
         setViewedStep(nextStep)
@@ -120,9 +121,8 @@ const ProfileTypeView: React.FC = () => {
     (_profileType: ProfileType) => {
       setProfileType(_profileType)
       const profileTypeFormService = new ProfileTypeFormService(_profileType)
-      const previousStep: ProfileTypeStepForm = profileTypeFormService.getPreviousFormStep(
-        step
-      )
+      const previousStep: ProfileTypeStepForm =
+        profileTypeFormService.getPreviousFormStep(step)
       setIsLoading(true)
       setStep(previousStep)
     },
@@ -194,8 +194,6 @@ const ProfileTypeView: React.FC = () => {
       return (
         <EcogestureFormEquipment
           step={step}
-          // viewedStep={viewedStep}
-          // answerType={answerType}
           profileEcogesture={curProfileEcogesture}
           setNextStep={setNextStep}
           setPreviousStep={setPreviousStep}
@@ -208,9 +206,8 @@ const ProfileTypeView: React.FC = () => {
     if (profile.isProfileTypeCompleted) {
       setProfileType(curProfileType)
     }
-    const _answerType: ProfileTypeAnswer = ProfileTypeFormService.getAnswerForStep(
-      step
-    )
+    const _answerType: ProfileTypeAnswer =
+      ProfileTypeFormService.getAnswerForStep(step)
     setAnswerType(_answerType)
     setIsLoading(false)
   }, [step, profile, curProfileType])
diff --git a/src/components/Quiz/QuizBegin.spec.tsx b/src/components/Quiz/QuizBegin.spec.tsx
index e48e0119ac50365a3058a6d48308e806891d939c..87db1ca281596c8f7d95d1c0f6f7c10337c6c8a5 100644
--- a/src/components/Quiz/QuizBegin.spec.tsx
+++ b/src/components/Quiz/QuizBegin.spec.tsx
@@ -43,10 +43,7 @@ describe('QuizBegin component', () => {
       </Provider>
     )
     expect(wrapper.find(StyledIcon).exists()).toBeTruthy()
-    wrapper
-      .find('.button-start')
-      .find(Button)
-      .simulate('click')
+    wrapper.find('.button-start').find(Button).simulate('click')
     expect(mockUserChallengeUpdateFlag).toHaveBeenCalledWith(
       userChallengeData[0],
       UserChallengeUpdateFlag.QUIZ_START
diff --git a/src/components/Quiz/QuizBegin.tsx b/src/components/Quiz/QuizBegin.tsx
index ef2fe161ea6431c27ded24d9f2e2142cb2884650..c543f5809667a2558d3044b8954173ee74fa3e29 100644
--- a/src/components/Quiz/QuizBegin.tsx
+++ b/src/components/Quiz/QuizBegin.tsx
@@ -24,10 +24,11 @@ const QuizBegin: React.FC<QuizBeginProps> = ({
   const dispatch = useDispatch()
   const launchQuiz = async () => {
     const challengeService: ChallengeService = new ChallengeService(client)
-    const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.QUIZ_START
-    )
+    const userChallengeUpdated: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.QUIZ_START
+      )
     dispatch(updateUserChallengeList(userChallengeUpdated))
   }
 
diff --git a/src/components/Quiz/QuizCustomQuestionContent.tsx b/src/components/Quiz/QuizCustomQuestionContent.tsx
index 1f883ae3d984c4a3069c2b6d62d1649b64837e4f..bd42f8cb1c5e6d7a0811976e03db307f3815fce4 100644
--- a/src/components/Quiz/QuizCustomQuestionContent.tsx
+++ b/src/components/Quiz/QuizCustomQuestionContent.tsx
@@ -54,11 +54,12 @@ const QuizCustomQuestionContent: React.FC<QuizCustomQuestionContent> = ({
         userChallenge.quiz,
         result[0].isTrue
       )
-      const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-        userChallenge,
-        UserChallengeUpdateFlag.QUIZ_UPDATE,
-        quizUpdated
-      )
+      const userChallengeUpdated: UserChallenge =
+        await challengeService.updateUserChallenge(
+          userChallenge,
+          UserChallengeUpdateFlag.QUIZ_UPDATE,
+          quizUpdated
+        )
       dispatch(updateUserChallengeList(userChallengeUpdated))
     }
   }
@@ -69,10 +70,11 @@ const QuizCustomQuestionContent: React.FC<QuizCustomQuestionContent> = ({
 
   const finishQuiz = async () => {
     setOpenModal(false)
-    const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.QUIZ_DONE
-    )
+    const userChallengeUpdated: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.QUIZ_DONE
+      )
     await UsageEventService.addEvent(client, {
       type: UsageEventType.QUIZ_END_EVENT,
       startDate: userChallenge.quiz.startDate,
diff --git a/src/components/Quiz/QuizFinish.tsx b/src/components/Quiz/QuizFinish.tsx
index b3dd91a167f6b825c55e6de1e3833368bbf45ace..7306c22ead912f313ed0e9981c1cf66208412fd8 100644
--- a/src/components/Quiz/QuizFinish.tsx
+++ b/src/components/Quiz/QuizFinish.tsx
@@ -29,19 +29,21 @@ const QuizFinish: React.FC<QuizFinishProps> = ({
   )
 
   const retryQuiz = useCallback(async () => {
-    const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.QUIZ_RESET
-    )
+    const userChallengeUpdated: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.QUIZ_RESET
+      )
     dispatch(updateUserChallengeList(userChallengeUpdated))
   }, [dispatch, userChallenge, challengeService])
 
   const goBack = async () => {
-    const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.QUIZ_UPDATE,
-      userChallenge.quiz
-    )
+    const userChallengeUpdated: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.QUIZ_UPDATE,
+        userChallenge.quiz
+      )
     dispatch(updateUserChallengeList(userChallengeUpdated))
     history.push('/challenges')
   }
diff --git a/src/components/Quiz/QuizQuestion.tsx b/src/components/Quiz/QuizQuestion.tsx
index bc1d6bed89ed31d2f091204026a4227e485e6661..689dfb025c5d0e83a1de18b3d0f549bf30b00c7e 100644
--- a/src/components/Quiz/QuizQuestion.tsx
+++ b/src/components/Quiz/QuizQuestion.tsx
@@ -23,9 +23,8 @@ const QuizQuestion: React.FC<QuizQuestion> = ({
   const [isCustomQuest, setIsCustomQuest] = useState<boolean>(
     !questionsIsLocked
   )
-  const [customQuestionLoading, setCustomQuestionLoading] = useState<boolean>(
-    false
-  )
+  const [customQuestionLoading, setCustomQuestionLoading] =
+    useState<boolean>(false)
   const client: Client = useClient()
   const { fluidTypes } = useSelector((state: AppStore) => state.ecolyo.global)
   const history = useHistory()
@@ -38,10 +37,11 @@ const QuizQuestion: React.FC<QuizQuestion> = ({
     let subscribed = true
     async function loadCustomQuestion() {
       const quizService: QuizService = new QuizService(client)
-      const customQuestion: QuestionEntity = await quizService.getCustomQuestion(
-        userChallenge.quiz.customQuestion,
-        fluidTypes
-      )
+      const customQuestion: QuestionEntity =
+        await quizService.getCustomQuestion(
+          userChallenge.quiz.customQuestion,
+          fluidTypes
+        )
       if (subscribed) {
         setQuestion(customQuestion)
         setCustomQuestionLoading(false)
diff --git a/src/components/Quiz/QuizQuestionContent.spec.tsx b/src/components/Quiz/QuizQuestionContent.spec.tsx
index f443f7554c6f407f9796426952ca2c0e5b5afa5d..ef3ebff54b6f3b1e75c67ade7af37ad68bc7b91a 100644
--- a/src/components/Quiz/QuizQuestionContent.spec.tsx
+++ b/src/components/Quiz/QuizQuestionContent.spec.tsx
@@ -84,10 +84,7 @@ describe('QuizQuestionContent component', () => {
       </Provider>
     )
 
-    wrapper
-      .find('.btn-back')
-      .first()
-      .simulate('click')
+    wrapper.find('.btn-back').first().simulate('click')
     expect(mockHistoryPush).toHaveBeenCalledWith('/challenges')
   })
 })
diff --git a/src/components/Quiz/QuizQuestionContent.tsx b/src/components/Quiz/QuizQuestionContent.tsx
index c9e2e7ead09607fefaedf9efe1ac8b10f25eac1f..cbd096f86dac2bf5dfd7ca944a9231df3a6737f3 100644
--- a/src/components/Quiz/QuizQuestionContent.tsx
+++ b/src/components/Quiz/QuizQuestionContent.tsx
@@ -31,9 +31,8 @@ const QuizQuestionContent: React.FC<QuizQuestionContent> = ({
   const [userChoice, setUserChoice] = useState<string>('')
   const [openModal, setOpenModal] = useState<boolean>(false)
   const [answerIndex, setAnswerIndex] = useState<number>(0)
-  const [questionIndex, setQuestionIndex] = useState<number>(
-    questionIndexLocked
-  )
+  const [questionIndex, setQuestionIndex] =
+    useState<number>(questionIndexLocked)
 
   const client: Client = useClient()
   const dispatch = useDispatch()
@@ -55,11 +54,12 @@ const QuizQuestionContent: React.FC<QuizQuestionContent> = ({
       result[0].isTrue,
       questionIndex
     )
-    const userChallengeUpdated: UserChallenge = await challengeService.updateUserChallenge(
-      userChallenge,
-      UserChallengeUpdateFlag.QUIZ_UPDATE,
-      quizUpdated
-    )
+    const userChallengeUpdated: UserChallenge =
+      await challengeService.updateUserChallenge(
+        userChallenge,
+        UserChallengeUpdateFlag.QUIZ_UPDATE,
+        quizUpdated
+      )
     dispatch(updateUserChallengeList(userChallengeUpdated))
   }
 
diff --git a/src/components/Quiz/QuizView.spec.tsx b/src/components/Quiz/QuizView.spec.tsx
index 788a3fe499b68a9c211c1af83ea4a0db598ee6f2..fec5d9281ee4e4946d4f495562293e9b79611645 100644
--- a/src/components/Quiz/QuizView.spec.tsx
+++ b/src/components/Quiz/QuizView.spec.tsx
@@ -9,6 +9,9 @@ import QuizBegin from './QuizBegin'
 import QuizQuestion from './QuizQuestion'
 import QuizFinish from './QuizFinish'
 
+jest.mock('components/Header/CozyBar', () => 'mock-cozybar')
+jest.mock('components/Header/Header', () => 'mock-header')
+jest.mock('components/Content/Content', () => 'mock-content')
 const mockUseSelector = jest.spyOn(reactRedux, 'useSelector')
 
 describe('QuizView component', () => {
@@ -23,7 +26,7 @@ describe('QuizView component', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<QuizView />)
-    expect(wrapper.find(QuizBegin).exists())
+    expect(wrapper.find(QuizBegin).exists()).toBeTruthy()
   })
 
   it('should be rendered with QuizQuestion component when quiz state = ongoing', () => {
@@ -37,7 +40,7 @@ describe('QuizView component', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<QuizView />)
-    expect(wrapper.find(QuizQuestion).exists())
+    expect(wrapper.find(QuizQuestion).exists()).toBeTruthy()
   })
 
   it('should be rendered with QuizFinish component when quiz state = done', () => {
@@ -51,7 +54,7 @@ describe('QuizView component', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<QuizView />)
-    expect(wrapper.find(QuizFinish).exists())
+    expect(wrapper.find(QuizFinish).exists()).toBeTruthy()
   })
 
   it('should be rendered with QuizBegin component when quiz state = null', () => {
@@ -65,6 +68,6 @@ describe('QuizView component', () => {
     }
     mockUseSelector.mockReturnValue(updatedChallengeState)
     const wrapper = shallow(<QuizView />)
-    expect(wrapper.find(QuizBegin).exists())
+    expect(wrapper.find(QuizBegin).exists()).toBeTruthy()
   })
 })
diff --git a/src/components/Routes/Routes.tsx b/src/components/Routes/Routes.tsx
index 2ef690160c189e3ebdb4e48c649719fa749dfd04..0df72fa29592f663f831c2fd2a2e6a36f54200cf 100644
--- a/src/components/Routes/Routes.tsx
+++ b/src/components/Routes/Routes.tsx
@@ -14,21 +14,21 @@ import EcogestureSelection from 'components/EcogestureSelection/EcogestureSelect
 
 const ConsumptionView = lazy(() => import('components/Home/ConsumptionView'))
 
-const EcogestureView = lazy(() =>
-  import('components/Ecogesture/EcogestureView')
+const EcogestureView = lazy(
+  () => import('components/Ecogesture/EcogestureView')
 )
-const SingleEcogesture = lazy(() =>
-  import('components/Ecogesture/SingleEcogesture')
+const SingleEcogesture = lazy(
+  () => import('components/Ecogesture/SingleEcogesture')
 )
 const OptionsView = lazy(() => import('components/Options/OptionsView'))
 const FAQView = lazy(() => import('components/FAQ/FAQView'))
-const LegalNoticeView = lazy(() =>
-  import('components/LegalNotice/LegalNoticeView')
+const LegalNoticeView = lazy(
+  () => import('components/LegalNotice/LegalNoticeView')
 )
 const GCUView = lazy(() => import('components/GCU/GCUView'))
 const AnalysisView = lazy(() => import('components/Analysis/AnalysisView'))
-const ProfileTypeView = lazy(() =>
-  import('components/ProfileType/ProfileTypeView')
+const ProfileTypeView = lazy(
+  () => import('components/ProfileType/ProfileTypeView')
 )
 
 interface RouteProps {
diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index 8a7c4db8835ca3277fbbc3015a42bf906bed7977..9beb6cac6acdc54f0d3d45ac5383d72827928bc0 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -125,7 +125,8 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         )
 
         //init Terms
-        const termsStatus: TermsStatus = await initializationService.initConsent()
+        const termsStatus: TermsStatus =
+          await initializationService.initConsent()
         if (subscribed) dispatch(updateTermValidation(termsStatus))
 
         // Init fluidPrices
@@ -134,7 +135,8 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         // Init profile and update ecogestures, challenges, analysis
         const profile = await initializationService.initProfile()
         const profileType = await initializationService.initProfileType()
-        const profileEcogesture = await initializationService.initProfileEcogesture()
+        const profileEcogesture =
+          await initializationService.initProfileEcogesture()
         if (subscribed && profile) {
           setValidExploration(UserExplorationID.EXPLORATION007)
           const [
@@ -184,9 +186,8 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
           }
         }
         // Init Challenge
-        const userChallengeList = await initializationService.initUserChallenges(
-          fluidStatus
-        )
+        const userChallengeList =
+          await initializationService.initUserChallenges(fluidStatus)
         if (subscribed) {
           dispatch(setUserChallengeList(userChallengeList))
           const filteredCurrentOngoingChallenge = userChallengeList.filter(
@@ -207,9 +208,10 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
               UserActionState.ONGOING
           ) {
             const actionService = new ActionService(client)
-            const updatedUserChallenge: UserChallenge | null = await actionService.isActionDone(
-              filteredCurrentOngoingChallenge[0]
-            )
+            const updatedUserChallenge: UserChallenge | null =
+              await actionService.isActionDone(
+                filteredCurrentOngoingChallenge[0]
+              )
             if (updatedUserChallenge) {
               dispatch(updateUserChallengeList(updatedUserChallenge))
             }
@@ -229,12 +231,10 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
             filteredCurrentDuelChallenge[0] &&
             filteredCurrentDuelChallenge[0].duel.state === UserDuelState.ONGOING
           ) {
-            const {
-              updatedUserChallenge,
-              dataloads,
-            } = await initializationService.initDuelProgress(
-              filteredCurrentDuelChallenge[0]
-            )
+            const { updatedUserChallenge, dataloads } =
+              await initializationService.initDuelProgress(
+                filteredCurrentDuelChallenge[0]
+              )
             if (subscribed) {
               dispatch(setChallengeConsumption(updatedUserChallenge, dataloads))
               // Check is duel is done and display notification
@@ -251,18 +251,18 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
           await UsageEventService.addEvent(client, {
             type: UsageEventType.CONNECTION_EVENT,
             result: profile.isFirstConnection ? 'firstConnection' : undefined,
-            context: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
-              navigator.userAgent
-            )
-              ? 'mobile'
-              : 'desktop',
+            context:
+              /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
+                navigator.userAgent
+              )
+                ? 'mobile'
+                : 'desktop',
           })
         }
 
         // Check partnersInfo from backoffice
-        const partnersInfo:
-          | PartnersInfo
-          | undefined = await partnersInfoService.getPartnersInfo()
+        const partnersInfo: PartnersInfo | undefined =
+          await partnersInfoService.getPartnersInfo()
 
         // Get last partnersIssueDate
         const today = DateTime.local()
@@ -275,9 +275,8 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         // If notification is activated and konnector is connected, set FluidStatus to PARTNER_ISSUE
         if (partnersInfo && partnersInfo.notification_activated) {
           const fluidService = new FluidService(client)
-          const _updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus(
-            partnersInfo
-          )
+          const _updatedFluidStatus: FluidStatus[] =
+            await fluidService.getFluidStatus(partnersInfo)
           let isConcernedByPartnerIssue = false
           for (const fluid of _updatedFluidStatus) {
             if (fluid.status === FluidState.PARTNER_ISSUE)
diff --git a/src/components/Splash/SplashScreenError.spec.tsx b/src/components/Splash/SplashScreenError.spec.tsx
index 0ea4a279188aa94cf44f7550406d762d17ad9b5a..2d9af53b853e492e69ccd2bfdd3546e7e8e54965 100644
--- a/src/components/Splash/SplashScreenError.spec.tsx
+++ b/src/components/Splash/SplashScreenError.spec.tsx
@@ -37,10 +37,7 @@ describe('SplashScreenError component', () => {
     const component = mount(
       <SplashScreenError error={InitStepsErrors.CONSENT_ERROR} />
     )
-    component
-      .find(Button)
-      .first()
-      .simulate('click')
+    component.find(Button).first().simulate('click')
     expect(window.location.reload).toHaveBeenCalled()
   })
 })
diff --git a/src/components/Splash/__snapshots__/SplashScreenError.spec.tsx.snap b/src/components/Splash/__snapshots__/SplashScreenError.spec.tsx.snap
index f3bb2e47e2f09690cf2f11013288c95f86eb59be..82c98c1a27a01d75dec75d6d20d122cfdb5d0329 100644
--- a/src/components/Splash/__snapshots__/SplashScreenError.spec.tsx.snap
+++ b/src/components/Splash/__snapshots__/SplashScreenError.spec.tsx.snap
@@ -4948,36 +4948,34 @@ exports[`SplashScreenError component should be rendered correctly 1`] = `
               >
                 splashscreen.button_reload
               </span>
-              <NoSsr>
-                <WithStyles(memo)
+              <WithStyles(memo)
+                center={false}
+              >
+                <ForwardRef(TouchRipple)
                   center={false}
-                >
-                  <ForwardRef(TouchRipple)
-                    center={false}
-                    classes={
-                      Object {
-                        "child": "MuiTouchRipple-child",
-                        "childLeaving": "MuiTouchRipple-childLeaving",
-                        "childPulsate": "MuiTouchRipple-childPulsate",
-                        "ripple": "MuiTouchRipple-ripple",
-                        "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                        "rippleVisible": "MuiTouchRipple-rippleVisible",
-                        "root": "MuiTouchRipple-root",
-                      }
+                  classes={
+                    Object {
+                      "child": "MuiTouchRipple-child",
+                      "childLeaving": "MuiTouchRipple-childLeaving",
+                      "childPulsate": "MuiTouchRipple-childPulsate",
+                      "ripple": "MuiTouchRipple-ripple",
+                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                      "rippleVisible": "MuiTouchRipple-rippleVisible",
+                      "root": "MuiTouchRipple-root",
                     }
+                  }
+                >
+                  <span
+                    className="MuiTouchRipple-root"
                   >
-                    <span
-                      className="MuiTouchRipple-root"
-                    >
-                      <TransitionGroup
-                        childFactory={[Function]}
-                        component={null}
-                        exit={true}
-                      />
-                    </span>
-                  </ForwardRef(TouchRipple)>
-                </WithStyles(memo)>
-              </NoSsr>
+                    <TransitionGroup
+                      childFactory={[Function]}
+                      component={null}
+                      exit={true}
+                    />
+                  </span>
+                </ForwardRef(TouchRipple)>
+              </WithStyles(memo)>
             </button>
           </ForwardRef(ButtonBase)>
         </WithStyles(ForwardRef(ButtonBase))>
diff --git a/src/components/Terms/TermsView.spec.tsx b/src/components/Terms/TermsView.spec.tsx
index 8aa6a66517f64a4fbb6e35a50d96c6c36eba0795..d3bcf1fa2e16188ff33000a2b614b67e87facce4 100644
--- a/src/components/Terms/TermsView.spec.tsx
+++ b/src/components/Terms/TermsView.spec.tsx
@@ -60,32 +60,14 @@ describe('TermsView component', () => {
       .find('input')
       .at(0)
       .simulate('change', { target: { checked: true } })
-    expect(
-      wrapper
-        .find('input')
-        .at(0)
-        .props().checked
-    ).toEqual(true)
+    expect(wrapper.find('input').at(0).props().checked).toEqual(true)
     wrapper
       .find('input')
       .at(1)
       .simulate('change', { target: { checked: true } })
-    expect(
-      wrapper
-        .find('input')
-        .at(1)
-        .props().checked
-    ).toEqual(true)
-    expect(
-      wrapper
-        .find(Button)
-        .first()
-        .hasClass('disabled')
-    ).toBeFalsy()
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    expect(wrapper.find('input').at(1).props().checked).toEqual(true)
+    expect(wrapper.find(Button).first().hasClass('disabled')).toBeFalsy()
+    wrapper.find(Button).first().simulate('click')
     expect(mockUseDispatch).toHaveBeenCalledTimes(3)
   })
   it('should be rendered correctly', () => {
@@ -115,17 +97,9 @@ describe('TermsView component', () => {
         <TermsView />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
 
-    expect(
-      wrapper
-        .find(Button)
-        .first()
-        .hasClass('disabled')
-    ).toBeTruthy()
+    expect(wrapper.find(Button).first().hasClass('disabled')).toBeTruthy()
     expect(mockUpdateProfile).toHaveBeenCalledTimes(0)
   })
 })
diff --git a/src/components/Terms/TermsView.tsx b/src/components/Terms/TermsView.tsx
index 6de439369b1aa3ebcbc893c93153b324350c57fa..ad193b4bd3d4514bb6ff610426da5d60c48012a9 100644
--- a/src/components/Terms/TermsView.tsx
+++ b/src/components/Terms/TermsView.tsx
@@ -21,13 +21,11 @@ const TermsView: React.FC = () => {
   const dispatch = useDispatch()
   const history = useHistory()
   const [GCUValidation, setGCUValidation] = useState<boolean>(false)
-  const [dataConsentValidation, setDataConsentValidation] = useState<boolean>(
-    false
-  )
+  const [dataConsentValidation, setDataConsentValidation] =
+    useState<boolean>(false)
   const [openCGUModal, setOpenCGUModal] = useState<boolean>(false)
-  const [openLegalNoticeModal, setOpenLegalNoticeModal] = useState<boolean>(
-    false
-  )
+  const [openLegalNoticeModal, setOpenLegalNoticeModal] =
+    useState<boolean>(false)
   const { termsStatus } = useSelector((state: AppStore) => state.ecolyo.global)
 
   const toggleCGUModal = () => {
diff --git a/src/components/Terms/__snapshots__/CGUModal.spec.tsx.snap b/src/components/Terms/__snapshots__/CGUModal.spec.tsx.snap
index 2658db800a221db0b89e909891c80ee2c2c69122..984a939bc105ea35a603b7ffe688585ceb598387 100644
--- a/src/components/Terms/__snapshots__/CGUModal.spec.tsx.snap
+++ b/src/components/Terms/__snapshots__/CGUModal.spec.tsx.snap
@@ -96,12 +96,17 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -361,7 +366,6 @@ exports[`CGUModal component should be rendered correctly 1`] = `
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -816,7 +820,7 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -866,8 +870,8 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -1023,36 +1027,34 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1437,36 +1439,34 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                                       >
                                         legal.accessibility.button_close
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={false}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={false}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={false}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1482,7 +1482,7 @@ exports[`CGUModal component should be rendered correctly 1`] = `
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/Terms/__snapshots__/LegalNoticeModal.spec.tsx.snap b/src/components/Terms/__snapshots__/LegalNoticeModal.spec.tsx.snap
index ad5889b4e59e39795b2a2cbf15bfd1be1da30a81..90d1f60bddd967df923ea3fce4da2c342f9b74fe 100644
--- a/src/components/Terms/__snapshots__/LegalNoticeModal.spec.tsx.snap
+++ b/src/components/Terms/__snapshots__/LegalNoticeModal.spec.tsx.snap
@@ -96,12 +96,17 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                 "overrides": Object {},
                 "palette": Object {
                   "action": Object {
+                    "activatedOpacity": 0.12,
                     "active": "rgba(0, 0, 0, 0.54)",
                     "disabled": "rgba(0, 0, 0, 0.26)",
                     "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                    "hover": "rgba(0, 0, 0, 0.08)",
-                    "hoverOpacity": 0.08,
-                    "selected": "rgba(0, 0, 0, 0.14)",
+                    "disabledOpacity": 0.38,
+                    "focus": "rgba(0, 0, 0, 0.12)",
+                    "focusOpacity": 0.12,
+                    "hover": "rgba(0, 0, 0, 0.04)",
+                    "hoverOpacity": 0.04,
+                    "selected": "rgba(0, 0, 0, 0.08)",
+                    "selectedOpacity": 0.08,
                   },
                   "augmentColor": [Function],
                   "background": Object {
@@ -361,7 +366,6 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
         }
         className="MuiDialog-root modal-root"
         closeAfterTransition={true}
-        disableBackdropClick={false}
         disableEscapeKeyDown={false}
         onClose={[MockFunction]}
         open={true}
@@ -557,6 +561,9 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                                     <li>
                                       legal.part2-2-4
                                     </li>
+                                    <li>
+                                      legal.part2-2-5
+                                    </li>
                                   </ul>
                                 </li>
                                 <li>
@@ -793,7 +800,7 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                   </ForwardRef(Fade)>
                 </ForwardRef(Backdrop)>
               </WithStyles(ForwardRef(Backdrop))>
-              <TrapFocus
+              <Unstable_TrapFocus
                 disableAutoFocus={false}
                 disableEnforceFocus={false}
                 disableRestoreFocus={false}
@@ -843,8 +850,8 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                   >
                     <div
                       className="MuiDialog-container MuiDialog-scrollPaper"
-                      onClick={[Function]}
                       onMouseDown={[Function]}
+                      onMouseUp={[Function]}
                       role="none presentation"
                       style={
                         Object {
@@ -1000,36 +1007,34 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                                           </Component>
                                         </Icon>
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={true}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={true}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={true}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1166,6 +1171,9 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                                             <li>
                                               legal.part2-2-4
                                             </li>
+                                            <li>
+                                              legal.part2-2-5
+                                            </li>
                                           </ul>
                                         </li>
                                         <li>
@@ -1391,36 +1399,34 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                                       >
                                         legal.accessibility.button_close
                                       </span>
-                                      <NoSsr>
-                                        <WithStyles(memo)
+                                      <WithStyles(memo)
+                                        center={false}
+                                      >
+                                        <ForwardRef(TouchRipple)
                                           center={false}
-                                        >
-                                          <ForwardRef(TouchRipple)
-                                            center={false}
-                                            classes={
-                                              Object {
-                                                "child": "MuiTouchRipple-child",
-                                                "childLeaving": "MuiTouchRipple-childLeaving",
-                                                "childPulsate": "MuiTouchRipple-childPulsate",
-                                                "ripple": "MuiTouchRipple-ripple",
-                                                "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                                                "rippleVisible": "MuiTouchRipple-rippleVisible",
-                                                "root": "MuiTouchRipple-root",
-                                              }
+                                          classes={
+                                            Object {
+                                              "child": "MuiTouchRipple-child",
+                                              "childLeaving": "MuiTouchRipple-childLeaving",
+                                              "childPulsate": "MuiTouchRipple-childPulsate",
+                                              "ripple": "MuiTouchRipple-ripple",
+                                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                              "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                              "root": "MuiTouchRipple-root",
                                             }
+                                          }
+                                        >
+                                          <span
+                                            className="MuiTouchRipple-root"
                                           >
-                                            <span
-                                              className="MuiTouchRipple-root"
-                                            >
-                                              <TransitionGroup
-                                                childFactory={[Function]}
-                                                component={null}
-                                                exit={true}
-                                              />
-                                            </span>
-                                          </ForwardRef(TouchRipple)>
-                                        </WithStyles(memo)>
-                                      </NoSsr>
+                                            <TransitionGroup
+                                              childFactory={[Function]}
+                                              component={null}
+                                              exit={true}
+                                            />
+                                          </span>
+                                        </ForwardRef(TouchRipple)>
+                                      </WithStyles(memo)>
                                     </button>
                                   </ForwardRef(ButtonBase)>
                                 </WithStyles(ForwardRef(ButtonBase))>
@@ -1436,7 +1442,7 @@ exports[`LegalNoticeModal component should be rendered correctly 1`] = `
                   data-test="sentinelEnd"
                   tabIndex={0}
                 />
-              </TrapFocus>
+              </Unstable_TrapFocus>
             </div>
           </Portal>
         </ForwardRef(Portal)>
diff --git a/src/components/Terms/__snapshots__/TermsView.spec.tsx.snap b/src/components/Terms/__snapshots__/TermsView.spec.tsx.snap
index 4a2393ce3edae8f03dd5039fd0505b2f73094ee8..ac40276bd529b25d499200a7e7e78a4f356aef28 100644
--- a/src/components/Terms/__snapshots__/TermsView.spec.tsx.snap
+++ b/src/components/Terms/__snapshots__/TermsView.spec.tsx.snap
@@ -341,12 +341,17 @@ exports[`TermsView component should be rendered correctly 1`] = `
                       "overrides": Object {},
                       "palette": Object {
                         "action": Object {
+                          "activatedOpacity": 0.12,
                           "active": "rgba(0, 0, 0, 0.54)",
                           "disabled": "rgba(0, 0, 0, 0.26)",
                           "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                          "hover": "rgba(0, 0, 0, 0.08)",
-                          "hoverOpacity": 0.08,
-                          "selected": "rgba(0, 0, 0, 0.14)",
+                          "disabledOpacity": 0.38,
+                          "focus": "rgba(0, 0, 0, 0.12)",
+                          "focusOpacity": 0.12,
+                          "hover": "rgba(0, 0, 0, 0.04)",
+                          "hoverOpacity": 0.04,
+                          "selected": "rgba(0, 0, 0, 0.08)",
+                          "selectedOpacity": 0.08,
                         },
                         "augmentColor": [Function],
                         "background": Object {
@@ -606,7 +611,6 @@ exports[`TermsView component should be rendered correctly 1`] = `
               }
               className="MuiDialog-root modal-root"
               closeAfterTransition={true}
-              disableBackdropClick={false}
               disableEscapeKeyDown={false}
               onClose={[Function]}
               open={false}
@@ -709,12 +713,17 @@ exports[`TermsView component should be rendered correctly 1`] = `
                       "overrides": Object {},
                       "palette": Object {
                         "action": Object {
+                          "activatedOpacity": 0.12,
                           "active": "rgba(0, 0, 0, 0.54)",
                           "disabled": "rgba(0, 0, 0, 0.26)",
                           "disabledBackground": "rgba(0, 0, 0, 0.12)",
-                          "hover": "rgba(0, 0, 0, 0.08)",
-                          "hoverOpacity": 0.08,
-                          "selected": "rgba(0, 0, 0, 0.14)",
+                          "disabledOpacity": 0.38,
+                          "focus": "rgba(0, 0, 0, 0.12)",
+                          "focusOpacity": 0.12,
+                          "hover": "rgba(0, 0, 0, 0.04)",
+                          "hoverOpacity": 0.04,
+                          "selected": "rgba(0, 0, 0, 0.08)",
+                          "selectedOpacity": 0.08,
                         },
                         "augmentColor": [Function],
                         "background": Object {
@@ -974,7 +983,6 @@ exports[`TermsView component should be rendered correctly 1`] = `
               }
               className="MuiDialog-root modal-root"
               closeAfterTransition={true}
-              disableBackdropClick={false}
               disableEscapeKeyDown={false}
               onClose={[Function]}
               open={false}
diff --git a/src/components/TimeStepSelector/TimeStepSelector.spec.tsx b/src/components/TimeStepSelector/TimeStepSelector.spec.tsx
index bba282e95f88b546d9b6eee306acc50f93ccd73b..472e416abd8ab2ee9a3d55bee9436ee07b7534cc 100644
--- a/src/components/TimeStepSelector/TimeStepSelector.spec.tsx
+++ b/src/components/TimeStepSelector/TimeStepSelector.spec.tsx
@@ -55,18 +55,8 @@ describe('TimeStepSelector component', () => {
         <TimeStepSelector fluidType={FluidType.WATER} />
       </Provider>
     )
-    expect(
-      wrapper
-        .find('.circle')
-        .at(3)
-        .exists()
-    ).toBeTruthy()
-    expect(
-      wrapper
-        .find('.circle')
-        .at(4)
-        .exists()
-    ).toBeFalsy()
+    expect(wrapper.find('.circle').at(3).exists()).toBeTruthy()
+    expect(wrapper.find('.circle').at(4).exists()).toBeFalsy()
     expect(wrapper).toMatchSnapshot()
   })
 
@@ -82,18 +72,8 @@ describe('TimeStepSelector component', () => {
         <TimeStepSelector fluidType={FluidType.ELECTRICITY} />
       </Provider>
     )
-    expect(
-      wrapper
-        .find('.circle')
-        .at(4)
-        .exists()
-    ).toBeTruthy()
-    expect(
-      wrapper
-        .find('.circle')
-        .at(5)
-        .exists()
-    ).toBeFalsy()
+    expect(wrapper.find('.circle').at(4).exists()).toBeTruthy()
+    expect(wrapper.find('.circle').at(5).exists()).toBeFalsy()
   })
 
   it('should define next TimeStep and dispatch it', () => {
@@ -108,10 +88,7 @@ describe('TimeStepSelector component', () => {
         <TimeStepSelector fluidType={FluidType.WATER} />
       </Provider>
     )
-    wrapper
-      .find('#day')
-      .first()
-      .simulate('click')
+    wrapper.find('#day').first().simulate('click')
     expect(setCurrentTimeStepSpy).toBeCalledTimes(1)
     expect(setCurrentTimeStepSpy).toHaveBeenCalledWith(TimeStep.DAY)
     expect(setCurrentIndexSpy).toBeCalledTimes(1)
@@ -128,10 +105,7 @@ describe('TimeStepSelector component', () => {
         <TimeStepSelector fluidType={FluidType.WATER} />
       </Provider>
     )
-    wrapper
-      .find(Button)
-      .first()
-      .simulate('click')
+    wrapper.find(Button).first().simulate('click')
     expect(setCurrentTimeStepSpy).toBeCalledTimes(1)
     expect(setCurrentTimeStepSpy).toHaveBeenCalledWith(TimeStep.WEEK)
     expect(setCurrentIndexSpy).toBeCalledTimes(2)
diff --git a/src/components/TimeStepSelector/TimeStepSelector.tsx b/src/components/TimeStepSelector/TimeStepSelector.tsx
index 27db0e30d8a475ce1cd80d00287f0e39b86c1593..75e9b9ef5d97f8cde7d3b42e51f33c0d0297e5e7 100644
--- a/src/components/TimeStepSelector/TimeStepSelector.tsx
+++ b/src/components/TimeStepSelector/TimeStepSelector.tsx
@@ -91,8 +91,9 @@ const TimeStepSelector: React.FC<TimeStepSelectorProps> = ({
       </Button>
       <div className={'timestep-container'}>
         <ul
-          className={`timestep-bar ${fluidType === FluidType.ELECTRICITY &&
-            'elec-bar'}`}
+          className={`timestep-bar ${
+            fluidType === FluidType.ELECTRICITY && 'elec-bar'
+          }`}
         >
           {timeStepArray.map((step, key) => {
             return (
diff --git a/src/components/TotalConsumption/TotalConsumption.spec.tsx b/src/components/TotalConsumption/TotalConsumption.spec.tsx
index 2d0f7e44959c60cc57f70512bfcaf54a777644c8..b8f32bd0a043b1cd9575b62e121e5eee5da51fbb 100644
--- a/src/components/TotalConsumption/TotalConsumption.spec.tsx
+++ b/src/components/TotalConsumption/TotalConsumption.spec.tsx
@@ -74,12 +74,7 @@ describe('TotalConsumption component', () => {
       component.update()
     })
 
-    expect(
-      component
-        .find('.euro-value')
-        .first()
-        .text()
-    ).toEqual('22,77')
+    expect(component.find('.euro-value').first().text()).toEqual('22,77')
   })
   it('should format multifluid value', async () => {
     const component = mount(
@@ -95,12 +90,7 @@ describe('TotalConsumption component', () => {
       component.update()
     })
 
-    expect(
-      component
-        .find('.euro-value')
-        .first()
-        .text()
-    ).toEqual('130,84')
+    expect(component.find('.euro-value').first().text()).toEqual('130,84')
   })
   it('should display ----- when half an hour electricity data is not activated', async () => {
     const emptyData: Dataload[] = []
@@ -117,11 +107,6 @@ describe('TotalConsumption component', () => {
       component.update()
     })
 
-    expect(
-      component
-        .find('.euro-value')
-        .first()
-        .text()
-    ).toEqual('-----')
+    expect(component.find('.euro-value').first().text()).toEqual('-----')
   })
 })
diff --git a/src/constants/config.json b/src/constants/config.json
index 74719b52c7278646b9367eda91cc48a933aad2f4..490b05a52c0c8270376e9b449a0806e47d8b17a4 100644
--- a/src/constants/config.json
+++ b/src/constants/config.json
@@ -44,5 +44,5 @@
       }
     }
   ],
-  "termsVersion": "1.0.0"
+  "termsVersion": "2.0.0"
 }
diff --git a/src/locales/fr.json b/src/locales/fr.json
index beadc6d1271d583b241af1f5b7a438399aeb3118..3388e838944e6fcda861a5bbfdae63b34709061c 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -6,7 +6,9 @@
     "title_exploration": "Exploration",
     "title_action": "Action",
     "title_duel": "Duel final",
+    "title_ecogesture": "Écogeste",
     "title_ecogestures": "Écogestes",
+    "title_ecogestures_choice": "Choix des écogestes",
     "title_options": "Options",
     "title_analysis": "Analyse",
     "title_profiletype": "Ajuster mon profil",
@@ -224,15 +226,18 @@
       }
     },
     "card_done": {
-      "day": " jour",
-      "days": " jours",
       "saving": "Économie de",
       "depense": "Dépense de",
       "win": "Gagné",
       "lost": "Perdu",
-      "stars": " étoiles",
-      "get_in": "obtenues en ",
-      "final_defi": "sur le duel final"
+      "final_defi": "sur le duel final",
+      "final_defi_view": "Revoir le duel final"
+    },
+    "card_last": {
+      "title": " Tous les défis ont été terminés",
+      "message1": "Nous travaillons actuellement à vous proposer de nouveaux défis.",
+      "message2": "Vous pouvez donner votre avis sur ce que vous aimeriez",
+      "button": "Suggérer une idée de défi"
     },
     "card_unlocked": {
       "button_launch": "Lancer le challenge"
@@ -319,6 +324,8 @@
     "button_start": "Allons-y !",
     "goal1": "Faites moins que votre moyenne actuelle sur %{durationInDays} jours",
     "goal2": "pour gagner le badge %{title}",
+    "goal_done": "Duel remporté",
+    "goal_failed": "Duel perdu",
     "caption_average": "Votre moyenne à titre indicatif",
     "caption_consumption": "Votre consommation",
     "caption_incoming": "Données à venir",
@@ -346,6 +353,12 @@
       "button_validate": "Valider"
     }
   },
+  "last_duel_modal": {
+      "title": "Félicitations !",
+      "subtitle": "Vous avez terminé tous les défis !",
+      "message1": "Nous travaillons actuellement à vous proposer de nouveaux défis.",
+      "message2": "Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle jaune."
+  },
   "duel_empty_value_modal": {
     "title": "Oups !",
     "message": "Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.",
@@ -425,8 +438,8 @@
     "title_ecogesture": "Écogeste",
     "title_action": "Action",
     "efficiency": "Efficacité",
-    "show_less": "Je veux moins d’infos",
-    "show_more": "Je veux plus d’infos",
+    "show_less": "Voir moins d’infos",
+    "show_more": "Voir plus d’infos",
     "select_action": "Je choisis cette action",
     "accessibility": {
       "window_title_ecogesture": "Fenêtre ecogeste",
@@ -589,10 +602,10 @@
     "item3": "De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.",
     "part4": "Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole  de Lyon sur leur contenu.",
     "part5": "Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu. ",
-    "part6": "Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\"https://ecolyo.com/cloud_statistiques.html\">ici</a>).",
-    "part7": "Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition. ",
+    "part6": "Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service.",
+    "part7": "Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.",
     "part8": "Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :",
-    "part9": "Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ",
+    "part9": "Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ",
     "part10": "ou en ligne, au moyen du formulaire disponible à l'adresse suivante : ",
     "link1": "<a href=\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>",
     "validDataConsent": "Je consens au traitement de mes données tel que décrit ci-dessus.",
@@ -610,7 +623,7 @@
   "gcu": {
     "title": "Conditions générales d’utilisation du service",
     "subtitle": "Envie de prendre le temps de relire ces CGU ces Conditions Générales d’Utilisation plus tard ? Vous pourrez les retrouver dans la page Options du service.",
-    "version": "V2.0 du 20.08.2021",
+    "version": "3.0 du 27.06.2022",
     "content": {
       "title1": "Ecolyo, késako ?",
       "part1_1": "Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des éco-gestes vous sont aussi proposés afin de vous permettre de réduire vos consommations.",
@@ -648,7 +661,7 @@
       "part6_3_list1": "En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. ",
       "part6_3_list2": "En cas de problème majeur avec la gestion de votre compte.",
       "part6_3_list3": "De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.",
-      "part6_4": "Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service",
+      "part6_4": "Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.",
       "title8": "Encore des questions ?",
       "part8_1": "N’hésitez pas à consulter la FAQ présente dans le service (page Options) ou à nous contacter via le formulaire de contact (la petite bulle jaune) présente sur l’ensemble des pages.",
       "part8_2": "Dernière option, contactez-nous directement à <a href=\"mailto:ecolyo@grandlyon.com\">ecolyo(at)grandlyon.com</a>.",
@@ -676,6 +689,9 @@
     "title": "Conditions générales d’utilisation",
     "read_gcu": "Lire les CGU"
   },
+  "matomo": {
+    "matomo_title": "Suivi statistiques d'usage Matomo"
+  },
   "header": {
     "accessibility": {
       "button_back": "Retour à la page précédente",
@@ -772,21 +788,21 @@
   "legal": {
     "read_legal": "Lire les mentions légales",
     "title_legal": "Mentions légales",
-    "version": "V2.0 du 20.08.2021",
+    "version": "V3.0 du 27.06.2022",
     "site": "Site du service Ecolyo : <a href=\"https://ecolyo.com/\"> https://ecolyo.com/</a>",
     "adress": "Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03",
     "phone": "Tél : (33) 4 78 63 40 40",
     "mail": "<a href=\"mailto:ecolyo@grandlyon.com\"> ecolyo(at)grandlyon.com</a>",
-    "p1b": "Directeur de publication : ",
-    "p1": "Blandine MELAY",
+    "p1b": "Directrice de publication : ",
+    "p1": "Blandine MELAY, Responsable du Service Energie Climat",
     "p2b": "Animation éditoriale, gestion et mise à jour : ",
-    "p2": "Marion BERTHOLON, Maria Inés LEAL",
+    "p2": "Marion BERTHOLON,  Chargée de services numériques pour la transition énergétique",
     "p3b": "Photographies : ",
     "p3": "sauf mention contraire, les photos sont la propriété de la Métropole de Lyon",
     "p4b": "Conception et Charte graphique : ",
     "p4": "Florent Dufier -  <a href=\"https://florentdufier.myportfolio.com/\">https://florentdufier.myportfolio.com/</a>",
     "p5b": "Réalisation technique : ",
-    "p5": "Métropole de Lyon, Sopra Steria, Cozy Cloud, Clever Age",
+    "p5": "Métropole de Lyon, Sopra Steria",
     "p6b": "Maintenance technique : ",
     "p6": "Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques",
     "title1": "Crédits",
@@ -798,7 +814,8 @@
     "part2-2-1": "Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;",
     "part2-2-2": "Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.",
     "part2-2-3": "Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.",
-    "part2-2-4": "Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact",
+    "part2-2-4": "Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\"https://ecolyo.com/cloud_statistiques.html\">ici</a>).",
+    "part2-2-5": "La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.",
     "part2-3": "L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.",
     "part2-4": "L’utilisateur est donc le seul à accéder :",
     "part2-4-1": "À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.",
@@ -807,7 +824,7 @@
     "part2-5": "Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\">aux mentions légales et CGU du cloud personnel métropolitain.</a> ",
     "part2-6": "Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données auprès d’Enedis et de GRDF.",
     "part2-7": "Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :",
-    "part2-8": "Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>",
+    "part2-8": "Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>",
     "part2-9": "L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service  « Ecolyo ».",
     "title3": "Dispositions légales",
     "part3-1": "Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.",
diff --git a/src/migrations/migration.data.ts b/src/migrations/migration.data.ts
index 2065ff8660ac480d237dc46afa76d4a5bd650eeb..d9ed8ddc31cc1717d55ed4f4fbe542693ece0831 100644
--- a/src/migrations/migration.data.ts
+++ b/src/migrations/migration.data.ts
@@ -36,7 +36,7 @@ export const migrations: Migration[] = [
     releaseNotes: null,
     docTypes: PROFILETYPE_DOCTYPE,
     run: async (_client: Client, docs: any[]): Promise<ProfileType[]> => {
-      docs.sort(function(a, b) {
+      docs.sort(function (a, b) {
         const c = DateTime.fromISO(a.cozyMetadata.createdAt, {
           zone: 'utc',
         })
diff --git a/src/notifications/monthlyReport.hbs b/src/notifications/monthlyReport.hbs
index fa907c871fb17b13aa4cc2d8bb413339f0e2ae8c..b08c1b51c63e5f15f214d803aed00a5a3af8da55 100644
--- a/src/notifications/monthlyReport.hbs
+++ b/src/notifications/monthlyReport.hbs
@@ -44,32 +44,40 @@
         </mj-social>
       </mj-column>
     </mj-section>
-    <mj-section background-color="radial-gradient(96.2% 96.2% at 50% 3.8%, #343641 0%, #1B1C22 100%)">
-      <mj-column>
-          <mj-text css-class="title" color="white" font-weight="900" font-size="24px" align="center" >
-            L'info du mois
-          </mj-text>
-          <mj-image src="{{infoImage}}" width="82px" alt="nouveauté"></mj-image>
-          <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link">{{{infoText}}}</mj-text>
-        {{#if isServiceNews}}
-          <mj-divider css-class="m-divider"></mj-divider>
-          <mj-text css-class="title custom-link" color="white" font-weight="900" font-size="24px" align="center" >
-            {{newsTitle}}
-          </mj-text>
-          <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link" >{{{newsContent}}}</mj-text>
-        {{/if}}
-        {{#if isPoll}}
-          <mj-divider css-class="m-divider"></mj-divider>
-          <mj-text css-class="title " color="white" font-weight="900" font-size="24px" align="center" >
-            Votre avis nous intéresse
-          </mj-text>
-          <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link" >{{{pollText}}}</mj-text>
-          <mj-button color="black" background-color="#F1C017" css-class="button" font-size="20px" font-weight="700" >
-            <a href="{{pollUrl}}" style="text-decoration: none; color: black">C'est parti !</a>
-          </mj-button>
-        {{/if}}
-      </mj-column>
-    </mj-section>
+    {{#if isContent}}
+      <mj-section background-color="radial-gradient(96.2% 96.2% at 50% 3.8%, #343641 0%, #1B1C22 100%)">
+        <mj-column>
+          {{#if isInfo}}
+            <mj-text css-class="title" color="white" font-weight="900" font-size="24px" align="center" >
+              L'info du mois
+            </mj-text>
+            <mj-image src="{{infoImage}}" width="82px" alt="nouveauté"></mj-image>
+            <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link">{{{infoText}}}</mj-text>
+          {{/if}}
+          {{#if divider1}}
+            <mj-divider css-class="m-divider"></mj-divider>
+          {{/if}}
+          {{#if isServiceNews}}
+            <mj-text css-class="title custom-link" color="white" font-weight="900" font-size="24px" align="center" >
+              {{newsTitle}}
+            </mj-text>
+            <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link" >{{{newsContent}}}</mj-text>
+          {{/if}}
+          {{#if divider2}}
+              <mj-divider css-class="m-divider"></mj-divider>
+          {{/if}}
+          {{#if isPoll}}
+            <mj-text css-class="title " color="white" font-weight="900" font-size="24px" align="center" >
+              Votre avis nous intéresse
+            </mj-text>
+            <mj-text color="white" font-weight="400" font-size="18px" css-class="custom-link" >{{{pollText}}}</mj-text>
+            <mj-button color="black" background-color="#F1C017" css-class="button" font-size="20px" font-weight="700" >
+              <a href="{{pollUrl}}" style="text-decoration: none; color: black">C'est parti !</a>
+            </mj-button>
+          {{/if}}
+        </mj-column>
+      </mj-section>
+    {{/if}}
     <mj-section background-color="#121212">
       <mj-column vertical-align="middle">
         <mj-image src={{feedbackImageUrl}} width="53px" align="center" alt="feedback"></mj-image>
diff --git a/src/services/account.service.spec.ts b/src/services/account.service.spec.ts
index 319d86144931e812fc47053dbcdfde031c945f3a..b2bb202c90164bc13b905d4c0c0cc0a27e7048c0 100644
--- a/src/services/account.service.spec.ts
+++ b/src/services/account.service.spec.ts
@@ -1,4 +1,4 @@
-/* eslint-disable @typescript-eslint/camelcase */
+/* eslint-disable camelcase */
 import { QueryResult } from 'cozy-client'
 import { AccountAuthData, Account } from 'models'
 import mockClient from '../../tests/__mocks__/client'
diff --git a/src/services/account.service.ts b/src/services/account.service.ts
index 17f756396e9b4817d3ca7e5ca57e460d6a6bcf8d..9c86319a2757444fb967a71373b1956e4f80574f 100644
--- a/src/services/account.service.ts
+++ b/src/services/account.service.ts
@@ -58,9 +58,8 @@ export default class AccountService {
         // eslint-disable-next-line @typescript-eslint/camelcase
         .where({ account_type: type })
       // .indexFields(['account_type'])
-      const {
-        data: accounts,
-      }: QueryResult<Account[]> = await this._client.query(query)
+      const { data: accounts }: QueryResult<Account[]> =
+        await this._client.query(query)
       if (accounts.length > 1) {
         // If several account are found we will used trigger date to select the older
         const triggerService = new TriggerService(this._client)
@@ -107,9 +106,8 @@ export default class AccountService {
         // eslint-disable-next-line @typescript-eslint/camelcase
         .where({ account_type: type })
       // .indexFields(['account_type'])
-      const {
-        data: accounts,
-      }: QueryResult<Account[]> = await this._client.query(query)
+      const { data: accounts }: QueryResult<Account[]> =
+        await this._client.query(query)
       return accounts
     } catch (err) {
       console.error(`Error: GetAccountsByType: ${err}`)
diff --git a/src/services/action.service.ts b/src/services/action.service.ts
index 70643ede1a7ed7f100d945bba3e473a9dcf630bc..2383d7f14c6c55f9af7b6c3f7a79dee6e7b5db62 100644
--- a/src/services/action.service.ts
+++ b/src/services/action.service.ts
@@ -26,8 +26,10 @@ export default class ActionService {
    * @returns {Promise<Ecogesture[]>}
    */
   public async getAvailableActionList(): Promise<Ecogesture[]> {
-    const userChallenges: UserChallenge[] = await this._challengeService.getAllUserChallengeEntities()
-    const ecogestures: Ecogesture[] = await this._ecogestureService.getAllEcogestures()
+    const userChallenges: UserChallenge[] =
+      await this._challengeService.getAllUserChallengeEntities()
+    const ecogestures: Ecogesture[] =
+      await this._ecogestureService.getAllEcogestures()
     const actionsListIds: string[] = ecogestures
       .filter(ecogesture => ecogesture.action === true)
       .map(action => action._id)
@@ -45,9 +47,8 @@ export default class ActionService {
         }
       })
     }
-    const actionsList: Ecogesture[] = await this._ecogestureService.getEcogesturesByIds(
-      actionsListIds
-    )
+    const actionsList: Ecogesture[] =
+      await this._ecogestureService.getEcogesturesByIds(actionsListIds)
     return actionsList
   }
 
@@ -220,10 +221,11 @@ export default class ActionService {
       const progress = -startDate.startOf('day').diffNow('days').days
       if (progress >= duration) {
         const challengeService = new ChallengeService(this._client)
-        const userChallenge: UserChallenge = await challengeService.updateUserChallenge(
-          currentChallenge,
-          UserChallengeUpdateFlag.ACTION_NOTIFICATION
-        )
+        const userChallenge: UserChallenge =
+          await challengeService.updateUserChallenge(
+            currentChallenge,
+            UserChallengeUpdateFlag.ACTION_NOTIFICATION
+          )
         return userChallenge
       } else return null
     } else return null
diff --git a/src/services/challenge.service.spec.ts b/src/services/challenge.service.spec.ts
index 4af58ec04f0dbd6bd5ffb96797821ca051e22401..eaf3ac35baebcafb3bd7b9d87682fb46a824e466 100644
--- a/src/services/challenge.service.spec.ts
+++ b/src/services/challenge.service.spec.ts
@@ -1,4 +1,4 @@
-/* eslint-disable @typescript-eslint/camelcase */
+/* eslint-disable camelcase */
 import { QueryResult } from 'cozy-client'
 import {
   DuelEntity,
@@ -58,8 +58,10 @@ jest.mock('./exploration.service', () => {
   return jest.fn(() => {
     return {
       getExplorationEntityById: mockGetExplorationEntityById,
-      parseExplorationEntityToUserExploration: mockParseExplorationEntityToUserExploration,
-      getUserExplorationfromExplorationEntities: mockGetUserExplorationfromExplorationEntities,
+      parseExplorationEntityToUserExploration:
+        mockParseExplorationEntityToUserExploration,
+      getUserExplorationfromExplorationEntities:
+        mockGetUserExplorationfromExplorationEntities,
     }
   })
 })
@@ -70,7 +72,8 @@ jest.mock('./consumption.service', () => {
   return jest.fn(() => {
     return {
       getGraphData: mockGetGraphData,
-      calculatePerformanceIndicatorValue: mockCalculatePerformanceIndicatorValue,
+      calculatePerformanceIndicatorValue:
+        mockCalculatePerformanceIndicatorValue,
     }
   })
 })
@@ -87,9 +90,8 @@ describe('Challenge service', () => {
 
   describe('unLockCurrentUserChallenge method', () => {
     it('should return all user challenge', () => {
-      const result = challengeService.unLockCurrentUserChallenge(
-        userChallengeData
-      )
+      const result =
+        challengeService.unLockCurrentUserChallenge(userChallengeData)
       expect(result).toEqual(userChallengeData)
     })
     it('should return the challenge unlocked', () => {
@@ -626,11 +628,12 @@ describe('Challenge service', () => {
       mockParseExplorationEntityToUserExploration.mockReturnValue(
         userExploration1
       )
-      const result = await challengeService.loopVerificationExplorationCondition(
-        userChallengeExplo1OnGoing,
-        allChallengeEntityData,
-        fluidStatusData
-      )
+      const result =
+        await challengeService.loopVerificationExplorationCondition(
+          userChallengeExplo1OnGoing,
+          allChallengeEntityData,
+          fluidStatusData
+        )
       expect(result).toEqual(userChallengeExplo1OnGoing)
     })
     it('should return updated userChallenge with condition-validated exploration', async () => {
@@ -639,11 +642,12 @@ describe('Challenge service', () => {
         userExploration4
       )
 
-      const result = await challengeService.loopVerificationExplorationCondition(
-        userChallengeExplo4,
-        allChallengeEntityData,
-        fluidStatusData
-      )
+      const result =
+        await challengeService.loopVerificationExplorationCondition(
+          userChallengeExplo4,
+          allChallengeEntityData,
+          fluidStatusData
+        )
       expect(result).toEqual(userChallengeExplo4)
     })
     it('should return updated userChallenge with new exploration when condition is invalid', async () => {
@@ -651,11 +655,12 @@ describe('Challenge service', () => {
       mockParseExplorationEntityToUserExploration.mockReturnValue(
         userExploration4_0
       )
-      const result = await challengeService.loopVerificationExplorationCondition(
-        userChallengeExplo4,
-        allChallengeEntityData,
-        fluidStatusData
-      )
+      const result =
+        await challengeService.loopVerificationExplorationCondition(
+          userChallengeExplo4,
+          allChallengeEntityData,
+          fluidStatusData
+        )
       expect(result).toEqual(userChallengeExplo4_0)
     })
   })
diff --git a/src/services/challenge.service.ts b/src/services/challenge.service.ts
index 6fc4b25a30c3b479e0c584e6650f335622a8422c..ddcac6f746b07b351f96fcdc7df2fb058db9ba51 100644
--- a/src/services/challenge.service.ts
+++ b/src/services/challenge.service.ts
@@ -260,17 +260,19 @@ export default class ChallengeService {
   ): Promise<UserChallenge[]> {
     const explorationService = new ExplorationService(this._client)
     for (const explorationRelation of explorationEntityRelation) {
-      const exploration: UserExploration = explorationService.getUserExplorationfromExplorationEntities(
-        explorationEntities || [],
-        explorationRelation._id
-      )
-      const userChallenge = await this.getUpdatedUserChallengeIfExplorationConditionIsValid(
-        exploration,
-        challenge,
-        duel,
-        quiz,
-        fluidStatus
-      )
+      const exploration: UserExploration =
+        explorationService.getUserExplorationfromExplorationEntities(
+          explorationEntities || [],
+          explorationRelation._id
+        )
+      const userChallenge =
+        await this.getUpdatedUserChallengeIfExplorationConditionIsValid(
+          exploration,
+          challenge,
+          duel,
+          quiz,
+          fluidStatus
+        )
       if (userChallenge) {
         buildList.push(userChallenge)
         break
@@ -298,12 +300,12 @@ export default class ChallengeService {
       const explorationService = new ExplorationService(this._client)
       let updatedUserChallenge: UserChallenge = { ...userChallenge }
       for (const relation of relationsArray.data) {
-        const newExploEntity = await explorationService.getExplorationEntityById(
-          relation._id
-        )
-        const newUserExplo: UserExploration = explorationService.parseExplorationEntityToUserExploration(
-          newExploEntity
-        )
+        const newExploEntity =
+          await explorationService.getExplorationEntityById(relation._id)
+        const newUserExplo: UserExploration =
+          explorationService.parseExplorationEntityToUserExploration(
+            newExploEntity
+          )
         if (newExploEntity.fluid_condition.length > 0) {
           const isConditionValid = await this.isExplorationConditionVerified(
             newExploEntity,
@@ -354,16 +356,15 @@ export default class ChallengeService {
     )
     const {
       included: explorationEntities,
-    }: QueryResult<
-      ChallengeEntity[],
-      ExplorationEntity[]
-    > = await this._client.query(querySeasonEntityIncludeExploration)
+    }: QueryResult<ChallengeEntity[], ExplorationEntity[]> =
+      await this._client.query(querySeasonEntityIncludeExploration)
     const {
       included: quizEntities,
     }: QueryResult<ChallengeEntity[], QuizEntity[]> = await this._client.query(
       querySeasonEntityIncludeQuiz
     )
-    const userChallengeList: UserChallenge[] = await this.getAllUserChallengeEntities()
+    const userChallengeList: UserChallenge[] =
+      await this.getAllUserChallengeEntities()
     const duelService = new DuelService(this._client)
     const quizService = new QuizService(this._client)
     const explorationService = new ExplorationService(this._client)
@@ -382,10 +383,11 @@ export default class ChallengeService {
         )
         //Only one exploration relation
         if (relationEntities.explorationEntityRelation.length === 1) {
-          const exploration: UserExploration = explorationService.getUserExplorationfromExplorationEntities(
-            explorationEntities || [],
-            relationEntities.explorationEntityRelation[0]._id
-          )
+          const exploration: UserExploration =
+            explorationService.getUserExplorationfromExplorationEntities(
+              explorationEntities || [],
+              relationEntities.explorationEntityRelation[0]._id
+            )
           const userChallenge = this.parseChallengeEntityToUserChallenge(
             challenge,
             duel,
@@ -456,9 +458,8 @@ export default class ChallengeService {
    */
   public async getAllChallengeEntities(): Promise<ChallengeEntity[]> {
     const query: QueryDefinition = Q(CHALLENGE_DOCTYPE)
-    const {
-      data: challenges,
-    }: QueryResult<ChallengeEntity[]> = await this._client.query(query)
+    const { data: challenges }: QueryResult<ChallengeEntity[]> =
+      await this._client.query(query)
     return challenges
   }
 
@@ -487,9 +488,8 @@ export default class ChallengeService {
    */
   public async getAllUserChallengeEntities(): Promise<UserChallenge[]> {
     const query: QueryDefinition = Q(USERCHALLENGE_DOCTYPE)
-    const {
-      data: userChallengeEntities,
-    }: QueryResult<UserChallengeEntity[]> = await this._client.query(query)
+    const { data: userChallengeEntities }: QueryResult<UserChallengeEntity[]> =
+      await this._client.query(query)
     const userChallenges: UserChallenge[] = userChallengeEntities.map(
       userChallengeEntity =>
         this.parseUserChallengeEntityToUserChallenge(userChallengeEntity)
@@ -523,10 +523,11 @@ export default class ChallengeService {
           userConsumption: userConsumption,
         },
       }
-      const updatedUserChallenge: UserChallenge = await this.updateUserChallenge(
-        _userChallenge,
-        UserChallengeUpdateFlag.DUEL_CONSUMPTION
-      )
+      const updatedUserChallenge: UserChallenge =
+        await this.updateUserChallenge(
+          _userChallenge,
+          UserChallengeUpdateFlag.DUEL_CONSUMPTION
+        )
       return { updatedUserChallenge, dataloads }
     } catch (error) {
       console.log(
@@ -562,9 +563,8 @@ export default class ChallengeService {
         USERCHALLENGE_DOCTYPE,
         userChallenge
       )
-      const updatedUserChallenge: UserChallenge = this.parseUserChallengeEntityToUserChallenge(
-        updatedUserChallengeEntity
-      )
+      const updatedUserChallenge: UserChallenge =
+        this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity)
       return updatedUserChallenge
     } catch (error) {
       console.log('Challenge service error on startUserChallenge : ', error)
@@ -709,9 +709,10 @@ export default class ChallengeService {
         }
         break
       case UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION:
-        updatedExploration = await explorationService.awaitNotificationUserExploration(
-          userChallenge.exploration
-        )
+        updatedExploration =
+          await explorationService.awaitNotificationUserExploration(
+            userChallenge.exploration
+          )
         updatedUserChallenge = {
           ...userChallenge,
           exploration: updatedExploration,
@@ -766,14 +767,10 @@ export default class ChallengeService {
         break
     }
     try {
-      const {
-        data: userChallengeEntity,
-      }: QueryResult<UserChallengeEntity> = await this._client.save(
-        updatedUserChallenge
-      )
-      const result: UserChallenge = this.parseUserChallengeEntityToUserChallenge(
-        userChallengeEntity
-      )
+      const { data: userChallengeEntity }: QueryResult<UserChallengeEntity> =
+        await this._client.save(updatedUserChallenge)
+      const result: UserChallenge =
+        this.parseUserChallengeEntityToUserChallenge(userChallengeEntity)
       return result
     } catch (error) {
       console.log('Update user challenge error : ', error)
diff --git a/src/services/consumption.service.spec.ts b/src/services/consumption.service.spec.ts
index c5eb07f5317e169e5d690b18c6fc814c5d303ab0..4b69dd97648bd26e976824462fd1b709eaa931eb 100644
--- a/src/services/consumption.service.spec.ts
+++ b/src/services/consumption.service.spec.ts
@@ -1,8 +1,9 @@
-import ConsumptionDataManager from './consumption.service'
-import mockClient from '../../tests/__mocks__/client'
+import { QueryResult } from 'cozy-client'
+import { ENEDIS_MINUTE_DOCTYPE } from 'doctypes'
+import { DataloadState } from 'enum/dataload.enum'
+import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import { DateTime } from 'luxon'
-import { FluidType } from 'enum/fluid.enum'
 import {
   Datachart,
   Dataload,
@@ -11,12 +12,11 @@ import {
   FluidStatus,
   TimePeriod,
 } from 'models'
-import { ENEDIS_MINUTE_DOCTYPE } from 'doctypes'
+import mockClient from '../../tests/__mocks__/client'
 import { fluidPrices } from '../../tests/__mocks__/fluidPrice.mock'
-import { QueryResult } from 'cozy-client'
-import { loadDayData } from '../../tests/__mocks__/loadDayData.mock'
-import { DataloadState } from 'enum/dataload.enum'
 import { fluidStatusConnectedData } from '../../tests/__mocks__/fluidStatusData.mock'
+import { loadDayData } from '../../tests/__mocks__/loadDayData.mock'
+import ConsumptionDataManager from './consumption.service'
 
 const mockFetchFluidData = jest.fn()
 const mockFetchFluidMaxData = jest.fn()
@@ -374,13 +374,13 @@ describe('Consumption service', () => {
       const expectedResult = [
         {
           compareValue: 466.94,
-          percentageVariation: -0.18227181222426858,
+          percentageVariation: 0.18227181222426858,
           value: 552.05,
           price: null,
         },
         {
           compareValue: 466.94,
-          percentageVariation: -0.18227181222426858,
+          percentageVariation: 0.18227181222426858,
           value: 552.05,
           price: null,
         },
@@ -508,9 +508,10 @@ describe('Consumption service', () => {
       }
 
       mockClient.query.mockResolvedValueOnce(data)
-      const result = await consumptionDataManager.getFirstDataDateFromDoctypeWithPrice(
-        ENEDIS_MINUTE_DOCTYPE
-      )
+      const result =
+        await consumptionDataManager.getFirstDataDateFromDoctypeWithPrice(
+          ENEDIS_MINUTE_DOCTYPE
+        )
       expect(result).toEqual(data.data[0])
     })
   })
diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts
index 107b36b21b472a9de08e267d02466a27b8d771eb..60e381a5ec5b979ea0c9e3403c64721aef0198f2 100644
--- a/src/services/consumption.service.ts
+++ b/src/services/consumption.service.ts
@@ -1,7 +1,10 @@
-import { DateTime } from 'luxon'
-import { Client, QueryDefinition, Q, QueryResult } from 'cozy-client'
+import { Client, Q, QueryDefinition, QueryResult } from 'cozy-client'
+import { Doctype } from 'cozy-client/types/types'
+import { ENEDIS_MINUTE_DOCTYPE } from 'doctypes'
+import { DataloadState } from 'enum/dataload.enum'
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
 import {
   Datachart,
   Dataload,
@@ -11,14 +14,11 @@ import {
   PerformanceIndicator,
   TimePeriod,
 } from 'models'
+import { EnedisMonthlyAnalysisData } from 'models/enedisMonthlyAnalysis'
 import ConsumptionFormatterService from 'services/consumptionFormatter.service'
-import QueryRunnerService from 'services/queryRunner.service'
 import ConsumptionValidatorService from 'services/consumptionValidator.service'
 import ConverterService from 'services/converter.service'
-import { ENEDIS_MINUTE_DOCTYPE } from 'doctypes'
-import { Doctype } from 'cozy-client/types/types'
-import { EnedisMonthlyAnalysisData } from 'models/enedisMonthlyAnalysis'
-import { DataloadState } from 'enum/dataload.enum'
+import QueryRunnerService from 'services/queryRunner.service'
 
 // eslint-disable-next-line @typescript-eslint/interface-name-prefix
 export interface ISingleFluidChartData {
@@ -57,22 +57,24 @@ export default class ConsumptionDataManager {
     compareTimePeriod?: TimePeriod,
     isHome?: boolean
   ): Promise<Datachart | null> {
-    const InputisValid: boolean = this._consumptionValidatorService.ValidateGetGraphData(
-      timePeriod,
-      timeStep,
-      fluidTypes,
-      compareTimePeriod
-    )
-    if (!InputisValid) return null
-    if (fluidTypes.length === 1 && !isHome) {
-      const fluidType: FluidType = fluidTypes[0]
-      // running the query
-      const fetchedData: Datachart | null = await this.fetchSingleFluidGraphData(
+    const InputisValid: boolean =
+      this._consumptionValidatorService.ValidateGetGraphData(
         timePeriod,
         timeStep,
-        fluidType,
+        fluidTypes,
         compareTimePeriod
       )
+    if (!InputisValid) return null
+    if (fluidTypes.length === 1 && !isHome) {
+      const fluidType: FluidType = fluidTypes[0]
+      // running the query
+      const fetchedData: Datachart | null =
+        await this.fetchSingleFluidGraphData(
+          timePeriod,
+          timeStep,
+          fluidType,
+          compareTimePeriod
+        )
 
       // formatting data
       const formattedData: Datachart | null = this.formatGraphDataManager(
@@ -108,9 +110,8 @@ export default class ConsumptionDataManager {
           chartFluid: fluidType,
         })
       }
-      const aggregatedData: Datachart | null = this.aggregateGraphData(
-        toBeAgreggatedData
-      )
+      const aggregatedData: Datachart | null =
+        this.aggregateGraphData(toBeAgreggatedData)
       return aggregatedData
     } else return null
   }
@@ -152,9 +153,7 @@ export default class ConsumptionDataManager {
     fluidTypes: FluidType
   ): Promise<Dataload[] | null> {
     const timePeriod = {
-      startDate: DateTime.now()
-        .plus({ days: -3 })
-        .startOf('day'),
+      startDate: DateTime.now().plus({ days: -3 }).startOf('day'),
       endDate: DateTime.now(),
     }
 
@@ -199,9 +198,8 @@ export default class ConsumptionDataManager {
             graphData.actualData
           )
           if (graphData.actualData[0].price)
-            performanceIndicator.price = this.calculatePerformanceIndicatorPrice(
-              graphData.actualData
-            )
+            performanceIndicator.price =
+              this.calculatePerformanceIndicatorPrice(graphData.actualData)
         }
 
         if (
@@ -213,10 +211,11 @@ export default class ConsumptionDataManager {
             graphData.comparisonData
           )
           performanceIndicator.compareValue = comparisonSumValue
-          performanceIndicator.percentageVariation = this.calculatePerformanceIndicatorVariationPercentage(
-            performanceIndicator.value || 0,
-            comparisonSumValue
-          )
+          performanceIndicator.percentageVariation =
+            this.calculatePerformanceIndicatorVariationPercentage(
+              performanceIndicator.value || 0,
+              comparisonSumValue
+            )
         }
 
         performanceIndicators[fluidType] = performanceIndicator
@@ -247,7 +246,7 @@ export default class ConsumptionDataManager {
     dataSum: number,
     comparisonDataSum: number
   ): number {
-    return 1 - dataSum / comparisonDataSum
+    return dataSum / comparisonDataSum - 1
   }
 
   private async fetchSingleFluidGraphData(
@@ -302,24 +301,26 @@ export default class ConsumptionDataManager {
   ): Datachart | null {
     if (!data) return null
 
-    const formattedActualData: Dataload[] = this._consumptionFormatterService.formatGraphData(
-      data.actualData,
-      timePeriod,
-      timeStep,
-      fluidType,
-      fluidStatus
-    )
-
-    let formattedComparisonData: Dataload[] | null = null
-    if (compareTimePeriod)
-      formattedComparisonData = this._consumptionFormatterService.formatGraphData(
-        data.comparisonData ? data.comparisonData : [],
-        compareTimePeriod,
+    const formattedActualData: Dataload[] =
+      this._consumptionFormatterService.formatGraphData(
+        data.actualData,
+        timePeriod,
         timeStep,
         fluidType,
         fluidStatus
       )
 
+    let formattedComparisonData: Dataload[] | null = null
+    if (compareTimePeriod)
+      formattedComparisonData =
+        this._consumptionFormatterService.formatGraphData(
+          data.comparisonData ? data.comparisonData : [],
+          compareTimePeriod,
+          timeStep,
+          fluidType,
+          fluidStatus
+        )
+
     const result: Datachart = {
       actualData: formattedActualData,
       comparisonData: formattedComparisonData,
@@ -490,9 +491,10 @@ export default class ConsumptionDataManager {
 
         if (singleFluidCharts[0].chartData.actualData[i]) {
           // Define the aggregated state
-          const aggregatedDataloadState: DataloadState = this._consumptionFormatterService.defineAggregatedDataloadState(
-            tempAggregatedState
-          )
+          const aggregatedDataloadState: DataloadState =
+            this._consumptionFormatterService.defineAggregatedDataloadState(
+              tempAggregatedState
+            )
           const acutaldataLoad: Dataload = {
             date: singleFluidCharts[0].chartData.actualData[i].date,
             value: agreggatedConvertedValue,
@@ -509,9 +511,10 @@ export default class ConsumptionDataManager {
           singleFluidCharts[0].chartData.comparisonData[i]
         ) {
           // Define the aggregated state
-          const aggregatedComparisonDataloadState: DataloadState = this._consumptionFormatterService.defineAggregatedDataloadState(
-            tempComparisonAggregatedState
-          )
+          const aggregatedComparisonDataloadState: DataloadState =
+            this._consumptionFormatterService.defineAggregatedDataloadState(
+              tempComparisonAggregatedState
+            )
           const comparisondataLoad: Dataload = {
             date: singleFluidCharts[0].chartData.comparisonData[i].date,
             value: comparisonAgreggatedConvertedValue,
@@ -598,9 +601,8 @@ export default class ConsumptionDataManager {
   public async saveDoc(
     consumptionDoc: DataloadEntity
   ): Promise<DataloadEntity> {
-    const {
-      data: savedDoc,
-    }: QueryResult<DataloadEntity> = await this._client.save(consumptionDoc)
+    const { data: savedDoc }: QueryResult<DataloadEntity> =
+      await this._client.save(consumptionDoc)
     return savedDoc
   }
 
@@ -612,11 +614,8 @@ export default class ConsumptionDataManager {
   public async saveDocs(
     consumptionDocs: DataloadEntity[]
   ): Promise<DataloadEntity[]> {
-    const {
-      data: savedDocs,
-    }: QueryResult<DataloadEntity[]> = await this._client.saveAll(
-      consumptionDocs
-    )
+    const { data: savedDocs }: QueryResult<DataloadEntity[]> =
+      await this._client.saveAll(consumptionDocs)
 
     return savedDocs
   }
diff --git a/src/services/consumptionFormatter.service.spec.ts b/src/services/consumptionFormatter.service.spec.ts
index 2a27a7681dbc113401dd445e7a8bfb16bc103d22..293661219a71c39b02c1b53d47e5f37392e2cc40 100644
--- a/src/services/consumptionFormatter.service.spec.ts
+++ b/src/services/consumptionFormatter.service.spec.ts
@@ -506,12 +506,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.COMING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.ELECTRICITY,
-          TimeStep.DAY,
-          fluidStatus[FluidType.ELECTRICITY]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.ELECTRICITY,
+            TimeStep.DAY,
+            fluidStatus[FluidType.ELECTRICITY]
+          )
         expect(result).toEqual(expectedResult)
       })
       it('case GAS with date >= today-5', () => {
@@ -523,12 +524,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.COMING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.GAS,
-          TimeStep.DAY,
-          fluidStatus[FluidType.GAS]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.GAS,
+            TimeStep.DAY,
+            fluidStatus[FluidType.GAS]
+          )
         expect(result).toEqual(expectedResult)
       })
       it('case WATER with date >= today-5', () => {
@@ -540,12 +542,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.COMING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.WATER,
-          TimeStep.DAY,
-          fluidStatus[FluidType.WATER]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.WATER,
+            TimeStep.DAY,
+            fluidStatus[FluidType.WATER]
+          )
         expect(result).toEqual(expectedResult)
       })
     })
@@ -601,12 +604,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.MISSING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.ELECTRICITY,
-          TimeStep.DAY,
-          fluidStatus[FluidType.ELECTRICITY]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.ELECTRICITY,
+            TimeStep.DAY,
+            fluidStatus[FluidType.ELECTRICITY]
+          )
         expect(result).toEqual(expectedResult)
       })
       it('case GAS with date <= today-5', () => {
@@ -618,12 +622,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.MISSING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.GAS,
-          TimeStep.DAY,
-          fluidStatus[FluidType.GAS]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.GAS,
+            TimeStep.DAY,
+            fluidStatus[FluidType.GAS]
+          )
         expect(result).toEqual(expectedResult)
       })
       it('case WATER with date <= today-5', () => {
@@ -635,12 +640,13 @@ describe('ConsumptionFormatter service', () => {
           ...data,
           state: DataloadState.MISSING,
         }
-        const result: Dataload = consumptionFormatterService.defineDataloadState(
-          data,
-          FluidType.WATER,
-          TimeStep.DAY,
-          fluidStatus[FluidType.WATER]
-        )
+        const result: Dataload =
+          consumptionFormatterService.defineDataloadState(
+            data,
+            FluidType.WATER,
+            TimeStep.DAY,
+            fluidStatus[FluidType.WATER]
+          )
         expect(result).toEqual(expectedResult)
       })
     })
@@ -653,9 +659,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.HOLE,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_WITH_HOLE_OR_MISSING)
     })
     it('should return AGGREGATED_WITH_HOLE_OR_MISSING because of MISSING data', () => {
@@ -664,9 +671,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.MISSING,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_WITH_HOLE_OR_MISSING)
     })
     it('should return AGGREGATED_WITH_COMING because of UPCOMING data', () => {
@@ -675,9 +683,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.UPCOMING,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_WITH_COMING)
     })
     it('should return AGGREGATED_WITH_COMING because of COMING data', () => {
@@ -686,9 +695,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.COMING,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_WITH_COMING)
     })
     it('should return AGGREGATED_WITH_EMPTY because of EMPTY data', () => {
@@ -697,9 +707,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.EMPTY,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_WITH_EMPTY)
     })
     it('should return AGGREGATED_VALID', () => {
@@ -708,9 +719,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.VALID,
         DataloadState.VALID,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_VALID)
     })
     it('should return AGGREGATED_HOLE_OR_MISSING', () => {
@@ -719,9 +731,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.MISSING,
         DataloadState.MISSING,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_HOLE_OR_MISSING)
     })
     it('should return AGGREGATED_COMING', () => {
@@ -730,9 +743,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.COMING,
         DataloadState.COMING,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_COMING)
     })
     it('should return AGGREGATED_EMPTY', () => {
@@ -741,9 +755,10 @@ describe('ConsumptionFormatter service', () => {
         DataloadState.EMPTY,
         DataloadState.EMPTY,
       ]
-      const result: DataloadState = consumptionFormatterService.defineAggregatedDataloadState(
-        dataloadStateArray
-      )
+      const result: DataloadState =
+        consumptionFormatterService.defineAggregatedDataloadState(
+          dataloadStateArray
+        )
       expect(result).toEqual(DataloadState.AGGREGATED_EMPTY)
     })
   })
diff --git a/src/services/dateChart.service.ts b/src/services/dateChart.service.ts
index 6bb1f0f67e78db16e12934d17f01a5bead39b154..6552c7e26ee6a2de0391699086b833958c447007 100644
--- a/src/services/dateChart.service.ts
+++ b/src/services/dateChart.service.ts
@@ -307,7 +307,8 @@ export default class DateChartService {
     fluidType: FluidType
   ): number | null {
     if (date && fluidType !== FluidType.MULTIFLUID) {
-      const fluidConfig: Array<FluidConfig> = new ConfigService().getFluidConfig()
+      const fluidConfig: Array<FluidConfig> =
+        new ConfigService().getFluidConfig()
       const today = DateTime.local().setZone('utc', {
         keepLocalTime: true,
       })
diff --git a/src/services/duel.service.ts b/src/services/duel.service.ts
index 82bf4af528a04073afd4d2511898bd716a9cc0eb..817eac1b6677e1454cd95876aa570148a1cb9760 100644
--- a/src/services/duel.service.ts
+++ b/src/services/duel.service.ts
@@ -117,9 +117,8 @@ export default class DuelService {
    */
   public async getAllDuelEntities(): Promise<DuelEntity[]> {
     const query: QueryDefinition = Q(DUEL_DOCTYPE)
-    const {
-      data: dueles,
-    }: QueryResult<DuelEntity[]> = await this._client.query(query)
+    const { data: dueles }: QueryResult<DuelEntity[]> =
+      await this._client.query(query)
     return dueles
   }
 
@@ -192,9 +191,8 @@ export default class DuelService {
   ): Promise<UserDuel> {
     const consumptionService = new ConsumptionService(this._client)
     const performanceService = new PerformanceService()
-    const fluidTypes: Array<FluidType> = this.getFluidTypesFromStatus(
-      fluidStatus
-    )
+    const fluidTypes: Array<FluidType> =
+      this.getFluidTypesFromStatus(fluidStatus)
     // Get last period with all days known
     const period: TimePeriod | false = await this.getValidPeriod(
       fluidStatus,
@@ -203,14 +201,14 @@ export default class DuelService {
     )
     if (period !== false) {
       // Fetch performance data
-      const fetchLastValidData: Array<PerformanceIndicator> = await consumptionService.getPerformanceIndicators(
-        period,
-        TimeStep.DAY,
-        fluidTypes
-      )
-      const maxData: PerformanceIndicator = performanceService.aggregatePerformanceIndicators(
-        fetchLastValidData
-      )
+      const fetchLastValidData: Array<PerformanceIndicator> =
+        await consumptionService.getPerformanceIndicators(
+          period,
+          TimeStep.DAY,
+          fluidTypes
+        )
+      const maxData: PerformanceIndicator =
+        performanceService.aggregatePerformanceIndicators(fetchLastValidData)
       // Set the threshold
       let updatedThreshold: number
       if (maxData && maxData.value && maxData.value > 0) {
diff --git a/src/services/ecogesture.service.ts b/src/services/ecogesture.service.ts
index 0de5cd9e37f5087d3d6dca8b0a07924f02b551b7..393699d1b05cc5f4fe7172349b980811283f739c 100644
--- a/src/services/ecogesture.service.ts
+++ b/src/services/ecogesture.service.ts
@@ -30,18 +30,16 @@ export default class EcogestureService {
       query = query.where({}).sortBy([{ season: 'desc' }])
     }
 
-    const {
-      data: ecogestures,
-    }: QueryResult<Ecogesture[]> = await this._client.query(query)
+    const { data: ecogestures }: QueryResult<Ecogesture[]> =
+      await this._client.query(query)
 
     if (seasonFilter && seasonFilter !== Season.NONE) {
-      const {
-        data: ecogesturesWithSeason,
-      }: QueryResult<Ecogesture[]> = await this._client.query(
-        Q(ECOGESTURE_DOCTYPE)
-          .where({ season: { $eq: seasonFilter } })
-          .sortBy([{ season: 'asc' }])
-      )
+      const { data: ecogesturesWithSeason }: QueryResult<Ecogesture[]> =
+        await this._client.query(
+          Q(ECOGESTURE_DOCTYPE)
+            .where({ season: { $eq: seasonFilter } })
+            .sortBy([{ season: 'asc' }])
+        )
       return [...ecogesturesWithSeason, ...ecogestures]
     }
     return ecogestures
@@ -54,9 +52,8 @@ export default class EcogestureService {
    */
   public async getEcogesturesByIds(ids: string[]): Promise<Ecogesture[]> {
     const query: QueryDefinition = Q(ECOGESTURE_DOCTYPE).getByIds(ids)
-    const {
-      data: ecogestures,
-    }: QueryResult<Ecogesture[]> = await this._client.query(query)
+    const { data: ecogestures }: QueryResult<Ecogesture[]> =
+      await this._client.query(query)
     return ecogestures
   }
 
@@ -202,9 +199,8 @@ export default class EcogestureService {
    * @returns {Ecogesture} Udpated Ecogesture
    */
   public async updateEcogesture(ecogesture: Ecogesture): Promise<Ecogesture> {
-    const {
-      data: updatedEcogesture,
-    }: QueryResult<Ecogesture> = await this._client.save(ecogesture)
+    const { data: updatedEcogesture }: QueryResult<Ecogesture> =
+      await this._client.save(ecogesture)
     return updatedEcogesture
   }
 }
diff --git a/src/services/environment.service.ts b/src/services/environment.service.ts
index 0fb89f8f4f67c7ba49f64e067885c293c33c708c..116c1bcc9e0e09afbb2128774fdb9710927f33a8 100644
--- a/src/services/environment.service.ts
+++ b/src/services/environment.service.ts
@@ -1,4 +1,5 @@
 declare const __IS_ALPHA__: boolean
+declare const __DEVELOPMENT__: boolean
 
 export default class EnvironmentService {
   private isAlpha() {
@@ -21,4 +22,8 @@ export default class EnvironmentService {
       return 'https://ecolyo-agent-rec.grandlyon.com'
     }
   }
+
+  public isLocal() {
+    return __DEVELOPMENT__
+  }
 }
diff --git a/src/services/exploration.service.spec.ts b/src/services/exploration.service.spec.ts
index d75145f0828afe499b12c25b6891c4d273ea2eb6..8979264f297f885402919ef57978e1fc3a61f431 100644
--- a/src/services/exploration.service.spec.ts
+++ b/src/services/exploration.service.spec.ts
@@ -82,9 +82,10 @@ describe('Exploration service', () => {
 
   describe('parseExplorationEntityToUserExploration method', () => {
     it('should return the userExploration from a explorationEntity', () => {
-      const result = explorationService.parseExplorationEntityToUserExploration(
-        explorationEntity
-      )
+      const result =
+        explorationService.parseExplorationEntityToUserExploration(
+          explorationEntity
+        )
       const mockUpdatedExploration: UserExploration = {
         ...explorationEntity,
         progress: 0,
@@ -97,10 +98,11 @@ describe('Exploration service', () => {
   describe('getUserExplorationfromExplorationEntities method', () => {
     it('should return the userExploration from a explorationEntity', () => {
       const searchId = 'EXPLORATION001'
-      const result = explorationService.getUserExplorationfromExplorationEntities(
-        allExplorationEntities,
-        searchId
-      )
+      const result =
+        explorationService.getUserExplorationfromExplorationEntities(
+          allExplorationEntities,
+          searchId
+        )
       const updatedUserExploration = {
         ...UserExplorationUnlocked,
         date: result.date,
diff --git a/src/services/exploration.service.ts b/src/services/exploration.service.ts
index 84f916c3fe96a891ef0d9f1e78bfff5ed4ba1efc..bd5dfa119cc753ac8dc680906c203317fabca346 100644
--- a/src/services/exploration.service.ts
+++ b/src/services/exploration.service.ts
@@ -24,9 +24,8 @@ export default class ExplorationService {
    */
   public async getAllExplorationEntities(): Promise<ExplorationEntity[]> {
     const query: QueryDefinition = Q(EXPLORATION_DOCTYPE)
-    const {
-      data: explorations,
-    }: QueryResult<ExplorationEntity[]> = await this._client.query(query)
+    const { data: explorations }: QueryResult<ExplorationEntity[]> =
+      await this._client.query(query)
     return explorations
   }
 
@@ -73,6 +72,7 @@ export default class ExplorationService {
     explorationEntityList: ExplorationEntity[],
     searchId: string
   ): UserExploration {
+    /* eslint-disable camelcase */
     let exploration: UserExploration = {
       id: '',
       state: UserExplorationState.UNLOCKED,
@@ -86,6 +86,7 @@ export default class ExplorationService {
       progress: 0,
       message_success: '',
     }
+    /* eslint-enable camelcase */
     if (explorationEntityList.length > 0) {
       const explorationEntityIndex = explorationEntityList.findIndex(
         entity => entity.id === searchId
@@ -93,9 +94,8 @@ export default class ExplorationService {
       if (explorationEntityIndex >= 0) {
         const explorationEntity: ExplorationEntity =
           explorationEntityList[explorationEntityIndex]
-        exploration = this.parseExplorationEntityToUserExploration(
-          explorationEntity
-        )
+        exploration =
+          this.parseExplorationEntityToUserExploration(explorationEntity)
       }
     }
     return exploration
diff --git a/src/services/fluid.service.spec.ts b/src/services/fluid.service.spec.ts
index af2a1acff31a454c01a22d8dce29ffa10d1db562..062014b5cbe5f7212079f08311af489529e39fb9 100644
--- a/src/services/fluid.service.spec.ts
+++ b/src/services/fluid.service.spec.ts
@@ -552,16 +552,12 @@ describe('FLuid service', () => {
         {
           fluidType: FluidType.ELECTRICITY,
           status: FluidState.DONE,
-          firstDataDate: DateTime.local()
-            .minus({ day: 31 })
-            .setZone('utc', {
-              keepLocalTime: true,
-            }),
-          lastDataDate: DateTime.local()
-            .minus({ day: 1 })
-            .setZone('utc', {
-              keepLocalTime: true,
-            }),
+          firstDataDate: DateTime.local().minus({ day: 31 }).setZone('utc', {
+            keepLocalTime: true,
+          }),
+          lastDataDate: DateTime.local().minus({ day: 1 }).setZone('utc', {
+            keepLocalTime: true,
+          }),
           connection: {
             konnector: konnectorsData[0],
             account: accountsData[0],
@@ -710,9 +706,8 @@ describe('FLuid service', () => {
           },
         },
       ]
-      const result: FluidType[] = await fluidService.getFluidsConcernedByPartnerIssue(
-        mockFluidStatus
-      )
+      const result: FluidType[] =
+        await fluidService.getFluidsConcernedByPartnerIssue(mockFluidStatus)
       expect(result).toEqual([FluidType.ELECTRICITY])
     })
     it('should return the fluids concerned by partnerIssue', async () => {
diff --git a/src/services/fluid.service.ts b/src/services/fluid.service.ts
index 5569acc917698f01b0492261d7c48613f0a81f3c..c7724830513e8555585bad28d826c9ca929cf836 100644
--- a/src/services/fluid.service.ts
+++ b/src/services/fluid.service.ts
@@ -90,70 +90,64 @@ export default class FluidService {
   ): Promise<FluidStatus[]> => {
     const fluidConfig = new ConfigService().getFluidConfig()
     const accountService = new AccountService(this._client)
-    const [
-      elecAccount,
-      waterAccount,
-      gasAccount,
-    ]: (Account | null)[] = await Promise.all([
-      accountService.getAccountByType(
-        fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
-      ),
-      accountService.getAccountByType(
-        fluidConfig[FluidType.WATER].konnectorConfig.slug
-      ),
-      accountService.getAccountByType(
-        fluidConfig[FluidType.GAS].konnectorConfig.slug
-      ),
-    ])
+    const [elecAccount, waterAccount, gasAccount]: (Account | null)[] =
+      await Promise.all([
+        accountService.getAccountByType(
+          fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
+        ),
+        accountService.getAccountByType(
+          fluidConfig[FluidType.WATER].konnectorConfig.slug
+        ),
+        accountService.getAccountByType(
+          fluidConfig[FluidType.GAS].konnectorConfig.slug
+        ),
+      ])
     const konnectorService = new KonnectorService(this._client)
-    const [
-      elecKonnector,
-      waterKonnector,
-      gasKonnector,
-    ]: (Konnector | null)[] = await Promise.all([
-      konnectorService.getKonnector(
-        fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
-      ),
+    const [elecKonnector, waterKonnector, gasKonnector]: (Konnector | null)[] =
+      await Promise.all([
+        konnectorService.getKonnector(
+          fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
+        ),
 
-      konnectorService.getKonnector(
-        fluidConfig[FluidType.WATER].konnectorConfig.slug
-      ),
-      konnectorService.getKonnector(
-        fluidConfig[FluidType.GAS].konnectorConfig.slug
-      ),
-    ])
+        konnectorService.getKonnector(
+          fluidConfig[FluidType.WATER].konnectorConfig.slug
+        ),
+        konnectorService.getKonnector(
+          fluidConfig[FluidType.GAS].konnectorConfig.slug
+        ),
+      ])
     const triggerService = new TriggerService(this._client)
-    const [
-      elecTrigger,
-      waterTrigger,
-      gasTrigger,
-    ]: (Trigger | null)[] = await Promise.all([
-      elecAccount && elecKonnector
-        ? triggerService.getTrigger(elecAccount, elecKonnector)
-        : null,
-      waterAccount && waterKonnector
-        ? triggerService.getTrigger(waterAccount, waterKonnector)
-        : null,
-      gasAccount && gasKonnector
-        ? triggerService.getTrigger(gasAccount, gasKonnector)
-        : null,
-    ])
+    const [elecTrigger, waterTrigger, gasTrigger]: (Trigger | null)[] =
+      await Promise.all([
+        elecAccount && elecKonnector
+          ? triggerService.getTrigger(elecAccount, elecKonnector)
+          : null,
+        waterAccount && waterKonnector
+          ? triggerService.getTrigger(waterAccount, waterKonnector)
+          : null,
+        gasAccount && gasKonnector
+          ? triggerService.getTrigger(gasAccount, gasKonnector)
+          : null,
+      ])
     const consumptionService = new ConsumptionService(this._client)
-    const [
-      elecStatus,
-      waterStatus,
-      gasStatus,
-    ]: (TriggerState | null)[] = await Promise.all([
-      elecTrigger ? triggerService.fetchTriggerState(elecTrigger) : null,
-      waterTrigger ? triggerService.fetchTriggerState(waterTrigger) : null,
-      gasTrigger ? triggerService.fetchTriggerState(gasTrigger) : null,
-    ])
-    const firstDataDates: (DateTime | null)[] = await consumptionService.fetchAllFirstDateData(
-      [FluidType.ELECTRICITY, FluidType.WATER, FluidType.GAS]
-    )
-    const lastDataDates: (DateTime | null)[] = await consumptionService.fetchAllLastDateData(
-      [FluidType.ELECTRICITY, FluidType.WATER, FluidType.GAS]
-    )
+    const [elecStatus, waterStatus, gasStatus]: (TriggerState | null)[] =
+      await Promise.all([
+        elecTrigger ? triggerService.fetchTriggerState(elecTrigger) : null,
+        waterTrigger ? triggerService.fetchTriggerState(waterTrigger) : null,
+        gasTrigger ? triggerService.fetchTriggerState(gasTrigger) : null,
+      ])
+    const firstDataDates: (DateTime | null)[] =
+      await consumptionService.fetchAllFirstDateData([
+        FluidType.ELECTRICITY,
+        FluidType.WATER,
+        FluidType.GAS,
+      ])
+    const lastDataDates: (DateTime | null)[] =
+      await consumptionService.fetchAllLastDateData([
+        FluidType.ELECTRICITY,
+        FluidType.WATER,
+        FluidType.GAS,
+      ])
     const result: FluidStatus[] = [
       {
         fluidType: FluidType.ELECTRICITY,
diff --git a/src/services/fluidsPrices.service.ts b/src/services/fluidsPrices.service.ts
index 48d95edb36b804bf98b157c6c1e7bf75798e49eb..c4c4c3615ea8d5e7f2e4c342ef19a37be1649d7a 100644
--- a/src/services/fluidsPrices.service.ts
+++ b/src/services/fluidsPrices.service.ts
@@ -19,9 +19,8 @@ export default class FluidPricesService {
   public async getAllPrices(): Promise<FluidPrice[]> {
     const query: QueryDefinition = Q(FLUIDPRICES_DOCTYPE).limitBy(900)
     //TODO : handle case of 1000+ entries in doctype
-    const {
-      data: fluidsPrices,
-    }: QueryResult<FluidPrice[]> = await this._client.query(query)
+    const { data: fluidsPrices }: QueryResult<FluidPrice[]> =
+      await this._client.query(query)
     return fluidsPrices
   }
 
@@ -46,9 +45,8 @@ export default class FluidPricesService {
       .sortBy([{ startDate: 'desc' }])
       .limitBy(1)
 
-    const {
-      data: fluidsPrices,
-    }: QueryResult<FluidPrice[]> = await this._client.query(query)
+    const { data: fluidsPrices }: QueryResult<FluidPrice[]> =
+      await this._client.query(query)
     return fluidsPrices[0]
   }
 
@@ -63,9 +61,8 @@ export default class FluidPricesService {
       .sortBy([{ fluidType: 'asc' }])
       .limitBy(3)
 
-    const {
-      data: fluidsPrices,
-    }: QueryResult<FluidPrice[]> = await this._client.query(query)
+    const { data: fluidsPrices }: QueryResult<FluidPrice[]> =
+      await this._client.query(query)
 
     // If some data is missing, recover it using default config
     if (fluidsPrices.length !== 3) {
@@ -138,12 +135,8 @@ export default class FluidPricesService {
    */
   public async createPrice(newPrice: FluidPrice): Promise<FluidPrice | null> {
     try {
-      const {
-        data: createdPrice,
-      }: QueryResult<FluidPrice> = await this._client.create(
-        FLUIDPRICES_DOCTYPE,
-        newPrice
-      )
+      const { data: createdPrice }: QueryResult<FluidPrice> =
+        await this._client.create(FLUIDPRICES_DOCTYPE, newPrice)
       return createdPrice
     } catch (error) {
       console.log('Error creating new createdPrice: ', error)
@@ -161,12 +154,11 @@ export default class FluidPricesService {
     doc: FluidPrice,
     attributes: Partial<FluidPrice>
   ): Promise<FluidPrice | null> {
-    const {
-      data: fluidPrice,
-    }: QueryResult<FluidPrice | null> = await this._client.save({
-      ...doc,
-      ...attributes,
-    })
+    const { data: fluidPrice }: QueryResult<FluidPrice | null> =
+      await this._client.save({
+        ...doc,
+        ...attributes,
+      })
     if (fluidPrice) {
       return fluidPrice
     }
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index 78e02c12a492be297e3fda21548443b9f985ec40..d154d1f88bcb7d1423b8c8d5ab8d4b010d343f22 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -215,7 +215,8 @@ export default class InitializationService {
   public async initProfileEcogesture(): Promise<ProfileEcogesture | null> {
     const profileEcogestureService = new ProfileEcogestureService(this._client)
     try {
-      const loadedProfileEcogesture = await profileEcogestureService.getProfileEcogesture()
+      const loadedProfileEcogesture =
+        await profileEcogestureService.getProfileEcogesture()
       log.info('[Initialization] ProfileEcogesture loaded')
       return loadedProfileEcogesture
     } catch (error) {
@@ -353,7 +354,8 @@ export default class InitializationService {
     const challengeHash = hashFile(challengeEntityData)
     const challengeService = new ChallengeService(this._client)
     // Populate data if none challengeEntity exists
-    const loadedChallengeEntity = await challengeService.getAllChallengeEntities()
+    const loadedChallengeEntity =
+      await challengeService.getAllChallengeEntities()
     if (
       !loadedChallengeEntity ||
       (loadedChallengeEntity && loadedChallengeEntity.length === 0)
@@ -555,7 +557,8 @@ export default class InitializationService {
     const explorationHash = hashFile(explorationEntityData)
     const explorationService = new ExplorationService(this._client)
     // Populate data if none explorationEntity exists
-    const loadedExplorationEntity = await explorationService.getAllExplorationEntities()
+    const loadedExplorationEntity =
+      await explorationService.getAllExplorationEntities()
     if (
       !loadedExplorationEntity ||
       (loadedExplorationEntity && loadedExplorationEntity.length === 0)
@@ -619,9 +622,7 @@ export default class InitializationService {
     }
   }
 
-  public async initAnalysis(
-    profile: Profile
-  ): Promise<{
+  public async initAnalysis(profile: Profile): Promise<{
     monthlyAnalysisDate: DateTime
     haveSeenLastAnalysis: boolean
   }> {
@@ -728,18 +729,14 @@ export default class InitializationService {
    * sucess return: UserChallenge, Dataload[]
    * failure throw error
    */
-  public async initDuelProgress(
-    userChallenge: UserChallenge
-  ): Promise<{
+  public async initDuelProgress(userChallenge: UserChallenge): Promise<{
     updatedUserChallenge: UserChallenge
     dataloads: Dataload[]
   }> {
     const challengeService = new ChallengeService(this._client)
     try {
-      const {
-        updatedUserChallenge,
-        dataloads,
-      } = await challengeService.initChallengeDuelProgress(userChallenge)
+      const { updatedUserChallenge, dataloads } =
+        await challengeService.initChallengeDuelProgress(userChallenge)
       return { updatedUserChallenge, dataloads }
     } catch (error) {
       this._setinitStepError(InitStepsErrors.CHALLENGES_ERROR)
diff --git a/src/services/konnector.service.ts b/src/services/konnector.service.ts
index 37f1ad53180bbfa7f6656de89e9c4f7690a9aad4..5b16ad5391d0031d9f1e0744bebb472e6461dd73 100644
--- a/src/services/konnector.service.ts
+++ b/src/services/konnector.service.ts
@@ -14,9 +14,8 @@ export default class KonnectorService {
     const query: QueryDefinition = Q(KONNECTORS_DOCTYPE).where({
       _id: KONNECTORS_DOCTYPE + '/' + id,
     })
-    const {
-      data: konnector,
-    }: QueryResult<Konnector[]> = await this._client.query(query)
+    const { data: konnector }: QueryResult<Konnector[]> =
+      await this._client.query(query)
     return konnector[0] ? konnector[0] : null
   }
 
diff --git a/src/services/partnersInfo.service.spec.ts b/src/services/partnersInfo.service.spec.ts
index 69aaaade29377e280845288b9bd1a137607ac7e4..07f198a26194f7349aac3c43233fe84a3febb10f 100644
--- a/src/services/partnersInfo.service.spec.ts
+++ b/src/services/partnersInfo.service.spec.ts
@@ -14,9 +14,8 @@ describe('PartnersInfo service', () => {
   const partnersInfoService = new PartnersInfoService(mockClient)
 
   it('should return partnersInfo', async () => {
-    const result:
-      | PartnersInfo
-      | undefined = await partnersInfoService.getPartnersInfo()
+    const result: PartnersInfo | undefined =
+      await partnersInfoService.getPartnersInfo()
     expect(result).toEqual(undefined)
   })
   it('should return an error', async () => {
diff --git a/src/services/performanceIndicator.service.spec.ts b/src/services/performanceIndicator.service.spec.ts
index c3cac0a58e72ea131dbe30369473f6b8aecc2bb7..ec4706dce86629482fbe83a5842d0d634d849380 100644
--- a/src/services/performanceIndicator.service.spec.ts
+++ b/src/services/performanceIndicator.service.spec.ts
@@ -1,5 +1,5 @@
-import PerformanceIndicatorService from './performanceIndicator.service'
 import { PerformanceIndicator } from 'models'
+import PerformanceIndicatorService from './performanceIndicator.service'
 
 describe('performanceIndicator service', () => {
   describe('aggregatePerformanceIndicators method', () => {
@@ -26,11 +26,12 @@ describe('performanceIndicator service', () => {
       let expectedResult: PerformanceIndicator = {
         value: 5.7911,
         compareValue: 7.84615,
-        percentageVariation: 0.26191826564620857,
+        percentageVariation: -0.26191826564620857,
       }
-      let result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      let result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
 
       //Only two values
@@ -49,11 +50,12 @@ describe('performanceIndicator service', () => {
       expectedResult = {
         value: 1.8675999999999997,
         compareValue: 5.26785,
-        percentageVariation: 0.6454720616570329,
+        percentageVariation: -0.6454720616570329,
       }
-      result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
 
       //lack of value for one
@@ -76,12 +78,13 @@ describe('performanceIndicator service', () => {
       ]
       expectedResult = {
         compareValue: 7.84615,
-        percentageVariation: 0.48368308023680406,
+        percentageVariation: -0.48368308023680406,
         value: 4.0511,
       }
-      result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
 
       //lack of compareValue for one
@@ -105,11 +108,12 @@ describe('performanceIndicator service', () => {
       expectedResult = {
         value: 9.2711,
         compareValue: 0,
-        percentageVariation: -Infinity,
+        percentageVariation: Infinity,
       }
-      result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
 
       //Only one with no compared value
@@ -123,11 +127,12 @@ describe('performanceIndicator service', () => {
       expectedResult = {
         value: 5.22,
         compareValue: 0,
-        percentageVariation: -Infinity,
+        percentageVariation: Infinity,
       }
-      result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
 
       //Only one with no value
@@ -141,11 +146,12 @@ describe('performanceIndicator service', () => {
       expectedResult = {
         value: 0,
         compareValue: 2.61,
-        percentageVariation: 1,
+        percentageVariation: -1,
       }
-      result = performanceIndicatorService.aggregatePerformanceIndicators(
-        performanceIndicator
-      )
+      result =
+        performanceIndicatorService.aggregatePerformanceIndicators(
+          performanceIndicator
+        )
       expect(result).toEqual(expectedResult)
     })
   })
diff --git a/src/services/performanceIndicator.service.ts b/src/services/performanceIndicator.service.ts
index 63ce8945685152aa9a9137fa2252b3819212fb1e..c21fcb52c24744a257fdacca5c0c45d8dbcb1943 100644
--- a/src/services/performanceIndicator.service.ts
+++ b/src/services/performanceIndicator.service.ts
@@ -1,5 +1,5 @@
-import ConverterService from 'services/converter.service'
 import { PerformanceIndicator } from 'models'
+import ConverterService from 'services/converter.service'
 
 export default class PerformanceIndicatorService {
   public aggregatePerformanceIndicators(
@@ -80,7 +80,7 @@ export default class PerformanceIndicatorService {
     const agreggatedPerformanceIndicator: PerformanceIndicator = {
       value: currentValue,
       compareValue: compareValue,
-      percentageVariation: 1 - currentValue / compareValue,
+      percentageVariation: currentValue / compareValue - 1,
     }
     return agreggatedPerformanceIndicator
   }
diff --git a/src/services/profile.service.ts b/src/services/profile.service.ts
index 32a7c72cad7e3b8115073a6a0872b589422dfb9d..cee6ea3843d0e000a08e6d42315e1bd4f8c524df 100644
--- a/src/services/profile.service.ts
+++ b/src/services/profile.service.ts
@@ -58,12 +58,11 @@ export default class ProfileService {
     const {
       data: [doc],
     }: QueryResult<ProfileEntity[]> = await this._client.query(query.limitBy(1))
-    const {
-      data: profileEntity,
-    }: QueryResult<ProfileEntity | null> = await this._client.save({
-      ...doc,
-      ...attributes,
-    })
+    const { data: profileEntity }: QueryResult<ProfileEntity | null> =
+      await this._client.save({
+        ...doc,
+        ...attributes,
+      })
     if (profileEntity) {
       return this.parseProfileEntityToProfile(profileEntity)
     }
diff --git a/src/services/profileEcogesture.service.ts b/src/services/profileEcogesture.service.ts
index 6913923dbcbb8c2cc0bb3040508b8c5b868724e6..37d5b0e857a6149245455eb7050387d3a7cd73ec 100644
--- a/src/services/profileEcogesture.service.ts
+++ b/src/services/profileEcogesture.service.ts
@@ -37,12 +37,11 @@ export default class ProfileEcogestureService {
       query.limitBy(1)
     )
     if (doc) {
-      const {
-        data: profileEcogesture,
-      }: QueryResult<ProfileEcogesture | null> = await this._client.save({
-        ...doc,
-        ...attributes,
-      })
+      const { data: profileEcogesture }: QueryResult<ProfileEcogesture | null> =
+        await this._client.save({
+          ...doc,
+          ...attributes,
+        })
       if (profileEcogesture) return profileEcogesture
     }
     return null
diff --git a/src/services/profileType.service.spec.ts b/src/services/profileType.service.spec.ts
index 68c0cb5748bc087ed15a1ea2fbe41e8173f45b2e..d13bb7b4ab16cbbedbb6096b582ee6cf8a204d94 100644
--- a/src/services/profileType.service.spec.ts
+++ b/src/services/profileType.service.spec.ts
@@ -52,21 +52,24 @@ describe('ProfileType service', () => {
 
   describe('calculateWarmingEstimatedConsumption', () => {
     it('should calculate the Warming Estimated Consumption', () => {
-      const estimatedConsumption = profileTypeService.calculateWarmingEstimatedConsumption()
+      const estimatedConsumption =
+        profileTypeService.calculateWarmingEstimatedConsumption()
       expect(estimatedConsumption).toEqual(mockEstimatedConsumption)
     })
 
     it('should calculate the Warming Corrected Consumption', () => {
-      const correctedConsumption = profileTypeService.calculateWarmingCorrectedConsumption(
-        mockEstimatedConsumption
-      )
+      const correctedConsumption =
+        profileTypeService.calculateWarmingCorrectedConsumption(
+          mockEstimatedConsumption
+        )
       expect(correctedConsumption).toEqual(mockCorrectedConsumption)
     })
     it('should calculate the Warming Month Consumption', async () => {
-      const monthConsumption = await profileTypeService.calculateWarmingMonthConsumption(
-        mockCorrectedConsumption,
-        3
-      )
+      const monthConsumption =
+        await profileTypeService.calculateWarmingMonthConsumption(
+          mockCorrectedConsumption,
+          3
+        )
       expect(monthConsumption).toEqual(mockMonthConsumption)
     })
     it('should get the heating consumption', async () => {
@@ -146,9 +149,8 @@ describe('ProfileType service', () => {
           DateTime.now().year
         )
 
-        const monthCookingConsumption = _profileTypeService.getMonthCookingConsumption(
-          1
-        )
+        const monthCookingConsumption =
+          _profileTypeService.getMonthCookingConsumption(1)
         expect(monthCookingConsumption).toEqual(mockMonthCookingConsumption)
       })
     })
@@ -160,9 +162,8 @@ describe('ProfileType service', () => {
           DateTime.now().year
         )
 
-        const monthElectricSpecificConsumption = _profileTypeService.getMonthElectricSpecificConsumption(
-          1
-        )
+        const monthElectricSpecificConsumption =
+          _profileTypeService.getMonthElectricSpecificConsumption(1)
         expect(monthElectricSpecificConsumption).toEqual(
           mockMonthElectricSpecificConsumption
         )
@@ -175,9 +176,8 @@ describe('ProfileType service', () => {
           mockClient,
           DateTime.now().year
         )
-        const monthColdWaterConsumption = _profileTypeService.getMonthColdWaterConsumption(
-          1
-        )
+        const monthColdWaterConsumption =
+          _profileTypeService.getMonthColdWaterConsumption(1)
         expect(monthColdWaterConsumption).toEqual(mockMonthColdWaterConsumption)
       })
     })
diff --git a/src/services/profileType.service.ts b/src/services/profileType.service.ts
index 5ce0179da5ab78063e0e7706387d1beaf48b64a6..23a52afccfe73abe460ca8975f08eaff18ab0c0d 100644
--- a/src/services/profileType.service.ts
+++ b/src/services/profileType.service.ts
@@ -66,17 +66,17 @@ export default class ProfileTypeService {
   public calculateWarmingCorrectedConsumption(
     estimatedConsumption: number
   ): number {
-    const outsideFacingWalls: OutsideFacingWalls = this.profileType
-      .outsideFacingWalls
+    const outsideFacingWalls: OutsideFacingWalls =
+      this.profileType.outsideFacingWalls
     const housingType: HousingType = this.profileType.housingType
     const floor: Floor = this.profileType.floor
     const constructionYear: ConstructionYear = this.profileType.constructionYear
-    const individualInsulationWork: IndividualInsulationWork[] = this
-      .profileType.individualInsulationWork
-    const hasInstalledVentilation: ThreeChoicesAnswer = this.profileType
-      .hasInstalledVentilation
-    const hasReplacedHeater: ThreeChoicesAnswer = this.profileType
-      .hasReplacedHeater
+    const individualInsulationWork: IndividualInsulationWork[] =
+      this.profileType.individualInsulationWork
+    const hasInstalledVentilation: ThreeChoicesAnswer =
+      this.profileType.hasInstalledVentilation
+    const hasReplacedHeater: ThreeChoicesAnswer =
+      this.profileType.hasReplacedHeater
     const heating = this.profileType.heating
 
     //Apply corrections
@@ -199,9 +199,8 @@ export default class ProfileTypeService {
    */
   public async getMonthHeating(month: number): Promise<number> {
     const estimatedConsumption = this.calculateWarmingEstimatedConsumption()
-    const correctedConsumption = this.calculateWarmingCorrectedConsumption(
-      estimatedConsumption
-    )
+    const correctedConsumption =
+      this.calculateWarmingCorrectedConsumption(estimatedConsumption)
     const monthConsumption = await this.calculateWarmingMonthConsumption(
       correctedConsumption,
       month
@@ -420,10 +419,8 @@ export default class ProfileTypeService {
     fluidType: FluidType,
     month: number
   ): Promise<FluidForecast> {
-    const detailsMonthlyForecast: DetailsMonthlyForecast = await this.getDetailsMonthlyForecast(
-      fluidType,
-      month
-    )
+    const detailsMonthlyForecast: DetailsMonthlyForecast =
+      await this.getDetailsMonthlyForecast(fluidType, month)
     let fluidLoad = 0
 
     Object.values(detailsMonthlyForecast).forEach(load => {
diff --git a/src/services/profileTypeEntity.service.ts b/src/services/profileTypeEntity.service.ts
index f736f6a17be96ae2290243228e58fe1c45b64a12..d059662167a1efdb24bfa79a3e707e54b2fd69ac 100644
--- a/src/services/profileTypeEntity.service.ts
+++ b/src/services/profileTypeEntity.service.ts
@@ -135,12 +135,11 @@ export default class ProfileTypeEntityService {
     const {
       data: [doc],
     }: QueryResult<ProfileType[]> = await this._client.query(query.limitBy(1))
-    const {
-      data: profileTypeEntity,
-    }: QueryResult<ProfileType | null> = await this._client.save({
-      ...doc,
-      ...attributes,
-    })
+    const { data: profileTypeEntity }: QueryResult<ProfileType | null> =
+      await this._client.save({
+        ...doc,
+        ...attributes,
+      })
     if (profileTypeEntity) {
       return this.parseProfileTypeEntityToProfileType(profileTypeEntity)
     }
diff --git a/src/services/queryRunner.service.spec.ts b/src/services/queryRunner.service.spec.ts
index 6a33687dd396695377165746c8cb4a495205ffad..d31b29f14b017a83ed22c399cd5bd589ad1dc8b6 100644
--- a/src/services/queryRunner.service.spec.ts
+++ b/src/services/queryRunner.service.spec.ts
@@ -1139,14 +1139,12 @@ describe('queryRunner service', () => {
         skip: 0,
       }
       mockClient.query.mockResolvedValue(mockQueryResult)
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        TimeStep.DAY,
-        FluidType.ELECTRICITY
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(
+          mockTimePeriod,
+          TimeStep.DAY,
+          FluidType.ELECTRICITY
+        )
       expect(result).toBe(30.33)
     })
 
@@ -1174,14 +1172,12 @@ describe('queryRunner service', () => {
       mockClient.query
         .mockResolvedValueOnce(mockQueryResult)
         .mockResolvedValueOnce(mockQueryResult2)
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        TimeStep.HALF_AN_HOUR,
-        FluidType.ELECTRICITY
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(
+          mockTimePeriod,
+          TimeStep.HALF_AN_HOUR,
+          FluidType.ELECTRICITY
+        )
       expect(result).toBe(7.82)
     })
 
@@ -1209,14 +1205,12 @@ describe('queryRunner service', () => {
       mockClient.query
         .mockResolvedValueOnce(mockQueryResult)
         .mockResolvedValueOnce(mockQueryResult2)
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        TimeStep.HALF_AN_HOUR,
-        FluidType.ELECTRICITY
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(
+          mockTimePeriod,
+          TimeStep.HALF_AN_HOUR,
+          FluidType.ELECTRICITY
+        )
       expect(result).toBe(0)
     })
 
@@ -1230,14 +1224,12 @@ describe('queryRunner service', () => {
         }),
       }
       mockClient.query.mockRejectedValue(new Error())
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        TimeStep.DAY,
-        FluidType.ELECTRICITY
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(
+          mockTimePeriod,
+          TimeStep.DAY,
+          FluidType.ELECTRICITY
+        )
       expect(result).toBeNull()
     })
 
@@ -1250,14 +1242,8 @@ describe('queryRunner service', () => {
           zone: 'utc',
         }),
       }
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        TimeStep.DAY,
-        99
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(mockTimePeriod, TimeStep.DAY, 99)
       expect(result).toBeNull()
     })
 
@@ -1270,14 +1256,12 @@ describe('queryRunner service', () => {
           zone: 'utc',
         }),
       }
-      const result:
-        | number
-        | Dataload
-        | null = await queryRunner.fetchFluidMaxData(
-        mockTimePeriod,
-        99,
-        FluidType.ELECTRICITY
-      )
+      const result: number | Dataload | null =
+        await queryRunner.fetchFluidMaxData(
+          mockTimePeriod,
+          99,
+          FluidType.ELECTRICITY
+        )
       expect(result).toBeNull()
     })
   })
diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts
index 1fae7902ebd897dd3a8f10ddc5d88faa75e9c8b2..7a6ad0e4e6bdbd2787a33aab9f05a4ca14fe0a7c 100644
--- a/src/services/queryRunner.service.ts
+++ b/src/services/queryRunner.service.ts
@@ -23,41 +23,14 @@ import { DataloadState } from 'enum/dataload.enum'
 
 export default class QueryRunner {
   // TODO to be clean up
+  /* eslint-disable camelcase */
   private readonly _max_limit = 1000
   private readonly _default_months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
   private readonly _default_days = [
-    1,
-    2,
-    3,
-    4,
-    5,
-    6,
-    7,
-    8,
-    9,
-    10,
-    11,
-    12,
-    13,
-    14,
-    15,
-    16,
-    17,
-    18,
-    19,
-    20,
-    21,
-    22,
-    23,
-    24,
-    25,
-    26,
-    27,
-    28,
-    29,
-    30,
-    31,
+    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+    22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
   ]
+  /* eslint-enable camelcase */
 
   private readonly _client: Client
 
diff --git a/src/services/quiz.service.ts b/src/services/quiz.service.ts
index 831ab75352afb725269863e231573faf4341bfce..e67f12d15ebbf9c88f22a3210a13589b8c3f9480 100644
--- a/src/services/quiz.service.ts
+++ b/src/services/quiz.service.ts
@@ -148,14 +148,12 @@ export default class QuizService {
     const userQuestions: UserQuestion[] = []
 
     quiz.questions.forEach(question => {
-      const userQuestion: UserQuestion = this.parseQuestionEntityToQuestion(
-        question
-      )
+      const userQuestion: UserQuestion =
+        this.parseQuestionEntityToQuestion(question)
       userQuestions.push(userQuestion)
     })
-    const userCustomQuestion: UserCustomQuestion = this.parseCustomQuestionEntityToCustomQuestion(
-      quiz.customQuestion
-    )
+    const userCustomQuestion: UserCustomQuestion =
+      this.parseCustomQuestionEntityToCustomQuestion(quiz.customQuestion)
 
     const userQuiz: UserQuiz = {
       id: quiz.id,
@@ -311,11 +309,12 @@ export default class QuizService {
     }
     if (customQuestionEntity.type === CustomQuestionType.DATE) {
       //Interval
-      const intervalAsnwer: IntervalAnswer = await this.getMaxLoadOnLastInterval(
-        customQuestionEntity.timeStep,
-        finalInterval,
-        useFluidType
-      )
+      const intervalAsnwer: IntervalAnswer =
+        await this.getMaxLoadOnLastInterval(
+          customQuestionEntity.timeStep,
+          finalInterval,
+          useFluidType
+        )
       answers = this.getAnswersForInterval(
         intervalAsnwer.date,
         customQuestionEntity.timeStep,
@@ -332,7 +331,7 @@ export default class QuizService {
         !customQuestionEntity.singleFluid
       )
       maxLoad = maxLoad === null ? 0 : maxLoad
-      answers = this.getAnswersForNumberValue(maxLoad, unit)
+      answers = this.getAnswersForNumberValue(maxLoad as number, unit)
     } else {
       //average
       const averageLoad: number = await this.getAverageOnGivenPeriod(
@@ -569,8 +568,7 @@ export default class QuizService {
         }
         return [
           {
-            answerLabel: rightDate.toLocaleString({
-              locale: 'fr-FR',
+            answerLabel: rightDate.setLocale('fr-FR').toLocaleString({
               month: 'long',
               year: 'numeric',
             }),
@@ -579,8 +577,8 @@ export default class QuizService {
           {
             answerLabel: rightDate
               .plus({ month: wrongAnswer[0] })
+              .setLocale('fr-FR')
               .toLocaleString({
-                locale: 'fr-FR',
                 month: 'long',
                 year: 'numeric',
               }),
@@ -589,8 +587,8 @@ export default class QuizService {
           {
             answerLabel: rightDate
               .plus({ month: wrongAnswer[1] })
+              .setLocale('fr-FR')
               .toLocaleString({
-                locale: 'fr-FR',
                 month: 'long',
                 year: 'numeric',
               }),
@@ -607,8 +605,7 @@ export default class QuizService {
         }
         return [
           {
-            answerLabel: rightDate.toLocaleString({
-              locale: 'fr-FR',
+            answerLabel: rightDate.setLocale('fr-FR').toLocaleString({
               month: 'long',
               day: 'numeric',
               weekday: 'long',
@@ -618,8 +615,8 @@ export default class QuizService {
           {
             answerLabel: rightDate
               .plus({ day: wrongAnswer[0] })
+              .setLocale('fr-FR')
               .toLocaleString({
-                locale: 'fr-FR',
                 month: 'long',
                 day: 'numeric',
                 weekday: 'long',
@@ -629,8 +626,8 @@ export default class QuizService {
           {
             answerLabel: rightDate
               .plus({ day: wrongAnswer[1] })
+              .setLocale('fr-FR')
               .toLocaleString({
-                locale: 'fr-FR',
                 month: 'long',
                 day: 'numeric',
                 weekday: 'long',
diff --git a/src/services/terms.service.spec.ts b/src/services/terms.service.spec.ts
index 6eeeba252479fcd575d3aab97f6cf9ee4c52dcee..2e84053ab5f1cae8aae6e07e3aacee54de4f49e1 100644
--- a/src/services/terms.service.spec.ts
+++ b/src/services/terms.service.spec.ts
@@ -2,6 +2,7 @@ import { QueryResult } from 'cozy-client'
 import { DateTime } from 'luxon'
 import { Term } from 'models'
 import mockClient from '../../tests/__mocks__/client'
+import mockConfig from '../../tests/__mocks__/mockConfig.mock'
 import {
   mockOutdatedTerm,
   mockTermsData,
@@ -14,6 +15,9 @@ const localSpy = jest.spyOn(DateTime, 'local')
 
 const termsService = new TermsService(mockClient)
 
+jest.mock('../constants/config.json', () => mockConfig, {
+  virtual: true,
+})
 describe('TermsService service', () => {
   it('should get the last term', async () => {
     const mockQueryResult: QueryResult<Term[]> = {
diff --git a/src/services/terms.service.ts b/src/services/terms.service.ts
index 2fea47dfd79bf0bdbd9aca89a502a72f0256dacf..11b578dd1307498fc755385fce6ee981bd818afe 100644
--- a/src/services/terms.service.ts
+++ b/src/services/terms.service.ts
@@ -79,9 +79,8 @@ export default class TermsService {
         }),
         version: config.termsVersion,
       }
-      const {
-        data: createdTerm,
-      }: QueryResult<Term> = await this._client.create(TERMS_DOCTYPE, newTerm)
+      const { data: createdTerm }: QueryResult<Term> =
+        await this._client.create(TERMS_DOCTYPE, newTerm)
       return createdTerm
     } catch (error) {
       console.log('Error creating new term: ', error)
diff --git a/src/services/triggers.service.spec.ts b/src/services/triggers.service.spec.ts
index 4bf034287a3abbf692655727aa9f10d26dfb9e40..46ff93de25401813253bd16e18f446317ffc9414 100644
--- a/src/services/triggers.service.spec.ts
+++ b/src/services/triggers.service.spec.ts
@@ -103,9 +103,8 @@ describe('TriggerService service', () => {
         },
       }
       mockClient.getStackClient().fetchJSON.mockResolvedValueOnce(mockResult)
-      const result: TriggerState | null = await triggerService.fetchTriggerState(
-        triggersData[0]
-      )
+      const result: TriggerState | null =
+        await triggerService.fetchTriggerState(triggersData[0])
       expect(result).toEqual(triggerStateData)
     })
 
@@ -115,9 +114,8 @@ describe('TriggerService service', () => {
         data: { attributes: { current_state: null } },
       }
       mockClient.getStackClient().fetchJSON.mockResolvedValueOnce(mockResult)
-      const result: TriggerState | null = await triggerService.fetchTriggerState(
-        triggersData[0]
-      )
+      const result: TriggerState | null =
+        await triggerService.fetchTriggerState(triggersData[0])
       expect(result).toBe(null)
     })
 
diff --git a/src/services/usageEvent.service.ts b/src/services/usageEvent.service.ts
index 09f5bb92927262523542286e3abd1131ff4f7816..4297186503a3d73d9c62ab710aa0b6f5e749c4c4 100644
--- a/src/services/usageEvent.service.ts
+++ b/src/services/usageEvent.service.ts
@@ -140,9 +140,8 @@ export default class UsageEventService {
     const query: QueryDefinition = Q(USAGEEVENT_DOCTYPE)
       .where(filterParams)
       .sortBy([{ eventDate: desc ? 'desc' : 'asc' }])
-    const {
-      data: usageEventEntities,
-    }: QueryResult<UsageEventEntity[]> = await client.query(query)
+    const { data: usageEventEntities }: QueryResult<UsageEventEntity[]> =
+      await client.query(query)
     const usageEvents: UsageEvent[] = usageEventEntities.map(
       (usageEventEntity: UsageEventEntity) => {
         return this.parseUsageEventEntityToUsageEvent(usageEventEntity)
diff --git a/src/store/chart/chart.reducer.ts b/src/store/chart/chart.reducer.ts
index 9830e6568b21278bfee5d2854730a12e906e815b..51e15ffb123a7bff4ce1281e19950161ce68d4a5 100644
--- a/src/store/chart/chart.reducer.ts
+++ b/src/store/chart/chart.reducer.ts
@@ -13,11 +13,9 @@ import { TimeStep } from 'enum/timeStep.enum'
 import { DateTime } from 'luxon'
 
 const initialState: ChartState = {
-  selectedDate: DateTime.local()
-    .endOf('minute')
-    .setZone('utc', {
-      keepLocalTime: true,
-    }),
+  selectedDate: DateTime.local().endOf('minute').setZone('utc', {
+    keepLocalTime: true,
+  }),
   currentTimeStep: TimeStep.WEEK,
   currentIndex: 0,
   currentDatachart: { actualData: [], comparisonData: null },
diff --git a/src/store/profileEcogesture/profileEcogesture.actions.ts b/src/store/profileEcogesture/profileEcogesture.actions.ts
index ccf17080f183958a421ebb0008c7879acbcd16dc..67379dd86b762c40fc032b2d5f149b45b33b7aad 100644
--- a/src/store/profileEcogesture/profileEcogesture.actions.ts
+++ b/src/store/profileEcogesture/profileEcogesture.actions.ts
@@ -39,9 +39,8 @@ export function updateProfileEcogesture(upd: Partial<ProfileEcogesture>): any {
     { client }: { client: Client }
   ) => {
     const profileEcogestureService = new ProfileEcogestureService(client)
-    const updatedProfileEcogesture = await profileEcogestureService.updateProfileEcogesture(
-      upd
-    )
+    const updatedProfileEcogesture =
+      await profileEcogestureService.updateProfileEcogesture(upd)
     if (updatedProfileEcogesture) {
       dispatch(updateProfileEcogestureSuccess(updatedProfileEcogesture))
     }
diff --git a/src/styles/base/_typo-variables.scss b/src/styles/base/_typo-variables.scss
index 117c9b67f9142fd4877a0d02045501df03414def..99b3104bb00939b4a13c54c02b92418985ba8990 100644
--- a/src/styles/base/_typo-variables.scss
+++ b/src/styles/base/_typo-variables.scss
@@ -2,4 +2,4 @@ $text-font: Lato, sans-serif;
 
 $text-size: '10' 0.625rem, '14' 0.875rem, '15' 0.938rem, '16' 1rem,
   '18' 1.125rem, '19' 1.188rem, '20' 1.25rem, '21' 1.313rem, '22' 1.375rem,
-  '24' 1.5rem, '28' 1.75rem, '36' 2.25rem;
+  '24' 1.5rem, '26' 1.625rem, '28' 1.75rem, '36' 2.25rem;
diff --git a/src/styles/components/_dialog.scss b/src/styles/components/_dialog.scss
index 46650413df5aae5d31bad6a80dfb57df8bd3b6d1..c5e3008f1bf428406068623344daa5e66df26316 100644
--- a/src/styles/components/_dialog.scss
+++ b/src/styles/components/_dialog.scss
@@ -35,6 +35,9 @@ div.modal-paper {
   &.blue-border {
     border: 1px solid $blue-40;
   }
+  &.blue-light-border {
+    border: 1px solid $blue-light;
+  }
   &.yellow-border {
     border: 1px solid $gold-40;
   }
diff --git a/src/styles/index.css b/src/styles/index.css
index f6c38b90351ff7c47bba17d78ceddf621c575ef5..12bc8275f8f7f3920e5f52331cefe9b3d1f9c663 100644
--- a/src/styles/index.css
+++ b/src/styles/index.css
@@ -1,7 +1,7 @@
 /* Cozy UI utilities classes */
-@import url(~cozy-ui/dist/cozy-ui.min.css);
+@import '~cozy-ui/dist/cozy-ui.min.css';
 /* Cozy UI React components styles */
-@import url(~cozy-ui/transpiled/react/stylesheet.css);
+@import '~cozy-ui/transpiled/react/stylesheet.css';
 /* App styles */
 /** BLACK **/
 /** RED **/
@@ -14,61 +14,62 @@
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-@import url("https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap");
-/* line 5, src/styles/base/_layout.scss */
+@import url('https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap');
 html {
-  background: #1b1c22; }
+  background: #1b1c22;
+}
 
-/* line 9, src/styles/base/_layout.scss */
 body {
   background: #1b1c22;
-  overflow: unset !important; }
+  overflow: unset !important;
+}
 
-/* line 14, src/styles/base/_layout.scss */
 .column {
   display: flex;
-  flex-direction: column; }
+  flex-direction: column;
+}
 
-/* line 19, src/styles/base/_layout.scss */
 .row {
   display: flex;
-  flex-direction: row; }
+  flex-direction: row;
+}
 
-/* line 24, src/styles/base/_layout.scss */
 .cozy-bar {
   width: 100%;
   display: flex;
   align-items: center;
   justify-content: center;
-  margin-left: 0; }
-  @media only screen and (max-width: 768px) {
-    /* line 24, src/styles/base/_layout.scss */
-    .cozy-bar {
-      margin-left: 1.25rem; } }
+  margin-left: 0;
+}
+@media only screen and (max-width: 768px) {
+  .cozy-bar {
+    margin-left: 1.25rem;
+  }
+}
 
-/* line 35, src/styles/base/_layout.scss */
 [role='banner'] .coz-bar-container {
-  background-color: #ffffff; }
-  @media only screen and (max-width: 768px) {
-    /* line 35, src/styles/base/_layout.scss */
-    [role='banner'] .coz-bar-container {
-      padding: 0 0 0 0;
-      background-color: unset; } }
-
-/* line 43, src/styles/base/_layout.scss */
+  background-color: #ffffff;
+}
+@media only screen and (max-width: 768px) {
+  [role='banner'] .coz-bar-container {
+    padding: 0 0 0 0;
+    background-color: unset;
+  }
+}
+
 .coz-bar-wrapper {
   box-shadow: unset !important;
-  background: unset !important; }
+  background: unset !important;
+}
 
-/* line 47, src/styles/base/_layout.scss */
 .cv-button {
-  width: 4.25rem; }
+  width: 4.25rem;
+}
 
-/* line 50, src/styles/base/_layout.scss */
 .coz-label {
-  color: #32363f; }
+  color: #32363f;
+}
 
-/* line 54, src/styles/base/_layout.scss */
 .header {
   display: flex;
   align-items: center;
@@ -78,65 +79,73 @@ body {
   z-index: 18;
   position: fixed;
   top: 48px;
-  left: 0; }
-  @media only screen and (max-width: 768px) {
-    /* line 54, src/styles/base/_layout.scss */
-    .header {
-      top: 0; } }
-  /* line 67, src/styles/base/_layout.scss */
-  .header .header-top {
-    background: radial-gradient(74.83% 76.97% at 50% 13.64%, #343641 0%, #1b1c22 100%);
-    width: 100%; }
-    /* line 74, src/styles/base/_layout.scss */
-    .header .header-top .header-text {
-      padding: 0 1rem 1rem 1rem;
-      color: #e0e0e0; }
-  /* line 79, src/styles/base/_layout.scss */
+  left: 0;
+}
+@media only screen and (max-width: 768px) {
+  .header {
+    top: 0;
+  }
+}
+.header .header-top {
+  background: radial-gradient(
+    74.83% 76.97% at 50% 13.64%,
+    #343641 0%,
+    #1b1c22 100%
+  );
+  width: 100%;
+}
+.header .header-top .header-text {
+  padding: 0 1rem 1rem 1rem;
+  color: #e0e0e0;
+}
+.header .header-content {
+  margin: 0 0 0 220px;
+  display: flex;
+  flex-direction: column;
+}
+@media only screen and (max-width: 1023px) {
   .header .header-content {
-    margin: 0 0 0 220px;
-    display: flex;
-    flex-direction: column; }
-    @media only screen and (max-width: 1023px) {
-      /* line 79, src/styles/base/_layout.scss */
-      .header .header-content {
-        margin: 0; } }
-    @media only screen and (max-width: 768px) {
-      /* line 79, src/styles/base/_layout.scss */
-      .header .header-content {
-        margin: 60px 0 0 0; } }
-    /* line 89, src/styles/base/_layout.scss */
-    .header .header-content .header-content-top {
-      display: flex;
-      flex-direction: row; }
-      /* line 92, src/styles/base/_layout.scss */
-      .header .header-content .header-content-top.header-content-top-right {
-        justify-content: flex-end; }
-      /* line 95, src/styles/base/_layout.scss */
-      .header .header-content .header-content-top .header-text {
-        padding: 2rem 1rem;
-        flex: 1; }
-      /* line 99, src/styles/base/_layout.scss */
-      .header .header-content .header-content-top .header-text-desktop {
-        display: flex;
-        flex: 1;
-        padding: 2rem 1.25rem;
-        color: #e0e0e0; }
-      /* line 105, src/styles/base/_layout.scss */
-      .header .header-content .header-content-top .header-back-button {
-        padding: 0 0.75rem; }
-      @media only screen and (max-width: 768px) {
-        /* line 109, src/styles/base/_layout.scss */
-        .header .header-content .header-content-top .header-text {
-          padding: 0 1rem 1rem 1rem;
-          color: #e0e0e0; }
-        /* line 113, src/styles/base/_layout.scss */
-        .header .header-content .header-content-top .header-text-desktop {
-          display: none; }
-        /* line 116, src/styles/base/_layout.scss */
-        .header .header-content .header-content-top .header-feedbacks-button {
-          display: none; } }
-
-/* line 124, src/styles/base/_layout.scss */
+    margin: 0;
+  }
+}
+@media only screen and (max-width: 768px) {
+  .header .header-content {
+    margin: 60px 0 0 0;
+  }
+}
+.header .header-content .header-content-top {
+  display: flex;
+  flex-direction: row;
+}
+.header .header-content .header-content-top.header-content-top-right {
+  justify-content: flex-end;
+}
+.header .header-content .header-content-top .header-text {
+  padding: 2rem 1rem;
+  flex: 1;
+}
+.header .header-content .header-content-top .header-text-desktop {
+  display: flex;
+  flex: 1;
+  padding: 2rem 1.25rem;
+  color: #e0e0e0;
+}
+.header .header-content .header-content-top .header-back-button {
+  padding: 0 0.75rem;
+}
+@media only screen and (max-width: 768px) {
+  .header .header-content .header-content-top .header-text {
+    padding: 0 1rem 1rem 1rem;
+    color: #e0e0e0;
+  }
+  .header .header-content .header-content-top .header-text-desktop {
+    display: none;
+  }
+  .header .header-content .header-content-top .header-feedbacks-button {
+    display: none;
+  }
+}
+
 .content-view-loading {
   height: 80vh;
   width: 100%;
@@ -144,31 +153,32 @@ body {
   flex-direction: column;
   justify-content: center;
   align-items: center;
-  color: #e0e0e0; }
-  /* line 132, src/styles/base/_layout.scss */
-  .content-view-loading .content-view-loading-text {
-    padding-top: 1rem;
-    margin: 0 2rem;
-    text-align: center; }
-  /* line 137, src/styles/base/_layout.scss */
-  .content-view-loading .content-view-loading-button {
-    max-width: 50vw;
-    margin-top: 1rem; }
-
-/* line 143, src/styles/base/_layout.scss */
+  color: #e0e0e0;
+}
+.content-view-loading .content-view-loading-text {
+  padding-top: 1rem;
+  margin: 0 2rem;
+  text-align: center;
+}
+.content-view-loading .content-view-loading-button {
+  max-width: 50vw;
+  margin-top: 1rem;
+}
+
 [role='main'] {
   /* width */
   /* Track */
-  /* Handle */ }
-  /* line 145, src/styles/base/_layout.scss */
-  [role='main']::-webkit-scrollbar {
-    width: 10px; }
-  /* line 149, src/styles/base/_layout.scss */
-  [role='main']::-webkit-scrollbar-track {
-    background: #3e4045; }
-  /* line 153, src/styles/base/_layout.scss */
-  [role='main']::-webkit-scrollbar-thumb {
-    background: #6f7074; }
+  /* Handle */
+}
+[role='main']::-webkit-scrollbar {
+  width: 10px;
+}
+[role='main']::-webkit-scrollbar-track {
+  background: #3e4045;
+}
+[role='main']::-webkit-scrollbar-thumb {
+  background: #6f7074;
+}
 
 /** BLACK **/
 /** RED **/
@@ -192,11 +202,10 @@ body {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 5, src/styles/base/_typography.scss */
 * {
-  font-family: Lato, sans-serif; }
+  font-family: Lato, sans-serif;
+}
 
-/* line 9, src/styles/base/_typography.scss */
 h1,
 h2,
 h3,
@@ -205,18 +214,18 @@ h5,
 h6,
 p {
   color: #a0a0a0;
-  font-family: Lato, sans-serif; }
+  font-family: Lato, sans-serif;
+}
 
-/* line 20, src/styles/base/_typography.scss */
 .home-title {
   font-size: 1rem;
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   line-height: 120%;
-  text-transform: uppercase; }
+  text-transform: uppercase;
+}
 
-/* line 29, src/styles/base/_typography.scss */
 .app-title {
   font-family: Lato, sans-serif;
   font-style: normal;
@@ -226,430 +235,620 @@ p {
   text-align: center;
   letter-spacing: 0.15px;
   color: #e0e0e0;
-  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07); }
+  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);
+}
 
-/* line 41, src/styles/base/_typography.scss */
 .isBuilding {
   color: #e3b82a;
-  margin-left: .8rem;
-  margin-right: .8rem; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-10, .text-10-normal, .text-10-normal-uppercase, .text-10-normal-150, .text-10-bold, .text-10-bold-uppercase, .text-10-bold-capitalize, .text-10-italic {
+  margin-left: 0.8rem;
+  margin-right: 0.8rem;
+}
+
+.text-10,
+.text-10-italic,
+.text-10-bold,
+.text-10-bold-capitalize,
+.text-10-bold-uppercase,
+.text-10-normal,
+.text-10-normal-150,
+.text-10-normal-uppercase {
   font-style: normal;
   font-size: 0.625rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-10-normal, .text-10-normal-uppercase, .text-10-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-10-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-10-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-10-bold, .text-10-bold-uppercase, .text-10-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-10-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-10-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-10-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-14, .text-14-normal, .text-14-normal-uppercase, .text-14-normal-150, .text-14-bold, .text-14-bold-uppercase, .text-14-bold-capitalize, .text-14-italic {
+  line-height: 120%;
+}
+.text-10-normal,
+.text-10-normal-150,
+.text-10-normal-uppercase {
+  font-weight: normal;
+}
+.text-10-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-10-normal-150 {
+  line-height: 150%;
+}
+.text-10-bold,
+.text-10-bold-capitalize,
+.text-10-bold-uppercase {
+  font-weight: 700;
+}
+.text-10-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-10-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-10-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-14,
+.text-14-italic,
+.text-14-bold,
+.text-14-bold-capitalize,
+.text-14-bold-uppercase,
+.text-14-normal,
+.text-14-normal-150,
+.text-14-normal-uppercase {
   font-style: normal;
   font-size: 0.875rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-14-normal, .text-14-normal-uppercase, .text-14-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-14-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-14-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-14-bold, .text-14-bold-uppercase, .text-14-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-14-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-14-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-14-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-15, .text-15-normal, .text-15-normal-uppercase, .text-15-normal-150, .text-15-bold, .text-15-bold-uppercase, .text-15-bold-capitalize, .text-15-italic {
+  line-height: 120%;
+}
+.text-14-normal,
+.text-14-normal-150,
+.text-14-normal-uppercase {
+  font-weight: normal;
+}
+.text-14-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-14-normal-150 {
+  line-height: 150%;
+}
+.text-14-bold,
+.text-14-bold-capitalize,
+.text-14-bold-uppercase {
+  font-weight: 700;
+}
+.text-14-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-14-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-14-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-15,
+.text-15-italic,
+.text-15-bold,
+.text-15-bold-capitalize,
+.text-15-bold-uppercase,
+.text-15-normal,
+.text-15-normal-150,
+.text-15-normal-uppercase {
   font-style: normal;
   font-size: 0.938rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-15-normal, .text-15-normal-uppercase, .text-15-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-15-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-15-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-15-bold, .text-15-bold-uppercase, .text-15-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-15-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-15-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-15-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-16, .text-16-normal, .text-16-normal-uppercase, .text-16-normal-150, .text-16-bold, .text-16-bold-uppercase, .text-16-bold-capitalize, .text-16-italic {
+  line-height: 120%;
+}
+.text-15-normal,
+.text-15-normal-150,
+.text-15-normal-uppercase {
+  font-weight: normal;
+}
+.text-15-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-15-normal-150 {
+  line-height: 150%;
+}
+.text-15-bold,
+.text-15-bold-capitalize,
+.text-15-bold-uppercase {
+  font-weight: 700;
+}
+.text-15-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-15-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-15-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-16,
+.text-16-italic,
+.text-16-bold,
+.text-16-bold-capitalize,
+.text-16-bold-uppercase,
+.text-16-normal,
+.text-16-normal-150,
+.text-16-normal-uppercase {
   font-style: normal;
   font-size: 1rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-16-normal, .text-16-normal-uppercase, .text-16-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-16-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-16-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-16-bold, .text-16-bold-uppercase, .text-16-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-16-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-16-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-16-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-18, .text-18-normal, .text-18-normal-uppercase, .text-18-normal-150, .text-18-bold, .text-18-bold-uppercase, .text-18-bold-capitalize, .text-18-italic {
+  line-height: 120%;
+}
+.text-16-normal,
+.text-16-normal-150,
+.text-16-normal-uppercase {
+  font-weight: normal;
+}
+.text-16-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-16-normal-150 {
+  line-height: 150%;
+}
+.text-16-bold,
+.text-16-bold-capitalize,
+.text-16-bold-uppercase {
+  font-weight: 700;
+}
+.text-16-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-16-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-16-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-18,
+.text-18-italic,
+.text-18-bold,
+.text-18-bold-capitalize,
+.text-18-bold-uppercase,
+.text-18-normal,
+.text-18-normal-150,
+.text-18-normal-uppercase {
   font-style: normal;
   font-size: 1.125rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-18-normal, .text-18-normal-uppercase, .text-18-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-18-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-18-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-18-bold, .text-18-bold-uppercase, .text-18-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-18-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-18-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-18-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-19, .text-19-normal, .text-19-normal-uppercase, .text-19-normal-150, .text-19-bold, .text-19-bold-uppercase, .text-19-bold-capitalize, .text-19-italic {
+  line-height: 120%;
+}
+.text-18-normal,
+.text-18-normal-150,
+.text-18-normal-uppercase {
+  font-weight: normal;
+}
+.text-18-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-18-normal-150 {
+  line-height: 150%;
+}
+.text-18-bold,
+.text-18-bold-capitalize,
+.text-18-bold-uppercase {
+  font-weight: 700;
+}
+.text-18-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-18-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-18-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-19,
+.text-19-italic,
+.text-19-bold,
+.text-19-bold-capitalize,
+.text-19-bold-uppercase,
+.text-19-normal,
+.text-19-normal-150,
+.text-19-normal-uppercase {
   font-style: normal;
   font-size: 1.188rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-19-normal, .text-19-normal-uppercase, .text-19-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-19-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-19-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-19-bold, .text-19-bold-uppercase, .text-19-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-19-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-19-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-19-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-20, .text-20-normal, .text-20-normal-uppercase, .text-20-normal-150, .text-20-bold, .text-20-bold-uppercase, .text-20-bold-capitalize, .text-20-italic {
+  line-height: 120%;
+}
+.text-19-normal,
+.text-19-normal-150,
+.text-19-normal-uppercase {
+  font-weight: normal;
+}
+.text-19-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-19-normal-150 {
+  line-height: 150%;
+}
+.text-19-bold,
+.text-19-bold-capitalize,
+.text-19-bold-uppercase {
+  font-weight: 700;
+}
+.text-19-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-19-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-19-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-20,
+.text-20-italic,
+.text-20-bold,
+.text-20-bold-capitalize,
+.text-20-bold-uppercase,
+.text-20-normal,
+.text-20-normal-150,
+.text-20-normal-uppercase {
   font-style: normal;
   font-size: 1.25rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-20-normal, .text-20-normal-uppercase, .text-20-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-20-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-20-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-20-bold, .text-20-bold-uppercase, .text-20-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-20-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-20-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-20-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-21, .text-21-normal, .text-21-normal-uppercase, .text-21-normal-150, .text-21-bold, .text-21-bold-uppercase, .text-21-bold-capitalize, .text-21-italic {
+  line-height: 120%;
+}
+.text-20-normal,
+.text-20-normal-150,
+.text-20-normal-uppercase {
+  font-weight: normal;
+}
+.text-20-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-20-normal-150 {
+  line-height: 150%;
+}
+.text-20-bold,
+.text-20-bold-capitalize,
+.text-20-bold-uppercase {
+  font-weight: 700;
+}
+.text-20-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-20-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-20-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-21,
+.text-21-italic,
+.text-21-bold,
+.text-21-bold-capitalize,
+.text-21-bold-uppercase,
+.text-21-normal,
+.text-21-normal-150,
+.text-21-normal-uppercase {
   font-style: normal;
   font-size: 1.313rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-21-normal, .text-21-normal-uppercase, .text-21-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-21-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-21-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-21-bold, .text-21-bold-uppercase, .text-21-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-21-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-21-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-21-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-22, .text-22-normal, .text-22-normal-uppercase, .text-22-normal-150, .text-22-bold, .text-22-bold-uppercase, .text-22-bold-capitalize, .text-22-italic {
+  line-height: 120%;
+}
+.text-21-normal,
+.text-21-normal-150,
+.text-21-normal-uppercase {
+  font-weight: normal;
+}
+.text-21-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-21-normal-150 {
+  line-height: 150%;
+}
+.text-21-bold,
+.text-21-bold-capitalize,
+.text-21-bold-uppercase {
+  font-weight: 700;
+}
+.text-21-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-21-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-21-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-22,
+.text-22-italic,
+.text-22-bold,
+.text-22-bold-capitalize,
+.text-22-bold-uppercase,
+.text-22-normal,
+.text-22-normal-150,
+.text-22-normal-uppercase {
   font-style: normal;
   font-size: 1.375rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-22-normal, .text-22-normal-uppercase, .text-22-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-22-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-22-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-22-bold, .text-22-bold-uppercase, .text-22-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-22-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-22-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-22-italic {
-    font-style: italic;
-    font-weight: normal; }
-
-/* line 48, src/styles/base/_typography.scss */
-.text-24, .text-24-normal, .text-24-normal-uppercase, .text-24-normal-150, .text-24-bold, .text-24-bold-uppercase, .text-24-bold-capitalize, .text-24-italic {
+  line-height: 120%;
+}
+.text-22-normal,
+.text-22-normal-150,
+.text-22-normal-uppercase {
+  font-weight: normal;
+}
+.text-22-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-22-normal-150 {
+  line-height: 150%;
+}
+.text-22-bold,
+.text-22-bold-capitalize,
+.text-22-bold-uppercase {
+  font-weight: 700;
+}
+.text-22-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-22-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-22-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-24,
+.text-24-italic,
+.text-24-bold,
+.text-24-bold-capitalize,
+.text-24-bold-uppercase,
+.text-24-normal,
+.text-24-normal-150,
+.text-24-normal-uppercase {
   font-style: normal;
   font-size: 1.5rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-24-normal, .text-24-normal-uppercase, .text-24-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-24-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-24-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-24-bold, .text-24-bold-uppercase, .text-24-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-24-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-24-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-24-italic {
-    font-style: italic;
-    font-weight: normal; }
+  line-height: 120%;
+}
+/* line 52, src/styles/base/_typography.scss */
+.text-24-normal,
+.text-24-normal-uppercase,
+.text-24-normal-150 {
+  font-weight: normal;
+}
+/* line 55, src/styles/base/_typography.scss */
+.text-24-normal-uppercase {
+  text-transform: uppercase;
+}
+/* line 59, src/styles/base/_typography.scss */
+.text-24-normal-150 {
+  line-height: 150%;
+}
+/* line 64, src/styles/base/_typography.scss */
+.text-24-bold,
+.text-24-bold-uppercase,
+.text-24-bold-capitalize {
+  font-weight: 700;
+}
+/* line 67, src/styles/base/_typography.scss */
+.text-24-bold-uppercase {
+  text-transform: uppercase;
+}
+/* line 71, src/styles/base/_typography.scss */
+.text-24-bold-capitalize {
+  text-transform: capitalize;
+}
+/* line 76, src/styles/base/_typography.scss */
+.text-24-italic {
+  font-style: italic;
+  font-weight: normal;
+}
 
 /* line 48, src/styles/base/_typography.scss */
-.text-28, .text-28-normal, .text-28-normal-uppercase, .text-28-normal-150, .text-28-bold, .text-28-bold-uppercase, .text-28-bold-capitalize, .text-28-italic {
+.text-26,
+.text-26-normal,
+.text-26-normal-uppercase,
+.text-26-normal-150,
+.text-26-bold,
+.text-26-bold-uppercase,
+.text-26-bold-capitalize,
+.text-26-italic {
   font-style: normal;
-  font-size: 1.75rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-28-normal, .text-28-normal-uppercase, .text-28-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-28-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-28-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-28-bold, .text-28-bold-uppercase, .text-28-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-28-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-28-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-28-italic {
-    font-style: italic;
-    font-weight: normal; }
+  font-size: 1.625rem;
+  line-height: 120%;
+}
+/* line 52, src/styles/base/_typography.scss */
+.text-26-normal,
+.text-26-normal-uppercase,
+.text-26-normal-150 {
+  font-weight: normal;
+}
+/* line 55, src/styles/base/_typography.scss */
+.text-26-normal-uppercase {
+  text-transform: uppercase;
+}
+/* line 59, src/styles/base/_typography.scss */
+.text-26-normal-150 {
+  line-height: 150%;
+}
+/* line 64, src/styles/base/_typography.scss */
+.text-26-bold,
+.text-26-bold-uppercase,
+.text-26-bold-capitalize {
+  font-weight: 700;
+}
+/* line 67, src/styles/base/_typography.scss */
+.text-26-bold-uppercase {
+  text-transform: uppercase;
+}
+/* line 71, src/styles/base/_typography.scss */
+.text-26-bold-capitalize {
+  text-transform: capitalize;
+}
+/* line 76, src/styles/base/_typography.scss */
+.text-26-italic {
+  font-style: italic;
+  font-weight: normal;
+}
 
 /* line 48, src/styles/base/_typography.scss */
-.text-36, .text-36-normal, .text-36-normal-uppercase, .text-36-normal-150, .text-36-bold, .text-36-bold-uppercase, .text-36-bold-capitalize, .text-36-italic {
+.text-28,
+.text-28-normal,
+.text-28-normal-uppercase,
+.text-28-normal-150,
+.text-28-bold,
+.text-28-bold-uppercase,
+.text-28-bold-capitalize,
+.text-28-italic {
+  font-style: normal;
+  font-size: 1.75rem;
+  line-height: 120%;
+}
+.text-28-normal,
+.text-28-normal-150,
+.text-28-normal-uppercase {
+  font-weight: normal;
+}
+.text-28-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-28-normal-150 {
+  line-height: 150%;
+}
+.text-28-bold,
+.text-28-bold-capitalize,
+.text-28-bold-uppercase {
+  font-weight: 700;
+}
+.text-28-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-28-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-28-italic {
+  font-style: italic;
+  font-weight: normal;
+}
+
+.text-36,
+.text-36-italic,
+.text-36-bold,
+.text-36-bold-capitalize,
+.text-36-bold-uppercase,
+.text-36-normal,
+.text-36-normal-150,
+.text-36-normal-uppercase {
   font-style: normal;
   font-size: 2.25rem;
-  line-height: 120%; }
-  /* line 52, src/styles/base/_typography.scss */
-  .text-36-normal, .text-36-normal-uppercase, .text-36-normal-150 {
-    font-weight: normal; }
-    /* line 55, src/styles/base/_typography.scss */
-    .text-36-normal-uppercase {
-      text-transform: uppercase; }
-    /* line 59, src/styles/base/_typography.scss */
-    .text-36-normal-150 {
-      line-height: 150%; }
-  /* line 64, src/styles/base/_typography.scss */
-  .text-36-bold, .text-36-bold-uppercase, .text-36-bold-capitalize {
-    font-weight: 700; }
-    /* line 67, src/styles/base/_typography.scss */
-    .text-36-bold-uppercase {
-      text-transform: uppercase; }
-    /* line 71, src/styles/base/_typography.scss */
-    .text-36-bold-capitalize {
-      text-transform: capitalize; }
-  /* line 76, src/styles/base/_typography.scss */
-  .text-36-italic {
-    font-style: italic;
-    font-weight: normal; }
+  line-height: 120%;
+}
+.text-36-normal,
+.text-36-normal-150,
+.text-36-normal-uppercase {
+  font-weight: normal;
+}
+.text-36-normal-uppercase {
+  text-transform: uppercase;
+}
+.text-36-normal-150 {
+  line-height: 150%;
+}
+.text-36-bold,
+.text-36-bold-capitalize,
+.text-36-bold-uppercase {
+  font-weight: 700;
+}
+.text-36-bold-uppercase {
+  text-transform: uppercase;
+}
+.text-36-bold-capitalize {
+  text-transform: capitalize;
+}
+.text-36-italic {
+  font-style: italic;
+  font-weight: normal;
+}
 
 /* Card */
-/* line 85, src/styles/base/_typography.scss */
 .card-title-on {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   font-size: 1.125rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
-/* line 93, src/styles/base/_typography.scss */
 .card-text-bold {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: bold;
   font-size: 1rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
-/* line 101, src/styles/base/_typography.scss */
 .card-result {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: 900;
   font-size: 1.75rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
-/* line 109, src/styles/base/_typography.scss */
 .card-indicator {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   font-size: 1rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
-/* line 117, src/styles/base/_typography.scss */
 .card-text {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   font-size: 1rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
 /* Chart */
-/* line 127, src/styles/base/_typography.scss */
 .chart-ticks-x-text {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   font-size: 1rem;
-  line-height: 120%; }
-  @media only screen and (max-width: 768px) {
-    /* line 127, src/styles/base/_typography.scss */
-    .chart-ticks-x-text {
-      font-size: 0.685rem; } }
+  line-height: 120%;
+}
+@media only screen and (max-width: 768px) {
+  .chart-ticks-x-text {
+    font-size: 0.685rem;
+  }
+}
 
-/* line 137, src/styles/base/_typography.scss */
 .chart-ticks-y-text {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: normal;
   font-size: 0.9rem;
-  line-height: 120%; }
-  @media only screen and (max-width: 768px) {
-    /* line 137, src/styles/base/_typography.scss */
-    .chart-ticks-y-text {
-      font-size: 0.75rem; } }
+  line-height: 120%;
+}
+@media only screen and (max-width: 768px) {
+  .chart-ticks-y-text {
+    font-size: 0.75rem;
+  }
+}
 
 /* Cozy bar */
-/* line 149, src/styles/base/_typography.scss */
 .cozybar {
   font-family: Lato, sans-serif;
   font-style: normal;
   font-weight: bold;
   font-size: 1.3125rem;
   line-height: 120%;
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
 /** BLACK **/
 /** RED **/
@@ -662,45 +861,44 @@ p {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 4, src/styles/components/_barchart.scss */
 .axis {
-  color: #7b7b7b; }
-  /* line 6, src/styles/components/_barchart.scss */
-  .axis .tick-text {
-    fill: #7b7b7b; }
-    /* line 8, src/styles/components/_barchart.scss */
-    .axis .tick-text.tick-text-selected {
-      fill: #e0e0e0; }
-  /* line 12, src/styles/components/_barchart.scss */
-  .axis .separator {
-    text-align: center;
-    margin: 0 2px;
-    font-size: 1rem !important; }
-
-/* line 18, src/styles/components/_barchart.scss */
+  color: #7b7b7b;
+}
+.axis .tick-text {
+  fill: #7b7b7b;
+}
+.axis .tick-text.tick-text-selected {
+  fill: #e0e0e0;
+}
+.axis .separator {
+  text-align: center;
+  margin: 0 2px;
+  font-size: 1rem !important;
+}
+
 .value-text {
-  fill: #7b7b7b; }
-  /* line 20, src/styles/components/_barchart.scss */
-  .value-text.selected {
-    fill: #e0e0e0; }
+  fill: #7b7b7b;
+}
+.value-text.selected {
+  fill: #e0e0e0;
+}
 
-/* line 26, src/styles/components/_barchart.scss */
 .barContainer:hover,
 .barFill:hover {
-  cursor: pointer; }
+  cursor: pointer;
+}
 
-/* line 30, src/styles/components/_barchart.scss */
 .background-true {
-  opacity: 0.1; }
-  /* line 32, src/styles/components/_barchart.scss */
-  .background-true:hover {
-    cursor: pointer; }
+  opacity: 0.1;
+}
+.background-true:hover {
+  cursor: pointer;
+}
 
-/* line 36, src/styles/components/_barchart.scss */
 .background-false {
-  opacity: 0; }
+  opacity: 0;
+}
 
-/* line 47, src/styles/components/_barchart.scss */
 .bar-compare-ELECTRICITY:hover,
 .bar-compare-GAS:hover,
 .bar-compare-WATER:hover,
@@ -709,238 +907,254 @@ p {
 .bar-WATER:hover,
 .bar-GAS:hover,
 .bar-ELECTRICITY:hover {
-  cursor: pointer; }
+  cursor: pointer;
+}
 
-/* line 51, src/styles/components/_barchart.scss */
 .bar-ELECTRICITY {
-  fill: #5d3d2a; }
-  /* line 53, src/styles/components/_barchart.scss */
-  .bar-ELECTRICITY.selected {
-    fill: #d87b39;
-    filter: drop-shadow(0 -0.1rem 0.2rem #d87b39); }
+  fill: #5d3d2a;
+}
+.bar-ELECTRICITY.selected {
+  fill: #d87b39;
+  filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);
+}
 
-/* line 59, src/styles/components/_barchart.scss */
 .bar-compare-ELECTRICITY {
-  fill: #795c47; }
-  /* line 61, src/styles/components/_barchart.scss */
-  .bar-compare-ELECTRICITY.selected {
-    fill: #e2bca1;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1); }
+  fill: #795c47;
+}
+.bar-compare-ELECTRICITY.selected {
+  fill: #e2bca1;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);
+}
 
-/* line 67, src/styles/components/_barchart.scss */
 .bar-WATER {
-  fill: #20415e; }
-  /* line 69, src/styles/components/_barchart.scss */
-  .bar-WATER.selected {
-    fill: #3a98ec;
-    filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec); }
+  fill: #20415e;
+}
+.bar-WATER.selected {
+  fill: #3a98ec;
+  filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);
+}
 
-/* line 75, src/styles/components/_barchart.scss */
 .bar-compare-WATER {
-  fill: #4d5c6e; }
-  /* line 77, src/styles/components/_barchart.scss */
-  .bar-compare-WATER.selected {
-    fill: #abd4fa;
-    filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa); }
+  fill: #4d5c6e;
+}
+.bar-compare-WATER.selected {
+  fill: #abd4fa;
+  filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);
+}
 
-/* line 83, src/styles/components/_barchart.scss */
 .bar-GAS {
-  fill: #184940; }
-  /* line 85, src/styles/components/_barchart.scss */
-  .bar-GAS.selected {
-    fill: #45d1b8;
-    filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8); }
+  fill: #184940;
+}
+.bar-GAS.selected {
+  fill: #45d1b8;
+  filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);
+}
 
-/* line 91, src/styles/components/_barchart.scss */
 .bar-compare-GAS {
-  fill: #597773; }
-  /* line 93, src/styles/components/_barchart.scss */
-  .bar-compare-GAS.selected {
-    fill: #a8f7e9;
-    filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9); }
+  fill: #597773;
+}
+.bar-compare-GAS.selected {
+  fill: #a8f7e9;
+  filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);
+}
 
-/* line 99, src/styles/components/_barchart.scss */
 .bar-MULTIFLUID {
-  fill: #705d1d; }
-  /* line 101, src/styles/components/_barchart.scss */
-  .bar-MULTIFLUID.selected {
-    fill: #e3b82a;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a); }
-  /* line 106, src/styles/components/_barchart.scss */
-  .bar-MULTIFLUID.disabled:hover {
-    cursor: default; }
-
-/* line 111, src/styles/components/_barchart.scss */
+  fill: #705d1d;
+}
+.bar-MULTIFLUID.selected {
+  fill: #e3b82a;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);
+}
+.bar-MULTIFLUID.disabled:hover {
+  cursor: default;
+}
+
 .bar-duel {
-  fill: #61f0f2; }
-  /* line 113, src/styles/components/_barchart.scss */
-  .bar-duel.selected {
-    fill: #61f0f2;
-    filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2); }
-  /* line 118, src/styles/components/_barchart.scss */
-  .bar-duel.disabled:hover {
-    cursor: default; }
-
-/* line 123, src/styles/components/_barchart.scss */
+  fill: #61f0f2;
+}
+.bar-duel.selected {
+  fill: #61f0f2;
+  filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);
+}
+.bar-duel.disabled:hover {
+  cursor: default;
+}
+
 .bar-UNCOMING {
   fill: #242633;
-  opacity: 0.6; }
-  /* line 126, src/styles/components/_barchart.scss */
-  .bar-UNCOMING.selected {
-    fill: #e3b82a;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a); }
-  /* line 131, src/styles/components/_barchart.scss */
-  .bar-UNCOMING.disabled:hover {
-    cursor: default; }
-
-/* line 137, src/styles/components/_barchart.scss */
+  opacity: 0.6;
+}
+.bar-UNCOMING.selected {
+  fill: #e3b82a;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);
+}
+.bar-UNCOMING.disabled:hover {
+  cursor: default;
+}
+
 .bar-compare-MULTIFLUID {
-  fill: #7d6a4e; }
-  /* line 139, src/styles/components/_barchart.scss */
-  .bar-compare-MULTIFLUID.selected {
-    fill: #ffd597;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a); }
+  fill: #7d6a4e;
+}
+.bar-compare-MULTIFLUID.selected {
+  fill: #ffd597;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);
+}
 
-/* line 144, src/styles/components/_barchart.scss */
 .bar-average {
   stroke-width: 2;
-  stroke: #e3b82a; }
+  stroke: #e3b82a;
+}
 
-/* line 148, src/styles/components/_barchart.scss */
 .week {
-  fill: #e2bca1; }
-  /* line 150, src/styles/components/_barchart.scss */
-  .week.selected {
-    fill: #e2bca1;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1); }
+  fill: #e2bca1;
+}
+.week.selected {
+  fill: #e2bca1;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);
+}
 
-/* line 155, src/styles/components/_barchart.scss */
 .weekend {
-  fill: #ffd597; }
-  /* line 157, src/styles/components/_barchart.scss */
-  .weekend.selected {
-    fill: #ffd597;
-    filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a); }
+  fill: #ffd597;
+}
+.weekend.selected {
+  fill: #ffd597;
+  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);
+}
 
 /** Animation **/
-/* line 163, src/styles/components/_barchart.scss */
 .bounce-1 {
   animation-name: bounce-1;
   animation-timing-function: cubic-bezier(1, 1, 0.42, 1);
   animation-iteration-count: 1;
   transform-origin: bottom center;
-  transform-box: fill-box; }
+  transform-box: fill-box;
+}
 
 @keyframes bounce-1 {
   0% {
-    transform: scale(0.1, 0.1); }
+    transform: scale(0.1, 0.1);
+  }
   28% {
-    transform: scale(0.1, 1.1); }
+    transform: scale(0.1, 1.1);
+  }
   45% {
-    transform: scale(0.8, 0.95); }
+    transform: scale(0.8, 0.95);
+  }
   55% {
-    transform: scale(1, 1); }
+    transform: scale(1, 1);
+  }
   65% {
-    transform: scale(1, 0.98); }
+    transform: scale(1, 0.98);
+  }
   75% {
-    transform: scale(1, 1); } }
-
-/* line 191, src/styles/components/_barchart.scss */
+    transform: scale(1, 1);
+  }
+}
 .bounce-2 {
   animation-name: bounce-2;
   animation-timing-function: cubic-bezier(1, 1, 0.42, 1);
   animation-iteration-count: 1;
   transform-origin: bottom center;
-  transform-box: fill-box; }
+  transform-box: fill-box;
+}
 
 @keyframes bounce-2 {
   0% {
-    transform: scale(1, 1); }
+    transform: scale(1, 1);
+  }
   28% {
-    transform: scale(1, 1.1); }
+    transform: scale(1, 1.1);
+  }
   45% {
-    transform: scale(0.8, 0.95); }
+    transform: scale(0.8, 0.95);
+  }
   55% {
-    transform: scale(1, 1); }
+    transform: scale(1, 1);
+  }
   65% {
-    transform: scale(1, 0.98); }
+    transform: scale(1, 0.98);
+  }
   75% {
-    transform: scale(1, 1); } }
-
-/* line 219, src/styles/components/_barchart.scss */
+    transform: scale(1, 1);
+  }
+}
 .bounce-3 {
   animation-name: bounce-3;
   animation-timing-function: cubic-bezier(1, 1, 0.42, 1);
   animation-iteration-count: 1;
-  transform-origin: bottom center; }
+  transform-origin: bottom center;
+}
 
 @keyframes bounce-3 {
   0% {
     opacity: 0.6;
-    transform: scaleY(1); }
+    transform: scaleY(1);
+  }
   50% {
     transform: scaleY(1.1);
-    opacity: 0.8; }
+    opacity: 0.8;
+  }
   100% {
     transform: scaleY(1);
-    opacity: 1; } }
-
+    opacity: 1;
+  }
+}
 /** Animatio ndelay **/
-/* line 241, src/styles/components/_barchart.scss */
 .delay {
-  animation-duration: 0.4s; }
+  animation-duration: 0.4s;
+}
 
-/* line 244, src/styles/components/_barchart.scss */
 .delay--0 {
-  animation-duration: 0.6s; }
+  animation-duration: 0.6s;
+}
 
-/* line 247, src/styles/components/_barchart.scss */
 .delay--1 {
-  animation-duration: 0.7s; }
+  animation-duration: 0.7s;
+}
 
-/* line 250, src/styles/components/_barchart.scss */
 .delay--2 {
-  animation-duration: 0.8s; }
+  animation-duration: 0.8s;
+}
 
-/* line 253, src/styles/components/_barchart.scss */
 .delay--3 {
-  animation-duration: 0.9s; }
+  animation-duration: 0.9s;
+}
 
-/* line 256, src/styles/components/_barchart.scss */
 .delay--4 {
-  animation-duration: 1s; }
+  animation-duration: 1s;
+}
 
-/* line 259, src/styles/components/_barchart.scss */
 .delay--5 {
-  animation-duration: 1.1s; }
+  animation-duration: 1.1s;
+}
 
-/* line 262, src/styles/components/_barchart.scss */
 .delay--6 {
-  animation-duration: 1.2s; }
+  animation-duration: 1.2s;
+}
 
-/* line 265, src/styles/components/_barchart.scss */
 .delay--7 {
-  animation-duration: 1.3s; }
+  animation-duration: 1.3s;
+}
 
-/* line 268, src/styles/components/_barchart.scss */
 .delay--8 {
-  animation-duration: 1.4s; }
+  animation-duration: 1.4s;
+}
 
-/* line 271, src/styles/components/_barchart.scss */
 .delay--9 {
-  animation-duration: 1.5s; }
+  animation-duration: 1.5s;
+}
 
-/* line 274, src/styles/components/_barchart.scss */
 .delay--10 {
-  animation-duration: 1.6s; }
+  animation-duration: 1.6s;
+}
 
-/* line 277, src/styles/components/_barchart.scss */
 .delay--11 {
-  animation-duration: 1.8s; }
+  animation-duration: 1.8s;
+}
 
-/* line 280, src/styles/components/_barchart.scss */
 .delay--12 {
-  animation-duration: 1.9s; }
+  animation-duration: 1.9s;
+}
 
 /** BLACK **/
 /** RED **/
@@ -953,27 +1167,33 @@ p {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 5, src/styles/components/_buttons.scss */
 button.btn-highlight {
-  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;
+  background: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(226, 137, 4, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #f1c017;
   background-color: #e3b82a;
   border: none;
   border-radius: 2px;
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-highlight span:first-child {
-    color: #000000; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-highlight:hover, button.btn-highlight:focus, button.btn-highlight.active, button.btn-highlight:disabled {
-    background-color: #b89318; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-highlight:disabled {
-    cursor: not-allowed; }
-
-/* line 10, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-highlight span:first-child {
+  color: #000000;
+}
+button.btn-highlight:hover,
+button.btn-highlight:focus,
+button.btn-highlight.active,
+button.btn-highlight:disabled {
+  background-color: #b89318;
+}
+button.btn-highlight:disabled {
+  cursor: not-allowed;
+}
 button.btn-primary-positive {
   background: transparent;
   background-color: transparent;
@@ -982,21 +1202,26 @@ button.btn-primary-positive {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-primary-positive span:first-child {
-    color: #e3b82a; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-primary-positive:hover, button.btn-primary-positive:focus, button.btn-primary-positive.active, button.btn-primary-positive:disabled {
-    background-color: rgba(18, 18, 18, 0.2); }
-    /* line 18, src/styles/components/_buttons.scss */
-    button.btn-primary-positive:hover span:first-child, button.btn-primary-positive:focus span:first-child, button.btn-primary-positive.active span:first-child, button.btn-primary-positive:disabled span:first-child {
-      color: rgba(227, 184, 42, 0.7); }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-primary-positive:disabled {
-    cursor: not-allowed; }
-
-/* line 23, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-primary-positive span:first-child {
+  color: #e3b82a;
+}
+button.btn-primary-positive:hover,
+button.btn-primary-positive:focus,
+button.btn-primary-positive.active,
+button.btn-primary-positive:disabled {
+  background-color: rgba(18, 18, 18, 0.2);
+}
+button.btn-primary-positive:hover span:first-child,
+button.btn-primary-positive:focus span:first-child,
+button.btn-primary-positive.active span:first-child,
+button.btn-primary-positive:disabled span:first-child {
+  color: rgba(227, 184, 42, 0.7);
+}
+button.btn-primary-positive:disabled {
+  cursor: not-allowed;
+}
 button.btn-primary-negative {
   background: transparent;
   background-color: transparent;
@@ -1005,21 +1230,26 @@ button.btn-primary-negative {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-primary-negative span:first-child {
-    color: #e3b82a; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-primary-negative:hover, button.btn-primary-negative:focus, button.btn-primary-negative.active, button.btn-primary-negative:disabled {
-    background-color: rgba(123, 123, 123, 0.2); }
-    /* line 31, src/styles/components/_buttons.scss */
-    button.btn-primary-negative:hover span:first-child, button.btn-primary-negative:focus span:first-child, button.btn-primary-negative.active span:first-child, button.btn-primary-negative:disabled span:first-child {
-      color: rgba(227, 184, 42, 0.7); }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-primary-negative:disabled {
-    cursor: not-allowed; }
-
-/* line 36, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-primary-negative span:first-child {
+  color: #e3b82a;
+}
+button.btn-primary-negative:hover,
+button.btn-primary-negative:focus,
+button.btn-primary-negative.active,
+button.btn-primary-negative:disabled {
+  background-color: rgba(123, 123, 123, 0.2);
+}
+button.btn-primary-negative:hover span:first-child,
+button.btn-primary-negative:focus span:first-child,
+button.btn-primary-negative.active span:first-child,
+button.btn-primary-negative:disabled span:first-child {
+  color: rgba(227, 184, 42, 0.7);
+}
+button.btn-primary-negative:disabled {
+  cursor: not-allowed;
+}
 button.btn-secondary-positive {
   background: transparent;
   background-color: transparent;
@@ -1028,21 +1258,26 @@ button.btn-secondary-positive {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-secondary-positive span:first-child {
-    color: #e0e0e0; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-secondary-positive:hover, button.btn-secondary-positive:focus, button.btn-secondary-positive.active, button.btn-secondary-positive:disabled {
-    background-color: rgba(18, 18, 18, 0.2); }
-    /* line 44, src/styles/components/_buttons.scss */
-    button.btn-secondary-positive:hover span:first-child, button.btn-secondary-positive:focus span:first-child, button.btn-secondary-positive.active span:first-child, button.btn-secondary-positive:disabled span:first-child {
-      color: rgba(224, 224, 224, 0.7); }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-secondary-positive:disabled {
-    cursor: not-allowed; }
-
-/* line 49, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-secondary-positive span:first-child {
+  color: #e0e0e0;
+}
+button.btn-secondary-positive:hover,
+button.btn-secondary-positive:focus,
+button.btn-secondary-positive.active,
+button.btn-secondary-positive:disabled {
+  background-color: rgba(18, 18, 18, 0.2);
+}
+button.btn-secondary-positive:hover span:first-child,
+button.btn-secondary-positive:focus span:first-child,
+button.btn-secondary-positive.active span:first-child,
+button.btn-secondary-positive:disabled span:first-child {
+  color: rgba(224, 224, 224, 0.7);
+}
+button.btn-secondary-positive:disabled {
+  cursor: not-allowed;
+}
 button.btn-secondary-negative {
   background: transparent;
   background-color: transparent;
@@ -1051,21 +1286,26 @@ button.btn-secondary-negative {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-secondary-negative span:first-child {
-    color: #e0e0e0; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-secondary-negative:hover, button.btn-secondary-negative:focus, button.btn-secondary-negative.active, button.btn-secondary-negative:disabled {
-    background-color: rgba(123, 123, 123, 0.2); }
-    /* line 57, src/styles/components/_buttons.scss */
-    button.btn-secondary-negative:hover span:first-child, button.btn-secondary-negative:focus span:first-child, button.btn-secondary-negative.active span:first-child, button.btn-secondary-negative:disabled span:first-child {
-      color: rgba(224, 224, 224, 0.7); }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-secondary-negative:disabled {
-    cursor: not-allowed; }
-
-/* line 62, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-secondary-negative span:first-child {
+  color: #e0e0e0;
+}
+button.btn-secondary-negative:hover,
+button.btn-secondary-negative:focus,
+button.btn-secondary-negative.active,
+button.btn-secondary-negative:disabled {
+  background-color: rgba(123, 123, 123, 0.2);
+}
+button.btn-secondary-negative:hover span:first-child,
+button.btn-secondary-negative:focus span:first-child,
+button.btn-secondary-negative.active span:first-child,
+button.btn-secondary-negative:disabled span:first-child {
+  color: rgba(224, 224, 224, 0.7);
+}
+button.btn-secondary-negative:disabled {
+  cursor: not-allowed;
+}
 button.btn-duel-off {
   background: #121212;
   background-color: #121212;
@@ -1074,18 +1314,20 @@ button.btn-duel-off {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-duel-off span:first-child {
-    color: #ffffff; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-duel-off:hover, button.btn-duel-off:focus, button.btn-duel-off.active, button.btn-duel-off:disabled {
-    background-color: black; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-duel-off:disabled {
-    cursor: not-allowed; }
-
-/* line 72, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-duel-off span:first-child {
+  color: #ffffff;
+}
+button.btn-duel-off:hover,
+button.btn-duel-off:focus,
+button.btn-duel-off.active,
+button.btn-duel-off:disabled {
+  background-color: black;
+}
+button.btn-duel-off:disabled {
+  cursor: not-allowed;
+}
 button.btn-duel-active {
   background: #58ffff;
   background-color: #58ffff;
@@ -1094,58 +1336,73 @@ button.btn-duel-active {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-duel-active span:first-child {
-    color: #121212; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-duel-active:hover, button.btn-duel-active:focus, button.btn-duel-active.active, button.btn-duel-active:disabled {
-    background-color: #00bebe; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-duel-active:disabled {
-    cursor: not-allowed; }
-
-/* line 77, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-duel-active span:first-child {
+  color: #121212;
+}
+button.btn-duel-active:hover,
+button.btn-duel-active:focus,
+button.btn-duel-active.active,
+button.btn-duel-active:disabled {
+  background-color: #00bebe;
+}
+button.btn-duel-active:disabled {
+  cursor: not-allowed;
+}
 button.btn-duel-on {
-  background: radial-gradient(60.65% 30.62% at 50% 3.13%, #2a2b30 0%, #1b1c22 100%);
+  background: radial-gradient(
+    60.65% 30.62% at 50% 3.13%,
+    #2a2b30 0%,
+    #1b1c22 100%
+  );
   background-color: #121212;
   border: 1px solid #58ffff;
   border-radius: 2px;
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-duel-on span:first-child {
-    color: #ffffff; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-duel-on:hover, button.btn-duel-on:focus, button.btn-duel-on.active, button.btn-duel-on:disabled {
-    background-color: black; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-duel-on:disabled {
-    cursor: not-allowed; }
-
-/* line 82, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-duel-on span:first-child {
+  color: #ffffff;
+}
+button.btn-duel-on:hover,
+button.btn-duel-on:focus,
+button.btn-duel-on.active,
+button.btn-duel-on:disabled {
+  background-color: black;
+}
+button.btn-duel-on:disabled {
+  cursor: not-allowed;
+}
 button.btn-profile-next {
-  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;
+  background: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(226, 137, 4, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #f1c017;
   background-color: #e3b82a;
   border: none;
   border-radius: 2px;
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-profile-next span:first-child {
-    color: #000000; }
-  /* line 18, src/styles/base/_mixins.scss */
-  button.btn-profile-next:hover, button.btn-profile-next:focus, button.btn-profile-next.active, button.btn-profile-next:disabled {
-    background-color: #b89318; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-profile-next:disabled {
-    cursor: not-allowed; }
-
-/* line 87, src/styles/components/_buttons.scss */
+  cursor: pointer;
+}
+button.btn-profile-next span:first-child {
+  color: #000000;
+}
+button.btn-profile-next:hover,
+button.btn-profile-next:focus,
+button.btn-profile-next.active,
+button.btn-profile-next:disabled {
+  background-color: #b89318;
+}
+button.btn-profile-next:disabled {
+  cursor: not-allowed;
+}
 button.btn-profile-back {
   background: none;
   background-color: none;
@@ -1154,13 +1411,14 @@ button.btn-profile-back {
   margin: 1.5rem 0 0;
   width: 100%;
   text-transform: initial;
-  cursor: pointer; }
-  /* line 15, src/styles/base/_mixins.scss */
-  button.btn-profile-back span:first-child {
-    color: #a0a0a0; }
-  /* line 24, src/styles/base/_mixins.scss */
-  button.btn-profile-back:disabled {
-    cursor: not-allowed; }
+  cursor: pointer;
+}
+button.btn-profile-back span:first-child {
+  color: #a0a0a0;
+}
+button.btn-profile-back:disabled {
+  cursor: not-allowed;
+}
 
 /** BLACK **/
 /** RED **/
@@ -1173,20 +1431,24 @@ button.btn-profile-back {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 3, src/styles/components/_card.scss */
 .card {
-  background: linear-gradient(180deg, #323339 0%, #25262b 100%);
+  background: linear-gradient(180deg, rgb(50, 51, 57) 0%, rgb(37, 38, 43) 100%);
   box-sizing: border-box;
   box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);
   border-radius: 4px;
   margin: 10px 0px 20px 0px;
-  padding: 16px; }
-  /* line 10, src/styles/components/_card.scss */
-  .card:hover {
-    background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%); }
-  /* line 13, src/styles/components/_card.scss */
-  .card.rich-card {
-    padding: 24px 16px; }
+  padding: 16px;
+}
+.card:hover {
+  background: linear-gradient(
+    180deg,
+    rgba(70, 71, 77, 0.7) 0%,
+    rgba(57, 58, 63, 0.7) 100%
+  );
+}
+.card.rich-card {
+  padding: 24px 16px;
+}
 
 /** BLACK **/
 /** RED **/
@@ -1199,13 +1461,12 @@ button.btn-profile-back {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 5, src/styles/components/_dialog.scss */
 div.modal-root .MuiBackdrop-root {
-  background-color: rgba(27, 28, 34, 0.85); }
+  background-color: hsla(231deg, 11%, 12%, 0.85);
+}
 
-/* line 10, src/styles/components/_dialog.scss */
 div.modal-paper {
-  background: linear-gradient(180deg, #323339 0%, #25262b 100%);
+  background: linear-gradient(180deg, rgb(50, 51, 57) 0%, rgb(37, 38, 43) 100%);
   width: 36rem;
   max-width: 100%;
   max-height: 90vh;
@@ -1215,39 +1476,41 @@ div.modal-paper {
   border-radius: 4px;
   margin: 0 0 0 13.75rem;
   align-items: center;
-  color: #ffffff; }
-  @media only screen and (max-width: 1023px) {
-    /* line 10, src/styles/components/_dialog.scss */
-    div.modal-paper {
-      width: 35rem;
-      margin: 0; } }
-  @media only screen and (max-width: 768px) {
-    /* line 10, src/styles/components/_dialog.scss */
-    div.modal-paper {
-      padding: 1rem;
-      width: 85%;
-      max-width: 35rem;
-      margin: 0; } }
-  /* line 32, src/styles/components/_dialog.scss */
-  div.modal-paper.no-padding {
-    padding: 0; }
-  /* line 35, src/styles/components/_dialog.scss */
-  div.modal-paper.blue-border {
-    border: 1px solid #58ffff40; }
-  /* line 38, src/styles/components/_dialog.scss */
-  div.modal-paper.yellow-border {
-    border: 1px solid rgba(227, 184, 42, 0.4); }
-  /* line 41, src/styles/components/_dialog.scss */
-  div.modal-paper .modal-paper-close-button {
-    position: absolute;
-    top: 0.5rem;
-    right: 0.5rem;
-    padding: 5px 5px;
-    z-index: 10; }
-
-/* line 50, src/styles/components/_dialog.scss */
+  color: #ffffff;
+}
+@media only screen and (max-width: 1023px) {
+  div.modal-paper {
+    width: 35rem;
+    margin: 0;
+  }
+}
+@media only screen and (max-width: 768px) {
+  div.modal-paper {
+    padding: 1rem;
+    width: 85%;
+    max-width: 35rem;
+    margin: 0;
+  }
+}
+div.modal-paper.no-padding {
+  padding: 0;
+}
+div.modal-paper.blue-border {
+  border: 1px solid rgba(88, 255, 255, 0.2509803922);
+}
+div.modal-paper.yellow-border {
+  border: 1px solid rgba(227, 184, 42, 0.4);
+}
+div.modal-paper .modal-paper-close-button {
+  position: absolute;
+  top: 0.5rem;
+  right: 0.5rem;
+  padding: 5px 5px;
+  z-index: 10;
+}
+
 div.modal-paper-full-screen {
-  background: linear-gradient(180deg, #323339 0%, #25262b 100%);
+  background: linear-gradient(180deg, rgb(50, 51, 57) 0%, rgb(37, 38, 43) 100%);
   width: 100%;
   max-width: 100%;
   height: 100%;
@@ -1259,10 +1522,11 @@ div.modal-paper-full-screen {
   border-radius: 4px;
   color: #ffffff;
   display: flex;
-  align-items: center; }
-  /* line 64, src/styles/components/_dialog.scss */
-  div.modal-paper-full-screen.dark-background {
-    background: #121212; }
+  align-items: center;
+}
+div.modal-paper-full-screen.dark-background {
+  background: #121212;
+}
 
 /** BLACK **/
 /** RED **/
@@ -1275,59 +1539,59 @@ div.modal-paper-full-screen {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 3, src/styles/components/_expansion-panel.scss */
 div.expansion-panel-root {
   margin: 1.2rem 0;
   color: #e0e0e0;
-  background: linear-gradient(180deg, #323339 0%, #25262b 100%);
+  background: linear-gradient(180deg, rgb(50, 51, 57) 0%, rgb(37, 38, 43) 100%);
   border-radius: 4px;
   box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);
   transition: background-color 0.6s ease;
-  box-sizing: border-box; }
-  /* line 11, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-root.Mui-expanded:first-child {
-    margin: 1.2rem 0; }
-  /* line 14, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-root.Mui-expanded:last-child {
-    margin: 1.2rem 0; }
-  /* line 17, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-root.red-border {
-    border: 1px solid #d25959; }
-
-/* line 21, src/styles/components/_expansion-panel.scss */
+  box-sizing: border-box;
+}
+div.expansion-panel-root.Mui-expanded:first-child {
+  margin: 1.2rem 0;
+}
+div.expansion-panel-root.Mui-expanded:last-child {
+  margin: 1.2rem 0;
+}
+div.expansion-panel-root.red-border {
+  border: 1px solid #d25959;
+}
+
 div.expansion-panel-summary {
   padding: 0.25rem 1.2rem;
-  min-height: 4rem; }
-  /* line 24, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-summary.Mui-focused {
-    border-radius: 4px;
-    background-color: unset;
-    box-shadow: 0 0 0 1px #e0e0e0; }
-  /* line 29, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-summary.Mui-expanded {
-    min-height: 4rem; }
-    /* line 31, src/styles/components/_expansion-panel.scss */
-    div.expansion-panel-summary.Mui-expanded.small {
-      min-height: 3rem; }
-  /* line 35, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-summary.small {
-    padding: 0 1.2rem;
-    min-height: 3rem; }
-  /* line 39, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-summary.bold-text {
-    font-weight: bold; }
-
-/* line 43, src/styles/components/_expansion-panel.scss */
+  min-height: 4rem;
+}
+div.expansion-panel-summary.Mui-focused {
+  border-radius: 4px;
+  background-color: unset;
+  box-shadow: 0 0 0 1px #e0e0e0;
+}
+div.expansion-panel-summary.Mui-expanded {
+  min-height: 4rem;
+}
+div.expansion-panel-summary.Mui-expanded.small {
+  min-height: 3rem;
+}
+div.expansion-panel-summary.small {
+  padding: 0 1.2rem;
+  min-height: 3rem;
+}
+div.expansion-panel-summary.bold-text {
+  font-weight: bold;
+}
+
 div.expansion-panel-content {
   display: flex;
-  align-items: center; }
-  /* line 46, src/styles/components/_expansion-panel.scss */
-  div.expansion-panel-content.Mui-expanded {
-    margin: 0.75rem 0; }
+  align-items: center;
+}
+div.expansion-panel-content.Mui-expanded {
+  margin: 0.75rem 0;
+}
 
-/* line 50, src/styles/components/_expansion-panel.scss */
 div.expansion-panel-details {
-  padding: 0 1.2rem 1.2rem; }
+  padding: 0 1.2rem 1.2rem;
+}
 
 /** BLACK **/
 /** RED **/
@@ -1340,36 +1604,49 @@ div.expansion-panel-details {
 /** App colors **/
 /** TABS GRADIENT **/
 /** SCROLLBAR **/
-/* line 2, src/styles/components/_link.scss */
 a {
-  color: #deaf0e; }
-  /* line 4, src/styles/components/_link.scss */
-  a:visited {
-    color: #deaf0e; }
+  color: #deaf0e;
+}
+a:visited {
+  color: #deaf0e;
+}
 
-/* line 9, src/styles/components/_link.scss */
 a:focus {
   outline: none;
-  box-shadow: inset 0 0 0 1px #e0e0e0; }
-  /* line 12, src/styles/components/_link.scss */
-  a:focus > div:first-child {
-    box-shadow: 0 0 0 1px #e0e0e0; }
+  box-shadow: inset 0 0 0 1px #e0e0e0;
+}
+a:focus > div:first-child {
+  box-shadow: 0 0 0 1px #e0e0e0;
+}
 
-/* line 16, src/styles/components/_link.scss */
 a.MuiLink-underlineHover:hover {
-  text-decoration: none; }
+  text-decoration: none;
+}
 
-/* line 19, src/styles/components/_link.scss */
 a.MuiTypography-colorPrimary {
-  color: #e0e0e0; }
+  color: #e0e0e0;
+}
 
-/* line 19, src/styles/index.scss */
 :root {
   --blue: #58ffff;
-  --blue40: #58ffff40;
-  --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;
-  --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;
-  --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);
+  --blue40: rgba(88, 255, 255, 0.2509803922);
+  --blueBackground: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(1, 153, 163, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #58ffff;
+  --blueRadialGradient: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(1, 153, 163, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #58ffff;
+  --blueRadialGradientTrans: radial-gradient(
+    circle,
+    #58ffff 0%,
+    rgba(255, 255, 255, 0) 100%
+  );
   --elecColor: #d87b39;
   --elecColor40: rgba(216, 123, 57, 0.4);
   --elecCompareColor: #e2bca1;
@@ -1389,17 +1666,60 @@ a.MuiTypography-colorPrimary {
   --darkLight: #25262b;
   --darkLight2: #121212;
   --textFont: Lato, sans-serif;
-  --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);
-  --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);
-  --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);
-  --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);
-  --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);
-  --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;
-  --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;
-  --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;
-  --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec; }
-
-/* line 55, src/styles/index.scss */
+  --greyLinearGradientBackground: linear-gradient(
+    180deg,
+    rgb(50, 51, 57) 0%,
+    rgb(37, 38, 43) 100%
+  );
+  --multiColorRadialGradientTrans: radial-gradient(
+    circle,
+    #e3b82a 0%,
+    rgba(255, 255, 255, 0) 100%
+  );
+  --elecColorRadialGradientTrans: radial-gradient(
+    circle,
+    #d87b39 0%,
+    rgba(255, 255, 255, 0) 100%
+  );
+  --waterColorRadialGradientTrans: radial-gradient(
+    circle,
+    #3a98ec 0%,
+    rgba(255, 255, 255, 0) 100%
+  );
+  --gasColorRadialGradientTrans: radial-gradient(
+    circle,
+    #e3b82a 0%,
+    rgba(255, 255, 255, 0) 100%
+  );
+  --multiColorRadialGradient: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(226, 137, 4, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #f1c017;
+  --elecColorRadialGradient: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(158, 67, 2, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #d87b39;
+  --gasColorRadialGradient: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(4, 106, 88, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #45d1b8;
+  --waterColorRadialGradient: radial-gradient(
+      105.25% 64.58% at 49.68% 70.83%,
+      rgba(2, 93, 174, 0.5) 0%,
+      rgba(255, 255, 255, 0) 100%
+    ),
+    #3a98ec;
+}
+
 .application {
   overflow-x: hidden;
-  background-color: #121212; }
+  background-color: #121212;
+}
+
+/*# sourceMappingURL=index.css.map */
diff --git a/src/styles/index.css.map b/src/styles/index.css.map
new file mode 100644
index 0000000000000000000000000000000000000000..43e4f91032c182c88b68a4977026db7edd39c0df
--- /dev/null
+++ b/src/styles/index.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["index.scss","base/_color.scss","base/_layout.scss","base/_z-index.scss","base/_typography.scss","base/_typo-variables.scss","components/_barchart.scss","components/_buttons.scss","base/_mixins.scss","components/_card.scss","components/_dialog.scss","components/_expansion-panel.scss","components/_link.scss"],"names":[],"mappings":"AAAA;AACQ;AACR;AACQ;AACR;ACJA;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;ADhIQ;AEZR;EACE,YDHO;;;ACMT;EACE,YDPO;ECQP;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EANF;IAOI;;;;AAIJ;EACE,kBDaM;;ACZN;EAFF;IAGI;IACA;;;;AAIJ;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA,SCxDS;EDyDT;EACA;EACA;;AACA;EAVF;IAWI;;;AAEF;EACE;EAKA;;AACA;EACE;EACA,ODvBQ;;AC0BZ;EACE;EACA;EACA;;AACA;EAJF;IAKI;;;AAEF;EAPF;IAQI;;;AAEF;EACE;EACA;;AACA;EACE;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA,ODlDM;;ACoDR;EACE;;AAEF;EACE;IACE;IACA,OD1DI;;EC4DN;IACE;;EAEF;IACE;;;;AAOV;EACE;EACA;EACA;EACA;EACA;EACA;EACA,OD9EY;;AC+EZ;EACE;EACA;EACA;;AAEF;EACE;EACA;;;AAIJ;AACE;AAIA;AAIA;;AAPA;EACE;;AAGF;EACE,YDHc;;ACMhB;EACE,YDNc;;;AAnJlB;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AAhJA;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AG5IA;EACE,aCLU;;;ADQZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE,OHsCU;EGrCV,aChBU;;;ADmBZ;EACE;EACA,aCrBU;EDsBV;EACA;EACA;EACA;;;AAGF;EACE,aC7BU;ED8BV;EACA;EACA;EACA;EAEA;EACA;EACA,OHeY;EGdZ;;;AAEF;EACE,OHtBY;EGuBZ;EACA;;;AAIA;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AA/BJ;EACE;EACA,WC/CQ;EDgDR;;AACA;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;;AACA;EAEE;;AAEF;EAEE;;AAGJ;EAEE;EACA;;;AAKN;AACA;EACE,aCrFU;EDsFV;EACA;EACA;EACA;EACA,OHtCY;;;AGwCd;EACE,aC7FU;ED8FV;EACA;EACA;EACA;EACA,OH9CY;;;AGgDd;EACE,aCrGU;EDsGV;EACA;EACA;EACA;EACA,OHtDY;;;AGwDd;EACE,aC7GU;ED8GV;EACA;EACA;EACA;EACA,OH9DY;;;AGgEd;EACE,aCrHU;EDsHV;EACA;EACA;EACA;EACA,OHtEY;;;AGyEd;AACA;EACE,aC/HU;EDgIV;EACA;EACA;EACA;;AACA;EANF;IAOI;;;;AAGJ;EACE,aCzIU;ED0IV;EACA;EACA;EACA;;AACA;EANF;IAOI;;;;AAIJ;AACA;EACE,aCrJU;EDsJV;EACA;EACA;EACA;EACA,OHtGY;;;AApDd;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AK7IA;EACE,OLkDU;;AKjDV;EACE,MLgDQ;;AK/CR;EACE,ML4CQ;;AKzCZ;EACE;EACA;EACA;;;AAGJ;EACE,MLoCU;;AKnCV;EACE,MLgCU;;;AK3BZ;AAAA;EACE;;;AAGJ;EACE;;AACA;EACE;;;AAGJ;EACE;;;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AAGJ;EACE,MLuBe;;AKtBf;EACE,MLmBS;EKlBT;;;AAIJ;EACE,MLiBuB;;AKhBvB;EACE,MLciB;EKbjB;;;AAIJ;EACE,MLmBgB;;AKlBhB;EACE,MLeU;EKdV;;;AAIJ;EACE,MLawB;;AKZxB;EACE,MLUkB;EKTlB;;;AAIJ;EACE,MLHc;;AKId;EACE,MLPQ;EKQR;;;AAIJ;EACE,MLTsB;;AKUtB;EACE,MLZgB;EKahB;;;AAIJ;EACE,MLRgB;;AKShB;EACE,MLXU;EKYV;;AAGA;EACE;;;AAIN;EACE,MLpFW;;AKqFX;EACE,MLtFS;EKuFT;;AAGA;EACE;;;AAIN;EACE,ML1HK;EK2HL;;AACA;EACE,MLpCU;EKqCV;;AAGA;EACE;;;AAKN;EACE,ML5CwB;;AK6CxB;EACE,ML/CkB;EKgDlB;;;AAGJ;EACE;EACA,QLvDY;;;AKyDd;EACE,MLzEmB;;AK0EnB;EACE,ML3EiB;EK4EjB;;;AAGJ;EACE,ML/DoB;;AKgEpB;EACE,MLjEkB;EKkElB;;;AAGJ;AACA;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AAEF;EACE;IACE;IACA;;EAEF;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;AACA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ALxRF;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AM5IE;ECEA,YPiH4B;EOhH5B,kBPYY;EOXZ,QDHyC;ECIzC;EACA;EACA;EACA;EACA;;AACA;EACE,ODV8B;;ACYhC;EDXI;;ACiBJ;EACE;;ADfF;ECHA,YDQI;ECPJ,kBDII;ECHJ,QDKI;ECJJ;EACA;EACA;EACA;EACA;;AACA;EACE,OPIU;;AOFZ;EDDI;;AACA;EACE;;ACKN;EACE;;ADFF;EChBA,YDqBI;ECpBJ,kBDiBI;EChBJ,QDkBI;ECjBJ;EACA;EACA;EACA;EACA;;AACA;EACE,OPIU;;AOFZ;EDYI;;AACA;EACE;;ACRN;EACE;;ADWF;EC7BA,YDkCI;ECjCJ,kBD8BI;EC7BJ,QD+BI;EC9BJ;EACA;EACA;EACA;EACA;;AACA;EACE,OPqCU;;AOnCZ;EDyBI;;AACA;EACE;;ACrBN;EACE;;ADwBF;EC1CA,YD+CI;EC9CJ,kBD2CI;EC1CJ,QD4CI;EC3CJ;EACA;EACA;EACA;EACA;;AACA;EACE,OPqCU;;AOnCZ;EDsCI;;AACA;EACE;;AClCN;EACE;;ADqCF;ECvDA,YPFa;EOGb,kBPHa;EOIb,QDyDI;ECxDJ;EACA;EACA;EACA;EACA;;AACA;EACE,OPiCI;;AO/BN;EDmDI;;AC7CJ;EACE;;AD+CF;ECjEA,YPmBK;EOlBL,kBPkBK;EOjBL,QDgEwC;EC/DxC;EACA;EACA;EACA;EACA;;AACA;EACE,OPXW;;AOab;EDwDI;;AClDJ;EACE;;ADoDF;ECtEA;EACA,kBPHa;EOIb,QDqEyC;ECpEzC;EACA;EACA;EACA;EACA;;AACA;EACE,OPiCI;;AO/BN;ED6DI;;ACvDJ;EACE;;ADyDF;EC3EA,YPiH4B;EOhH5B,kBPYY;EOXZ,QD0EyC;ECzEzC;EACA;EACA;EACA;EACA;;AACA;EACE,ODmE8B;;ACjEhC;EDkEI;;AC5DJ;EACE;;AD8DF;EChFA,YDiF0C;EChF1C,kBDgFkB;EC/ElB,QD+EoC;EC9EpC;EACA;EACA;EACA;EACA;;AACA;EACE,OPsCQ;;AO9BV;EACE;;;APxBJ;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AQ9IA;EACE,YRoDgC;EQnDhC;EACA;EACA;EACA;EACA;;AACA;EACE,YRkDoC;;AQhDtC;EACE;;;ARbJ;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AS5IE;EACE;;;AAIJ;EACE,YT6CgC;ES5ChC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OT4BM;;AS3BN;EAZF;IAaI;IACA;;;AAEF;EAhBF;IAiBI;IACA;IACA;IACA;;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA,SP3CO;;;AO+CX;EACE,YTKgC;ESJhC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OTZM;ESaN;EACA;;AACA;EACE,YT5DW;;;AAJf;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AU9IA;EACE;EACA,OVgDY;EU/CZ,YVkDgC;EUjDhC;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AAEF;EACE;;;AAGJ;EACE;EACA;;AACA;EACE;;;AAGJ;EACE;;;AVlDF;AAYA;AAGA;AAMA;AAGA;AAmBA;AAIA;AAIA;AAoBA;AA0BA;AA+CA;AW/IA;EACE,OXgBW;;AWfX;EACE,OXcS;;;AWVb;EACE;EACA;;AACA;EACE;;;AAGJ;EACE;;;AAEF;EACE,OXiCY;;;ADlCd;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAME;EACA,kBCzDa","file":"index.css"}
\ No newline at end of file
diff --git a/src/targets/browser/index.ejs b/src/targets/browser/index.ejs
index 3f5bf59a4e99894939c462c357c162ffc64e53de..a30958e2e1852957cfaf60fe21636ceb27c1ee43 100644
--- a/src/targets/browser/index.ejs
+++ b/src/targets/browser/index.ejs
@@ -28,25 +28,19 @@
     {{.ThemeCSS}}
 
     <% if (__TARGET__ === 'mobile') { %>
-
     <meta name="format-detection" content="telephone=no">
     <script src="cordova.js" defer></script>
     <% } else if (__STACK_ASSETS__) { %>
     {{.CozyBar}}
     <% } %>
+    <script src="//{{.Domain}}/assets/js/piwik.js"></script>
+
   </head>
   <body>
   <div
     role="application"
     class="application"
-    data-cozy-token="{{.Token}}"
-    data-cozy-domain="{{.Domain}}"
-    data-cozy-locale="{{.Locale}}"
-    data-cozy-app-name="{{.AppName}}"
-    data-cozy-app-slug="{{.AppSlug}}"
-    data-cozy-app-name-prefix="{{.AppNamePrefix}}"
-    data-cozy-app-editor="{{.AppEditor}}"
-    data-cozy-icon-path="{{.IconPath}}"
+    data-cozy="{{.CozyData}}"
   >
   <% _.forEach(htmlWebpackPlugin.files.js, function(file) { %>
       <script src="<%- file %>"></script>
diff --git a/src/targets/browser/index.tsx b/src/targets/browser/index.tsx
index 8337a39baad8bfb532f840e769e8d0dd119ebc8a..d1e86be12e9e35ea6b5cd2946f0e108a69ec9e14 100644
--- a/src/targets/browser/index.tsx
+++ b/src/targets/browser/index.tsx
@@ -1,50 +1,91 @@
 /* eslint-disable @typescript-eslint/no-explicit-any */
 /* eslint-disable @typescript-eslint/no-var-requires */
 /* global cozy */
+declare let cozy: any
+declare let __PIWIK_TRACKER_URL__: string
+declare let __PIWIK_SITEID__: number
+declare let Piwik: any
+
 import '../../styles/index.scss'
 
 import React from 'react'
 import { render } from 'react-dom'
-import { Client, CozyProvider } from 'cozy-client'
+import CozyClient, { Client, CozyProvider } from 'cozy-client'
 import { Provider } from 'react-redux'
 import configureStore from 'store'
 import { I18n, initTranslation } from 'cozy-ui/transpiled/react/I18n'
 import { handleOAuthResponse } from 'cozy-harvest-lib/dist/helpers/oauth'
 import { memoize } from 'lodash'
-import { getClient } from '../../utils/client'
-import { getValues, initBar } from '../../utils/bar'
+import manifest from '../../../manifest.webapp'
+import schema from 'doctypes'
+import { createBrowserHistory, History } from 'history'
+import { HashRouter } from 'react-router-dom'
+import MatomoTracker from 'utils/matomoTracker'
 
 const setupApp = memoize(() => {
+  const history: History = createBrowserHistory()
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   const root: any = document.querySelector('[role=application]')
-  const { lang }: any = getValues(root.dataset)
-  const polyglot: any = initTranslation(lang, lang =>
+  const data = JSON.parse(root.dataset.cozy)
+  const protocol = window.location.protocol
+  const cozyUrl = `${protocol}//${data.domain}`
+
+  const locale = 'fr'
+  const polyglot: any = initTranslation(locale, lang =>
     require(`locales/${lang}`)
   )
-  const client: Client = getClient()
+
+  const client: Client = new CozyClient({
+    uri: cozyUrl,
+    token: data.token,
+    appMetadata: {
+      slug: manifest.name,
+      version: manifest.version,
+    },
+    schema,
+  })
+
   const persistedState: any = {}
   const store: any = configureStore(client, persistedState)
 
-  /** I don't know why I need to for this... But if I don't it seems that
-   * we have a race between configureStore and initBar resulting in
-   * an error from cozy-client "store is already defined"
-   */
-  setTimeout(() => {
-    initBar(client)
-  }, 0)
+  cozy.bar.init({
+    appName: data.app.name,
+    appEditor: data.app.editor,
+    cozyClient: client,
+    iconPath: data.app.icon,
+    lang: data.locale,
+    replaceTitleOnMobile: false,
+    appSlug: data.app.slug,
+    appNamePrefix: data.app.prefix,
+  })
+
+  let tracker
+  if (window.Piwik) {
+    Piwik.getTracker()
+    tracker = new MatomoTracker({
+      cozyUrl: cozyUrl,
+      url: __PIWIK_TRACKER_URL__,
+      siteId: __PIWIK_SITEID__,
+      history: history,
+      phpFilename: 'matomo.php',
+    })
+  }
 
-  return { root, store, client, lang, polyglot }
+  return { root, store, client, locale, polyglot, history, tracker }
 })
 
 const init = () => {
-  const { root, store, client, lang, polyglot } = setupApp()
+  const { root, store, client, locale, polyglot, history, tracker } = setupApp()
 
   if (handleOAuthResponse()) return
   const App = require('components/App').default
   render(
     <Provider store={store}>
       <CozyProvider client={client}>
-        <I18n lang={lang} polyglot={polyglot}>
-          <App />
+        <I18n lang={locale} polyglot={polyglot}>
+          <HashRouter {...history}>
+            <App tracker={tracker} />
+          </HashRouter>
         </I18n>
       </CozyProvider>
     </Provider>,
@@ -57,7 +98,7 @@ document.addEventListener('DOMContentLoaded', () => init())
 // excludes Chrome, Edge, and all Android browsers that include the Safari name in their user agent
 const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
 if (!isSafari && 'serviceWorker' in navigator) {
-  window.addEventListener('load', function() {
+  window.addEventListener('load', function () {
     navigator.serviceWorker
       .register('/serviceWorker.js')
       .then(reg => console.log('service worker registered', reg.scope))
diff --git a/src/targets/services/aggregatorUsageEvents.ts b/src/targets/services/aggregatorUsageEvents.ts
index 4f526df8cf8d605e29e594c7bf319c0e5e9418c2..c1cc3e14f09ba8ede239372b4e222621bb233b13 100644
--- a/src/targets/services/aggregatorUsageEvents.ts
+++ b/src/targets/services/aggregatorUsageEvents.ts
@@ -63,10 +63,11 @@ const sendIndicator = async (
       .fetchJSON(
         'POST',
         environmentService.isProduction()
-          ? '/remote/cc.cozycloud.dacc'
-          : '/remote/cc.cozycloud.dacc.dev',
+          ? '/remote/cc.cozycloud.dacc_v2'
+          : '/remote/cc.cozycloud.dacc.dev_v2',
         {
           data: JSON.stringify(indicator),
+          path: 'measure',
         }
       )
     return true
@@ -82,7 +83,7 @@ const sendIndicator = async (
 const reduceEvents = (
   events: UsageEvent[]
 ): { [key: string]: UsageEvent[] } => {
-  return events.reduce(function(
+  return events.reduce(function (
     acc: {
       [key: string]: UsageEvent[]
     },
@@ -194,8 +195,9 @@ const calculSessionTime = async (events: UsageEvent[], client: Client) => {
         events[index - 1].type !== UsageEventType.CONNECTION_EVENT
       ) {
         const endDate = events[index - 1].eventDate
-        const duration = endDate.diff(startSessionDate, ['seconds']).toObject()
-          .seconds
+        const duration = endDate
+          .diff(startSessionDate, ['seconds'])
+          .toObject().seconds
         const sessionIndicator: Indicator = {
           createdBy: 'ecolyo',
           measureName: DaccEvent.SESSION_DURATION,
@@ -219,8 +221,9 @@ const calculSessionTime = async (events: UsageEvent[], client: Client) => {
     } else if (index === events.length - 1) {
       if (startSessionDate) {
         const endDate = event.eventDate
-        const duration = endDate.diff(startSessionDate, ['seconds']).toObject()
-          .seconds
+        const duration = endDate
+          .diff(startSessionDate, ['seconds'])
+          .toObject().seconds
         const sessionIndicator: Indicator = {
           createdBy: 'ecolyo',
           measureName: DaccEvent.SESSION_DURATION,
@@ -277,12 +280,10 @@ const calculPeriodBetweenChallenge = async (
     (event: UsageEvent) => event.type === UsageEventType.CHALLENGE_LAUNCH_EVENT
   )
   if (challengeLaunchEvents.length > 0) {
-    const allEndedChallengeEvents: UsageEvent[] = await UsageEventService.getEvents(
-      client,
-      {
+    const allEndedChallengeEvents: UsageEvent[] =
+      await UsageEventService.getEvents(client, {
         type: UsageEventType.CHALLENGE_END_EVENT,
-      }
-    )
+      })
     for (const event of challengeLaunchEvents) {
       if (event.target && event.target !== 'CHALLENGE0001') {
         const challengeId: number = toNumber(
@@ -291,16 +292,18 @@ const calculPeriodBetweenChallenge = async (
         const prevChallengeId = `CHALLENGE${(challengeId - 1)
           .toString()
           .padStart(4, '0')}`
-        const previousEndedChallengeIndex: number = allEndedChallengeEvents.findIndex(
-          (endedEvent: UsageEvent) => endedEvent.target === prevChallengeId
-        )
+        const previousEndedChallengeIndex: number =
+          allEndedChallengeEvents.findIndex(
+            (endedEvent: UsageEvent) => endedEvent.target === prevChallengeId
+          )
         if (previousEndedChallengeIndex > -1) {
           const periodChallengeIndicator: Indicator = {
             createdBy: 'ecolyo',
             measureName: DaccEvent.EVENT_DURATION,
-            startDate: allEndedChallengeEvents[
-              previousEndedChallengeIndex
-            ].eventDate.toISODate(),
+            startDate:
+              allEndedChallengeEvents[
+                previousEndedChallengeIndex
+              ].eventDate.toISODate(),
             value: event.eventDate.diff(
               allEndedChallengeEvents[previousEndedChallengeIndex].eventDate
             ).seconds,
@@ -381,21 +384,16 @@ const calculateConnectedKonnectorPerDay = async (client: Client) => {
  */
 const buildProfileWithFuildType = async (
   client: Client,
-  fluidType: FluidType,
-  monthToAggregate?: number
+  fluidType: FluidType
 ): Promise<string> => {
   let formatedProfile = ''
   const profile = await new ProfileService(client).getProfile()
   // If profile is not filled, return empty string
 
   if (profile && !profile.isProfileTypeCompleted) return formatedProfile
-  const date = monthToAggregate
-    ? DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .set({ month: monthToAggregate })
-    : null
+  const date = DateTime.local().setZone('utc', {
+    keepLocalTime: true,
+  })
   const profileType = await new ProfileTypeEntityService(client).getProfileType(
     date
   )
@@ -481,15 +479,10 @@ const buildProfileWithFuildType = async (
 
 const getConsumptionValue = async (
   client: Client,
-  fluidType: FluidType[],
-  monthToAggregate?: number
+  fluidType: FluidType[]
 ): Promise<PerformanceIndicator[]> => {
   const consumptionService = new ConsumptionService(client)
-  const analysisDate = monthToAggregate
-    ? DateTime.local()
-        .setZone('utc', { keepLocalTime: true })
-        .set({ month: monthToAggregate })
-    : DateTime.local().setZone('utc', { keepLocalTime: true })
+  const analysisDate = DateTime.local().setZone('utc', { keepLocalTime: true })
   const periods = {
     timePeriod: {
       startDate: analysisDate.minus({ month: 1 }).startOf('month'),
@@ -500,12 +493,13 @@ const getConsumptionValue = async (
       endDate: analysisDate.minus({ month: 2 }).endOf('month'),
     },
   }
-  const fetchedPerformanceIndicators = await consumptionService.getPerformanceIndicators(
-    periods.timePeriod,
-    TimeStep.MONTH,
-    fluidType,
-    periods.comparisonTimePeriod
-  )
+  const fetchedPerformanceIndicators =
+    await consumptionService.getPerformanceIndicators(
+      periods.timePeriod,
+      TimeStep.MONTH,
+      fluidType,
+      periods.comparisonTimePeriod
+    )
   return fetchedPerformanceIndicators
 }
 
@@ -514,16 +508,13 @@ const getConsumptionValue = async (
  * @param client
  * @group [{ slug }, { seniority (in month) }, { profile (ECS, chauffage, etc...) }],
  */
-const calculateConsumptionVariation = async (
-  client: Client,
-  monthToAggregate?: number
-) => {
+const calculateConsumptionVariation = async (client: Client) => {
   log('info', `calculateConsumptionVariation`)
-  const consumptionData = await getConsumptionValue(
-    client,
-    [FluidType.ELECTRICITY, FluidType.GAS, FluidType.WATER],
-    monthToAggregate
-  )
+  const consumptionData = await getConsumptionValue(client, [
+    FluidType.ELECTRICITY,
+    FluidType.GAS,
+    FluidType.WATER,
+  ])
   for (const fluidType in [
     FluidType.ELECTRICITY,
     FluidType.GAS,
@@ -539,15 +530,7 @@ const calculateConsumptionVariation = async (
       if (firstConnectionEvent) {
         const seniority = 0
         // Seniority is set to 0, otherwise the indicator is too specific
-        // monthToAggregate
-        //   ? DateTime.local()
-        //       .setZone('utc', {
-        //         keepLocalTime: true,
-        //       })
-        //       .set({ month: monthToAggregate })
-        //       .diff(firstConnectionEvent.eventDate, 'month')
-        //       .get('month')
-        //   : DateTime.local()
+        //  DateTime.local()
         //       .setZone('utc', {
         //         keepLocalTime: true,
         //       })
@@ -557,20 +540,12 @@ const calculateConsumptionVariation = async (
         const consumptionVariationIndicator: Indicator = {
           createdBy: 'ecolyo',
           measureName: DaccEvent.CONSUMPTION_VARIATION_MONTHLY,
-          startDate: monthToAggregate
-            ? DateTime.local()
-                .setZone('utc', {
-                  keepLocalTime: true,
-                })
-                .set({ month: monthToAggregate })
-                .startOf('day')
-                .toISODate()
-            : DateTime.local()
-                .setZone('utc', {
-                  keepLocalTime: true,
-                })
-                .startOf('day')
-                .toISODate(),
+          startDate: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .startOf('day')
+            .toISODate(),
           value:
             consumptionData[fluidType] &&
             consumptionData[fluidType].percentageVariation
@@ -584,55 +559,35 @@ const calculateConsumptionVariation = async (
             // eslint-disable-next-line @typescript-eslint/camelcase
             fluid_usage: await buildProfileWithFuildType(
               client,
-              getFluidType(FluidType[fluidType]),
-              monthToAggregate
+              getFluidType(FluidType[fluidType])
             ),
           },
         }
 
         // if user wasnt connected during current month, dont send indicator
         const events: UsageEvent[] = await UsageEventService.getEvents(client, {
-          eventDate: monthToAggregate
-            ? {
-                $lt: DateTime.local()
-                  .setZone('utc', {
-                    keepLocalTime: true,
-                  })
-                  .set({ month: monthToAggregate })
-                  .endOf('month')
-                  .minus({ month: 1 })
-                  .toString(),
-                $gt: DateTime.local()
-                  .setZone('utc', {
-                    keepLocalTime: true,
-                  })
-                  .set({ month: monthToAggregate })
-                  .startOf('month')
-                  .minus({ month: 1 })
-                  .toString(),
-              }
-            : {
-                $lt: DateTime.local()
-                  .setZone('utc', {
-                    keepLocalTime: true,
-                  })
-                  .endOf('month')
-                  .minus({ month: 1 })
-                  .toString(),
-                $gt: DateTime.local()
-                  .setZone('utc', {
-                    keepLocalTime: true,
-                  })
-                  .startOf('month')
-                  .minus({ month: 1 })
-                  .toString(),
-              },
+          eventDate: {
+            $lt: DateTime.local()
+              .setZone('utc', {
+                keepLocalTime: true,
+              })
+              .endOf('month')
+              .minus({ month: 1 })
+              .toString(),
+            $gt: DateTime.local()
+              .setZone('utc', {
+                keepLocalTime: true,
+              })
+              .startOf('month')
+              .minus({ month: 1 })
+              .toString(),
+          },
         })
 
         if (events.length > 0 && consumptionVariationIndicator.value !== 0) {
           log(
             'info',
-            `Send variation indicator for ${monthToAggregate} : ${JSON.stringify(
+            `Send variation indicator : ${JSON.stringify(
               consumptionVariationIndicator
             )}`
           )
@@ -643,49 +598,27 @@ const calculateConsumptionVariation = async (
   }
 }
 
-const sendConnectionCount = async (
-  client: Client,
-  monthToAggregate?: number
-) => {
+const sendConnectionCount = async (client: Client) => {
   log('info', `sendConnectionCount`)
   // Get daily connexion
   const events: UsageEvent[] = await UsageEventService.getEvents(client, {
     type: UsageEventType.CONNECTION_EVENT,
-    eventDate: monthToAggregate
-      ? {
-          $lt: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .set({ month: monthToAggregate })
-            .minus({ month: 1 })
-            .endOf('month')
-            .toString(),
-          $gt: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .set({ month: monthToAggregate })
-            .minus({ month: 1 })
-            .startOf('month')
-            .toString(),
-        }
-      : {
-          $lt: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .endOf('month')
-            .minus({ month: 1 })
-            .toString(),
-          $gt: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .startOf('month')
-            .minus({ month: 1 })
-            .toString(),
-        },
+    eventDate: {
+      $lt: DateTime.local()
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .endOf('month')
+        .minus({ month: 1 })
+        .toString(),
+      $gt: DateTime.local()
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .startOf('month')
+        .minus({ month: 1 })
+        .toString(),
+    },
   })
 
   let uniqueDates = 0
@@ -699,27 +632,17 @@ const sendConnectionCount = async (
   const connectionMonthly: Indicator = {
     createdBy: 'ecolyo',
     measureName: DaccEvent.CONNECTION_COUNT_MONTHLY,
-    startDate: monthToAggregate
-      ? DateTime.local()
-          .setZone('utc', {
-            keepLocalTime: true,
-          })
-          .set({ month: monthToAggregate })
-          .startOf('day')
-          .toISODate()
-      : DateTime.local()
-          .setZone('utc', {
-            keepLocalTime: true,
-          })
-          .startOf('day')
-          .toISODate(),
+    startDate: DateTime.local()
+      .setZone('utc', {
+        keepLocalTime: true,
+      })
+      .startOf('day')
+      .toISODate(),
     value: uniqueDates,
   }
   log(
     'info',
-    `Send connectionMonthly indicator for ${monthToAggregate} : ${JSON.stringify(
-      connectionMonthly
-    )}`
+    `Send connectionMonthly indicator : ${JSON.stringify(connectionMonthly)}`
   )
   await sendIndicator(connectionMonthly, client)
 }
@@ -779,9 +702,7 @@ const sendHalfHourConsumption = async (client: Client) => {
 
   const data = await consumptionService.getLastHourData(
     client,
-    DateTime.local()
-      .minus({ month: 1 })
-      .startOf('month').month
+    DateTime.local().minus({ month: 1 }).startOf('month').month
   )
 
   const halfHourConsumption: Indicator = {
@@ -820,14 +741,8 @@ const sendKonnectorEvents = async (client: Client) => {
         target: slug,
         result: 'success',
         eventDate: {
-          $lte: today
-            .endOf('month')
-            .minus({ month: 1 })
-            .toString(),
-          $gte: today
-            .startOf('month')
-            .minus({ month: 1 })
-            .toString(),
+          $lte: today.endOf('month').minus({ month: 1 }).toString(),
+          $gte: today.startOf('month').minus({ month: 1 }).toString(),
         },
       },
       true
@@ -875,11 +790,8 @@ const sendKonnectorEvents = async (client: Client) => {
           }
         }
 
-        const allConnectionEvents: UsageEvent[] = await UsageEventService.getEvents(
-          client,
-          query,
-          true
-        )
+        const allConnectionEvents: UsageEvent[] =
+          await UsageEventService.getEvents(client, query, true)
 
         const konnectorSuccess: Indicator = {
           createdBy: 'ecolyo',
@@ -921,14 +833,8 @@ const sendKonnectorAttemptsMonthly = async (client: Client) => {
         type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
         target: slug,
         eventDate: {
-          $lte: today
-            .endOf('month')
-            .minus({ month: 1 })
-            .toString(),
-          $gte: today
-            .startOf('month')
-            .minus({ month: 1 })
-            .toString(),
+          $lte: today.endOf('month').minus({ month: 1 }).toString(),
+          $gte: today.startOf('month').minus({ month: 1 }).toString(),
         },
       },
       true
@@ -1332,21 +1238,6 @@ const AggregatorUsageEvents = async ({
     await sendProfileCount(client)
   }
 
-  log('info', `Recalculates errored indicators`)
-  const today: DateTime = DateTime.local()
-    .setZone('utc', {
-      keepLocalTime: true,
-    })
-    .startOf('day')
-  const lastMonth = 5
-  if (today.day === 11 && today.month === lastMonth) {
-    let monthToAggregate = 1
-    for (monthToAggregate; monthToAggregate <= lastMonth; monthToAggregate++) {
-      await calculateConsumptionVariation(client, monthToAggregate)
-      await sendConnectionCount(client, monthToAggregate)
-    }
-  }
-
   const uniqueReadUsageEvents: UsageEvent[] = uniq(readUsageEvents)
   log(
     'info',
diff --git a/src/targets/services/monthlyReportNotification.ts b/src/targets/services/monthlyReportNotification.ts
index 6ba377a2a426f2111e005ba7fdde5c193620e461..6475330793078c4903710f9b870a5fda9969fa2e 100644
--- a/src/targets/services/monthlyReportNotification.ts
+++ b/src/targets/services/monthlyReportNotification.ts
@@ -1,19 +1,19 @@
-import logger from 'cozy-logger'
 import { Client } from 'cozy-client'
+import logger from 'cozy-logger'
+import { FluidType } from 'enum/fluid.enum'
+import { TimeStep } from 'enum/timeStep.enum'
 import get from 'lodash/get'
 import { DateTime } from 'luxon'
 import mjml2html from 'mjml'
 import { PerformanceIndicator } from 'models'
-import { runService } from './service'
-import ProfileService from 'services/profile.service'
-import MailService from 'services/mail.service'
-const monthlyReportTemplate = require('notifications/monthlyReport.hbs')
-import { FluidType } from 'enum/fluid.enum'
-import { TimeStep } from 'enum/timeStep.enum'
-import ConsumptionService from 'services/consumption.service'
 import { MonthlyReport } from 'models/monthlyReport.model'
+import ConsumptionService from 'services/consumption.service'
 import EnvironmentService from 'services/environment.service'
+import MailService from 'services/mail.service'
+import ProfileService from 'services/profile.service'
 import { getMonthNameWithPrep } from 'utils/utils'
+import { runService } from './service'
+const monthlyReportTemplate = require('notifications/monthlyReport.hbs')
 
 const log = logger.namespace('report')
 
@@ -71,12 +71,12 @@ const buildConsumptionText = async (client: Client) => {
     if (value) {
       if (value > 0) {
         text +=
-          '<span class="elec-text"><br>-&nbsp;' +
+          '<span class="elec-text"><br>+&nbsp;' +
           Math.ceil(value * 100) +
           "&nbsp;%&nbsp;d'électricité</span>"
       } else {
         text +=
-          '<span class="elec-text"><br>+&nbsp;' +
+          '<span class="elec-text"><br>-&nbsp;' +
           Math.ceil(Math.abs(value * 100)) +
           "&nbsp;%&nbsp;d'électricité</span>"
       }
@@ -91,12 +91,12 @@ const buildConsumptionText = async (client: Client) => {
     if (value) {
       if (value > 0) {
         text +=
-          '<span class="gas-text"><br>-&nbsp;' +
+          '<span class="gas-text"><br>+&nbsp;' +
           Math.ceil(value * 100) +
           '&nbsp;%&nbsp;de&nbsp;gaz</span>'
       } else {
         text +=
-          '<span class="gas-text"><br>+&nbsp;' +
+          '<span class="gas-text"><br>-&nbsp;' +
           Math.ceil(Math.abs(value * 100)) +
           '&nbsp;%&nbsp;de&nbsp;gaz</span>'
       }
@@ -109,12 +109,12 @@ const buildConsumptionText = async (client: Client) => {
     if (value) {
       if (value > 0) {
         text +=
-          '<span class="water-text"><br>-&nbsp;' +
+          '<span class="water-text"><br>+&nbsp;' +
           Math.ceil(value * 100) +
           "&nbsp;%&nbsp;d'eau</span>"
       } else {
         text +=
-          '<span class="water-text"><br>+&nbsp;' +
+          '<span class="water-text"><br>-&nbsp;' +
           Math.ceil(Math.abs(value * 100)) +
           "&nbsp;%&nbsp;d'eau</span>"
       }
@@ -245,12 +245,14 @@ const monthlyReportNotification = async ({
 
   const consumptionText = await buildConsumptionText(client)
 
-  const isPoll: boolean =
-    monthlyReport.question !== '' && monthlyReport.link !== ''
+  const isInfo: boolean = monthlyReport.info !== ''
 
   const isServiceNews: boolean =
     monthlyReport.newsTitle !== '' && monthlyReport.newsContent !== ''
 
+  const isPoll: boolean =
+    monthlyReport.question !== '' && monthlyReport.link !== ''
+
   const date = DateTime.local()
     .setZone('utc', { keepLocalTime: true })
     .minus({ month: 1 })
@@ -271,7 +273,11 @@ const monthlyReportNotification = async ({
       monthlyReport.image !== ''
         ? baseUrl + monthlyReport.image
         : baseUrl + '/assets/astuce.png',
+    isContent: isInfo || isServiceNews || isPoll,
+    isInfo: isInfo,
+    divider1: (isInfo && isServiceNews) || (isInfo && isPoll),
     isServiceNews: isServiceNews,
+    divider2: isServiceNews && isPoll,
     isPoll: isPoll,
     newsTitle: monthlyReport.newsTitle.replace(/{cozyUrl}/g, appLink + '#/'),
     newsContent: monthlyReport.newsContent.replace(
diff --git a/src/targets/vendor/assets/serviceWorker.js b/src/targets/vendor/assets/serviceWorker.js
index ba1c298b71463c33d43cc121b0d7485026e0efa8..0f14f5b13d69bb7fad30392b70a118150352a9ce 100644
--- a/src/targets/vendor/assets/serviceWorker.js
+++ b/src/targets/vendor/assets/serviceWorker.js
@@ -12,6 +12,10 @@ self.addEventListener('install', event => {
 
 // Listen for requests
 self.addEventListener('fetch', event => {
+  if (event.request.url.indexOf('statweb') !== -1) {
+    return false
+  }
+
   event.respondWith(
     caches.match(event.request).then(() => {
       return fetch(event.request).catch(() => caches.match('offline.html'))
diff --git a/src/types/cozy-ui.d.ts b/src/types/cozy-ui.d.ts
index 01a043d2956e291ddb1bc827f34429d86713bbb8..a13bfbd3f043d8493ea441d5efba5c0b0cce5896 100644
--- a/src/types/cozy-ui.d.ts
+++ b/src/types/cozy-ui.d.ts
@@ -3,6 +3,7 @@
 declare module 'cozy-ui/transpiled/react/Icon'
 declare module 'cozy-ui/transpiled/react/Spinner'
 declare module 'cozy-ui/transpiled/react/Layout'
+declare module 'cozy-ui/transpiled/react/helpers/appDataset'
 
 declare module 'cozy-ui/transpiled/react/I18n' {
   interface IPropsIcon {
diff --git a/src/types/custom.d.ts b/src/types/custom.d.ts
index 0016563a7edbf81abbfd0a222b69e62df2fe09a1..7112effa625990e5b6011188a0044ae5092e2bc6 100644
--- a/src/types/custom.d.ts
+++ b/src/types/custom.d.ts
@@ -6,3 +6,5 @@ declare module '*.svg' {
   const content: string
   export default content
 }
+
+declare module '*.webapp'
diff --git a/src/utils/bar.ts b/src/utils/bar.ts
deleted file mode 100644
index ef818bc84febba6e66c2679cad8757dc5d03404e..0000000000000000000000000000000000000000
--- a/src/utils/bar.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* global cozy */
-
-import { Client } from 'cozy-client'
-import manifest from '../../manifest.webapp'
-
-interface GetValues {
-  cozyAppName: string
-  cozyAppNamePrefix: string
-  cozyIconPath: string
-  cozyLocale: string
-}
-
-const getDataOrDefault = (data: any, defaultData: any) =>
-  /^\{\{\..*\}\}$/.test(data) ? defaultData : data //NOSONAR
-
-/**
- * default data will allow to display correctly the cozy-bar
- * in the standalone (without cozy-stack connexion)
- */
-export const getValues = ({
-  cozyAppName,
-  cozyAppNamePrefix,
-  cozyIconPath,
-}: GetValues) => {
-  const defaultValues = {
-    appIconDefault: require('../targets/vendor/assets/icon.svg'),
-    appNamePrefixDefault: manifest.name_prefix,
-    appNameDefault: manifest.name,
-    appLocaleDefault: 'fr',
-  }
-  return {
-    appName: getDataOrDefault(cozyAppName, defaultValues.appNameDefault),
-    appNamePrefix: getDataOrDefault(
-      cozyAppNamePrefix,
-      defaultValues.appNamePrefixDefault
-    ),
-    iconPath: getDataOrDefault(cozyIconPath, defaultValues.appIconDefault),
-    lang: defaultValues.appLocaleDefault,
-  }
-}
-
-/**
- * Cozy bar initialization
- * @param {object} client - cozy client
- */
-export const initBar = (client: Client) => {
-  const root: any = document.querySelector('[role=application]')
-  const { appName, appNamePrefix, iconPath, lang } = getValues(root.dataset)
-
-  cozy.bar.init({
-    appName,
-    appNamePrefix,
-    cozyClient: client,
-    iconPath,
-    lang,
-    replaceTitleOnMobile: false,
-  })
-}
diff --git a/src/utils/client.ts b/src/utils/client.ts
deleted file mode 100644
index c5826f38a39df570686911072fd7fc45220d73ff..0000000000000000000000000000000000000000
--- a/src/utils/client.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import CozyClient from 'cozy-client'
-import manifest from '../../manifest.webapp'
-import schema from 'doctypes'
-
-/**
- * Returns cozy client instance
- * @returns {object} cozy client instance
- */
-export const getClient = () => {
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  const root: any = document.querySelector('[role=application]')
-  const data = root.dataset
-  const protocol = window.location.protocol
-  const cozyUrl = `${protocol}//${data.cozyDomain}`
-
-  return new CozyClient({
-    uri: cozyUrl,
-    token: data.cozyToken,
-    appMetadata: {
-      slug: manifest.name,
-      version: manifest.version,
-    },
-    schema,
-  })
-}
diff --git a/src/utils/date.ts b/src/utils/date.ts
index d4995d268a984ab9a60d2af3db36b80e0afc0df8..5b558ac8b8e4144e00a64165ad33e981059c4bd4 100644
--- a/src/utils/date.ts
+++ b/src/utils/date.ts
@@ -140,15 +140,14 @@ export const convertDateToShortDateString = (
 
 export const convertDateToMonthString = (date: DateTime): string => {
   if (date.month !== 4 && date.month != 8 && date.month != 10) {
-    return ' de ' + date.toLocaleString({ locale: 'fr-FR', month: 'long' })
+    return ' de ' + date.setLocale('fr-FR').toLocaleString({ month: 'long' })
   } else {
-    return " d'" + date.toLocaleString({ locale: 'fr-FR', month: 'long' })
+    return " d'" + date.setLocale('fr-FR').toLocaleString({ month: 'long' })
   }
 }
 
 export const convertDateToMonthYearString = (date: DateTime): string => {
-  return date.toLocaleString({
-    locale: 'fr-FR',
+  return date.setLocale('fr-FR').toLocaleString({
     month: 'long',
     year: 'numeric',
   })
diff --git a/src/utils/matomoTracker.ts b/src/utils/matomoTracker.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1afb34486aa3badd66f427661e23e9ef838ed56b
--- /dev/null
+++ b/src/utils/matomoTracker.ts
@@ -0,0 +1,109 @@
+import { History, Location, UnregisterCallback } from 'history'
+import { readCozyDataFromDOM } from 'cozy-ui/transpiled/react/helpers/appDataset'
+
+interface InitSettings {
+  cozyUrl: string
+  url: string
+  siteId: number
+  history: History
+  phpFilename?: string
+}
+
+declare global {
+  interface Window {
+    _paq: any
+    Piwik: any
+  }
+}
+
+export default class MatomoTracker {
+  cozyUrl: string
+  url: string
+  siteId: number
+  phpFilename: string
+  history: History
+  unlistenFromHistory: UnregisterCallback
+
+  constructor({
+    cozyUrl,
+    url,
+    siteId,
+    history,
+    phpFilename = 'matomo.php',
+  }: InitSettings) {
+    if (url === undefined || siteId === undefined) {
+      throw new Error(
+        'MatomoTracker cannot be initialized! SiteId and url are mandatory.'
+      )
+    }
+    this.cozyUrl = cozyUrl
+    this.url = url
+    this.siteId = siteId
+    this.phpFilename = phpFilename
+    this.history = history
+    this.unlistenFromHistory = () => null
+    this.init()
+  }
+
+  init() {
+    if (typeof window !== 'undefined') {
+      window._paq = window._paq || []
+      MatomoTracker.push(['enableHeartBeatTimer', 30])
+      MatomoTracker.push(['setSiteId', this.siteId])
+      MatomoTracker.push(['setReferrerUrl', 'https://ecolyo.com'])
+      MatomoTracker.push(['setTrackerUrl', `${this.url + this.phpFilename}`])
+      MatomoTracker.push(['enableLinkTracking'])
+    }
+    return {
+      push: MatomoTracker.push,
+      track: this.track,
+      connectToHistory: this.connectToHistory,
+      disconnectFromHistory: this.disconnectFromHistory,
+    }
+  }
+
+  static push(args: (number[] | string[] | number | string)[]) {
+    window._paq.push(args)
+  }
+
+  configure() {
+    let cozyDomain
+    let userId
+    const root: any = document.querySelector('[role=application]')
+    if (root && root.dataset) {
+      cozyDomain = readCozyDataFromDOM('cozyDomain')
+    }
+    if (cozyDomain) {
+      userId = cozyDomain
+      const indexOfPort = cozyDomain.indexOf(':')
+      if (indexOfPort >= 0) {
+        userId = userId.substring(0, indexOfPort)
+      }
+    }
+  }
+
+  connectToHistory() {
+    this.unlistenFromHistory = this.history.listen(loc => {
+      this.track(loc)
+    })
+  }
+
+  disconnectFromHistory() {
+    if (this.unlistenFromHistory) {
+      this.unlistenFromHistory()
+      return true
+    }
+    return false
+  }
+
+  track(loc: Location) {
+    if (typeof window === 'undefined') {
+      return
+    }
+    const currentPath = loc.hash.substring(1)
+
+    MatomoTracker.push(['setDocumentTitle', currentPath.substring(1)])
+    MatomoTracker.push(['setCustomUrl', 'https://ecolyo.com' + currentPath])
+    MatomoTracker.push(['trackPageView'])
+  }
+}
diff --git a/tests/__mocks__/mockConfig.mock.ts b/tests/__mocks__/mockConfig.mock.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5cede83e872fa85290a48038c65befd1b95a421b
--- /dev/null
+++ b/tests/__mocks__/mockConfig.mock.ts
@@ -0,0 +1,49 @@
+const mockConfig = {
+  fluidConfig: [
+    {
+      fluidTypeId: 0,
+      name: 'enedis',
+      coefficient: 0.174,
+
+      startDate: '2021-08-01T00:00:00.000',
+      dataDelayOffset: 3,
+      konnectorConfig: {
+        name: 'Enedis',
+        oauth: true,
+        slug: 'enedisgrandlyon',
+        siteLink: 'https://mon-compte-client.enedis.fr/',
+        activation: 'https://mon-compte-particulier.enedis.fr/donnees/',
+      },
+    },
+    {
+      fluidTypeId: 1,
+      name: 'egl',
+      coefficient: 0.00319,
+      startDate: '2021-01-01T00:00:00.000',
+      dataDelayOffset: 5,
+      konnectorConfig: {
+        name: 'Eau du Grand Lyon',
+        oauth: false,
+        slug: 'eglgrandlyon',
+        siteLink: 'https://www.eaudugrandlyon.com/inscription.aspx#subc-now',
+        activation: '',
+      },
+    },
+    {
+      fluidTypeId: 2,
+      name: 'grdf',
+      coefficient: 0.1121,
+      startDate: '2021-10-01T00:00:00.000',
+      dataDelayOffset: 5,
+      konnectorConfig: {
+        name: 'GRDF',
+        oauth: true,
+        slug: 'grdfgrandlyon',
+        siteLink: 'https://monespace.grdf.fr/monespace/connexion',
+        activation: '',
+      },
+    },
+  ],
+  termsVersion: '1.0.0',
+}
+export default mockConfig
diff --git a/yarn.lock b/yarn.lock
index d7e96dd9d28c4eacce472c5f5dba25f4bed9bae1..c7f360240a34f1877c35fc9c99c5819359f505de 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
 # yarn lockfile v1
 
 
+"@alloc/types@^1.2.1":
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/@alloc/types/-/types-1.3.0.tgz#904245b8d3260a4b7d8a801c12501968f64fac08"
+  integrity sha512-mH7LiFiq9g6rX2tvt1LtwsclfG5hnsmtIfkZiauAGrm1AwXhoRS0sF2WrN9JGN7eV5vFXqNaB0eXZ3IvMsVi9g==
+
 "@aspnet/signalr-protocol-msgpack@^1.1.0":
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/@aspnet/signalr-protocol-msgpack/-/signalr-protocol-msgpack-1.1.0.tgz#155038149e8e0eee1f97f4d1319f9f3271ff06fb"
@@ -18,18 +23,30 @@
     request "^2.88.0"
     ws "^6.0.0"
 
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.8.3":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
   integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
   dependencies:
     "@babel/highlight" "^7.16.0"
 
+"@babel/code-frame@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+  integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
+  dependencies:
+    "@babel/highlight" "^7.16.7"
+
 "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0":
   version "7.16.4"
   resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e"
   integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==
 
+"@babel/compat-data@^7.17.10":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471"
+  integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==
+
 "@babel/core@7.2.2":
   version "7.2.2"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687"
@@ -50,26 +67,6 @@
     semver "^5.4.1"
     source-map "^0.5.0"
 
-"@babel/core@7.6.2":
-  version "7.6.2"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
-  integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==
-  dependencies:
-    "@babel/code-frame" "^7.5.5"
-    "@babel/generator" "^7.6.2"
-    "@babel/helpers" "^7.6.2"
-    "@babel/parser" "^7.6.2"
-    "@babel/template" "^7.6.0"
-    "@babel/traverse" "^7.6.2"
-    "@babel/types" "^7.6.0"
-    convert-source-map "^1.1.0"
-    debug "^4.1.0"
-    json5 "^2.1.0"
-    lodash "^4.17.13"
-    resolve "^1.3.2"
-    semver "^5.4.1"
-    source-map "^0.5.0"
-
 "@babel/core@7.9.0":
   version "7.9.0"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
@@ -113,7 +110,16 @@
     semver "^6.3.0"
     source-map "^0.5.0"
 
-"@babel/generator@^7.16.0", "@babel/generator@^7.2.2", "@babel/generator@^7.6.2", "@babel/generator@^7.9.0":
+"@babel/eslint-parser@^7.17.0":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz#e14dee36c010edfb0153cf900c2b0815e82e3245"
+  integrity sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==
+  dependencies:
+    eslint-scope "^5.1.1"
+    eslint-visitor-keys "^2.1.0"
+    semver "^6.3.0"
+
+"@babel/generator@^7.16.0", "@babel/generator@^7.2.2", "@babel/generator@^7.9.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2"
   integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==
@@ -122,6 +128,15 @@
     jsesc "^2.5.1"
     source-map "^0.5.0"
 
+"@babel/generator@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d"
+  integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==
+  dependencies:
+    "@babel/types" "^7.18.2"
+    "@jridgewell/gen-mapping" "^0.3.0"
+    jsesc "^2.5.1"
+
 "@babel/helper-annotate-as-pure@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d"
@@ -129,6 +144,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-annotate-as-pure@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+  integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882"
@@ -137,6 +159,14 @@
     "@babel/helper-explode-assignable-expression" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b"
+  integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0":
   version "7.16.3"
   resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0"
@@ -147,6 +177,16 @@
     browserslist "^4.17.5"
     semver "^6.3.0"
 
+"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b"
+  integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-validator-option" "^7.16.7"
+    browserslist "^4.20.2"
+    semver "^6.3.0"
+
 "@babel/helper-create-class-features-plugin@^7.16.0", "@babel/helper-create-class-features-plugin@^7.3.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b"
@@ -159,6 +199,19 @@
     "@babel/helper-replace-supers" "^7.16.0"
     "@babel/helper-split-export-declaration" "^7.16.0"
 
+"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19"
+  integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-member-expression-to-functions" "^7.17.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/helper-replace-supers" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+
 "@babel/helper-create-regexp-features-plugin@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff"
@@ -167,6 +220,14 @@
     "@babel/helper-annotate-as-pure" "^7.16.0"
     regexpu-core "^4.7.1"
 
+"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd"
+  integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    regexpu-core "^5.0.1"
+
 "@babel/helper-define-polyfill-provider@^0.3.0":
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971"
@@ -181,6 +242,25 @@
     resolve "^1.14.2"
     semver "^6.1.2"
 
+"@babel/helper-define-polyfill-provider@^0.3.1":
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665"
+  integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.13.0"
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/traverse" "^7.13.0"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd"
+  integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==
+
 "@babel/helper-explode-assignable-expression@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778"
@@ -188,6 +268,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-explode-assignable-expression@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a"
+  integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-function-name@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481"
@@ -197,6 +284,14 @@
     "@babel/template" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
+  integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
+  dependencies:
+    "@babel/template" "^7.16.7"
+    "@babel/types" "^7.17.0"
+
 "@babel/helper-get-function-arity@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa"
@@ -211,6 +306,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-hoist-variables@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+  integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-member-expression-to-functions@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4"
@@ -218,6 +320,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-member-expression-to-functions@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4"
+  integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==
+  dependencies:
+    "@babel/types" "^7.17.0"
+
 "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3"
@@ -225,6 +334,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-module-imports@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
+  integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-module-transforms@^7.16.0", "@babel/helper-module-transforms@^7.9.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5"
@@ -239,6 +355,20 @@
     "@babel/traverse" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/helper-module-transforms@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd"
+  integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-simple-access" "^7.17.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    "@babel/helper-validator-identifier" "^7.16.7"
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.18.0"
+    "@babel/types" "^7.18.0"
+
 "@babel/helper-optimise-call-expression@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338"
@@ -246,6 +376,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-optimise-call-expression@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2"
+  integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-plugin-utils@7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
@@ -256,6 +393,11 @@
   resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
   integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
 
+"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96"
+  integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==
+
 "@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4":
   version "7.16.4"
   resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e"
@@ -265,6 +407,15 @@
     "@babel/helper-wrap-function" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/helper-remap-async-to-generator@^7.16.8":
+  version "7.16.8"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3"
+  integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-wrap-function" "^7.16.8"
+    "@babel/types" "^7.16.8"
+
 "@babel/helper-replace-supers@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17"
@@ -275,6 +426,17 @@
     "@babel/traverse" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0"
+  integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-member-expression-to-functions" "^7.17.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/traverse" "^7.18.2"
+    "@babel/types" "^7.18.2"
+
 "@babel/helper-simple-access@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517"
@@ -282,6 +444,13 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9"
+  integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==
+  dependencies:
+    "@babel/types" "^7.18.2"
+
 "@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
@@ -296,16 +465,33 @@
   dependencies:
     "@babel/types" "^7.16.0"
 
+"@babel/helper-split-export-declaration@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+  integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
 "@babel/helper-validator-identifier@^7.15.7":
   version "7.15.7"
   resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
   integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
 
+"@babel/helper-validator-identifier@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+  integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+
 "@babel/helper-validator-option@^7.14.5":
   version "7.14.5"
   resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
   integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
 
+"@babel/helper-validator-option@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23"
+  integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==
+
 "@babel/helper-wrap-function@^7.16.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c"
@@ -316,7 +502,17 @@
     "@babel/traverse" "^7.16.0"
     "@babel/types" "^7.16.0"
 
-"@babel/helpers@^7.16.0", "@babel/helpers@^7.2.0", "@babel/helpers@^7.6.2", "@babel/helpers@^7.9.0":
+"@babel/helper-wrap-function@^7.16.8":
+  version "7.16.8"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200"
+  integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==
+  dependencies:
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.16.8"
+    "@babel/types" "^7.16.8"
+
+"@babel/helpers@^7.16.0", "@babel/helpers@^7.2.0", "@babel/helpers@^7.9.0":
   version "7.16.3"
   resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c"
   integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==
@@ -334,11 +530,50 @@
     chalk "^2.0.0"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.2.2", "@babel/parser@^7.6.2", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
+"@babel/highlight@^7.16.7":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351"
+  integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.2.2", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0":
   version "7.16.4"
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e"
   integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==
 
+"@babel/parser@^7.16.7", "@babel/parser@^7.18.5":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c"
+  integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e"
+  integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753"
+  integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-proposal-optional-chaining" "^7.17.12"
+
+"@babel/plugin-proposal-async-generator-functions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03"
+  integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-remap-async-to-generator" "^7.16.8"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
 "@babel/plugin-proposal-async-generator-functions@^7.2.0":
   version "7.16.4"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz#e606eb6015fec6fa5978c940f315eae4e300b081"
@@ -356,6 +591,47 @@
     "@babel/helper-create-class-features-plugin" "^7.3.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
+"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4"
+  integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-proposal-class-static-block@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710"
+  integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2"
+  integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378"
+  integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664"
+  integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
 "@babel/plugin-proposal-json-strings@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25"
@@ -364,6 +640,30 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     "@babel/plugin-syntax-json-strings" "^7.8.3"
 
+"@babel/plugin-proposal-logical-assignment-operators@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23"
+  integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be"
+  integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9"
+  integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
 "@babel/plugin-proposal-object-rest-spread@7.3.2":
   version "7.3.2"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1"
@@ -372,6 +672,17 @@
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
 
+"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8"
+  integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.17.10"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.17.12"
+
 "@babel/plugin-proposal-object-rest-spread@^7.3.1":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6"
@@ -383,6 +694,14 @@
     "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
     "@babel/plugin-transform-parameters" "^7.16.0"
 
+"@babel/plugin-proposal-optional-catch-binding@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf"
+  integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
 "@babel/plugin-proposal-optional-catch-binding@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16"
@@ -391,6 +710,41 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
 
+"@babel/plugin-proposal-optional-chaining@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174"
+  integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c"
+  integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-proposal-private-property-in-object@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d"
+  integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d"
+  integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-proposal-unicode-property-regex@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612"
@@ -413,13 +767,41 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.8.0"
 
-"@babel/plugin-syntax-class-properties@^7.8.3":
+"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
   version "7.12.13"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
   integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.12.13"
 
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-assertions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd"
+  integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-syntax-import-meta@^7.8.3":
   version "7.10.4"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
@@ -441,7 +823,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
-"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+"@babel/plugin-syntax-jsx@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47"
+  integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
   version "7.10.4"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
   integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
@@ -455,7 +844,7 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.8.0"
 
-"@babel/plugin-syntax-numeric-separator@^7.8.3":
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
   version "7.10.4"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
   integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
@@ -483,7 +872,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.8.0"
 
-"@babel/plugin-syntax-top-level-await@^7.8.3":
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
   version "7.14.5"
   resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
   integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
@@ -497,6 +893,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-arrow-functions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45"
+  integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-arrow-functions@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e"
@@ -504,6 +907,15 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-async-to-generator@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832"
+  integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-remap-async-to-generator" "^7.16.8"
+
 "@babel/plugin-transform-async-to-generator@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604"
@@ -513,6 +925,13 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     "@babel/helper-remap-async-to-generator" "^7.16.0"
 
+"@babel/plugin-transform-block-scoped-functions@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620"
+  integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-block-scoped-functions@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d"
@@ -520,6 +939,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-block-scoping@^7.17.12":
+  version "7.18.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9"
+  integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-block-scoping@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16"
@@ -527,6 +953,20 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-classes@^7.17.12":
+  version "7.18.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814"
+  integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-replace-supers" "^7.18.2"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    globals "^11.1.0"
+
 "@babel/plugin-transform-classes@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5"
@@ -540,6 +980,13 @@
     "@babel/helper-split-export-declaration" "^7.16.0"
     globals "^11.1.0"
 
+"@babel/plugin-transform-computed-properties@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f"
+  integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-computed-properties@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7"
@@ -547,6 +994,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-destructuring@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858"
+  integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-destructuring@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c"
@@ -554,6 +1008,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241"
+  integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-dotall-regex@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f"
@@ -562,6 +1024,13 @@
     "@babel/helper-create-regexp-features-plugin" "^7.16.0"
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-duplicate-keys@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c"
+  integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-duplicate-keys@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176"
@@ -569,6 +1038,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-exponentiation-operator@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b"
+  integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-exponentiation-operator@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4"
@@ -577,6 +1054,13 @@
     "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0"
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-for-of@^7.18.1":
+  version "7.18.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036"
+  integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-for-of@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2"
@@ -584,6 +1068,15 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-function-name@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf"
+  integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.16.7"
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-function-name@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e"
@@ -592,6 +1085,13 @@
     "@babel/helper-function-name" "^7.16.0"
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-literals@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae"
+  integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-literals@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac"
@@ -599,6 +1099,22 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-member-expression-literals@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384"
+  integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-modules-amd@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed"
+  integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
 "@babel/plugin-transform-modules-amd@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e"
@@ -608,6 +1124,16 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     babel-plugin-dynamic-import-node "^2.3.3"
 
+"@babel/plugin-transform-modules-commonjs@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e"
+  integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-simple-access" "^7.18.2"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
 "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.7.5":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922"
@@ -618,6 +1144,17 @@
     "@babel/helper-simple-access" "^7.16.0"
     babel-plugin-dynamic-import-node "^2.3.3"
 
+"@babel/plugin-transform-modules-systemjs@^7.18.0":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996"
+  integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.16.7"
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-validator-identifier" "^7.16.7"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
 "@babel/plugin-transform-modules-systemjs@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4"
@@ -629,6 +1166,14 @@
     "@babel/helper-validator-identifier" "^7.15.7"
     babel-plugin-dynamic-import-node "^2.3.3"
 
+"@babel/plugin-transform-modules-umd@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f"
+  integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-modules-umd@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7"
@@ -637,6 +1182,14 @@
     "@babel/helper-module-transforms" "^7.16.0"
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931"
+  integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-named-capturing-groups-regex@^7.3.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca"
@@ -651,6 +1204,21 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-new-target@^7.17.12":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931"
+  integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-object-super@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94"
+  integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/helper-replace-supers" "^7.16.7"
+
 "@babel/plugin-transform-object-super@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b"
@@ -666,6 +1234,20 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-parameters@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766"
+  integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-property-literals@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55"
+  integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-react-display-name@^7.0.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676"
@@ -673,6 +1255,20 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-react-display-name@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340"
+  integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-react-jsx-development@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8"
+  integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==
+  dependencies:
+    "@babel/plugin-transform-react-jsx" "^7.16.7"
+
 "@babel/plugin-transform-react-jsx-self@^7.0.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c"
@@ -698,6 +1294,25 @@
     "@babel/plugin-syntax-jsx" "^7.16.0"
     "@babel/types" "^7.16.0"
 
+"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba"
+  integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-jsx" "^7.17.12"
+    "@babel/types" "^7.17.12"
+
+"@babel/plugin-transform-react-pure-annotations@^7.16.7":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz#ef82c8e310913f3522462c9ac967d395092f1954"
+  integrity sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-regenerator@^7.0.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4"
@@ -705,6 +1320,21 @@
   dependencies:
     regenerator-transform "^0.14.2"
 
+"@babel/plugin-transform-regenerator@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5"
+  integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    regenerator-transform "^0.15.0"
+
+"@babel/plugin-transform-reserved-words@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f"
+  integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-runtime@7.2.0":
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea"
@@ -715,6 +1345,18 @@
     resolve "^1.8.1"
     semver "^5.5.1"
 
+"@babel/plugin-transform-runtime@^7.12.1":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743"
+  integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    babel-plugin-polyfill-corejs2 "^0.3.0"
+    babel-plugin-polyfill-corejs3 "^0.5.0"
+    babel-plugin-polyfill-regenerator "^0.3.0"
+    semver "^6.3.0"
+
 "@babel/plugin-transform-runtime@^7.8.3":
   version "7.16.4"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8"
@@ -727,6 +1369,13 @@
     babel-plugin-polyfill-regenerator "^0.3.0"
     semver "^6.3.0"
 
+"@babel/plugin-transform-shorthand-properties@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a"
+  integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-shorthand-properties@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d"
@@ -734,6 +1383,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-spread@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5"
+  integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+
 "@babel/plugin-transform-spread@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb"
@@ -742,6 +1399,13 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
 
+"@babel/plugin-transform-sticky-regex@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660"
+  integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-sticky-regex@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd"
@@ -749,6 +1413,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-template-literals@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28"
+  integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-template-literals@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302"
@@ -756,6 +1427,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.14.5"
 
+"@babel/plugin-transform-typeof-symbol@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889"
+  integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
 "@babel/plugin-transform-typeof-symbol@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2"
@@ -772,6 +1450,21 @@
     "@babel/helper-plugin-utils" "^7.14.5"
     "@babel/plugin-syntax-typescript" "^7.16.0"
 
+"@babel/plugin-transform-unicode-escapes@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3"
+  integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-unicode-regex@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2"
+  integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
 "@babel/plugin-transform-unicode-regex@^7.2.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402"
@@ -837,6 +1530,98 @@
     js-levenshtein "^1.1.3"
     semver "^5.3.0"
 
+"@babel/preset-env@^7.12.1":
+  version "7.18.2"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a"
+  integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.18.2"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-validator-option" "^7.16.7"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12"
+    "@babel/plugin-proposal-async-generator-functions" "^7.17.12"
+    "@babel/plugin-proposal-class-properties" "^7.17.12"
+    "@babel/plugin-proposal-class-static-block" "^7.18.0"
+    "@babel/plugin-proposal-dynamic-import" "^7.16.7"
+    "@babel/plugin-proposal-export-namespace-from" "^7.17.12"
+    "@babel/plugin-proposal-json-strings" "^7.17.12"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12"
+    "@babel/plugin-proposal-numeric-separator" "^7.16.7"
+    "@babel/plugin-proposal-object-rest-spread" "^7.18.0"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
+    "@babel/plugin-proposal-optional-chaining" "^7.17.12"
+    "@babel/plugin-proposal-private-methods" "^7.17.12"
+    "@babel/plugin-proposal-private-property-in-object" "^7.17.12"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.17.12"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.17.12"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.17.12"
+    "@babel/plugin-transform-async-to-generator" "^7.17.12"
+    "@babel/plugin-transform-block-scoped-functions" "^7.16.7"
+    "@babel/plugin-transform-block-scoping" "^7.17.12"
+    "@babel/plugin-transform-classes" "^7.17.12"
+    "@babel/plugin-transform-computed-properties" "^7.17.12"
+    "@babel/plugin-transform-destructuring" "^7.18.0"
+    "@babel/plugin-transform-dotall-regex" "^7.16.7"
+    "@babel/plugin-transform-duplicate-keys" "^7.17.12"
+    "@babel/plugin-transform-exponentiation-operator" "^7.16.7"
+    "@babel/plugin-transform-for-of" "^7.18.1"
+    "@babel/plugin-transform-function-name" "^7.16.7"
+    "@babel/plugin-transform-literals" "^7.17.12"
+    "@babel/plugin-transform-member-expression-literals" "^7.16.7"
+    "@babel/plugin-transform-modules-amd" "^7.18.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.18.2"
+    "@babel/plugin-transform-modules-systemjs" "^7.18.0"
+    "@babel/plugin-transform-modules-umd" "^7.18.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12"
+    "@babel/plugin-transform-new-target" "^7.17.12"
+    "@babel/plugin-transform-object-super" "^7.16.7"
+    "@babel/plugin-transform-parameters" "^7.17.12"
+    "@babel/plugin-transform-property-literals" "^7.16.7"
+    "@babel/plugin-transform-regenerator" "^7.18.0"
+    "@babel/plugin-transform-reserved-words" "^7.17.12"
+    "@babel/plugin-transform-shorthand-properties" "^7.16.7"
+    "@babel/plugin-transform-spread" "^7.17.12"
+    "@babel/plugin-transform-sticky-regex" "^7.16.7"
+    "@babel/plugin-transform-template-literals" "^7.18.2"
+    "@babel/plugin-transform-typeof-symbol" "^7.17.12"
+    "@babel/plugin-transform-unicode-escapes" "^7.16.7"
+    "@babel/plugin-transform-unicode-regex" "^7.16.7"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.18.2"
+    babel-plugin-polyfill-corejs2 "^0.3.0"
+    babel-plugin-polyfill-corejs3 "^0.5.0"
+    babel-plugin-polyfill-regenerator "^0.3.0"
+    core-js-compat "^3.22.1"
+    semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.5":
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
 "@babel/preset-react@7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0"
@@ -848,6 +1633,18 @@
     "@babel/plugin-transform-react-jsx-self" "^7.0.0"
     "@babel/plugin-transform-react-jsx-source" "^7.0.0"
 
+"@babel/preset-react@^7.12.5":
+  version "7.17.12"
+  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d"
+  integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-validator-option" "^7.16.7"
+    "@babel/plugin-transform-react-display-name" "^7.16.7"
+    "@babel/plugin-transform-react-jsx" "^7.17.12"
+    "@babel/plugin-transform-react-jsx-development" "^7.16.7"
+    "@babel/plugin-transform-react-pure-annotations" "^7.16.7"
+
 "@babel/preset-typescript@^7.7.4":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac"
@@ -886,7 +1683,14 @@
   dependencies:
     regenerator-runtime "^0.13.4"
 
-"@babel/template@^7.16.0", "@babel/template@^7.2.2", "@babel/template@^7.3.3", "@babel/template@^7.6.0", "@babel/template@^7.8.6":
+"@babel/runtime@^7.12.13":
+  version "7.18.6"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580"
+  integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.16.0", "@babel/template@^7.2.2", "@babel/template@^7.3.3", "@babel/template@^7.8.6":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6"
   integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==
@@ -895,7 +1699,16 @@
     "@babel/parser" "^7.16.0"
     "@babel/types" "^7.16.0"
 
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.2.2", "@babel/traverse@^7.6.2", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
+"@babel/template@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+  integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/parser" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.2.2", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0":
   version "7.16.3"
   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787"
   integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==
@@ -910,7 +1723,23 @@
     debug "^4.1.0"
     globals "^11.1.0"
 
-"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.6.0", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
+"@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2":
+  version "7.18.5"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd"
+  integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/generator" "^7.18.2"
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-hoist-variables" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    "@babel/parser" "^7.18.5"
+    "@babel/types" "^7.18.4"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0", "@babel/types@^7.9.0":
   version "7.16.0"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
   integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
@@ -918,6 +1747,14 @@
     "@babel/helper-validator-identifier" "^7.15.7"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.4.4":
+  version "7.18.4"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354"
+  integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
+    to-fast-properties "^2.0.0"
+
 "@bcoe/v8-coverage@^0.2.3":
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -931,6 +1768,11 @@
     exec-sh "^0.3.2"
     minimist "^1.2.0"
 
+"@colors/colors@1.5.0":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+  integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
 "@cozy/minilog@1.0.0", "@cozy/minilog@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@cozy/minilog/-/minilog-1.0.0.tgz#1acc1aad849261e931e255a5f181b638315f7b84"
@@ -938,16 +1780,6 @@
   dependencies:
     microee "0.0.6"
 
-"@emotion/cache@^10.0.27":
-  version "10.0.29"
-  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
-  integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
-  dependencies:
-    "@emotion/sheet" "0.9.4"
-    "@emotion/stylis" "0.8.5"
-    "@emotion/utils" "0.11.3"
-    "@emotion/weak-memoize" "0.2.5"
-
 "@emotion/cache@^11.4.0", "@emotion/cache@^11.6.0":
   version "11.6.0"
   resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.6.0.tgz#65fbdbbe4382f1991d8b20853c38e63ecccec9a1"
@@ -959,16 +1791,11 @@
     "@emotion/weak-memoize" "^0.2.5"
     stylis "^4.0.10"
 
-"@emotion/hash@0.8.0", "@emotion/hash@^0.8.0":
+"@emotion/hash@^0.8.0":
   version "0.8.0"
   resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
   integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
 
-"@emotion/memoize@0.7.4":
-  version "0.7.4"
-  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
-  integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
-
 "@emotion/memoize@^0.7.4":
   version "0.7.5"
   resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
@@ -987,17 +1814,6 @@
     "@emotion/weak-memoize" "^0.2.5"
     hoist-non-react-statics "^3.3.1"
 
-"@emotion/serialize@^0.11.15":
-  version "0.11.16"
-  resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
-  integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
-  dependencies:
-    "@emotion/hash" "0.8.0"
-    "@emotion/memoize" "0.7.4"
-    "@emotion/unitless" "0.7.5"
-    "@emotion/utils" "0.11.3"
-    csstype "^2.5.7"
-
 "@emotion/serialize@^1.0.2":
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965"
@@ -1009,46 +1825,60 @@
     "@emotion/utils" "^1.0.0"
     csstype "^3.0.2"
 
-"@emotion/sheet@0.9.4":
-  version "0.9.4"
-  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
-  integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
-
 "@emotion/sheet@^1.1.0":
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2"
   integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==
 
-"@emotion/stylis@0.8.5":
-  version "0.8.5"
-  resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
-  integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
-
-"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.5":
+"@emotion/unitless@^0.7.5":
   version "0.7.5"
   resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
   integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
 
-"@emotion/utils@0.11.3":
-  version "0.11.3"
-  resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
-  integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
-
 "@emotion/utils@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
   integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==
 
-"@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5":
+"@emotion/weak-memoize@^0.2.5":
   version "0.2.5"
   resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
   integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
 
+"@eslint/eslintrc@^1.3.0":
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
+  integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==
+  dependencies:
+    ajv "^6.12.4"
+    debug "^4.3.2"
+    espree "^9.3.2"
+    globals "^13.15.0"
+    ignore "^5.2.0"
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    minimatch "^3.1.2"
+    strip-json-comments "^3.1.1"
+
 "@gar/promisify@^1.0.1":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
   integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
 
+"@humanwhocodes/config-array@^0.9.2":
+  version "0.9.5"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
+  integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
+  dependencies:
+    "@humanwhocodes/object-schema" "^1.2.1"
+    debug "^4.1.1"
+    minimatch "^3.0.4"
+
+"@humanwhocodes/object-schema@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
 "@hutson/parse-repository-url@^3.0.0":
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
@@ -1126,6 +1956,17 @@
     "@types/node" "*"
     jest-mock "^26.6.2"
 
+"@jest/fake-timers@^25.1.0":
+  version "25.5.0"
+  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185"
+  integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==
+  dependencies:
+    "@jest/types" "^25.5.0"
+    jest-message-util "^25.5.0"
+    jest-mock "^25.5.0"
+    jest-util "^25.5.0"
+    lolex "^5.0.0"
+
 "@jest/fake-timers@^26.6.2":
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad"
@@ -1179,6 +2020,13 @@
   optionalDependencies:
     node-notifier "^8.0.0"
 
+"@jest/schemas@^28.0.2":
+  version "28.0.2"
+  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613"
+  integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==
+  dependencies:
+    "@sinclair/typebox" "^0.23.3"
+
 "@jest/source-map@^26.6.2":
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535"
@@ -1230,14 +2078,15 @@
     source-map "^0.6.1"
     write-file-atomic "^3.0.0"
 
-"@jest/types@^24.9.0":
-  version "24.9.0"
-  resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
-  integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+"@jest/types@^25.5.0":
+  version "25.5.0"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+  integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
   dependencies:
     "@types/istanbul-lib-coverage" "^2.0.0"
     "@types/istanbul-reports" "^1.1.1"
-    "@types/yargs" "^13.0.0"
+    "@types/yargs" "^15.0.0"
+    chalk "^3.0.0"
 
 "@jest/types@^26.6.2":
   version "26.6.2"
@@ -1250,27 +2099,62 @@
     "@types/yargs" "^15.0.0"
     chalk "^4.0.0"
 
-"@material-ui/core@~4.8.3":
-  version "4.8.3"
-  resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.8.3.tgz#858f758b26d8417eb39310f07fb9d7a72beb8b03"
-  integrity sha512-ZJbfJQmkuZCSQTf0nzpfZwizmDdCq8ruZxnPNFnhoKDqgJpMvV8TJRi8vdI9ls1tMuTqxlhyhw8556fxOpWpFQ==
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9"
+  integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.0"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.0.3":
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
+  integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
+
+"@jridgewell/set-array@^1.0.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea"
+  integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+  version "1.4.13"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
+  integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
+
+"@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.13"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea"
+  integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@juggle/resize-observer@^3.1.3":
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0"
+  integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==
+
+"@material-ui/core@~4.12.0":
+  version "4.12.4"
+  resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73"
+  integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==
   dependencies:
     "@babel/runtime" "^7.4.4"
-    "@material-ui/styles" "^4.8.2"
-    "@material-ui/system" "^4.7.1"
-    "@material-ui/types" "^4.1.1"
-    "@material-ui/utils" "^4.7.1"
+    "@material-ui/styles" "^4.11.5"
+    "@material-ui/system" "^4.12.2"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.3"
     "@types/react-transition-group" "^4.2.0"
-    clsx "^1.0.2"
-    convert-css-length "^2.0.1"
-    hoist-non-react-statics "^3.2.1"
-    normalize-scroll-left "^0.2.0"
-    popper.js "^1.14.1"
+    clsx "^1.0.4"
+    hoist-non-react-statics "^3.3.2"
+    popper.js "1.16.1-lts"
     prop-types "^15.7.2"
-    react-is "^16.8.0"
-    react-transition-group "^4.3.0"
+    react-is "^16.8.0 || ^17.0.0"
+    react-transition-group "^4.4.0"
 
-"@material-ui/styles@^4.11.3", "@material-ui/styles@^4.8.2":
+"@material-ui/styles@^4.11.3":
   version "4.11.4"
   resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d"
   integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==
@@ -1292,13 +2176,35 @@
     jss-plugin-vendor-prefixer "^10.5.1"
     prop-types "^15.7.2"
 
-"@material-ui/system@^4.7.1":
-  version "4.12.1"
-  resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.1.tgz#2dd96c243f8c0a331b2bb6d46efd7771a399707c"
-  integrity sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==
+"@material-ui/styles@^4.11.5":
+  version "4.11.5"
+  resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb"
+  integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==
   dependencies:
     "@babel/runtime" "^7.4.4"
-    "@material-ui/utils" "^4.11.2"
+    "@emotion/hash" "^0.8.0"
+    "@material-ui/types" "5.1.0"
+    "@material-ui/utils" "^4.11.3"
+    clsx "^1.0.4"
+    csstype "^2.5.2"
+    hoist-non-react-statics "^3.3.2"
+    jss "^10.5.1"
+    jss-plugin-camel-case "^10.5.1"
+    jss-plugin-default-unit "^10.5.1"
+    jss-plugin-global "^10.5.1"
+    jss-plugin-nested "^10.5.1"
+    jss-plugin-props-sort "^10.5.1"
+    jss-plugin-rule-value-function "^10.5.1"
+    jss-plugin-vendor-prefixer "^10.5.1"
+    prop-types "^15.7.2"
+
+"@material-ui/system@^4.12.2":
+  version "4.12.2"
+  resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b"
+  integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    "@material-ui/utils" "^4.11.3"
     csstype "^2.5.2"
     prop-types "^15.7.2"
 
@@ -1307,14 +2213,7 @@
   resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
   integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
 
-"@material-ui/types@^4.1.1":
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b"
-  integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==
-  dependencies:
-    "@types/react" "*"
-
-"@material-ui/utils@^4.11.2", "@material-ui/utils@^4.7.1":
+"@material-ui/utils@^4.11.2":
   version "4.11.2"
   resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a"
   integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==
@@ -1323,6 +2222,15 @@
     prop-types "^15.7.2"
     react-is "^16.8.0 || ^17.0.0"
 
+"@material-ui/utils@^4.11.3":
+  version "4.11.3"
+  resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942"
+  integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==
+  dependencies:
+    "@babel/runtime" "^7.4.4"
+    prop-types "^15.7.2"
+    react-is "^16.8.0 || ^17.0.0"
+
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1425,18 +2333,98 @@
     set-cookie-parser "^2.3.5"
     utf8-byte-length "^1.0.4"
 
-"@pollyjs/utils@^5.1.1":
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/@pollyjs/utils/-/utils-5.1.1.tgz#3dd3c7df82ef5df3fdb6db7be14f097c44b2001c"
-  integrity sha512-Kzx4NkFJI2p2N82mCtpGZk82ArDCJUnRHPZ1mTEIkRSOwtz30N729+dbI39aS6H5oGcD8x/KAx3ZTAj3EQLxaQ==
+"@pollyjs/utils@^5.1.1":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/@pollyjs/utils/-/utils-5.1.1.tgz#3dd3c7df82ef5df3fdb6db7be14f097c44b2001c"
+  integrity sha512-Kzx4NkFJI2p2N82mCtpGZk82ArDCJUnRHPZ1mTEIkRSOwtz30N729+dbI39aS6H5oGcD8x/KAx3ZTAj3EQLxaQ==
+  dependencies:
+    qs "^6.7.0"
+    url-parse "^1.4.7"
+
+"@popperjs/core@^2.4.4":
+  version "2.10.2"
+  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590"
+  integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==
+
+"@react-spring/animated@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.0.0-rc.3.tgz#e792cb76aacecfc78db2be6020ac11ce96503eb5"
+  integrity sha512-dAvgtKhkYpzzr+EkmZ4ZuJ5CujxCW0LaT109DvO/2MQNk3EWIxcgl+ik4tSulSbgau1GN8RlkRKyDp0wISdQ3Q==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/shared" "9.0.0-rc.3"
+    react-layout-effect "^1.0.1"
+
+"@react-spring/core@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.0.0-rc.3.tgz#c8e697573936c525bd0f6ca0c0869f75c86e8a83"
+  integrity sha512-3OzsVFxpfMJNkkQj8TwAH3NhUAX76AXu6WkslQF4EgBeEoG5eY3m+VvM9RsAsGWDuBKpscZ/wBpFt5Ih6KdGHA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
+    react-layout-effect "^1.0.1"
+    use-memo-one "^1.1.0"
+
+"@react-spring/konva@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.0.0-rc.3.tgz#7bad631eb59f141001d668267314ca40546ecf97"
+  integrity sha512-uampLRgrHIqA3ilnheePUVEUE+fdeipXORI4XZJFsORP01CUJeJCxBwMagaxvsHJAtuNErMI/IebE1T2W8i5qA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
+
+"@react-spring/native@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.0.0-rc.3.tgz#863b8278ea6064385c4fffaaed40316e4a2acaa8"
+  integrity sha512-7JSixJLfzg8V0IrgyGS3gGr2v8CGh4Kym15Htp3CJq74GFBJMyaQS0KaMjieXnw5alTpQoeGBESfA3v5dPlPYg==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
+
+"@react-spring/shared@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.0.0-rc.3.tgz#3f4c9d90accc20fef51a283a7806d78390b84161"
+  integrity sha512-dd50TxwwMWd+dSB0InjndUN9w17cbnMCPy+0sag6zRxxKIo7eOyWSliOtLKxvufgmdC8Prm4M3GT5dmB1yxKEQ==
+  dependencies:
+    "@alloc/types" "^1.2.1"
+    "@babel/runtime" "^7.3.1"
+    fluids "^0.1.6"
+    tslib "^1.11.1"
+
+"@react-spring/three@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.0.0-rc.3.tgz#bbfa7863c96ed8fa200cbff69222763c00977eef"
+  integrity sha512-H55T+Dnck+hsJ8WgE+tb89ngX1E1lDOpMBG4mGzNLGok6XgGqN0VBsHRN3QDl+aPfmJI1BPFPR6b6WbhwqRNbw==
   dependencies:
-    qs "^6.7.0"
-    url-parse "^1.4.7"
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
 
-"@popperjs/core@^2.4.4":
-  version "2.10.2"
-  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590"
-  integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==
+"@react-spring/web@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.0.0-rc.3.tgz#da977382f91d9af4c400e4aa7dc37d3db07b87e0"
+  integrity sha512-rEvipblmihiz8+Eo01zDp5dqWn6XfYk8q2rlN9c18YIOL4o6nuY/VplDoocUMHYfH4liurpO4o1QudKOO1nAiQ==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
+
+"@react-spring/zdog@9.0.0-rc.3":
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.0.0-rc.3.tgz#00f611042b3761b984d0ca2c98da7dddcc11f081"
+  integrity sha512-fl2JI098sfOJ+BaS9xCrnz8NSimL8yPrVwO0lHSpXLn/q3o3MYmRAeJnZQv8yDtT6isTHua6Tfb9vWuZWEXSmA==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/animated" "9.0.0-rc.3"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/shared" "9.0.0-rc.3"
 
 "@sentry/browser@^6.0.1":
   version "6.15.0"
@@ -1495,6 +2483,11 @@
   resolved "https://registry.yarnpkg.com/@simbathesailor/use-what-changed/-/use-what-changed-2.0.0.tgz#7f82d78f92c8588b5fadd702065dde93bd781403"
   integrity sha512-ulBNrPSvfho9UN6zS2fii3AsdEcp2fMaKeqUZZeCNPaZbB6aXyTUhpEN9atjMAbu/eyK3AY8L4SYJUG62Ekocw==
 
+"@sinclair/typebox@^0.23.3":
+  version "0.23.5"
+  resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d"
+  integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==
+
 "@sindresorhus/fnv1a@^1.2.0":
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/@sindresorhus/fnv1a/-/fnv1a-1.2.0.tgz#d554da64c406f3b62ad06dfce9efd537a4a55de4"
@@ -1514,16 +2507,12 @@
   dependencies:
     "@sinonjs/commons" "^1.7.0"
 
-"@testing-library/react-hooks@^5.0.0":
-  version "5.1.3"
-  resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-5.1.3.tgz#f722cc526025be2c16966a9a081edf47a2528721"
-  integrity sha512-UdEUtlQapQ579NEcXDAUE275u+KUsPtxW7NmFrNt0bE6lW8lqNCyxDK0RSuECmNZ/S0/fgP00W9RWRhVKO/hRg==
+"@testing-library/react-hooks@^8.0.0":
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz#0924bbd5b55e0c0c0502d1754657ada66947ca12"
+  integrity sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==
   dependencies:
     "@babel/runtime" "^7.12.5"
-    "@types/react" ">=16.9.0"
-    "@types/react-dom" ">=16.9.0"
-    "@types/react-test-renderer" ">=16.9.0"
-    filter-console "^0.1.1"
     react-error-boundary "^3.1.0"
 
 "@tokenizer/token@^0.3.0":
@@ -1576,6 +2565,13 @@
   dependencies:
     "@types/node" "*"
 
+"@types/cheerio@^0.22.22":
+  version "0.22.31"
+  resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.31.tgz#b8538100653d6bb1b08a1e46dec75b4f2a5d5eb6"
+  integrity sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==
+  dependencies:
+    "@types/node" "*"
+
 "@types/classnames@^2.2.10":
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd"
@@ -1807,10 +2803,18 @@
     "@types/cheerio" "*"
     "@types/react" "*"
 
-"@types/eslint-visitor-keys@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
-  integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+"@types/eslint@^8.4.2":
+  version "8.4.5"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4"
+  integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*":
+  version "0.0.52"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.52.tgz#7f1f57ad5b741f3d5b210d3b1f145640d89bf8fe"
+  integrity sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==
 
 "@types/geojson@*":
   version "7946.0.8"
@@ -1872,13 +2876,6 @@
   dependencies:
     "@types/istanbul-lib-report" "*"
 
-"@types/jest@^24.0.25":
-  version "24.9.1"
-  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534"
-  integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==
-  dependencies:
-    jest-diff "^24.3.0"
-
 "@types/jest@^26.0.20":
   version "26.0.24"
   resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a"
@@ -1887,7 +2884,20 @@
     jest-diff "^26.0.0"
     pretty-format "^26.0.0"
 
-"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
+"@types/jest@^28.0.0":
+  version "28.1.3"
+  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.3.tgz#52f3f3e50ce59191ff5fbb1084896cc0cf30c9ce"
+  integrity sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==
+  dependencies:
+    jest-matcher-utils "^28.0.0"
+    pretty-format "^28.0.0"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.9":
+  version "7.0.11"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
   version "7.0.9"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
   integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
@@ -1897,10 +2907,15 @@
   resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578"
   integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==
 
-"@types/luxon@^1.21.0":
-  version "1.27.1"
-  resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-1.27.1.tgz#aceeb2d5be8fccf541237e184e37ecff5faa9096"
-  integrity sha512-cPiXpOvPFDr2edMnOXlz3UBDApwUfR+cpizvxCy0n3vp9bz/qe8BWzHPIEFcy+ogUOyjKuCISgyq77ELZPmkkg==
+"@types/lodash@^4.14.175":
+  version "4.14.182"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
+  integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
+
+"@types/luxon@^2.0.0":
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.3.2.tgz#8a3f2cdd4858ce698b56cd8597d9243b8e9d3c65"
+  integrity sha512-WOehptuhKIXukSUUkRgGbj2c997Uv/iUgYgII8U7XLJqq9W2oF0kQ6frEznRQbdurioz+L/cdaIm4GutTQfgmA==
 
 "@types/minimatch@*":
   version "3.0.5"
@@ -1930,10 +2945,10 @@
   resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
   integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
 
-"@types/object-hash@^1.3.1":
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/@types/object-hash/-/object-hash-1.3.4.tgz#079ba142be65833293673254831b5e3e847fe58b"
-  integrity sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==
+"@types/object-hash@^2.0.0":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@types/object-hash/-/object-hash-2.2.1.tgz#67c169f8f033e0b62abbf81df2d00f4598d540b9"
+  integrity sha512-i/rtaJFCsPljrZvP/akBqEwUP2y5cZLOmvO+JaYnz01aPknrQ+hB5MRcO7iqCUsFaYfTG8kGfKUyboA07xeDHQ==
 
 "@types/parse-json@^4.0.0":
   version "4.0.0"
@@ -1945,6 +2960,11 @@
   resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281"
   integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==
 
+"@types/prettier@^2.6.0":
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
+  integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==
+
 "@types/prop-types@*":
   version "15.7.4"
   resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
@@ -1955,13 +2975,6 @@
   resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
   integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
 
-"@types/react-dom@>=16.9.0":
-  version "17.0.11"
-  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466"
-  integrity sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==
-  dependencies:
-    "@types/react" "*"
-
 "@types/react-dom@^16.9.8":
   version "16.9.14"
   resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.14.tgz#674b8f116645fe5266b40b525777fc6bb8eb3bcd"
@@ -2003,13 +3016,6 @@
     "@types/history" "*"
     "@types/react" "*"
 
-"@types/react-test-renderer@>=16.9.0":
-  version "17.0.1"
-  resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3120f7d1c157fba9df0118dae20cb0297ee0e06b"
-  integrity sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw==
-  dependencies:
-    "@types/react" "*"
-
 "@types/react-transition-group@^4.2.0":
   version "4.4.4"
   resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e"
@@ -2017,7 +3023,7 @@
   dependencies:
     "@types/react" "*"
 
-"@types/react@*", "@types/react@>=16.9.0":
+"@types/react@*":
   version "17.0.37"
   resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959"
   integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==
@@ -2047,6 +3053,11 @@
   resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
   integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
 
+"@types/stack-utils@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+  integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
 "@types/stack-utils@^2.0.0":
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
@@ -2057,13 +3068,6 @@
   resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
   integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
 
-"@types/yargs@^13.0.0":
-  version "13.0.12"
-  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092"
-  integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==
-  dependencies:
-    "@types/yargs-parser" "*"
-
 "@types/yargs@^15.0.0":
   version "15.0.14"
   resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
@@ -2071,75 +3075,85 @@
   dependencies:
     "@types/yargs-parser" "*"
 
-"@typescript-eslint/eslint-plugin@^2.10.0":
-  version "2.34.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
-  integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
+"@typescript-eslint/eslint-plugin@^5.19.0", "@typescript-eslint/eslint-plugin@^5.30.0":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d"
+  integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==
   dependencies:
-    "@typescript-eslint/experimental-utils" "2.34.0"
+    "@typescript-eslint/scope-manager" "5.30.5"
+    "@typescript-eslint/type-utils" "5.30.5"
+    "@typescript-eslint/utils" "5.30.5"
+    debug "^4.3.4"
     functional-red-black-tree "^1.0.1"
-    regexpp "^3.0.0"
-    tsutils "^3.17.1"
-
-"@typescript-eslint/experimental-utils@1.13.0":
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e"
-  integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==
-  dependencies:
-    "@types/json-schema" "^7.0.3"
-    "@typescript-eslint/typescript-estree" "1.13.0"
-    eslint-scope "^4.0.0"
-
-"@typescript-eslint/experimental-utils@2.34.0":
-  version "2.34.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
-  integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
-  dependencies:
-    "@types/json-schema" "^7.0.3"
-    "@typescript-eslint/typescript-estree" "2.34.0"
-    eslint-scope "^5.0.0"
-    eslint-utils "^2.0.0"
-
-"@typescript-eslint/parser@^1.10.2":
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355"
-  integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==
-  dependencies:
-    "@types/eslint-visitor-keys" "^1.0.0"
-    "@typescript-eslint/experimental-utils" "1.13.0"
-    "@typescript-eslint/typescript-estree" "1.13.0"
-    eslint-visitor-keys "^1.0.0"
-
-"@typescript-eslint/parser@^2.10.0":
-  version "2.34.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
-  integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
-  dependencies:
-    "@types/eslint-visitor-keys" "^1.0.0"
-    "@typescript-eslint/experimental-utils" "2.34.0"
-    "@typescript-eslint/typescript-estree" "2.34.0"
-    eslint-visitor-keys "^1.1.0"
-
-"@typescript-eslint/typescript-estree@1.13.0":
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e"
-  integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==
-  dependencies:
-    lodash.unescape "4.0.1"
-    semver "5.5.0"
-
-"@typescript-eslint/typescript-estree@2.34.0":
-  version "2.34.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
-  integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
-  dependencies:
-    debug "^4.1.1"
-    eslint-visitor-keys "^1.1.0"
-    glob "^7.1.6"
-    is-glob "^4.0.1"
-    lodash "^4.17.15"
-    semver "^7.3.2"
-    tsutils "^3.17.1"
+    ignore "^5.2.0"
+    regexpp "^3.2.0"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/parser@^5.10.0", "@typescript-eslint/parser@^5.19.0", "@typescript-eslint/parser@^5.30.0":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522"
+  integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.30.5"
+    "@typescript-eslint/types" "5.30.5"
+    "@typescript-eslint/typescript-estree" "5.30.5"
+    debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964"
+  integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==
+  dependencies:
+    "@typescript-eslint/types" "5.30.5"
+    "@typescript-eslint/visitor-keys" "5.30.5"
+
+"@typescript-eslint/type-utils@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9"
+  integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==
+  dependencies:
+    "@typescript-eslint/utils" "5.30.5"
+    debug "^4.3.4"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98"
+  integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==
+
+"@typescript-eslint/typescript-estree@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb"
+  integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==
+  dependencies:
+    "@typescript-eslint/types" "5.30.5"
+    "@typescript-eslint/visitor-keys" "5.30.5"
+    debug "^4.3.4"
+    globby "^11.1.0"
+    is-glob "^4.0.3"
+    semver "^7.3.7"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765"
+  integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    "@typescript-eslint/scope-manager" "5.30.5"
+    "@typescript-eslint/types" "5.30.5"
+    "@typescript-eslint/typescript-estree" "5.30.5"
+    eslint-scope "^5.1.1"
+    eslint-utils "^3.0.0"
+
+"@typescript-eslint/visitor-keys@5.30.5":
+  version "5.30.5"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14"
+  integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==
+  dependencies:
+    "@typescript-eslint/types" "5.30.5"
+    eslint-visitor-keys "^3.3.0"
 
 "@webassemblyjs/ast@1.9.0":
   version "1.9.0"
@@ -2330,14 +3344,7 @@ acorn-globals@^6.0.0:
     acorn "^7.1.1"
     acorn-walk "^7.1.1"
 
-acorn-jsx@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
-  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
-  dependencies:
-    acorn "^3.0.4"
-
-acorn-jsx@^5.0.0, acorn-jsx@^5.2.0:
+acorn-jsx@^5.0.0, acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
@@ -2347,16 +3354,6 @@ acorn-walk@^7.1.1:
   resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
   integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
 
-acorn@^3.0.4:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
-
-acorn@^5.5.0:
-  version "5.7.4"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
-  integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
-
 acorn@^6.0.2, acorn@^6.0.7, acorn@^6.2.1:
   version "6.4.2"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
@@ -2372,18 +3369,16 @@ acorn@^8.2.4:
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
   integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
 
+acorn@^8.7.1:
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
+  integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
+
 add-stream@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
   integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=
 
-agent-base@4, agent-base@^4.3.0:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
-  integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
-  dependencies:
-    es6-promisify "^5.0.0"
-
 agent-base@6:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -2391,20 +3386,6 @@ agent-base@6:
   dependencies:
     debug "4"
 
-agent-base@~4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
-  integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
-  dependencies:
-    es6-promisify "^5.0.0"
-
-agentkeepalive@^3.4.1:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
-  integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
-  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"
@@ -2448,11 +3429,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
 ansi-colors@^3.0.0:
   version "3.2.4"
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
@@ -2497,7 +3473,7 @@ ansi-regex@^3.0.0:
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
   integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
 
-ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+ansi-regex@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
   integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
@@ -2531,6 +3507,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
   dependencies:
     color-convert "^2.0.1"
 
+ansi-styles@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
 ansi-styles@^6.0.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3"
@@ -2546,14 +3527,6 @@ any-promise@^1.0.0:
   resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
   integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
 
-anymatch@^1.3.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
-  integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
-  dependencies:
-    micromatch "^2.1.5"
-    normalize-path "^2.0.0"
-
 anymatch@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@@ -2570,19 +3543,11 @@ anymatch@^3.0.1, anymatch@^3.0.3, anymatch@~3.1.2:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
-aproba@^1.0.3, aproba@^1.1.1:
+aproba@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
   integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
 
-are-we-there-yet@~1.1.2:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
-  integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
 argparse@^1.0.10, argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -2600,19 +3565,12 @@ argsarray@0.0.1:
   resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
   integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs=
 
-arr-diff@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
-  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
-  dependencies:
-    arr-flatten "^1.0.1"
-
 arr-diff@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
   integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
 
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+arr-flatten@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
   integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
@@ -2622,11 +3580,6 @@ arr-union@^3.1.0:
   resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
   integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
 
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -2653,6 +3606,17 @@ array-includes@^3.0.3, array-includes@^3.1.1:
     get-intrinsic "^1.1.1"
     is-string "^1.0.7"
 
+array-includes@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
+  integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
 array-union@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -2670,11 +3634,6 @@ array-uniq@^1.0.1:
   resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
   integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
 
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
 array-unique@^0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
@@ -2709,6 +3668,16 @@ array.prototype.flat@^1.2.3:
     define-properties "^1.1.3"
     es-abstract "^1.19.0"
 
+array.prototype.flatmap@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
+  integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
+
 array.prototype.foreach@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array.prototype.foreach/-/array.prototype.foreach-1.0.2.tgz#592b177c8d6abb84e14de1649eb6e7cc5eb9c9ae"
@@ -2771,16 +3740,11 @@ astral-regex@^2.0.0:
   resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 
-async-each@^1.0.0, async-each@^1.0.1:
+async-each@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
   integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
 
-async-foreach@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
-  integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
-
 async-limiter@~1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
@@ -2791,6 +3755,11 @@ async@1.5.2:
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
   integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
 
+async@3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
+  integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
+
 async@^2.6.2:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -2798,6 +3767,11 @@ async@^2.6.2:
   dependencies:
     lodash "^4.17.14"
 
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
 async@~0.2.10:
   version "0.2.10"
   resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
@@ -2846,12 +3820,20 @@ aws4@^1.8.0:
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
   integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
 
-axios@^0.19.0:
-  version "0.19.2"
-  resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
-  integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+axios@^0.21.1:
+  version "0.21.4"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
+  integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
+  dependencies:
+    follow-redirects "^1.14.0"
+
+axios@^0.27.0:
+  version "0.27.2"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
+  integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
   dependencies:
-    follow-redirects "1.5.10"
+    follow-redirects "^1.14.9"
+    form-data "^4.0.0"
 
 babel-core@7.0.0-bridge.0:
   version "7.0.0-bridge.0"
@@ -2952,6 +3934,14 @@ babel-plugin-polyfill-corejs3@^0.4.0:
     "@babel/helper-define-polyfill-provider" "^0.3.0"
     core-js-compat "^3.18.0"
 
+babel-plugin-polyfill-corejs3@^0.5.0:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72"
+  integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.1"
+    core-js-compat "^3.21.0"
+
 babel-plugin-polyfill-regenerator@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be"
@@ -2968,37 +3958,21 @@ babel-polyfill@^6.26.0:
     core-js "^2.5.0"
     regenerator-runtime "^0.10.5"
 
-babel-preset-cozy-app@1.5.2:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/babel-preset-cozy-app/-/babel-preset-cozy-app-1.5.2.tgz#56ecfa524b33ee89022f122079eedc6d8da59448"
-  integrity sha512-aACixVXDcQBhh1ewL6bs5PJJdV+CHIUfSOysyP0C0qv05ffOFRrhPQlrM3RBGN9qvTt+Ov/6+rsFJ+R1ZG1nEA==
-  dependencies:
-    "@babel/core" "7.2.2"
-    "@babel/helper-plugin-utils" "7.0.0"
-    "@babel/plugin-proposal-class-properties" "7.3.0"
-    "@babel/plugin-proposal-object-rest-spread" "7.3.2"
-    "@babel/plugin-transform-runtime" "7.2.0"
-    "@babel/preset-env" "7.3.1"
-    "@babel/preset-react" "7.0.0"
-    "@babel/runtime" "7.2.0"
-    browserslist-config-cozy "0.2.0"
-    lodash "4.17.13"
-
-babel-preset-cozy-app@1.7.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-cozy-app/-/babel-preset-cozy-app-1.7.0.tgz#edb2f9f733dddf92647069047702bbc8eb7e698d"
-  integrity sha512-4bs8hvPF+x+svLEAIJ+CW3UQPh8C2qRMA1z1OdWLPe6iFXpOVcGlNzENcB8E61VWvOYUx30huSAWbDmtA7L1nA==
+babel-preset-cozy-app@1.12.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-cozy-app/-/babel-preset-cozy-app-1.12.0.tgz#dea97f3f3fb6ac18835613083b63b0b42a9e4909"
+  integrity sha512-PjVfCypMjFNzeii3qg+SJkRDGzX99s6Cj2mnOP4RseF0YjpLDAzPyg37j8rLAwYP5DvQGgt8vW/6hsWfnIdf8Q==
   dependencies:
-    "@babel/core" "7.2.2"
-    "@babel/helper-plugin-utils" "7.0.0"
-    "@babel/plugin-proposal-class-properties" "7.3.0"
-    "@babel/plugin-proposal-object-rest-spread" "7.3.2"
-    "@babel/plugin-transform-runtime" "7.2.0"
-    "@babel/preset-env" "7.3.1"
-    "@babel/preset-react" "7.0.0"
-    "@babel/runtime" "7.2.0"
-    browserslist-config-cozy "^0.3.0"
-    lodash "4.17.15"
+    "@babel/core" "^7.12.3"
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-proposal-class-properties" "^7.12.1"
+    "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
+    "@babel/plugin-transform-runtime" "^7.12.1"
+    "@babel/preset-env" "^7.12.1"
+    "@babel/preset-react" "^7.12.5"
+    "@babel/runtime" "^7.12.5"
+    browserslist-config-cozy "^0.4.0"
+    lodash "^4.17.19"
 
 babel-preset-cozy-app@1.9.2:
   version "1.9.2"
@@ -3152,13 +4126,6 @@ bl@^2.0.1:
     readable-stream "^2.3.5"
     safe-buffer "^5.1.1"
 
-block-stream@*:
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
-  integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
-  dependencies:
-    inherits "~2.0.0"
-
 bluebird-retry@^0.11.0:
   version "0.11.0"
   resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.11.0.tgz#1289ab22cbbc3a02587baad35595351dd0c1c047"
@@ -3200,11 +4167,6 @@ body-parser@1.19.0, body-parser@^1.19.0:
     raw-body "2.4.0"
     type-is "~1.6.17"
 
-body-scroll-lock@^2.5.8:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-2.7.1.tgz#caf3f9c91773af1ffb684cd66ed9137b5b737014"
-  integrity sha512-hS53SQ8RhM0e4DsQ3PKz6Gr2O7Kpdh59TWU98GHjaQznL7y4dFycEPk7pFQAikqBaUSCArkc5E3pe7CWIt2fZA==
-
 bolgia@>=2.7.4:
   version "2.8.3"
   resolved "https://registry.yarnpkg.com/bolgia/-/bolgia-2.8.3.tgz#bae607317a33fbda0c322297b43afd239ea739d2"
@@ -3240,15 +4202,6 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-braces@^1.8.2:
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
-  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
-  dependencies:
-    expand-range "^1.8.1"
-    preserve "^0.2.0"
-    repeat-element "^1.1.2"
-
 braces@^2.2.2, braces@^2.3.1, braces@^2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -3277,6 +4230,13 @@ brorand@^1.0.1, brorand@^1.1.0:
   resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
   integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
 
+brotli-size@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e"
+  integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==
+  dependencies:
+    duplexer "0.1.1"
+
 browser-process-hrtime@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
@@ -3343,16 +4303,16 @@ browserify-zlib@^0.2.0:
   dependencies:
     pako "~1.0.5"
 
-browserslist-config-cozy@0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/browserslist-config-cozy/-/browserslist-config-cozy-0.2.0.tgz#6056e7bcfcfe07b04a5319068ea6c12cdcd53d96"
-  integrity sha512-Ma87bBi3cfwA686nMziSxxv+mvGd3kWPQXrqwUeSYcNvXvqcXd8gmvLoMsuo2B4IuwGpVGdNGEcyDy9b7i05tA==
-
-browserslist-config-cozy@^0.3.0, browserslist-config-cozy@^0.3.1:
+browserslist-config-cozy@^0.3.1:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/browserslist-config-cozy/-/browserslist-config-cozy-0.3.2.tgz#0a06ed1357480e4e90bbe826aa3159c7e8bc85b3"
   integrity sha512-d3wUIrKK8OYUPpgY3FJdb2I3xoDLtia7s2hhNfVUvQMldhw/xivmbtrPlkDdtsOjXa/SXKNhJT45uiS1QOhqVg==
 
+browserslist-config-cozy@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/browserslist-config-cozy/-/browserslist-config-cozy-0.4.0.tgz#0b3fd831ce59c69e70b799a4e57a206535468878"
+  integrity sha512-t2q4UoWotfnT9Zw/GKXgSh0nMyvUCQEji+EObSQXsUCnEwhac8Ae3AJYd2ySsEHZ/ufEX8f6kR6jPbWJqBpUUw==
+
 browserslist@^4.11.1, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.3.4:
   version "4.18.1"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f"
@@ -3364,6 +4324,16 @@ browserslist@^4.11.1, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^
     node-releases "^2.0.1"
     picocolors "^1.0.0"
 
+browserslist@^4.20.2, browserslist@^4.20.4:
+  version "4.21.0"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe"
+  integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==
+  dependencies:
+    caniuse-lite "^1.0.30001358"
+    electron-to-chromium "^1.4.164"
+    node-releases "^2.0.5"
+    update-browserslist-db "^1.0.0"
+
 bser@2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -3423,6 +4393,29 @@ builtins@^1.0.3:
   resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
   integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
 
+bundlemon-utils@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/bundlemon-utils/-/bundlemon-utils-1.0.0.tgz#9c3e10f09107568913db2e69a3d3317a82b00633"
+  integrity sha512-+rc1Zautuch9MT7+n4O7T1+ASxcudaxisAIBVqN2xjOCaA+wYn5lyQnMPx2Ky2Cg8N4GrvuSfjNopli/GFrqVQ==
+  dependencies:
+    bytes "^3.1.0"
+
+bundlemon@^1.3.2:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/bundlemon/-/bundlemon-1.4.0.tgz#5593e00cd913e638f69a489d4d97a9abecdac85d"
+  integrity sha512-A5mzeMZrnUzKNNo8ng1PFlxZr57XM2HDsaX07kJ1u59BDWn2JFYNeUIUSXhmLdoqBHK9Ln7wTLXDnoqOlcJP5A==
+  dependencies:
+    axios "^0.21.1"
+    brotli-size "^4.0.0"
+    bundlemon-utils "^1.0.0"
+    bytes "^3.1.0"
+    chalk "^4.1.1"
+    commander "^8.0.0"
+    cosmiconfig "^7.0.0"
+    gzip-size "^6.0.0"
+    micromatch "^4.0.4"
+    yup "^0.32.11"
+
 bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -3438,6 +4431,11 @@ bytes@3.1.1:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a"
   integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==
 
+bytes@^3.1.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
 cacache@^10.0.4:
   version "10.0.4"
   resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
@@ -3457,26 +4455,6 @@ cacache@^10.0.4:
     unique-filename "^1.1.0"
     y18n "^4.0.0"
 
-cacache@^11.3.3:
-  version "11.3.3"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
-  integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
-  dependencies:
-    bluebird "^3.5.5"
-    chownr "^1.1.1"
-    figgy-pudding "^3.5.1"
-    glob "^7.1.4"
-    graceful-fs "^4.1.15"
-    lru-cache "^5.1.1"
-    mississippi "^3.0.0"
-    mkdirp "^0.5.1"
-    move-concurrently "^1.0.1"
-    promise-inflight "^1.0.1"
-    rimraf "^2.6.3"
-    ssri "^6.0.1"
-    unique-filename "^1.1.1"
-    y18n "^4.0.0"
-
 cacache@^12.0.2:
   version "12.0.4"
   resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
@@ -3589,22 +4567,6 @@ camel-case@3.0.x, camel-case@^3.0.0:
     no-case "^2.2.0"
     upper-case "^1.1.1"
 
-camel-case@^4.1.1:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
-  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
-  dependencies:
-    pascal-case "^3.1.2"
-    tslib "^2.0.3"
-
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
 camelcase-keys@^6.2.2:
   version "6.2.2"
   resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
@@ -3614,21 +4576,11 @@ camelcase-keys@^6.2.2:
     map-obj "^4.0.0"
     quick-lru "^4.0.1"
 
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-  integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-
 camelcase@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
   integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
 
-camelcase@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-  integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-
 camelcase@^5.0.0, camelcase@^5.3.1:
   version "5.3.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -3644,6 +4596,11 @@ caniuse-lite@^1.0.30001039, caniuse-lite@^1.0.30001280:
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b"
   integrity sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==
 
+caniuse-lite@^1.0.30001358:
+  version "1.0.30001359"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e"
+  integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==
+
 capture-exit@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -3656,7 +4613,7 @@ caseless@~0.12.0:
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
   integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
 
-chalk@1.1.3, chalk@^1.1.1, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -3667,7 +4624,7 @@ chalk@1.1.3, chalk@^1.1.1, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
   integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -3676,7 +4633,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chalk@3:
+chalk@3, chalk@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
   integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
@@ -3684,7 +4641,7 @@ chalk@3:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-chalk@^4.0.0, chalk@^4.1.0:
+chalk@^4.0.0, chalk@^4.1.1:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -3722,6 +4679,11 @@ charenc@0.0.2:
   resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
   integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
 
+chart.js@3.7.1:
+  version "3.7.1"
+  resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada"
+  integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==
+
 check-types@^8.0.3:
   version "8.0.3"
   resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
@@ -3751,22 +4713,6 @@ cheerio@1.0.0-rc.10, cheerio@^1.0.0-rc.3, cheerio@^1.0.0-rc.9:
     parse5-htmlparser2-tree-adapter "^6.0.1"
     tslib "^2.2.0"
 
-chokidar@1.5.2:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.5.2.tgz#293e728640cc93dd8277424334b3c6d4ad3a348a"
-  integrity sha1-KT5yhkDMk92Cd0JDNLPG1K06NIo=
-  dependencies:
-    anymatch "^1.3.0"
-    async-each "^1.0.0"
-    glob-parent "^2.0.0"
-    inherits "^2.0.1"
-    is-binary-path "^1.0.0"
-    is-glob "^2.0.0"
-    path-is-absolute "^1.0.0"
-    readdirp "^2.0.0"
-  optionalDependencies:
-    fsevents "^1.0.0"
-
 chokidar@3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681"
@@ -3782,6 +4728,21 @@ chokidar@3.0.2:
   optionalDependencies:
     fsevents "^2.0.6"
 
+"chokidar@>=3.0.0 <4.0.0":
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
 chokidar@^2.1.8:
   version "2.1.8"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -3876,7 +4837,7 @@ classnames@*, classnames@^2.2.5, classnames@^2.2.6:
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
   integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
 
-clean-css@4.2.x, clean-css@^4.2.1, clean-css@^4.2.3:
+clean-css@4.2.x, clean-css@^4.2.1:
   version "4.2.4"
   resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178"
   integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==
@@ -3914,17 +4875,6 @@ cli-highlight@2.1.11:
     parse5-htmlparser2-tree-adapter "^6.0.0"
     yargs "^16.0.0"
 
-cli-highlight@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-1.2.3.tgz#b200f97ed0e43d24633e89de0f489a48bb87d2bf"
-  integrity sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==
-  dependencies:
-    chalk "^2.3.0"
-    highlight.js "^9.6.0"
-    mz "^2.4.0"
-    parse5 "^3.0.3"
-    yargs "^10.0.3"
-
 cli-truncate@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
@@ -3946,11 +4896,6 @@ cli-width@^2.0.0:
   resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
   integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
 
-cli-width@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
-  integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
-
 cliui@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
@@ -3969,15 +4914,6 @@ cliui@^4.0.0:
     strip-ansi "^4.0.0"
     wrap-ansi "^2.0.0"
 
-cliui@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
-  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
-  dependencies:
-    string-width "^3.1.0"
-    strip-ansi "^5.2.0"
-    wrap-ansi "^5.1.0"
-
 cliui@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
@@ -4020,7 +4956,7 @@ clone@^2.1.1:
   resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
   integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
 
-clsx@^1.0.2, clsx@^1.0.4:
+clsx@^1.0.4:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
   integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
@@ -4141,17 +5077,12 @@ commander@7.2.0:
   resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
   integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
 
-commander@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
-  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-
 commander@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
   integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
 
-commander@^8.3.0:
+commander@^8.0.0, commander@^8.3.0:
   version "8.3.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
   integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
@@ -4174,11 +5105,6 @@ compare-func@^2.0.0:
     array-ify "^1.0.0"
     dot-prop "^5.1.0"
 
-compare-versions@^3.6.0:
-  version "3.6.0"
-  resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
-  integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
-
 component-emitter@^1.2.1:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
@@ -4256,11 +5182,6 @@ console-browserify@^1.1.0:
   resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
   integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
 
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
 constants-browserify@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
@@ -4441,11 +5362,6 @@ conventional-recommended-bump@6.1.0:
     meow "^8.0.0"
     q "^1.5.1"
 
-convert-css-length@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/convert-css-length/-/convert-css-length-2.0.1.tgz#90a76bde5bfd24d72881a5b45d02249b2c1d257c"
-  integrity sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==
-
 convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
@@ -4524,6 +5440,14 @@ core-js-compat@^3.18.0:
     browserslist "^4.18.1"
     semver "7.0.0"
 
+core-js-compat@^3.21.0, core-js-compat@^3.22.1:
+  version "3.23.2"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.2.tgz#5cbf8a9c8812d665392845b85ae91b5bcc7b615c"
+  integrity sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==
+  dependencies:
+    browserslist "^4.20.4"
+    semver "7.0.0"
+
 core-js-pure@^3.19.0:
   version "3.19.1"
   resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.1.tgz#edffc1fc7634000a55ba05e95b3f0fe9587a5aa4"
@@ -4534,7 +5458,7 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5:
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
   integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
 
-core-js@^3.1.4, core-js@^3.6.5:
+core-js@^3.6.5:
   version "3.19.1"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641"
   integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==
@@ -4579,68 +5503,57 @@ cosmiconfig@^7.0.0:
     yaml "^1.10.0"
 
 cozy-app-publish@0.25.0:
-  version "0.25.0"
-  resolved "https://registry.yarnpkg.com/cozy-app-publish/-/cozy-app-publish-0.25.0.tgz#7f70efb15cc9369b219e49decc6cb792feb58a2d"
-  integrity sha512-tlXX1Hj+C1E0udH4hrMRw/VHop2dbLKdI2NH1DKUGVEhhNKVG52IJ2C7L2MBhHFAC0Nd0tu7voszrm7TYDBDeQ==
-  dependencies:
-    argparse "^1.0.10"
-    chalk "2.4.2"
-    cross-spawn "6.0.5"
-    fs-extra "7.0.1"
-    lodash "4.17.19"
-    node-fetch "2.6.0"
-    prompt "1.0.0"
-    request "2.88.0"
-    tar "4.4.13"
-
-cozy-app-publish@^0.22.3:
-  version "0.22.3"
-  resolved "https://registry.yarnpkg.com/cozy-app-publish/-/cozy-app-publish-0.22.3.tgz#4c45d1c3e2d36e4c00707633b1f68ea69b811725"
-  integrity sha512-zLxz0A/sbICa22Ti1Kp//v4zkZg3UIJoDrdfLYrZkFtTO+igL2Q4IqGUjCNCjjm3KsRcdk6aeh1i2fs6fmuZlw==
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/cozy-app-publish/-/cozy-app-publish-0.25.0.tgz#7f70efb15cc9369b219e49decc6cb792feb58a2d"
+  integrity sha512-tlXX1Hj+C1E0udH4hrMRw/VHop2dbLKdI2NH1DKUGVEhhNKVG52IJ2C7L2MBhHFAC0Nd0tu7voszrm7TYDBDeQ==
   dependencies:
     argparse "^1.0.10"
     chalk "2.4.2"
     cross-spawn "6.0.5"
     fs-extra "7.0.1"
-    lodash "4.17.15"
+    lodash "4.17.19"
     node-fetch "2.6.0"
     prompt "1.0.0"
     request "2.88.0"
     tar "4.4.13"
 
-cozy-bar@7.14.0:
-  version "7.14.0"
-  resolved "https://registry.yarnpkg.com/cozy-bar/-/cozy-bar-7.14.0.tgz#37445d82fe92f3160c6584dc8f02dd8f4eeb870a"
-  integrity sha512-IO2ZVjK6Af1/TDR8TkxwiQPzZ00DkkhmqFmpgnN6SPd4GFaHiS5tSOU5Ok4lxFa1Escm7Z88a9BAx/amtzcjcw==
+cozy-app-publish@^0.30.0:
+  version "0.30.4"
+  resolved "https://registry.yarnpkg.com/cozy-app-publish/-/cozy-app-publish-0.30.4.tgz#a76e7f06b4cfcfa6cc4efb581e1297ec9865c02b"
+  integrity sha512-/Jw6JibxavJ9t3YOuCNpDWhVY6+f1LEN9xZ1+4UX8fMcWdwXYSrxan0VYQzm9sBGym1jGp9Y9wC92+DTO4SD3Q==
+  dependencies:
+    argparse "^2.0.1"
+    chalk "^2.4.2"
+    cross-spawn "^6.0.5"
+    fs-extra "^7.0.1"
+    lodash "^4.17.19"
+    node-fetch "^2.6.1"
+    prompt "^1.0.0"
+    request "^2.88.0"
+    tar "^6.1.11"
+    verror "^1.10.1"
+
+cozy-bar@8.7.5:
+  version "8.7.5"
+  resolved "https://registry.yarnpkg.com/cozy-bar/-/cozy-bar-8.7.5.tgz#c7be797cbe2578e8a8b8ceebd33c7bff3f092218"
+  integrity sha512-p73V3BKapJn85JRKtXHfkLEai77T7ydYeNZ+g2vfJDpq9zXAy/elq9AOMVFCvoB2M56XGH+obZK0S7qMmW61rQ==
   dependencies:
-    "@babel/core" "7.6.2"
-    babel-core "7.0.0-bridge.0"
-    babel-preset-cozy-app "1.7.0"
-    cozy-client "13.8.3"
-    cozy-device-helper "1.8.0"
-    cozy-interapp "0.4.9"
-    cozy-realtime "3.2.1"
-    cozy-ui "35.22.0"
-    enzyme-to-json "3.3.5"
     hammerjs "2.0.8"
-    lerna-changelog "0.8.2"
-    localforage "1.7.3"
     lodash.debounce "4.0.8"
+    lodash.set "^4.3.2"
     lodash.unionwith "4.6.0"
-    minilog "https://github.com/cozy/minilog.git#master"
-    piwik-react-router "0.12.1"
     prop-types "15.7.2"
     react-autosuggest "9.4.3"
     react-redux "5.1.1"
-    redux "3.7.2"
+    redux "4.1.2"
     redux-persist "5.10.0"
     redux-thunk "2.3.0"
     semver-compare "^1.0.0"
 
-cozy-bi-auth@0.0.23:
-  version "0.0.23"
-  resolved "https://registry.yarnpkg.com/cozy-bi-auth/-/cozy-bi-auth-0.0.23.tgz#fcbf6b710622c50fad20573b3ca6cac64102b65f"
-  integrity sha512-UXzLlEeq1+g7Q7qQyDzdsIPE+4CbFmNbFVmgel7PlvBols6AunCS2SOptwAmcdCr3jI6CXSv/0TS57jmDPdukg==
+cozy-bi-auth@0.0.25:
+  version "0.0.25"
+  resolved "https://registry.yarnpkg.com/cozy-bi-auth/-/cozy-bi-auth-0.0.25.tgz#00947925dc3cbb664f4fa54cedde80e47d55fdd0"
+  integrity sha512-GsGuQ+tWbD6qhoD3EaAb9+qtGY90dY1F2n3+4Y1GHy5NBjPyRORPygOADaFgQmrX+u6QrrSJLAWh7EMAzxUH6w==
   dependencies:
     cozy-logger "^1.3.0"
     lodash "^4.17.20"
@@ -4656,28 +5569,6 @@ cozy-client-js@^0.19.0:
     pouchdb-browser "7.0.0"
     pouchdb-find "7.0.0"
 
-cozy-client@13.8.3:
-  version "13.8.3"
-  resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-13.8.3.tgz#0bf27284fd2b7708a3ea37fc77e3d58fc923f3db"
-  integrity sha512-SLipjE0rh5YLQBuvOi8yeXTcQeuvdfzJD5B/TTlwgOsWcvJuLh5yazOLtL8A0oRty8SsCWWZe/SbGqVlI7Ue6Q==
-  dependencies:
-    btoa "^1.2.1"
-    cozy-device-helper "^1.7.3"
-    cozy-logger "^1.6.0"
-    cozy-stack-client "^13.8.3"
-    isomorphic-fetch "^2.2.1"
-    lodash "^4.17.13"
-    microee "^0.0.6"
-    minilog "https://github.com/cozy/minilog.git#master"
-    open "^7.0.2"
-    prop-types "^15.6.2"
-    react-redux "^7.2.0"
-    redux "^3.7.2"
-    redux-thunk "^2.3.0"
-    server-destroy "^1.0.1"
-    sift "^6.0.0"
-    url-search-params-polyfill "^7.0.0"
-
 cozy-client@23.4.0:
   version "23.4.0"
   resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-23.4.0.tgz#edb310971939f61506baef5f29a1a1806d39aae9"
@@ -4702,23 +5593,21 @@ cozy-client@23.4.0:
     sift "^6.0.0"
     url-search-params-polyfill "^7.0.0"
 
-cozy-client@24.9.2:
-  version "24.9.2"
-  resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-24.9.2.tgz#472852446d12c7997664bb80f633741f9e5b1d39"
-  integrity sha512-Eyo18qPigJ8vVSUbJDBM0TaShqA1ValIgBsbYSDzrVhnHzGqZ65aX+j2myLVqI93NvjjbwngUgRtSKkiinUzRA==
+cozy-client@32.2.1:
+  version "32.2.1"
+  resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-32.2.1.tgz#f9f981febc4b20fd3652ab591d6c40612a95a94d"
+  integrity sha512-OjmMcgavxVFMYApdNU+20J5SPXCbBXYKZ10+RigfZBTYgHdxcW1YY/Dr6gfEGUIPo25ZiRoSKbqbwpML7VZ1sQ==
   dependencies:
     "@cozy/minilog" "1.0.0"
     "@types/jest" "^26.0.20"
     "@types/lodash" "^4.14.170"
     btoa "^1.2.1"
-    cozy-device-helper "^1.12.0"
-    cozy-flags "2.7.1"
-    cozy-logger "^1.6.0"
-    cozy-stack-client "^24.8.1"
+    cozy-stack-client "^32.2.0"
     json-stable-stringify "^1.0.1"
     lodash "^4.17.13"
     microee "^0.0.6"
     node-fetch "^2.6.1"
+    node-polyglot "2.4.2"
     open "7.4.2"
     prop-types "^15.6.2"
     react-redux "^7.2.0"
@@ -4754,21 +5643,21 @@ cozy-client@^23.18.0:
     sift "^6.0.0"
     url-search-params-polyfill "^7.0.0"
 
-cozy-device-helper@1.8.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-1.8.0.tgz#17b41d0ea28a504b906669a43449952e72615abb"
-  integrity sha512-XomsjdCCWcS01x1QK/Wc4EI4zTxJN8Ouh7956wm2AEQyjj4lN+7cj8tqEBlb8fLWm68/3S3Z4V3iSJDgnJHu6A==
+cozy-device-helper@>=2.1.0, cozy-device-helper@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-2.2.1.tgz#d5822afd818919fa871527e6f78b0265fc1e009b"
+  integrity sha512-1zVQag2OI+6sEGEC70w77urnk4GpWa/ncvCYuyrOOgib4bH6v2YbBrymOD9T3MH0yVF/LVMnXnugSHQfhNLVhA==
   dependencies:
-    lodash "4.17.15"
+    lodash "^4.17.19"
 
-cozy-device-helper@^1.10.2, cozy-device-helper@^1.12.0, cozy-device-helper@^1.7.3, cozy-device-helper@^1.7.5:
+cozy-device-helper@^1.12.0, cozy-device-helper@^1.7.5:
   version "1.13.0"
   resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-1.13.0.tgz#b1de05d1c84e869b71f41476ac6e9694b939db44"
   integrity sha512-7GmDVahgzglMIMJ5aFiai930zrt7/elHqDPOdAmgOYfF1I+oA0MChh+xFl0ZO9AZN2LWyV3VDXEmi6Cjjvludg==
   dependencies:
     lodash "^4.17.19"
 
-cozy-doctypes@^1.82.2, cozy-doctypes@^1.82.3:
+cozy-doctypes@^1.82.2:
   version "1.83.1"
   resolved "https://registry.yarnpkg.com/cozy-doctypes/-/cozy-doctypes-1.83.1.tgz#939b62f9992199b142221fd88a3ee793776791ec"
   integrity sha512-UROUuo6ums12c+4By3e+KpJ+eGWd1Yh2LyK835Fs0UM247fzLRJ2h2A89271pOE0Hg32CUiPU4x8hWQ2XZY5og==
@@ -4779,6 +5668,17 @@ cozy-doctypes@^1.82.2, cozy-doctypes@^1.82.3:
     lodash "^4.17.19"
     prop-types "^15.7.2"
 
+cozy-doctypes@^1.83.8:
+  version "1.83.8"
+  resolved "https://registry.yarnpkg.com/cozy-doctypes/-/cozy-doctypes-1.83.8.tgz#99ec864059034bd032f6f01e322b57fea130a5d3"
+  integrity sha512-S88VzjnfZTHo7Mix7M3qId0YF6gOmL+C0X2LZnQp6F2cEOKa7sOlDiMD18u2kfPwyvlxxM+tQBI9ArEM/Xqkog==
+  dependencies:
+    cozy-logger "^1.9.0"
+    date-fns "^1.30.1"
+    es6-promise-pool "^2.5.0"
+    lodash "^4.17.19"
+    prop-types "^15.7.2"
+
 cozy-flags@2.7.1:
   version "2.7.1"
   resolved "https://registry.yarnpkg.com/cozy-flags/-/cozy-flags-2.7.1.tgz#f37251fee248ef9bef079a22bc52954f1a892dfc"
@@ -4786,16 +5686,23 @@ cozy-flags@2.7.1:
   dependencies:
     microee "^0.0.6"
 
-cozy-harvest-lib@6.8.0:
-  version "6.8.0"
-  resolved "https://registry.yarnpkg.com/cozy-harvest-lib/-/cozy-harvest-lib-6.8.0.tgz#627961f10833b77755abe4af07e1523cb582b2b6"
-  integrity sha512-S/J/Rmy1u9TlAAcHHEoVNNB0y1S7Af1Fs3RdZ46vFRqra8U5QILuKsNzgeGq4hUoXji8msIWvG/6zWKqaGoz5w==
+cozy-flags@>2.8.6:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/cozy-flags/-/cozy-flags-2.9.0.tgz#9f458c0eb71f549a2ae12198d55de89434bff96b"
+  integrity sha512-2iezzIS3WtnZ+b8Kupsa7aN5KINebdISS9L5OpGc320wcdmHrHShpZaqkwCQWLxLqhaXalxxe6OIeFLS84pIrQ==
+  dependencies:
+    microee "^0.0.6"
+
+cozy-harvest-lib@9.18.1:
+  version "9.18.1"
+  resolved "https://registry.yarnpkg.com/cozy-harvest-lib/-/cozy-harvest-lib-9.18.1.tgz#ba8034a3c20c1f4ec60ee41ea2af7f62ad862eb5"
+  integrity sha512-VpHAf/UDhTxY4Qj7EBhKhVbuiO3PJpe5HTiWkSwWG+UdWrNzbMECv9inH7htLKvpT4H1mxgAg2h7olKYSDlVQQ==
   dependencies:
     "@cozy/minilog" "^1.0.0"
     "@sentry/browser" "^6.0.1"
-    cozy-bi-auth "0.0.23"
-    cozy-doctypes "^1.82.3"
-    cozy-logger "^1.7.0"
+    cozy-bi-auth "0.0.25"
+    cozy-doctypes "^1.83.8"
+    cozy-logger "^1.9.0"
     date-fns "^1.30.1"
     final-form "^4.18.5"
     lodash "^4.17.19"
@@ -4805,10 +5712,12 @@ cozy-harvest-lib@6.8.0:
     react-markdown "^4.2.2"
     uuid "^3.3.2"
 
-cozy-interapp@0.4.9:
-  version "0.4.9"
-  resolved "https://registry.yarnpkg.com/cozy-interapp/-/cozy-interapp-0.4.9.tgz#5ef68d54755cc99c3e154e5a4646b68cbe5f16fd"
-  integrity sha512-skyjrewnMu5zMfST7vTNGl3jsuWae1Iwfdev6pW9RLgb58M7oBSpsIa3ofRANv5tx0XVQDVSEzWvbFQ84WJPSg==
+cozy-intent@>=1.14.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/cozy-intent/-/cozy-intent-2.2.0.tgz#bb32115c48bf239338166b90aaa2171f8295b8d5"
+  integrity sha512-DbThgCn3BkHfbe/zzofbzGuzLtSV/dkbuTV+pFKRDxTp3+qe1QsiFZtBS7ClcjPVP/kYKVTPv2gGnpejIgBx5g==
+  dependencies:
+    post-me "0.4.5"
 
 cozy-interapp@^0.5.4:
   version "0.5.7"
@@ -4836,21 +5745,21 @@ cozy-jobs-cli@^1.13.6:
     pretty "2.0.0"
     strip-json-comments "3.1.1"
 
-cozy-keys-lib@^3.11.0:
-  version "3.11.0"
-  resolved "https://registry.yarnpkg.com/cozy-keys-lib/-/cozy-keys-lib-3.11.0.tgz#4c7c89247e15b1deb298ba0ef5d1341ae3942d53"
-  integrity sha512-5HxzThZ2oK/g8l3eOFWqh7PZ0j5pE4hmkXiaDCSCV5ZeKwwG/eYumljaYOOsBWmhS7FDNlaNwowMWuhfppZk0Q==
+cozy-keys-lib@>=4.1.9:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/cozy-keys-lib/-/cozy-keys-lib-4.2.1.tgz#98bc71eb08d830ca9d5d9876c4851c68a91557ce"
+  integrity sha512-Zg4hcC5NfoD7ZjlqZhyOLydLbX3GOA+cawr/s+PmQH2eeL5wV+9vpnpkv9SleEUspJ/HwV5J9bgEPBPhwNvbRw==
   dependencies:
     "@aspnet/signalr" "^1.1.4"
     "@aspnet/signalr-protocol-msgpack" "^1.1.0"
+    "@cozy/minilog" "^1.0.0"
     big-integer "^1.6.44"
     classnames "^2.2.6"
     cozy-device-helper "^1.7.5"
     lodash "^4.17.15"
     lunr "^2.3.6"
     microee "^0.0.6"
-    minilog "https://github.com/cozy/minilog.git#master"
-    node-forge "^0.9.0"
+    node-forge "^1.3.0"
     papaparse "^5.1.1"
     prop-types "^15.7.2"
     sweetalert "^2.1.2"
@@ -4894,20 +5803,21 @@ cozy-logger@1.7.0, cozy-logger@^1.3.0, cozy-logger@^1.6.0, cozy-logger@^1.7.0:
     chalk "^2.4.2"
     json-stringify-safe "5.0.1"
 
-cozy-realtime@3.10.5:
-  version "3.10.5"
-  resolved "https://registry.yarnpkg.com/cozy-realtime/-/cozy-realtime-3.10.5.tgz#aa040bd921a0f83fd0452092d050ee201e090bff"
-  integrity sha512-PISZsNkXzTWwYAbLTjQn1tIi0iVwEAEZQTVNS2eDu46a8EtIGBje8QM/GQoFZdoIi0wtgciW5VvQUEuP/wY+xQ==
+cozy-logger@>1.7.0, cozy-logger@^1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/cozy-logger/-/cozy-logger-1.9.0.tgz#e3a2323d9a2945ca10da5c318ff2f63544a54415"
+  integrity sha512-x/iFwFuNTbG4lwgeKPv6HtdixY+CcJm47sRd2za09aS1zZMHnN3HX7fFgoSSgEqFhpnIO/PpP2pVqJ4orSCp0g==
   dependencies:
-    cozy-device-helper "^1.10.2"
-    minilog "https://github.com/cozy/minilog.git#master"
+    chalk "^2.4.2"
+    json-stringify-safe "5.0.1"
 
-cozy-realtime@3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/cozy-realtime/-/cozy-realtime-3.2.1.tgz#b22cb9468566ae691edfa0383efbab3071a2f01e"
-  integrity sha512-Ff1vQ8vxam5aH9GmL6+YgEApV40aku7Z84yTdfcEUaOYo4OJ+n40P0EUsQoqgpA2suGONdUfvJ+FnS0aha+9nw==
+cozy-realtime@4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/cozy-realtime/-/cozy-realtime-4.2.1.tgz#b42fe82057bd1aae4f227d7987f207eacb169984"
+  integrity sha512-YuyT8DfzInyzt5dW4Acb+nxU0lIMQ4aGveZyx2pTjpYVpRf8xYDz0zPkcxVugfEgSstZBfFtcXKS1+9i4QcjMw==
   dependencies:
-    minilog "3.1.0"
+    "@cozy/minilog" "^1.0.0"
+    cozy-device-helper "^2.2.1"
 
 cozy-release@1.10.0:
   version "1.10.0"
@@ -4976,15 +5886,6 @@ cozy-scripts@5.13.0:
     webpack-dev-server "3.10.3"
     webpack-merge "4.2.2"
 
-cozy-stack-client@^13.8.3:
-  version "13.20.2"
-  resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-13.20.2.tgz#2ff55f93dca809b7ec82ec0afc88a3bc041383c1"
-  integrity sha512-9j52p+0/kw5CAO42hPCqjV1ESwU/My79bfjF96wZRrGMFAciL+gGQy4wVeTpPlYvWIGIIbchFrUl8rQVkMVWYA==
-  dependencies:
-    detect-node "^2.0.4"
-    mime "^2.4.0"
-    qs "^6.7.0"
-
 cozy-stack-client@^23.19.0, cozy-stack-client@^23.4.0:
   version "23.19.0"
   resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-23.19.0.tgz#2972c3dcc151b13c0f65749f341a6349170fe1d3"
@@ -4995,54 +5896,43 @@ cozy-stack-client@^23.19.0, cozy-stack-client@^23.4.0:
     mime "^2.4.0"
     qs "^6.7.0"
 
-cozy-stack-client@^24.8.1:
-  version "24.10.2"
-  resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-24.10.2.tgz#77fcf48f578222022e7d7bd751fb8bccf19ee748"
-  integrity sha512-6vJuJBpnU2TP1n3CnTxEy1JOQz7Woy2vQBDycd2l2dSl//q1ZTJPULy5qdMFPdGh+r3qJSuwtv6Z3a4iVCJn9Q==
+cozy-stack-client@^32.2.0:
+  version "32.2.0"
+  resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-32.2.0.tgz#7ba1abfea74568be90578a35dce4b6041420f1ce"
+  integrity sha512-rvuK8Jc1nNGXz7OJdazgEtbkbg69U3yq0wvhCj+DzVr1cFrHy6nNJekZXmQJbTKycuKb17zHKSooHsrXrlxjNg==
   dependencies:
-    cozy-flags "2.7.1"
     detect-node "^2.0.4"
     mime "^2.4.0"
     qs "^6.7.0"
 
-cozy-ui@35.22.0:
-  version "35.22.0"
-  resolved "https://registry.yarnpkg.com/cozy-ui/-/cozy-ui-35.22.0.tgz#ce8e1703740a27073b3cff812f9a7027d3a27e41"
-  integrity sha512-oAP+EIgS4D2J2Y7CiRNPbR9jCFrDrkiLIfpQeWkTjFbGXiCkJTdQabAx7fiZdcI0gxCo9OCv7mhtirMHv/ylKw==
-  dependencies:
-    "@babel/runtime" "^7.3.4"
-    body-scroll-lock "^2.5.8"
-    classnames "^2.2.5"
-    date-fns "^1.28.5"
-    hammerjs "^2.0.8"
-    node-polyglot "^2.2.2"
-    normalize.css "^7.0.0"
-    react-hot-loader "^4.3.11"
-    react-markdown "^4.0.8"
-    react-pdf "^4.0.5"
-    react-select "2.2.0"
-    react-swipeable-views "0.13.3"
-
-cozy-ui@51.11.0:
-  version "51.11.0"
-  resolved "https://registry.yarnpkg.com/cozy-ui/-/cozy-ui-51.11.0.tgz#08ca9448c589c9fc6f0ea71dd2fee37c214e3e2d"
-  integrity sha512-dF1UDq1j9YZjvHxbuHq34rBzn/mYxZcJCObCdVO800yIZ+bK7xbSSJ6klZSWbtNoUMY3YiZ8uS6Ow7WhQIhpLQ==
+cozy-ui@68.9.1:
+  version "68.9.1"
+  resolved "https://registry.yarnpkg.com/cozy-ui/-/cozy-ui-68.9.1.tgz#c26a1c9a78bd553c437eac713fdf0b9b952a874f"
+  integrity sha512-eBg1gcufo2VLylrtmkS54tVglBtIwgTijfR9xphuDq/QZcN/RBBXhsOTzcVRPh0jKrag11o8egUzX52fnNlpUw==
   dependencies:
     "@babel/runtime" "^7.3.4"
     "@popperjs/core" "^2.4.4"
+    bundlemon "^1.3.2"
+    chart.js "3.7.1"
     classnames "^2.2.5"
     cozy-interapp "^0.5.4"
     date-fns "^1.28.5"
+    filesize "8.0.7"
     hammerjs "^2.0.8"
     intersection-observer "0.11.0"
+    mime-types "2.1.35"
+    mui-bottom-sheet "https://github.com/cozy/mui-bottom-sheet.git#v1.0.6"
     node-polyglot "^2.2.2"
-    normalize.css "^7.0.0"
+    normalize.css "^8.0.0"
+    piwik-react-router "0.12.1"
+    react-chartjs-2 "4.1.0"
     react-markdown "^4.0.8"
     react-pdf "^4.0.5"
     react-popper "^2.2.3"
     react-remove-scroll "^2.4.0"
     react-select "^4.3.0"
     react-swipeable-views "^0.13.3"
+    rooks "^5.11.2"
 
 create-ecdh@^4.0.0:
   version "4.0.4"
@@ -5052,16 +5942,6 @@ create-ecdh@^4.0.0:
     bn.js "^4.1.0"
     elliptic "^6.5.3"
 
-create-emotion@^10.0.4:
-  version "10.0.27"
-  resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503"
-  integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==
-  dependencies:
-    "@emotion/cache" "^10.0.27"
-    "@emotion/serialize" "^0.11.15"
-    "@emotion/sheet" "0.9.4"
-    "@emotion/utils" "0.11.3"
-
 create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
@@ -5103,24 +5983,7 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
-  integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
-  dependencies:
-    lru-cache "^4.0.1"
-    which "^1.2.9"
-
-cross-spawn@^5.0.1:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
-  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
-  dependencies:
-    lru-cache "^4.0.1"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-cross-spawn@^7.0.0, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -5286,7 +6149,7 @@ cssstyle@^2.3.0:
   dependencies:
     cssom "~0.3.6"
 
-csstype@^2.5.2, csstype@^2.5.7:
+csstype@^2.5.2:
   version "2.6.19"
   resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
   integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
@@ -5305,13 +6168,6 @@ csswring@7.0.0:
     onecolor "^3.0.5"
     postcss "^7.0.0"
 
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
-  dependencies:
-    array-find-index "^1.0.1"
-
 cycle@1.0.x:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
@@ -5606,6 +6462,11 @@ dateformat@^3.0.0:
   resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
   integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
 
+debounce@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
+  integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+
 debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -5613,13 +6474,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
   dependencies:
     ms "2.0.0"
 
-debug@3.1.0, debug@=3.1.0, debug@~3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
-  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  dependencies:
-    ms "2.0.0"
-
 debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
@@ -5627,13 +6481,27 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
   dependencies:
     ms "2.1.2"
 
-debug@^3.1.0, debug@^3.1.1, debug@^3.2.5:
+debug@^3.1.1, debug@^3.2.5:
   version "3.2.7"
   resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
   integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
   dependencies:
     ms "^2.1.1"
 
+debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+debug@~3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  dependencies:
+    ms "2.0.0"
+
 decamelize-keys@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -5642,7 +6510,7 @@ decamelize-keys@^1.1.0:
     decamelize "^1.1.0"
     map-obj "^1.0.0"
 
-decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
+decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
   integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -5674,7 +6542,7 @@ deep-equal@~0.2.1:
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d"
   integrity sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=
 
-deep-is@~0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
@@ -5716,6 +6584,14 @@ define-properties@^1.1.2, define-properties@^1.1.3:
   dependencies:
     object-keys "^1.0.12"
 
+define-properties@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
 define-property@^0.2.5:
   version "0.2.5"
   resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
@@ -5756,11 +6632,6 @@ delayed-stream@~1.0.0:
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
 depd@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@@ -5814,16 +6685,16 @@ detect-node@^2.0.4:
   resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
   integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
 
-diff-sequences@^24.9.0:
-  version "24.9.0"
-  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
-  integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
-
 diff-sequences@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
   integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
 
+diff-sequences@^28.1.1:
+  version "28.1.1"
+  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6"
+  integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==
+
 diffie-hellman@^5.0.0:
   version "5.0.3"
   resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@@ -5898,14 +6769,7 @@ dom-converter@^0.2.0:
   dependencies:
     utila "~0.4"
 
-dom-helpers@^3.2.1, dom-helpers@^3.4.0:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
-  integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
-  dependencies:
-    "@babel/runtime" "^7.1.2"
-
-dom-helpers@^5.0.1, dom-helpers@^5.1.3:
+dom-helpers@^5.0.1:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
   integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
@@ -5930,6 +6794,15 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2:
     domhandler "^4.2.0"
     entities "^2.0.0"
 
+dom-serializer@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    entities "^4.2.0"
+
 dom-walk@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
@@ -5950,6 +6823,11 @@ domelementtype@^2.0.1, domelementtype@^2.2.0:
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
   integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
 
+domelementtype@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
 domexception@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
@@ -5978,6 +6856,13 @@ domhandler@^4.0, domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2:
   dependencies:
     domelementtype "^2.2.0"
 
+domhandler@^5.0.1, domhandler@^5.0.2:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+  dependencies:
+    domelementtype "^2.3.0"
+
 domready@1.0.8:
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/domready/-/domready-1.0.8.tgz#91f252e597b65af77e745ae24dd0185d5e26d58c"
@@ -6000,13 +6885,14 @@ domutils@^2.0.0, domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0, domutils@^2.
     domelementtype "^2.2.0"
     domhandler "^4.2.0"
 
-dot-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
-  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+domutils@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c"
+  integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==
   dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
+    dom-serializer "^2.0.0"
+    domelementtype "^2.3.0"
+    domhandler "^5.0.1"
 
 dot-prop@^5.1.0:
   version "5.3.0"
@@ -6023,7 +6909,12 @@ dotgitignore@^2.1.0:
     find-up "^3.0.0"
     minimatch "^3.0.4"
 
-duplexer@^0.1.1:
+duplexer@0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+  integrity sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==
+
+duplexer@^0.1.1, duplexer@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
@@ -6081,6 +6972,11 @@ electron-to-chromium@^1.3.896:
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.3.tgz#82480df3ef607f04bb38cc3f30a628d8b895339f"
   integrity sha512-hfpppjYhqIZB8jrNb0rNceQRkSnBN7QJl3W26O1jUv3F3BkQknqy1YTqVXkFnIcFtBc3Qnv5M7r5Lez2iOLgZA==
 
+electron-to-chromium@^1.4.164:
+  version "1.4.168"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.168.tgz#8f6bda320a434ac963850d18e41d83220973cbdd"
+  integrity sha512-yz247hclRBaP8ABB1hf9kL7AMfa+yC2hB9F3XF8Y87VWMnYgq4QYvV6acRACcDkTDxfGQ4GYK/aZPQiuFMGbaA==
+
 elliptic@^6.5.3:
   version "6.5.4"
   resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
@@ -6129,13 +7025,6 @@ encodeurl@~1.0.2:
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
-encoding@^0.1.11:
-  version "0.1.13"
-  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
-  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
-  dependencies:
-    iconv-lite "^0.6.2"
-
 end-of-stream@^1.0.0, end-of-stream@^1.1.0:
   version "1.4.4"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -6174,6 +7063,11 @@ entities@^3.0.1:
   resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
   integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
 
+entities@^4.2.0, entities@^4.3.0:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4"
+  integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==
+
 enzyme-adapter-react-16@1.15.6:
   version "1.15.6"
   resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz#fd677a658d62661ac5afd7f7f541f141f8085901"
@@ -6210,12 +7104,14 @@ enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.4:
     has "^1.0.3"
     object-is "^1.1.2"
 
-enzyme-to-json@3.3.5:
-  version "3.3.5"
-  resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz#f8eb82bd3d5941c9d8bc6fd9140030777d17d0af"
-  integrity sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==
+enzyme-to-json@^3.6.2:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz#94f85c413bcae8ab67be53b0a94b69a560e27823"
+  integrity sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==
   dependencies:
-    lodash "^4.17.4"
+    "@types/cheerio" "^0.22.22"
+    lodash "^4.17.21"
+    react-is "^16.12.0"
 
 enzyme@3.11.0:
   version "3.11.0"
@@ -6245,11 +7141,6 @@ enzyme@3.11.0:
     rst-selector-parser "^2.2.3"
     string.prototype.trim "^1.2.1"
 
-err-code@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
-  integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
-
 errno@^0.1.3, errno@~0.1.7:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
@@ -6290,11 +7181,47 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1:
     string.prototype.trimstart "^1.0.4"
     unbox-primitive "^1.0.1"
 
+es-abstract@^1.19.2, es-abstract@^1.19.5:
+  version "1.20.1"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
+  integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
+  dependencies:
+    call-bind "^1.0.2"
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    function.prototype.name "^1.1.5"
+    get-intrinsic "^1.1.1"
+    get-symbol-description "^1.0.0"
+    has "^1.0.3"
+    has-property-descriptors "^1.0.0"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    is-callable "^1.2.4"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.2"
+    regexp.prototype.flags "^1.4.3"
+    string.prototype.trimend "^1.0.5"
+    string.prototype.trimstart "^1.0.5"
+    unbox-primitive "^1.0.2"
+
 es-array-method-boxes-properly@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
   integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
 
+es-shim-unscopables@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+  integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+  dependencies:
+    has "^1.0.3"
+
 es-to-primitive@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -6319,18 +7246,11 @@ es6-promise-pool@^2.5.0:
   resolved "https://registry.yarnpkg.com/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz#147c612b36b47f105027f9d2bf54a598a99d9ccb"
   integrity sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs=
 
-es6-promise@^4.0.3, es6-promise@^4.2.8:
+es6-promise@^4.2.8:
   version "4.2.8"
   resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
   integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
 
-es6-promisify@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
-  integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
-  dependencies:
-    es6-promise "^4.0.3"
-
 escalade@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -6356,6 +7276,11 @@ escape-string-regexp@^2.0.0:
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
   integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
 
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
 escodegen@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -6368,19 +7293,6 @@ escodegen@^2.0.0:
   optionalDependencies:
     source-map "~0.6.1"
 
-eslint-config-cozy-app@1.1.12:
-  version "1.1.12"
-  resolved "https://registry.yarnpkg.com/eslint-config-cozy-app/-/eslint-config-cozy-app-1.1.12.tgz#0ab562a593274d518ffc085e1b7ff9124d2e76f9"
-  integrity sha512-0Q65/ZF7xGi4dF5zMNl4SKRDlFBvIFu9EJ59pRE/X7IfG0BzgbLzcdJjdmzbNG1czLVLAqzbns0R+6mU8F9+0g==
-  dependencies:
-    babel-eslint "10.0.1"
-    eslint "5.15.1"
-    eslint-config-prettier "4.1.0"
-    eslint-plugin-prettier "3.0.1"
-    eslint-plugin-react "7.12.4"
-    eslint-plugin-vue "5.2.2"
-    prettier "1.16.4"
-
 eslint-config-cozy-app@1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/eslint-config-cozy-app/-/eslint-config-cozy-app-1.5.0.tgz#a68addd27286984d808304f4cdac95ef8757aa8c"
@@ -6395,12 +7307,23 @@ eslint-config-cozy-app@1.5.0:
     eslint-plugin-vue "5.2.3"
     prettier "1.18.2"
 
-eslint-config-prettier@4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz#181364895899fff9fd3605fecb5c4f20e7d5f395"
-  integrity sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==
-  dependencies:
-    get-stdin "^6.0.0"
+eslint-config-cozy-app@4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-cozy-app/-/eslint-config-cozy-app-4.2.0.tgz#d6e41ebe7e924e885c78926ef497030550a383e1"
+  integrity sha512-naYjf9j2idGbfzrEbtCjg0Xb5J5Cgb/JhV88+S5gzK67YHEZm12FZ0pDVUwarj7+kDa64wfEaznhDHWRJb0gyw==
+  dependencies:
+    "@babel/eslint-parser" "^7.17.0"
+    "@typescript-eslint/eslint-plugin" "^5.19.0"
+    "@typescript-eslint/parser" "^5.19.0"
+    eslint "^8.13.0"
+    eslint-config-prettier "^8.5.0"
+    eslint-plugin-prettier "^4.0.0"
+    eslint-plugin-promise "^6.0.0"
+    eslint-plugin-react "^7.29.4"
+    eslint-plugin-react-hooks "^4.5.0"
+    eslint-plugin-vue "^8.6.0"
+    prettier "^2.6.2"
+    typescript "^4.6.3"
 
 eslint-config-prettier@4.3.0:
   version "4.3.0"
@@ -6409,12 +7332,10 @@ eslint-config-prettier@4.3.0:
   dependencies:
     get-stdin "^6.0.0"
 
-eslint-config-prettier@^6.7.0:
-  version "6.15.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
-  integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
-  dependencies:
-    get-stdin "^6.0.0"
+eslint-config-prettier@^8.5.0:
+  version "8.5.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1"
+  integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==
 
 eslint-loader@2.1.2:
   version "2.1.2"
@@ -6427,13 +7348,6 @@ eslint-loader@2.1.2:
     object-hash "^1.1.4"
     rimraf "^2.6.1"
 
-eslint-plugin-prettier@3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz#19d521e3981f69dd6d14f64aec8c6a6ac6eb0b0d"
-  integrity sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==
-  dependencies:
-    prettier-linter-helpers "^1.0.0"
-
 eslint-plugin-prettier@3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba"
@@ -6441,13 +7355,18 @@ eslint-plugin-prettier@3.1.2:
   dependencies:
     prettier-linter-helpers "^1.0.0"
 
-eslint-plugin-prettier@^3.1.1:
-  version "3.4.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5"
-  integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==
+eslint-plugin-prettier@^4.0.0, eslint-plugin-prettier@^4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
+  integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==
   dependencies:
     prettier-linter-helpers "^1.0.0"
 
+eslint-plugin-promise@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18"
+  integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==
+
 eslint-plugin-react-hooks@2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a"
@@ -6463,33 +7382,10 @@ eslint-plugin-react-hooks@^4.2.0:
   resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172"
   integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==
 
-eslint-plugin-react@7.12.4:
-  version "7.12.4"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c"
-  integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==
-  dependencies:
-    array-includes "^3.0.3"
-    doctrine "^2.1.0"
-    has "^1.0.3"
-    jsx-ast-utils "^2.0.1"
-    object.fromentries "^2.0.0"
-    prop-types "^15.6.2"
-    resolve "^1.9.0"
-
-eslint-plugin-react@7.14.2:
-  version "7.14.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.2.tgz#94c193cc77a899ac0ecbb2766fbef88685b7ecc1"
-  integrity sha512-jZdnKe3ip7FQOdjxks9XPN0pjUKZYq48OggNMd16Sk+8VXx6JOvXmlElxROCgp7tiUsTsze3jd78s/9AFJP2mA==
-  dependencies:
-    array-includes "^3.0.3"
-    doctrine "^2.1.0"
-    has "^1.0.3"
-    jsx-ast-utils "^2.1.0"
-    object.entries "^1.1.0"
-    object.fromentries "^2.0.0"
-    object.values "^1.1.0"
-    prop-types "^15.7.2"
-    resolve "^1.10.1"
+eslint-plugin-react-hooks@^4.5.0:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+  integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
 
 eslint-plugin-react@7.14.3:
   version "7.14.3"
@@ -6524,12 +7420,25 @@ eslint-plugin-react@7.19.0:
     string.prototype.matchall "^4.0.2"
     xregexp "^4.3.0"
 
-eslint-plugin-vue@5.2.2:
-  version "5.2.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz#86601823b7721b70bc92d54f1728cfc03b36283c"
-  integrity sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==
+eslint-plugin-react@7.30.1, eslint-plugin-react@^7.29.4:
+  version "7.30.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22"
+  integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==
   dependencies:
-    vue-eslint-parser "^5.0.0"
+    array-includes "^3.1.5"
+    array.prototype.flatmap "^1.3.0"
+    doctrine "^2.1.0"
+    estraverse "^5.3.0"
+    jsx-ast-utils "^2.4.1 || ^3.0.0"
+    minimatch "^3.1.2"
+    object.entries "^1.1.5"
+    object.fromentries "^2.0.5"
+    object.hasown "^1.1.1"
+    object.values "^1.1.5"
+    prop-types "^15.8.1"
+    resolve "^2.0.0-next.3"
+    semver "^6.3.0"
+    string.prototype.matchall "^4.0.7"
 
 eslint-plugin-vue@5.2.3:
   version "5.2.3"
@@ -6538,6 +7447,18 @@ eslint-plugin-vue@5.2.3:
   dependencies:
     vue-eslint-parser "^5.0.0"
 
+eslint-plugin-vue@^8.6.0:
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz#f13c53547a0c9d64588a675cc5ecc6ccaf63703f"
+  integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==
+  dependencies:
+    eslint-utils "^3.0.0"
+    natural-compare "^1.4.0"
+    nth-check "^2.0.1"
+    postcss-selector-parser "^6.0.9"
+    semver "^7.3.5"
+    vue-eslint-parser "^8.0.1"
+
 eslint-scope@3.7.1:
   version "3.7.1"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
@@ -6546,15 +7467,7 @@ eslint-scope@3.7.1:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
-eslint-scope@^3.7.1:
-  version "3.7.3"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
-  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
-  dependencies:
-    esrecurse "^4.1.0"
-    estraverse "^4.1.1"
-
-eslint-scope@^4.0.0, eslint-scope@^4.0.2, eslint-scope@^4.0.3:
+eslint-scope@^4.0.0, eslint-scope@^4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
   integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
@@ -6562,7 +7475,7 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.2, eslint-scope@^4.0.3:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
-eslint-scope@^5.0.0:
+eslint-scope@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
   integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -6570,68 +7483,44 @@ eslint-scope@^5.0.0:
     esrecurse "^4.3.0"
     estraverse "^4.1.1"
 
-eslint-utils@^1.3.1, eslint-utils@^1.4.3:
+eslint-scope@^7.0.0, eslint-scope@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+  integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
+
+eslint-utils@^1.3.1:
   version "1.4.3"
   resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
   integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
   dependencies:
     eslint-visitor-keys "^1.1.0"
 
-eslint-utils@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
-  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+eslint-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
   dependencies:
-    eslint-visitor-keys "^1.1.0"
+    eslint-visitor-keys "^2.0.0"
 
 eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
   integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
 
-eslint@5.15.1:
-  version "5.15.1"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.1.tgz#8266b089fd5391e0009a047050795b1d73664524"
-  integrity sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    ajv "^6.9.1"
-    chalk "^2.1.0"
-    cross-spawn "^6.0.5"
-    debug "^4.0.1"
-    doctrine "^3.0.0"
-    eslint-scope "^4.0.2"
-    eslint-utils "^1.3.1"
-    eslint-visitor-keys "^1.0.0"
-    espree "^5.0.1"
-    esquery "^1.0.1"
-    esutils "^2.0.2"
-    file-entry-cache "^5.0.1"
-    functional-red-black-tree "^1.0.1"
-    glob "^7.1.2"
-    globals "^11.7.0"
-    ignore "^4.0.6"
-    import-fresh "^3.0.0"
-    imurmurhash "^0.1.4"
-    inquirer "^6.2.2"
-    js-yaml "^3.12.0"
-    json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.3.0"
-    lodash "^4.17.11"
-    minimatch "^3.0.4"
-    mkdirp "^0.5.1"
-    natural-compare "^1.4.0"
-    optionator "^0.8.2"
-    path-is-inside "^1.0.2"
-    progress "^2.0.0"
-    regexpp "^2.0.1"
-    semver "^5.5.1"
-    strip-ansi "^4.0.0"
-    strip-json-comments "^2.0.1"
-    table "^5.2.3"
-    text-table "^0.2.0"
+eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 
-eslint@5.16.0, eslint@^5.0.0:
+eslint@5.16.0:
   version "5.16.0"
   resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
   integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
@@ -6717,57 +7606,47 @@ eslint@5.9.0:
     table "^5.0.2"
     text-table "^0.2.0"
 
-eslint@^6.7.2:
-  version "6.8.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
-  integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+eslint@^8.13.0, eslint@^8.18.0, eslint@^8.7.0:
+  version "8.19.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28"
+  integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==
   dependencies:
-    "@babel/code-frame" "^7.0.0"
+    "@eslint/eslintrc" "^1.3.0"
+    "@humanwhocodes/config-array" "^0.9.2"
     ajv "^6.10.0"
-    chalk "^2.1.0"
-    cross-spawn "^6.0.5"
-    debug "^4.0.1"
+    chalk "^4.0.0"
+    cross-spawn "^7.0.2"
+    debug "^4.3.2"
     doctrine "^3.0.0"
-    eslint-scope "^5.0.0"
-    eslint-utils "^1.4.3"
-    eslint-visitor-keys "^1.1.0"
-    espree "^6.1.2"
-    esquery "^1.0.1"
+    escape-string-regexp "^4.0.0"
+    eslint-scope "^7.1.1"
+    eslint-utils "^3.0.0"
+    eslint-visitor-keys "^3.3.0"
+    espree "^9.3.2"
+    esquery "^1.4.0"
     esutils "^2.0.2"
-    file-entry-cache "^5.0.1"
+    fast-deep-equal "^3.1.3"
+    file-entry-cache "^6.0.1"
     functional-red-black-tree "^1.0.1"
-    glob-parent "^5.0.0"
-    globals "^12.1.0"
-    ignore "^4.0.6"
+    glob-parent "^6.0.1"
+    globals "^13.15.0"
+    ignore "^5.2.0"
     import-fresh "^3.0.0"
     imurmurhash "^0.1.4"
-    inquirer "^7.0.0"
     is-glob "^4.0.0"
-    js-yaml "^3.13.1"
+    js-yaml "^4.1.0"
     json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.3.0"
-    lodash "^4.17.14"
-    minimatch "^3.0.4"
-    mkdirp "^0.5.1"
+    levn "^0.4.1"
+    lodash.merge "^4.6.2"
+    minimatch "^3.1.2"
     natural-compare "^1.4.0"
-    optionator "^0.8.3"
-    progress "^2.0.0"
-    regexpp "^2.0.1"
-    semver "^6.1.2"
-    strip-ansi "^5.2.0"
-    strip-json-comments "^3.0.1"
-    table "^5.2.3"
+    optionator "^0.9.1"
+    regexpp "^3.2.0"
+    strip-ansi "^6.0.1"
+    strip-json-comments "^3.1.0"
     text-table "^0.2.0"
     v8-compile-cache "^2.0.3"
 
-espree@^3.5.2:
-  version "3.5.4"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
-  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
-  dependencies:
-    acorn "^5.5.0"
-    acorn-jsx "^3.0.0"
-
 espree@^4.0.0, espree@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
@@ -6786,21 +7665,21 @@ espree@^5.0.1:
     acorn-jsx "^5.0.0"
     eslint-visitor-keys "^1.0.0"
 
-espree@^6.1.2:
-  version "6.2.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
-  integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+espree@^9.0.0, espree@^9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596"
+  integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==
   dependencies:
-    acorn "^7.1.1"
-    acorn-jsx "^5.2.0"
-    eslint-visitor-keys "^1.1.0"
+    acorn "^8.7.1"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.3.0"
 
 esprima@^4.0.0, esprima@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
   integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
 
-esquery@^1.0.0, esquery@^1.0.1:
+esquery@^1.0.1, esquery@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
   integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
@@ -6819,7 +7698,7 @@ estraverse@^4.1.1:
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
   integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
 
-estraverse@^5.1.0, estraverse@^5.2.0:
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
   integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
@@ -6869,32 +7748,6 @@ exec-sh@^0.3.2:
   resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
   integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
 
-execa@^0.10.0:
-  version "0.10.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
-  integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
-  dependencies:
-    cross-spawn "^6.0.0"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
-  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
-  dependencies:
-    cross-spawn "^5.0.1"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
 execa@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
@@ -6943,13 +7796,6 @@ exit@^0.1.2:
   resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
   integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
 
-expand-brackets@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
-  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
-  dependencies:
-    is-posix-bracket "^0.1.0"
-
 expand-brackets@^2.1.4:
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@@ -6963,13 +7809,6 @@ expand-brackets@^2.1.4:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-expand-range@^1.8.1:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
-  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
-  dependencies:
-    fill-range "^2.1.0"
-
 expect@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
@@ -7052,13 +7891,6 @@ external-editor@^3.0.3:
     iconv-lite "^0.4.24"
     tmp "^0.0.33"
 
-extglob@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
-  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
-  dependencies:
-    is-extglob "^1.0.0"
-
 extglob@^2.0.2, extglob@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -7098,7 +7930,7 @@ fancy-log@^1.3.2:
     parse-node-version "^1.0.0"
     time-stamp "^1.0.0"
 
-fast-deep-equal@^3.1.1:
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
   integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@@ -7119,6 +7951,17 @@ fast-glob@^3.1.1, fast-glob@^3.2.4:
     merge2 "^1.3.0"
     micromatch "^4.0.4"
 
+fast-glob@^3.2.9:
+  version "3.2.11"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+  integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.4"
+
 fast-json-stable-stringify@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -7182,7 +8025,7 @@ figures@^2.0.0:
   dependencies:
     escape-string-regexp "^1.0.5"
 
-figures@^3.0.0, figures@^3.1.0:
+figures@^3.1.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
   integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
@@ -7204,6 +8047,13 @@ file-entry-cache@^5.0.1:
   dependencies:
     flat-cache "^2.0.1"
 
+file-entry-cache@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+  dependencies:
+    flat-cache "^3.0.4"
+
 file-loader@3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
@@ -7226,27 +8076,16 @@ file-uri-to-path@1.0.0:
   resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
   integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
 
-filename-regex@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+filesize@8.0.7:
+  version "8.0.7"
+  resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
+  integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
 
 filesize@^3.6.1:
   version "3.6.1"
   resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
   integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
 
-fill-range@^2.1.0:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
-  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
-  dependencies:
-    is-number "^2.1.0"
-    isobject "^2.0.0"
-    randomatic "^3.0.0"
-    repeat-element "^1.1.2"
-    repeat-string "^1.5.2"
-
 fill-range@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -7264,11 +8103,6 @@ fill-range@^7.0.1:
   dependencies:
     to-regex-range "^5.0.1"
 
-filter-console@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/filter-console/-/filter-console-0.1.1.tgz#6242be28982bba7415bcc6db74a79f4a294fa67c"
-  integrity sha512-zrXoV1Uaz52DqPs+qEwNJWJFAWZpYJ47UNmpN9q4j+/EYsz85uV0DC9k8tRND5kYmoVzL0W+Y75q4Rg8sRJCdg==
-
 final-form@^4.18.5:
   version "4.20.4"
   resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.4.tgz#8d59e36d3248a227265cc731d76c0564dd2606f6"
@@ -7368,13 +8202,6 @@ find-up@^5.0.0:
     locate-path "^6.0.0"
     path-exists "^4.0.0"
 
-find-versions@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965"
-  integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==
-  dependencies:
-    semver-regex "^3.1.2"
-
 flat-cache@^1.2.1:
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
@@ -7394,11 +8221,29 @@ flat-cache@^2.0.1:
     rimraf "2.6.3"
     write "1.0.3"
 
+flat-cache@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+  dependencies:
+    flatted "^3.1.0"
+    rimraf "^3.0.2"
+
 flatted@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
   integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
 
+flatted@^3.1.0:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2"
+  integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==
+
+fluids@^0.1.6:
+  version "0.1.10"
+  resolved "https://registry.yarnpkg.com/fluids/-/fluids-0.1.10.tgz#0517e7a53dbce1db011dddec301b75178518ba0e"
+  integrity sha512-66FLmUJOrkvEHIsRVeM+88MG0bjd2TOBuR0BkM0hzyCb68W9drzqeX/AHDNp3ouZALQN7JvBvmKdVhHI+PZsdg==
+
 flush-write-stream@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
@@ -7407,30 +8252,21 @@ flush-write-stream@^1.0.0:
     inherits "^2.0.3"
     readable-stream "^2.3.6"
 
-follow-redirects@1.5.10:
-  version "1.5.10"
-  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
-  integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
-  dependencies:
-    debug "=3.1.0"
-
 follow-redirects@^1.0.0:
   version "1.14.5"
   resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
   integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
 
-for-in@^1.0.1, for-in@^1.0.2:
+follow-redirects@^1.14.0, follow-redirects@^1.14.9:
+  version "1.15.1"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
+  integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
+
+for-in@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
   integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
 
-for-own@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
-  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
-  dependencies:
-    for-in "^1.0.1"
-
 forever-agent@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -7445,6 +8281,15 @@ form-data@^3.0.0:
     combined-stream "^1.0.8"
     mime-types "^2.1.12"
 
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
 form-data@~2.3.2:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -7486,7 +8331,7 @@ fs-access@^1.0.1:
   dependencies:
     null-check "^1.0.0"
 
-fs-extra@7.0.1:
+fs-extra@7.0.1, fs-extra@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
   integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
@@ -7533,7 +8378,7 @@ fs.realpath@^1.0.0:
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
   integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
 
-fsevents@^1.0.0, fsevents@^1.2.7:
+fsevents@^1.2.7:
   version "1.2.13"
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
   integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
@@ -7546,22 +8391,12 @@ fsevents@^2.0.6, fsevents@^2.1.2, fsevents@~2.3.2:
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
   integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
 
-fstream@^1.0.0, fstream@^1.0.12:
-  version "1.0.12"
-  resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
-  integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
-  dependencies:
-    graceful-fs "^4.1.2"
-    inherits "~2.0.0"
-    mkdirp ">=0.5 0"
-    rimraf "2"
-
 function-bind@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
   integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 
-function.prototype.name@^1.1.2, function.prototype.name@^1.1.3:
+function.prototype.name@^1.1.2, function.prototype.name@^1.1.3, function.prototype.name@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
   integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
@@ -7581,27 +8416,6 @@ functions-have-names@^1.2.2:
   resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21"
   integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==
 
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-gaze@^1.0.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
-  integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
-  dependencies:
-    globule "^1.0.0"
-
 geco@^0.11.1:
   version "0.11.1"
   resolved "https://registry.yarnpkg.com/geco/-/geco-0.11.1.tgz#2dec107202a37bbfbb480892446a94a6ffc41411"
@@ -7653,21 +8467,11 @@ get-pkg-repo@^4.0.0:
     through2 "^2.0.0"
     yargs "^16.2.0"
 
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-  integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-
 get-stdin@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
   integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
 
-get-stream@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-  integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
-
 get-stream@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -7749,21 +8553,6 @@ gitconfiglocal@^1.0.0:
   dependencies:
     ini "^1.3.2"
 
-glob-base@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
-  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
-  dependencies:
-    glob-parent "^2.0.0"
-    is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
-  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
-  dependencies:
-    is-glob "^2.0.0"
-
 glob-parent@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
@@ -7779,6 +8568,13 @@ glob-parent@^5.0.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2:
   dependencies:
     is-glob "^4.0.1"
 
+glob-parent@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+  dependencies:
+    is-glob "^4.0.3"
+
 glob@7.0.4:
   version "7.0.4"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.4.tgz#3b44afa0943bdc31b2037b934791e2e084bcb7f6"
@@ -7791,7 +8587,7 @@ glob@7.0.4:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
   integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
@@ -7803,19 +8599,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@~7.1.1:
-  version "7.1.7"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
-  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-global@^4.3.0, global@^4.4.0:
+global@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
   integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
@@ -7828,12 +8612,12 @@ globals@^11.1.0, globals@^11.7.0:
   resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
-globals@^12.1.0:
-  version "12.4.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
-  integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+globals@^13.15.0:
+  version "13.16.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.16.0.tgz#9be4aca28f311aaeb974ea54978ebbb5e35ce46a"
+  integrity sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==
   dependencies:
-    type-fest "^0.8.1"
+    type-fest "^0.20.2"
 
 globby@^11.0.1:
   version "11.0.4"
@@ -7847,6 +8631,18 @@ globby@^11.0.1:
     merge2 "^1.3.0"
     slash "^3.0.0"
 
+globby@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+  dependencies:
+    array-union "^2.1.0"
+    dir-glob "^3.0.1"
+    fast-glob "^3.2.9"
+    ignore "^5.2.0"
+    merge2 "^1.4.1"
+    slash "^3.0.0"
+
 globby@^6.1.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -7870,15 +8666,6 @@ globby@^7.1.1:
     pify "^3.0.0"
     slash "^1.0.0"
 
-globule@^1.0.0:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2"
-  integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==
-  dependencies:
-    glob "~7.1.1"
-    lodash "~4.17.10"
-    minimatch "~3.0.2"
-
 graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
   version "4.2.8"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
@@ -7897,6 +8684,13 @@ gzip-size@^5.0.0:
     duplexer "^0.1.1"
     pify "^4.0.1"
 
+gzip-size@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+  dependencies:
+    duplexer "^0.1.2"
+
 hammerjs@2.0.8, hammerjs@^2.0.8:
   version "2.0.8"
   resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
@@ -7964,6 +8758,11 @@ has-bigints@^1.0.1:
   resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
   integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
 
+has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
 has-flag@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
@@ -7979,11 +8778,23 @@ has-flag@^4.0.0:
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
 has-symbols@^1.0.1, has-symbols@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
   integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
 
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
 has-tostringtag@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
@@ -7991,11 +8802,6 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
 has-value@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -8061,11 +8867,6 @@ highlight.js@^10.7.1:
   resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
   integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
 
-highlight.js@^9.6.0:
-  version "9.18.5"
-  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825"
-  integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==
-
 history@^4.9.0:
   version "4.10.1"
   resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
@@ -8087,7 +8888,7 @@ hmac-drbg@^1.0.1:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.1"
 
-hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
+hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
   integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -8146,19 +8947,6 @@ html-escaper@^2.0.0:
   resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
   integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
 
-html-minifier-terser@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054"
-  integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==
-  dependencies:
-    camel-case "^4.1.1"
-    clean-css "^4.2.3"
-    commander "^4.1.1"
-    he "^1.2.0"
-    param-case "^3.0.3"
-    relateurl "^0.2.7"
-    terser "^4.6.3"
-
 html-minifier@^3.2.3:
   version "3.5.21"
   resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
@@ -8259,10 +9047,15 @@ htmlparser2@^7.0:
     domutils "^2.8.0"
     entities "^3.0.1"
 
-http-cache-semantics@^3.8.1:
-  version "3.8.1"
-  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
-  integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+htmlparser2@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010"
+  integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==
+  dependencies:
+    domelementtype "^2.3.0"
+    domhandler "^5.0.2"
+    domutils "^3.0.1"
+    entities "^4.3.0"
 
 http-deceiver@^1.2.7:
   version "1.2.7"
@@ -8324,14 +9117,6 @@ http-parser-js@>=0.5.1:
   resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
   integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
 
-http-proxy-agent@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
-  integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
-  dependencies:
-    agent-base "4"
-    debug "3.1.0"
-
 http-proxy-agent@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
@@ -8374,14 +9159,6 @@ https-browserify@^1.0.0:
   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
   integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
 
-https-proxy-agent@^2.2.1:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
-  integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
-  dependencies:
-    agent-base "^4.3.0"
-    debug "^3.1.0"
-
 https-proxy-agent@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
@@ -8405,28 +9182,10 @@ human-size@^1.1.0:
   resolved "https://registry.yarnpkg.com/human-size/-/human-size-1.1.0.tgz#052562be999841c037022c20259990c56ea996f9"
   integrity sha1-BSVivpmYQcA3AiwgJZmQxW6plvk=
 
-humanize-ms@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
-  integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
-  dependencies:
-    ms "^2.0.0"
-
-husky@^4.3.8:
-  version "4.3.8"
-  resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d"
-  integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==
-  dependencies:
-    chalk "^4.0.0"
-    ci-info "^2.0.0"
-    compare-versions "^3.6.0"
-    cosmiconfig "^7.0.0"
-    find-versions "^4.0.0"
-    opencollective-postinstall "^2.0.2"
-    pkg-dir "^5.0.0"
-    please-upgrade-node "^3.2.0"
-    slash "^3.0.0"
-    which-pm-runs "^1.0.0"
+husky@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9"
+  integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==
 
 hyphenate-style-name@^1.0.3:
   version "1.0.4"
@@ -8445,13 +9204,6 @@ iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
-iconv-lite@^0.6.2:
-  version "0.6.3"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
-  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3.0.0"
-
 icss-replace-symbols@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
@@ -8496,16 +9248,26 @@ ignore@^5.1.4:
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb"
   integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==
 
+ignore@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+  integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
 image-size@^0.5.1:
   version "0.5.5"
   resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
   integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
 
-immediate@3.0.6, immediate@~3.0.5:
+immediate@3.0.6:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
   integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
 
+immutable@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
+  integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
+
 import-cwd@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -8565,18 +9327,6 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
-in-publish@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c"
-  integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==
-
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
-  dependencies:
-    repeating "^2.0.0"
-
 indent-string@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
@@ -8595,7 +9345,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8634,25 +9384,6 @@ inquirer@^6.1.0, inquirer@^6.2.2:
     strip-ansi "^5.1.0"
     through "^2.3.6"
 
-inquirer@^7.0.0:
-  version "7.3.3"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
-  integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
-  dependencies:
-    ansi-escapes "^4.2.1"
-    chalk "^4.1.0"
-    cli-cursor "^3.1.0"
-    cli-width "^3.0.0"
-    external-editor "^3.0.3"
-    figures "^3.0.0"
-    lodash "^4.17.19"
-    mute-stream "0.0.8"
-    run-async "^2.4.0"
-    rxjs "^6.6.0"
-    string-width "^4.1.0"
-    strip-ansi "^6.0.0"
-    through "^2.3.6"
-
 internal-ip@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
@@ -8697,7 +9428,7 @@ ip-regex@^2.1.0:
   resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
   integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
 
-ip@1.1.5, ip@^1.1.0, ip@^1.1.5:
+ip@^1.1.0, ip@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
   integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
@@ -8805,6 +9536,13 @@ is-core-module@^2.2.0, is-core-module@^2.5.0:
   dependencies:
     has "^1.0.3"
 
+is-core-module@^2.9.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
+  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
+  dependencies:
+    has "^1.0.3"
+
 is-data-descriptor@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -8859,18 +9597,6 @@ is-docker@^2.0.0, is-docker@^2.1.1:
   resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
   integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
 
-is-dotfile@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-
-is-equal-shallow@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
-  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
-  dependencies:
-    is-primitive "^2.0.0"
-
 is-extendable@^0.1.0, is-extendable@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -8883,21 +9609,11 @@ is-extendable@^1.0.1:
   dependencies:
     is-plain-object "^2.0.4"
 
-is-extglob@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-
 is-extglob@^2.1.0, is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
   integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
 
-is-finite@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
-  integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
-
 is-fullwidth-code-point@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
@@ -8925,13 +9641,6 @@ is-generator-fn@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
   integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
 
-is-glob@^2.0.0, is-glob@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
-  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
-  dependencies:
-    is-extglob "^1.0.0"
-
 is-glob@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -8939,7 +9648,7 @@ is-glob@^3.1.0:
   dependencies:
     is-extglob "^2.1.0"
 
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
   integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -8961,6 +9670,11 @@ is-negative-zero@^2.0.1:
   resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
   integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
 
+is-negative-zero@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
 is-number-object@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
@@ -8968,13 +9682,6 @@ is-number-object@^1.0.4:
   dependencies:
     has-tostringtag "^1.0.0"
 
-is-number@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
-  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
-  dependencies:
-    kind-of "^3.0.2"
-
 is-number@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -8982,11 +9689,6 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
-is-number@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
-  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-
 is-number@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -9028,21 +9730,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   dependencies:
     isobject "^3.0.1"
 
-is-posix-bracket@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-
 is-potential-custom-element-name@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
   integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
 
-is-primitive@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-
 is-promise@^2.1.0:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
@@ -9066,7 +9758,14 @@ is-shared-array-buffer@^1.0.1:
   resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
   integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
 
-is-stream@^1.0.1, is-stream@^1.1.0:
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-stream@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
   integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -9119,6 +9818,13 @@ is-weakref@^1.0.1:
   dependencies:
     call-bind "^1.0.0"
 
+is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
 is-whitespace-character@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
@@ -9178,14 +9884,6 @@ isobject@^3.0.0, isobject@^3.0.1:
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
   integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
 
-isomorphic-fetch@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
-  integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
-  dependencies:
-    node-fetch "^1.0.1"
-    whatwg-fetch ">=0.10.0"
-
 isstream@0.1.x, isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -9303,16 +10001,6 @@ jest-config@^26.6.3:
     micromatch "^4.0.2"
     pretty-format "^26.6.2"
 
-jest-diff@^24.3.0:
-  version "24.9.0"
-  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
-  integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
-  dependencies:
-    chalk "^2.0.1"
-    diff-sequences "^24.9.0"
-    jest-get-type "^24.9.0"
-    pretty-format "^24.9.0"
-
 jest-diff@^26.0.0, jest-diff@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
@@ -9323,6 +10011,16 @@ jest-diff@^26.0.0, jest-diff@^26.6.2:
     jest-get-type "^26.3.0"
     pretty-format "^26.6.2"
 
+jest-diff@^28.1.1:
+  version "28.1.1"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c"
+  integrity sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==
+  dependencies:
+    chalk "^4.0.0"
+    diff-sequences "^28.1.1"
+    jest-get-type "^28.0.2"
+    pretty-format "^28.1.1"
+
 jest-docblock@^26.0.0:
   version "26.0.0"
   resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5"
@@ -9341,6 +10039,16 @@ jest-each@^26.6.2:
     jest-util "^26.6.2"
     pretty-format "^26.6.2"
 
+jest-environment-jsdom-sixteen@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/jest-environment-jsdom-sixteen/-/jest-environment-jsdom-sixteen-1.0.3.tgz#e222228fac537ef15cca5ad470b19b47d9690165"
+  integrity sha512-CwMqDUUfSl808uGPWXlNA1UFkWFgRmhHvyAjhCmCry6mYq4b/nn80MMN7tglqo5XgrANIs/w+mzINPzbZ4ZZrQ==
+  dependencies:
+    "@jest/fake-timers" "^25.1.0"
+    jest-mock "^25.1.0"
+    jest-util "^25.1.0"
+    jsdom "^16.2.1"
+
 jest-environment-jsdom@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e"
@@ -9366,16 +10074,16 @@ jest-environment-node@^26.6.2:
     jest-mock "^26.6.2"
     jest-util "^26.6.2"
 
-jest-get-type@^24.9.0:
-  version "24.9.0"
-  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
-  integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
-
 jest-get-type@^26.3.0:
   version "26.3.0"
   resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
   integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
 
+jest-get-type@^28.0.2:
+  version "28.0.2"
+  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203"
+  integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==
+
 jest-haste-map@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa"
@@ -9421,13 +10129,13 @@ jest-jasmine2@^26.6.3:
     pretty-format "^26.6.2"
     throat "^5.0.0"
 
-jest-junit@^12.0.0:
-  version "12.3.0"
-  resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-12.3.0.tgz#ee41a74e439eecdc8965f163f83035cce5998d6d"
-  integrity sha512-+NmE5ogsEjFppEl90GChrk7xgz8xzvF0f+ZT5AnhW6suJC93gvQtmQjfyjDnE0Z2nXJqEkxF0WXlvjG/J+wn/g==
+jest-junit@^14.0.0:
+  version "14.0.0"
+  resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-14.0.0.tgz#f69fc31bab32224848f443480c2c808fccb2a802"
+  integrity sha512-kALvBDegstTROfDGXH71UGD7k5g7593Y1wuX1wpWT+QTYcBbmtuGOA8UlAt56zo/B2eMIOcaOVEON3j0VXVa4g==
   dependencies:
     mkdirp "^1.0.4"
-    strip-ansi "^5.2.0"
+    strip-ansi "^6.0.1"
     uuid "^8.3.2"
     xml "^1.0.1"
 
@@ -9449,6 +10157,30 @@ jest-matcher-utils@^26.6.2:
     jest-get-type "^26.3.0"
     pretty-format "^26.6.2"
 
+jest-matcher-utils@^28.0.0:
+  version "28.1.1"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304"
+  integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==
+  dependencies:
+    chalk "^4.0.0"
+    jest-diff "^28.1.1"
+    jest-get-type "^28.0.2"
+    pretty-format "^28.1.1"
+
+jest-message-util@^25.5.0:
+  version "25.5.0"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea"
+  integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@jest/types" "^25.5.0"
+    "@types/stack-utils" "^1.0.1"
+    chalk "^3.0.0"
+    graceful-fs "^4.2.4"
+    micromatch "^4.0.2"
+    slash "^3.0.0"
+    stack-utils "^1.0.1"
+
 jest-message-util@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07"
@@ -9464,6 +10196,13 @@ jest-message-util@^26.6.2:
     slash "^3.0.0"
     stack-utils "^2.0.2"
 
+jest-mock@^25.1.0, jest-mock@^25.5.0:
+  version "25.5.0"
+  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a"
+  integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==
+  dependencies:
+    "@jest/types" "^25.5.0"
+
 jest-mock@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302"
@@ -9594,6 +10333,17 @@ jest-snapshot@^26.6.2:
     pretty-format "^26.6.2"
     semver "^7.3.2"
 
+jest-util@^25.1.0, jest-util@^25.5.0:
+  version "25.5.0"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0"
+  integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==
+  dependencies:
+    "@jest/types" "^25.5.0"
+    chalk "^3.0.0"
+    graceful-fs "^4.2.4"
+    is-ci "^2.0.0"
+    make-dir "^3.0.0"
+
 jest-util@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1"
@@ -9649,7 +10399,7 @@ jest@26.6.3:
     import-local "^3.0.2"
     jest-cli "^26.6.3"
 
-js-base64@^2.1.8, js-base64@^2.1.9:
+js-base64@^2.1.9:
   version "2.6.4"
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
   integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
@@ -9682,12 +10432,19 @@ js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1:
     argparse "^1.0.7"
     esprima "^4.0.0"
 
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
 jsbn@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
   integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
 
-jsdom@^16.4.0:
+jsdom@^16.2.1, jsdom@^16.4.0:
   version "16.7.0"
   resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
   integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
@@ -9735,7 +10492,7 @@ json-loader@0.5.7:
   resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
   integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
 
-json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
   integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
@@ -9893,7 +10650,7 @@ jss@10.8.2, jss@^10.5.1:
     is-in-browser "^1.1.3"
     tiny-warning "^1.0.2"
 
-jsx-ast-utils@^2.0.1, jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.3:
+jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.3:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
   integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
@@ -9901,6 +10658,14 @@ jsx-ast-utils@^2.0.1, jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.3:
     array-includes "^3.1.1"
     object.assign "^4.1.0"
 
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44"
+  integrity sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==
+  dependencies:
+    array-includes "^3.1.5"
+    object.assign "^4.1.2"
+
 juice@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/juice/-/juice-7.0.0.tgz#509bed6adbb6e4bbaa7fbfadac4e2e83e8c89ba3"
@@ -9965,21 +10730,6 @@ lcid@^2.0.0:
   dependencies:
     invert-kv "^2.0.0"
 
-lerna-changelog@0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-0.8.2.tgz#05dc24add91741a4c198a79f82a1a4ac3fbb4754"
-  integrity sha512-GrWs8K3DrPpO1sUrcloYp9ioj+PNAX27U6tM0+10fhbNzBB7h4HS+4N5DWKhEQRDoJjZh1QA+wWwTpDNJdJHyA==
-  dependencies:
-    chalk "^2.4.1"
-    cli-highlight "^1.2.3"
-    execa "^0.10.0"
-    make-fetch-happen "^4.0.1"
-    normalize-git-url "^3.0.2"
-    p-map "^1.2.0"
-    progress "^2.0.0"
-    string.prototype.padend "^3.0.0"
-    yargs "^11.0.0"
-
 leven@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -9993,12 +10743,13 @@ levn@^0.3.0, levn@~0.3.0:
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
 
-lie@3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
-  integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
+levn@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
   dependencies:
-    immediate "~3.0.5"
+    prelude-ls "^1.2.1"
+    type-check "~0.4.0"
 
 lilconfig@2.0.4:
   version "2.0.4"
@@ -10115,13 +10866,6 @@ loader-utils@^2.0.0:
     emojis-list "^3.0.0"
     json5 "^2.1.2"
 
-localforage@1.7.3:
-  version "1.7.3"
-  resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.7.3.tgz#0082b3ca9734679e1bd534995bdd3b24cf10f204"
-  integrity sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==
-  dependencies:
-    lie "3.1.1"
-
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -10152,7 +10896,7 @@ locate-path@^6.0.0:
   dependencies:
     p-locate "^5.0.0"
 
-lodash-es@^4.17.11, lodash-es@^4.2.1:
+lodash-es@^4.17.11, lodash-es@^4.17.21:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
   integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
@@ -10167,11 +10911,6 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6:
   resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
   integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
 
-lodash.assigninwith@^4.0.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz#af02c98432ac86d93da695b4be801401971736af"
-  integrity sha1-rwLJhDKshtk9ppW0voAUAZcXNq8=
-
 lodash.camelcase@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@@ -10187,14 +10926,6 @@ lodash.debounce@4.0.8, lodash.debounce@^4.0.8:
   resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
   integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
 
-lodash.defaults@4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.0.1.tgz#05678e612a9716c64b5bf2cecf045131ca3d3402"
-  integrity sha1-BWeOYSqXFsZLW/LOzwRRMco9NAI=
-  dependencies:
-    lodash.assigninwith "^4.0.0"
-    lodash.rest "^4.0.0"
-
 lodash.defaults@4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
@@ -10225,41 +10956,26 @@ lodash.isplainobject@^4.0.6:
   resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
   integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
 
-lodash.merge@^4.6.0:
+lodash.merge@^4.6.0, lodash.merge@^4.6.2:
   version "4.6.2"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-lodash.rest@^4.0.0:
-  version "4.0.5"
-  resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa"
-  integrity sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=
-
-lodash.unescape@4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
-  integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+lodash.set@^4.3.2:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+  integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==
 
 lodash.unionwith@4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz#74d140b5ca8146e6c643c3724f5152538d9ac1f0"
   integrity sha1-dNFAtcqBRubGQ8NyT1FSU42awfA=
 
-lodash@4, lodash@^4.0.0, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.7.0, lodash@~4.17.10:
+lodash@4, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
-lodash@4.17.13:
-  version "4.17.13"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93"
-  integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==
-
-lodash@4.17.15:
-  version "4.17.15"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
-  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-
 lodash@4.17.19:
   version "4.17.19"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
@@ -10288,6 +11004,13 @@ loglevel@^1.4.1, loglevel@^1.6.6:
   resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
   integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
 
+lolex@^5.0.0:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
+  integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
+  dependencies:
+    "@sinonjs/commons" "^1.7.0"
+
 long@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -10305,14 +11028,6 @@ lottie-web@^5.1.3:
   resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.8.1.tgz#807e0af0ad22b59bf867d964eb684cb3368da0ef"
   integrity sha512-9gIizWADlaHC2GCt+D+yNpk5l2clZQFqnVWWIVdY0LnxC/uLa39dYltAe3fcmC/hrZ2IUQ8dLlY0O934Npjs7Q==
 
-loud-rejection@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
-  integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
-  dependencies:
-    currently-unhandled "^0.4.1"
-    signal-exit "^3.0.0"
-
 lowdb@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-1.0.0.tgz#5243be6b22786ccce30e50c9a33eac36b20c8064"
@@ -10329,14 +11044,7 @@ lower-case@^1.1.1:
   resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
   integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
 
-lower-case@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
-  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
-  dependencies:
-    tslib "^2.0.3"
-
-lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.5:
+lru-cache@^4.1.1, lru-cache@^4.1.5:
   version "4.1.5"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
   integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -10363,10 +11071,10 @@ lunr@^2.3.6:
   resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
   integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==
 
-luxon@^1.21.3:
-  version "1.28.0"
-  resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
-  integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==
+luxon@^2.0.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.4.0.tgz#9435806545bb32d4234dab766ab8a3d54847a765"
+  integrity sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA==
 
 make-cancellable-promise@^1.0.0:
   version "1.1.0"
@@ -10400,23 +11108,6 @@ make-event-props@^1.1.0:
   resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.3.0.tgz#2434cb390d58bcf40898d009ef5b1f936de9671b"
   integrity sha512-oWiDZMcVB1/A487251hEWza1xzgCzl6MXxe9aF24l5Bt9N9UEbqTqKumEfuuLhmlhRZYnc+suVvW4vUs8bwO7Q==
 
-make-fetch-happen@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz#2d156b11696fb32bffbafe1ac1bc085dd6c78a79"
-  integrity sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA==
-  dependencies:
-    agentkeepalive "^3.4.1"
-    cacache "^11.3.3"
-    http-cache-semantics "^3.8.1"
-    http-proxy-agent "^2.1.0"
-    https-proxy-agent "^2.2.1"
-    lru-cache "^5.1.1"
-    mississippi "^3.0.0"
-    node-fetch-npm "^2.0.2"
-    promise-retry "^1.1.1"
-    socks-proxy-agent "^4.0.0"
-    ssri "^6.0.0"
-
 makeerror@1.0.12:
   version "1.0.12"
   resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -10436,7 +11127,7 @@ map-cache@^0.2.2:
   resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
   integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
 
-map-obj@^1.0.0, map-obj@^1.0.1:
+map-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
   integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
@@ -10458,11 +11149,6 @@ markdown-escapes@^1.0.0:
   resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
   integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
 
-math-random@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
-  integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
-
 md5.js@^1.3.4:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -10503,13 +11189,6 @@ media-typer@0.3.0:
   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
   integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
 
-mem@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
-  integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
-  dependencies:
-    mimic-fn "^1.0.0"
-
 mem@^4.0.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
@@ -10519,11 +11198,6 @@ mem@^4.0.0:
     mimic-fn "^2.0.0"
     p-is-promise "^2.0.0"
 
-memoize-one@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906"
-  integrity sha512-2GApq0yI/b22J2j9rhbrAlsHb0Qcz+7yWxeLG8h+95sl1XPUgeLimQSOdur4Vw7cUhrBHwaUZxWFZueojqNRzA==
-
 memoize-one@^5.0.0:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
@@ -10555,22 +11229,6 @@ mensch@^0.3.4:
   resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd"
   integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==
 
-meow@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
-  integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
-  dependencies:
-    camelcase-keys "^2.0.0"
-    decamelize "^1.1.2"
-    loud-rejection "^1.0.0"
-    map-obj "^1.0.1"
-    minimist "^1.1.3"
-    normalize-package-data "^2.3.4"
-    object-assign "^4.0.1"
-    read-pkg-up "^1.0.1"
-    redent "^1.0.0"
-    trim-newlines "^1.0.0"
-
 meow@^8.0.0:
   version "8.1.2"
   resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
@@ -10610,7 +11268,7 @@ merge-stream@^2.0.0:
   resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
   integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
 
-merge2@^1.3.0:
+merge2@^1.3.0, merge2@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -10644,25 +11302,6 @@ micromatch@3.1.0:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-micromatch@^2.1.5:
-  version "2.3.11"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
-  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
-  dependencies:
-    arr-diff "^2.0.0"
-    array-unique "^0.2.1"
-    braces "^1.8.2"
-    expand-brackets "^0.1.4"
-    extglob "^0.3.1"
-    filename-regex "^2.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.1"
-    kind-of "^3.0.2"
-    normalize-path "^2.0.1"
-    object.omit "^2.0.0"
-    parse-glob "^3.0.4"
-    regex-cache "^0.4.2"
-
 micromatch@^3.1.10, micromatch@^3.1.4:
   version "3.1.10"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@@ -10703,6 +11342,18 @@ mime-db@1.51.0, "mime-db@>= 1.43.0 < 2":
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
   integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
 
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@2.1.35:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
 mime-types@^2.1.12, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
   version "2.1.34"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
@@ -10759,12 +11410,6 @@ mini-css-extract-plugin@0.5.0:
     schema-utils "^1.0.0"
     webpack-sources "^1.1.0"
 
-minilog@3.1.0, "minilog@https://github.com/cozy/minilog.git#master":
-  version "3.1.0"
-  resolved "https://github.com/cozy/minilog.git#6da0aa58759c4f1a1a7e0fd093dbe2a67c035c55"
-  dependencies:
-    microee "0.0.6"
-
 minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -10775,13 +11420,20 @@ minimalistic-crypto-utils@^1.0.1:
   resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
   integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
 
-"minimatch@2 || 3", minimatch@^3.0.4, minimatch@~3.0.2:
+"minimatch@2 || 3", minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
   dependencies:
     brace-expansion "^1.1.7"
 
+minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
 minimist-options@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
@@ -10791,7 +11443,7 @@ minimist-options@4.1.0:
     is-plain-obj "^1.1.0"
     kind-of "^6.0.3"
 
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
+minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -11234,7 +11886,7 @@ mjml@^4.10.2:
     mjml-preset-core "4.11.0"
     mjml-validator "4.11.0"
 
-mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x:
+mkdirp@0.x.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x:
   version "0.5.5"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
   integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -11306,7 +11958,7 @@ ms@2.1.2:
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
 
-ms@^2.0.0, ms@^2.1.1:
+ms@^2.1.1:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
   integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -11321,6 +11973,16 @@ msgpack5@^4.0.2:
     readable-stream "^2.3.6"
     safe-buffer "^5.1.2"
 
+"mui-bottom-sheet@https://github.com/cozy/mui-bottom-sheet.git#v1.0.6":
+  version "1.0.6"
+  resolved "https://github.com/cozy/mui-bottom-sheet.git#494c40416ecde95732c864f9b921e7e545075aa5"
+  dependencies:
+    "@juggle/resize-observer" "^3.1.3"
+    jest-environment-jsdom-sixteen "^1.0.3"
+    react-spring "9.0.0-rc.3"
+    react-use-gesture "^7.0.8"
+    react-use-measure "^2.0.0"
+
 multicast-dns-service-types@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@@ -11339,7 +12001,7 @@ mute-stream@0.0.7:
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
   integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
 
-mute-stream@0.0.8, mute-stream@~0.0.4:
+mute-stream@~0.0.4:
   version "0.0.8"
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
   integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
@@ -11353,11 +12015,16 @@ mz@^2.4.0:
     object-assign "^4.0.1"
     thenify-all "^1.0.0"
 
-nan@^2.12.1, nan@^2.13.2:
+nan@^2.12.1:
   version "2.15.0"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
   integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
 
+nanoclone@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4"
+  integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==
+
 nanoid@^3.1.30:
   version "3.1.30"
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362"
@@ -11422,14 +12089,6 @@ no-case@^2.2.0:
   dependencies:
     lower-case "^1.1.1"
 
-no-case@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
-  integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
-  dependencies:
-    lower-case "^2.0.2"
-    tslib "^2.0.3"
-
 nocache@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f"
@@ -11450,15 +12109,6 @@ node-ensure@^0.0.0:
   resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7"
   integrity sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=
 
-node-fetch-npm@^2.0.2:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
-  integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==
-  dependencies:
-    encoding "^0.1.11"
-    json-parse-better-errors "^1.0.0"
-    safe-buffer "^5.1.1"
-
 node-fetch@2.6.0:
   version "2.6.0"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
@@ -11469,14 +12119,6 @@ node-fetch@2.6.1:
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
   integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
 
-node-fetch@^1.0.1:
-  version "1.7.3"
-  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
-  integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
-  dependencies:
-    encoding "^0.1.11"
-    is-stream "^1.0.1"
-
 node-fetch@^2.0.0, node-fetch@^2.6.0, node-fetch@^2.6.1:
   version "2.6.6"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
@@ -11494,28 +12136,10 @@ node-forge@^0.8.5:
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.5.tgz#57906f07614dc72762c84cef442f427c0e1b86ee"
   integrity sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==
 
-node-forge@^0.9.0:
-  version "0.9.2"
-  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.2.tgz#b35a44c28889b2ea55cabf8c79e3563f9676190a"
-  integrity sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==
-
-node-gyp@^3.8.0:
-  version "3.8.0"
-  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
-  integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
-  dependencies:
-    fstream "^1.0.0"
-    glob "^7.0.3"
-    graceful-fs "^4.1.2"
-    mkdirp "^0.5.0"
-    nopt "2 || 3"
-    npmlog "0 || 1 || 2 || 3 || 4"
-    osenv "0"
-    request "^2.87.0"
-    rimraf "2"
-    semver "~5.3.0"
-    tar "^2.0.0"
-    which "1"
+node-forge@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+  integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
 
 node-int64@^0.4.0:
   version "0.4.0"
@@ -11584,7 +12208,7 @@ node-notifier@^8.0.0:
     uuid "^8.3.0"
     which "^2.0.2"
 
-node-polyglot@^2.2.2, node-polyglot@^2.4.0:
+node-polyglot@2.4.2, node-polyglot@^2.2.2, node-polyglot@^2.4.0:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/node-polyglot/-/node-polyglot-2.4.2.tgz#e4876e6710b70dc00b1351a9a68de4af47a5d61d"
   integrity sha512-AgTVpQ32BQ5XPI+tFHJ9bCYxWwSLvtmEodX8ooftFhEuyCgBG6ijWulIVb7pH3THigtgvc9uLiPn0IO51KHpkg==
@@ -11600,35 +12224,10 @@ node-releases@^2.0.1:
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
   integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
 
-node-sass@^4.14.0:
-  version "4.14.1"
-  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5"
-  integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==
-  dependencies:
-    async-foreach "^0.1.3"
-    chalk "^1.1.1"
-    cross-spawn "^3.0.0"
-    gaze "^1.0.0"
-    get-stdin "^4.0.1"
-    glob "^7.0.3"
-    in-publish "^2.0.0"
-    lodash "^4.17.15"
-    meow "^3.7.0"
-    mkdirp "^0.5.1"
-    nan "^2.13.2"
-    node-gyp "^3.8.0"
-    npmlog "^4.0.0"
-    request "^2.88.0"
-    sass-graph "2.2.5"
-    stdout-stream "^1.4.0"
-    "true-case-path" "^1.0.2"
-
-"nopt@2 || 3":
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
-  integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
-  dependencies:
-    abbrev "1"
+node-releases@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666"
+  integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==
 
 nopt@^5.0.0:
   version "5.0.0"
@@ -11637,12 +12236,7 @@ nopt@^5.0.0:
   dependencies:
     abbrev "1"
 
-normalize-git-url@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
-  integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
   integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -11662,7 +12256,7 @@ normalize-package-data@^3.0.0:
     semver "^7.3.4"
     validate-npm-package-license "^3.0.1"
 
-normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
+normalize-path@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
   integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
@@ -11679,15 +12273,10 @@ normalize-range@^0.1.2:
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
   integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
 
-normalize-scroll-left@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.2.1.tgz#978fdd04bfeb2d3543e16696814285557c127502"
-  integrity sha512-YanMJCtsykxVQuWiwQR531bbyPtMt/jpUKy2XcVVe/oHiDgYme0NmuEZfceLeZhFbrQtO/GS/9KvWbSfDGRblA==
-
-normalize.css@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-7.0.0.tgz#abfb1dd82470674e0322b53ceb1aaf412938e4bf"
-  integrity sha1-q/sd2CRwZ04DIrU86xqvQSk45L8=
+normalize.css@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
+  integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
 
 npm-run-all@^4.1.5:
   version "4.1.5"
@@ -11718,16 +12307,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
   dependencies:
     path-key "^3.0.0"
 
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
-  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
-  dependencies:
-    are-we-there-yet "~1.1.2"
-    console-control-strings "~1.1.0"
-    gauge "~2.7.3"
-    set-blocking "~2.0.0"
-
 nth-check@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
@@ -11742,6 +12321,13 @@ nth-check@^2.0.0:
   dependencies:
     boolbase "^1.0.0"
 
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
 null-check@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
@@ -11799,16 +12385,21 @@ object-hash@^1.1.4:
   resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
   integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
 
-object-hash@^2.0.3:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
-  integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
+object-hash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+  integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
 
 object-inspect@^1.11.0, object-inspect@^1.7.0, object-inspect@^1.9.0:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
   integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
 
+object-inspect@^1.12.0:
+  version "1.12.2"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
+  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
+
 object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
@@ -11839,7 +12430,7 @@ object.assign@^4.1.0, object.assign@^4.1.2:
     has-symbols "^1.0.1"
     object-keys "^1.1.1"
 
-object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.4:
+object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.4, object.entries@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
   integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
@@ -11848,7 +12439,7 @@ object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entr
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-object.fromentries@^2.0.0, object.fromentries@^2.0.2, object.fromentries@^2.0.3:
+object.fromentries@^2.0.0, object.fromentries@^2.0.2, object.fromentries@^2.0.3, object.fromentries@^2.0.5:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
   integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
@@ -11866,13 +12457,13 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-object.omit@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
-  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+object.hasown@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
+  integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
   dependencies:
-    for-own "^0.1.4"
-    is-extendable "^0.1.1"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
 
 object.pick@^1.3.0:
   version "1.3.0"
@@ -11881,7 +12472,7 @@ object.pick@^1.3.0:
   dependencies:
     isobject "^3.0.1"
 
-object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.2:
+object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.2, object.values@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
   integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
@@ -11950,11 +12541,6 @@ open@8.2.1:
     is-docker "^2.1.1"
     is-wsl "^2.2.0"
 
-opencollective-postinstall@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
-  integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
-
 opener@^1.5.1:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -11967,7 +12553,7 @@ opn@^5.5.0:
   dependencies:
     is-wsl "^1.1.0"
 
-optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3:
+optionator@^0.8.1, optionator@^0.8.2:
   version "0.8.3"
   resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
   integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
@@ -11979,6 +12565,18 @@ optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3:
     type-check "~0.3.2"
     word-wrap "~1.2.3"
 
+optionator@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+  dependencies:
+    deep-is "^0.1.3"
+    fast-levenshtein "^2.0.6"
+    levn "^0.4.1"
+    prelude-ls "^1.2.1"
+    type-check "^0.4.0"
+    word-wrap "^1.2.3"
+
 original@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@@ -12003,16 +12601,7 @@ os-locale@^1.4.0:
   dependencies:
     lcid "^1.0.0"
 
-os-locale@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
-  integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
-  dependencies:
-    execa "^0.7.0"
-    lcid "^1.0.0"
-    mem "^1.1.0"
-
-os-locale@^3.0.0, os-locale@^3.1.0:
+os-locale@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
   integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
@@ -12021,19 +12610,11 @@ os-locale@^3.0.0, os-locale@^3.1.0:
     lcid "^2.0.0"
     mem "^4.0.0"
 
-os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+os-tmpdir@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
   integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 
-osenv@0:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
-  integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.0"
-
 p-defer@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
@@ -12103,11 +12684,6 @@ p-locate@^5.0.0:
   dependencies:
     p-limit "^3.0.2"
 
-p-map@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
-  integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
-
 p-map@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
@@ -12163,14 +12739,6 @@ param-case@2.1.x, param-case@^2.1.1:
   dependencies:
     no-case "^2.2.0"
 
-param-case@^3.0.3:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
-  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
-  dependencies:
-    dot-case "^3.0.4"
-    tslib "^2.0.3"
-
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -12201,16 +12769,6 @@ parse-entities@^1.1.0:
     is-decimal "^1.0.0"
     is-hexadecimal "^1.0.0"
 
-parse-glob@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
-  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
-  dependencies:
-    glob-base "^0.3.0"
-    is-dotfile "^1.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.0"
-
 parse-json@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
@@ -12253,13 +12811,6 @@ parse5@6.0.1, parse5@^6.0.1:
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
   integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
 
-parse5@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
-  integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
-  dependencies:
-    "@types/node" "*"
-
 parse5@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
@@ -12270,14 +12821,6 @@ parseurl@~1.3.2, parseurl@~1.3.3:
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
   integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
 
-pascal-case@^3.1.2:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
-  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
-  dependencies:
-    no-case "^3.0.4"
-    tslib "^2.0.3"
-
 pascalcase@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
@@ -12310,11 +12853,6 @@ path-exists@^4.0.0:
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
   integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
 
-path-is-absolute@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.0.tgz#263dada66ab3f2fb10bf7f9d24dd8f3e570ef912"
-  integrity sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=
-
 path-is-absolute@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -12335,7 +12873,7 @@ path-key@^3.0.0, path-key@^3.1.0:
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
 
-path-parse@^1.0.6:
+path-parse@^1.0.6, path-parse@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
@@ -12502,13 +13040,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
   dependencies:
     find-up "^4.0.0"
 
-pkg-dir@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760"
-  integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==
-  dependencies:
-    find-up "^5.0.0"
-
 pkginfo@0.3.x:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21"
@@ -12519,22 +13050,15 @@ pkginfo@0.x.x:
   resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
   integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
 
-please-upgrade-node@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
-  integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
-  dependencies:
-    semver-compare "^1.0.0"
-
 pluralize@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
   integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
 
-popper.js@^1.14.1:
-  version "1.16.1"
-  resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
-  integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
+popper.js@1.16.1-lts:
+  version "1.16.1-lts"
+  resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
+  integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
 
 portfinder@^1.0.25:
   version "1.0.28"
@@ -12550,6 +13074,11 @@ posix-character-classes@^0.1.0:
   resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
   integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
 
+post-me@0.4.5:
+  version "0.4.5"
+  resolved "https://registry.yarnpkg.com/post-me/-/post-me-0.4.5.tgz#6171b721c7b86230c51cfbe48ddea047ef8831ce"
+  integrity sha512-XgPdktF/2M5jglgVDULr9NUb/QNv3bY3g6RG22iTb5MIMtB07/5FJB5fbVmu5Eaopowc6uZx7K3e7x1shPwnXw==
+
 postcss-assets-webpack-plugin@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/postcss-assets-webpack-plugin/-/postcss-assets-webpack-plugin-3.0.0.tgz#cb15a748cc23a48b956e887d9a2b954c756a289c"
@@ -12639,6 +13168,14 @@ postcss-selector-parser@^6.0.0:
     cssesc "^3.0.0"
     util-deprecate "^1.0.2"
 
+postcss-selector-parser@^6.0.9:
+  version "6.0.10"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
+  integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
 postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
@@ -12834,34 +13371,35 @@ pouchdb-utils@7.0.0:
     pouchdb-md5 "7.0.0"
     uuid "3.2.1"
 
+prelude-ls@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
 prelude-ls@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
   integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
-preserve@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-
-prettier-eslint@^9.0.1:
-  version "9.0.2"
-  resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-9.0.2.tgz#66c7b5d2a35712a104f6b7ce31f470ea9f8cb6a6"
-  integrity sha512-u6EQqxUhaGfra9gy9shcR7MT7r/2twwEfRGy1tfzyaJvLQwSg34M9IU5HuF7FsLW2QUgr5VIUc56EPWibw1pdw==
+prettier-eslint@^15.0.1:
+  version "15.0.1"
+  resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-15.0.1.tgz#2543a43e9acec2a9767ad6458165ce81f353db9c"
+  integrity sha512-mGOWVHixSvpZWARqSDXbdtTL54mMBxc5oQYQ6RAqy8jecuNJBgN3t9E5a81G66F8x8fsKNiR1HWaBV66MJDOpg==
   dependencies:
-    "@typescript-eslint/parser" "^1.10.2"
+    "@types/eslint" "^8.4.2"
+    "@types/prettier" "^2.6.0"
+    "@typescript-eslint/parser" "^5.10.0"
     common-tags "^1.4.0"
-    core-js "^3.1.4"
     dlv "^1.1.0"
-    eslint "^5.0.0"
+    eslint "^8.7.0"
     indent-string "^4.0.0"
     lodash.merge "^4.6.0"
     loglevel-colored-level-prefix "^1.0.0"
-    prettier "^1.7.0"
+    prettier "^2.5.1"
     pretty-format "^23.0.1"
     require-relative "^0.8.7"
-    typescript "^3.2.1"
-    vue-eslint-parser "^2.0.2"
+    typescript "^4.5.4"
+    vue-eslint-parser "^8.0.1"
 
 prettier-linter-helpers@^1.0.0:
   version "1.0.0"
@@ -12870,20 +13408,15 @@ prettier-linter-helpers@^1.0.0:
   dependencies:
     fast-diff "^1.1.2"
 
-prettier@1.16.4:
-  version "1.16.4"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
-  integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
-
 prettier@1.18.2:
   version "1.18.2"
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
   integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
 
-prettier@^1.19.1, prettier@^1.7.0:
-  version "1.19.1"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
-  integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
+prettier@^2.5.1, prettier@^2.6.2, prettier@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
+  integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
 
 pretty-error@^2.0.2:
   version "2.1.2"
@@ -12901,16 +13434,6 @@ pretty-format@^23.0.1:
     ansi-regex "^3.0.0"
     ansi-styles "^3.2.0"
 
-pretty-format@^24.9.0:
-  version "24.9.0"
-  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
-  integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
-  dependencies:
-    "@jest/types" "^24.9.0"
-    ansi-regex "^4.0.0"
-    ansi-styles "^3.2.0"
-    react-is "^16.8.4"
-
 pretty-format@^26.0.0, pretty-format@^26.6.2:
   version "26.6.2"
   resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
@@ -12921,6 +13444,16 @@ pretty-format@^26.0.0, pretty-format@^26.6.2:
     ansi-styles "^4.0.0"
     react-is "^17.0.1"
 
+pretty-format@^28.0.0, pretty-format@^28.1.1:
+  version "28.1.1"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb"
+  integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==
+  dependencies:
+    "@jest/schemas" "^28.0.2"
+    ansi-regex "^5.0.1"
+    ansi-styles "^5.0.0"
+    react-is "^18.0.0"
+
 pretty@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5"
@@ -12955,14 +13488,6 @@ promise-polyfill@^6.0.2:
   resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
   integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=
 
-promise-retry@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
-  integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=
-  dependencies:
-    err-code "^1.0.0"
-    retry "^0.10.0"
-
 prompt@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.0.0.tgz#8e57123c396ab988897fb327fd3aedc3e735e4fe"
@@ -12975,6 +13500,17 @@ prompt@1.0.0:
     utile "0.3.x"
     winston "2.1.x"
 
+prompt@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.3.0.tgz#b1f6d47cb1b6beed4f0660b470f5d3ec157ad7ce"
+  integrity sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==
+  dependencies:
+    "@colors/colors" "1.5.0"
+    async "3.2.3"
+    read "1.0.x"
+    revalidator "0.1.x"
+    winston "2.x"
+
 prompts@^2.0.1:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -13001,11 +13537,25 @@ prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8,
     object-assign "^4.1.1"
     react-is "^16.8.1"
 
+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==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
 propagate@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45"
   integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==
 
+property-expr@^2.0.4:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4"
+  integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==
+
 proto-list@~1.2.1:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
@@ -13141,7 +13691,7 @@ quick-lru@^4.0.1:
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
   integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
 
-raf@^3.4.0, raf@^3.4.1:
+raf@^3.4.1:
   version "3.4.1"
   resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
   integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
@@ -13166,15 +13716,6 @@ randexp@0.4.6:
     discontinuous-range "1.0.0"
     ret "~0.1.10"
 
-randomatic@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
-  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
-  dependencies:
-    is-number "^4.0.0"
-    kind-of "^6.0.0"
-    math-random "^1.0.1"
-
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -13244,6 +13785,11 @@ react-autowhatever@^10.1.2:
     react-themeable "^1.1.0"
     section-iterator "^2.0.0"
 
+react-chartjs-2@4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.1.0.tgz#2a123df16d3a987c54eb4e810ed766d3c03adf8d"
+  integrity sha512-AsUihxEp8Jm1oBhbEovE+w50m9PVNhz1sfwEIT4hZduRC0m14gHWHd0cUaxkFDb8HNkdMIGzsNlmVqKiOpU74g==
+
 react-dom@16.14.0:
   version "16.14.0"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
@@ -13282,27 +13828,6 @@ react-final-form@^3.7.0:
   dependencies:
     "@babel/runtime" "^7.1.2"
 
-react-hot-loader@^4.3.11:
-  version "4.13.0"
-  resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202"
-  integrity sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==
-  dependencies:
-    fast-levenshtein "^2.0.6"
-    global "^4.3.0"
-    hoist-non-react-statics "^3.3.0"
-    loader-utils "^1.1.0"
-    prop-types "^15.6.1"
-    react-lifecycles-compat "^3.0.4"
-    shallowequal "^1.1.0"
-    source-map "^0.7.3"
-
-react-input-autosize@^2.2.1:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2"
-  integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==
-  dependencies:
-    prop-types "^15.5.8"
-
 react-input-autosize@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-3.0.0.tgz#6b5898c790d4478d69420b55441fcc31d5c50a85"
@@ -13310,7 +13835,7 @@ react-input-autosize@^3.0.0:
   dependencies:
     prop-types "^15.5.8"
 
-react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6:
   version "16.13.1"
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -13320,7 +13845,17 @@ react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-i
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
   integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
 
-react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
+react-is@^18.0.0:
+  version "18.2.0"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+  integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-layout-effect@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/react-layout-effect/-/react-layout-effect-1.0.5.tgz#0dc4e24452aee5de66c93c166f0ec512dfb1be80"
+  integrity sha512-zdRXHuch+OBHU6bvjTelOGUCM+UDr/iCY+c0wXLEAc+G4/FlcJruD/hUOzlKH5XgO90Y/BUJPNhI/g9kl+VAsA==
+
+react-lifecycles-compat@^3.0.0:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
   integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
@@ -13411,25 +13946,25 @@ react-remove-scroll@^2.4.0:
     use-callback-ref "^1.2.3"
     use-sidecar "^1.0.1"
 
-react-router-dom@5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662"
-  integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==
+react-router-dom@5.3.3:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199"
+  integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng==
   dependencies:
-    "@babel/runtime" "^7.1.2"
+    "@babel/runtime" "^7.12.13"
     history "^4.9.0"
     loose-envify "^1.3.1"
     prop-types "^15.6.2"
-    react-router "5.2.0"
+    react-router "5.3.3"
     tiny-invariant "^1.0.2"
     tiny-warning "^1.0.0"
 
-react-router@5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293"
-  integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==
+react-router@5.3.3:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288"
+  integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w==
   dependencies:
-    "@babel/runtime" "^7.1.2"
+    "@babel/runtime" "^7.12.13"
     history "^4.9.0"
     hoist-non-react-statics "^3.1.0"
     loose-envify "^1.3.1"
@@ -13440,19 +13975,6 @@ react-router@5.2.0:
     tiny-invariant "^1.0.2"
     tiny-warning "^1.0.0"
 
-react-select@2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/react-select/-/react-select-2.2.0.tgz#67c8b5c2dcb8df0384f2a103efe952570f5d6b93"
-  integrity sha512-FOnsm/zrJ2pZvYsEfs58Xvru0SHL1jXAZTCFTWcOxmQSnRKgYuXUDFdpDiET90GLtJEF+t6BaZeD43bUH6/NZQ==
-  dependencies:
-    classnames "^2.2.5"
-    create-emotion "^10.0.4"
-    memoize-one "^4.0.0"
-    prop-types "^15.6.0"
-    raf "^3.4.0"
-    react-input-autosize "^2.2.1"
-    react-transition-group "^2.2.1"
-
 react-select@^4.3.0:
   version "4.3.1"
   resolved "https://registry.yarnpkg.com/react-select/-/react-select-4.3.1.tgz#389fc07c9bc7cf7d3c377b7a05ea18cd7399cb81"
@@ -13466,6 +13988,19 @@ react-select@^4.3.0:
     react-input-autosize "^3.0.0"
     react-transition-group "^4.3.0"
 
+react-spring@9.0.0-rc.3:
+  version "9.0.0-rc.3"
+  resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.0.0-rc.3.tgz#0ad7b1e803f4385b7cbb44fff6d26f5be78884d6"
+  integrity sha512-VX5Gi6svgRzjGvJ7qVRQBhFN+O2IuPvkSWepIg838LNIMqlc42xdIYtoGJYSqYjNO3IocSfkHlh49WVw6hHMUg==
+  dependencies:
+    "@babel/runtime" "^7.3.1"
+    "@react-spring/core" "9.0.0-rc.3"
+    "@react-spring/konva" "9.0.0-rc.3"
+    "@react-spring/native" "9.0.0-rc.3"
+    "@react-spring/three" "9.0.0-rc.3"
+    "@react-spring/web" "9.0.0-rc.3"
+    "@react-spring/zdog" "9.0.0-rc.3"
+
 react-style-singleton@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66"
@@ -13475,7 +14010,7 @@ react-style-singleton@^2.1.0:
     invariant "^2.2.4"
     tslib "^1.0.0"
 
-react-swipeable-views-core@^0.13.1, react-swipeable-views-core@^0.13.7:
+react-swipeable-views-core@^0.13.7:
   version "0.13.7"
   resolved "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.13.7.tgz#c082b553f26e83fd20fc17f934200eb717023c8a"
   integrity sha512-ekn9oDYfBt0oqJSGGwLEhKvn+QaqMGTy//9dURTLf+vp7W5j6GvmKryYdnwJCDITaPFI2hujXV4CH9krhvaE5w==
@@ -13483,7 +14018,15 @@ react-swipeable-views-core@^0.13.1, react-swipeable-views-core@^0.13.7:
     "@babel/runtime" "7.0.0"
     warning "^4.0.1"
 
-react-swipeable-views-utils@^0.13.3, react-swipeable-views-utils@^0.13.4, react-swipeable-views-utils@^0.13.9:
+react-swipeable-views-core@^0.14.0:
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/react-swipeable-views-core/-/react-swipeable-views-core-0.14.0.tgz#6ac443a7cc7bc5ea022fbd549292bb5fff361cce"
+  integrity sha512-0W/e9uPweNEOSPjmYtuKSC/SvKKg1sfo+WtPdnxeLF3t2L82h7jjszuOHz9C23fzkvLfdgkaOmcbAxE9w2GEjA==
+  dependencies:
+    "@babel/runtime" "7.0.0"
+    warning "^4.0.1"
+
+react-swipeable-views-utils@^0.13.9:
   version "0.13.9"
   resolved "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.13.9.tgz#a66e98f2f4502d8b00182901f80d13b2f903e10f"
   integrity sha512-QLGxRKrbJCbWz94vkWLzb1Daaa2Y/TZKmsNKQ6WSNrS+chrlfZ3z9tqZ7YUJlW6pRWp3QZdLSY3UE3cN0TXXmw==
@@ -13495,28 +14038,27 @@ react-swipeable-views-utils@^0.13.3, react-swipeable-views-utils@^0.13.4, react-
     react-swipeable-views-core "^0.13.7"
     shallow-equal "^1.2.1"
 
-react-swipeable-views@0.13.3:
-  version "0.13.3"
-  resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.13.3.tgz#2ad886767c6b2de88000606a14bedde12156e6d0"
-  integrity sha512-LBHRA5ZouipmoLLwi0cqB8qc7NHLskbXmT1I+ZztC9JfmgKrfichw5R+7q4igQ+5VbaP6jL1vn8BtHW96WYNFQ==
+react-swipeable-views-utils@^0.14.0:
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/react-swipeable-views-utils/-/react-swipeable-views-utils-0.14.0.tgz#6b76e251906747482730c22002fe47ab1014ba32"
+  integrity sha512-W+fXBOsDqgFK1/g7MzRMVcDurp3LqO3ksC8UgInh2P/tKgb5DusuuB1geKHFc6o1wKl+4oyER4Zh3Lxmr8xbXA==
   dependencies:
     "@babel/runtime" "7.0.0"
-    dom-helpers "^3.2.1"
-    prop-types "^15.5.4"
-    react-swipeable-views-core "^0.13.1"
-    react-swipeable-views-utils "^0.13.3"
-    warning "^4.0.1"
+    keycode "^2.1.7"
+    prop-types "^15.6.0"
+    react-event-listener "^0.6.0"
+    react-swipeable-views-core "^0.14.0"
+    shallow-equal "^1.2.1"
 
-react-swipeable-views@0.13.4:
-  version "0.13.4"
-  resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.13.4.tgz#ebbe50a8592b185dbedf9e0060eaee09cf6b2c67"
-  integrity sha512-Qwmaj8LASEgxp3i4FBEgs1LM/Yqk7mFRp0fRgXH515NIEePUcjrrkuwvvmvwNQLDbN6PNv4QAuosEaTRyjEOUA==
+react-swipeable-views@0.14.0:
+  version "0.14.0"
+  resolved "https://registry.yarnpkg.com/react-swipeable-views/-/react-swipeable-views-0.14.0.tgz#149c0df3d92220cc89e3f6d5c04a78dfe46f9b54"
+  integrity sha512-wrTT6bi2nC3JbmyNAsPXffUXLn0DVT9SbbcFr36gKpbaCgEp7rX/OFxsu5hPc/NBsUhHyoSRGvwqJNNrWTwCww==
   dependencies:
     "@babel/runtime" "7.0.0"
-    dom-helpers "^5.1.3"
     prop-types "^15.5.4"
-    react-swipeable-views-core "^0.13.1"
-    react-swipeable-views-utils "^0.13.4"
+    react-swipeable-views-core "^0.14.0"
+    react-swipeable-views-utils "^0.14.0"
     warning "^4.0.1"
 
 react-swipeable-views@^0.13.3:
@@ -13530,17 +14072,7 @@ react-swipeable-views@^0.13.3:
     react-swipeable-views-utils "^0.13.9"
     warning "^4.0.1"
 
-react-test-renderer@16.8.6:
-  version "16.8.6"
-  resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.6.tgz#188d8029b8c39c786f998aa3efd3ffe7642d5ba1"
-  integrity sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==
-  dependencies:
-    object-assign "^4.1.1"
-    prop-types "^15.6.2"
-    react-is "^16.8.6"
-    scheduler "^0.13.6"
-
-react-test-renderer@^16.0.0-0:
+react-test-renderer@16.14.0, react-test-renderer@^16.0.0-0:
   version "16.14.0"
   resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae"
   integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==
@@ -13557,17 +14089,7 @@ react-themeable@^1.1.0:
   dependencies:
     object-assign "^3.0.0"
 
-react-transition-group@^2.2.1:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
-  integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
-  dependencies:
-    dom-helpers "^3.4.0"
-    loose-envify "^1.4.0"
-    prop-types "^15.6.2"
-    react-lifecycles-compat "^3.0.4"
-
-react-transition-group@^4.3.0:
+react-transition-group@^4.3.0, react-transition-group@^4.4.0:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
   integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
@@ -13577,6 +14099,18 @@ react-transition-group@^4.3.0:
     loose-envify "^1.4.0"
     prop-types "^15.6.2"
 
+react-use-gesture@^7.0.8:
+  version "7.0.16"
+  resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-7.0.16.tgz#501985261ef9c815a377b6ff9be6df5a85fbb54f"
+  integrity sha512-gwgX+E+WQG0T1uFVl3z8j3ZwH3QQGIgVl7VtQEC2m0IscSs668sSps4Ss3CFp3Vns8xx0j9TVK4aBXH6+YrpEg==
+
+react-use-measure@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba"
+  integrity sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==
+  dependencies:
+    debounce "^1.2.1"
+
 react-zlib-js@^1.0.4:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/react-zlib-js/-/react-zlib-js-1.0.5.tgz#7bb433e1a4ae53a8e6f361b3d36166baf5bbc60f"
@@ -13651,7 +14185,7 @@ read@1.0.x:
   dependencies:
     mute-stream "~0.0.4"
 
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
   version "2.3.7"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
   integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -13680,7 +14214,7 @@ readable-web-to-node-stream@^3.0.0:
   dependencies:
     readable-stream "^3.6.0"
 
-readdirp@^2.0.0, readdirp@^2.2.1:
+readdirp@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
   integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
@@ -13696,14 +14230,6 @@ readdirp@^3.1.1, readdirp@~3.6.0:
   dependencies:
     picomatch "^2.2.1"
 
-redent@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
-  integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
-  dependencies:
-    indent-string "^2.1.0"
-    strip-indent "^1.0.1"
-
 redent@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -13717,10 +14243,10 @@ redux-devtools-extension@^2.13.8:
   resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7"
   integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==
 
-redux-mock-store@1.5.3:
-  version "1.5.3"
-  resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.3.tgz#1f10528949b7ce8056c2532624f7cafa98576c6d"
-  integrity sha512-ryhkkb/4D4CUGpAV2ln1GOY/uh51aczjcRz9k2L2bPx/Xja3c5pSGJJPyR25GNVRXtKIExScdAgFdiXp68GmJA==
+redux-mock-store@1.5.4:
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.4.tgz#90d02495fd918ddbaa96b83aef626287c9ab5872"
+  integrity sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==
   dependencies:
     lodash.isplainobject "^4.0.6"
 
@@ -13739,28 +14265,25 @@ redux-thunk@^2.3.0:
   resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.0.tgz#ac89e1d6b9bdb9ee49ce69a69071be41bbd82d67"
   integrity sha512-/y6ZKQNU/0u8Bm7ROLq9Pt/7lU93cT0IucYMrubo89ENjxPa7i8pqLKu6V4X7/TvYovQ6x01unTeyeZ9lgXiTA==
 
-"redux@3 || 4", redux@^4.0.0, redux@^4.0.5:
+"redux@3 || 4", redux@4.1.2, redux@^4.0.0, redux@^4.0.5:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104"
   integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==
   dependencies:
     "@babel/runtime" "^7.9.2"
 
-redux@3.7.2, redux@^3.7.2:
-  version "3.7.2"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
-  integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==
-  dependencies:
-    lodash "^4.2.1"
-    lodash-es "^4.2.1"
-    loose-envify "^1.1.0"
-    symbol-observable "^1.0.3"
-
 reflect.ownkeys@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460"
   integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=
 
+regenerate-unicode-properties@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
+  integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==
+  dependencies:
+    regenerate "^1.4.2"
+
 regenerate-unicode-properties@^9.0.0:
   version "9.0.0"
   resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
@@ -13800,12 +14323,12 @@ regenerator-transform@^0.14.2:
   dependencies:
     "@babel/runtime" "^7.8.4"
 
-regex-cache@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
-  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+regenerator-transform@^0.15.0:
+  version "0.15.0"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
+  integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==
   dependencies:
-    is-equal-shallow "^0.1.3"
+    "@babel/runtime" "^7.8.4"
 
 regex-not@^1.0.0, regex-not@^1.0.2:
   version "1.0.2"
@@ -13823,12 +14346,21 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
 
+regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+  integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    functions-have-names "^1.2.2"
+
 regexpp@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
   integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
 
-regexpp@^3.0.0:
+regexpp@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
   integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
@@ -13845,11 +14377,28 @@ regexpu-core@^4.7.1:
     unicode-match-property-ecmascript "^2.0.0"
     unicode-match-property-value-ecmascript "^2.0.0"
 
+regexpu-core@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3"
+  integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==
+  dependencies:
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^10.0.1"
+    regjsgen "^0.6.0"
+    regjsparser "^0.8.2"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.0.0"
+
 regjsgen@^0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
   integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
 
+regjsgen@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
+  integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
+
 regjsparser@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968"
@@ -13857,6 +14406,13 @@ regjsparser@^0.7.0:
   dependencies:
     jsesc "~0.5.0"
 
+regjsparser@^0.8.2:
+  version "0.8.4"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
+  integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==
+  dependencies:
+    jsesc "~0.5.0"
+
 relateurl@0.2.x, relateurl@^0.2.7:
   version "0.2.7"
   resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
@@ -13904,18 +14460,11 @@ repeat-element@^1.1.2:
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
   integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
 
-repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
+repeat-string@^1.5.4, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
   integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
 
-repeating@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
-  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
-  dependencies:
-    is-finite "^1.0.0"
-
 replace-ext@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
@@ -13971,7 +14520,7 @@ request@2.88.0:
     tunnel-agent "^0.6.0"
     uuid "^3.3.2"
 
-request@^2.87.0, request@^2.88.0, request@^2.88.2:
+request@^2.88.0, request@^2.88.2:
   version "2.88.2"
   resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
   integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
@@ -14074,7 +14623,7 @@ resolve-url@^0.2.1:
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
   integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
 
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0:
+resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1:
   version "1.20.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
   integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -14082,6 +14631,15 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.1
     is-core-module "^2.2.0"
     path-parse "^1.0.6"
 
+resolve@^2.0.0-next.3:
+  version "2.0.0-next.4"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
+  integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
+  dependencies:
+    is-core-module "^2.9.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
 restore-cursor@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -14103,11 +14661,6 @@ ret@~0.1.10:
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
   integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
 
-retry@^0.10.0:
-  version "0.10.1"
-  resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
-  integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
-
 retry@^0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
@@ -14128,13 +14681,6 @@ rfdc@^1.3.0:
   resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
   integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
 
-rimraf@2, rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
-  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
-  dependencies:
-    glob "^7.1.3"
-
 rimraf@2.6.3, rimraf@~2.6.2:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
@@ -14142,6 +14688,13 @@ rimraf@2.6.3, rimraf@~2.6.2:
   dependencies:
     glob "^7.1.3"
 
+rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
 rimraf@^3.0.0, rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -14157,6 +14710,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
     hash-base "^3.0.0"
     inherits "^2.0.1"
 
+rooks@^5.11.2:
+  version "5.11.2"
+  resolved "https://registry.yarnpkg.com/rooks/-/rooks-5.11.2.tgz#f7ba3a758c512c7cc807af38615f3052439578b8"
+  integrity sha512-kOVYjNW/0Emq9NN3DbmC41xcltK25gVV2PMGw+Et9vC5UiIKrwWYRYmMid2/WRGQ0oodOeksCkrqGwJcV2buuQ==
+  dependencies:
+    lodash.debounce "^4.0.8"
+    raf "^3.4.1"
+
 route-recognizer@^0.3.4:
   version "0.3.4"
   resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3"
@@ -14175,7 +14736,7 @@ rsvp@^4.8.4:
   resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
   integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
 
-run-async@^2.2.0, run-async@^2.4.0:
+run-async@^2.2.0:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
   integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
@@ -14199,7 +14760,7 @@ rw@1:
   resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
   integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
 
-rxjs@^6.4.0, rxjs@^6.6.0:
+rxjs@^6.4.0:
   version "6.6.7"
   resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
   integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
@@ -14230,7 +14791,7 @@ safe-regex@^1.1.0:
   dependencies:
     ret "~0.1.10"
 
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -14250,16 +14811,6 @@ sane@^4.0.3:
     minimist "^1.1.1"
     walker "~1.0.5"
 
-sass-graph@2.2.5:
-  version "2.2.5"
-  resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8"
-  integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==
-  dependencies:
-    glob "^7.0.0"
-    lodash "^4.0.0"
-    scss-tokenizer "^0.2.3"
-    yargs "^13.3.2"
-
 sass-loader@^8.0.0:
   version "8.0.2"
   resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d"
@@ -14271,6 +14822,15 @@ sass-loader@^8.0.0:
     schema-utils "^2.6.1"
     semver "^6.3.0"
 
+sass@^1.49.11:
+  version "1.53.0"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb"
+  integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==
+  dependencies:
+    chokidar ">=3.0.0 <4.0.0"
+    immutable "^4.0.0"
+    source-map-js ">=0.6.2 <2.0.0"
+
 sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -14283,14 +14843,6 @@ saxes@^5.0.1:
   dependencies:
     xmlchars "^2.2.0"
 
-scheduler@^0.13.6:
-  version "0.13.6"
-  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889"
-  integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==
-  dependencies:
-    loose-envify "^1.1.0"
-    object-assign "^4.1.1"
-
 scheduler@^0.19.1:
   version "0.19.1"
   resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
@@ -14341,14 +14893,6 @@ script-ext-html-webpack-plugin@2.1.3:
   dependencies:
     debug "^4.1.0"
 
-scss-tokenizer@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
-  integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
-  dependencies:
-    js-base64 "^2.1.8"
-    source-map "^0.4.2"
-
 section-iterator@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/section-iterator/-/section-iterator-2.0.0.tgz#bf444d7afeeb94ad43c39ad2fb26151627ccba2a"
@@ -14371,21 +14915,11 @@ semver-compare@^1.0.0:
   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
   integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
 
-semver-regex@^3.1.2:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3"
-  integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==
-
 "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
   version "5.7.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
-semver@5.5.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-  integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
-
 semver@7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -14403,10 +14937,12 @@ semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
   dependencies:
     lru-cache "^6.0.0"
 
-semver@~5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-  integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+semver@^7.3.7:
+  version "7.3.7"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+  dependencies:
+    lru-cache "^6.0.0"
 
 send@0.17.1:
   version "0.17.1"
@@ -14479,7 +15015,7 @@ set-blocking@^1.0.0:
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-1.0.0.tgz#cd5e5d938048df1ac92dfe92e1f16add656f5ec5"
   integrity sha1-zV5dk4BI3xrJLf6S4fFq3WVvXsU=
 
-set-blocking@^2.0.0, set-blocking@~2.0.0:
+set-blocking@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
   integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
@@ -14539,11 +15075,6 @@ shallow-equal@^1.0.0, shallow-equal@^1.2.1:
   resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
   integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
 
-shallowequal@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
-  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
-
 shebang-command@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -14667,11 +15198,6 @@ slugify@^1.3.4:
   resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.3.tgz#325aec50871acfb17976f2d3cb09ee1e7ab563be"
   integrity sha512-1MPyqnIhgiq+/0iDJyqSJHENdnH5MMIlgJIBxmkRMzTNKlS/QsN5dXsB+MdDq4E6w0g9jFA4XOTRkVDjDae/2w==
 
-smart-buffer@^4.1.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
-  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
-
 snapdragon-node@^2.0.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -14722,27 +15248,16 @@ sockjs@0.3.19:
     faye-websocket "^0.10.0"
     uuid "^3.0.1"
 
-socks-proxy-agent@^4.0.0:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
-  integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
-  dependencies:
-    agent-base "~4.2.1"
-    socks "~2.3.2"
-
-socks@~2.3.2:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3"
-  integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==
-  dependencies:
-    ip "1.1.5"
-    smart-buffer "^4.1.0"
-
 source-list-map@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
   integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
 
+"source-map-js@>=0.6.2 <2.0.0":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
 source-map-js@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf"
@@ -14772,13 +15287,6 @@ source-map-url@^0.4.0:
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
   integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
 
-source-map@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
-  integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
-  dependencies:
-    amdefine ">=0.0.4"
-
 source-map@^0.5.0, source-map@^0.5.6:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -14896,7 +15404,7 @@ ssri@^5.2.4:
   dependencies:
     safe-buffer "^5.1.1"
 
-ssri@^6.0.0, ssri@^6.0.1:
+ssri@^6.0.1:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
   integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
@@ -14920,6 +15428,13 @@ stack-trace@0.0.10, stack-trace@0.0.x:
   resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
   integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
 
+stack-utils@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b"
+  integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==
+  dependencies:
+    escape-string-regexp "^2.0.0"
+
 stack-utils@^2.0.2:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5"
@@ -14973,13 +15488,6 @@ static-extend@^0.1.1:
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
   integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
 
-stdout-stream@^1.4.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
-  integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
-  dependencies:
-    readable-stream "^2.0.1"
-
 stealthy-require@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
@@ -15051,15 +15559,6 @@ string-width@^1.0.1:
     is-fullwidth-code-point "^1.0.0"
     strip-ansi "^3.0.0"
 
-"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0:
-  version "4.2.3"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
-  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
-  dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.1"
-
 string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -15068,7 +15567,7 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^4.0.0"
 
-string-width@^3.0.0, string-width@^3.1.0:
+string-width@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
   integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
@@ -15077,6 +15576,15 @@ string-width@^3.0.0, string-width@^3.1.0:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^5.1.0"
 
+string-width@^4.1.0, string-width@^4.2.0:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
 string-width@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd"
@@ -15100,6 +15608,20 @@ string.prototype.matchall@^4.0.2:
     regexp.prototype.flags "^1.3.1"
     side-channel "^1.0.4"
 
+string.prototype.matchall@^4.0.7:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
+  integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    regexp.prototype.flags "^1.4.1"
+    side-channel "^1.0.4"
+
 string.prototype.padend@^3.0.0:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1"
@@ -15126,6 +15648,15 @@ string.prototype.trimend@^1.0.4:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
 
+string.prototype.trimend@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
+  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
 string.prototype.trimstart@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
@@ -15134,6 +15665,15 @@ string.prototype.trimstart@^1.0.4:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
 
+string.prototype.trimstart@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
+  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
 string_decoder@^1.0.0, string_decoder@^1.1.1:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -15172,7 +15712,7 @@ strip-ansi@^4.0.0:
   dependencies:
     ansi-regex "^3.0.0"
 
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+strip-ansi@^5.1.0:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
   integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
@@ -15220,13 +15760,6 @@ strip-final-newline@^2.0.0:
   resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
   integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
 
-strip-indent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
-  integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
-  dependencies:
-    get-stdin "^4.0.1"
-
 strip-indent@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
@@ -15239,7 +15772,7 @@ strip-json-comments@2.0.1, strip-json-comments@^2.0.1:
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
   integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
 
-strip-json-comments@3.1.1, strip-json-comments@^3.0.1, strip-json-comments@^3.1.1:
+strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -15260,23 +15793,6 @@ style-loader@0.23.1:
     loader-utils "^1.1.0"
     schema-utils "^1.0.0"
 
-stylint@1.5.9:
-  version "1.5.9"
-  resolved "https://registry.yarnpkg.com/stylint/-/stylint-1.5.9.tgz#29f4dc129fa1ca22150cd867223cee2bed5ff6a2"
-  integrity sha1-KfTcEp+hyiIVDNhnIjzuK+1f9qI=
-  dependencies:
-    async "1.5.2"
-    chalk "1.1.3"
-    chokidar "1.5.2"
-    columnify "1.5.4"
-    glob "7.0.4"
-    lodash.defaults "4.0.1"
-    path-is-absolute "1.0.0"
-    stampit "1.2.0"
-    strip-json-comments "2.0.1"
-    user-home "2.0.0"
-    yargs "4.7.1"
-
 stylint@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/stylint/-/stylint-2.0.0.tgz#7e5ec8158a38604dd68caa4f872058497696412c"
@@ -15367,6 +15883,11 @@ supports-hyperlinks@^2.0.0:
     has-flag "^4.0.0"
     supports-color "^7.0.0"
 
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
 svg-baker-runtime@^1.4.5:
   version "1.4.7"
   resolved "https://registry.yarnpkg.com/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz#f4720637f5b6202eef6378d81f1fead0815f8a4e"
@@ -15437,11 +15958,6 @@ sweetalert@^2.1.2:
     es6-object-assign "^1.1.0"
     promise-polyfill "^6.0.2"
 
-symbol-observable@^1.0.3:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
-  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-
 symbol-tree@^3.2.4:
   version "3.2.4"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -15480,16 +15996,7 @@ tar@4.4.13:
     safe-buffer "^5.1.2"
     yallist "^3.0.3"
 
-tar@^2.0.0:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
-  integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
-  dependencies:
-    block-stream "*"
-    fstream "^1.0.12"
-    inherits "2"
-
-tar@^6.0.2:
+tar@^6.0.2, tar@^6.1.11:
   version "6.1.11"
   resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
   integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
@@ -15524,7 +16031,7 @@ terser-webpack-plugin@^1.4.3:
     webpack-sources "^1.4.0"
     worker-farm "^1.7.0"
 
-terser@^4.1.2, terser@^4.6.3:
+terser@^4.1.2:
   version "4.8.0"
   resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
   integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
@@ -15714,6 +16221,11 @@ toposort@^1.0.0:
   resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
   integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
 
+toposort@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+  integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==
+
 tough-cookie@^2.3.1, tough-cookie@^2.3.3, tough-cookie@~2.5.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@@ -15756,11 +16268,6 @@ traverse@^0.6.6:
   resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
   integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
 
-trim-newlines@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-  integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
-
 trim-newlines@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
@@ -15781,24 +16288,17 @@ trough@^1.0.0:
   resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
   integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
 
-"true-case-path@^1.0.2":
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
-  integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
-  dependencies:
-    glob "^7.1.2"
-
 tryer@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
   integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
 
-tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
+tslib@^1.0.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
   version "1.14.1"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
-tslib@^2.0.3, tslib@^2.2.0:
+tslib@^2.2.0:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
   integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
@@ -15808,7 +16308,7 @@ tslib@~2.1.0:
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
   integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
 
-tsutils@^3.17.1:
+tsutils@^3.21.0:
   version "3.21.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
   integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
@@ -15832,6 +16332,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
   integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
 
+type-check@^0.4.0, type-check@~0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+  dependencies:
+    prelude-ls "^1.2.1"
+
 type-check@~0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -15849,6 +16356,11 @@ type-fest@^0.18.0:
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
   integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
 
+type-fest@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
 type-fest@^0.21.3:
   version "0.21.3"
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -15884,10 +16396,10 @@ typedarray@^0.0.6:
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
   integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
 
-typescript@^3.2.1, typescript@^3.7.3:
-  version "3.9.10"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
-  integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
+typescript@^4.0.0, typescript@^4.5.4, typescript@^4.6.3:
+  version "4.7.4"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235"
+  integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
 
 typescript@^4.3.5:
   version "4.5.2"
@@ -15932,6 +16444,16 @@ unbox-primitive@^1.0.1:
     has-symbols "^1.0.2"
     which-boxed-primitive "^1.0.2"
 
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+  dependencies:
+    call-bind "^1.0.2"
+    has-bigints "^1.0.2"
+    has-symbols "^1.0.3"
+    which-boxed-primitive "^1.0.2"
+
 unherit@^1.0.4:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
@@ -16068,6 +16590,14 @@ upath@^1.1.1:
   resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
   integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
 
+update-browserslist-db@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824"
+  integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==
+  dependencies:
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
+
 upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -16128,6 +16658,11 @@ use-callback-ref@^1.2.3:
   resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5"
   integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==
 
+use-memo-one@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.2.tgz#0c8203a329f76e040047a35a1197defe342fab20"
+  integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==
+
 use-sidecar@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b"
@@ -16285,6 +16820,15 @@ verror@1.10.0:
     core-util-is "1.0.2"
     extsprintf "^1.2.0"
 
+verror@^1.10.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+  integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
 vfile-location@^2.0.0:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
@@ -16312,18 +16856,6 @@ vm-browserify@^1.0.1:
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
   integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
 
-vue-eslint-parser@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1"
-  integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==
-  dependencies:
-    debug "^3.1.0"
-    eslint-scope "^3.7.1"
-    eslint-visitor-keys "^1.0.0"
-    espree "^3.5.2"
-    esquery "^1.0.0"
-    lodash "^4.17.4"
-
 vue-eslint-parser@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1"
@@ -16336,6 +16868,19 @@ vue-eslint-parser@^5.0.0:
     esquery "^1.0.1"
     lodash "^4.17.11"
 
+vue-eslint-parser@^8.0.1:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"
+  integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==
+  dependencies:
+    debug "^4.3.2"
+    eslint-scope "^7.0.0"
+    eslint-visitor-keys "^3.1.0"
+    espree "^9.0.0"
+    esquery "^1.4.0"
+    lodash "^4.17.21"
+    semver "^7.3.5"
+
 vuvuzela@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b"
@@ -16420,10 +16965,10 @@ web-resource-inliner@^5.0.0:
     node-fetch "^2.6.0"
     valid-data-url "^3.0.0"
 
-webextension-polyfill@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz#1afd925f3274a0d4848083579b9c0b649a5c6763"
-  integrity sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg==
+webextension-polyfill@^0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.9.0.tgz#de6c1941d0ef1b0858b20e9c7b46bbc042c5a960"
+  integrity sha512-LTtHb0yR49xa9irkstDxba4GATDAcDw3ncnFH9RImoFwDlW47U95ME5sn5IiQX2ghfaECaf6xyXM8yvClIBkkw==
 
 webidl-conversions@^3.0.0:
   version "3.0.1"
@@ -16582,11 +17127,6 @@ whatwg-encoding@^1.0.5:
   dependencies:
     iconv-lite "0.4.24"
 
-whatwg-fetch@>=0.10.0:
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
-  integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-
 whatwg-mimetype@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
@@ -16630,12 +17170,7 @@ which-module@^2.0.0:
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
   integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
 
-which-pm-runs@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
-  integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
-
-which@1, which@^1.2.9:
+which@^1.2.9:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -16649,13 +17184,6 @@ which@^2.0.1, which@^2.0.2:
   dependencies:
     isexe "^2.0.0"
 
-wide-align@^1.1.0:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
-  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
-  dependencies:
-    string-width "^1.0.2 || 2 || 3 || 4"
-
 window-size@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
@@ -16674,7 +17202,19 @@ winston@2.1.x:
     pkginfo "0.3.x"
     stack-trace "0.0.x"
 
-word-wrap@~1.2.3:
+winston@2.x:
+  version "2.4.6"
+  resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.6.tgz#da616f332928f70aac482f59b43d62228f29e478"
+  integrity sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==
+  dependencies:
+    async "^3.2.3"
+    colors "1.0.x"
+    cycle "1.0.x"
+    eyes "0.1.x"
+    isstream "0.1.x"
+    stack-trace "0.0.x"
+
+word-wrap@^1.2.3, word-wrap@~1.2.3:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
   integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -16707,15 +17247,6 @@ wrap-ansi@^2.0.0:
     string-width "^1.0.1"
     strip-ansi "^3.0.1"
 
-wrap-ansi@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
-  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
-  dependencies:
-    ansi-styles "^3.2.0"
-    string-width "^3.0.0"
-    strip-ansi "^5.0.0"
-
 wrap-ansi@^6.2.0:
   version "6.2.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
@@ -16850,14 +17381,6 @@ yargs-parser@^11.1.1:
     camelcase "^5.0.0"
     decamelize "^1.2.0"
 
-yargs-parser@^13.1.2:
-  version "13.1.2"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
-  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
 yargs-parser@^18.1.2:
   version "18.1.3"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
@@ -16879,20 +17402,6 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3:
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
   integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
 
-yargs-parser@^8.1.0:
-  version "8.1.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
-  integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
-  dependencies:
-    camelcase "^4.1.0"
-
-yargs-parser@^9.0.2:
-  version "9.0.2"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
-  integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=
-  dependencies:
-    camelcase "^4.1.0"
-
 yargs@12.0.5:
   version "12.0.5"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
@@ -16930,58 +17439,6 @@ yargs@4.7.1:
     y18n "^3.2.1"
     yargs-parser "^2.4.0"
 
-yargs@^10.0.3:
-  version "10.1.2"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
-  integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==
-  dependencies:
-    cliui "^4.0.0"
-    decamelize "^1.1.1"
-    find-up "^2.1.0"
-    get-caller-file "^1.0.1"
-    os-locale "^2.0.0"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^2.0.0"
-    which-module "^2.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^8.1.0"
-
-yargs@^11.0.0:
-  version "11.1.1"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766"
-  integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==
-  dependencies:
-    cliui "^4.0.0"
-    decamelize "^1.1.1"
-    find-up "^2.1.0"
-    get-caller-file "^1.0.1"
-    os-locale "^3.1.0"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^2.0.0"
-    which-module "^2.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^9.0.2"
-
-yargs@^13.3.2:
-  version "13.3.2"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
-  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
-  dependencies:
-    cliui "^5.0.0"
-    find-up "^3.0.0"
-    get-caller-file "^2.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
-    string-width "^3.0.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^13.1.2"
-
 yargs@^15.4.1:
   version "15.4.1"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
@@ -17017,6 +17474,19 @@ yocto-queue@^0.1.0:
   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
 
+yup@^0.32.11:
+  version "0.32.11"
+  resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5"
+  integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==
+  dependencies:
+    "@babel/runtime" "^7.15.4"
+    "@types/lodash" "^4.14.175"
+    lodash "^4.17.21"
+    lodash-es "^4.17.21"
+    nanoclone "^0.2.1"
+    property-expr "^2.0.4"
+    toposort "^2.0.2"
+
 zxcvbn@^4.4.2:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30"