diff --git a/conf/app.src b/conf/app.src
index 578945a..56fc129 100644
--- a/conf/app.src
+++ b/conf/app.src
@@ -1,5 +1,5 @@
-SOURCE_URL=https://github.com/outline/outline/archive/ebeb201a9f48e2c6b619a0d152e051946849aa10.zip
-SOURCE_SUM=7f7afaff1c12a197583871659f7d08355586a4727133e903a63fd5def1bfbcd2
+SOURCE_URL=https://github.com/outline/outline/archive/3212d37ca5e6e061d454e10779a2ab03838cb8f3.zip
+SOURCE_SUM=30feb816c69c5725508a8845feefb84a690fa46e88853aaa303460d9da0e998c
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=true
diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md
index b9e3462..dcf6239 100644
--- a/doc/DISCLAIMER.md
+++ b/doc/DISCLAIMER.md
@@ -1,7 +1,7 @@
### Not totally free licence
Outline is a softwared licenced under [BUSL 1.1 licence](https://spdx.org/licenses/BUSL-1.1.html).
⚠️ That licence **is not totally free**. Please read it very carefully if you have any commercial use in mind.
-The Outline version shipped with this package (v0.72.1) will be released under Apache-2.0 licence [after August 18th 2027](https://github.com/outline/outline/blob/ebeb201a9f48e2c6b619a0d152e051946849aa10/LICENSE).
+The Outline version shipped with this package (v0.72.2) will be released under Apache-2.0 licence [after August 18th 2027](https://github.com/outline/outline/blob/ebeb201a9f48e2c6b619a0d152e051946849aa10/LICENSE).
### Known limitations
diff --git a/manifest.json b/manifest.json
index e0ae787..db867df 100644
--- a/manifest.json
+++ b/manifest.json
@@ -6,7 +6,7 @@
"en": "Wiki and knowledge base for teams",
"fr": "Wiki et base de connaissances pour les équipes"
},
- "version": "0.72.1~ynh1",
+ "version": "0.72.2~ynh1",
"url": "www.getoutline.com",
"upstream": {
"license": "BUSL-1.1",
diff --git a/scripts/install b/scripts/install
index 5458c3f..25e4e18 100755
--- a/scripts/install
+++ b/scripts/install
@@ -189,7 +189,7 @@ pushd "$final_path"
ynh_script_progression --message="Fetching Yarn production dependencies... This can be very long, be patient !" --weight=18
ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH yarn install --frozen-lockfile --network-timeout 1000000000 2>&1
ynh_script_progression --message="Building... This can be very long, be patient !" --weight=18
- ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH NODE_OPTIONS="--max-old-space-size=3200" yarn build 2>&1
+ ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH NODE_OPTIONS="--max-old-space-size=3900" yarn build 2>&1
ynh_script_progression --message="Cleaning cache... " --weight=3
ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH yarn cache clean 2>&1
popd
diff --git a/sources/patches/app-02-visitor.patch b/sources/patches/app-02-visitor.patch
new file mode 100644
index 0000000..42aa365
--- /dev/null
+++ b/sources/patches/app-02-visitor.patch
@@ -0,0 +1,141 @@
+diff --git a/package.json b/package.json
+index b33348a07..24a4af6f2 100644
+--- a/package.json
++++ b/package.json
+@@ -157,6 +157,7 @@
+ "patch-package": "^7.0.2",
+ "pg": "^8.11.1",
+ "pg-tsquery": "^8.4.1",
++ "passport-req": "^0.1.1",
+ "polished": "^4.2.2",
+ "prosemirror-codemark": "^0.4.2",
+ "prosemirror-commands": "^1.5.2",
+diff --git a/plugins/req/plugin.json b/plugins/req/plugin.json
+new file mode 100644
+index 000000000..ae7c40333
+--- /dev/null
++++ b/plugins/req/plugin.json
+@@ -0,0 +1,4 @@
++{
++ "name": "visiteur",
++ "description": "Adds an req compatible authentication provider."
++}
+diff --git a/plugins/req/server/.babelrc b/plugins/req/server/.babelrc
+new file mode 100644
+index 000000000..2bc0ef3ed
+--- /dev/null
++++ b/plugins/req/server/.babelrc
+@@ -0,0 +1,3 @@
++{
++ "extends": "../../../server/.babelrc"
++}
+diff --git a/plugins/req/server/auth/req.ts b/plugins/req/server/auth/req.ts
+new file mode 100644
+index 000000000..bc03fc6d3
+--- /dev/null
++++ b/plugins/req/server/auth/req.ts
+@@ -0,0 +1,70 @@
++import passport from "@outlinewiki/koa-passport";
++import type { Context } from "koa";
++import Router from "koa-router";
++import { capitalize } from "lodash";
++import { Strategy as ReqStrategy } from "passport-req";
++import { slugifyDomain } from "@shared/utils/domains";
++import accountProvisioner from "@server/commands/accountProvisioner";
++import env from "@server/env";
++import passportMiddleware from "@server/middlewares/passport";
++import { User } from "@server/models";
++import { AuthenticationResult } from "@server/types";
++import {
++ StateStore,
++ getTeamFromContext,
++ getClientFromContext,
++} from "@server/utils/passport";
++
++const router = new Router();
++const providerName = "req";
++
++export const config = {
++ name: "visiteur",
++ enabled: true,
++};
++
++if (true) {
++ passport.use(
++ new ReqStrategy(
++ async function (req,done) {
++ try {
++ const domain = "domain.tld";
++ const subdomain = domain.split(".")[0];
++ const teamName = capitalize(subdomain);
++ const name = "visiteur";
++ const email = "visiteur@anthropologiebiblique.fr";
++ const result = await accountProvisioner({
++ ip: req.ip,
++ team: {
++ name: teamName,
++ domain,
++ subdomain,
++ },
++ user: {
++ name: name,
++ email: email,
++ avatarUrl: null,
++ },
++ authenticationProvider: {
++ name: providerName,
++ providerId: domain,
++ },
++ authentication: {
++ providerId: "1234",
++ accessToken: null,
++ refreshToken: null,
++ scopes: [],
++ },
++ });
++ return done(null, result.user, result);
++ } catch (err) {
++ return done(err, null);
++ }
++ }
++ )
++ );
++
++ router.get("req", passportMiddleware(providerName));
++}
++
++export default router;
+diff --git a/yarn.lock b/yarn.lock
+index 2db13c657..2dbdf3907 100644
+--- a/yarn.lock
++++ b/yarn.lock
+@@ -10340,6 +10340,14 @@ passport-oauth@1.0.x:
+ passport-oauth1 "1.x.x"
+ passport-oauth2 "1.x.x"
+
++passport-req@^0.1.1:
++ version "0.1.1"
++ resolved "https://registry.yarnpkg.com/passport-req/-/passport-req-0.1.1.tgz#451bff1500b3d464a768d42f0762328a21236a18"
++ integrity sha512-9qmM0vD5v7jYLWxezNNCleOw+8IkVAuvOwQ6NJaUuJkdFJTR1KatXH1i5MxWgffx+libLWYLRUPtc6GHOmn+6w==
++ dependencies:
++ passport "~0.1.1"
++ pkginfo "0.2.x"
++
+ passport-slack-oauth2@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/passport-slack-oauth2/-/passport-slack-oauth2-1.2.0.tgz#d214a698b55a137393636a26827747f6c436dab4"
+@@ -10361,6 +10369,14 @@ passport@^0.6.0:
+ pause "0.0.1"
+ utils-merge "^1.0.1"
+
++passport@~0.1.1:
++ version "0.1.18"
++ resolved "https://registry.yarnpkg.com/passport/-/passport-0.1.18.tgz#c8264479dcb6414cadbb66752d12b37e0b6525a1"
++ integrity sha512-qteYojKG/qth7UBbbGU7aqhe5ndJs6YaUkH2B6+7FWQ0OeyYmWknzOATpMhdoSTDcLLliq9n4Fcy1mGs80iUMw==
++ dependencies:
++ pause "0.0.1"
++ pkginfo "0.2.x"
++
+ passthrough-counter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/passthrough-counter/-/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa"
diff --git a/sources/patches/app-03-login.patch b/sources/patches/app-03-login.patch
new file mode 100644
index 0000000..4ed113a
--- /dev/null
+++ b/sources/patches/app-03-login.patch
@@ -0,0 +1,59 @@
+diff --git a/app/scenes/Login/components/AuthenticationProvider.tsx b/app/scenes/Login/components/AuthenticationProvider.tsx
+index af218c06c..b2d93d994 100644
+--- a/app/scenes/Login/components/AuthenticationProvider.tsx
++++ b/app/scenes/Login/components/AuthenticationProvider.tsx
+@@ -91,7 +91,7 @@ function AuthenticationProvider(props: Props) {
+
+
+- {t("Sign In")} →
++ {t("S'identifier")} →
+
+ >
+ ) : (
+ } fullwidth>
+- {t("Continue with Email")}
++ {t("Accès membre (email)")}
+
+ )}
+
+@@ -120,7 +120,7 @@ function AuthenticationProvider(props: Props) {
+ icon={}
+ fullwidth
+ >
+- {t("Continue with {{ authProviderName }}", {
++ {t("Accès {{ authProviderName }}", {
+ authProviderName: name,
+ })}
+
+diff --git a/app/scenes/Login/index.tsx b/app/scenes/Login/index.tsx
+index de4245890..c751e3299 100644
+--- a/app/scenes/Login/index.tsx
++++ b/app/scenes/Login/index.tsx
+@@ -255,7 +255,7 @@ function Login({ children }: Props) {
+ ) : (
+ <>
+
+- {t("Login to {{ authProviderName }}", {
++ {t("Bienvenue sur Anthropologie Biblique", {
+ authProviderName: config.name || env.APP_NAME,
+ })}
+
+@@ -273,7 +273,7 @@ function Login({ children }: Props) {
+ {hasMultipleProviders && (
+ <>
+
+- {t("You signed in with {{ authProviderName }} last time.", {
++ {t("Vous vous êtes authentifié avec l'accès {{ authProviderName }} la dernière fois.", {
+ authProviderName: defaultProvider.name,
+ })}
+
diff --git a/sources/patches/app-04-bible.patch b/sources/patches/app-04-bible.patch
new file mode 100644
index 0000000..74c95b0
--- /dev/null
+++ b/sources/patches/app-04-bible.patch
@@ -0,0 +1,151 @@
+diff --git a/app/editor/menus/block.tsx b/app/editor/menus/block.tsx
+index f795fc56d..a4dc4e17a 100644
+--- a/app/editor/menus/block.tsx
++++ b/app/editor/menus/block.tsx
+@@ -21,6 +21,7 @@ import {
+ MathIcon,
+ DoneIcon,
+ EmbedIcon,
++ BookmarkedIcon,
+ } from "outline-icons";
+ import * as React from "react";
+ import styled from "styled-components";
+@@ -203,6 +204,13 @@ export default function blockMenuItems(dictionary: Dictionary): MenuItem[] {
+ keywords: "notice card suggestion",
+ attrs: { style: "tip" },
+ },
++ {
++ name: "container_notice",
++ title: dictionary.bibleNotice,
++ icon: ,
++ keywords: "notice card bible",
++ attrs: { style: "bible" },
++ },
+ {
+ name: "separator",
+ },
+diff --git a/app/hooks/useDictionary.ts b/app/hooks/useDictionary.ts
+index 6472c88cc..8bedb092d 100644
+--- a/app/hooks/useDictionary.ts
++++ b/app/hooks/useDictionary.ts
+@@ -78,6 +78,8 @@ export default function useDictionary() {
+ warningNotice: t("Warning notice"),
+ success: t("Success"),
+ successNotice: t("Success notice"),
++ bible: t("Bible"),
++ bibleNotice: t("Bible quote"),
+ insertDate: t("Current date"),
+ insertTime: t("Current time"),
+ insertDateTime: t("Current date and time"),
+diff --git a/app/scenes/Document/components/Document.tsx b/app/scenes/Document/components/Document.tsx
+index 8e3542d40..8a7c461af 100644
+--- a/app/scenes/Document/components/Document.tsx
++++ b/app/scenes/Document/components/Document.tsx
+@@ -552,11 +552,6 @@ class DocumentScene extends React.Component {
+
+
+
+- {isShare &&
+- !parseDomain(window.location.origin).custom &&
+- !auth.user && (
+-
+- )}
+
+ {!isShare && (
+