diff --git a/src/lib/components/budget/BudgetDetailView.svelte b/src/lib/components/budget/BudgetDetailView.svelte
index ee274caed125c9e8230a36911fe9dcfa88566b85..312aa697eea59657c113e7ccebc8aaacfa2fb6ed 100644
--- a/src/lib/components/budget/BudgetDetailView.svelte
+++ b/src/lib/components/budget/BudgetDetailView.svelte
@@ -18,7 +18,9 @@
   import type { VariableValueByCalculationName } from "$lib/variables"
 
   export let budgetSimulation: BudgetSimulation
-  export let secu: boolean = false //Si le dispositif concerne la sécurité sociale
+  // regime? organisme?
+  // export let regime: "etat" | "securite_sociale" | "agirc_arrco"
+  export let secu: boolean = false // Si le dispositif concerne la sécurité sociale
   export let type: "prelevement" | "prestation" | "csg"
   export let unzoomFactor: number = 1
   export let variableLabels: {
@@ -905,10 +907,10 @@
                     /></span
                   >de recettes
                   {#if !secu}
-                    pour l'État
+                    pour l'État.
                   {:else}
-                    pour la Sécurité sociale
-                  {/if}.
+                    pour la Sécurité sociale.
+                  {/if}
                 {:else if (!showAmendment || yFromQuantile(amendmentQuantile) < 0) && (!showBill || yFromQuantile(billQuantile) < 0) && yFromQuantile(lawQuantile) < 0}
                   perçoit <span class="text-xl font-bold"
                     ><ValueChange
@@ -989,10 +991,10 @@
                       /></span
                     >de recettes
                     {#if !secu}
-                      pour l'État
+                      pour l'État.
                     {:else}
-                      pour la Sécurité sociale
-                    {/if}.
+                      pour la Sécurité sociale.
+                    {/if}
                   {/if}
                 {:else}
                   représente <span class="text-xl font-bold"
@@ -1018,10 +1020,10 @@
                   >
                   {variableLabels.of}
                   {#if !secu}
-                    pour l'État
+                    pour l'État.
                   {:else}
-                    pour la Sécurité sociale
-                  {/if}.
+                    pour la Sécurité sociale.
+                  {/if}
                 {/if}
               </p>
               <p class="mt-2 text-sm text-gray-600">
diff --git a/src/lib/components/budget/BudgetLayout.svelte b/src/lib/components/budget/BudgetLayout.svelte
index 2840dd1bd02e3ba701a88ac31b537810a4ff937d..28ee46a6f8b361a5202cc8c2205da2b9ed95707e 100644
--- a/src/lib/components/budget/BudgetLayout.svelte
+++ b/src/lib/components/budget/BudgetLayout.svelte
@@ -5,13 +5,33 @@
   import Tooltip from "$lib/components/Tooltip.svelte"
   import type { DisplayMode } from "$lib/displays"
   import { newSimulationUrl } from "$lib/urls"
+  import { budgetVariablesNameByGroup } from "$lib/variables"
 
-  export let budgetSimulation: BudgetSimulation
+  export let budgetSimulation: BudgetSimulation | undefined
   export let displayMode: DisplayMode
+
+  $: budgetVariableGroupByName = Object.fromEntries(
+    Object.entries(budgetVariablesNameByGroup).reduce(
+      (arr: [string, string][], curr: [string, Set<string>]) => {
+        const group = curr[0]
+        const variables = curr[1]
+        for (const variable of variables) {
+          arr.push([variable, group])
+        }
+        return arr
+      },
+      [],
+    ),
+  )
+
+  $: budgetVariable = displayMode.parametersVariableName
+    ? budgetVariableGroupByName[displayMode.parametersVariableName] ??
+      displayMode.parametersVariableName
+    : undefined
 </script>
 
-{#if displayMode.parametersVariableName !== undefined}
-  {#if displayMode.parametersVariableName === "irpp_economique"}
+{#if budgetVariable !== undefined}
+  {#if budgetVariable === "irpp_economique" && budgetSimulation !== undefined}
     <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">Impôt sur le revenu</h3>
     <BudgetDetailView
       {budgetSimulation}
@@ -22,7 +42,7 @@
         ofThe: "de l'IR",
         the: "l'IR",
       }}
-      variableName="irpp_economique"
+      variableName={budgetVariable}
     >
       <span slot="title"> Recettes pour l'État </span>
       <span slot="description">
@@ -67,7 +87,7 @@
         of: "de l'IR",
       }}
     />
-  {:else if ["csg_deductible_retraite", "csg_imposable_retraite", "csg_retraite"].includes(displayMode.parametersVariableName)}
+  {:else if budgetVariable === "csg_retraite" && budgetSimulation !== undefined}
     <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
       CSG totale prélevée sur les retraites
       <br /><span class="text-xl font-normal">Imposable et déductible</span>
@@ -82,7 +102,7 @@
         ofThe: "de CSG sur les retraites",
         the: "la CSG",
       }}
-      variableName="csg_retraite"
+      variableName={budgetVariable}
     >
       <span slot="title"> Recettes pour la Sécurité sociale </span>
       <span slot="description">
@@ -138,7 +158,7 @@
         of: "de CSG retraites",
       }}
     />
-  {:else if ["csg_deductible_salaire", "csg_imposable_salaire", "csg_salaire"].includes(displayMode.parametersVariableName)}
+  {:else if budgetVariable === "csg_salaire" && budgetSimulation !== undefined}
     <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
       CSG totale prélevée sur les salaires
       <br /><span class="text-xl font-normal">Imposable et déductible</span>
@@ -153,7 +173,7 @@
         ofThe: "de CSG sur les salaires",
         the: "la CSG",
       }}
-      variableName="csg_salaire"
+      variableName={budgetVariable}
     >
       <span slot="title"> Recettes pour la Sécurité sociale </span>
       <span slot="description">
@@ -209,7 +229,7 @@
         of: "de CSG salaires",
       }}
     />
-  {:else if ["af", "af_base", "af_majoration", "af_allocation_forfaitaire", "af_complement_degressif", "af_allocation_forfaitaire_complement_degressif"].includes(displayMode.parametersVariableName)}
+  {:else if budgetVariable === "af" && budgetSimulation !== undefined}
     <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
       Allocations familiales brutes
     </h3>
@@ -224,7 +244,7 @@
         ofThe: "des allocations familiales",
         the: "les allocations familiales",
       }}
-      variableName="af"
+      variableName={budgetVariable}
     >
       <span slot="title"
         >Dépenses des allocations familiales pour la Sécurité sociale</span
@@ -281,7 +301,7 @@
         of: "d'allocations familiales",
       }}
     />
-  {:else if displayMode.parametersVariableName === "af_nettes_crds"}
+  {:else if budgetVariable === "af_nettes_crds"}
     <div class="w-screen md:w-full mx-4 text-center md:text-left">
       <h3 class="mb-2 text-2xl font-bold">Estimer l'impact budgétaire</h3>
       <p class="text-base text-black max-w-prose">
@@ -300,5 +320,111 @@
         </a>
       </div>
     </div>
+    <!-- TODO: modify title, description and variable labels, regime -->
+  {:else if budgetVariable === "agirc_arrco_salarie" && budgetSimulation !== undefined}
+    <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+      Cotisations salariales au régime de retraite complémentaire des salariés
+      du secteur privé
+    </h3>
+    <BudgetDetailView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "Cotisations salariales",
+        of: "de cotisations salariales",
+        ofThe: "des cotisations salariales",
+        the: "les cotisations salariales",
+      }}
+      variableName={budgetVariable}
+    >
+      <span slot="title"> Recettes pour l'État </span>
+      <span slot="description"> Recettes de cotisations salariales </span>
+    </BudgetDetailView>
+    <GagnantsPerdantsView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "les cotisations salariales",
+        of: "de cotisations salariales",
+      }}
+    />
+  {:else if budgetVariable === "contribution_equilibre_general_salarie" && budgetSimulation !== undefined}
+    <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+      Contribution d'équilibre général (CEG) à la charge du salarié
+    </h3>
+    <BudgetDetailView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "Cotisations salariales",
+        of: "de cotisations salariales",
+        ofThe: "des cotisations salariales",
+        the: "les cotisations salariales",
+      }}
+      variableName={budgetVariable}
+    >
+      <span slot="title"> Recettes pour l'État </span>
+      <span slot="description"> Recettes de cotisations salariales </span>
+    </BudgetDetailView>
+    <GagnantsPerdantsView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "les cotisations salariales",
+        of: "de cotisations salariales",
+      }}
+    />
+  {:else if budgetVariable === "vieillesse_deplafonnee_salarie" && budgetSimulation !== undefined}
+    <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+      Cotisation salariale d'assurance vieillesse déplafonnée
+    </h3>
+    <BudgetDetailView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "Cotisations salariales",
+        of: "de cotisations salariales",
+        ofThe: "des cotisations salariales",
+        the: "les cotisations salariales",
+      }}
+      variableName={budgetVariable}
+    >
+      <span slot="title"> Recettes pour l'État </span>
+      <span slot="description"> Recettes de cotisations salariales </span>
+    </BudgetDetailView>
+    <GagnantsPerdantsView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "les cotisations salariales",
+        of: "de cotisations salariales",
+      }}
+    />
+  {:else if budgetVariable === "vieillesse_plafonnee_salarie" && budgetSimulation !== undefined}
+    <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+      Cotisation salariale d'assurance vieillesse plafonnée
+    </h3>
+    <BudgetDetailView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "Cotisations salariales",
+        of: "de cotisations salariales",
+        ofThe: "des cotisations salariales",
+        the: "les cotisations salariales",
+      }}
+      variableName={budgetVariable}
+    >
+      <span slot="title"> Recettes pour l'État </span>
+      <span slot="description"> Recettes de cotisations salariales </span>
+    </BudgetDetailView>
+    <GagnantsPerdantsView
+      {budgetSimulation}
+      type="prelevement"
+      variableLabels={{
+        default: "les cotisations salariales",
+        of: "de cotisations salariales",
+      }}
+    />
   {/if}
 {/if}
diff --git a/src/lib/variables.ts b/src/lib/variables.ts
index b05eafbf3a95ce2fc111812c2b42e07f3a573a73..478ce0391c210499d0db58daf68a52d9993b17c8 100644
--- a/src/lib/variables.ts
+++ b/src/lib/variables.ts
@@ -189,7 +189,13 @@ for (const parametersName of Object.values(
   }
 }
 
+// Variables dont l'impact budgétaire peut être calculé
+// (pas vraiment, mais pour lesquelles on montre un impact budgétaire)
 export const budgetVariablesName = new Set([
+  "agirc_arrco_salarie",
+  "contribution_equilibre_general_salarie",
+  "vieillesse_deplafonnee_salarie",
+  "vieillesse_plafonnee_salarie",
   "csg_deductible_retraite",
   "csg_deductible_salaire",
   "csg_imposable_retraite",
@@ -205,6 +211,32 @@ export const budgetVariablesName = new Set([
   "af_allocation_forfaitaire_complement_degressif",
 ])
 
+// Variables groupées par l'impact budgétaire commun qu'elles partagent (celle du nom du groupe) :
+// l'impact budgétaire des variables "filles" d'un groupe correspond à celui de la variable "parent" de ce groupe
+export const budgetVariablesNameByGroup = {
+  af: new Set([
+    "af",
+    "af_base",
+    "af_majoration",
+    "af_allocation_forfaitaire",
+    "af_complement_degressif",
+    "af_allocation_forfaitaire_complement_degressif",
+  ]),
+  csg_retraite: new Set([
+    "csg_retraite",
+    "csg_deductible_retraite",
+    "csg_imposable_retraite",
+  ]),
+  csg_salaire: new Set([
+    "csg_salaire",
+    "csg_deductible_salaire",
+    "csg_imposable_salaire",
+  ]),
+}
+
+// Variables dont l'impact budgétaire ne peut pas être calculé mais qui ont un layout custom
+export const budgetVariablesNameRelated = new Set(["af_nettes_crds"])
+
 export const oilTypes = [
   "essence_sp95",
   "essence_sp95_e10",
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 8e6c17da14e85e50bbd3ea08a3b2835b58033a6a..d3c2221523de8b8b4f106353d23adb83ea177470 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -70,6 +70,7 @@
     type ValuesByCalculationNameByVariableName,
     type VariableValue,
     type VariableValues,
+    budgetVariablesNameByGroup,
   } from "$lib/variables"
 
   export let data: LayoutData
@@ -328,95 +329,75 @@
     $showTutorial = localStorage.getItem("hideTutorial") === null
   }
 
+  function buildBudgetDemandBody(
+    variableName: string,
+    outputVariables: string[],
+    quantileVaseVariable: string[],
+    quantileCompareVariables: string[],
+  ) {
+    const budgetParametricReform = Object.fromEntries(
+      Object.entries($parametricReform).filter(([parameterName]) =>
+        budgetEditableParametersName.has(parameterName),
+      ),
+    )
+    return {
+      amendement: budgetParametricReform,
+      base: 2024,
+      displayMode: $displayMode,
+      metadata,
+      output_variables: outputVariables,
+      quantile_base_variable: quantileVaseVariable,
+      quantile_compare_variables: quantileCompareVariables,
+      winners_loosers_variable: variableName,
+      quantile_nb: 10,
+      plf: $billName === undefined ? undefined : 2024,
+    }
+  }
+
   async function calculateBudget(
     budgetVariableName: string,
     // budgetCalculationNames: Set<CalculationName>,
   ): Promise<void> {
     budgetSimulationAbortController.abort()
     budgetSimulationAbortController = new AbortController()
-    const budgetParametricReform = Object.fromEntries(
-      Object.entries($parametricReform).filter(([parameterName]) =>
-        budgetEditableParametersName.has(parameterName),
-      ),
-    )
     const body = JSON.stringify(
       budgetVariableName === "irpp_economique"
-        ? {
-            amendement: budgetParametricReform,
-            base: 2024,
-            displayMode: $displayMode,
-            metadata,
-            output_variables: ["rfr_par_part", "irpp_economique"],
-            quantile_base_variable: ["rfr_par_part"],
-            quantile_compare_variables: ["irpp_economique", "rfr"],
-            winners_loosers_variable: "irpp_economique",
-            quantile_nb: 10,
-            plf: $billName === undefined ? undefined : 2024,
-          }
-        : [
-              "csg_deductible_retraite",
-              "csg_imposable_retraite",
+        ? buildBudgetDemandBody(
+            "irpp_economique",
+            ["rfr_par_part", "irpp_economique"],
+            ["rfr_par_part"],
+            ["irpp_economique", "rfr"],
+          )
+        : [...budgetVariablesNameByGroup["csg_retraite"]].includes(
+              budgetVariableName,
+            )
+          ? buildBudgetDemandBody(
               "csg_retraite",
-            ].includes(budgetVariableName)
-          ? {
-              amendement: budgetParametricReform,
-              base: 2024,
-              displayMode: $displayMode,
-              metadata,
-              output_variables: [
+              [
                 "rfr_par_part", // "assiette_csg_abattue",
                 "csg_deductible_retraite",
                 "csg_imposable_retraite",
               ],
-              quantile_base_variable: ["rfr_par_part"], // ["assiette_csg_abattue"],
-              quantile_compare_variables: [
-                "csg_deductible_retraite",
-                "csg_imposable_retraite",
-                "rfr",
-              ],
-              winners_loosers_variable: "csg_retraite",
-              quantile_nb: 10,
-              plf: $billName === undefined ? undefined : 2024,
-            }
-          : [
-                "csg_deductible_salaire",
-                "csg_imposable_salaire",
+              ["rfr_par_part"], // ["assiette_csg_abattue"],
+              ["csg_deductible_retraite", "csg_imposable_retraite", "rfr"],
+            )
+          : [...budgetVariablesNameByGroup["csg_salaire"]].includes(
+                budgetVariableName,
+              )
+            ? buildBudgetDemandBody(
                 "csg_salaire",
-              ].includes(budgetVariableName)
-            ? {
-                amendement: budgetParametricReform,
-                displayMode: $displayMode,
-                base: 2024,
-                metadata,
-                output_variables: [
+                [
                   "rfr_par_part", // "assiette_csg_abattue",
                   "csg_deductible_salaire",
                   "csg_imposable_salaire",
                 ],
-                quantile_base_variable: ["rfr_par_part"], // ["assiette_csg_abattue"],
-                quantile_compare_variables: [
-                  "csg_deductible_salaire",
-                  "csg_imposable_salaire",
-                  "rfr",
-                ],
-                winners_loosers_variable: "csg_salaire",
-                quantile_nb: 10,
-                plf: $billName === undefined ? undefined : 2024,
-              }
-            : [
+                ["rfr_par_part"], // ["assiette_csg_abattue"],
+                ["csg_deductible_salaire", "csg_imposable_salaire", "rfr"],
+              )
+            : [...budgetVariablesNameByGroup["af"]].includes(budgetVariableName)
+              ? buildBudgetDemandBody(
                   "af",
-                  "af_base",
-                  "af_majoration",
-                  "af_allocation_forfaitaire",
-                  "af_complement_degressif",
-                  "af_allocation_forfaitaire_complement_degressif",
-                ].includes(budgetVariableName)
-              ? {
-                  amendement: budgetParametricReform,
-                  displayMode: $displayMode,
-                  base: 2024,
-                  metadata,
-                  output_variables: [
+                  [
                     "revenus_menage_par_uc",
                     "af",
                     "af_base",
@@ -425,15 +406,44 @@
                     "af_complement_degressif",
                     "af_allocation_forfaitaire_complement_degressif",
                   ],
-                  quantile_base_variable: ["revenus_menage_par_uc"],
-                  quantile_compare_variables: ["af", "revenus_menage"],
-                  winners_loosers_variable: "af",
-                  quantile_nb: 10,
-                  plf: $billName === undefined ? undefined : 2024,
-                }
-              : {
-                  // Should never occur.
-                },
+                  ["revenus_menage_par_uc"],
+                  ["af", "revenus_menage"],
+                )
+              : budgetVariableName === "agirc_arrco_salarie"
+                ? buildBudgetDemandBody(
+                    "agirc_arrco_salarie",
+                    ["rfr_par_part", "agirc_arrco_salarie"],
+                    ["rfr_par_part"],
+                    ["agirc_arrco_salarie", "rfr"],
+                  )
+                : budgetVariableName ===
+                    "contribution_equilibre_general_salarie"
+                  ? buildBudgetDemandBody(
+                      "contribution_equilibre_general_salarie",
+                      [
+                        "rfr_par_part",
+                        "contribution_equilibre_general_salarie",
+                      ],
+                      ["rfr_par_part"],
+                      ["contribution_equilibre_general_salarie", "rfr"],
+                    )
+                  : budgetVariableName === "vieillesse_deplafonnee_salarie"
+                    ? buildBudgetDemandBody(
+                        "vieillesse_deplafonnee_salarie",
+                        ["rfr_par_part", "vieillesse_deplafonnee_salarie"],
+                        ["rfr_par_part"],
+                        ["vieillesse_deplafonnee_salarie", "rfr"],
+                      )
+                    : budgetVariableName === "vieillesse_plafonnee_salarie"
+                      ? buildBudgetDemandBody(
+                          "vieillesse_plafonnee_salarie",
+                          ["rfr_par_part", "vieillesse_plafonnee_salarie"],
+                          ["rfr_par_part"],
+                          ["vieillesse_plafonnee_salarie", "rfr"],
+                        )
+                      : {
+                          // Should never occur.
+                        },
       null,
       2,
     )
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 6129f8a5a383b3685e95f8c43e2a153c3fe9209c..0cf5d6599d8ff707f978eb340013d7e56308f65f 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -48,7 +48,6 @@
   import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte"
   import TestCaseView from "$lib/components/test_cases/TestCaseView.svelte"
   import TestCaseSimulationSharingModal from "$lib/components/TestCaseSimulationSharingModal.svelte"
-  import Tooltip from "$lib/components/Tooltip.svelte"
   import NonVariableReferredParameter from "$lib/components/variables/NonVariableReferredParameter.svelte"
   import VariableDetail from "$lib/components/variables/VariableDetail.svelte"
   import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte"
@@ -83,10 +82,11 @@
   import type { TabsConfig } from "$lib/tabs"
   import { newSimulationUrl, type SelfTargetAProps } from "$lib/urls"
   import {
+    budgetEditableParametersName,
     budgetVariablesName,
-    variableSummaryByName,
+    budgetVariablesNameRelated,
     type ValuesByCalculationNameByVariableName,
-    budgetEditableParametersName,
+    variableSummaryByName,
     variableSummaryByNameByReformName,
   } from "$lib/variables"
 
@@ -1415,118 +1415,54 @@
             -->
 
           <!--Affichage du titre "impacts" et onglets de choix cas types ou budget-->
-          {#if displayMode.parametersVariableName === undefined || (displayMode.parametersVariableName !== undefined && budgetVariablesName.has(displayMode.parametersVariableName)) || displayMode.parametersVariableName === "af_nettes_crds"}
-            <ul
-              class="flex items-center justify-between md:justify-start w-screen md:w-full"
-            >
-              <li class="w-1/2 md:w-auto flex justify-end">
-                <a
-                  class:hover:bg-le-vert-50={displayMode.budget}
-                  class:hover:text-le-bleu={displayMode.budget}
-                  data-sveltekit-noscroll
-                  href={newSimulationUrl({
-                    ...displayMode,
-                    budget: undefined,
-                  })}
-                >
-                  <h2
-                    class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-black 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
-                    class:!border-black={!displayMode.budget}
-                    class:text-black={!displayMode.budget}
-                    class:font-bold={!displayMode.budget}
-                  >
-                    <span class="hidden sm:flex"> Impact cas type </span>
-                    <span class="flex sm:hidden"> Cas type </span>
-                  </h2>
-                </a>
-              </li>
-              <li
-                class="w-1/2 flex md:w-auto justify-start"
-                id="situation_budget"
+          <ul
+            class="flex items-center justify-between md:justify-start w-screen md:w-full"
+          >
+            <li class="w-1/2 md:w-auto flex justify-end">
+              <a
+                class:hover:bg-le-vert-50={displayMode.budget}
+                class:hover:text-le-bleu={displayMode.budget}
+                data-sveltekit-noscroll
+                href={newSimulationUrl({
+                  ...displayMode,
+                  budget: undefined,
+                })}
               >
-                <a
-                  class:hover:bg-le-vert-50={!displayMode.budget}
-                  class:hover:text-le-bleu={!displayMode.budget}
-                  data-sveltekit-noscroll
-                  href={newSimulationUrl({
-                    ...displayMode,
-                    budget: true,
-                  })}
+                <h2
+                  class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-black 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
+                  class:!border-black={!displayMode.budget}
+                  class:text-black={!displayMode.budget}
+                  class:font-bold={!displayMode.budget}
                 >
-                  <h2
-                    class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
-                    class:!border-black={displayMode.budget}
-                    class:font-bold={displayMode.budget}
-                  >
-                    <span class="hidden sm:flex"> Impact budgétaire </span>
-                    <span class="flex sm:hidden"> Budget </span>
-                  </h2>
-                </a>
-              </li>
-            </ul>
-          {:else}
-            <ul
-              class="flex items-center justify-between md:justify-start w-screen md:w-full"
+                  <span class="hidden sm:flex"> Impact cas type </span>
+                  <span class="flex sm:hidden"> Cas type </span>
+                </h2>
+              </a>
+            </li>
+            <li
+              class="w-1/2 flex md:w-auto justify-start"
+              id="situation_budget"
             >
-              <li class="w-1/2 md:w-auto flex justify-end">
+              <a
+                class:hover:bg-le-vert-50={!displayMode.budget}
+                class:hover:text-le-bleu={!displayMode.budget}
+                data-sveltekit-noscroll
+                href={newSimulationUrl({
+                  ...displayMode,
+                  budget: true,
+                })}
+              >
                 <h2
-                  class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] 2xl:border-b-4 border-black px-3 pt-2 pb-1 text-black text-xl 2xl:text-2xl"
+                  class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
+                  class:!border-black={displayMode.budget}
+                  class:font-bold={displayMode.budget}
                 >
-                  <span class="font-bold tracking-wide">
-                    <span class="block md:hidden">Cas type</span>
-                    <span class="hidden md:block">Impact cas type</span>
-                  </span>
+                  <span class="hidden sm:flex"> Impact budgétaire </span>
+                  <span class="flex sm:hidden"> Budget </span>
                 </h2>
-              </li>
-              <li class="w-1/2 md:w-auto flex justify-start">
-                {#if displayMode.parametersVariableName !== undefined}
-                  {@const variable =
-                    $decompositionByName[displayMode.parametersVariableName] ??
-                    variableSummaryByName[displayMode.parametersVariableName]}
-                  <Tooltip
-                    arrowClass="bg-gray-100"
-                    widthClass="w-80"
-                    initialPlacement="bottom"
-                  >
-                    <h2
-                      class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-gray-300 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
-                    >
-                      <span class="block md:hidden">Budget</span>
-                      <span class="hidden md:block">Impact budgétaire</span>
-                    </h2>
-                    <!--Tooltip info budget manquant pour ce dispositif-->
-                    <div
-                      slot="tooltip"
-                      class="overflow-hidden bg-white text-sm font-light rounded-lg border border-gray-200 shadow-2xl"
-                    >
-                      <h3
-                        class="font-semibold text-gray-900 py-2 px-3 bg-gray-100 border-b border-gray-200"
-                      >
-                        Impact budgétaire indisponible
-                      </h3>
-
-                      <div class="py-2 px-3">
-                        <span class="text-black">
-                          Le calcul des impacts budgétaires du dispositif
-                          «&nbsp;{variable.short_label ??
-                            variable.label ??
-                            variable.name}&nbsp;» n'est pas encore disponible.
-                          <span class="font-normal"
-                            >Ce sujet vous intéresse ? Écrivez-nous à
-                            <a
-                              class="lx-link-text"
-                              href="mailto:leximpact@assemblee-nationale.fr"
-                              >leximpact@assemblee-nationale.fr</a
-                            ></span
-                          >
-                        </span>
-                      </div>
-                    </div>
-                  </Tooltip>
-                {/if}
-              </li>
-            </ul>
-          {/if}
+              </a>
+            </li>
+          </ul>
           {#if (displayMode.parametersVariableName !== undefined || displayMode.testCasesIndex.length > 0) && (mobileLawTab || !displayMode.budget)}
             <button
               class="z-30 absolute -bottom-4 right-2 lg:right-5 xl:right-10 flex items-center gap-2 py-2 px-5 shadow-lg bg-white hover:bg-gray-100 active:bg-gray-200 rounded border border-le-bleu text-le-bleu text-sm font-bold tracking-[0.085em] uppercase transition-all duration-200 ease-out-back disabled:opacity-0 disabled:scale-90"
@@ -1577,13 +1513,61 @@
                     <div
                       class="w-screen md:w-full flex flex-col px-2 xl:px-10 py-5"
                     >
-                      {#if $budgetSimulation === undefined}
-                        {#if displayMode.parametersVariableName !== undefined}
-                          <div class="z-10 bg-le-jaune bg-opacity-20">
-                            <Spinner />
+                      {#if !budgetVariablesName.has(displayMode.parametersVariableName) && !budgetVariablesNameRelated.has(displayMode.parametersVariableName)}
+                        {@const variable =
+                          $decompositionByName[
+                            displayMode.parametersVariableName
+                          ] ??
+                          variableSummaryByName[
+                            displayMode.parametersVariableName
+                          ]}
+                        <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+                          {variable.short_label ??
+                            variable.label ??
+                            variable.name}
+                        </h3>
+                        <div
+                          class="p-2 rounded-lg border border-gray-200 bg-white shadow-md"
+                        >
+                          <div
+                            class="flex flex-col items-center gap-6 px-10 py-28 text-center bg-gray-100 rounded-lg"
+                          >
+                            <span class="text-lg">
+                              Le calcul des impacts budgétaires du dispositif
+                              «&nbsp;{variable.short_label ??
+                                variable.label ??
+                                variable.name}&nbsp;» n'est pas encore
+                              disponible.
+                            </span>
+                            <span>
+                              Ce sujet vous intéresse ? Écrivez-nous à
+                              <a
+                                class="lx-link-text"
+                                href="mailto:leximpact@assemblee-nationale.fr"
+                              >
+                                leximpact@assemblee-nationale.fr
+                              </a>
+                            </span>
+                            <a
+                              class="mt-10 flex items-center gap-1.5 py-1.5 px-3 bg-white hover:bg-neutral-200 active:bg-neutral-300 rounded-lg font-semibold text-le-gris-dispositif-dark hover:text-black text-sm tracking-wider uppercase transition-all duration-200 ease-out-back s-y_bCXRrkrYfP"
+                              href={newSimulationUrl({
+                                ...displayMode,
+                                budget: false,
+                              })}
+                            >
+                              <!--                              <iconify-icon-->
+                              <!--                                class="text-lg"-->
+                              <!--                                icon="ri-arrow-left-line"-->
+                              <!--                              />-->
+                              Voir l'impact sur les cas types
+                            </a>
                           </div>
-                        {/if}
-                      {:else if $budgetSimulation.errors != null && $budgetSimulation.errors.length > 0}
+                        </div>
+                      {:else if $budgetSimulation === undefined && !budgetVariablesNameRelated.has(displayMode.parametersVariableName)}
+                        <div class="z-10 bg-le-jaune bg-opacity-20">
+                          <Spinner />
+                        </div>
+                      {:else if $budgetSimulation !== undefined && $budgetSimulation.errors != null && $budgetSimulation.errors.length > 0}
                         <div
                           class="w-fit mx-auto md:mt-32 flex flex-col items-center gap-10 p-10 bg-white rounded-lg border border-gray-200 shadow-md"
                         >