diff --git a/example.env b/example.env
index bfbdeedd4dfac3794ba289551f12a5bf0c2a0b2b..95ed0770f804269da76f8fe020457e8a611e36d4 100644
--- a/example.env
+++ b/example.env
@@ -50,6 +50,9 @@ OPENFISCA_PROJECT="openfisca-france"
 OPENFISCA_REPOSITORY_RAW_URL_TEMPLATE="https://raw.githubusercontent.com/${group}/${project}/${branch}/${path}"
 OPENFISCA_REPOSITORY_URL_TEMPLATE="https://github.com/${group}/${project}/blob/${branch}/${path}"
 
+# URL of portal site (used when clicking on left logo in menu bar)
+PORTAL_URL="https://leximpact.an.fr/"
+
 # Set to true when application is behind a proxy
 PROXY=false
 
diff --git a/postcss.config.cjs b/postcss.config.cjs
index 3c84d52ceff90ba2f2740a8964c3242983d1b2f1..db2754b09159c228553a17c0abffed1722221453 100644
--- a/postcss.config.cjs
+++ b/postcss.config.cjs
@@ -5,19 +5,17 @@ const cssnano = require("cssnano")
 const mode = process.env.NODE_ENV
 const dev = mode === "development"
 
-module.exports = {
+const config = {
   plugins: [
-    // Some plugins, like postcss-nested, need to run before Tailwind
-
-    tailwindcss,
-
-    // But others, like autoprefixer, need to run after
-
-    autoprefixer,
-
+    // Some plugins, like postcss-nested, need to run before Tailwind.
+    tailwindcss(),
+    // But others, like autoprefixer, need to run after.
+    autoprefixer(),
     !dev &&
       cssnano({
         preset: "default",
       }),
   ],
 }
+
+module.exports = config
diff --git a/src/hooks.ts b/src/hooks.ts
index b92fcaf32312c23de3402ac324a70650c00c51a8..b1eb8ac8115fceec38c80bae8c95f85e264d9ce3 100644
--- a/src/hooks.ts
+++ b/src/hooks.ts
@@ -61,6 +61,7 @@ export const getSession: GetSession<{}, Session> = async (request) => {
       urlTemplate: openfiscaRepository.urlTemplate,
     },
     personEntityKey,
+    portalUrl: config.portalUrl,
     rootDecompositionName: config.rootDecompositionName,
     testCases,
     title: config.title,
diff --git a/src/lib/auditors/config.ts b/src/lib/auditors/config.ts
index 252194d7a2edb30aa73719bc8c03f4b936b2ec2c..990cea6ae8d5c59ce152bfb6ca178011acafa2c1 100644
--- a/src/lib/auditors/config.ts
+++ b/src/lib/auditors/config.ts
@@ -42,7 +42,7 @@ export function auditConfig(
       auditSetNullish(false),
     )
   }
-  for (const key of ["apiBaseUrl", "baseUrl"]) {
+  for (const key of ["apiBaseUrl", "baseUrl", "portalUrl"]) {
     audit.attribute(
       data,
       key,
diff --git a/src/lib/calculations.ts b/src/lib/calculations.ts
index 6b883943cd00c3255029c7ff3b1fe5f00152565c..f41b7673c5c079493342d885a1d32fe931ff6650 100644
--- a/src/lib/calculations.ts
+++ b/src/lib/calculations.ts
@@ -41,9 +41,8 @@ export function newCalculationUrl({
     pane4,
   }
   const queryString = stringifyQuery(query)
-  return `${dev ? `/dev/calculations` : "/simulation"}${
-    queryString ? "?" + queryString : ""
-  }`
+  return `${dev ? `/dev/calculations` : "/"}${queryString ? "?" + queryString : ""
+    }`
 }
 
 export function newSimulationUrl({
@@ -56,5 +55,5 @@ export function newSimulationUrl({
     query.action = action
   }
   const queryString = stringifyQuery(query)
-  return `/simulation${queryString ? "?" + queryString : ""}`
+  return `/${queryString ? "?" + queryString : ""}`
 }
diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte
index 842701b867fd2bf055a47b209f045b40b08142ba..419ea4223582a0d4793c167d2d8a7d99113d0327 100644
--- a/src/lib/components/NavBar.svelte
+++ b/src/lib/components/NavBar.svelte
@@ -1,25 +1,33 @@
 <script lang="ts">
   import { page, session } from "$app/stores"
 
-  let open = false
+  // let open = false
+  let openAproposMenu = false
+
   let openUserMenu = false
 
+  $: authenticationEnabled = $session.authenticationEnabled
+
   $: pageUrlPath = $page.path.replace(/\/+$/, "") || "/"
 
   $: title = $session.title
 
-  function activeMenuItem(href: string) {
-    return pageUrlPath === href || pageUrlPath.startsWith(href + "/")
-  }
+  $: user = $session.user
+
+  // function activeMenuItem(href: string) {
+  //   return pageUrlPath === href || pageUrlPath.startsWith(href + "/")
+  // }
 </script>
 
-<nav class="bg-le-jaune h-14 shadow-md max-w-9xl mx-auto px-2 sm:px-6 lg:px-8">
+<nav
+  class="fixed bg-le-jaune h-14 shadow-md max-w-9xl mx-auto px-2 sm:px-6 lg:px-8 w-full z-50"
+>
   <!-- Création d'un div sur l'ensemble de la nav bar pour répartir les blocs-->
   <div class="hidden sm:flex  justify-between">
     <!-- Premier div pour le logo AN et le menu A propos-->
     <div class="flex w-64 items-center">
       <!-- logo assemblee nationale -->
-      <a href="/">
+      <a href={$session.portalUrl}>
         <img
           class="pr-2 pl-2 pb-4 pt-0 w-16  object-scale-down items-start "
           src="/logo-assemblee-nationale-blanc-blanc.png"
@@ -30,18 +38,18 @@
       <div class="flex space-x-5 justify-start ml-2 items-center">
         <div class="">
           <button
-            aria-expanded={openUserMenu}
+            aria-expanded={openAproposMenu}
             aria-haspopup="true"
             class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
             id="user-menu"
-            on:click={() => (openUserMenu = !openUserMenu)}
+            on:click={() => (openAproposMenu = !openAproposMenu)}
             type="button"
           >
             <span class="sr-only">Open user menu</span>
             À propos
           </button>
         </div>
-        {#if openUserMenu}
+        {#if openAproposMenu}
           <!--
                 Dropdown menu
 
@@ -84,6 +92,24 @@
               class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
               role="menuitem">Mentions légales</a
             >
+            <a
+              href="/"
+              class="border-b block px-4 py-3 text-sm bg-gray-200 text-gray-900 hover:bg-gray-400"
+              role="menuitem"
+            >
+              <!-- Material icon: Volunteer Activism-->
+              <svg
+                class="fill-current text-gray-700 inline rounded mr-2"
+                xmlns="http://www.w3.org/2000/svg"
+                height="18px"
+                viewBox="0 0 22 22"
+                width="18px"
+                fill="#000000"
+                ><path d="M0 0h24v24H0z" fill="none" /><path
+                  d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
+                /></svg
+              >Retour en page d'accueil</a
+            >
           </div>
         {/if}
       </div>
@@ -91,18 +117,150 @@
 
     <!-- Deuxième div pour le logo Contrib. & prestas sociales-->
     <div class="hidden sm:flex">
-      <div
-        class="space-y-1 flex items-center h-14 gap-2 rounded text-white p-1"
-      >
-        <div class="row-span-3 text-4xl font-light uppercase">LexImpact</div>
-      </div>
+      <a href="/">
+        <div
+          class="space-y-1 flex items-center h-14 gap-2 rounded text-white p-1"
+        >
+          <div class="row-span-3 text-4xl font-light uppercase">LexImpact</div>
+          <div class="space-y-0">
+            <div class="text-xs font-bold uppercase">Cotisations</div>
+            <div class="text-xs font-bold uppercase">
+              & prestations sociales
+            </div>
+          </div>
+        </div>
+      </a>
     </div>
 
     <!-- Troisième div pour les commandes avancées-->
-    <!-- À propos dropdown -->
-    <div
-      class="flex w-64 justify-end md:justify-between space-x-1 items-center"
-    />
+    <!-- Contribuer et connexion/déconnexion -->
+    <div class="flex w-64 justify-end md:justify-between  items-center">
+      <div class="flex">
+        <a
+          href="/contribuer"
+          class="hidden sm:inline-flex text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
+          type="button"
+        >
+          <div class="flex items-center">
+            <!-- Material icon: Volunteer Activism-->
+            <svg
+              class="fill-current text-white inline rounded m-3 md:m-0"
+              xmlns="http://www.w3.org/2000/svg"
+              enable-background="new 0 0 24 24"
+              height="18px"
+              viewBox="0 0 22 22"
+              width="18px"
+              ><g><rect fill="none" height="24" width="2" /></g><g
+                ><g
+                  ><rect height="11" width="4" x="1" y="11" /><path
+                    d="M16,3.25C16.65,2.49,17.66,2,18.7,2C20.55,2,22,3.45,22,5.3c0,2.27-2.91,4.9-6,7.7c-3.09-2.81-6-5.44-6-7.7 C10,3.45,11.45,2,13.3,2C14.34,2,15.35,2.49,16,3.25z"
+                  /><path
+                    d="M20,17h-7l-2.09-0.73l0.33-0.94L13,16h2.82c0.65,0,1.18-0.53,1.18-1.18v0c0-0.49-0.31-0.93-0.77-1.11L8.97,11H7v9.02 L14,22l8.01-3v0C22,17.9,21.11,17,20,17z"
+                  /></g
+                ></g
+              ></svg
+            >
+            <p class="hidden md:inline-block pl-1">Contribuer</p>
+          </div>
+        </a>
+      </div>
+
+      {#if authenticationEnabled}
+        {#if user === undefined}
+          <a
+            href="/authentication/signin/leximpact?redirect={$page.path}"
+            class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
+            type="button"
+          >
+            <div class="flex items-center">
+              <!-- Material icon: VPN key-->
+              <svg
+                class="fill-current text-white inline rounded m-3 md:m-0"
+                xmlns="http://www.w3.org/2000/svg"
+                height="18px"
+                viewBox="0 0 22 22"
+                width="18px"
+                ><path d="M0 0h24v24H0z" fill="none" /><path
+                  d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"
+                /></svg
+              >
+              <p class="hidden md:inline-block pl-1">Se connecter</p>
+            </div>
+          </a>
+        {:else}
+          <!-- User profile + se déconnecter -->
+          <div class="flex">
+            <button
+              aria-expanded={openUserMenu}
+              aria-haspopup="true"
+              class="text-white capitalize text-sm rounded focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
+              id="user-menu"
+              on:click={() => (openUserMenu = !openUserMenu)}
+              type="button"
+            >
+              <!-- Material icon: Account circle-->
+
+              <svg
+                class="fill-current text-white inline rounded m-3 md:m-0"
+                xmlns="http://www.w3.org/2000/svg"
+                height="18px"
+                viewBox="0 0 24 24"
+                width="18px"
+                fill="#000000"
+                ><path d="M0 0h24v24H0z" fill="none" /><path
+                  d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"
+                /></svg
+              >
+
+              <span class="sr-only">Open user menu</span>
+              {user.preferred_username}
+            </button>
+          </div>
+          {#if openUserMenu}
+            <!--
+                Dropdown menu
+
+                Entering: "transition ease-out duration-100"
+                  From: "transform opacity-0 scale-95"
+                  To: "transform opacity-100 scale-100"
+                Leaving: "transition ease-in duration-75"
+                  From: "transform opacity-100 scale-100"
+                  To: "transform opacity-0 scale-95"
+              -->
+            <div
+              class="absolute mt-14 mr-8 right-0 top-0 w- rounded shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none z-50"
+              role="menu"
+              aria-orientation="vertical"
+              aria-labelledby="user-menu"
+            >
+              <a
+                href="/authentication/signout"
+                class="uppercase rounded-sm focus:outline-none   hover:bg-opacity-20 
+                  border-b block px-4 py-3  text-sm text-black hover:bg-gray-300"
+                type="button"
+              >
+                <div class="flex items-center">
+                  <!-- Material icon: Power Settings New-->
+
+                  <svg
+                    class="fill-current text-black inline rounded m-3 md:m-0"
+                    xmlns="http://www.w3.org/2000/svg"
+                    height="18px"
+                    viewBox="0 0 24 24"
+                    width="18px"
+                    fill="#000000"
+                    ><path d="M0 0h24v24H0z" fill="none" /><path
+                      d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"
+                    /></svg
+                  >
+                  <p class="hidden md:inline-block pl-1">Se déconnecter</p>
+                </div>
+              </a>
+            </div>
+          {/if}
+        {/if}
+      {/if}
+    </div>
   </div>
 
   <!--Menu écran téléphone-->
@@ -121,19 +279,27 @@
     </div>
 
     <!-- Deuxième div pour le logo Contrib. & prestas sociales-->
-
-    <div class="rounded text-2xl text-white font-light uppercase">
-      LexImpact
+    <div>
+      <div
+        class="block  object-center text-center rounded text-2xl text-white font-light uppercase h-7"
+      >
+        LexImpact
+      </div>
+      <div
+        class="block rounded object-center  text-center text-xs text-white font-bold uppercase"
+      >
+        Cotis. & presta. sociales
+      </div>
     </div>
 
     <!-- Troisième div pour le bouton menu-->
     <div class="w-16 ">
       <button
-        aria-expanded={openUserMenu}
+        aria-expanded={openAproposMenu}
         aria-haspopup="true"
         class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
         id="user-menu"
-        on:click={() => (openUserMenu = !openUserMenu)}
+        on:click={() => (openAproposMenu = !openAproposMenu)}
         type="button"
       >
         <span class="sr-only">Open user menu</span>
@@ -150,7 +316,7 @@
         >
       </button>
     </div>
-    {#if openUserMenu}
+    {#if openAproposMenu}
       <!--
             Dropdown menu
 
@@ -167,6 +333,48 @@
         aria-orientation="vertical"
         aria-labelledby="user-menu"
       >
+        {#if authenticationEnabled}
+          {#if user === undefined}
+            <a
+              href="/authentication/signin/leximpact?redirect={$page.path}"
+              class="border-b block px-4 py-3 text-sm text-gray-700 font-bold hover:bg-gray-100"
+              role="menuitem"
+            >
+              <!-- Material icon: VPN key-->
+              <svg
+                class="fill-current text-gray-700 inline rounded mr-2"
+                xmlns="http://www.w3.org/2000/svg"
+                height="18px"
+                viewBox="0 0 22 22"
+                width="18px"
+                ><path d="M0 0h24v24H0z" fill="none" /><path
+                  d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"
+                /></svg
+              >Se connecter</a
+            >
+          {:else}
+            <a
+              href="/authentication/signout"
+              class="border-b-4 block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
+              role="menuitem"
+            >
+              <!-- Material icon: Power Settings New-->
+
+              <svg
+                class="fill-current text-gray-700 inline rounded mr-2"
+                xmlns="http://www.w3.org/2000/svg"
+                height="18px"
+                viewBox="0 0 24 24"
+                width="18px"
+                fill="#000000"
+                ><path d="M0 0h24v24H0z" fill="none" /><path
+                  d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"
+                /></svg
+              >Se déconnecter ({user.preferred_username})</a
+            >
+          {/if}
+        {/if}
+
         <a
           href="/a-propos"
           class="border-b block px-4 py-3 font-bold text-sm text-gray-700 hover:bg-gray-100"
@@ -174,25 +382,68 @@
         >
         <a
           href="/comment-fonctionnent-les-simulateurs"
-          class="border-b-4 block px-4 py-3  text-sm text-gray-700 hover:bg-gray-100"
+          class=" border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
           role="menuitem">Comment fonctionnent les simulateurs LexImpact ?</a
         >
+
+        <a
+          href="/contribuer"
+          class="border-b-4 block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
+          role="menuitem"
+        >
+          Contribuer</a
+        >
+
         <a
           href="/statistiques"
-          class="border-b  block px-4 py-3  text-sm text-gray-700 hover:bg-gray-100"
+          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
           role="menuitem">Statistiques d'usage</a
         >
         <a
           href="/cgu"
-          class="border-b  block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
+          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
           role="menuitem">Conditions d'utilisation</a
         >
         <a
           href="/mentions-legales"
-          class="block px-4 border-b py-3 text-sm text-gray-700 hover:bg-gray-100"
+          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
           role="menuitem">Mentions légales</a
         >
+        <a
+          href="/"
+          class="border-b block px-4 py-3 text-sm bg-gray-200 text-gray-900 hover:bg-gray-400"
+          role="menuitem"
+        >
+          <!-- Material icon: Volunteer Activism-->
+          <svg
+            class="fill-current text-gray-700 inline rounded mr-2"
+            xmlns="http://www.w3.org/2000/svg"
+            height="18px"
+            viewBox="0 0 22 22"
+            width="18px"
+            fill="#000000"
+            ><path d="M0 0h24v24H0z" fill="none" /><path
+              d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
+            /></svg
+          >Retour en page d'accueil</a
+        >
       </div>
     {/if}
   </div>
 </nav>
+<div
+  class="fixed mt-14 z-40 flex fond-bandeau-en-construction h-8 w-full items-center justify-center shadow-lg border-b border-t border-black"
+>
+  <div>
+    <p class="text-center text-black tracking-wider font-base uppercase">
+      🚧 Simulateur en construction
+    </p>
+  </div>
+</div>
+
+<style>
+  .fond-bandeau-en-construction {
+    background-color: #ffffff;
+    background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ece322' fill-opacity='0.4' fill-rule='evenodd'%3E%3Cpath d='M0 40L40 0H20L0 20M40 40V20L20 40'/%3E%3C/g%3E%3C/svg%3E");
+  }
+</style>
diff --git a/src/lib/components/NavBarAffairesSociales.svelte b/src/lib/components/NavBarAffairesSociales.svelte
deleted file mode 100644
index a75021a90723d914d217ac692d8cf246f0c68bef..0000000000000000000000000000000000000000
--- a/src/lib/components/NavBarAffairesSociales.svelte
+++ /dev/null
@@ -1,449 +0,0 @@
-<script lang="ts">
-  import { page, session } from "$app/stores"
-
-  // let open = false
-  let openAproposMenu = false
-
-  let openUserMenu = false
-
-  $: authenticationEnabled = $session.authenticationEnabled
-
-  $: pageUrlPath = $page.path.replace(/\/+$/, "") || "/"
-
-  $: title = $session.title
-
-  $: user = $session.user
-
-  // function activeMenuItem(href: string) {
-  //   return pageUrlPath === href || pageUrlPath.startsWith(href + "/")
-  // }
-</script>
-
-<nav
-  class="fixed bg-le-jaune h-14 shadow-md max-w-9xl mx-auto px-2 sm:px-6 lg:px-8 w-full z-50"
->
-  <!-- Création d'un div sur l'ensemble de la nav bar pour répartir les blocs-->
-  <div class="hidden sm:flex  justify-between">
-    <!-- Premier div pour le logo AN et le menu A propos-->
-    <div class="flex w-64 items-center">
-      <!-- logo assemblee nationale -->
-      <a href="/">
-        <img
-          class="pr-2 pl-2 pb-4 pt-0 w-16  object-scale-down items-start "
-          src="/logo-assemblee-nationale-blanc-blanc.png"
-          alt="Logo de l'Assemblée nationale"
-        />
-      </a>
-      <!-- À propos dropdown -->
-      <div class="flex space-x-5 justify-start ml-2 items-center">
-        <div class="">
-          <button
-            aria-expanded={openAproposMenu}
-            aria-haspopup="true"
-            class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
-            id="user-menu"
-            on:click={() => (openAproposMenu = !openAproposMenu)}
-            type="button"
-          >
-            <span class="sr-only">Open user menu</span>
-            À propos
-          </button>
-        </div>
-        {#if openAproposMenu}
-          <!--
-                Dropdown menu
-
-                Entering: "transition ease-out duration-100"
-                  From: "transform opacity-0 scale-95"
-                  To: "transform opacity-100 scale-100"
-                Leaving: "transition ease-in duration-75"
-                  From: "transform opacity-100 scale-100"
-                  To: "transform opacity-0 scale-95"
-              -->
-          <div
-            class="absolute mt-14 mr-6 left-16 top-0 w-64 rounded shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none z-50"
-            role="menu"
-            aria-orientation="vertical"
-            aria-labelledby="user-menu"
-          >
-            <a
-              href="/a-propos"
-              class="border-b block px-4 py-3 font-bold text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem">À propos de LexImpact</a
-            >
-            <a
-              href="/comment-fonctionnent-les-simulateurs"
-              class="border-b-4 block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem"
-              >Comment fonctionnent les simulateurs LexImpact ?</a
-            >
-            <a
-              href="/statistiques"
-              class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem">Statistiques d'usage</a
-            >
-            <a
-              href="/cgu"
-              class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem">Conditions d'utilisation</a
-            >
-            <a
-              href="/mentions-legales"
-              class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem">Mentions légales</a
-            >
-            <a
-              href="/"
-              class="border-b block px-4 py-3 text-sm bg-gray-200 text-gray-900 hover:bg-gray-400"
-              role="menuitem"
-            >
-              <!-- Material icon: Volunteer Activism-->
-              <svg
-                class="fill-current text-gray-700 inline rounded mr-2"
-                xmlns="http://www.w3.org/2000/svg"
-                height="18px"
-                viewBox="0 0 22 22"
-                width="18px"
-                fill="#000000"
-                ><path d="M0 0h24v24H0z" fill="none" /><path
-                  d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-                /></svg
-              >Retour en page d'accueil</a
-            >
-          </div>
-        {/if}
-      </div>
-    </div>
-
-    <!-- Deuxième div pour le logo Contrib. & prestas sociales-->
-    <div class="hidden sm:flex">
-      <a href="/simulation">
-        <div
-          class="space-y-1 flex items-center h-14 gap-2 rounded text-white p-1"
-        >
-          <div class="row-span-3 text-4xl font-light uppercase">LexImpact</div>
-          <div class="space-y-0">
-            <div class="text-xs font-bold uppercase">Cotisations</div>
-            <div class="text-xs font-bold uppercase">
-              & prestations sociales
-            </div>
-          </div>
-        </div>
-      </a>
-    </div>
-
-    <!-- Troisième div pour les commandes avancées-->
-    <!-- Contribuer et connexion/déconnexion -->
-    <div class="flex w-64 justify-end md:justify-between  items-center">
-      <div class="flex">
-        <a
-          href="/contribuer"
-          class="hidden sm:inline-flex text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
-          type="button"
-        >
-          <div class="flex items-center">
-            <!-- Material icon: Volunteer Activism-->
-            <svg
-              class="fill-current text-white inline rounded m-3 md:m-0"
-              xmlns="http://www.w3.org/2000/svg"
-              enable-background="new 0 0 24 24"
-              height="18px"
-              viewBox="0 0 22 22"
-              width="18px"
-              ><g><rect fill="none" height="24" width="2" /></g><g
-                ><g
-                  ><rect height="11" width="4" x="1" y="11" /><path
-                    d="M16,3.25C16.65,2.49,17.66,2,18.7,2C20.55,2,22,3.45,22,5.3c0,2.27-2.91,4.9-6,7.7c-3.09-2.81-6-5.44-6-7.7 C10,3.45,11.45,2,13.3,2C14.34,2,15.35,2.49,16,3.25z"
-                  /><path
-                    d="M20,17h-7l-2.09-0.73l0.33-0.94L13,16h2.82c0.65,0,1.18-0.53,1.18-1.18v0c0-0.49-0.31-0.93-0.77-1.11L8.97,11H7v9.02 L14,22l8.01-3v0C22,17.9,21.11,17,20,17z"
-                  /></g
-                ></g
-              ></svg
-            >
-            <p class="hidden md:inline-block pl-1">Contribuer</p>
-          </div>
-        </a>
-      </div>
-
-      {#if authenticationEnabled}
-        {#if user === undefined}
-          <a
-            href="/authentication/signin/leximpact?redirect={$page.path}"
-            class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
-            type="button"
-          >
-            <div class="flex items-center">
-              <!-- Material icon: VPN key-->
-              <svg
-                class="fill-current text-white inline rounded m-3 md:m-0"
-                xmlns="http://www.w3.org/2000/svg"
-                height="18px"
-                viewBox="0 0 22 22"
-                width="18px"
-                ><path d="M0 0h24v24H0z" fill="none" /><path
-                  d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"
-                /></svg
-              >
-              <p class="hidden md:inline-block pl-1">Se connecter</p>
-            </div>
-          </a>
-        {:else}
-          <!-- User profile + se déconnecter -->
-          <div class="flex">
-            <button
-              aria-expanded={openUserMenu}
-              aria-haspopup="true"
-              class="text-white capitalize text-sm rounded focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
-              id="user-menu"
-              on:click={() => (openUserMenu = !openUserMenu)}
-              type="button"
-            >
-              <!-- Material icon: Account circle-->
-
-              <svg
-                class="fill-current text-white inline rounded m-3 md:m-0"
-                xmlns="http://www.w3.org/2000/svg"
-                height="18px"
-                viewBox="0 0 24 24"
-                width="18px"
-                fill="#000000"
-                ><path d="M0 0h24v24H0z" fill="none" /><path
-                  d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"
-                /></svg
-              >
-
-              <span class="sr-only">Open user menu</span>
-              {user.preferred_username}
-            </button>
-          </div>
-          {#if openUserMenu}
-            <!--
-                Dropdown menu
-
-                Entering: "transition ease-out duration-100"
-                  From: "transform opacity-0 scale-95"
-                  To: "transform opacity-100 scale-100"
-                Leaving: "transition ease-in duration-75"
-                  From: "transform opacity-100 scale-100"
-                  To: "transform opacity-0 scale-95"
-              -->
-            <div
-              class="absolute mt-14 mr-8 right-0 top-0 w- rounded shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none z-50"
-              role="menu"
-              aria-orientation="vertical"
-              aria-labelledby="user-menu"
-            >
-              <a
-                href="/authentication/signout"
-                class="uppercase rounded-sm focus:outline-none   hover:bg-opacity-20 
-                  border-b block px-4 py-3  text-sm text-black hover:bg-gray-300"
-                type="button"
-              >
-                <div class="flex items-center">
-                  <!-- Material icon: Power Settings New-->
-
-                  <svg
-                    class="fill-current text-black inline rounded m-3 md:m-0"
-                    xmlns="http://www.w3.org/2000/svg"
-                    height="18px"
-                    viewBox="0 0 24 24"
-                    width="18px"
-                    fill="#000000"
-                    ><path d="M0 0h24v24H0z" fill="none" /><path
-                      d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"
-                    /></svg
-                  >
-                  <p class="hidden md:inline-block pl-1">Se déconnecter</p>
-                </div>
-              </a>
-            </div>
-          {/if}
-        {/if}
-      {/if}
-    </div>
-  </div>
-
-  <!--Menu écran téléphone-->
-
-  <div class="sm:hidden flex justify-between items-center">
-    <!-- Premier div pour le logo AN et le menu A propos-->
-    <div class="w-16">
-      <!-- logo assemblee nationale -->
-      <a href="/">
-        <img
-          class="pr-2 pl-2 pb-4 pt-0 w-16  object-scale-down items-start "
-          src="/logo-assemblee-nationale-blanc-blanc.png"
-          alt="Logo de l'Assemblée nationale"
-        />
-      </a>
-    </div>
-
-    <!-- Deuxième div pour le logo Contrib. & prestas sociales-->
-    <div>
-      <div
-        class="block  object-center text-center rounded text-2xl text-white font-light uppercase h-7"
-      >
-        LexImpact
-      </div>
-      <div
-        class="block rounded object-center  text-center text-xs text-white font-bold uppercase"
-      >
-        Cotis. & presta. sociales
-      </div>
-    </div>
-
-    <!-- Troisième div pour le bouton menu-->
-    <div class="w-16 ">
-      <button
-        aria-expanded={openAproposMenu}
-        aria-haspopup="true"
-        class="text-white uppercase text-sm rounded-sm focus:outline-none  hover:bg-gray-400 hover:bg-opacity-20 hover:text-white p-1"
-        id="user-menu"
-        on:click={() => (openAproposMenu = !openAproposMenu)}
-        type="button"
-      >
-        <span class="sr-only">Open user menu</span>
-        <!-- Material icon : menu -->
-        <svg
-          class="sm:hidden fill-current text-white"
-          xmlns="http://www.w3.org/2000/svg"
-          height="24px"
-          viewBox="0 0 24 24"
-          width="24px"
-          ><path d="M0 0h24v24H0z" fill="none" /><path
-            d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"
-          /></svg
-        >
-      </button>
-    </div>
-    {#if openAproposMenu}
-      <!--
-            Dropdown menu
-
-            Entering: "transition ease-out duration-100"
-              From: "transform opacity-0 scale-95"
-              To: "transform opacity-100 scale-100"
-            Leaving: "transition ease-in duration-75"
-              From: "transform opacity-100 scale-100"
-              To: "transform opacity-0 scale-95"
-          -->
-      <div
-        class="absolute mt-14 right-0 top-0 w-full rounded shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none z-50"
-        role="menu"
-        aria-orientation="vertical"
-        aria-labelledby="user-menu"
-      >
-        {#if authenticationEnabled}
-          {#if user === undefined}
-            <a
-              href="/authentication/signin/leximpact?redirect={$page.path}"
-              class="border-b block px-4 py-3 text-sm text-gray-700 font-bold hover:bg-gray-100"
-              role="menuitem"
-            >
-              <!-- Material icon: VPN key-->
-              <svg
-                class="fill-current text-gray-700 inline rounded mr-2"
-                xmlns="http://www.w3.org/2000/svg"
-                height="18px"
-                viewBox="0 0 22 22"
-                width="18px"
-                ><path d="M0 0h24v24H0z" fill="none" /><path
-                  d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"
-                /></svg
-              >Se connecter</a
-            >
-          {:else}
-            <a
-              href="/authentication/signout"
-              class="border-b-4 block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-              role="menuitem"
-            >
-              <!-- Material icon: Power Settings New-->
-
-              <svg
-                class="fill-current text-gray-700 inline rounded mr-2"
-                xmlns="http://www.w3.org/2000/svg"
-                height="18px"
-                viewBox="0 0 24 24"
-                width="18px"
-                fill="#000000"
-                ><path d="M0 0h24v24H0z" fill="none" /><path
-                  d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"
-                /></svg
-              >Se déconnecter ({user.preferred_username})</a
-            >
-          {/if}
-        {/if}
-
-        <a
-          href="/a-propos"
-          class="border-b block px-4 py-3 font-bold text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem">À propos de LexImpact</a
-        >
-        <a
-          href="/comment-fonctionnent-les-simulateurs"
-          class=" border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem">Comment fonctionnent les simulateurs LexImpact ?</a
-        >
-
-        <a
-          href="/contribuer"
-          class="border-b-4 block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem"
-        >
-          Contribuer</a
-        >
-
-        <a
-          href="/statistiques"
-          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem">Statistiques d'usage</a
-        >
-        <a
-          href="/cgu"
-          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem">Conditions d'utilisation</a
-        >
-        <a
-          href="/mentions-legales"
-          class="border-b block px-4 py-3 text-sm text-gray-700 hover:bg-gray-100"
-          role="menuitem">Mentions légales</a
-        >
-        <a
-          href="/"
-          class="border-b block px-4 py-3 text-sm bg-gray-200 text-gray-900 hover:bg-gray-400"
-          role="menuitem"
-        >
-          <!-- Material icon: Volunteer Activism-->
-          <svg
-            class="fill-current text-gray-700 inline rounded mr-2"
-            xmlns="http://www.w3.org/2000/svg"
-            height="18px"
-            viewBox="0 0 22 22"
-            width="18px"
-            fill="#000000"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-            /></svg
-          >Retour en page d'accueil</a
-        >
-      </div>
-    {/if}
-  </div>
-</nav>
-<div
-  class="fixed mt-14 z-40 flex fond-bandeau-en-construction h-8 w-full items-center justify-center shadow-lg border-b border-t border-black"
->
-  <div>
-    <p class="text-center text-black tracking-wider font-base uppercase">
-      🚧 Simulateur en construction
-    </p>
-  </div>
-</div>
-
-<style>
-  .fond-bandeau-en-construction {
-    background-color: #ffffff;
-    background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ece322' fill-opacity='0.4' fill-rule='evenodd'%3E%3Cpath d='M0 40L40 0H20L0 20M40 40V20L20 40'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/lib/server/config.ts b/src/lib/server/config.ts
index 685a17c9938538a832925f74d6177c261d02cfa1..31328536fddcb1c3d0b8000a9705286655aa84b5 100644
--- a/src/lib/server/config.ts
+++ b/src/lib/server/config.ts
@@ -32,6 +32,7 @@ export interface Config {
     rawUrlTemplate: string
     urlTemplate: string
   }
+  portalUrl: string
   proxy: boolean
   rootDecompositionName: string
   title: string
@@ -68,6 +69,7 @@ const [validConfig, error] = validateConfig({
     rawUrlTemplate: process.env["OPENFISCA_REPOSITORY_RAW_URL_TEMPLATE"],
     urlTemplate: process.env["OPENFISCA_REPOSITORY_URL_TEMPLATE"],
   },
+  portalUrl: process.env["PORTAL_URL"],
   proxy: process.env["PROXY"],
   rootDecompositionName: process.env["DECOMPOSITION_ROOT"],
   title: process.env["TITLE"],
diff --git a/src/lib/sessions.ts b/src/lib/sessions.ts
index c02b11edea565c7f463affae7ac8816e096a759d..75fee124855765af76aed6a4c94fd8661f4770e9 100644
--- a/src/lib/sessions.ts
+++ b/src/lib/sessions.ts
@@ -24,6 +24,7 @@ export interface Session {
   metadata: Metadata
   openfiscaRepository: SessionOpenFiscaRepository
   personEntityKey: string
+  portalUrl: string
   rootDecompositionName: string
   testCases: Situation[]
   title: string
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index 78bc7938a802b21d059f8d815d147c88a3bb2fa9..bab05f426ea2d81e3f89af52da0da8912f90c75e 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -10,7 +10,6 @@
   import { browser } from "$app/env"
   import { page, session } from "$app/stores"
   import NavBar from "$lib/components/NavBar.svelte"
-  import NavBarAffairesSociales from "$lib/components/NavBarAffairesSociales.svelte"
   import {
     decompositionByNameFromCore,
     walkDecompositionsCoreName,
@@ -379,10 +378,6 @@
   }
 </script>
 
-{#if $page.path === "/"}
-  <NavBar />
-{:else}
-  <NavBarAffairesSociales />
-{/if}
+<NavBar />
 
 <slot />
diff --git a/src/routes/a-propos.svelte b/src/routes/a-propos.svelte
deleted file mode 100644
index 1dc9d3eb2d3f38bbbcc4c4884055a472c09cd62e..0000000000000000000000000000000000000000
--- a/src/routes/a-propos.svelte
+++ /dev/null
@@ -1,333 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-  import TextUnderconstructionMessage from "$lib/components/transverse_pages/TextUnderconstructionMessage.svelte"
-</script>
-
-<svelte:head>
-  <title>À propos | {$session.title}</title>
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md p-10">
-    <div class="">
-      <h1 class="font-serif font-bold pt-7 pb-3 text-3xl text-gray-700">
-        À propos de LexImpact
-      </h1>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        Qui sommes-nous ?
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        LexImpact est un service de l'Assemblée nationale depuis 2020, rattaché
-        à la Direction de l'Évaluation et du Contrôle, spécialisé dans le
-        chiffrage et la gestion de données. <br /><br />En suivant une méthode
-        itérative reposant sur l’analyse des besoins des utilisateurs, notamment
-        les députés, leurs collaborateurs, et les services de l'Assemblée
-        nationale, LexImpact a pour objectif de mettre à leur disposition
-        différents outils. Ces outils étant pour la majorité, ouverts (<a
-          class="underline hover:text-le-bleu"
-          href="/cgu">consulter nos CGU</a
-        >). Ils sont donc également à disposition de la société civile.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        Une équipe pluridisciplinaire, <br /> centrée données, analyse et utilisateurs
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Depuis janvier 2021, l’équipe compte 3 ETP en ce qui concerne la partie
-        développement de simulateurs, et 1 ETP supplémentaire pour le
-        développement d’un nouveau produit, un tableau de bord de données par
-        circonscription. <br /> <br />L’équipe agrège plusieurs types de
-        compétences (science des données, développement et design) permettant de
-        récupérer des données, de les analyser, et de les rendre accessibles par
-        des interfaces adaptées.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        L'origine du projet
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        LexImpact est un service de l’Assemblée nationale depuis janvier 2020,
-        ayant vu le jour en 2019 à la <a
-          class="underline hover:text-le-bleu"
-          href="https://www.numerique.gouv.fr/"
-        >
-          Direction Interministérielle du Numérique</a
-        >, sous la forme d’une
-        <a class="underline hover:text-le-bleu" href="https://beta.gouv.fr/"
-          >start-up d’État</a
-        >
-        et dans le cadre du programme
-        <a
-          class="underline hover:text-le-bleu"
-          href="https://entrepreneur-interet-general.etalab.gouv.fr/defis/2019/leximpact.html"
-          >Entrepreneur d’Intérêt Général</a
-        >, financé par les programmes d'investissement d'avenir. Le projet
-        LexImpact a été créé :
-      </p>
-      <ul class="list-inside list-disc">
-        <li class="leading-normal pb-2 text-base text-justify">
-          car le moteur de calcul <a
-            class="underline hover:text-le-bleu"
-            href="https://fr.openfisca.org/">OpenFisca</a
-          > (ensemble de la législation traduite en code informatique ouvert) ayant
-          servi à des évaluations économiques du PLF cherchait à être utile aux acteurs
-          de la construction de la loi ;
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          suite à l’observation d’un besoin du côté du Parlement. Le chiffrage
-          <span class="italic font-normal">ex ante</span> y est limité notamment
-          du fait d’un calendrier législatif très court ;
-        </li>
-
-        <li class="leading-normal pb-2 text-base text-justify">
-          enfin car l’Assemblée nationale s’est prêtée à une première
-          expérimentation en 2019, ce qui a permis aux équipes de rencontrer les
-          utilisateurs et de co-construire le premier simulateur concernant
-          l’impôt sur le revenu.
-        </li>
-      </ul>
-      <!--Partie les services proposés-->
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        Les services proposés
-      </h2>
-      <p class="leading-normal pb-8 text-base text-justify">
-        LexImpact met à disposition différents services :
-      </p>
-      <!-- Boutons vers les services-->
-      <div class="inline-block w-full">
-        <a
-          href="https://leximpact.an.fr/ir"
-          class="flex items-center border-black border bg-white mb-4 p-1 pl-5 text-base  rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-        >
-          <img
-            class="mr-2"
-            width="70"
-            src="/picto-impot-sur-le-revenu.png"
-            alt="Pictogramme représentant une feuille d'impôt"
-          />
-
-          un simulateur de l'impôt sur le revenu
-        </a>
-      </div>
-      <div class="inline-block w-full">
-        <a
-          href="https://leximpact.an.fr/dotations"
-          class="flex items-center border-black border bg-white mb-4 p-1 pl-5 text-base  rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-        >
-          <img
-            class="mr-2"
-            width="70"
-            src="/picto-dotations-communes.png"
-            alt="Pictogramme représentant un panneau de circulation indiquant commune"
-          />
-
-          un simulateur sur les dotations aux communes
-        </a>
-      </div>
-      <div class="inline-block w-full">
-        <a
-          href="/simulation"
-          class="flex items-center border-black border bg-white mb-4 p-1 pl-5 text-base rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-        >
-          <img
-            class="mr-2"
-            width="70"
-            src="/picto-affaires-sociales.png"
-            alt="Pictogramme représentant une feuille de paie"
-          />
-          <div class="block sm:flex">
-            <p class="">
-              un simulateur sur les cotisations & prestations sociales&nbsp;
-            </p>
-            <p class=" italic">(en développement)</p>
-          </div>
-        </a>
-      </div>
-      <div class="inline-block w-full">
-        <a
-          href="https://umap.openstreetmap.fr/fr/map/circodata-test-interface_623082"
-          class="flex items-center border-black border bg-white mb-4 p-1 pl-5 text-base rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-        >
-          <img
-            class="mr-2"
-            width="70"
-            src="/picto-circo-data.png"
-            alt="Pictogramme représentant une feuille de paie"
-          />
-          <div class="block sm:flex">
-            <p class="">
-              un tableau de bord des données par circonscription&nbsp;
-            </p>
-            <p class=" italic">(en développement)</p>
-          </div>
-        </a>
-      </div>
-      <div class="inline-block w-full ">
-        <a
-          href="https://limesurvey.leximpact.dev/index.php/254182?lang=fr
-          "
-          class="flex items-center border-black border bg-white mb-4 p-1 pl-5 text-base rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-        >
-          <div class="block sm:flex">
-            <p class="">
-              un formulaire permettant de faire une demande de chiffrage
-              spécifique*
-            </p>
-          </div>
-        </a>
-      </div>
-      <p class="text-sm italic">
-        * Ce service s'adresse uniquement aux personnes rattachées à l'Assemblée
-        nationale (député, collaborateur, administrateur).
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        Un projet open source
-      </h2>
-      <p class="leading-normal pb-8 text-base text-justify">
-        Le code de LexImpact est libre, sous licence AGPL-3.0, et peut donc être
-        vérifié et amélioré par toutes et tous. Vous pouvez retrouver l'ensemble
-        de nos dépôts sur <a
-          href="https://git.leximpact.dev/"
-          class="underline hover:text-le-bleu"
-        >
-          https://git.leximpact.dev/</a
-        >, ils sont également regroupés par produit ci-dessous :
-      </p>
-      <div class="grid md:grid-cols-2 gap-8 justify-between pt-4 pb-10">
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-impot-sur-le-revenu.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Dépôts du simulateur impôt sur le revenu&nbsp;:
-          </p>
-
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2">
-              Interface utilisateur :<br />
-              <a
-                href=" https://git.leximpact.dev/leximpact/leximpact-client"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/leximpact-client</a
-              > ;
-            </li>
-            <li class="leading-normal pb-2">
-              Arrière-plan :<br />
-              <a
-                href="https://git.leximpact.dev/leximpact/leximpact-prepare-data"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/leximpact-prepare-data</a
-              > ;
-            </li>
-            <li class="leading-normal pb-2">
-              Traitement des données :<br />
-              <a
-                href=" https://git.leximpact.dev/leximpact/leximpact-server"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/leximpact-server</a
-              >.
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-dotations-communes.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Dépôts du simulateur des dotations aux communes&nbsp;:
-          </p>
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2">
-              Interface utilisateur :<br />
-              <a
-                href=" https://git.leximpact.dev/leximpact/leximpact-client"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/leximpact-client</a
-              > ;
-            </li>
-            <li class="leading-normal pb-2">
-              Arrière-plan :<br />
-              <a
-                href="https://git.leximpact.dev/leximpact/leximpact-prepare-data"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/openfisca-france-dotations-locales</a
-              >
-              ;
-              <p class="font-extralight">
-                Traitement des données (Package Python appelé par le
-                leximpact-serveur) :
-              </p>
-              <a
-                href="https://git.leximpact.dev/leximpact/openfisca-france-dotations-locales"
-                class="text-gray-500 font-extralight underline hover:text-le-bleu"
-              >
-                https://git.leximpact.dev/leximpact/openfisca-france-dotations-locales</a
-              > ;
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-affaires-sociales.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Dépôts du simulateur Cotisations & prestations sociales&nbsp;:
-          </p>
-          <div class="pt-3">
-            <TextUnderconstructionMessage />
-          </div>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-circo-data.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">Dépôts du produit "Circo Data"&nbsp;:</p>
-          <div class="pt-3">
-            <TextUnderconstructionMessage />
-          </div>
-        </div>
-      </div>
-      <div class="mt-10 flex justify-end">
-        <a
-          href="/comment-fonctionnent-les-simulateurs"
-          class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-        text-black shadow-md hover:bg-gray-400"
-        >
-          <!-- material icons - Arrow forward -->
-          <svg
-            class="flex mr-2 items-center"
-            xmlns="http://www.w3.org/2000/svg"
-            height="24px"
-            viewBox="0 0 24 24"
-            width="24px"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
-            /></svg
-          >
-          Comment fonctionnent les simulateurs LexImpact ?
-        </a>
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/cgu-simulateur-acces-libre.svelte b/src/routes/cgu-simulateur-acces-libre.svelte
deleted file mode 100644
index d88205450ff2ea395c7302bad7c5d286ab055a36..0000000000000000000000000000000000000000
--- a/src/routes/cgu-simulateur-acces-libre.svelte
+++ /dev/null
@@ -1,202 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-</script>
-
-<svelte:head>
-  <title
-    >Conditions d'utilisation de la partie en accès libre des simulateurs| {$session.title}</title
-  >
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md p-10">
-    <div class="">
-      <h1 class="font-serif font-bold pt-7 pb-3 text-3xl text-gray-700">
-        Conditions d'utilisation de la partie <br />en accès libre des
-        simulateurs
-      </h1>
-      <a
-        href="/cgu"
-        class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-text-black shadow-md hover:bg-gray-400"
-      >
-        <!-- material icons - Arrow Back -->
-        <svg
-          class="flex mr-2 items-center"
-          xmlns="http://www.w3.org/2000/svg"
-          height="24px"
-          viewBox="0 0 24 24"
-          width="24px"
-          fill="#000000"
-          ><path d="M0 0h24v24H0z" fill="none" /><path
-            d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-          /></svg
-        >
-        Conditions d'utilisations générales
-      </a>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.1. Vocabulaire
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        « Nous » se réfère à l'éditeur des simulateurs LexImpact en accès libre.<br
-        /> « Vous » se réfère à un usager ou une usagère des simulateurs en accès
-        libre.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.2. Conditions d'accès au service
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        La partie en accès libre des simulateurs est disponible à l'adresse
-        <a href="https://leximpact.an.fr/"> leximpact.an.fr </a>
-        . Son utilisation est gratuite et facultative.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Si vous effectuez une simulation, vous acceptez ces conditions
-        d'utilisation, comme indiqué dans l'Article L. 112-9 du Code des
-        relations entre le public et l'administration.
-        <br />
-        <br />L'utilisation du service requiert une connexion internet et un
-        navigateur récent, les simulateurs LexImpact ne fonctionnent pas sur
-        Internet Explorer. Vous pouvez installer en autonomie Chrome ou Firefox,
-        sans droits d'administration sur votre poste.
-        <br />
-        <br />Nous nous réservons le droit de bloquer, sans information
-        préalable ni compensation financière, les usages mettant en péril
-        l'utilisation du logiciel par d'autres usagers. Cela nous permet
-        d'anticiper d'éventuelles attaques par déni de service.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.3. Vos données
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Lors de l'utilisation du service, la partie en accès libre du site
-        internet LexImpact ne vous demande ni ne stocke d'information nominative
-        telle que noms, prénoms ou adresses.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous nous engageons à ne jamais exploiter les informations que vous nous
-        transmettrez dans un but commercial ou publicitaire. De manière
-        générale, LexImpact n'accepte aucune forme de publicité.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le but d'évaluer la performance du service et son utilité, nous
-        collectons également des données anonymes d'audience, indépendamment des
-        simulations effectuées.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.4. Cookies pour sauvegarder vos cas types
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous utilisons des cookies persistants afin d'améliorer l'expérience
-        utilisateur. Ils permettent notamment la sauvegarde de vos cas types.
-        Ces cookies sont conservés sur votre ordinateur même après fermeture de
-        votre navigateur et réutilisé lors des prochaines visites sur nos sites.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify font-bold">
-        Le contenu des simulations que vous effectuez n'est en aucun cas tracé.
-        C'est à dire que nous n'utilisons pas de cookies qui nous permettraient
-        de reconstituer les paramètres d'une simulation et de l'associer à un
-        visiteur.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.5. Absence de garantie de service
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous mettons les simulateurs LexImpact à disposition sans garantie sur
-        leur disponibilité, avec obligation de moyens et non de résultats. Cela
-        signifie que d'éventuelles indisponibilités n'ouvriront pas droit à
-        compensation financière.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.6. Absence de garantie de résultat
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Les résultats calculés par ce simulateur ont une valeur informative et
-        ne présentent en aucun cas une garantie pour l'usager.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        La simulation d'impact sur cas type dépend à la fois de l’interface des
-        simulateurs LexImpact mais également des mises à jour régulières d'<a
-          class="underline hover:text-le-bleu"
-          href="https://fr.openfisca.org/">OpenFisca</a
-        >. Dès qu'une loi est modifiée, les équipes contributrices et bénévoles
-        d’OpenFisca se chargent de faire évoluer le code informatique pour qu'il
-        fonctionne selon la nouvelle réglementation en vigueur. Nous ne pouvons
-        garantir le délai de cette mise à jour.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Les simulateurs LexImpact ne sont pas des calculateurs de situation
-        individuelle, ce sont des outils de chiffrage conçus pour évaluer les
-        impacts d'une réforme. Les résultats calculés par ce simulateur ont une
-        valeur informative et ne représentent en aucun cas une décision
-        d'ouverture de droits.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">8.7. Évolutions</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons faire évoluer les simulateurs LexImpact sans information
-        préalable. Nous ajoutons régulièrement des variables, raffinons
-        l'interface et modifions des formulations sur la base de vos retours et
-        des évolutions règlementaires.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons suspendre l'accès aux simulateurs sans information
-        préalable, notamment pour des raisons de maintenance. Nous mettons
-        l'application à jour plusieurs fois par mois. L'indisponibilité ne
-        dépasse généralement pas une dizaine de secondes.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons aussi amender ces conditions d'utilisation sans préavis.
-        Les utilisateurs sont tenus de consulter régulièrement les CGU à jour.
-      </p>
-
-      <div class="flex justify-between mt-16">
-        <a
-          href="/cgu"
-          class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-        text-black shadow-md hover:bg-gray-400"
-        >
-          <!-- material icons - Arrow Back -->
-          <svg
-            class="flex mr-2 items-center"
-            xmlns="http://www.w3.org/2000/svg"
-            height="24px"
-            viewBox="0 0 24 24"
-            width="24px"
-            fill="#000000"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-            /></svg
-          >
-          Conditions d'utilisations générales
-        </a>
-        <a
-          href="/cgu-simulateur-acces-restreint"
-          class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-        text-black shadow-md hover:bg-gray-400"
-        >
-          <!-- material icons - Arrow forward -->
-          <svg
-            class="flex mr-2 items-center"
-            xmlns="http://www.w3.org/2000/svg"
-            height="24px"
-            viewBox="0 0 24 24"
-            width="24px"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
-            /></svg
-          >
-          CGU simulateur partie en accès restreint
-        </a>
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/cgu-simulateur-acces-restreint.svelte b/src/routes/cgu-simulateur-acces-restreint.svelte
deleted file mode 100644
index c9c8927ea7ad8f4c2198fab5b324b7687a09309f..0000000000000000000000000000000000000000
--- a/src/routes/cgu-simulateur-acces-restreint.svelte
+++ /dev/null
@@ -1,338 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-</script>
-
-<svelte:head>
-  <title
-    >Conditions d'utilisation de la partie en accès restreint des simulateurs| {$session.title}</title
-  >
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md p-10">
-    <div class="  ">
-      <h1 class="font-serif font-bold pt-7 pb-3 text-3xl text-gray-700">
-        Conditions d'utilisation de la partie <br />en accès restreint des
-        simulateurs
-      </h1>
-      <a
-        href="/cgu"
-        class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-  text-black shadow-md hover:bg-gray-400"
-      >
-        <!-- material icons - Arrow Back -->
-        <svg
-          class="flex mr-2 items-center"
-          xmlns="http://www.w3.org/2000/svg"
-          height="24px"
-          viewBox="0 0 24 24"
-          width="24px"
-          fill="#000000"
-          ><path d="M0 0h24v24H0z" fill="none" /><path
-            d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-          /></svg
-        >
-        Conditions d'utilisations générales
-      </a>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.1. Vocabulaire
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        « Nous » se réfère à l'éditeur des simulateurs LexImpact en accès
-        restreint.<br /> « Vous » se réfère à une usagère et un usager des simulateurs
-        en accès restreint.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.2. Conditions d'accès au service
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Pour fournir les impacts agrégés sur le budget de l’État et leurs effets
-        sur des déciles de population, LexImpact s’appuie sur différentes bases
-        de données, dont les services producteurs sont l'INSEE, la DGFIP et
-        l'URSSAF Caisse nationale. Ces données sont couvertes par des secrets
-        protégés par la loi, et notamment le secret statistique.
-      </p>
-
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le cadre de ces partenariats et afin de préserver le secret
-        statistique, seules les personnes dûment habilitées ci-dessous sont
-        autorisées à accéder aux simulateurs en accès restreint
-      </p>
-      <ul class="list-inside list-disc">
-        <li class="leading-normal pb-2 text-base text-justify">
-          les députés et députées de l’Assemblée nationale,
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          leurs collaborateurs et collaboratrices parlementaires,
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          les administrateurs et administratrices de l’Assemblée nationale,
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          un échantillon restreint d'utilisateurs et utilisatrices au Sénat pour
-          expérimentation.
-        </li>
-      </ul>
-      <p class="leading-normal pb-3 text-base text-justify font-bold">
-        Les habilitations sont accordées et sous le contrôle exclusif des
-        services de l’Assemblée nationale et des députés et députées.
-      </p>
-
-      <p class="leading-normal pt-5 pb-3 text-base text-justify font-bold">
-        Si vous faites partie des personnes telles que listées au paragraphe
-        précédent et que vous n'arrivez pas à vous connecter à la partie des
-        simulateurs en accès restreint :
-      </p>
-      <ul class="pl-10 list-outside list-decimal">
-        <li class="leading-normal pb-2 text-base text-justify">
-          Veuillez vérifier que vous avez bien utilisé votre adresse mail
-          professionnelle de l'Assemblée nationale ou du Sénat. Les noms de
-          domaine autorisés sont présents par défaut dans l'interface de
-          connexion.
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          Veuillez vérifier que vous n'avez pas fait une erreur de frappe, ou
-          que vous n'avez pas écrit votre adresse mail en entier. Seule la
-          partie précédent le @nom-de-domaine vous est en réalité demandée.
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          En dernier recours, n'hésitez pas à nous envoyer une demande par le
-          biais du formulaire de contact.
-        </li>
-      </ul>
-      <p class="leading-normal pt-5 pb-3 text-base text-justify font-bold">
-        Si vous ne faites pas partie des personnes habilitées, que vous
-        participez professionnellement à l'élaboration de la loi et que vous
-        souhaitez accéder au service :
-      </p>
-      <ul class="pl-10 list-outside list-decimal">
-        <li class="leading-normal pb-2 text-base text-justify">
-          L'accord des services producteur est indispensable pour étendre
-          l'accès à la partie restreinte des simulateurs à tout nouvel
-          organisme.
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          Merci de bien vouloir nous écrire à l'adresse mail suivante :
-          <a
-            class="underline text-le-bleu hover:text-le-bleu"
-            href="mailto:leximpact@an.fr">leximpact@an.fr</a
-          > en indiquant dans l'objet « demande d’accès simulateurs partie restreinte
-          ».
-        </li>
-        <p class="leading-normal  pb-3 text-base text-justify font-bold">
-          L'envoi de cette demande ne vaut en aucun cas garantie d'une
-          acceptation d'habilitation.
-        </p>
-      </ul>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.3. Vos engagements en utilisant la partie en accès restreint
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Il est absolument nécessaire de préserver la confidentialité des données
-        auxquelles le service vous donne accès. Toute violation de cette
-        confidentialité vous expose à des sanctions pénales comme stipulées dans
-        l’<a
-          class="underline hover:text-le-bleu"
-          href="https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006417945/"
-          >Article 226-13 du Code pénal</a
-        >.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.4. Vos données
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le cadre du partenariat avec les services producteurs et afin de
-        préserver le secret statistique, la liste des personnes ayant accès à
-        l'outil de simulation est stockée, tenue à jour en permanence et
-        transmise régulièrement aux services producteurs (INSEE, DGFIP, URSSAF
-        Caisse nationale).
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Pour accéder au service en accès restreint, LexImpact vous demande votre
-        adresse mail. Afin d'éviter les usages abusifs, LexImpact conserve
-        également des données sur le nombre de simulations sur la population
-        effectuées par usager. Ces informations ne seront en aucun cas utilisées
-        pour d'autres fins ou revendues à un tiers.
-      </p>
-
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous nous engageons à ne jamais exploiter les informations que vous nous
-        transmettrez dans un but commercial ou publicitaire. De manière
-        générale, LexImpact n'accepte aucune forme de publicité.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le but d'évaluer la performance du service et son utilité, nous
-        collectons également des données anonymes d'audience, indépendamment des
-        simulations effectuées.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">8.5. Cookies</h2>
-
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous utilisons des cookies persistants afin d'améliorer l'expérience
-        utilisateur. Ils permettent notamment la sauvegarde de vos cas types.
-        Ces cookies sont conservés sur votre ordinateur même après fermeture de
-        votre navigateur et réutilisé lors des prochaines visites sur nos sites.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify font-bold">
-        Pour éviter toute utilisation abusive du service, LexImpact conserve le
-        nombre de simulations sur la population effectuées par usager.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify font-bold">
-        Le contenu des simulations que vous effectuez n'est en aucun cas tracé.
-        C'est à dire que nous n'utilisons pas de cookies qui nous permettraient
-        de reconstituer les paramètres d'une simulation et de l'associer à un
-        visiteur.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.6. Absence de garantie de service
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous mettons les simulateurs LexImpact à disposition sans garantie sur
-        leur disponibilité, avec obligation de moyens et non de résultats. Cela
-        signifie que d'éventuelles indisponibilités n'ouvriront pas droit à
-        compensation financière.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8.7. Absence de garantie de résultat
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Les résultats calculés par ce simulateur ont une valeur informative et
-        ne présentent en aucun cas une garantie pour l'usager.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        La simulation d'impact sur le budget de l'État ou sur la population
-        dépendent à la fois :
-      </p>
-      <ul class="list-inside list-disc">
-        <li class="leading-normal pb-2 text-base text-justify">
-          de la qualité et de la fraicheur des données représentatives de la
-          population ;
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          des mises à jour régulières du moteur de calcul, <a
-            class="underline hover:text-le-bleu"
-            href="https://fr.openfisca.org/">OpenFisca</a
-          >;
-        </li>
-        <li class="leading-normal pb-5 text-base text-justify">
-          de l’interface des simulateurs LexImpact.
-        </li>
-      </ul>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous nous basons sur les dernières données disponibles, cependant elles
-        ont environs 3 ans de décalage. Nous faisons notre possible pour les
-        rendre cohérente avec l'année passée. De plus, nous n'intégrons pas la
-        réaction des acteurs aux changements de la loi, par exemple les emplois
-        supplémentaires que créerait une réduction des cotisations employeur.
-        Les chiffres communiqués doivent donc être pris comme des ordres de
-        grandeur plutôt que comme des estimations économiques précises.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Au delà de ce premier éléments, les données représentatives de la
-        population ont également besoin d'être mises à jour pour rester
-        représentatives. L'obtention et le traitement des nouveaux millésimes
-        représentent un travail conséquent. Nous ne pouvons garantir le délai de
-        cette mise à jour.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Par ailleurs, dès qu'une loi est modifiée, les équipes contributrices et
-        bénévoles d’OpenFisca se chargent de faire évoluer le code informatique
-        pour qu'il fonctionne selon la nouvelle réglementation en vigueur. Nous
-        ne pouvons garantir le délai de cette mise à jour.
-      </p>
-
-      <p class="leading-normal pb-3 text-base text-justify">
-        Les simulateurs LexImpact ne sont pas des calculateurs de situation
-        individuelle, ce sont des outils de chiffrage conçus pour évaluer les
-        impacts d'une réforme. Les résultats calculés par ce simulateur ont une
-        valeur informative et ne représentent en aucun cas une décision
-        d'ouverture de droits.
-      </p>
-
-      <a
-        href="/cgu"
-        class="inline-flex items-center bg-le-bleu-light mb-5 p-1 pl-2 text-xs rounded
-hover:text-white shadow-md hover:bg-le-bleu"
-      >
-        Comment fonctionnent les simulateurs LexImpact ?
-        <!-- material icons - Arrow forward -->
-        <svg
-          class="flex items-center text-black hover:text-white fill-current "
-          xmlns="http://www.w3.org/2000/svg"
-          height="24px"
-          viewBox="0 0 24 24"
-          width="24px"
-          ><path d="M0 0h24v24H0z" fill="none" /><path
-            d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
-          /></svg
-        >
-      </a>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">8.8. Évolutions</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons faire évoluer les simulateurs LexImpact sans information
-        préalable. Nous ajoutons régulièrement des variables, raffinons
-        l'interface et modifions des formulations sur la base de vos retours et
-        des évolutions règlementaires.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons suspendre l'accès aux simulateurs sans information
-        préalable, notamment pour des raisons de maintenance. Nous mettons
-        l'application à jour plusieurs fois par mois. L'indisponibilité ne
-        dépasse généralement pas une dizaine de secondes.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons aussi amender ces conditions d'utilisation sans préavis.
-        Les utilisateurs sont tenus de consulter régulièrement les CGU à jour.
-      </p>
-      <div class="flex justify-between mt-16">
-        <a
-          href="/cgu"
-          class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-        text-black shadow-md hover:bg-gray-400"
-        >
-          <!-- material icons - Arrow Back -->
-          <svg
-            class="flex mr-2 items-center"
-            xmlns="http://www.w3.org/2000/svg"
-            height="24px"
-            viewBox="0 0 24 24"
-            width="24px"
-            fill="#000000"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"
-            /></svg
-          >
-          Conditions d'utilisations générales
-        </a>
-        <a
-          href="/cgu-simulateur-acces-libre"
-          class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-xs rounded
-        text-black shadow-md hover:bg-gray-400"
-        >
-          <!-- material icons - Arrow forward -->
-          <svg
-            class="flex mr-2 items-center"
-            xmlns="http://www.w3.org/2000/svg"
-            height="24px"
-            viewBox="0 0 24 24"
-            width="24px"
-            ><path d="M0 0h24v24H0z" fill="none" /><path
-              d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
-            /></svg
-          >
-          CGU simulateur partie en accès libre
-        </a>
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/cgu.svelte b/src/routes/cgu.svelte
deleted file mode 100644
index 6eb8527ae5f39906c5ebaa30ec11fb873a70c2d0..0000000000000000000000000000000000000000
--- a/src/routes/cgu.svelte
+++ /dev/null
@@ -1,410 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-
-  let openTab = 1
-
-  function toggleTabs(tabNumber) {
-    openTab = tabNumber
-  }
-</script>
-
-<svelte:head>
-  <title>Conditions d'utilisation | {$session.title}</title>
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md p-10">
-    <div class=" ">
-      <h1 class="font-serif font-bold pt-7 pb-3 text-3xl text-gray-700">
-        Conditions générales d'utilisation
-      </h1>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        1. Présentation générale
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Ce site internet est mis en oeuvre par le service LexImpact de
-        l'Assemblée nationale. Il donne accès à différents services :
-      </p>
-      <ul class="list-inside list-disc">
-        <li class="leading-normal pb-2 text-base text-justify">
-          des simulateurs permettant d'évaluer, de façon rapide, l'impact de
-          réformes paramétriques sur différents dispositifs de la loi ;
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          des interfaces permettant d'accéder à différentes ressources de
-          données ;
-        </li>
-        <li class="leading-normal pb-2 text-base text-justify">
-          des formulaires de contacts pour faire une demande de chiffrage à
-          l'équipe ou prendre rendez-vous.
-        </li>
-      </ul>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">2. Vocabulaire</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        « Nous » se réfère à l'éditeur des interfaces LexImpact disponibles sur
-        leximpact.an.fr. <br />« Vous » se réfère à une usagère ou un usager du
-        site internet LexImpact.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">3. Utilisation</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Si vous naviguez sur le site internet leximpact.an.fr, vous acceptez ces
-        conditions d'utilisation, comme indiqué dans l'<a
-          class="underline hover:text-le-bleu"
-          href="https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000031367350/"
-        >
-          Article L. 112-9 du Code des relations entre le public et
-          l'administration
-        </a>.
-        <br /><br />L'utilisation du site internet est gratuite et facultative.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Certains services de LexImpact, notamment les simulateurs, requièrent
-        une connexion internet et un navigateur récent, et ne fonctionnent pas
-        sur Internet Explorer. Vous pouvez installer en autonomie Chrome ou
-        Firefox, sans droits d'administration sur votre poste.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">4. Vos données</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le cas où vous auriez une demande ou bien un retour d’expérience à
-        nous partager, nous vous invitons à nous écrire à l'adresse <a
-          class="underline hover:text-le-bleu"
-          href="mailto:leximpact@an.fr">leximpact@an.fr</a
-        > Dans ce cadre, nous nous engageons à ne conserver que les données anonymisées
-        de nos échanges. Ces informations nous permettront d'améliorer le service.
-        Toutes les données directement identifiantes (nom, adresse, …) seront supprimées
-        dans un délai d’un an.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Certains services LexImpact, notamment la partie en accès restreint des
-        simulateurs, sont amenés à collecter plus d'informations vous
-        concernant. L'ensemble des données collectées et leur traitement est
-        explicité dans les CGU spécifiques de ces services.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous nous engageons à ne jamais exploiter les informations que vous nous
-        transmettrez dans un but commercial ou publicitaire. De manière
-        générale, LexImpact n'accepte aucune forme de publicité.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Dans le but d'évaluer la performance du service et son utilité, nous
-        collectons également des données anonymes d'audience.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">5. Cookies</h2>
-      <h3 class="pb-5 pt-2 text-base text-black font-bold">
-        Des cookies de mesure d'audience pour améliorer le service
-      </h3>
-      <p class="leading-normal pb-3 text-base text-justify">
-        LexImpact dépose des cookies de mesure d’audience (nombre de visites,
-        pages consultées), respectant les conditions d’exemption du consentement
-        de l’internaute définies par la recommandation <a
-          class="underline hover:text-le-bleu"
-          href="https://www.cnil.fr/fr/cookies-solutions-pour-les-outils-de-mesure-daudience"
-          >Cookies</a
-        > de la Commission nationale informatique et libertés (CNIL).
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Il utilise
-        <a class="underline hover:text-le-bleu" href="https://fr.matomo.org/"
-          >Matomo</a
-        >
-        , un outil libre, paramétré pour ce faire. Cela signifie, notamment, que
-        ces cookies ne servent qu’à la production de statistiques anonymes et ne
-        permettent pas de suivre la navigation de l’internaute sur d’autres sites.
-      </p>
-      <h3 class="pb-5 pt-2 text-base text-black font-bold">
-        D'autres cookies selon les services utilisés
-      </h3>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous utilisons des cookies persistants afin d'améliorer l'expérience
-        utilisateur, ces cookies persistants varient selon les services, et sont
-        spécifiés dans les conditions générales d'utilisations spécifiques aux
-        différents services, disponibles ci-après.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        6. Absence de garantie de service
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous mettons le site internet LexImpact et ses services à disposition,
-        sans garantie sur leur disponibilité, avec obligation de moyens et non
-        de résultats. Cela signifie que d'éventuelles indisponibilités
-        n'ouvriront pas droit à compensation financière.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">7. Évolutions</h2>
-
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons faire évoluer le site internet LexImpact sans information
-        préalable.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons suspendre l'accès au site et à ses services sans
-        information préalable, notamment pour des raisons de maintenance. Nous
-        mettons l'application à jour plusieurs fois par mois. L'indisponibilité
-        ne dépasse généralement pas une dizaine de secondes.
-      </p>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Nous pouvons aussi amender ces conditions d'utilisation sans préavis.
-        Les utilisateurs sont tenus de consulter régulièrement les CGU à jour.
-      </p>
-
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-        8. Conditions d'utilisation spécifiques aux différents services
-      </h2>
-
-      <div class="flex flex-wrap">
-        <div class="w-full">
-          <ul class="flex mb-0 list-none flex-wrap pt-3 pb-0 flex-row">
-            <li class="-mb-px mr-2 last:mr-0 flex-auto text-center">
-              <!-- svelte-ignore a11y-missing-attribute -->
-              <a
-                class="text-base font-bold uppercase px-5 py-3 shadow-lg rounded block leading-normal {openTab ===
-                1
-                  ? 'text-black bg-white'
-                  : 'text-gray-600 bg-gray-100'}"
-                on:click={() => toggleTabs(1)}
-              >
-                Simulateurs
-              </a>
-            </li>
-            <!--
-            <li class="-mb-px mr-2 last:mr-0 flex-auto text-center">
-
-              <a
-                class="text-base font-bold uppercase px-5 py-3 shadow-lg rounded block leading-normal {openTab ===
-                2
-                  ? 'text-black bg-white'
-                  : 'text-gray-600 bg-gray-100'}"
-                on:click={() => toggleTabs(2)}
-              >
-                Ressources
-              </a>
-            </li>
-          -->
-            <li class="-mb-px mr-2 last:mr-0 flex-auto text-center">
-              <!-- svelte-ignore a11y-missing-attribute -->
-              <a
-                class="text-base font-bold uppercase px-5 py-3 shadow-lg rounded block leading-normal {openTab ===
-                3
-                  ? 'text-black bg-white'
-                  : 'text-gray-600 bg-gray-100'}"
-                on:click={() => toggleTabs(3)}
-              >
-                Formulaires
-              </a>
-            </li>
-          </ul>
-          <div
-            class="relative flex flex-col min-w-0 break-words bg-white w-full mb-6 shadow-lg rounded"
-          >
-            <div class="px-8 py-5 flex-auto">
-              <div class="tab-content tab-space">
-                <div class={openTab === 1 ? "block" : "hidden"}>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Les simulateurs LexImpact se déclinent en deux parties
-                    distinctes qui s'adressent à deux usagers différents :
-                  </p>
-                  <ul class="list-inside list-disc">
-                    <li class="leading-normal pb-2 text-base text-justify">
-                      une partie du service est en accès libre, accessible au
-                      grand public.
-                    </li>
-                    <li class="leading-normal pb-2 text-base text-justify">
-                      une partie du service est en accès restreint, une
-                      connexion est requise. Seules les personnes dûment
-                      habilitées participant à l'élaboration de la loi.
-                    </li>
-                  </ul>
-                  <div class="flex justify-between space-x-10">
-                    <div class="w-1/2">
-                      <h2 class="pb-5 pt-10 text-xl text-black font-bold">
-                        Partie en accès libre
-                      </h2>
-
-                      <p class="leading-normal pb-3 text-base text-justify">
-                        La partie en accès libre des simulateurs LexImpact
-                        permet à toutes et tous de simuler les impacts d'une
-                        réforme sur des cas types.
-                        <b />Ces estimations permettent d'évaluer l'impact d'une
-                        modification de la loi sur une entité fictive. Elles ne
-                        s'appuient pas sur des données représentatives de la
-                        populations française.
-                      </p>
-                      <p
-                        class="leading-normal pb-3 text-base font-bold text-justify"
-                      >
-                        Les simulateurs LexImpact ne vous permettent pas de
-                        simuler votre situation personnelle.
-                      </p>
-
-                      <p class="leading-normal pb-3 text-base text-justify">
-                        Concernant le simulateur des
-                        <a
-                          class="underline hover:text-le-bleu"
-                          href="https://leximpact.an.fr/dotations"
-                          >dotations aux communes</a
-                        >, les données représentatives de la population
-                        française étant ouvertes, le simulateur est entièrement
-                        en accès libre et permet donc, à toutes et tous, de
-                        simuler les impacts macros d'une réforme sur la
-                        population et les recettes de l'État.
-                      </p>
-                      <p
-                        class="leading-normal pb-3 text-base font-bold text-justify"
-                      >
-                        L'utilisation de cette partie du service est libre,
-                        facultative et gratuite.
-                      </p>
-                      <p class="leading-normal pb-3 text-base text-justify">
-                        Toute utilisation du service est subordonnée à
-                        l'acceptation préalable et au respect intégral des
-                        conditions générales d'utilisation (CGU) de cette page
-                        et de celles disponibles ci-après :
-                      </p>
-                      <a
-                        href="/cgu-simulateur-acces-libre"
-                        class="inline-flex text-center border-2 bg-le-bleu-light mb-5 p-2 text-base rounded-lg
-                  text-black shadow-md hover:bg-le-bleu hover:text-white"
-                      >
-                        Conditions d'utilisation <br /> de la partie en accès libre
-                      </a>
-                    </div>
-                    <div class="w-1/2">
-                      <h2 class="pb-5 pt-10 text-xl text-black font-bold">
-                        Partie en accès restreint
-                      </h2>
-                      <p
-                        class="leading-normal pb-3 text-base font-bold text-justify"
-                      >
-                        La version en accès restreint de LexImpact est
-                        uniquement accessible à des personnes habilitées,
-                        parties prenantes de l'élaboration de la loi.
-                      </p>
-
-                      <p class="leading-normal pb-3 text-base text-justify">
-                        Cette partie donne accès aux simulations disponibles sur
-                        la population et le budget de l'État ; calculées à
-                        partir de données représentatives de la population,
-                        couvertes par des secrets protégés par la loi. Ainsi,
-                        seules les personnes dûment habilitées peuvent y avoir
-                        accès.
-                      </p>
-                      <p
-                        class="leading-normal pb-3 text-base font-bold text-justify"
-                      >
-                        L'utilisation de cette partie du service est également
-                        facultative et gratuite.
-                      </p>
-                      <p class="leading-normal pb-3 text-base text-justify">
-                        Toute utilisation du service est subordonnée à
-                        l'acceptation préalable et au respect intégral des
-                        conditions générales d'utilisation (CGU),de cette page
-                        et de celles disponibles ci-après :
-                      </p>
-                      <a
-                        href="/cgu-simulateur-acces-restreint"
-                        class="inline-flex text-center border-2 bg-le-bleu-light mb-5 p-2 text-base rounded-lg
-                text-black shadow-md hover:bg-le-bleu hover:text-white"
-                      >
-                        Conditions d'utilisation <br /> de la partie en accès restreint
-                      </a>
-                    </div>
-                  </div>
-                </div>
-
-                <!-- CGU ressources des données -->
-                <!--
-                <div class={openTab === 2 ? "block" : "hidden"}>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Suspendisse potenti. Ut sit amet porta turpis. Pellentesque
-                    habitant morbi tristique senectus et netus et malesuada
-                    fames ac turpis egestas. Nunc posuere ipsum nec ligula
-                    molestie dapibus. In molestie, neque id cursus elementum,
-                    lorem velit interdum enim, non hendrerit quam est in neque.
-                    Duis in tincidunt velit. Nullam a augue eget mi sodales
-                    malesuada. Vestibulum congue massa quam, non tristique orci
-                    vestibulum a. Nam et tortor diam.
-                    <br />
-                    <br />
-                    Suspendisse potenti. Ut sit amet porta turpis. Pellentesque habitant
-                    morbi tristique senectus et netus et malesuada fames ac turpis
-                    egestas. Nunc posuere ipsum nec ligula molestie dapibus.
-                  </p>
-                </div>
-                -->
-                <!-- CGU Formulaires -->
-                <div class={openTab === 3 ? "block" : "hidden"}>
-                  <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-                    8.1. Conditions d'accès au service
-                  </h2>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Le formulaire de demande de chiffrage est disponible
-                    <a
-                      class="underline hover:text-le-bleu"
-                      href="https://limesurvey.leximpact.dev/index.php/254182?lang=fr"
-                    >
-                      en suivant ce lien
-                    </a>
-                    .
-                  </p>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Son utilisation est gratuite et facultative.
-                  </p>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Comme indiqué sur le site, ce formulaire s'adresse aux
-                    personnes rattachées à l'Assemblée nationale : députés,
-                    collaborateurs et administrateurs.
-                  </p>
-
-                  <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">
-                    8.2. Vos données
-                  </h2>
-                  <h3 class="pb-2  pt-5 text-base text-black font-bold">
-                    Vous êtes rattaché à l'Assemblée nationale
-                  </h3>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Nous mettons à disposition un formulaire de contact vous
-                    permettant de décrire une demande spécifique de chiffrage.
-                  </p>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Ces informations seront gardées le temps du traitement de
-                    votre demande et pour une durée de trois ans maximum, dans
-                    l'objectif de pouvoir mieux répondre à vos besoins.
-                  </p>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Nous nous engageons à ne jamais exploiter les informations
-                    que vous nous transmettrez dans un but commercial ou
-                    publicitaire.
-                  </p>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Vous pouvez à tout moment nous demander de supprimer vos
-                    coordonnées de contact en écrivant à <a
-                      class="hover:text-le-bleu underline"
-                      href="mailto:leximpact@an.fr">leximpact@an.fr</a
-                    >.
-                  </p>
-                  <h3 class="pb-2 pt-5 text-base text-black font-bold">
-                    Vous n'êtes pas rattaché à l'Assemblée nationale
-                  </h3>
-                  <p class="leading-normal pb-3 text-base text-justify">
-                    Ce service ne vous étant pas adressé, l'ensemble des données
-                    adressées seront supprimées directement.
-                  </p>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/comment-fonctionnent-les-simulateurs.svelte b/src/routes/comment-fonctionnent-les-simulateurs.svelte
deleted file mode 100644
index 97d6b49297a901f23d8cb15b99df06aab1c6c20b..0000000000000000000000000000000000000000
--- a/src/routes/comment-fonctionnent-les-simulateurs.svelte
+++ /dev/null
@@ -1,451 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-  import PictoFemme from "$lib/components/pictos/PictoFemme.svelte"
-  import PictoEtat from "$lib/components/pictos/PictoEtat.svelte"
-  import PictoEntreprise from "$lib/components/pictos/PictoEntreprise.svelte"
-  import TextUnderconstructionMessage from "$lib/components/transverse_pages/TextUnderconstructionMessage.svelte"
-</script>
-
-<svelte:head>
-  <title>Comment fonctionne les simulateurs LexImpact| {$session.title}</title>
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md  ">
-    <div class="p-10 text-base">
-      <h1 class="font-serif font-bold pt-7 pb-10 text-3xl text-gray-700">
-        Comment fonctionne les simulateurs LexImpact ?
-      </h1>
-      <h2 class="text-xl text-gray-700 font-bold pb-3">
-        1. Ce que les simulateurs permettent d'estimer
-      </h2>
-      <p class="leading-normal pb-3 text-justify ">
-        LexImpact propose déjà deux simulateurs permettant d’estimer les impacts
-        d’une <span class="font-bold">réforme paramétrique sur </span>
-        <a
-          class="font-bold underline hover:text-le-bleu"
-          href="https://leximpact.an.fr/ir">l’impôt sur le revenu</a
-        >
-        et sur une partie des
-        <a
-          class="underline font-bold hover:text-le-bleu"
-          href="https://leximpact.an.fr/ir">dotations aux communes</a
-        >. Au travers de ces deux interfaces, l’utilisateur peut estimer, en
-        moins d’une minute, l’impact sur des cas types qu’il aura configurés, ou
-        bien sur le budget de l’État et plus généralement sur la population
-        française.
-      </p>
-      <p class="leading-normal pb-3 text-justify ">
-        En 2021, LexImpact développe un <span class="font-bold"
-          >nouveau simulateur dans le périmètre des cotisations & prestations
-          sociales</span
-        >.
-        <br />
-        Le simulateur permettra, pour le prochain projet de loi de financement de
-        la sécurité sociale, d’estimer l’effet d’une réforme paramétrique sur des
-        dispositions relatives aux cotisations sociales, patronales et salariales,
-        à la CSG, la CRDS et aux exonérations, sur des cas types de salariés du secteur
-        privé. Il sera aussi possible d’estimer les conséquences de modifications
-        relatives à la CSG sur le budget de l’État et de la sécurité sociale.
-      </p>
-
-      <div class="grid md:grid-cols-2 gap-8 justify-between pt-4">
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-impot-sur-le-revenu.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Le simulateur de l'impôt sur le revenu permet d'estimer les impacts
-            sur&nbsp;:
-          </p>
-
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2">
-              des foyers fiscaux types configurables&nbsp;;
-            </li>
-            <li class="leading-normal pb-2">les recettes de l'État&nbsp;;</li>
-            <li class="leading-normal pb-2">
-              les recettes par décile de population&nbsp;;
-            </li>
-            <li class="leading-normal pb-2">
-              le nombre de foyers fiscaux touchés par la réforme.
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-dotations-communes.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Le simulateur des dotations aux communes permet d'estimer les
-            impacts sur&nbsp;:
-          </p>
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2 ">
-              chaque commune de France&nbsp;;
-            </li>
-            <li class="leading-normal pb-2">
-              chaque strate démographique de communes.
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-affaires-sociales.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Le simulateur des cotisations & prestations sociales permet
-            d'estimer les impacts sur&nbsp;:
-          </p>
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2">
-              des cas types de salariés du secteur privé ;
-            </li>
-            <li class="leading-normal pb-2">
-              les recettes de l'État et de la Sécurité sociale concernant la CSG
-              et la CRDS.
-            </li>
-          </ul>
-        </div>
-      </div>
-
-      <div class="flex items-center pb-3 pt-10 ">
-        <h3 class="text-xl text-gray-700 font-light">
-          Des impacts sur cas type
-        </h3>
-        <div class="mx-2">
-          <PictoFemme />
-        </div>
-        <PictoEntreprise />
-      </div>
-
-      <p class="leading-normal pb-3 text-justify">
-        Les simulateurs LexImpact permettent de configurer des cas types pour
-        ensuite visualiser les impacts de la loi ou d'une réforme paramétrique
-        sur ces derniers. Un cas type est un cas simplifié d'une situation
-        individuelle, par exemple : <span class="italic"
-          >"un foyer composé de deux adultes et d'un enfant, gagnant un certain
-          salaire par mois".</span
-        >
-        En configurant plusieurs cas types sur les simulateurs LexImpact, l'utilisateur
-        peut alors se représenter, de façon simplifiée, les impacts sur différents
-        types de population.
-      </p>
-
-      <div class="bg-gray-100 p-4 text-sm">
-        <h4 class="text-base font-bold pb-2">
-          Des situations simplifiées à mettre en perspective
-        </h4>
-        <p class=" leading-normal pb-3 text-justify">
-          Les estimations sur cas types sont plus précises que les estimations
-          d'impacts globaux sur la population française, qui eux, dépendent des
-          données disponibles. En revanche, du fait de leur caractère simplifié,
-          ils sont à mettre en perspective avec la réalité du terrain :
-        </p>
-        <ul class="list-inside list-disc">
-          <li class="leading-normal pb-2 text-justify">
-            Premièrement en regard de leur proportion dans la population réelle
-            difficile à évaluer : Par exemple,
-            <span class="italic"
-              >l'utilisateur crée deux cas types très simplifiés, l'un
-              représentant un salarié du privé gagnant le SMIC, l'autre
-              représentant un salarié du privé gagnant 6000 euros par mois. Les
-              deux cas types sont affichés à l'écran, pourtant l'un regroupe une
-              situation simplifiée représentative de beaucoup de salariés,
-              l'autre concerne une situation bien moins étendue.</span
-            >
-            Plus l'utilisateur configure son cas type en détail, moins il est évident
-            de savoir combien de personnes réelles peuvent être associées à ce cas
-            type.
-          </li>
-          <li class="leading-normal pb-2 text-justify">
-            Deuxièmement, il n'est pas possible de tirer d'une estimation
-            concernant un cas type, des conclusions sur une situation
-            individuelle précise. Il faudrait pour cela entrer l'ensemble des
-            paramètres ayant une influence sur le dispositif à évaluer
-            concernant une personne réelle, à l'instar des déclarations de
-            revenus, les simulateurs LexImpact n'ont pas cette vocation.
-          </li>
-        </ul>
-      </div>
-      <p class="leading-normal pb-3 pt-3 text-justify">
-        Dans le cadre des dotations aux communes, le simulateur ne permet pas de
-        créer un cas type de commune puisque l'ensemble des communes sont
-        accessibles par le biais de la barre de recherche. La possibilité de
-        rechercher les communes et de les afficher permet d'effectuer des
-        comparaisons.
-      </p>
-
-      <div class="flex items-center pb-3 pt-10  ">
-        <h3 class="text-xl text-gray-700 font-light">Des impacts globaux</h3>
-        <div class="mx-2">
-          <PictoEtat />
-        </div>
-      </div>
-      <p class="leading-normal pb-3 text-justify">
-        En plus des impacts sur cas types, LexImpact permet d'estimer les effets
-        globaux (sans être comportementaux) d'une modification de la loi. Pour
-        cela, les simulateurs s'appuient sur <span class="font-bold"
-          >des données représentatives de la population française :</span
-        >
-      </p>
-      <div class="grid md:grid-cols-2 gap-8 justify-between pt-4 pb-4">
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-impot-sur-le-revenu.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">Simulateur de l'impôt sur le revenu :</p>
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2">
-              Enquête Revenus Fiscaux et Sociaux (<a
-                href="https://www.insee.fr/fr/metadonnees/source/serie/s1231/documentation-methodologique"
-                class="underline hover:text-le-bleu">ERFS-FPR</a
-              >) de l'Insee <span class="italic">(millésime 2016)</span><span
-                class="font-extralight">- Données protégées 🔐</span
-              > ;
-            </li>
-            <li class="leading-normal pb-2">
-              Déclarations d’impôt sur le revenu des foyers fiscaux (<a
-                href="https://www.casd.eu/source/declarations-dimpot-sur-le-revenu-des-foyers-fiscaux-formulaire-2042-et-annexes/"
-                class="underline hover:text-le-bleu">POTE</a
-              >) du Ministère des Finances (DGFIP)
-              <span class="italic">(millésime 2019)</span>
-              <span class="font-extralight">- Données protégées 🔐.</span>
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-dotations-communes.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">Simulateur des dotations aux communes :</p>
-          <ul class="list-inside list-disc">
-            <li class="leading-normal pb-2 ">
-              <a
-                href="http://www.dotations-dgcl.interieur.gouv.fr/consultation/criteres_repartition.php"
-                class="underline hover:text-le-bleu"
-                >Critères de répartition des dotations par commune</a
-              >
-              de la Direction Générale des collectivités locales (DGCL)
-              <span class="italic">(millésime 2016)</span><span
-                class="font-extralight">- Données ouvertes 🔓.</span
-              >
-            </li>
-          </ul>
-        </div>
-        <div>
-          <img
-            class=" w-16"
-            src="/picto-affaires-sociales.png"
-            alt="Pictogramme représentant le simulateur impôt sur le revenu"
-          />
-          <p class="pb-3 font-bold">
-            Simulateur des cotisations & prestations sociales :
-          </p>
-          <TextUnderconstructionMessage />
-        </div>
-      </div>
-
-      <div class="bg-gray-100 p-4 text-sm">
-        <h4 class="text-base font-bold pb-2">
-          La précision des impacts globaux dépend de la qualité et de la
-          fraicheur des données
-        </h4>
-
-        <p class="leading-normal pb-3 text-justify">
-          Pour calculer les impacts globaux, LexImpact mène un travail de fond
-          pour accéder aux données représentatives. Le service a depuis fin 2019
-          un centre d'accès sécurisé aux données (CASD) lui permettant de faire
-          des recherches sur des données fines. Toutefois, la donnée,
-          essentielle pour permettre de fournir des résultats pertinents reste
-          un enjeu permanent. Cet enjeu se concrétise déjà dans l’interface de
-          l’impôt sur le revenu, où les résultats sur le budget de l’État sont à
-          l'heure actuelle très approximatifs car basés sur des données de 2016.
-          La crise sanitaire et le changement brusque du contexte économique
-          rendent ce problème plus conséquent, et le dernier millésime ne
-          permettra pas d’en tenir compte en 2021 car il date de 2018.
-        </p>
-      </div>
-      <h2 class="text-xl text-gray-700 font-bold pb-3 pt-10">
-        2. Fonctionnement des simulateurs
-      </h2>
-      <h3 class="pb-3 pt-5 text-xl text-gray-700 font-light">
-        Un fonctionnement possible grâce à plusieurs acteurs
-      </h3>
-      <p class="leading-normal pb-5 text-justify">
-        LexImpact bénéficie d'un écosystème composé de plusieurs acteurs :
-      </p>
-      <ul class="list-inside list-disc pl-4 ">
-        <li class="leading-normal pb-2 text-justify">
-          En amont, <span class="font-bold">les fournisseurs de donnée</span>.
-          Qu'il s'agisse de données publiques, ou de données protégées, cet
-          écosystème est indispensable pour permettre d'estimer les impacts
-          d'une réforme sur la population française et sur le budget de l'État
-          ou de la Sécurité sociale.
-        </li>
-        <li class="leading-normal pb-2 text-justify">
-          Autant pour le traitement des données que pour le moteur de calcul,
-          LexImpact échange régulièrement avec des <span class="font-bold"
-            >experts techniques et métiers</span
-          >
-          dont le domaine de compétence est reconnu. L'ensemble de ces contributions
-          est visible dans
-          <a
-            href="https://git.leximpact.dev/"
-            class="underline hover:text-le-bleu">notre code source</a
-          >. <br />Les
-          <span class="font-bold">
-            administrateurs de l'Assemblée nationale</span
-          >, experts des questions juridiques, financières et économiques nous
-          apportent leur expertise métier à la fois pour le moteur de calcul et
-          l'interface. Pour le
-          <a href="./simulation" class="underline hover:text-le-bleu"
-            >simulateur Cotisations & prestations sociales</a
-          >, ils participent à la vérification des paramètres et des formules
-          directement depuis l'interface.
-        </li>
-        <li class="leading-normal pb-2 text-justify">
-          Enfin, les services LexImpact reposent sur l'analyse des besoins
-          utilisateurs et sur la prise en compte des <span class="font-bold"
-            >retours utilisateurs</span
-          >, dans une logique d'amélioration continue.
-        </li>
-      </ul>
-    </div>
-
-    <div>
-      <img
-        class=" object-center"
-        src="/schema-explicatif-fonctionnement-simulateurs.png"
-        alt="montre où cliquer pour amender un dispositif"
-      />
-      <p
-        class="leading-normal px-10 py-2 text-justify italic text-xs text-gray-500"
-      >
-        * Le calcul d’impact sur des cas spécifiques est possible uniquement
-        pour des entités dont les données sont entièrements publiques.
-        Actuellement seul le simulateur “Dotations aux communes” est concerné
-        avec les cas spécifiques des communes de France. Cela n’est pas possible
-        pour les entreprises et les foyers fiscaux, dont les données sont
-        protégées.
-      </p>
-    </div>
-
-    <div class="p-10 text-base ">
-      <h3 class="pb-3 pt-5 text-xl text-gray-700 font-light">
-        Le traitement des données
-      </h3>
-      <TextUnderconstructionMessage />
-      <h3 class="pb-3 pt-5 text-xl text-gray-700 font-light">
-        Le moteur de calcul
-      </h3>
-      <TextUnderconstructionMessage />
-
-      <h2 class="text-xl text-gray-700 font-bold pb-3 pt-10">
-        3. Fiabilité des résultats
-      </h2>
-      <h3 class="pb-3 pt-5 text-xl text-gray-700 font-light">
-        Méthodologie de vérification des résultats
-      </h3>
-      <TextUnderconstructionMessage />
-
-      <h3 class="pb-3 pt-5 text-xl text-gray-700 font-light">
-        Une marge d'erreur incompressible
-      </h3>
-      <p class="leading-normal pb-5 text-justify">
-        Les résultats des simulateurs LexImpact ont, comme c'est le cas de tout
-        simulateur, une certaine imprécision. Ils fournissent des estimations.
-        Le calcul d'une marge d'erreur est impossible car l'imprécision provient
-        de l'intrication de
-        <span class="font-bold"
-          >différents écarts ayant plusieurs origines&nbsp;:</span
-        >
-      </p>
-      <ul class="list-inside list-disc pl-4 ">
-        <li class="leading-normal pb-2 text-justify">
-          <span class="font-bold"
-            >La mise à jour du moteur de calcul&nbsp;:</span
-          > Les simulateurs LexImpact s'appuie sur un calculateur. Celui-ci est codé
-          en python, et ces formules reflètent la loi existante. La législation,
-          en matière fiscale et de sécurité sociale, évoluant au moins tous les ans,
-          il est nécessaire de mettre à jour ce moteur de calcul, en recodant des
-          formules et des paramètres. Cette mise à jour ne débute qu'après publication
-          de la loi au Journal officiel, et nécessite un temps plus ou moins long.
-          LexImpact s'appuie sur le moteur de calcul OpenFisca et, malgré les nombreuses
-          contributions, la mise à jour est progressive étant donné le périmètre
-          du modèle. Le service LexImpact commence par les dispositifs qui pèsent
-          le plus lourd dans les calculs, jusqu'à obtenir des résultats cohérents,
-          mais un petit écart non significatif peut subsister.
-        </li>
-
-        <li class="leading-normal pb-2 text-justify">
-          <span class="font-bold">La simplification d'une situation&nbsp;:</span
-          >
-          Que ce soit pour le calcul des cas types ou pour le calcul d'impacts sur
-          la population française, les paramètres définissant l'entité pour laquelle
-          l'impact est calculé sont toujours simplifiés. Dans le cas d'impacts globaux,
-          les données sont parfois simplement inexistantes ; pour les cas types,
-          l'entrée de l'ensemble des paramètres serait extrêmement fastidieuse pour
-          l'utilisateur et représenterait un coût de de développement logiciel très
-          élevé. Par conséquent, pour limiter les développements, le temps de calcul
-          et faciliter le parcours utilisateur, LexImpact prend des valeurs moyennes
-          ou par défaut (souvent zéro) pour toutes les données qui ont un faible
-          poids dans le résultat final. Par exemple,
-          <span class="italic"
-            >dans le cas du calcul de la CSG d'un ménage au SMIC avec deux
-            enfants, les paramètres tels que les heures supplémentaires, les
-            intérêts perçus sur un PEL de moins de 12 ans, ou encore les titres
-            non côtés détenus dans le PEA, sont mis à 0.</span
-          >
-          L'utilisation de valeurs par défaut ou moyennes génère donc un écart par
-          rapport aux situations réelles individuelles.
-        </li>
-        <li class="leading-normal pb-2 text-justify">
-          <span class="font-bold"
-            >Les données représentatives de la population française&nbsp;:</span
-          > Souvent décalées dans le temps car mises à disposition avec un délai
-          de 1 à 2 ans, les bases de données présentent parfois des erreurs d’entrée,
-          des doublons, des manques, ou tout simplement des biais dans le cas où
-          la base de données est construite à partir d'un échantillon de la population.
-          On parle alors d'erreur de "sample". Comment expliqué dans la partie précédente
-          (traitement des données), le service LexImpact traite ces informations
-          pour réduire les écarts, mais ce traitement ne permet pas d'obtenir un
-          résultat 100% conforme à la réalité.
-        </li>
-      </ul>
-      <p class="leading-normal pb-2 pt-5 text-justify">
-        Pour réduire les marges d'erreur, l'équipe LexImpact travaille en
-        continu à l'amélioration du modèle, échange régulièrement avec des
-        experts. Compte tenu de ce travail de validation, les résulats présentés
-        sont cohérents et permettent de mettre en évidence les effets de
-        différents dispositifs sur des ménages et sur l'État, avec une marge
-        d'erreur raisonnable, mais qu'il faut garder à l'esprit.
-      </p>
-
-      <p class="leading-normal pb-3 text-justify">
-        Aidez à améliorer LexImpact, n'hésitez pas à <a
-          href="/contribuer"
-          class="underline hover:text-le-bleu">contribuer</a
-        > !
-      </p>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Circuit board - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='120' height='120'%3E%3Cpath fill='%23ded500' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/contribuer.svelte b/src/routes/contribuer.svelte
index e2ba2c1bc5ec9d5d5165d3ab9cf95bfcde08fc1b..1f44bf6663ad3adf4799ad89306ef9b04e8e2249 100644
--- a/src/routes/contribuer.svelte
+++ b/src/routes/contribuer.svelte
@@ -246,7 +246,7 @@
       </p>
 
       <a
-        href="/simulation"
+        href="/"
         class="inline-flex items-center bg-gray-200 my-5 p-1 pr-2 text-xs rounded
   text-black shadow-md hover:bg-gray-400"
       >
diff --git a/src/routes/index.svelte b/src/routes/index.svelte
index 264822ab1b3d2a1d1062a472fb9edff284643c15..3477bdbb0d8a034e4a50819bad4d490fb0c5e4bd 100644
--- a/src/routes/index.svelte
+++ b/src/routes/index.svelte
@@ -1,205 +1,739 @@
 <script lang="ts">
-  import { session } from "$app/stores"
+  import type { EntityByKey, GroupEntity } from "@openfisca/ast"
+  import { getRolePersonsIdKey } from "@openfisca/ast"
+  import type Sockette from "sockette"
+  import { getContext, setContext } from "svelte"
+  import type { Writable } from "svelte/store"
+  import { writable } from "svelte/store"
+  import { v4 as uuidv4 } from "uuid"
+
+  import { goto } from "$app/navigation"
+  import { page, session } from "$app/stores"
+  import { validateSimulationQuery } from "$lib/auditors/queries"
+  import type { ValidSimulationQuery } from "$lib/calculations"
+  import { newSimulationUrl } from "$lib/calculations"
+  import TestCaseEdit from "$lib/components/test_cases/TestCaseEdit.svelte"
+  import TestCasesPane from "$lib/components/test_cases/TestCasesPane.svelte"
+  import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte"
+  import StartTutorial from "$lib/components/tutorial/StartTutorial.svelte"
+  import VariableReferredParametersPane from "$lib/components/variables/VariableReferredParametersPane.svelte"
+  import type { DecompositionByName } from "$lib/decompositions"
+  import {
+    updateDecompositionEvaluations,
+    updateVectorIndex,
+  } from "$lib/decompositions"
+  import type { ReformChange } from "$lib/reforms"
+  import type {
+    Axis,
+    PopulationWithoutId,
+    Situation,
+    SituationWithAxes,
+  } from "$lib/situations"
+  import { getPopulationReservedKeys } from "$lib/situations"
+  import type { SelfTargetAProps } from "$lib/urls"
+
+  type EditionMode =
+    | {
+        mode: "variable_parameters"
+        variableName: string
+      }
+    | {
+        mode: "test_case"
+        testCaseIndex: number
+      }
+    | {
+        mode: "test_case_with_variable_inputs"
+        testCaseIndex: number
+        variableName: string
+      }
+    | null
+
+  const action = writable(undefined)
+  setContext("action", action)
+  const adaptAmountsScale = writable(true)
+  setContext("adaptAmountsScale", adaptAmountsScale)
+  let axes: Axis[][] = []
+  const date = new Date().toISOString().split("T")[0]
+  const decompositionByNameArray = getContext(
+    "decompositionByNameArray",
+  ) as Writable<DecompositionByName[]>
+  const decompositionsName = getContext("decompositionsName") as string[]
+  const deltaByNameArray = getContext("deltaByNameArray") as Writable<
+    Array<{
+      [name: string]: number[]
+    }>
+  >
+  let editionMode: EditionMode = null
+  const inputInstantsByVariableName = getContext(
+    "inputInstantsByVariableName",
+  ) as Writable<{
+    [name: string]: Set<string>
+  }>
+  setContext("newSelfTargetAProps", newSelfTargetAProps)
+  const reform = getContext("reform") as Writable<ReformChange>
+  const rootDecompositionName = $session.rootDecompositionName
+  const showNulls = writable(false)
+  setContext("showNulls", showNulls)
+  const simulationRequested = getContext(
+    "simulationRequested",
+  ) as Writable<boolean>
+  const testCaseIndex = getContext("testCaseIndex") as Writable<number>
+  const testCases = getContext("testCases") as Writable<Situation[]>
+  const calculationToken = getContext("calculationToken") as Writable<
+    string | undefined
+  >
+  const vectorIndexes = getContext("vectorIndexes") as Writable<number[]>
+  const vectorLength = getContext("vectorLength") as Writable<number>
+  const webSocket = getContext("webSocket") as Writable<Sockette | undefined>
+  const webSocketOpen = getContext("webSocketOpen") as Writable<boolean>
+  const year = getContext("year") as Writable<number>
+
+  $: query = ensureValidQuery($page.query)
+
+  $: $action = query.action
+
+  $: if ($simulationRequested) {
+    $simulationRequested = false
+    submit()
+  }
+
+  $: editionModeFromAction($action)
+
+  function asEditionModeWithTestCase(editionMode: EditionMode): {
+    testCaseIndex: number
+  } {
+    return editionMode as { testCaseIndex: number }
+  }
+
+  function changeAxes({ detail }) {
+    axes = detail
+
+    let newVectorLength = 1
+    for (const parallelAxes of axes) {
+      // All the parallel axes have the same count.
+      const axis = parallelAxes[0]
+      newVectorLength *= axis.count
+    }
+    $vectorLength = newVectorLength
+
+    const situationIndex = $testCaseIndex
+    const newDecompositionByNameArray = [...$decompositionByNameArray]
+    newDecompositionByNameArray[situationIndex] =
+      updateDecompositionEvaluations(
+        newDecompositionByNameArray[situationIndex],
+        rootDecompositionName,
+        $deltaByNameArray[situationIndex],
+        $vectorIndexes[situationIndex],
+        newVectorLength,
+      )
+    $decompositionByNameArray = newDecompositionByNameArray
+    if ($webSocketOpen) {
+      submit()
+    }
+  }
+
+  function changeSituation(situationIndex: number, situation: Situation): void {
+    const situations = [...$testCases]
+    situations[situationIndex] = situation
+    $testCases = situations
+    // if ($webSocketOpen) {
+    //   submit()
+    // }
+  }
+
+  function changeVectorIndex({ detail }) {
+    const situationIndex = detail.situationIndex
+    const newVectorIndexes = [...$vectorIndexes]
+    newVectorIndexes[situationIndex] = detail.vectorIndex
+    $vectorIndexes = newVectorIndexes
+    const decompositionByName = $decompositionByNameArray[situationIndex]
+    const newDecompositionByName = updateVectorIndex(
+      decompositionByName,
+      detail.vectorIndex,
+    )
+    if (newDecompositionByName !== decompositionByName) {
+      const newDecompositionByNameArray = [...$decompositionByNameArray]
+      newDecompositionByNameArray[situationIndex] = newDecompositionByName
+      $decompositionByNameArray = newDecompositionByNameArray
+    }
+  }
+
+  function closeEditionPane() {
+    goto(
+      newSimulationUrl({
+        ...query,
+        action: null,
+      }),
+      { noscroll: true },
+    )
+  }
+
+  function editSituation({ detail: testCaseIndex }: { detail: number }): void {
+    goto(
+      newSimulationUrl({
+        ...query,
+        action: `situations/${testCaseIndex}`,
+      }),
+      { noscroll: true },
+    )
+  }
+
+  function editionModeFromAction(action: string | undefined | null) {
+    if (action != null) {
+      {
+        const match = /^situations\/(\d+)$/.exec(action)
+        if (match !== null) {
+          editionMode = {
+            mode: "test_case",
+            testCaseIndex: parseInt(match[1]),
+          }
+          return
+        }
+      }
+
+      {
+        const match = /^situations\/(\d+)\/variables\/([^/]+)\/inputs$/.exec(
+          action,
+        )
+        if (match !== null) {
+          editionMode = {
+            mode: "test_case_with_variable_inputs",
+            testCaseIndex: parseInt(match[1]),
+            variableName: match[2],
+          }
+          return
+        }
+      }
+
+      {
+        const match = /^variables\/([^/]+)\/parameters$/.exec(action)
+        if (match !== null) {
+          editionMode = {
+            mode: "variable_parameters",
+            variableName: match[1],
+          }
+          return
+        }
+      }
+    }
+
+    editionMode = null
+  }
+
+  function ensureValidQuery(query: URLSearchParams): ValidSimulationQuery {
+    const [validQuery, queryError] = validateSimulationQuery(query)
+    if (queryError !== null) {
+      console.warn(
+        `Query error at ${$page.path}: ${JSON.stringify(
+          queryError,
+          null,
+          2,
+        )}\n\n${JSON.stringify(validQuery, null, 2)}`,
+      )
+      return {}
+    }
+    return validQuery
+  }
+
+  function newSelfTargetAProps(urlPath: string): SelfTargetAProps {
+    if (
+      urlPath.startsWith("/parameters/") ||
+      urlPath.startsWith("/situations/") ||
+      urlPath.startsWith("/variables/")
+    ) {
+      return {
+        href: newSimulationUrl({
+          ...query,
+          action: urlPath.replace(/^\/+/, ""),
+        }),
+        "sveltekit:noscroll": true,
+      }
+    }
+    return {
+      href: urlPath,
+      "sveltekit:prefetch": true,
+    }
+  }
+
+  function selectSituationVariable({
+    detail,
+  }: {
+    detail: { testCaseIndex: number; variableName: string }
+  }): void {
+    const { testCaseIndex, variableName } = detail
+    const action = ["test_case", "test_case_with_variable_inputs"].includes(
+      editionMode?.mode,
+    )
+      ? `situations/${testCaseIndex}/variables/${variableName}/inputs`
+      : `variables/${variableName}/parameters`
+    goto(
+      newSimulationUrl({
+        ...query,
+        action,
+      }),
+      { noscroll: true },
+    )
+  }
+
+  function submit() {
+    // Aggregate every situations into a single one without calculated variables.
+    const aggregatedSituation: SituationWithAxes = {}
+    const entities = Object.values($session.entityByKey as EntityByKey)
+    for (const [situationIndex, situation] of $testCases.entries()) {
+      const situationPrefix = `Cas type n°${situationIndex + 1} | `
+      for (const entity of entities) {
+        let entitySituation = situation[entity.key_plural]
+        if (entitySituation === undefined) {
+          continue
+        }
+        let aggregatedEntitySituation = aggregatedSituation[entity.key_plural]
+        if (aggregatedEntitySituation === undefined) {
+          aggregatedEntitySituation = aggregatedSituation[entity.key_plural] =
+            {}
+        }
+        const reservedKeys = getPopulationReservedKeys(entity)
+        for (const [populationId, population] of Object.entries(
+          entitySituation,
+        ).sort(([populationId1], [populationId2]) =>
+          populationId1.localeCompare(populationId2),
+        )) {
+          const transformedPopulation: PopulationWithoutId = {}
+          if (!entity.is_person) {
+            for (const role of (entity as GroupEntity).roles) {
+              const personsIdKey = getRolePersonsIdKey(role)
+              const personsId = population[personsIdKey] as string[] | undefined
+              if (personsId === undefined) {
+                continue
+              }
+              transformedPopulation[personsIdKey] = personsId.map(
+                (personId) => situationPrefix + personId,
+              )
+            }
+          }
+          for (const [variableName, variableValueByInstant] of Object.entries(
+            population,
+          )) {
+            if (reservedKeys.has(variableName)) {
+              continue
+            }
+            const inputVariableValueByInstant: {
+              [instant: string]: boolean | number | string | null
+            } = {}
+            const inputInstants =
+              $inputInstantsByVariableName[variableName] ?? new Set<string>()
+            for (const [instant, variableValue] of Object.entries(
+              variableValueByInstant,
+            )) {
+              if (!inputInstants.has(instant)) {
+                // Ignore calculated value.
+                continue
+              }
+              inputVariableValueByInstant[instant] = variableValue
+            }
+            if (Object.keys(inputVariableValueByInstant).length > 0) {
+              transformedPopulation[variableName] = inputVariableValueByInstant
+            }
+          }
+          aggregatedEntitySituation[situationPrefix + populationId] =
+            transformedPopulation
+        }
+      }
+    }
+
+    // // Remove calculated variables from aggregatedSituation.
+    // for (const entity of Object.values($session.entityByKey as EntityByKey)) {
+    //   const reservedKeys = getPopulationReservedKeys(entity)
+    //   let entitySituation = aggregatedSituation[entity.key_plural]
+    //   if (entitySituation === undefined) {
+    //     continue
+    //   }
+    //   entitySituation = aggregatedSituation[entity.key_plural] = {
+    //     ...entitySituation,
+    //   }
+    //   for (const [populationId, population] of Object.entries(entitySituation)) {
+    //     if (reservedKeys.has(populationId)) {
+    //       continue
+    //     }
+    //     const variableValueByInstantByName = { ...population }
+    //     for (const [variableName, variableValueByInstant] of Object.entries(
+    //       variableValueByInstantByName,
+    //     )) {
+    //       const inputInstants =
+    //         $inputInstantsByVariableName[variableName]
+    //       if (inputInstants === undefined) {
+    //         continue
+    //       }
+    //       const cleanedVariableValueByInstant = {
+    //         ...(variableValueByInstant as {
+    //           [instant: string]: string | number | boolean
+    //         }),
+    //       }
+    //       for (const instant of Object.keys(cleanedVariableValueByInstant)) {
+    //         if (!inputInstants.has(instant)) {
+    //           delete cleanedVariableValueByInstant[instant]
+    //         }
+    //       }
+    //       if (Object.keys(cleanedVariableValueByInstant).length === 0) {
+    //         delete variableValueByInstantByName[variableName]
+    //       } else {
+    //         variableValueByInstantByName[variableName] =
+    //           cleanedVariableValueByInstant
+    //       }
+    //     }
+    //   }
+    // }
+
+    if (axes.length > 0) {
+      aggregatedSituation.axes = axes
+      // Remove variables used as axes from situation (otherwise OpenFisca Core fails).
+      // for (const parallelAxes of axes) {
+      //   nextAxis: for (const axis of parallelAxes) {
+      //     const { index, name } = axis
+
+      //     let individuIndex = 0
+      //     for (let [individuName, individu] of Object.entries(
+      //       aggregatedSituation.individus,
+      //     )) {
+      //       console.log(individuName)
+      //       if (index === individuIndex && individu[name] !== undefined) {
+      //         individu = { ...individu }
+      //         delete individu[name]
+      //         aggregatedSituation.individus = {
+      //           ...aggregatedSituation.individus,
+      //         }
+      //         aggregatedSituation.individus[individuName] = individu // Preserve order of individu in individus.
+      //         continue nextAxis
+      //       }
+      //     }
+
+      //     let familleIndex = 0
+      //     for (let [familleName, famille] of Object.entries(
+      //       aggregatedSituation.familles,
+      //     )) {
+      //       if (index === familleIndex && famille[name] !== undefined) {
+      //         famille = { ...famille }
+      //         delete famille[name]
+      //         aggregatedSituation.familles = { ...aggregatedSituation.familles }
+      //         aggregatedSituation.familles[familleName] = famille // Preserve order of famille in familles.
+      //         continue nextAxis
+      //       }
+      //     }
+
+      //     let foyerFiscalIndex = 0
+      //     for (let [foyerFiscalName, foyerFiscal] of Object.entries(
+      //       aggregatedSituation.foyers_fiscaux,
+      //     )) {
+      //       if (index === foyerFiscalIndex && foyerFiscal[name] !== undefined) {
+      //         foyerFiscal = { ...foyerFiscal }
+      //         delete foyerFiscal[name]
+      //         aggregatedSituation.foyers_fiscaux = {
+      //           ...aggregatedSituation.foyers_fiscaux,
+      //         }
+      //         aggregatedSituation.foyers_fiscaux[foyerFiscalName] = foyerFiscal // Preserve order of foyerFiscal in foyersFiscaux.
+      //         continue nextAxis
+      //       }
+      //     }
+
+      //     let menageIndex = 0
+      //     for (let [menageName, menage] of Object.entries(
+      //       aggregatedSituation.menages,
+      //     )) {
+      //       if (index === menageIndex && menage[name] !== undefined) {
+      //         menage = { ...menage }
+      //         delete menage[name]
+      //         aggregatedSituation.menages = { ...aggregatedSituation.menages }
+      //         aggregatedSituation.menages[menageName] = menage // Preserve order of menage in menages.
+      //         continue nextAxis
+      //       }
+      //     }
+      //   }
+      // }
+    }
+
+    $calculationToken = uuidv4()
+    $webSocket.send(
+      JSON.stringify({
+        // reform: "PLF LFI",
+        reform: Object.keys($reform).length > 0 ? $reform : undefined,
+        situation: aggregatedSituation,
+        period: $year.toString(),
+        token: $calculationToken,
+        variables: decompositionsName,
+      }),
+    )
+    $webSocket.send(
+      JSON.stringify({
+        calculate: true,
+      }),
+    )
+  }
 </script>
 
 <svelte:head>
-  <title>Page d'accueil| {$session.title}</title>
+  <title>Calculs | {$session.title}</title>
 </svelte:head>
 
-<main>
-  <div
-    class="bg-cover flex items-center justify-center bg-fixed  "
-    style="background-image: url('/image-fond-page-accueil.jpg')"
-  >
-    <div class="max-w-prose mb-26 m-16">
-      <!-- call to action vers le simulateurs -->
-      <div>
-        <h1 class="font-bold pt-7 pb-8 text-3xl text-black">
-          Estimer les impacts d'une modification <br />de la loi :
-        </h1>
-        <div class="inline-block w-full">
-          <a
-            href="https://leximpact.an.fr/ir"
-            class="flex items-center border-black border-2 bg-white mb-4 p-1 pl-5 text-lg  rounded-lg text-black font-bold shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-          >
-            <img
-              class="mr-2"
-              width="70"
-              src="/picto-impot-sur-le-revenu.png"
-              alt="Pictogramme représentant une feuille d'impôt"
-            />
+<main class="fond h-screen">
+  <div class="h-screen grid grid-cols-3 grid-rows-2 ">
+    <!-- Panneau de gauche les modifications de l'utilisateur (amendement et cas type)-->
+    <div
+      class="row-span-2 col-span-3 lg:col-span-1  bg-white shadow-md h-screen z-30"
+    >
+      <div class="bg-white h-full">
+        {#if editionMode === null}
+          <div class="px-5 fixed bg-white pt-20 w-full lg:w-1/3">
+            <div class="flex pt-6 justify-end ">
+              <!-- Bouton de fermeture de l'édition du cas type -->
+              <div>
+                <button on:click={closeEditionPane}>
+                  <svg
+                    class="fill-current text-gray-500 hover:text-gray-900"
+                    xmlns="http://www.w3.org/2000/svg"
+                    height="24px"
+                    viewBox="0 0 24 24"
+                    width="24px"
+                    fill="#000000"
+                    ><path d="M0 0h24v24H0z" fill="none" /><path
+                      d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
+                    /></svg
+                  ></button
+                >
+              </div>
+            </div>
+          </div>
+          <div class="pt-40">
+            <StartTutorial />
+          </div>
+        {:else if editionMode.mode === "test_case"}
+          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
+            <div class="flex pt-6 justify-end">
+              <!-- Bouton de fermeture de l'édition du cas type -->
+              <button on:click={closeEditionPane}>
+                <svg
+                  class="fill-current text-gray-500 hover:text-gray-900"
+                  xmlns="http://www.w3.org/2000/svg"
+                  height="24px"
+                  viewBox="0 0 24 24"
+                  width="24px"
+                  fill="#000000"
+                  ><path d="M0 0h24v24H0z" fill="none" /><path
+                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
+                  /></svg
+                ></button
+              >
+            </div>
 
-            sur l'impôt sur le revenu
-          </a>
-        </div>
-        <div class="inline-block w-full">
-          <a
-            href="https://leximpact.an.fr/dotations"
-            class="flex items-center border-black border-2 bg-white mb-4 p-1 pl-5 text-lg  rounded-lg text-black font-bold shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-          >
-            <img
-              class="mr-2"
-              width="70"
-              src="/picto-dotations-communes.png"
-              alt="Pictogramme représentant un panneau de circulation indiquant commune"
-            />
+            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8">
+              Configurer le cas type
+            </h1>
+          </div>
 
-            sur les dotations aux communes
-          </a>
-        </div>
-        <div class="inline-block w-full">
-          <a
-            href="/simulation"
-            class="flex items-center border-black border-2 bg-white mb-4 p-1 pl-5 text-lg  rounded-lg text-black shadow-md hover:bg-le-jaune hover:bg-opacity-20"
-          >
-            <img
-              class="mr-2"
-              width="70"
-              src="/picto-affaires-sociales.png"
-              alt="Pictogramme représentant une feuille de paie"
+          <div class="px-5 overflow-scroll h-screen  pt-44 lg:pt-52 bg-white">
+            <p class="text-sm my-4 text-gray-700 rounded bg-le-bleu-light p-2">
+              📌 Par défaut, toutes les caractéristiques du cas type sont
+              considérées comme étant stables depuis 2 ans.
+            </p>
+
+            <TestCaseEdit
+              on:changeSituation={({ detail }) =>
+                changeSituation(
+                  asEditionModeWithTestCase(editionMode).testCaseIndex,
+                  detail,
+                )}
+              situation={$testCases[editionMode.testCaseIndex]}
+              year={$year}
             />
-            <div class="block sm:flex">
-              <p class="font-bold">
-                sur les cotisations & prestations sociales&nbsp;
+
+            <h2 class="font-bold text-xl pt-3">
+              Définir d'autres caractéristiques
+            </h2>
+            <div
+              class="bg-white border-le-bleu-light border-4 shadow-lg rounded-md my-5 mx-2"
+            >
+              <h1
+                class="bg-le-bleu-light text-2xl font-light text-gray-600 py-3 px-4 "
+              >
+                Ajouter d'autres caractéristiques
+              </h1>
+
+              <p class="py-2 px-4 font-light text-gray-600">
+                Depuis les cas type à droite de l'interface, <span
+                  class="font-normal">cliquez sur le nom d'un dispositif</span
+                > de la colonne de droite pour éditer les variables entrant dans
+                le calcul de ce dispositif.
               </p>
-              <p class=" italic">(en développement)</p>
+
+              <div class="m-4">
+                <img
+                  src="/tutoriel-edition-cas-type-variables-supp.png"
+                  alt="Tutoriel indiquant de cliquer sur un dispositif du cas type pour pouvoir ajouter d'autres caractéristiques au cas type."
+                />
+              </div>
             </div>
-          </a>
-        </div>
+          </div>
+        {:else if editionMode.mode === "test_case_with_variable_inputs"}
+          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
+            <div class="flex justify-end pt-6">
+              <!-- Bouton de fermeture de l'édition du cas type et des variables d'entrée-->
+              <button on:click={closeEditionPane}>
+                <svg
+                  class="fill-current text-gray-500 hover:text-gray-900"
+                  xmlns="http://www.w3.org/2000/svg"
+                  height="24px"
+                  viewBox="0 0 24 24"
+                  width="24px"
+                  fill="#000000"
+                  ><path d="M0 0h24v24H0z" fill="none" /><path
+                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
+                  /></svg
+                ></button
+              >
+            </div>
+            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8">
+              Configurer le cas type
+            </h1>
+          </div>
+          <div class="px-5 overflow-scroll h-screen  pt-44 lg:pt-52 bg-white">
+            <p class="text-sm my-4 text-gray-700 rounded bg-le-bleu-light p-2">
+              📌 Par défaut, toutes les caractéristiques du cas type sont
+              considérées comme étant stables depuis 2 ans.
+            </p>
+
+            <TestCaseEdit
+              on:changeSituation={({ detail }) =>
+                changeSituation(
+                  asEditionModeWithTestCase(editionMode).testCaseIndex,
+                  detail,
+                )}
+              situation={$testCases[editionMode.testCaseIndex]}
+              year={$year}
+            />
+            <VariableReferredInputsPane
+              {date}
+              name={editionMode.variableName}
+              on:changeSituation={({ detail }) =>
+                changeSituation(
+                  asEditionModeWithTestCase(editionMode).testCaseIndex,
+                  detail,
+                )}
+              situation={$testCases[editionMode.testCaseIndex]}
+              year={$year}
+            />
+          </div>
+        {:else if editionMode.mode === "variable_parameters"}
+          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
+            <div class="flex pt-6 justify-end">
+              <!-- Bouton de fermeture de l'édition des paramètres -->
+              <button on:click={closeEditionPane}>
+                <svg
+                  class="fill-current text-gray-500 hover:text-gray-900"
+                  xmlns="http://www.w3.org/2000/svg"
+                  height="24px"
+                  viewBox="0 0 24 24"
+                  width="24px"
+                  fill="#000000"
+                  ><path d="M0 0h24v24H0z" fill="none" /><path
+                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
+                  /></svg
+                ></button
+              >
+            </div>
+            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8 ">
+              Amender la loi
+            </h1>
+          </div>
+          <!-- Menu quand on aura la version abrégée
+            <div class="flex space-x-8 mb-8">
+              <div>
+                <a class="text-le-bleu text-base lg:text-lg " href="">
+                  L'essentiel abrégé
+                </a>
+              </div>
+              <div>
+                <a
+                  class="text-le-bleu text-base lg:text-lg font-bold underline"
+                  href=""
+                >
+                  Ensemble des paramètres
+                </a>
+              </div>
+            </div>
+            -->
+          <div class="px-5 overflow-scroll h-screen  pt-48 lg:pt-56 bg-white">
+            <div class="bg-gray-100  pb-3">
+              <VariableReferredParametersPane
+                {date}
+                name={editionMode.variableName}
+              />
+            </div>
+          </div>
+        {/if}
       </div>
     </div>
-  </div>
-</main>
-<main class="bg-white">
-  <div class="mr-10 ml-10 mt-10">
-    <h2 class="m-5 pt-5 text-2xl text-black font-bold">
-      Rechercher un chiffrage concernant :
-    </h2>
-    <div class="grid md:grid-cols-3">
-      <div class="m-5 mb-0">
-        <h3 class="pb-2 text-lg text-black font-extrabold">
-          Une circonscription
-        </h3>
-        <p class="leading-normal font-serif pb-3 text-sm">
-          LexImpact effectue une compilation de données INSEE par
-          circonscription et concernant divers sujets d'intérêt, tels que la
-          population, les entreprises ...
-        </p>
-        <p class="pb-2">🚧<span class="italic">&nbsp;en développement</span></p>
-        <a
-          href="https://umap.openstreetmap.fr/fr/map/circodata-test-interface_623082"
-          class="inline-flex text-center border-2 bg-le-bleu-light mb-10 p-3 text-base justify-self-end rounded-lg
-        text-black shadow-md hover:bg-le-bleu hover:text-white"
-        >
-          Consulter des données<br />concernant ma circonscription <br />
-        </a>
-      </div>
-      <div
-        class="hidden md:flex bg-contain bg-no-repeat .bg-bottom"
-        style="background-image: url('/image-circo-data.png')"
-      >
-        <div class="h-10" />
-      </div>
-      <div class="m-5">
-        <h3 class="pb-2 text-lg text-black font-extrabold">
-          Un sujet spécifique
-        </h3>
-        <p class="leading-normal font-serif pb-3 text-sm ">
-          Vous êtes rattaché à l'Assemblée nationale (député, collaborateur,
-          administrateur) et ne trouvez pas votre réponse dans nos simulateurs
-          ou dans la base de ressources PDF ?
-        </p>
-        <p class="leading-normal font-serif pb-3 text-sm">
-          Envoyez-nous votre besoin en chiffrage en complétant ce
-          <a
-            class="text-le-bleu underline hover:font-extrabold"
-            href="https://limesurvey.leximpact.dev/index.php/254182?lang=fr"
+    <!-- Panneau de droite pour les impacts et notamment le waterfall-->
+    <div class="row-span-2 col-span-3 lg:col-span-2 ">
+      <div class="fixed pt-24 lg:mt-20 lg:pt-4 fond lg:w-2/3 z-20 px-4 mx-1">
+        <div class="flex justify-between mb-4">
+          <label
+            ><input bind:checked={$adaptAmountsScale} type="checkbox" />
+            <p class="hidden text-xs lg:inline text-gray-600">
+              Échelle identique pour tous les cas types
+            </p>
+            <p class="lg:hidden text-xs inline text-gray-600 leading-none ">
+              Échelle identique cas types
+            </p></label
           >
-            rapide questionnaire
-          </a>
-          .
-        </p>
+          <div class="flex">
+            <button
+              class="bg-gray-200 text-gray-900 shadow-md hover:bg-gray-400 px-5 mr-2 rounded p-2 uppercase text-sm"
+              on:click={submit}
+            >
+              <div class="flex justify-center">
+                <!-- Material Icon Share --><svg
+                  class="fill-current md:mr-2"
+                  xmlns="http://www.w3.org/2000/svg"
+                  height="18px"
+                  viewBox="0 0 24 24"
+                  width="18px"
+                  fill="#000000"
+                  ><path d="M0 0h24v24H0z" fill="none" /><path
+                    d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"
+                  /></svg
+                >
+                <span class="hidden md:flex"> Sauvegarder / partager</span>
+              </div>
+            </button>
+
+            <div class="justify-self-end">
+              <button
+                class="bg-le-bleu text-white shadow-md hover:bg-blue-900 px-10 rounded p-2 uppercase text-sm"
+                on:click={submit}>Estimer</button
+              >
+            </div>
+          </div>
+        </div>
+        <h1 class="pt-3 text-3xl font-bold text-gray-600 pb-5 ">
+          Visualiser les cotis. & presta. sociales d'un cas type
+        </h1>
       </div>
-    </div>
-  </div>
-</main>
-<main class="bg-gray-700">
-  <div class="mr-10 ml-10 mb-30">
-    <h2 class="m-5 mt-0 pt-10 text-xl text-white ">À propos de LexImpact</h2>
-    <div class="grid md:grid-cols-3">
-      <div class="m-5">
-        <p class="text-white leading-relaxed font-serif pb-3 text-sm">
-          LexImpact est un service de l'Assemblée nationale depuis 2020. Il a
-          pour objectif de faciliter l'accès au chiffrage des politiques
-          publiques passées ou à imaginer.
-          <a
-            class="text-white underline hover:font-extrabold"
-            href="/comment-fonctionnent-les-simulateurs">Lire plus.</a
-          >
-        </p>
-        <img
-          class="mt-5"
-          width="100"
-          src="/logo-assemblee-nationale-blanc.png"
-          alt="Logo de l'Assemblée nationale"
+      <!-- Cas types avec leur waterfall -->
+      <div class=" lg:pt-56 px-5 lg:h-screen h-full lg:overflow-scroll z-20">
+        <TestCasesPane
+          on:changeAxes={changeAxes}
+          on:changeVectorIndex={changeVectorIndex}
+          on:editSituation={editSituation}
+          on:selectSituationVariable={selectSituationVariable}
+          year={$year}
         />
       </div>
-      <div class="m-5">
-        <p class="text-white leading-relaxed font-serif pb-3 text-sm">
-          Pour comprendre comment fonctionne les simulateurs LexImpact, vous
-          pouvez consulter
-          <a
-            class="text-white underline hover:font-extrabold"
-            href="/comment-fonctionnent-les-simulateurs">cette page.</a
-          >
-        </p>
-      </div>
-      <div class="block m-5 ml-20">
-        <h3 class="text-white block text-sm uppercase pb-5 tracking-widest">
-          Simulateurs
-        </h3>
-        <a
-          class="text-white block text-sm  pb-3 hover:underline"
-          href="/simulation"
-        >
-          Cotisations & prestations sociales
-        </a>
-        <a
-          class="text-white block text-sm pb-3 hover:underline"
-          href="https://leximpact.an.fr/ir"
-        >
-          Impôt sur le revenu
-        </a>
-        <a
-          class="text-white block text-sm pb-6 hover:underline"
-          href="https://leximpact.an.fr/dotations"
-        >
-          Dotations aux communes
-        </a>
-        <svg
-          width="300"
-          height="10"
-          viewBox="0 0 300 10"
-          xmlns="http://www.w3.org/2000/svg"
-        >
-          <line x1="200" y1="0" x2="0" y2="0" stroke-width="2" stroke="white" />
-        </svg>
-        <a
-          class="text-white block text-sm pt-4 pb-3 hover:underline"
-          href="/stats"
-        >
-          Statistiques d'usage
-        </a>
-        <a class="text-white block text-sm  pb-3 hover:underline" href="/cgu">
-          Conditions d'utilisation
-        </a>
-        <a
-          class="text-white block text-sm  pb-5 hover:underline"
-          href="/mentions-legales"
-        >
-          Mentions légales
-        </a>
-      </div>
     </div>
   </div>
 </main>
+
+<style>
+  .fond {
+    background-color: #ffffff;
+    /* Graph paper - Heropatterns.com échelle réduite */
+    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 100 100'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%23ded500' fill-opacity='0.4'%3E%3Cpath opacity='.5' d='M96 95h4v1h-4v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9zm-1 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9z'/%3E%3Cpath d='M6 5V0H5v5H0v1h5v94h1V6h94V5H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+  }
+</style>
diff --git a/src/routes/mentions-legales.svelte b/src/routes/mentions-legales.svelte
deleted file mode 100644
index 388f7a2444bf056b1b2418d8b4627787a8a2ff6a..0000000000000000000000000000000000000000
--- a/src/routes/mentions-legales.svelte
+++ /dev/null
@@ -1,39 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-</script>
-
-<svelte:head>
-  <title>Mentions légales | {$session.title}</title>
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white p-10 max-w-screen-md ">
-    <div class="">
-      <h1 class="font-serif font-bold pt-7 pb-3 text-3xl text-gray-700">
-        Mentions légales
-      </h1>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">Éditeur</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Service LexImpact, Direction de l'Évaluation et du Contrôle, Assemblée
-        nationale, <br />126, rue de l'Université - 75355 Paris 07 SP.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">Site internet</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Directeur de la publication : Secrétaire général de l'Assemblée
-        nationale, Michel Moreau.
-      </p>
-      <h2 class="pb-3 pt-5 text-xl text-gray-700 font-bold">Hébergeur</h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Hébergé par Scaleway SAS BP 438 75366 Paris cedex 08 France
-      </p>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/parameters/[parameter]/index.svelte b/src/routes/parameters/[parameter]/index.svelte
index 11f8827136091f2d9cf5242b13242fa45b756d49..5db78418ecef9905c0311e0d7cb56e148228465e 100644
--- a/src/routes/parameters/[parameter]/index.svelte
+++ b/src/routes/parameters/[parameter]/index.svelte
@@ -39,7 +39,7 @@
 </svelte:head>
 
 <a
-  href="/simulation"
+  href="/"
   class="inline-flex items-center bg-gray-200 my-5 p-1 pr-2 text-xs rounded
 text-black shadow-md hover:bg-gray-400"
 >
diff --git a/src/routes/simulation.svelte b/src/routes/simulation.svelte
index 8a5f3311604318fbba58209483537e244ced08ff..08f6ca5b22f6dfce37fd04b47ce29bec2211db95 100644
--- a/src/routes/simulation.svelte
+++ b/src/routes/simulation.svelte
@@ -1,739 +1,8 @@
-<script lang="ts">
-  import type { EntityByKey, GroupEntity } from "@openfisca/ast"
-  import { getRolePersonsIdKey } from "@openfisca/ast"
-  import type Sockette from "sockette"
-  import { getContext, setContext } from "svelte"
-  import type { Writable } from "svelte/store"
-  import { writable } from "svelte/store"
-  import { v4 as uuidv4 } from "uuid"
-
-  import { goto } from "$app/navigation"
-  import { page, session } from "$app/stores"
-  import { validateSimulationQuery } from "$lib/auditors/queries"
-  import type { ValidSimulationQuery } from "$lib/calculations"
-  import { newSimulationUrl } from "$lib/calculations"
-  import TestCaseEdit from "$lib/components/test_cases/TestCaseEdit.svelte"
-  import TestCasesPane from "$lib/components/test_cases/TestCasesPane.svelte"
-  import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte"
-  import StartTutorial from "$lib/components/tutorial/StartTutorial.svelte"
-  import VariableReferredParametersPane from "$lib/components/variables/VariableReferredParametersPane.svelte"
-  import type { DecompositionByName } from "$lib/decompositions"
-  import {
-    updateDecompositionEvaluations,
-    updateVectorIndex,
-  } from "$lib/decompositions"
-  import type { ReformChange } from "$lib/reforms"
-  import type {
-    Axis,
-    PopulationWithoutId,
-    Situation,
-    SituationWithAxes,
-  } from "$lib/situations"
-  import { getPopulationReservedKeys } from "$lib/situations"
-  import type { SelfTargetAProps } from "$lib/urls"
-
-  type EditionMode =
-    | {
-        mode: "variable_parameters"
-        variableName: string
-      }
-    | {
-        mode: "test_case"
-        testCaseIndex: number
-      }
-    | {
-        mode: "test_case_with_variable_inputs"
-        testCaseIndex: number
-        variableName: string
-      }
-    | null
-
-  const action = writable(undefined)
-  setContext("action", action)
-  const adaptAmountsScale = writable(true)
-  setContext("adaptAmountsScale", adaptAmountsScale)
-  let axes: Axis[][] = []
-  const date = new Date().toISOString().split("T")[0]
-  const decompositionByNameArray = getContext(
-    "decompositionByNameArray",
-  ) as Writable<DecompositionByName[]>
-  const decompositionsName = getContext("decompositionsName") as string[]
-  const deltaByNameArray = getContext("deltaByNameArray") as Writable<
-    Array<{
-      [name: string]: number[]
-    }>
-  >
-  let editionMode: EditionMode = null
-  const inputInstantsByVariableName = getContext(
-    "inputInstantsByVariableName",
-  ) as Writable<{
-    [name: string]: Set<string>
-  }>
-  setContext("newSelfTargetAProps", newSelfTargetAProps)
-  const reform = getContext("reform") as Writable<ReformChange>
-  const rootDecompositionName = $session.rootDecompositionName
-  const showNulls = writable(false)
-  setContext("showNulls", showNulls)
-  const simulationRequested = getContext(
-    "simulationRequested",
-  ) as Writable<boolean>
-  const testCaseIndex = getContext("testCaseIndex") as Writable<number>
-  const testCases = getContext("testCases") as Writable<Situation[]>
-  const calculationToken = getContext("calculationToken") as Writable<
-    string | undefined
-  >
-  const vectorIndexes = getContext("vectorIndexes") as Writable<number[]>
-  const vectorLength = getContext("vectorLength") as Writable<number>
-  const webSocket = getContext("webSocket") as Writable<Sockette | undefined>
-  const webSocketOpen = getContext("webSocketOpen") as Writable<boolean>
-  const year = getContext("year") as Writable<number>
-
-  $: query = ensureValidQuery($page.query)
-
-  $: $action = query.action
-
-  $: if ($simulationRequested) {
-    $simulationRequested = false
-    submit()
-  }
-
-  $: editionModeFromAction($action)
-
-  function asEditionModeWithTestCase(editionMode: EditionMode): {
-    testCaseIndex: number
-  } {
-    return editionMode as { testCaseIndex: number }
-  }
-
-  function changeAxes({ detail }) {
-    axes = detail
-
-    let newVectorLength = 1
-    for (const parallelAxes of axes) {
-      // All the parallel axes have the same count.
-      const axis = parallelAxes[0]
-      newVectorLength *= axis.count
-    }
-    $vectorLength = newVectorLength
-
-    const situationIndex = $testCaseIndex
-    const newDecompositionByNameArray = [...$decompositionByNameArray]
-    newDecompositionByNameArray[situationIndex] =
-      updateDecompositionEvaluations(
-        newDecompositionByNameArray[situationIndex],
-        rootDecompositionName,
-        $deltaByNameArray[situationIndex],
-        $vectorIndexes[situationIndex],
-        newVectorLength,
-      )
-    $decompositionByNameArray = newDecompositionByNameArray
-    if ($webSocketOpen) {
-      submit()
-    }
-  }
-
-  function changeSituation(situationIndex: number, situation: Situation): void {
-    const situations = [...$testCases]
-    situations[situationIndex] = situation
-    $testCases = situations
-    // if ($webSocketOpen) {
-    //   submit()
-    // }
-  }
-
-  function changeVectorIndex({ detail }) {
-    const situationIndex = detail.situationIndex
-    const newVectorIndexes = [...$vectorIndexes]
-    newVectorIndexes[situationIndex] = detail.vectorIndex
-    $vectorIndexes = newVectorIndexes
-    const decompositionByName = $decompositionByNameArray[situationIndex]
-    const newDecompositionByName = updateVectorIndex(
-      decompositionByName,
-      detail.vectorIndex,
-    )
-    if (newDecompositionByName !== decompositionByName) {
-      const newDecompositionByNameArray = [...$decompositionByNameArray]
-      newDecompositionByNameArray[situationIndex] = newDecompositionByName
-      $decompositionByNameArray = newDecompositionByNameArray
-    }
-  }
-
-  function closeEditionPane() {
-    goto(
-      newSimulationUrl({
-        ...query,
-        action: null,
-      }),
-      { noscroll: true },
-    )
-  }
-
-  function editSituation({ detail: testCaseIndex }: { detail: number }): void {
-    goto(
-      newSimulationUrl({
-        ...query,
-        action: `situations/${testCaseIndex}`,
-      }),
-      { noscroll: true },
-    )
-  }
-
-  function editionModeFromAction(action: string | undefined | null) {
-    if (action != null) {
-      {
-        const match = /^situations\/(\d+)$/.exec(action)
-        if (match !== null) {
-          editionMode = {
-            mode: "test_case",
-            testCaseIndex: parseInt(match[1]),
-          }
-          return
-        }
-      }
-
-      {
-        const match = /^situations\/(\d+)\/variables\/([^/]+)\/inputs$/.exec(
-          action,
-        )
-        if (match !== null) {
-          editionMode = {
-            mode: "test_case_with_variable_inputs",
-            testCaseIndex: parseInt(match[1]),
-            variableName: match[2],
-          }
-          return
-        }
-      }
-
-      {
-        const match = /^variables\/([^/]+)\/parameters$/.exec(action)
-        if (match !== null) {
-          editionMode = {
-            mode: "variable_parameters",
-            variableName: match[1],
-          }
-          return
-        }
-      }
-    }
-
-    editionMode = null
-  }
-
-  function ensureValidQuery(query: URLSearchParams): ValidSimulationQuery {
-    const [validQuery, queryError] = validateSimulationQuery(query)
-    if (queryError !== null) {
-      console.warn(
-        `Query error at ${$page.path}: ${JSON.stringify(
-          queryError,
-          null,
-          2,
-        )}\n\n${JSON.stringify(validQuery, null, 2)}`,
-      )
-      return {}
-    }
-    return validQuery
-  }
-
-  function newSelfTargetAProps(urlPath: string): SelfTargetAProps {
-    if (
-      urlPath.startsWith("/parameters/") ||
-      urlPath.startsWith("/situations/") ||
-      urlPath.startsWith("/variables/")
-    ) {
-      return {
-        href: newSimulationUrl({
-          ...query,
-          action: urlPath.replace(/^\/+/, ""),
-        }),
-        "sveltekit:noscroll": true,
-      }
-    }
+<script context="module" lang="ts">
+  export async function load() {
     return {
-      href: urlPath,
-      "sveltekit:prefetch": true,
+      redirect: "/",
+      status: 301, // Moved Permanently
     }
   }
-
-  function selectSituationVariable({
-    detail,
-  }: {
-    detail: { testCaseIndex: number; variableName: string }
-  }): void {
-    const { testCaseIndex, variableName } = detail
-    const action = ["test_case", "test_case_with_variable_inputs"].includes(
-      editionMode?.mode,
-    )
-      ? `situations/${testCaseIndex}/variables/${variableName}/inputs`
-      : `variables/${variableName}/parameters`
-    goto(
-      newSimulationUrl({
-        ...query,
-        action,
-      }),
-      { noscroll: true },
-    )
-  }
-
-  function submit() {
-    // Aggregate every situations into a single one without calculated variables.
-    const aggregatedSituation: SituationWithAxes = {}
-    const entities = Object.values($session.entityByKey as EntityByKey)
-    for (const [situationIndex, situation] of $testCases.entries()) {
-      const situationPrefix = `Cas type n°${situationIndex + 1} | `
-      for (const entity of entities) {
-        let entitySituation = situation[entity.key_plural]
-        if (entitySituation === undefined) {
-          continue
-        }
-        let aggregatedEntitySituation = aggregatedSituation[entity.key_plural]
-        if (aggregatedEntitySituation === undefined) {
-          aggregatedEntitySituation = aggregatedSituation[entity.key_plural] =
-            {}
-        }
-        const reservedKeys = getPopulationReservedKeys(entity)
-        for (const [populationId, population] of Object.entries(
-          entitySituation,
-        ).sort(([populationId1], [populationId2]) =>
-          populationId1.localeCompare(populationId2),
-        )) {
-          const transformedPopulation: PopulationWithoutId = {}
-          if (!entity.is_person) {
-            for (const role of (entity as GroupEntity).roles) {
-              const personsIdKey = getRolePersonsIdKey(role)
-              const personsId = population[personsIdKey] as string[] | undefined
-              if (personsId === undefined) {
-                continue
-              }
-              transformedPopulation[personsIdKey] = personsId.map(
-                (personId) => situationPrefix + personId,
-              )
-            }
-          }
-          for (const [variableName, variableValueByInstant] of Object.entries(
-            population,
-          )) {
-            if (reservedKeys.has(variableName)) {
-              continue
-            }
-            const inputVariableValueByInstant: {
-              [instant: string]: boolean | number | string | null
-            } = {}
-            const inputInstants =
-              $inputInstantsByVariableName[variableName] ?? new Set<string>()
-            for (const [instant, variableValue] of Object.entries(
-              variableValueByInstant,
-            )) {
-              if (!inputInstants.has(instant)) {
-                // Ignore calculated value.
-                continue
-              }
-              inputVariableValueByInstant[instant] = variableValue
-            }
-            if (Object.keys(inputVariableValueByInstant).length > 0) {
-              transformedPopulation[variableName] = inputVariableValueByInstant
-            }
-          }
-          aggregatedEntitySituation[situationPrefix + populationId] =
-            transformedPopulation
-        }
-      }
-    }
-
-    // // Remove calculated variables from aggregatedSituation.
-    // for (const entity of Object.values($session.entityByKey as EntityByKey)) {
-    //   const reservedKeys = getPopulationReservedKeys(entity)
-    //   let entitySituation = aggregatedSituation[entity.key_plural]
-    //   if (entitySituation === undefined) {
-    //     continue
-    //   }
-    //   entitySituation = aggregatedSituation[entity.key_plural] = {
-    //     ...entitySituation,
-    //   }
-    //   for (const [populationId, population] of Object.entries(entitySituation)) {
-    //     if (reservedKeys.has(populationId)) {
-    //       continue
-    //     }
-    //     const variableValueByInstantByName = { ...population }
-    //     for (const [variableName, variableValueByInstant] of Object.entries(
-    //       variableValueByInstantByName,
-    //     )) {
-    //       const inputInstants =
-    //         $inputInstantsByVariableName[variableName]
-    //       if (inputInstants === undefined) {
-    //         continue
-    //       }
-    //       const cleanedVariableValueByInstant = {
-    //         ...(variableValueByInstant as {
-    //           [instant: string]: string | number | boolean
-    //         }),
-    //       }
-    //       for (const instant of Object.keys(cleanedVariableValueByInstant)) {
-    //         if (!inputInstants.has(instant)) {
-    //           delete cleanedVariableValueByInstant[instant]
-    //         }
-    //       }
-    //       if (Object.keys(cleanedVariableValueByInstant).length === 0) {
-    //         delete variableValueByInstantByName[variableName]
-    //       } else {
-    //         variableValueByInstantByName[variableName] =
-    //           cleanedVariableValueByInstant
-    //       }
-    //     }
-    //   }
-    // }
-
-    if (axes.length > 0) {
-      aggregatedSituation.axes = axes
-      // Remove variables used as axes from situation (otherwise OpenFisca Core fails).
-      // for (const parallelAxes of axes) {
-      //   nextAxis: for (const axis of parallelAxes) {
-      //     const { index, name } = axis
-
-      //     let individuIndex = 0
-      //     for (let [individuName, individu] of Object.entries(
-      //       aggregatedSituation.individus,
-      //     )) {
-      //       console.log(individuName)
-      //       if (index === individuIndex && individu[name] !== undefined) {
-      //         individu = { ...individu }
-      //         delete individu[name]
-      //         aggregatedSituation.individus = {
-      //           ...aggregatedSituation.individus,
-      //         }
-      //         aggregatedSituation.individus[individuName] = individu // Preserve order of individu in individus.
-      //         continue nextAxis
-      //       }
-      //     }
-
-      //     let familleIndex = 0
-      //     for (let [familleName, famille] of Object.entries(
-      //       aggregatedSituation.familles,
-      //     )) {
-      //       if (index === familleIndex && famille[name] !== undefined) {
-      //         famille = { ...famille }
-      //         delete famille[name]
-      //         aggregatedSituation.familles = { ...aggregatedSituation.familles }
-      //         aggregatedSituation.familles[familleName] = famille // Preserve order of famille in familles.
-      //         continue nextAxis
-      //       }
-      //     }
-
-      //     let foyerFiscalIndex = 0
-      //     for (let [foyerFiscalName, foyerFiscal] of Object.entries(
-      //       aggregatedSituation.foyers_fiscaux,
-      //     )) {
-      //       if (index === foyerFiscalIndex && foyerFiscal[name] !== undefined) {
-      //         foyerFiscal = { ...foyerFiscal }
-      //         delete foyerFiscal[name]
-      //         aggregatedSituation.foyers_fiscaux = {
-      //           ...aggregatedSituation.foyers_fiscaux,
-      //         }
-      //         aggregatedSituation.foyers_fiscaux[foyerFiscalName] = foyerFiscal // Preserve order of foyerFiscal in foyersFiscaux.
-      //         continue nextAxis
-      //       }
-      //     }
-
-      //     let menageIndex = 0
-      //     for (let [menageName, menage] of Object.entries(
-      //       aggregatedSituation.menages,
-      //     )) {
-      //       if (index === menageIndex && menage[name] !== undefined) {
-      //         menage = { ...menage }
-      //         delete menage[name]
-      //         aggregatedSituation.menages = { ...aggregatedSituation.menages }
-      //         aggregatedSituation.menages[menageName] = menage // Preserve order of menage in menages.
-      //         continue nextAxis
-      //       }
-      //     }
-      //   }
-      // }
-    }
-
-    $calculationToken = uuidv4()
-    $webSocket.send(
-      JSON.stringify({
-        // reform: "PLF LFI",
-        reform: Object.keys($reform).length > 0 ? $reform : undefined,
-        situation: aggregatedSituation,
-        period: $year.toString(),
-        token: $calculationToken,
-        variables: decompositionsName,
-      }),
-    )
-    $webSocket.send(
-      JSON.stringify({
-        calculate: true,
-      }),
-    )
-  }
 </script>
-
-<svelte:head>
-  <title>Calculs | {$session.title}</title>
-</svelte:head>
-
-<main class="fond h-screen">
-  <div class="h-screen grid grid-cols-3 grid-rows-2 ">
-    <!-- Panneau de gauche les modifications de l'utilisateur (amendement et cas type)-->
-    <div
-      class="row-span-2 col-span-3 lg:col-span-1  bg-white shadow-md h-screen z-30"
-    >
-      <div class="bg-white h-full">
-        {#if editionMode === null}
-          <div class="px-5 fixed bg-white pt-20 w-full lg:w-1/3">
-            <div class="flex pt-6 justify-end ">
-              <!-- Bouton de fermeture de l'édition du cas type -->
-              <div>
-                <button on:click={closeEditionPane}>
-                  <svg
-                    class="fill-current text-gray-500 hover:text-gray-900"
-                    xmlns="http://www.w3.org/2000/svg"
-                    height="24px"
-                    viewBox="0 0 24 24"
-                    width="24px"
-                    fill="#000000"
-                    ><path d="M0 0h24v24H0z" fill="none" /><path
-                      d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
-                    /></svg
-                  ></button
-                >
-              </div>
-            </div>
-          </div>
-          <div class="pt-40">
-            <StartTutorial />
-          </div>
-        {:else if editionMode.mode === "test_case"}
-          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
-            <div class="flex pt-6 justify-end">
-              <!-- Bouton de fermeture de l'édition du cas type -->
-              <button on:click={closeEditionPane}>
-                <svg
-                  class="fill-current text-gray-500 hover:text-gray-900"
-                  xmlns="http://www.w3.org/2000/svg"
-                  height="24px"
-                  viewBox="0 0 24 24"
-                  width="24px"
-                  fill="#000000"
-                  ><path d="M0 0h24v24H0z" fill="none" /><path
-                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
-                  /></svg
-                ></button
-              >
-            </div>
-
-            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8">
-              Configurer le cas type
-            </h1>
-          </div>
-
-          <div class="px-5 overflow-scroll h-screen  pt-44 lg:pt-52 bg-white">
-            <p class="text-sm my-4 text-gray-700 rounded bg-le-bleu-light p-2">
-              📌 Par défaut, toutes les caractéristiques du cas type sont
-              considérées comme étant stables depuis 2 ans.
-            </p>
-
-            <TestCaseEdit
-              on:changeSituation={({ detail }) =>
-                changeSituation(
-                  asEditionModeWithTestCase(editionMode).testCaseIndex,
-                  detail,
-                )}
-              situation={$testCases[editionMode.testCaseIndex]}
-              year={$year}
-            />
-
-            <h2 class="font-bold text-xl pt-3">
-              Définir d'autres caractéristiques
-            </h2>
-            <div
-              class="bg-white border-le-bleu-light border-4 shadow-lg rounded-md my-5 mx-2"
-            >
-              <h1
-                class="bg-le-bleu-light text-2xl font-light text-gray-600 py-3 px-4 "
-              >
-                Ajouter d'autres caractéristiques
-              </h1>
-
-              <p class="py-2 px-4 font-light text-gray-600">
-                Depuis les cas type à droite de l'interface, <span
-                  class="font-normal">cliquez sur le nom d'un dispositif</span
-                > de la colonne de droite pour éditer les variables entrant dans
-                le calcul de ce dispositif.
-              </p>
-
-              <div class="m-4">
-                <img
-                  src="/tutoriel-edition-cas-type-variables-supp.png"
-                  alt="Tutoriel indiquant de cliquer sur un dispositif du cas type pour pouvoir ajouter d'autres caractéristiques au cas type."
-                />
-              </div>
-            </div>
-          </div>
-        {:else if editionMode.mode === "test_case_with_variable_inputs"}
-          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
-            <div class="flex justify-end pt-6">
-              <!-- Bouton de fermeture de l'édition du cas type et des variables d'entrée-->
-              <button on:click={closeEditionPane}>
-                <svg
-                  class="fill-current text-gray-500 hover:text-gray-900"
-                  xmlns="http://www.w3.org/2000/svg"
-                  height="24px"
-                  viewBox="0 0 24 24"
-                  width="24px"
-                  fill="#000000"
-                  ><path d="M0 0h24v24H0z" fill="none" /><path
-                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
-                  /></svg
-                ></button
-              >
-            </div>
-            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8">
-              Configurer le cas type
-            </h1>
-          </div>
-          <div class="px-5 overflow-scroll h-screen  pt-44 lg:pt-52 bg-white">
-            <p class="text-sm my-4 text-gray-700 rounded bg-le-bleu-light p-2">
-              📌 Par défaut, toutes les caractéristiques du cas type sont
-              considérées comme étant stables depuis 2 ans.
-            </p>
-
-            <TestCaseEdit
-              on:changeSituation={({ detail }) =>
-                changeSituation(
-                  asEditionModeWithTestCase(editionMode).testCaseIndex,
-                  detail,
-                )}
-              situation={$testCases[editionMode.testCaseIndex]}
-              year={$year}
-            />
-            <VariableReferredInputsPane
-              {date}
-              name={editionMode.variableName}
-              on:changeSituation={({ detail }) =>
-                changeSituation(
-                  asEditionModeWithTestCase(editionMode).testCaseIndex,
-                  detail,
-                )}
-              situation={$testCases[editionMode.testCaseIndex]}
-              year={$year}
-            />
-          </div>
-        {:else if editionMode.mode === "variable_parameters"}
-          <div class="px-5 fixed bg-white mt-20 w-full lg:w-1/3">
-            <div class="flex pt-6 justify-end">
-              <!-- Bouton de fermeture de l'édition des paramètres -->
-              <button on:click={closeEditionPane}>
-                <svg
-                  class="fill-current text-gray-500 hover:text-gray-900"
-                  xmlns="http://www.w3.org/2000/svg"
-                  height="24px"
-                  viewBox="0 0 24 24"
-                  width="24px"
-                  fill="#000000"
-                  ><path d="M0 0h24v24H0z" fill="none" /><path
-                    d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
-                  /></svg
-                ></button
-              >
-            </div>
-            <h1 class="text-3xl font-bold text-gray-600 pb-5 lg:pt-8 ">
-              Amender la loi
-            </h1>
-          </div>
-          <!-- Menu quand on aura la version abrégée
-          <div class="flex space-x-8 mb-8">
-            <div>
-              <a class="text-le-bleu text-base lg:text-lg " href="">
-                L'essentiel abrégé
-              </a>
-            </div>
-            <div>
-              <a
-                class="text-le-bleu text-base lg:text-lg font-bold underline"
-                href=""
-              >
-                Ensemble des paramètres
-              </a>
-            </div>
-          </div>
-          -->
-          <div class="px-5 overflow-scroll h-screen  pt-48 lg:pt-56 bg-white">
-            <div class="bg-gray-100  pb-3">
-              <VariableReferredParametersPane
-                {date}
-                name={editionMode.variableName}
-              />
-            </div>
-          </div>
-        {/if}
-      </div>
-    </div>
-    <!-- Panneau de droite pour les impacts et notamment le waterfall-->
-    <div class="row-span-2 col-span-3 lg:col-span-2 ">
-      <div class="fixed pt-24 lg:mt-20 lg:pt-4 fond lg:w-2/3 z-20 px-4 mx-1">
-        <div class="flex justify-between mb-4">
-          <label
-            ><input bind:checked={$adaptAmountsScale} type="checkbox" />
-            <p class="hidden text-xs lg:inline text-gray-600">
-              Échelle identique pour tous les cas types
-            </p>
-            <p class="lg:hidden text-xs inline text-gray-600 leading-none ">
-              Échelle identique cas types
-            </p></label
-          >
-          <div class="flex">
-            <button
-              class="bg-gray-200 text-gray-900 shadow-md hover:bg-gray-400 px-5 mr-2 rounded p-2 uppercase text-sm"
-              on:click={submit}
-            >
-              <div class="flex justify-center">
-                <!-- Material Icon Share --><svg
-                  class="fill-current md:mr-2"
-                  xmlns="http://www.w3.org/2000/svg"
-                  height="18px"
-                  viewBox="0 0 24 24"
-                  width="18px"
-                  fill="#000000"
-                  ><path d="M0 0h24v24H0z" fill="none" /><path
-                    d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"
-                  /></svg
-                >
-                <span class="hidden md:flex"> Sauvegarder / partager</span>
-              </div>
-            </button>
-
-            <div class="justify-self-end">
-              <button
-                class="bg-le-bleu text-white shadow-md hover:bg-blue-900 px-10 rounded p-2 uppercase text-sm"
-                on:click={submit}>Estimer</button
-              >
-            </div>
-          </div>
-        </div>
-        <h1 class="pt-3 text-3xl font-bold text-gray-600 pb-5 ">
-          Visualiser les cotis. & presta. sociales d'un cas type
-        </h1>
-      </div>
-      <!-- Cas types avec leur waterfall -->
-      <div class=" lg:pt-56 px-5 lg:h-screen h-full lg:overflow-scroll z-20">
-        <TestCasesPane
-          on:changeAxes={changeAxes}
-          on:changeVectorIndex={changeVectorIndex}
-          on:editSituation={editSituation}
-          on:selectSituationVariable={selectSituationVariable}
-          year={$year}
-        />
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Graph paper - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 100 100'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%23ded500' fill-opacity='0.4'%3E%3Cpath opacity='.5' d='M96 95h4v1h-4v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9zm-1 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9z'/%3E%3Cpath d='M6 5V0H5v5H0v1h5v94h1V6h94V5H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/statistiques.svelte b/src/routes/statistiques.svelte
deleted file mode 100644
index 42a2eb80b22c295f4d8571f0fc8facb608cbf06e..0000000000000000000000000000000000000000
--- a/src/routes/statistiques.svelte
+++ /dev/null
@@ -1,210 +0,0 @@
-<script lang="ts">
-  import { session } from "$app/stores"
-  import { slide } from "svelte/transition"
-
-  export let name = ""
-  export let group = "Item 1"
-  $: active = group === name
-</script>
-
-<svelte:head>
-  <title>Statistiques d'usage | {$session.title}</title>
-</svelte:head>
-
-<main class="flex items-center justify-center fond">
-  <div class="bg-white max-w-screen-md p-10">
-    <div class=" ">
-      <h1 class="font-serif font-bold pt-7 pb-10 text-3xl text-gray-700">
-        Statistiques d'usage
-      </h1>
-      <p class="leading-normal pb-3 text-xl text-justify text-gray-800">
-        Les données retenues ici témoignent du comportement général des usagers
-        sur le site et de leur engagement auprès du service.
-      </p>
-      <a
-        href="/a-propos"
-        class="inline-flex items-center bg-gray-200 mb-5 p-1 pr-2 text-base rounded
-    text-black shadow-md hover:bg-gray-400"
-      >
-        <!-- material icons - Arrow forward -->
-        <svg
-          class="flex mr-2 items-center"
-          xmlns="http://www.w3.org/2000/svg"
-          height="24px"
-          viewBox="0 0 24 24"
-          width="24px"
-          ><path d="M0 0h24v24H0z" fill="none" /><path
-            d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
-          /></svg
-        >
-        À propos de LexImpact
-      </a>
-      <div class="flex-col pt-10 items-center">
-        <a
-          href="https://www.assemblee-nationale.fr/dyn/15/amendements?recherche_textuelle=leximpact"
-        >
-          <h2 class="pb-3 pt-10 text-8xl text-gray-700 font-bold text-center ">
-            <span
-              class="bg-le-jaune bg-opacity-40 hover:text-le-bleu hover:bg-transparent"
-            >
-              40
-            </span>
-          </h2>
-        </a>
-        <p
-          class="leading-normal font-bold pb-3 text-xl text-center text-gray-700"
-        >
-          amendements<br /> citent "LexImpact"*
-        </p>
-        <p class="leading-normal pb-3 text-sm text-center text-gray-400">
-          *Ce groupe d'amendements peut contenir des doublons.
-        </p>
-      </div>
-
-      <h2 class="pb-3 pt-10 text-xl text-black font-bold">
-        LexImpact, employé dans le débat public
-      </h2>
-      <p class="leading-normal pb-3 text-base text-justify">
-        Les calculs du simulateur de l'Impôt sur le revenu ont été repris en
-        commission au débat de loi de finances pour 2021 comme en témoignent,
-        par exemple, &nbsp;<a
-          class="hover:text-le-bleu underline "
-          href="https://www.assemblee-nationale.fr/dyn/15/comptes-rendus/seance/session-ordinaire-de-2020-2021/deuxieme-seance-du-lundi-12-octobre-2020#P2220670"
-          >ces échanges en séance du lundi 12 octobre 2020</a
-        >.
-      </p>
-
-      <div class="bg-gray-100 py-5 my-2 rounded">
-        <p class="italic text-justify px-10 pt-2">M. Jean-Noël Barrot :</p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « Nous éprouvons de la sympathie pour les amendements de ce genre,
-          même si nous n’avons pas souhaité en déposer en séance publique. Pour
-          la clarté des débats, <span class="bg-le-jaune bg-opacity-40"
-            >je tiens à signaler que le simulateur LexImpact, dont nous
-            disposons désormais, permet d’évaluer précisément le coût pour les
-            finances publiques de l’amendement de Mme Pires Beaune, qui
-            s’établit à 800 millions d’euros.
-          </span> (Exclamations sur les bancs du groupe SOC.) »
-        </p>
-        <p class="italic text-justify px-10 pt-2">
-          Mme Christine Pires Beaune :
-        </p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « Ce sont 800 millions d’euros qui sont payés par les Français ! »
-        </p>
-
-        <p class="italic text-justify px-10 pt-2">M. le président :</p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « La parole est à Mme Véronique Louwagie. »
-        </p>
-        <p class="italic text-justify px-10 pt-2">Mme Véronique Louwagie :</p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « Notre collègue vient de développer un argument en faveur de cet
-          amendement (« Eh oui ! » sur les bancs du groupe SOC), en exprimant
-          clairement qu’au titre de l’article 2, ce sont 800 millions d’euros
-          supplémentaires qui vont être prélevés sur les revenus des Français !
-          »
-        </p>
-        <p class="italic text-justify px-10 pt-2">Mme Valérie Rabault :</p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « Exactement ! »
-        </p>
-        <p class="italic text-justify px-10 pt-2">
-          M. Laurent Saint-Martin, rapporteur général :
-        </p>
-        <p
-          class="font-serif font-light text-gray-700 italic text-justify px-10 "
-        >
-          « Quant à cette série d’amendements sur le quotient familial, faites
-          attention. <span class="bg-le-jaune bg-opacity-40"
-            >J’ai fait quelques simulations avec LexImpact pour évaluer leurs
-            effets</span
-          >
-          – cela fera plaisir à notre collègue Jean-Noël Barrot.
-          <span class="bg-le-jaune bg-opacity-40"
-            >Seules les familles avec trois enfants et un revenu mensuel d’au
-            moins 7 000 euros bénéficieraient du dispositif, qui ne concernerait
-            donc que les catégories plutôt aisées de la population.</span
-          > Ce n’est pas la priorité, durant cette crise. »
-        </p>
-      </div>
-
-      <h2 class="pb-3 pt-10 text-xl text-black font-bold">
-        Un périmètre qui s'agrandit progressivement
-      </h2>
-      <p>
-        Le périmètre des lois traité par les simulateurs LexImpact est composé
-        de l'impôt sur le revenu et du quotien familial ainsi que du calcul de
-        certaines des dotations aux communes (dotation forfaitaire, dotation de
-        solidarité rural et dotation de solidarité urbaine).
-      </p>
-
-      <div class="flex items-center gap-16">
-        <div class="w-1/2">
-          <h2 class="pb-3 pt-10 text-7xl text-gray-700  font-bold text-center ">
-            <span class="bg-le-jaune bg-opacity-40"> 1040 </span>
-          </h2>
-          <p
-            class="leading-normal font-bold pb-3 text-xl text-center text-gray-700"
-          >
-            Nombre de visites de la page d'accueil LexImpact*
-          </p>
-          <p class="leading-normal pb-3 text-sm text-center text-gray-400">
-            * Entre le 1er octobre 2020 et le 07 décembre 2020
-          </p>
-        </div>
-        <div class="w-1/2">
-          <h2 class="pb-3 pt-10 text-5xl text-gray-700 font-bold text-center ">
-            100
-          </h2>
-          <p
-            class="leading-normal font-bold pb-3 text-base text-center text-gray-700"
-          >
-            Nombre de clics** <br />sur le bouton "Estimer" <br />du
-            <a
-              class="underline hover:text-le-bleu"
-              href="https://leximpact.an.fr/ir"
-              >simulateur Impôt sur le revenu</a
-            >.
-          </p>
-
-          <h2 class="pb-3 pt-10 text-5xl text-gray-700 font-bold text-center ">
-            140
-          </h2>
-          <p
-            class="leading-normal font-bold pb-3 text-base text-center text-gray-700"
-          >
-            Nombre de clics** <br /> sur le bouton "Estimer" <br />du
-            <a
-              class="underline hover:text-le-bleu"
-              href="https://leximpact.an.fr/dotations"
-            >
-              simulateur Dotations aux communes</a
-            >.
-          </p>
-          <p class="leading-normal pb-3 pt-5 text-sm text-center text-gray-400">
-            **Entre le 27 octobre 2020 et le 07 décembre 2020
-          </p>
-        </div>
-      </div>
-    </div>
-  </div>
-</main>
-
-<style>
-  .fond {
-    background-color: #ffffff;
-    /* Polka dots - Heropatterns.com échelle réduite */
-    background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23ded500' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E");
-  }
-</style>
diff --git a/src/routes/variables/[variable]/index.svelte b/src/routes/variables/[variable]/index.svelte
index 0f1b80a41c23280d3ff3019a6fe20a290ddc9bb5..299d8c1656841647c92a2e99c5773645a89a6913 100644
--- a/src/routes/variables/[variable]/index.svelte
+++ b/src/routes/variables/[variable]/index.svelte
@@ -51,7 +51,7 @@
 <main class="flex items-center justify-center fond">
   <div class="bg-white max-w-screen-md p-10 ">
     <a
-      href="/simulation"
+      href="/"
       class="inline-flex items-center bg-gray-200 my-5 p-1 pr-2 text-xs rounded
 text-black shadow-md hover:bg-gray-400"
     >
diff --git a/static/image-circo-data.png b/static/image-circo-data.png
deleted file mode 100644
index 1bf2a493f939ad0714545e8829971279aeb07105..0000000000000000000000000000000000000000
Binary files a/static/image-circo-data.png and /dev/null differ
diff --git a/static/image-fond-page-accueil.jpg b/static/image-fond-page-accueil.jpg
deleted file mode 100644
index 8e755a74c56d58e5cc4ec86863e2a7681bc19134..0000000000000000000000000000000000000000
Binary files a/static/image-fond-page-accueil.jpg and /dev/null differ
diff --git a/static/logo-assemblee-nationale-blanc.png b/static/logo-assemblee-nationale-blanc.png
deleted file mode 100644
index 280c5b433f7ec3d452948a2f44728217241ae539..0000000000000000000000000000000000000000
Binary files a/static/logo-assemblee-nationale-blanc.png and /dev/null differ
diff --git a/static/logo-assemblee-nationale.png b/static/logo-assemblee-nationale.png
deleted file mode 100644
index 207989ae03c96bcab5f6157f4c3a0c5ae1e2dace..0000000000000000000000000000000000000000
Binary files a/static/logo-assemblee-nationale.png and /dev/null differ
diff --git a/static/logo_100x100.png b/static/logo_100x100.png
deleted file mode 100644
index 45894c80057e252c83291f05d27492933374fca6..0000000000000000000000000000000000000000
Binary files a/static/logo_100x100.png and /dev/null differ
diff --git a/static/picto-affaires-sociales.png b/static/picto-affaires-sociales.png
deleted file mode 100644
index 6872b1bb1b496ac7b01a98763145767a64e31648..0000000000000000000000000000000000000000
Binary files a/static/picto-affaires-sociales.png and /dev/null differ
diff --git a/static/picto-circo-data.png b/static/picto-circo-data.png
deleted file mode 100644
index 411461708a9d8772881cb35dee1b5b28eac5480f..0000000000000000000000000000000000000000
Binary files a/static/picto-circo-data.png and /dev/null differ
diff --git a/static/picto-dotations-communes.png b/static/picto-dotations-communes.png
deleted file mode 100644
index 7212604782728b3db572582551e2c562aaf377df..0000000000000000000000000000000000000000
Binary files a/static/picto-dotations-communes.png and /dev/null differ
diff --git a/static/picto-impot-sur-le-revenu.png b/static/picto-impot-sur-le-revenu.png
deleted file mode 100644
index 75f07056b0462a7c31601a110df03f207c1451dd..0000000000000000000000000000000000000000
Binary files a/static/picto-impot-sur-le-revenu.png and /dev/null differ
diff --git a/static/schema-explicatif-fonctionnement-simulateurs.png b/static/schema-explicatif-fonctionnement-simulateurs.png
deleted file mode 100644
index aa2942dde7e0251192c3cde99f0e63855c6e2617..0000000000000000000000000000000000000000
Binary files a/static/schema-explicatif-fonctionnement-simulateurs.png and /dev/null differ
diff --git a/tailwind.config.cjs b/tailwind.config.cjs
index 8840129671d18214ff0c678d232bc07125087e51..646706ba10876433f76a2816dcb1a311f668ee49 100644
--- a/tailwind.config.cjs
+++ b/tailwind.config.cjs
@@ -1,23 +1,9 @@
 const colors = require("tailwindcss/colors")
-const { tailwindExtractor } = require("tailwindcss/lib/lib/purgeUnusedStyles")
 
-module.exports = {
+const config = {
   mode: "jit",
   plugins: [require("@tailwindcss/forms")],
-  purge: {
-    content: ["./src/**/*.{html,js,svelte,ts}"],
-    options: {
-      defaultExtractor: (content) => [
-        // If this stops working, please open an issue at https://github.com/svelte-add/tailwindcss/issues rather than bothering Tailwind Labs about it
-        ...tailwindExtractor(content),
-        // Match Svelte class: directives (https://github.com/tailwindlabs/tailwindcss/discussions/1731)
-        ...[...content.matchAll(/(?:class:)*([\w\d-/:%.]+)/gm)].map(
-          ([_match, group, ..._rest]) => group,
-        ),
-      ],
-      keyframes: true,
-    },
-  },
+  purge: ["./src/**/*.{html,js,svelte,ts}"],
   theme: {
     extend: {
       colors: {
@@ -46,3 +32,5 @@ module.exports = {
     extend: {},
   },
 }
+
+module.exports = config