diff --git a/.github/workflows/test-with-example.yml b/.github/workflows/test-with-example.yml
index ee46c094409b91e719266d2bc7cd560233179e38..3190dd0428ab6424c214ffa72d9fb6a0bc133a48 100644
--- a/.github/workflows/test-with-example.yml
+++ b/.github/workflows/test-with-example.yml
@@ -2,7 +2,7 @@ name: Test with example
 
 on:
   pull_request:
-    types: [opened, reopened]
+    types: [opened, reopened, synchronize]
 
 jobs:
   build:
@@ -32,4 +32,4 @@ jobs:
           echo "== Pushing branch =="
           git add .
           git commit -m "Updated theme to ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} branch."
-          git push -f origin theme--${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
\ No newline at end of file
+          git push -f origin theme--${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml
index 192ada95f83b1e93671ff0d02aa0e544a67abad2..f0ceb48b1ac3086d82dafb48da59ba10166be3b4 100644
--- a/.github/workflows/version.yml
+++ b/.github/workflows/version.yml
@@ -25,7 +25,7 @@ jobs:
       - name: Commit & Push
         uses: Andro999b/push@v1.3
         with:
-          github_token: ${{ secrets.GITHUB_TOKEN }}
+          github_token: ${{ secrets.OSUNY_BOT_GITHUB_TOKEN }}
           branch: main
           force: true
           message: 'Write version to file'
@@ -40,4 +40,4 @@ jobs:
         uses: dkershner6/post-api-call-action@v1
         with:
           url: ${{ secrets.OSUNY_STAGING_API_AUTOUPDATE_THEME_URL }}
-          data: "{\"secret_key\":\"${{ secrets.OSUNY_API_AUTOUPDATE_THEME_KEY }}\"}"
\ No newline at end of file
+          data: "{\"secret_key\":\"${{ secrets.OSUNY_API_AUTOUPDATE_THEME_KEY }}\"}"
diff --git a/assets/js/theme/blocks/draggableBlocks.js b/assets/js/theme/blocks/draggableBlocks.js
new file mode 100644
index 0000000000000000000000000000000000000000..fcde80907af054d6068d5a757e9358fadcd7e148
--- /dev/null
+++ b/assets/js/theme/blocks/draggableBlocks.js
@@ -0,0 +1,170 @@
+const draggableBlocks = document.querySelectorAll('.block-timeline--horizontal, .block-posts--carousel');
+
+class DraggableBlock {
+    constructor (block) {
+        this.block = block;
+        this.content = this.block.querySelector('.draggable-container');
+        this.list = this.block.querySelector('ol, ul');
+        this.items = this.list.querySelectorAll('.draggable-item');
+        this.previous = this.block.querySelector('.previous');
+        this.next = this.block.querySelector('.next');
+        this.isPointerDown = false;
+
+        this.index = 0;
+
+        this.listen();
+        this.resize();
+        this.goTo(0);
+    }
+
+    listen () {
+        window.addEventListener('resize', this.resize.bind(this));
+
+        this.items.forEach((item, i) => {
+            item.addEventListener('click', this.onClickItem.bind(this, i));
+        });
+
+        if (this.previous && this.next) {
+            this.handleArrows();
+        }
+
+        this.handlePointers();
+        this.handleScroll();
+    }
+
+    resize () {
+        let maxTitleHeight = 0;
+
+        this.block.style = '';
+
+        this.itemWidth = this.items[0].offsetWidth;
+
+        this.items.forEach((item) => {
+            maxTitleHeight = Math.max(item.querySelector('.title, [itemprop="headline"]').offsetHeight, maxTitleHeight);
+        });
+
+        this.block.style.setProperty('--min-title-height', maxTitleHeight + 'px');
+        this.update();
+    }
+
+    onClickItem(i) {
+        if (!this.isManipulated) {
+            this.goTo(i);
+        }
+    }
+
+    handleArrows () {
+        this.previous.addEventListener('click', () => {
+            this.goTo(this.index-1);
+        });
+    
+        this.next.addEventListener('click', () => {
+            this.goTo(this.index+1);
+        });
+    }
+
+    handlePointers () {
+        let startX,
+            endX,
+            threshold = 30;
+            // j'ai initialisé isPointerDown au début du code : this.isPointerDown
+            // j'ai enlevé endEvents = ['pointerup'] parce qu'il était seul ?
+        this.block.style.touchAction = 'pan-y';
+
+        // on passe de this.content à this.block sur chaque événement pour grab sur tout le bloc
+        this.block.addEventListener('pointerdown', (event) => {
+            // On vérifie que l'on ne soit pas en train de cliquer sur les boutons (car on cible tout le bloc pour le grab)
+            if (event.target !== this.next && event.target !== this.previous) {
+                // on utilise partout this.isPointerDown car la navigation avec les arrow buguait
+                // parfois ça naviguait de 2 items
+                this.isPointerDown = true;
+                this.content.classList.add('is-grabbing');
+                startX = event.clientX;
+            }    
+        });
+
+        this.block.addEventListener('pointermove', (event) => {
+            endX = event.clientX;
+            // On vérifie que l'événement pointerdown a été activé
+            if (this.isPointerDown) {
+                event.preventDefault();
+                this.items.forEach((item) => {
+                    // on enlève le pointerevents pour que les liens ne soient pas cliquable au drag
+                    item.style.pointerEvents = "none";
+                });
+            }
+        });
+
+        // anciennement géré avec endEvents = ['pointerup'] (j'enlève le forEach)
+        this.block.addEventListener('pointerup', (event) => {
+            endX = event.clientX;
+            // on vérifie encore isPointerDown pour éviter le pb des arrows
+            if (this.isPointerDown) {
+                this.isPointerDown = false;
+                this.onManipulationEnd(startX, endX, threshold);
+            }
+        });
+    }
+    
+    handleScroll() {
+        // On écoute le scroll sur le contenu du bloc
+        this.content.addEventListener('wheel', (event) => {
+            const deltaX = event.deltaX;
+            const deltaY = event.deltaY;
+            // navigation entre les items (comme onManipulationEnd)
+            if (Math.abs(deltaX) > Math.abs(deltaY)) {
+                if (deltaX !== 0) {
+                    if (deltaX > 0) {
+                        this.goTo(this.index + 1);
+                    } else {
+                        this.goTo(this.index - 1);
+                    }
+                }
+            }
+        });
+    }
+
+    onManipulationEnd (start, end, threshold) {
+        if (start > end + threshold) {
+            this.goTo(this.index+1);
+        } else if (start < end - threshold) {
+            this.goTo(this.index-1);
+        }
+        
+        this.content.classList.remove('is-grabbing');
+        this.items.forEach((item) => {
+            // On rend le pointervents pour pouvoir cliquer sur le lien si on drag pas
+            item.style.pointerEvents = "all";
+        });
+
+        setTimeout(() => {
+            this.isManipulated = false;
+        }, 100);
+    }
+
+    goTo (_index) {
+        this.index = Math.min(Math.max(_index, 0), this.items.length-1);
+        this.update();
+    }
+
+    update () {
+        this.list.style.marginLeft = `${-this.index * this.itemWidth}px`;
+
+        this.items.forEach((item, index) => {
+            if (index < this.index) {
+                item.classList.add('is-passed');
+            } else {
+                item.classList.remove('is-passed');
+            }
+        });
+
+        if (this.previous && this.next) {
+            this.previous.disabled = this.index === 0;
+            this.next.disabled = this.index === this.items.length - 1;
+        }
+    }
+}
+
+draggableBlocks.forEach((block) => {
+    new DraggableBlock(block);
+});
diff --git a/assets/js/theme/blocks/timeline.js b/assets/js/theme/blocks/timeline.js
deleted file mode 100644
index 1cab898f388b1f5a5f0da6f2353673f115a033e1..0000000000000000000000000000000000000000
--- a/assets/js/theme/blocks/timeline.js
+++ /dev/null
@@ -1,132 +0,0 @@
-const timelines = document.querySelectorAll('.block-timeline--horizontal');
-
-class BlockTimeline {
-    constructor (block) {
-        this.block = block;
-        this.content = this.block.querySelector('.timeline');
-        this.list = this.block.querySelector('.timeline-events ol');
-        this.items = this.list.querySelectorAll('.timeline-event');
-        this.previous = this.block.querySelector('.previous');
-        this.next = this.block.querySelector('.next');
-        this.isManipulated = false;
-
-        this.index = 0;
-
-        this.listen();
-        this.resize();
-        this.goTo(0);
-    }
-
-    listen () {
-        window.addEventListener('resize', this.resize.bind(this));
-
-        this.items.forEach((item, i) => {
-            item.addEventListener('click', this.onClickItem.bind(this, i));
-        });
-
-        if (this.previous && this.next) {
-            this.handleArrows();
-        }
-
-        this.handlePointers();
-    }
-
-    resize () {
-        let maxTitleHeight = 0;
-
-        this.block.style = '';
-
-        this.itemWidth = this.items[0].offsetWidth;
-
-        this.items.forEach((item) => {
-            maxTitleHeight = Math.max(item.querySelector('.title').offsetHeight, maxTitleHeight);
-        });
-
-        this.block.style.setProperty('--min-title-height', maxTitleHeight + 'px');
-        this.update();
-    }
-
-    onClickItem(i) {
-        if (!this.isManipulated) {
-            this.goTo(i);
-        }
-    }
-
-    handleArrows () {
-        this.previous.addEventListener('click', () => {
-            this.goTo(this.index-1);
-        });
-        this.next.addEventListener('click', () => {
-            this.goTo(this.index+1);
-        });
-    }
-
-    handlePointers () {
-        let endEvents = ['pointerup'],
-            startX,
-            endX,
-            threshold = 30,
-            isPointerDown = false;
-
-        this.content.style.touchAction = 'pan-y';
-
-        this.content.addEventListener('pointerdown', (event) => {
-            this.content.classList.add('is-grabbing');
-            startX = event.clientX;
-            isPointerDown = true;
-        });
-
-        this.content.addEventListener('pointermove', (event) => {
-            this.isManipulated = isPointerDown;
-            endX = event.clientX;
-        });
-
-        endEvents.forEach(event => {
-            this.content.addEventListener(event, (event) => {
-                isPointerDown = false;
-                this.onManipulationEnd(startX, endX, threshold);
-            });
-        });
-    }
-
-    onManipulationEnd (start, end, threshold) {
-        if (start > end + threshold) {
-            this.goTo(this.index+1);
-        } else if (start < end - threshold) {
-            this.goTo(this.index-1);
-        }
-
-        this.content.classList.remove('is-grabbing');
-
-        // Add delay to avoid conflict with item clicked
-        setTimeout(() => {
-            this.isManipulated = false;
-        }, 100);
-    }
-
-    goTo (_index) {
-        this.index = Math.min(Math.max(_index, 0), this.items.length-1);
-        this.update();
-    }
-
-    update () {
-        this.list.style.marginLeft = `${-this.index * this.itemWidth}px`;
-
-        this.items.forEach((item, index) => {
-            if (index < this.index) {
-                item.classList.add('is-passed');
-            } else {
-                item.classList.remove('is-passed');
-            }
-        });
-
-        if (this.previous && this.next) {
-            this.previous.disabled = this.index === 0;
-            this.next.disabled = this.index === this.items.length - 1;
-        }
-    }
-}
-
-timelines.forEach((timeline) => {
-    new BlockTimeline(timeline);
-});
diff --git a/assets/js/theme/design-system/mainMenu.js b/assets/js/theme/design-system/mainMenu.js
index 1612759f85573531eecfd0bfc1e046da479eae43..feae6792b95bbd66c0ac12430956417c061efa16 100644
--- a/assets/js/theme/design-system/mainMenu.js
+++ b/assets/js/theme/design-system/mainMenu.js
@@ -1,4 +1,4 @@
-import { breakpoints } from '../utils/breakpoints';
+import { breakpoints, isMobile } from '../utils/breakpoints';
 import { a11yClick } from '../utils/a11y';
 
 const CLASSES = {
@@ -12,7 +12,7 @@ class MainMenu {
     constructor (selector) {
         this.element = document.querySelector(selector);
         this.menu = this.element.querySelector('.menu');
-        this.mainButton = this.element.querySelector('button');
+        this.mainButton = this.element.querySelector('button.header-button');
         this.dropdownsButtons = this.element.querySelectorAll('.has-children [role="button"]');
 
         this.state = {
@@ -59,19 +59,17 @@ class MainMenu {
     }
 
     resize () {
-        const isMobile = window.innerWidth <= breakpoints.md;
         document.documentElement.style.setProperty('--header-height', this.element.offsetHeight + 'px');
         document.documentElement.style.setProperty('--header-menu-max-height', (window.innerHeight - this.element.offsetHeight) + 'px');
-        
+
         // is state changed ?
-        if (this.state.isMobile === isMobile) {
+        if (this.state.isMobile === isMobile()) {
             return null;
         }
 
-        this.state.isMobile = isMobile;
+        this.state.isMobile = isMobile();
 
         this.closeEverything();
-        
     }
 
     toggleMainMenu (open = !this.state.isOpened) {
@@ -150,7 +148,7 @@ class MainMenu {
         if (y > this.state.previousScrollY + threshold && !isNearTop) {
             document.documentElement.classList.add(CLASSES.scrollingDown);
             hasChanged = true;
-        } else if (y < this.state.previousScrollY - threshold){
+        } else if (y < this.state.previousScrollY - threshold) {
             document.documentElement.classList.remove(CLASSES.scrollingDown);
             hasChanged = true;
         }
diff --git a/assets/js/theme/index.js b/assets/js/theme/index.js
index 5dc97bb8ec7e3c3e26fc77abafc75bfff9144365..98f75c1c3f810d4ba5ca0751d677168bf82aa0a1 100644
--- a/assets/js/theme/index.js
+++ b/assets/js/theme/index.js
@@ -8,5 +8,5 @@ import './design-system/search';
 import './design-system/toc';
 import './blocks/keyFigures';
 import './blocks/organizations';
-import './blocks/timeline';
+import './blocks/draggableBlocks.js';
 import './blocks/videos.js';
diff --git a/assets/js/theme/utils/breakpoints.js b/assets/js/theme/utils/breakpoints.js
index 4bb5c1e37d4fb6de7f1b5115304a224d6d9a4f3b..d0dba054d32f89a40e0571efa2d8d298343a0f40 100644
--- a/assets/js/theme/utils/breakpoints.js
+++ b/assets/js/theme/utils/breakpoints.js
@@ -8,7 +8,7 @@ const breakpoints = {
 };
 
 const isMobile = function() {
-    return window.innerWidth <= breakpoints.md 
+    return window.innerWidth <= breakpoints.lg 
 }
 
 export {
diff --git a/assets/js/vendors/carousel.js b/assets/js/vendors/carousel.js
index 41d1afa93a711b7adc3bb8a7c1f0b52d307d58ea..a983e5fc05614fadd6fd7a6d87df8eadabeb29a7 100644
--- a/assets/js/vendors/carousel.js
+++ b/assets/js/vendors/carousel.js
@@ -1,17 +1,21 @@
 import Splide from '@splidejs/splide';
 
-Splide.defaults = {
-    i18n: {
-        first: 'Aller au premier slide',
-        last: 'Aller au dernier slide',
-        next: 'Slide suivant',
-        pageX: 'Aller à la page %s',
-        pause: 'Mettre en pause le carousel',
-        play: 'Démarrer le carousel',
-        prev: 'Slide précedent',
-        slideX: 'Aller au slide %s'
-    }
-};
+let siteLang = document.querySelector('html').getAttribute('lang');
+
+if (siteLang == "fr") {
+    Splide.defaults = {
+        i18n: {
+            first: 'Aller au premier slide',
+            last: 'Aller au dernier slide',
+            next: 'Slide suivant',
+            pageX: 'Aller à la page %s',
+            pause: 'Mettre en pause le carousel',
+            play: 'Démarrer le carousel',
+            prev: 'Slide précedent',
+            slideX: 'Aller au slide %s'
+        }
+    };
+}
 
 class Carousel {
     constructor (element) {
diff --git a/assets/js/vendors/lightbox.js b/assets/js/vendors/lightbox.js
index b2cb76170eee2e4539d69146e2d38341a4050aaa..b8c477970840c1b4283c9f217b4e6335c7f5f264 100644
--- a/assets/js/vendors/lightbox.js
+++ b/assets/js/vendors/lightbox.js
@@ -1,6 +1,39 @@
 import gLightbox from 'glightbox';
 
-gLightbox({
+let siteLang = document.querySelector('html').getAttribute('lang');
+
+let lightboxBtn;
+
+const lightbox = gLightbox({
+    selector: '.glightbox',
     openEffect: 'fade',
-    closeEffect: 'fade'
+    closeEffect: 'fade',
+    onOpen: () => {
+        lightboxBtn = document.activeElement;
+        const lightboxContainer = document.querySelector('#glightbox-body');
+        lightboxContainer.setAttribute('aria-modal', 'true');
+
+        if(siteLang == "fr") {
+            const nextButton = document.querySelector('.gnext');
+            const prevButton = document.querySelector('.gprev');
+            const closeButton = document.querySelector('.gclose');
+        
+            nextButton.setAttribute('aria-label', 'Suivant');
+            prevButton.setAttribute('aria-label', 'Précédent');
+            closeButton.setAttribute('aria-label', 'Fermer');
+        }
+    },
+    onClose: () => {
+        if (lightboxBtn) {
+            lightboxBtn.focus();
+        }
+    }
 });
+
+lightbox.on('slide_changed', () => {
+    const currentSlide = document.querySelector('.gslide.current');
+    if (currentSlide) {
+        currentSlide.setAttribute("tabindex", "0");
+        currentSlide.focus();
+    }
+});
\ No newline at end of file
diff --git a/assets/sass/_theme/_configuration.sass b/assets/sass/_theme/_configuration.sass
index 5ac7b61b494fd5b02e728b00924be9bb5320de75..0a5043efa9b81d49656bd169a37bb0e46ccbbc5f 100644
--- a/assets/sass/_theme/_configuration.sass
+++ b/assets/sass/_theme/_configuration.sass
@@ -1,427 +1,9 @@
-// MAIN COLORS
-$color-accent: #0038FF !default
-$color-text: #000000 !default
-$color-text-alt: #454545 !default
-$color-border: rgba(0, 0, 0, 0.30) !default
-$color-background-alt: #F2F2F2 !default
-$color-background: #FFFFFF !default
-
-$body-color: $color-text !default
-$body-background-color: $color-background !default
-$link-color: $color-text !default
-
-// Grid
-$grid-gutter: px2rem(64) !default
-$grid-max-width: px2rem(1980) !default
-$grid-gutter-sm: px2rem(44) !default
-
-// Spacing
-$space-unit: 4 !default
-$spacing0: space(3) !default
-$spacing1: space(6) !default
-$spacing2: space(12) !default
-$spacing3: space(16) !default
-$spacing4: space(32) !default
-$spacing5: space(64) !default
-
-// TYPOGRAPHY
-
-// Fonts family
-$body-font-family: "Baskerville", "Times New Roman", "Times", serif !default
-$heading-font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif !default
-
-// Headings
-$heading-font-weight: normal !default
-
-// h1
-$h1-font-family: $heading-font-family !default
-$h1-size-desktop: px2rem(60) !default
-$h1-size: px2rem(30) !default
-$h1-line-height: 120% !default
-$h1-weight: bold !default
-$h1-text-transform: none !default
-
-// h2
-$h2-font-family: $heading-font-family !default
-$h2-size-desktop: px2rem(40) !default
-$h2-size: px2rem(24) !default
-$h2-line-height: 120% !default
-$h2-weight: $heading-font-weight !default
-$h2-text-transform: none !default
-
-// h3
-$h3-font-family: $heading-font-family !default
-$h3-size-desktop: px2rem(28) !default
-$h3-size: px2rem(20) !default
-$h3-line-height: 130% !default
-$h3-weight: bold !default
-$h3-text-transform: none !default
-
-// h4
-$h4-font-family: $heading-font-family !default
-$h4-size-desktop: px2rem(22) !default
-$h4-size: px2rem(16) !default
-$h4-line-height: 130% !default
-$h4-weight: bold !default
-$h4-text-transform: none !default
-
-// h5 or Section
-$h5-font-family: $heading-font-family !default
-$h5-size-desktop: px2rem(24) !default
-$h5-size: px2rem(20) !default
-$h5-line-height: 130% !default
-$h5-weight: $heading-font-weight !default
-$h5-text-transform: uppercase !default
-
-// h6 or Tab
-$h6-font-family: $heading-font-family !default
-$h6-size-desktop: px2rem(20) !default
-$h6-size: px2rem(14) !default
-$h6-line-height: 130% !default
-$h6-weight: $heading-font-weight !default
-$h6-text-transform: uppercase !default
-
-// Lead
-$lead-font-family: $heading-font-family !default
-$lead-size-desktop: px2rem(60) !default
-$lead-size: px2rem(24) !default
-$lead-line-height: 120% !default
-$lead-weight: $heading-font-weight !default
-
-$lead-sidebar-font-family: $lead-font-family !default
-$lead-sidebar-size-desktop: px2rem(32) !default
-$lead-sidebar-line-height: $lead-line-height !default
-$lead-sidebar-weight: $lead-weight !default
-
-$lead-hero-font-family: $lead-sidebar-font-family !default
-$lead-hero-size: $lead-size !default
-$lead-hero-size-desktop: $lead-sidebar-size-desktop !default
-$lead-hero-line-height: $lead-sidebar-line-height !default
-$lead-hero-weight: $lead-sidebar-weight !default
-
-// Body
-$body-size-desktop: px2rem(22) !default
-$body-size: px2rem(18) !default
-$body-line-height: 160% !default
-$body-weight: normal !default
-
-// Small
-$small-font-family: $body-font-family !default
-$small-size-desktop: px2rem(18) !default
-$small-size: px2rem(14) !default
-$small-line-height: 130% !default
-$small-weight: normal !default
-
-// Signature
-$signature-font-family: $heading-font-family !default
-$signature-size-desktop: px2rem(22) !default
-$signature-size: px2rem(18) !default
-$signature-line-height: 130% !default
-$signature-weight: $heading-font-weight !default
-
-// Meta
-$meta-font-family: $heading-font-family !default
-$meta-size-desktop: px2rem(16) !default
-$meta-size: px2rem(14) !default
-$meta-line-height: 150% !default
-$meta-weight: $heading-font-weight !default
-
-// Quotes
-$quote-font-family: $body-font-family !default
-$quote-size-desktop-short: px2rem(60) !default
-$quote-size-desktop-long: px2rem(40) !default
-$quote-size: px2rem(24) !default
-$quote-line-height: 120% !default
-$quote-weight: normal !default
-$quote-style: italic !default
-
-// Link
-$link-underline-offset: 0.2em !default
-$link-underline-thickness: 1px !default
-$link-transition: text-decoration-color .3s ease !default
-$link-unhover-decoration-color-alpha: 0.3 !default
-
-// Buttons
-$btn-font-size-desktop: px2rem(18) !default // TODO
-$btn-font-size: px2rem(14) !default
-$btn-padding-x-desktop: $spacing1 !default
-$btn-padding-y-desktop: px2rem(15) !default
-$btn-padding-x: $spacing1 !default
-$btn-padding-y: $spacing0 !default
-$btn-border-radius: px2rem(4) !default
-$btn-border: 1px solid $color-text !default
-$btn-hover-background: $color-background-alt !default
-
-// Chip
-$chip-background: $color-background !default
-$chip-background-hover: $color-background-alt !default
-$chip-border: 1px solid $color-border !default
-$chip-border-radius: $btn-border-radius !default
-$chip-color: $color-text !default
-
-// Form
-$form-btn-color: $color-background !default
-$form-btn-background-color: $color-accent !default
-$form-input-border-radius: 4px !default
-
-// Z-index
-$zindex-nav-accessibility: 1010 !default
-$zindex-stretched-link: 2 !default
-$zindex-header: 52 !default
-$zindex-body-overlay: 51 !default
-$zindex-toc: 60 !default
-$zindex-toc-cta: 49 !default
-$zindex-modal: 72 !default
-$zindex-aside: 48 !default
-$zindex-footer: 50 !default
-
-// Header
-$header-color: $color-text !default
-$header-hover-color: $color-accent !default // TODO : Réflechir à plus élégant / générique
-$header-background: $color-background-alt !default
-$header-transition: 0.3s !default
-$header-dropdown-full: false !default
-$header-dropdown-background: $header-background !default
-$header-dropdown-color: $header-color !default
-$header-dropdown-transition: $header-transition !default
-$header-sticky-enabled: true !default
-$header-sticky-background: $color-background !default
-$header-sticky-dropdown-background: $header-sticky-background !default
-$header-sticky-color: $header-color !default
-$header-sticky-transition: $header-transition !default
-$header-nav-padding-y: px2rem(20) !default
-$header-nav-padding-y-desktop: px2rem(30) !default
-$header-logo-height: 32px !default
-$header-logo-height-desktop: $header-logo-height !default
-$header-height: 87px !default
-$header-height-desktop: 96px !default
-$header-sticky-invert-logo: false !default
-$header-border-bottom-width: 1px !default
-
-// Navs
-$body-overlay-color: rgba(0, 0, 0, 0.3) !default
-
-// Footer
-$footer-color: $color-text !default
-$footer-background-color: $color-background-alt !default
-$footer-logo-height: $header-logo-height !default
-$footer-logo-height-desktop: $footer-logo-height !default
-$footer-icons-enabled: true !default
-$footer-icons-size: px2rem(32) !default
-$footer-text-hidden: false !default
-$dropdown-i18n-background-color: $color-background !default
-$dropdown-i18n-color: $color-text !default
-
-// Hero
-$hero-height: 300px !default
-$hero-height-desktop: 500px !default
-$hero-color: $color-text !default
-$hero-background-color: $color-background-alt !default
-$hero-credit-color: $color-text-alt !default
-
-// Breadcrumb
-$breadcrumb-color: $hero-color !default
-$breadcrumb-color-active: $hero-color !default
-$breadcrumb-icon: "caret-right" !default
-$breadcrumb-icon-color: $color-text-alt !default
-
-// Icons
-$icons: ()
-$icons: map-merge($icons, ("arrow": "\ff01"))
-$icons: map-merge($icons, ("arrow-first": "\e906"))
-$icons: map-merge($icons, ("arrow-last": "\e907"))
-$icons: map-merge($icons, ("arrow-left": "\ff02"))
-$icons: map-merge($icons, ("arrow-next": "\e909"))
-$icons: map-merge($icons, ("arrow-previous": "\e908"))
-$icons: map-merge($icons, ("arrow-right": "\ff00"))
-$icons: map-merge($icons, ("burger": "\e902"))
-$icons: map-merge($icons, ("burger-close": "\e905"))
-$icons: map-merge($icons, ("caret": "\e904"))
-$icons: map-merge($icons, ("caret-top": "\e914"))
-$icons: map-merge($icons, ("caret-right": "\e913"))
-$icons: map-merge($icons, ("caret-left": "\e912"))
-$icons: map-merge($icons, ("caret-bottom": "\e911"))
-$icons: map-merge($icons, ("check": "\ff06"))
-$icons: map-merge($icons, ("check-inline": "\ff07"))
-$icons: map-merge($icons, ("close": "\e90e"))
-$icons: map-merge($icons, ("copy": "\ff03"))
-$icons: map-merge($icons, ("copy-inline": "\ff04"))
-$icons: map-merge($icons, ("download": "\e900"))
-$icons: map-merge($icons, ("eye": "\e901"))
-$icons: map-merge($icons, ("facebook": "\e90b"))
-$icons: map-merge($icons, ("globe": "\ff10"))
-$icons: map-merge($icons, ("instagram": "\e90a"))
-$icons: map-merge($icons, ("link-blank": "\e903"))
-$icons: map-merge($icons, ("link-blank-block": "\ff05"))
-$icons: map-merge($icons, ("linkedin": "\e90c"))
-$icons: map-merge($icons, ("list-hyphen": "\e917"))
-$icons: map-merge($icons, ("pause": "\e90f"))
-$icons: map-merge($icons, ("play": "\e910"))
-$icons: map-merge($icons, ("search": "\e916"))
-$icons: map-merge($icons, ("search-inline": "\ee13"))
-$icons: map-merge($icons, ("social": "\e915"))
-$icons: map-merge($icons, ("social-facebook": "\ee01"))
-$icons: map-merge($icons, ("social-instagram": "\ee02"))
-$icons: map-merge($icons, ("social-linkedin": "\ee03"))
-$icons: map-merge($icons, ("social-mastodon": "\ee04"))
-$icons: map-merge($icons, ("social-peertube": "\ee05"))
-$icons: map-merge($icons, ("social-rss": "\ee06"))
-$icons: map-merge($icons, ("social-tiktok": "\ee07"))
-$icons: map-merge($icons, ("social-vimeo": "\ee08"))
-$icons: map-merge($icons, ("social-x": "\ee09"))
-$icons: map-merge($icons, ("social-youtube": "\ee0a"))
-$icons: map-merge($icons, ("social-github": "\ee10"))
-$icons: map-merge($icons, ("social-email": "\ee11"))
-$icons: map-merge($icons, ("toc": "\e918"))
-$icons: map-merge($icons, ("twitter": "\e90d"))
-$icons: map-merge($icons, ("whatsapp": "\e919"))
-$icons: map-merge($icons, ("email": "\e920"))
-$icons: map-merge($icons, ("telegram": "\e921"))
-
-// Breakpoints
-// TODO: réécrire en sass les mixins bootstrap
-$grid-breakpoints: (xs: 0, sm: 576px, md: 768px, desktop: 992px, lg: 992px, xl: 1200px, xxl: 1440px) !default
-
-// System
-
-// Lightbox
-$lightbox-overlay-color: rgba(0, 0, 0, 0.90) !default
-$lightbox-backdrop: blur(16px) !default
-
-// Table of content
-$toc-color: $color-text !default
-$toc-active-color: $color-accent !default // TODO : checker ce que ça fait
-$toc-background-color: $color-background-alt !default
-$toc-font-family: $body-font-family !default
-$toc-font-size: $body-size !default
-$toc-font-size-desktop: $body-size-desktop !default
-$toc-line-height: $body-line-height !default
-$toc-title-font-family: $meta-font-family !default
-$toc-title-font-size: $meta-size !default
-$toc-title-font-size-desktop: $meta-size-desktop !default
-$toc-sticky-transition: 0.4s
-$toc-overlay-color: $body-overlay-color !default
-
-// Table
-$table-head-font-size: $h4-size !default
-$table-head-font-size-desktop: $h4-size-desktop !default
-$table-body-size: $body-size !default
-$table-body-size-desktop: $body-size-desktop !default
-
-// BLOCKS
-// Base
-$block-space-y: $spacing3 !default
-
-// Block call to action
-$block-call-to-action-background: $color-accent !default
-$block-call-to-action-color: $color-background !default
-$block-call-to-action-button-background: $color-background !default
-$block-call-to-action-button-color: $color-text !default
-$block-call-to-action-button-hover-background: $color-text-alt !default
-$block-call-to-action-button-hover-color: $color-background !default
-
-// Block chapter
-$block-chapter-layout-accent-background: $color-accent !default
-$block-chapter-layout-accent-color: $color-background !default
-$block-chapter-layout-alt-background: $color-background-alt !default
-$block-chapter-layout-alt-color: $color-text !default
-
-// Block definitions
-$block-definition-border-color: $color-border !default
-$block-definition-border-color-hovered: $color-accent !default
-$block-definition-color-hovered: $color-accent !default
-$block-definition-font-size: $body-size !default
-$block-definition-font-size-desktop: $body-size-desktop !default
-
-// Block pages
-$block-pages-card-background: $color-background-alt !default
-$block-pages-card-page-background: $color-background !default
-$block-pages-card-page-color: $color-text !default
-$block-pages-card-page-background-hover: $color-accent !default
-$block-pages-card-page-color-hover: $color-background !default
-
-// Block posts
-$block-posts-grid-columns: 3 !default
-
-// Block timeline
-$block-timeline-horizontal-background: $color-background-alt !default
-$block-timeline-horizontal-color: $color-text !default
-
-// Block testimonials
-$block-testimonials-xl-font-size: $quote-size-desktop-short !default
-$block-testimonials-xl-line-height: $quote-line-height !default
-$block-testimonials-xl-font-size-long-text: $quote-size-desktop-long !default
-$block-testimonials-xl-line-height-long-text: $quote-line-height !default
-$block-testimonials-color: $color-accent !default
-$block-testimonials-font-family: $quote-font-family !default
-$block-testimonials-font-size: $quote-size !default
-$block-testimonials-line-height: $quote-line-height !default
-$block-testimonials-style: $quote-style !default
-$block-testimonials-pagination-background: $color-border !default
-$block-testimonials-pagination-progress-background: $color-accent !default
-
-// Block key_figures
-
-// TODO : overkill ?
-$block-key_figures-number-font-family: $heading-font-family !default
-$block-key_figures-unit-font-weight: normal !default
-$block-key_figures-number-font-weight: bold !default
-
-$block-key_figures-font-size: px2rem(16) !default
-$block-key_figures-number-font-size: px2rem(32) !default
-
-$block-key_figures-font-size-desktop: px2rem(18) !default
-$block-key_figures-number-font-size-desktop: px2rem(40) !default
-
-$block-key_figures-font-size-lg: px2rem(20) !default
-$block-key_figures-number-font-size-lg: px2rem(50) !default
-
-$block-key_figures-font-size-xl: $block-key_figures-font-size-lg !default
-$block-key_figures-number-font-size-xl: px2rem(60) !default
-
-$block-key_figures-font-size-xxl: $block-key_figures-font-size-xl !default
-$block-key_figures-number-font-size-xxl: px2rem(80) !default
-
-// Block gallery
-$block-gallery-carousel-background: $color-background-alt !default
-$block-gallery-carousel-max-height: 70vh !default
-
-// Block image
-$block-image-max-height-with-sidebar: calc(100vh - var(--header-height)) !default
-$block-image-max-height-without-sidebar: none !default
-
-// Block video
-$block-video-background: $color-background-alt !default
-
-// Sections
-$article-media-background: color-contrast($color-background, 3%) !default
-$article-media-aspect-ratio: 2 !default
-
-$post-media-background: $article-media-background !default
-$post-categories-color: color-contrast($color-text, 20%) !default
-$post-time-color: $color-text-alt !default
-// Si layout posts grid (ne concerne pas les blocks posts)
-$posts-grid-columns: $block-posts-grid-columns !default
-
-// Person
-$persons-avatar-background-color: $color-background-alt !default
-
-// Program
-$program-essential-font-size: $meta-size !default
-$program-essential-font-size-desktop: $meta-size-desktop !default
-$program-share-font-size: $meta-size !default
-$program-share-font-size-desktop: $meta-size-desktop !default
-$program-zindex-toc: $zindex-toc !default
-
-// MISC
-
-// Animations
-$arrow-ease-transition: cubic-bezier(0, 0.65, 0.4, 1.2) !default
-$arrow-ease-transition-2: cubic-bezier(0, 0.65, 0.4, 1) !default
-
-// Icons
-$icon-burger-margin-right: -12px
-$icon-close-margin-right: -12px
-$icon-toc-margin-right: -14px
-$icon-arrow-previous-margin-left: -22px // cf. testimonial
-$icon-social-margin-right: -14px
\ No newline at end of file
+// L'ordre d'appel des fichiers est important
+@import configuration/spacings
+@import configuration/colors
+@import configuration/typography
+@import configuration/icons
+@import configuration/animations
+@import configuration/components
+@import configuration/blocks
+@import configuration/sections
diff --git a/assets/sass/_theme/_utils.sass b/assets/sass/_theme/_utils.sass
index 5d19ea74895cceb39812fd6751342040d802853f..8fe28937e1de3e2fd1d88dda102a1b1d5322e621 100644
--- a/assets/sass/_theme/_utils.sass
+++ b/assets/sass/_theme/_utils.sass
@@ -1,483 +1,12 @@
-@function pxToRem($size)
-    $remSize: $size / 16
-    @return #{$remSize}rem
-
-@function px2rem($size)
-    @return pxToRem($size)
-
-$space-unit: 4 !default
-@function space($spaces: 1)
-    @return #{$spaces * $space-unit / 16}rem
-
-@mixin in-page-with-sidebar
-    @include media-breakpoint-up(desktop)
-        body:not(.full-width) &
-            @content
-
-@mixin in-page-without-sidebar
-    @include media-breakpoint-up(desktop)
-        main > .blocks &,
-        body.full-width &,
-            @content
-
-// Use this mixin to override with-aside or without-aside rules
-@mixin in-page-with-or-without-sidebar
-    @include media-breakpoint-up(desktop)
-        body:not(.full-width) &,
-        main > .blocks &,
-        body.full-width &,
-            @content
-
-// Aliases
-@mixin full-page
-    @include in-page-without-sidebar
-        @content
-
-@mixin not-full-page
-    @include in-page-with-sidebar
-        @content
-
-@mixin in-page-program
-    .programs__section &
-        @content
-
-@function half($size)
-    @return calc(#{$size} / 2)
-
-@mixin link($color: $link-color, $unhover_decorated: true)
-    color: $color
-    text-decoration-line: underline
-    text-decoration-thickness: $link-underline-thickness
-    text-underline-offset: $link-underline-offset
-    transition: $link-transition
-    @if $unhover_decorated
-        text-decoration-color: rgba($color, $link-unhover-decoration-color-alpha)
-    @else 
-        text-decoration-color: transparent
-    &:hover
-        text-decoration-color: rgba($color, 1)
-        text-decoration-thickness: $link-underline-thickness
-
-@mixin link-hovered-underline-only
-    &:not(:hover)
-        text-decoration: transparent
-
-@mixin hover-translate-icon($pseudo: after, $distance: 10)
-    &::#{$pseudo}
-        display: inline-block
-        transition: transform 0.55s $arrow-ease-transition
-        transform: translateX(0)
-    &:hover
-        &::#{$pseudo}
-            transform: translateX(#{px2rem($distance)})
-
-@mixin sticky($offset-y: 0)
-    position: sticky
-    top: $offset-y
-    @if $header-sticky-enabled
-        transition: top $header-sticky-transition
-        html:not(.is-scrolling-down) &
-            top: calc(var(--header-height) + #{$offset-y})
-
-// NEW UTILS
-@mixin icon($icon-name: '', $pseudo-element: before, $non-breaking: false)
-    &::#{$pseudo-element}
-        content: map-get($icons, $icon-name)
-        display: inline-block
-        font-family: 'Icon'
-        font-style: normal
-        font-variant: normal
-        font-weight: normal
-        line-height: 1
-        speak: never
-        text-transform: none
-        vertical-align: middle
-        @if $non-breaking
-            content: " #{map-get($icons, $icon-name)}"
-            display: inline
-        @content // TODO : important de documenter ça
-
-@mixin icon-block($icon-name: '', $pseudo-element: before, $non-breaking: false)
-    @include icon($icon-name, $pseudo-element, $non-breaking)
-        font-size: 44px
-        display: inline
-        @content
-
-@mixin container
-    margin-left: auto
-    margin-right: auto
-    max-width: $grid-max-width
-    padding-left: half($grid-gutter-sm)
-    padding-right: half($grid-gutter-sm)
-    width: 100%
-    @include media-breakpoint-up(desktop)
-        padding-left: $grid-gutter
-        padding-right: $grid-gutter
-
-@mixin grid($cols: 12, $breakpoint: false, $gap-y: $grid-gutter, $gap-x: $grid-gutter)
-    word-break: break-word
-    @if $breakpoint
-        @include media-breakpoint-up($breakpoint)
-            display: grid
-            grid-gap: $gap-y $gap-x
-            grid-template-columns: repeat($cols, 1fr)
-    @else
-        display: grid
-        grid-gap: $gap-y $gap-x
-        grid-template-columns: repeat($cols, 1fr)
-    @include media-breakpoint-down(desktop)
-        grid-gap: $grid-gutter-sm
-
-@mixin flexbox-grid($cols: 12, $gap-y: $grid-gutter, $gap-x: $gap-y)
-    display: flex
-    flex-wrap: wrap
-    gap: $gap-y $gap-x
-    > *
-        flex: 0 0 calc(#{100 / $cols}% - #{$gap-x} * #{($cols - 1) / $cols} )
-
-// This must be used for content inside columns
-@function col($quantity, $base: 12)
-    $quantity-on-base: $quantity / $base * 12
-    $width: calc( (100% + #{$grid-gutter}) / 12 * #{$quantity-on-base} - #{$grid-gutter} )
-    @return #{$width}
-
-// This must be used for offset, outside columns
-@function offset($quantity, $base: 12)
-    $quantity-on-base: $quantity / $base * 12
-    $width: calc( (100% + #{$grid-gutter}) / 12 * #{$quantity-on-base} )
-    @return #{$width}
-
-// This must be used for offset, inside columns
-@function col-offset($quantity, $base: 12)
-    $quantity-on-base: $quantity / $base * 12
-    $width: calc( (100% + #{$grid-gutter}) / 12 * #{$quantity-on-base} + #{$grid-gutter})
-    @return #{$width}
-
-@function col-outside-container($quantity, $base: 12)
-    $responsive-grid-width: Min(100vw, (#{$grid-max-width}))
-    @return calc((#{$responsive-grid-width} + #{$grid-gutter} * 2) / #{$base} * #{$quantity} - #{$grid-gutter} * 2)
-
-@function container-margin-x
-    @return Max(#{$grid-gutter}, calc(50vw - #{$grid-max-width} / 2 + #{$grid-gutter}))
-
-@mixin container-margin-left
-    margin-left: container-margin-x()
-
-@mixin container-margin-right
-    margin-right: container-margin-x()
-
-@mixin stretched-link($pseudo-element: after)
-    &::#{$pseudo-element}
-        bottom: 0
-        content: ''
-        left: 0
-        position: absolute
-        right: 0
-        top: 0
-        z-index: $zindex-stretched-link
-
-@mixin aspect-ratio($ratio, $selector: 'iframe', $background: false)
-    @if $background
-        aspect-ratio: #{$ratio}
-        background: $background
-    #{$selector}
-        aspect-ratio: #{$ratio}
-        display: block
-        width: 100%
-
-@mixin handle-svg-fit
-    picture.is-svg
-        img
-            object-fit: contain
-
-@mixin article($background: null)
-    position: relative
-    display: flex
-    flex-direction: column
-    .media
-        @include handle-svg-fit
-        margin-bottom: $spacing1
-        order: -1
-        overflow: hidden
-        img
-            display: block
-            object-fit: cover
-            @if $article-media-aspect-ratio
-                aspect-ratio: $article-media-aspect-ratio
-    h2, h3, [itemprop=headline]
-        @include h3
-        a
-            display: block
-            @include stretched-link
-            text-decoration: none
-    p + time
-            margin-top: $spacing0
-    time
-        @include meta
-        color: $color-text-alt
-        display: block
-
-@mixin post-time-author-flex
-    .post-meta
-        display: flex
-        flex-wrap: wrap
-    .post-author p::before
-        content: ' • '
-
-
-@mixin list-section
-    @include list-reset
-    > li
-        border-bottom: 1px solid $color-border
-        padding-bottom: $spacing1
-        padding-top: $spacing1
-        position: relative
-        > .title
-            @include h2
-            transition: color 0.55s
-            @include media-breakpoint-down(desktop)
-                @include icon(arrow-right, after, true)
-                    bottom: $spacing0
-                    position: absolute
-                    right: 0
-            @include media-breakpoint-up(desktop)
-                @include arrow-right-hover
-                display: block
-                &::after
-                    transform: translateX(0)
-                    position: relative
-                &:hover
-                    &::after
-                        transform: translateX($spacing0)
-        a
-            text-decoration: none
-            &:hover
-                color: $color-accent
-
-        @include media-breakpoint-down(desktop)
-            a:nth-child(2)
-                margin-top: calc(#{$spacing0} / 2)
-            a, p
-                display: block
-        @include media-breakpoint-up(desktop)
-            align-items: baseline
-            display: flex
-            justify-content: space-between
-            
-
-@mixin visually-hidden
-    clip: rect(0,0,0,0) !important
-    border: 0 !important
-    height: 1px !important
-    margin: -1px !important
-    overflow: hidden !important
-    padding: 0 !important
-    position: absolute !important
-    white-space: nowrap !important
-    width: 1px !important
-
-@mixin button-reset
-    appearance: none
-    background: transparent
-    border: none
-    border-radius: 0
-    cursor: pointer
-    user-select: none
-    &:active,
-    &:focus
-        box-shadow: inset 0 0 0 0.25rem rgba($color-text, 0.25)
-        // TODO : vérifier si l'outline 0 est vraiment nécessaire
-        // outline: 0
-
-@mixin list-reset
-    list-style: none
-    padding-left: 0
-    margin-bottom: 0
-    margin-top: 0
-
-@mixin inset($top: 0, $right: $top, $bottom: $top, $left: $top)
-    inset: $top $right $bottom $left
-    // polyfill for inset
-    @supports not (inset: $top)
-        bottom: $bottom
-        left: $left
-        right: $right
-        top: $top
-
-@function color-contrast($color, $amount)
-    @if lightness($color) > 50%
-        $amount: $amount * -1
-    @return scale-color($color, $lightness: $amount)
-
-@mixin button-icon($icon: false)
-    @include button-reset
-    line-height: $body-line-height
-    border: 1px solid $hero-color
-    padding: half($spacing0) $spacing1
-    white-space: nowrap
-    @if $icon
-        @include icon-block($icon, after)
-
-@mixin text-underline
-    text-decoration-color: $color-border
-    text-decoration-line: underline
-    text-decoration-thickness: 1px
-    text-underline-offset: 3px
-    text-decoration-line: underline
-
-@mixin arrow-right-hover
-    position: relative
-    display: flex
-    justify-content: space-between
-    align-items: center
-    @include icon(arrow, after)
-        opacity: 0
-        transform: translateX(-20px)
-        transition: 0.55s $arrow-ease-transition
-        position: absolute
-        right: 0
-    &:hover
-        &:after
-            opacity: 1
-            transform: translateX(0)
-
-@mixin top-flex
-    @include in-page-without-sidebar
-        align-items: baseline
-        display: flex
-        .block-title
-            width: col(4)
-            &:not(.hidden) + .description
-                margin-left: $grid-gutter
-        .description
-            margin-top: 0
-            width: col(8)
-
-@mixin collapsed-figcaption
-    figcaption
-        @include meta
-        color: $color-text-alt
-        position: absolute
-        display: block
-        left: 0
-        right: 0
-        text-align: right
-        z-index: 10
-        &::before
-            @include meta
-            content: '©'
-            position: absolute
-            right: 0
-            top: 0
-            background: $hero-background-color
-            text-align: center
-            padding: half($spacing0)
-            display: block
-        .credit-content
-            @include meta
-            background: $hero-background-color
-            display: none
-            padding: half($spacing0)
-            padding-right: $spacing1
-        a
-            color: inherit
-            text-decoration-color: inherit
-        &:focus
-            .credit-content
-                display: block
-        @include media-breakpoint-up(desktop)
-            color: $hero-credit-color
-            &:before
-                padding-right: 0
-        @include media-breakpoint-down(desktop)
-            position: relative
-            background: $color-background
-            &::before
-                background: transparent
-            .credit-content
-                display: block
-                background: transparent
-                position: relative
-
-    &:hover
-        figcaption .credit-content
-            display: block
-
-@mixin dropdown-i18n
-    position: relative
-    .dropdown-menu
-        margin-top: $header-nav-padding-y
-        right: 0
-        @include media-breakpoint-up(desktop)
-            padding-left: $spacing1
-            padding-bottom: $spacing0
-            padding-top: $spacing0
-            padding-right: $spacing1
-    li a
-        padding-bottom: half($spacing0)
-        padding-top: half($spacing0)
-        display: block
-        &.is-checked
-            display: flex
-            justify-content: space-between
-            align-items: center
-            gap: $spacing2
-            text-decoration: none !important
-            @include icon(caret, after)
-                transform: rotate(-14deg) skewX(-30deg)
-
-// https://gist.github.com/jonathantneal/d0460e5c2d5d7f9bc5e6
-@function str-replace($string, $search, $replace: "")
-	$index: str-index($string, $search)
-	@if $index
-		@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
-	@return $string
-    
-@mixin font-face($name, $path, $weight: 400, $style: normal, $exts: (eot woff2 woff ttf svg))
-  $src: null
-
-  $extmods: (eot:"?", svg:"#" + str-replace($name," ","_"))
-  $formats: (otf: "opentype", ttf: "truetype")
-
-  @each $ext in $exts
-    $extmod: if(map-has-key($extmods, $ext), $ext + map-get($extmods, $ext), $ext)
-    $format: if(map-has-key($formats, $ext), map-get($formats, $ext), $ext)
-    $src: append($src, url(quote("/assets/fonts/" + $path + "." + $extmod)) format(quote($format)), comma,)
-
-  @font-face
-    font-family: quote($name)
-    font-style: $style
-    font-weight: $weight
-    font-display: swap
-    src: $src
-
-@mixin sidebar($side: start)
-    @include media-breakpoint-down(desktop)
-        padding: 0 half($grid-gutter-sm)
-        margin-bottom: $spacing3
-    @include media-breakpoint-up(desktop)
-        @if $side == start
-            @include container-margin-left
-            left: 0
-        @else
-            @include container-margin-right
-            right: 0
-        margin-top: 0
-        top: 0
-        height: 100%
-        position: absolute
-        width: col-outside-container(4)
-        & > div
-            @include sticky($spacing1)
-        .toc-container
-            border-top: 1px solid $color-border
-            padding-top: $spacing1
-            position: static
-            margin-left: 0
-
-// Old browsers support
-
-@mixin browser-under-safari-16
-    @media not all and (min-resolution:.001dpcm) 
-            @supports (-webkit-appearance:none) and (display:flow-root)
-                @content
\ No newline at end of file
+@import utils/fonts
+@import utils/colors
+@import utils/grid
+@import utils/icons
+@import utils/links
+@import utils/media
+@import utils/normalize
+@import utils/sidebar
+@import utils/sizes
+@import utils/blocks
+
+@import utils/shame
\ No newline at end of file
diff --git a/assets/sass/_theme/_variables.sass b/assets/sass/_theme/_variables.sass
new file mode 100644
index 0000000000000000000000000000000000000000..c085e5cddb9fa23153df24ff420fe0532de42fab
--- /dev/null
+++ b/assets/sass/_theme/_variables.sass
@@ -0,0 +1,176 @@
+\:root
+  // -------------- //
+  //     COLORS     //
+  // ---------------//
+  --color-accent: #{$color-accent}
+  --color-text: #{$color-text}
+  --color-text-alt: #{$color-text-alt}
+  --color-selection: #{$color-selection}
+  --color-selection-background: #{$color-selection-background}
+  --color-border: #{$color-border}
+  --color-background-alt: #{$color-background-alt}
+  --color-background: #{$color-background}
+
+  @if $has-dark-mode
+    @media (prefers-color-scheme: dark)
+      --color-accent: #{$color-dark-accent}
+      --color-text: #{$color-dark-text}
+      --color-text-alt: #{$color-dark-text-alt}
+      --color-border: #{$color-dark-border}
+      --color-background-alt: #{$color-dark-background-alt}
+      --color-background: #{$color-dark-background}
+      --color-selection: #{$color-dark-selection}
+      --color-selection-background: #{$color-dark-selection-background}
+
+  // -------------- //
+  //   TYPOGRAPHY   //
+  // ---------------//
+  --h1-size: #{$h1-size}
+  --h1-line-height: #{$h1-line-height}
+
+  --h2-size: #{$h2-size}
+  --h2-line-height: #{$h2-line-height}
+
+  --h3-size: #{$h3-size}
+  --h3-line-height: #{$h3-line-height}
+
+  --h4-size: #{$h4-size}
+  --h4-line-height: #{$h4-line-height}
+
+  --h5-size: #{$h5-size}
+  --h5-line-height: #{$h5-line-height}
+
+  --h6-size: #{$h6-size}
+  --h6-line-height: #{$h6-line-height}
+
+  --lead-size: #{$lead-size}
+  --lead-line-height: #{$lead-line-height}
+
+  --lead-sidebar-size: #{$lead-sidebar-size}
+  --lead-sidebar-line-height: #{$lead-sidebar-line-height}
+  
+  --lead-hero-size: #{$lead-hero-size}
+  --lead-hero-line-height: #{$lead-hero-line-height}
+
+  --body-size: #{$body-size}
+  --body-line-height: #{$body-line-height}
+
+  --small-size: #{$small-size}
+  --small-line-height: #{$small-line-height}
+
+  --signature-size: #{$signature-size}
+  --signature-line-height: #{$signature-line-height}
+
+  --meta-size: #{$meta-size}
+  --meta-line-height: #{$meta-line-height}
+
+  --quote-size: #{$quote-size}
+  --quote-line-height: #{$quote-line-height}
+
+  @include media-breakpoint-up(desktop)
+    --h1-size: #{$h1-size-desktop}
+    --h1-line-height: #{$h1-line-height-desktop}
+
+    --h2-size: #{$h2-size-desktop}
+    --h2-line-height: #{$h2-line-height-desktop}
+
+    --h3-size: #{$h3-size-desktop}
+    --h3-line-height: #{$h3-line-height-desktop}
+
+    --h4-size: #{$h4-size-desktop}
+    --h4-line-height: #{$h4-line-height-desktop}
+
+    --h5-size: #{$h5-size-desktop}
+    --h5-line-height: #{$h5-line-height-desktop}
+
+    --h6-size: #{$h6-size-desktop}
+    --h6-line-height: #{$h6-line-height-desktop}
+
+    --lead-size: #{$lead-size-desktop}
+    --lead-line-height: #{$lead-line-height-desktop}
+
+    --lead-sidebar-size: #{$lead-sidebar-size-desktop}
+    --lead-sidebar-line-height: #{$lead-sidebar-line-height-desktop}
+    
+    --lead-hero-size: #{$lead-hero-size-desktop}
+    --lead-hero-line-height: #{$lead-hero-line-height-desktop}
+
+    --body-size: #{$body-size-desktop}
+    --body-line-height: #{$body-line-height-desktop}
+
+    --small-size: #{$small-size-desktop}
+    --small-line-height: #{$small-line-height-desktop}
+
+    --signature-size: #{$signature-size-desktop}
+    --signature-line-height: #{$signature-line-height-desktop}
+
+    --meta-size: #{$meta-size-desktop}
+    --meta-line-height: #{$meta-line-height-desktop}
+
+    --quote-size: #{$quote-size-desktop}
+    --quote-line-height: #{$quote-line-height-desktop}
+
+  // -------------- //
+  //    BUTTONS     //
+  // ---------------//
+  --btn-font-family: #{$btn-font-family}
+  --btn-font-size: #{$btn-font-size}
+  --btn-font-weight: #{$btn-font-weight}
+  --btn-text-transform: #{$btn-text-transform}
+  --btn-color: #{$btn-color}
+  --btn-hover-color: #{$btn-hover-color}
+  --btn-background: #{$btn-background}
+  --btn-hover-background: #{$btn-hover-background}
+  --btn-border: #{$btn-border}
+  --btn-border-radius: #{$btn-border-radius}
+  --btn-padding: #{$btn-padding}
+  --btn-min-width: #{$btn-min-width}
+  @include media-breakpoint-up(desktop)
+    --btn-font-size: #{$btn-font-size-desktop}
+    --btn-padding: #{$btn-padding-desktop}
+    --btn-border: #{$btn-border-desktop}
+    --btn-border-radius: #{$btn-border-radius-desktop}
+    --btn-min-width: #{$btn-min-width-desktop}
+  
+  // -------------- //
+  //      GRID      //
+  // ---------------//
+
+  // Largeur maximum de la grille définie dans _configuration.sass
+  --grid-max-width: #{$grid-max-width}
+
+  // Largeur de la grille
+  // Elle inclut les gouttières extérieures
+  // Si la largeur de l'écran est inférieure à 1980px, on prend la largeur totale.
+  // La grille n'est jamais plus grande que 1980px
+  --grid-width: Min(var(--grid-max-width), 100vw)
+
+  // Largeur d'une colonne
+  // On soustrait à la largeur de la grille les 13 gouttières (les 2 extérieures et les 11 intérieures), puis on divise par 12
+  --column-width: calc( (var(--grid-width) - var(--grid-gutter) * 13) / 12)
+
+  // Taille de la gouttière
+  // Les largeurs des gouttières en fonction des breakpoints sont définies dans _configuration.sass
+  --grid-gutter: #{$grid-gutter}
+  --grid-gutter-negative: #{-$grid-gutter}
+  @include media-breakpoint-up(lg)
+    --grid-gutter: #{$grid-gutter-lg}
+    --grid-gutter-negative: #{-$grid-gutter-lg}
+  @include media-breakpoint-up(xxl)
+    --grid-gutter: #{$grid-gutter-xxl}
+    --grid-gutter-negative: #{-$grid-gutter-xxl}
+
+  // -------------- //
+  //     HEADING    //
+  // ---------------//
+
+  --heading-margin-top: #{$heading-margin-top}
+  --heading-margin-bottom: #{$heading-margin-bottom}
+  // In page without sidebar
+  @include media-breakpoint-up(desktop)
+    body:not(.full-width)
+      --heading-margin-top: #{ $heading-margin-top-with-sidebar}
+      --heading-margin-bottom: #{$heading-margin-bottom-with-sidebar}
+    main > .blocks, body.full-width
+      --heading-margin-top: #{ $heading-margin-top-desktop}
+      --heading-margin-bottom: #{$heading-margin-bottom-desktop}
diff --git a/assets/sass/_theme/blocks/base.sass b/assets/sass/_theme/blocks/base.sass
index 0adf48cef3fa0d87d9645aeae2ab83934847f5d5..fa3a7009f10f6c1c6ae3ffb3bc34823f89b7fd8a 100644
--- a/assets/sass/_theme/blocks/base.sass
+++ b/assets/sass/_theme/blocks/base.sass
@@ -1,23 +1,30 @@
 .block
-    margin-top: $block-space-y
-    margin-bottom: $block-space-y
+    --block-space-y: #{$block-space-y}
+    margin-top: var(--block-space-y)
+    margin-bottom: var(--block-space-y)
     .block-title
         @include h5
     .top
         .block-title
             + .description
-                margin-top: $spacing1
+                margin-top: $spacing-3
         .block-title.hidden + .description
                 margin-top: 0
+    @include in-page-without-sidebar
+        --block-space-y: #{$block-space-y-desktop}
+    @include in-page-with-sidebar
+        --block-space-y: #{$block-space-y-with-sidebar}
 
 .heading
+    margin-bottom: var(--heading-margin-bottom)
     &:not(:first-child)
-        margin-top: $spacing3
-        @include in-page-without-sidebar
-            margin-top: $spacing4
+        margin-top: var(--heading-margin-top)
     @include in-page-without-sidebar
         h2
-            width: col(8)
+            width: columns(8)
+
+.heading + .block
+    margin-top: var(--heading-margin-bottom)
 
 // Specific
 $backgrounded_blocks: ".block-call_to_action, .block-chapter--accent_background, .block-chapter--alt_background, .block-timeline--horizontal, .block-pages--cards"
@@ -30,18 +37,8 @@ $backgrounded_blocks: ".block-call_to_action, .block-chapter--accent_background,
         &:is(#{$backgrounded_blocks})
             margin-bottom: 0
 
-// Heading + chapter
-.heading + .block-chapter
-    margin-top: $spacing1
-
 // Following chapters
 .block-chapter
     &--alt_background, &--accent_background
         & + &
             margin-top: 0
-
-// Heading + block_cta + full-width
-// .heading + .block-call_to_action
-//     margin-top: $spacing3
-//     padding-top: 0
-    
diff --git a/assets/sass/_theme/blocks/call_to_action.sass b/assets/sass/_theme/blocks/call_to_action.sass
index 2d7fab7c6992e13a1166ae233a9bb2089889cd68..aa1ec4a787fd00f9505f556b321ff7d68ff3593a 100644
--- a/assets/sass/_theme/blocks/call_to_action.sass
+++ b/assets/sass/_theme/blocks/call_to_action.sass
@@ -4,7 +4,7 @@
     .top
         margin-bottom: 0
         .block-title
-            margin-bottom: $spacing0
+            margin-bottom: $spacing-2
             + .description
                 margin-top: 0
         .description
@@ -17,7 +17,7 @@
         .description
             a
                 color: inherit
-                text-decoration-color:  $block-call-to-action-color
+                text-decoration-color: $block-call-to-action-color
             p
                 @include h2
         .actions
@@ -27,27 +27,24 @@
                     flex-direction: column
             a
                 @include meta
+                @extend %underline-on-hover
                 color: $block-call-to-action-color
-                margin-right: $spacing1
-                margin-top: $spacing1
-                text-decoration-color: rgba($block-call-to-action-color, .3)
+                margin-right: $spacing-3
+                margin-top: $spacing-3
                 display: inline-block
-                &:hover
-                    text-decoration-color: $block-call-to-action-color
+                text-decoration-color: alphaColor($block-call-to-action-color, 0.3)
                 &:first-child
-                    @include btn
-                    background: $block-call-to-action-button-background
-                    color: $block-call-to-action-button-color
-                    transition: background .3s ease, color .3s ease
-                    &:hover,
-                    &:focus-visible,
-                    &:focus
-                        background: $block-call-to-action-button-hover-background
-                        color: $block-call-to-action-button-hover-color
+                    --btn-background: #{$block-call-to-action-button-background}
+                    --btn-color: #{$block-call-to-action-button-color}
+                    --btn-hover-background: #{$block-call-to-action-button-hover-background}
+                    --btn-hover-color: #{$block-call-to-action-button-hover-color}
+                    --btn-border: none
+                    --btn-min-width: #{columns(2)}
+                    @extend .button
                 &:last-child
                     margin-bottom: 0
         * + .actions
-            margin-top: calc(#{$spacing2} - #{$spacing1})
+            margin-top: $spacing-3
         img
             display: block
 
@@ -56,13 +53,13 @@
         padding-top: 0
         padding-bottom: 0
         .call_to_action
-            padding: $spacing3 0
+            padding: var(--block-space-y) 0
             .actions
                 a
                     &:last-child
                         margin-bottom: 0
         .call_to_action--with-image
-            padding-top: half($grid-gutter-sm)
+            padding-top: var(--grid-gutter)
             display: flex
             flex-direction: column
             > *
@@ -80,7 +77,7 @@
             > div
                 // TODO : simplifier l'application d'une couleur de fond sur le CTA avec sidebar et sans sidebar
                 background-color: var(--cta-background-color)
-                padding: $grid-gutter col(1, 8)
+                padding: columns(1)
                 width: 100%
                 position: relative
                 &::after
@@ -91,27 +88,28 @@
                     top: 0
                     bottom: 0
                     left: 100%
-                    width: Max(#{$grid-gutter}, calc(50vw - #{half($grid-max-width)} + #{$grid-gutter}))
+                    // Calcul de la largeur nécessaire pour remplir l'espace droit entre le container et le bord droit de la fenêtre
+                    width: grid-external-space()
             &--with-image
                 picture
                     order: 1
-                    padding-left: col(1, 8)
-                    padding-right: offset(4, 8)
+                    padding-left: columns(1)
+                    padding-right: offset(4)
                     position: relative
                     z-index: 2
                     img
-                        margin-bottom: calc(-#{$grid-gutter} + -#{$spacing1})
+                        margin-bottom: calc(var(--grid-gutter-negative) + -#{$spacing-3})
                 > div
-                    padding-top: calc(#{$grid-gutter} + #{$spacing3})
+                    padding-top: calc(var(--grid-gutter) * 2 + #{$spacing-3})
 
     @include in-page-without-sidebar
         background-color: var(--cta-background-color)
         padding-top: 0
         padding-bottom: 0
         .block-content
-            padding: $spacing4 $grid-gutter
-            margin-left: -$grid-gutter
-            margin-right: -$grid-gutter
+            padding: $spacing-6 var(--grid-gutter)
+            margin-left: var(--grid-gutter-negative)
+            margin-right: var(--grid-gutter-negative)
         .call_to_action--with-image
             @include grid
             > div
@@ -139,7 +137,7 @@
                         &:first-child
                             margin-top: 0
                     a + a
-                        margin-top: $spacing1
+                        margin-top: $spacing-3
             &.call_to_action--with-title
                 .actions
                     grid-row: 2
diff --git a/assets/sass/_theme/blocks/chapter.sass b/assets/sass/_theme/blocks/chapter.sass
index e5c0f3a3767e84344f5eba3195c3b20e0548bf38..ff06e83d5204c932c97aa66214845bf43f4fdce7 100644
--- a/assets/sass/_theme/blocks/chapter.sass
+++ b/assets/sass/_theme/blocks/chapter.sass
@@ -2,7 +2,7 @@
     p:last-child
         margin-bottom: 0
     .notes
-        margin-top: $spacing1
+        margin-top: $spacing-3
         *
             @include small
         sub, sup
@@ -19,7 +19,7 @@
         .text
             order: 2
         figure
-            margin-bottom: $spacing1
+            margin-bottom: $spacing-3
     &--alt_background
         background: $block-chapter-layout-alt-background
         .block-content
@@ -31,56 +31,57 @@
             a
                 @include link($block-chapter-layout-accent-color)
 
-    &--alt_background, &--accent_background
+    &--alt_background, 
+    &--accent_background
         margin-bottom: 0
-        + .block-chapter--alt_background, + .block-chapter--accent_background
+        + .block-chapter--alt_background, 
+        + .block-chapter--accent_background
             margin-top: 0
 
     @include media-breakpoint-down(desktop)
-        &--alt_background, &--accent_background
-            padding-top: $grid-gutter
-            padding-bottom: $grid-gutter
-
-        &--with-image
-            &.block-chapter--alt_background, &.block-chapter--accent_background
-                padding-top: half($grid-gutter-sm)
+        &--alt_background,
+        &--accent_background
+            padding-top: var(--grid-gutter)
+            padding-bottom: var(--grid-gutter)
 
     @include in-page-with-sidebar
         figure
-            max-width: col(6, 8)
+            max-width: columns(6)
             &.image-portrait,
             &.image-square
-                max-width: col(4, 8)
-        &--alt_background, &--accent_background
+                max-width: columns(4)
+        &--alt_background,
+        &--accent_background
             background: none
             padding-bottom: 0
             padding-top: 0
             .chapter .text
-                padding: $grid-gutter
+                padding: var(--grid-gutter)
             figure
                 margin-bottom: 0
                 figcaption
-                    padding-left: $grid-gutter
-
+                    padding-left: var(--grid-gutter)
         &--alt_background
             .chapter
                 background: $block-chapter-layout-alt-background
         &--accent_background
             .chapter
                 background: $block-chapter-layout-accent-background
+
     @include in-page-without-sidebar
-        &--alt_background, &--accent_background
-            padding-top: $grid-gutter
-            padding-bottom: $grid-gutter
+        &--alt_background, 
+        &--accent_background
+            padding-top: var(--grid-gutter)
+            padding-bottom: var(--grid-gutter)
             margin-bottom: 0
         .chapter
             flex-direction: row
+            justify-content: space-between
             .text
                 order: 0
-                width: col(7)
+                width: columns(7)
             figure
-                width: col(4)
-                margin-left: col-offset(1)
+                width: columns(4)
                 margin-bottom: 0
                 text-align: right
                 img
diff --git a/assets/sass/_theme/blocks/contact.sass b/assets/sass/_theme/blocks/contact.sass
index be14a1d894192873ea9c494d5fc8827fec3a18fc..acc9cf80aed24df47e756ce702605106a9ca9028 100644
--- a/assets/sass/_theme/blocks/contact.sass
+++ b/assets/sass/_theme/blocks/contact.sass
@@ -3,7 +3,7 @@
         @include top-flex
         margin-bottom: 0
         + .informations
-            margin-top: $spacing2
+            margin-top: $spacing-4
 
     .informations
         p,
@@ -14,21 +14,20 @@
         [itemprop="name"]
             @include h4
         a
-            &:not(:hover)
-                text-decoration-color: transparent
+            @extend %underline-on-hover
         + ul
-            margin-top: $spacing2
+            margin-top: $spacing-4
     ul
         @include list-reset
         li
             display: flex
             flex-wrap: wrap
-            padding-bottom: $spacing0
+            padding-bottom: $spacing-2
             &:first-of-type
                 padding-top: 0
             + li
-                padding-top: $spacing0
-                border-top: 1px solid $color-border
+                padding-top: $spacing-2
+                border-top: 1px solid var(--color-border)
             @include media-breakpoint-down(desktop)
                 justify-content: end
                 flex-wrap: wrap
@@ -47,18 +46,18 @@
     time + time
         @include icon(arrow-right, before)
             display: inline-block
-            padding: 0 px2rem(7) 0 px2rem(3)
+            padding: 0 pxToRem(7) 0 pxToRem(3)
 
     @include in-page-without-sidebar
         .top
-            margin-bottom: $spacing2
+            margin-bottom: $spacing-4
         .informations
             display: flex
             margin-top: 0
             address
-                width: col(4)
+                width: columns(4)
                 margin-top: 0
             ul
                 margin-top: 0
-                width: col(8)
-                margin-left: $grid-gutter
\ No newline at end of file
+                width: columns(8)
+                margin-left: var(--grid-gutter)
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/datatable.sass b/assets/sass/_theme/blocks/datatable.sass
index e3eb5c243aa22ac9c4cc5aa6daa7c52244ca8cb2..b5a8f2c9ce3ee989ca6989354ebe86ae0b4b99d5 100644
--- a/assets/sass/_theme/blocks/datatable.sass
+++ b/assets/sass/_theme/blocks/datatable.sass
@@ -2,8 +2,8 @@
     th
         white-space: nowrap
     caption
-        color: $color-text-alt
+        color: var(--color-text-alt)
     @include media-breakpoint-up(desktop)
         .top
             p
-                width: col(8)
+                width: columns(8)
diff --git a/assets/sass/_theme/blocks/definitions.sass b/assets/sass/_theme/blocks/definitions.sass
index ff72015af4391988e8d0e72ea05d975246255ca2..766c4e4843ba388157b97a1e7613b76089e835ae 100644
--- a/assets/sass/_theme/blocks/definitions.sass
+++ b/assets/sass/_theme/blocks/definitions.sass
@@ -25,7 +25,7 @@
                 font-size: $block-definition-font-size-desktop
         p
             margin-block-start: 0
-            margin-block-end: $spacing1
+            margin-block-end: $spacing-3
         &::after
             content: ""
             border-bottom: 1px solid $block-definition-border-color
@@ -36,6 +36,6 @@
         .definitions
             details
                 p
-                    padding-left: col(4)
-                    margin-left: $grid-gutter
+                    padding-left: columns(4)
+                    margin-left: var(--grid-gutter)
 
diff --git a/assets/sass/_theme/blocks/features.sass b/assets/sass/_theme/blocks/features.sass
index b225b1b586cafe45a591b72154af8ab8fba7924d..375807f872ff0af02bee806ce6b499fc704d2fa8 100644
--- a/assets/sass/_theme/blocks/features.sass
+++ b/assets/sass/_theme/blocks/features.sass
@@ -5,9 +5,9 @@
         display: flex
         flex-direction: column
         + li
-            margin-top: $spacing3
+            margin-top: $spacing-5
         .name
-            margin-bottom: $spacing0
+            margin-bottom: $spacing-2
         figure
             order: -1
             img
@@ -15,20 +15,20 @@
                 margin: auto
             figcaption
                 @include meta
-                margin-top: $spacing0
+                margin-top: $spacing-2
                 text-align: right
 
     @include in-page-with-sidebar
         li
             flex-direction: row
             figure
-                width: calc(#{col(2, 8)} + #{half($grid-gutter)})
+                width: columns(2)
                 flex-shrink: 0
-                margin-right: half($grid-gutter)
+                margin-right: var(--grid-gutter)
 
     @include in-page-without-sidebar
         .top
-            width: col(8)
+            width: columns(8)
         ul
             @include list-reset
             @include grid(3, desktop)
@@ -37,5 +37,5 @@
             + li
                 margin-top: 0
             .name
-                margin-top: $spacing1
+                margin-top: $spacing-3
 
diff --git a/assets/sass/_theme/blocks/files.sass b/assets/sass/_theme/blocks/files.sass
index f890850fd3f325ead5e1f66abe9cdb3f12002193..de109a8ad5780983a2dac8f56b65215455876b3f 100644
--- a/assets/sass/_theme/blocks/files.sass
+++ b/assets/sass/_theme/blocks/files.sass
@@ -10,19 +10,19 @@
             position: relative
             &::before
                 align-items: center
-                border: 1px solid $color-border
+                border: 1px solid var(--color-border)
                 display: flex
                 flex-shrink: 0
-                height: px2rem(60)
+                height: pxToRem(60)
                 justify-content: center
-                margin-right: $spacing0
+                margin-right: $spacing-2
                 transition: background 0.3s ease, border 0.3s ease
-                width: px2rem(60)
+                width: pxToRem(60)
             &:hover
                 &::before
-                    background-color: $color-text
+                    background-color: var(--color-text)
                     border-color: transparent
-                    color: $color-background
+                    color: var(--color-background)
         a
             @include stretched-link(before)
             @include small
@@ -32,17 +32,17 @@
                 content: none !important // Remove default icon _blank
     figcaption
         @include meta
-        margin-top: half($spacing0)
+        margin-top: $spacing-1
 
     @include media-breakpoint-down(desktop)
         .files
             li + li
-                margin-top: $spacing1
+                margin-top: $spacing-3
 
     @include in-page-with-sidebar
         .files
-            @include grid(2, desktop, half($grid-gutter))
+            @include grid(2, desktop, $spacing-3)
 
     @include in-page-without-sidebar
         .files
-            @include grid(3, desktop, half($grid-gutter))
+            @include grid(3, desktop, $spacing-3)
diff --git a/assets/sass/_theme/blocks/gallery.sass b/assets/sass/_theme/blocks/gallery.sass
index 6cc19179e39b82d2bc7669dfe257599fc6328fd7..d059a9fa2d798608267be1338ddca1914d94a339 100644
--- a/assets/sass/_theme/blocks/gallery.sass
+++ b/assets/sass/_theme/blocks/gallery.sass
@@ -2,21 +2,22 @@
     figure
         display: block
         margin-bottom: 0
+        position: relative
         > a,
         img,
         picture
             display: block
         > a
-            transition: filter .3s ease
-            &:hover
-                // if low opacity means not selected, selected needs to be darker
-                filter: brightness(95%)
+            @include stretched-link
         img
             height: auto
             width: 100%
         figcaption
             @include small
+            margin-top: $spacing-2
             position: relative
+            > * + *
+                margin-top: $spacing-1
             p
                 margin-bottom: 0
         .credit
@@ -30,39 +31,59 @@
 
     &--grid
         .gallery
-            align-items: baseline
             @include in-page-with-sidebar
-                @include flexbox-grid(3, half($grid-gutter))
+                @include flexbox-grid(2)
             @include in-page-without-sidebar
                 @include flexbox-grid(4)
             @include media-breakpoint-down(desktop)
-                @include flexbox-grid(2, half($grid-gutter-sm))
+                @include flexbox-grid(2)
             &--with-text
                 @include in-page-without-sidebar
-                    @include flexbox-grid(4, half($grid-gutter), $grid-gutter)
-                figure
-                    display: flex
-                    flex-direction: column
-                    gap: space(3)
+                    @include flexbox-grid(4)
+
+    &--large
+        figure
+            margin-bottom: $spacing-5
+            @include media-breakpoint-down(desktop)
+                picture
+                    margin-left: var(--grid-gutter-negative)
+                    margin-right: var(--grid-gutter-negative)
+            @include in-page-without-sidebar
+                &.image-portrait,
+                &.image-square
+                    picture
+                        width: columns(8)
+                        margin-left: offset(2)
+        @include in-page-without-sidebar
+            figure
+                &.image-portrait,
+                &.image-square
                     figcaption
-                        &::after
-                            content: ' '
+                        margin-left: offset(2)
+                        margin-right: offset(2)
+                figcaption
+                    display: flex
+                    justify-content: space-between
+                    align-items: baseline
+                    p
+                        max-width: columns(8)
+                    *
+                        flex: 1 1
+                    .credit
+                        margin-top: 0
+                        text-align: right
+
     &--carousel
         overflow: hidden
         position: relative
         z-index: 0
         @include in-page-without-sidebar
             background: $block-gallery-carousel-background
-            padding-bottom: $grid-gutter
-            padding-top: $grid-gutter
+            padding-bottom: var(--grid-gutter)
+            padding-top: var(--grid-gutter)
         .block-gallery + &,
         .block-pages--cards + &
             margin-top: 0
-        .container
-            .top
-                padding-right: half($grid-gutter-sm)
-                @include media-breakpoint-up(desktop)
-                    padding-right: half($grid-gutter)
         .splide
             display: flex
             flex-direction: column
@@ -72,7 +93,7 @@
                         opacity: 0.1
             &__track
                 overflow: visible
-                margin-right: half(-$grid-gutter-sm)
+                margin-right: var(--grid-gutter-negative)
                 @include in-page-with-sidebar
                     .splide__slide
                         transition: opacity  .3s ease
@@ -81,14 +102,12 @@
                             opacity: 0.6
                         &.is-active
                             opacity: 1
-                @include media-breakpoint-up(desktop)
-                    margin-right: half(-$grid-gutter)
             &__slide
                 flex-shrink: initial
                 &:last-child
                     padding-right: 20%
             figure
-                margin-right: half($grid-gutter)
+                margin-right: $spacing-3
                 @include media-breakpoint-down(desktop)
                     display: flex
                     flex-direction: column
@@ -99,18 +118,14 @@
                         max-height: $block-gallery-carousel-max-height
                         width: auto
                         height: auto
-                        max-width: calc(100vw - #{$grid-gutter-sm} * 2)
+                        max-width: calc(100vw - #{var(--grid-gutter)} * 2)
                         @include media-breakpoint-up(desktop)
                             height: $block-gallery-carousel-max-height
                             width: auto
                             max-width: none
-                figcaption
-                    margin-top: space(3)
-                    > * + *
-                        margin-top: space(2)
 
             &__arrows
-                margin-left: px2rem(-18)
+                margin-left: pxToRem(-18)
                 order: 2
                 @media (min-height: 800px)
                     padding-top: space(10)
@@ -119,10 +134,10 @@
                 &--next
                     @include button-reset
                     @include icon(arrow-left, before)
-                    height: space(12)
+                    height: $spacing-4
                     padding: 0
                     position: static
-                    width: space(12)
+                    width: $spacing-4
                     svg
                         display: none
                 &--next
@@ -131,10 +146,10 @@
         @include in-page-without-sidebar
             .splide
                 figure
-                    margin-left: $grid-gutter
-                    margin-right: half(-$grid-gutter)
+                    margin-left: var(--grid-gutter)
+                    margin-right: -$spacing-3
                 &__slide
                     &:first-child
-                        margin-left: $grid-gutter
+                        margin-left: var(--grid-gutter)
                 &__track
-                    margin-left: -$grid-gutter
\ No newline at end of file
+                    margin-left: var(--grid-gutter-negative)
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/image.sass b/assets/sass/_theme/blocks/image.sass
index 926546d7722e4d1c75efd20b72747fd535d9e3ce..27cfd7b2108857d595aa3a40ebd759cd6dc16cac 100644
--- a/assets/sass/_theme/blocks/image.sass
+++ b/assets/sass/_theme/blocks/image.sass
@@ -4,24 +4,24 @@
         height: auto
         max-width: 100%
     figcaption
-        margin-top: $spacing0
+        margin-top: $spacing-2
         p
             margin-bottom: 0
             margin-top: 0
             + .credit
-                margin-top: $spacing0
+                margin-top: $spacing-2
         .credit
             p
                 @include meta
     picture
         display: block
-        margin-left: half(-$grid-gutter-sm)
-        margin-right: half(-$grid-gutter-sm)
+        margin-left: var(--grid-gutter-negative)
+        margin-right: var(--grid-gutter-negative)
 
     @include in-page-with-sidebar
         picture
             margin-left: 0
-            margin-right: -$grid-gutter
+            margin-right: var(--grid-gutter-negative)
         img
             max-height: $block-image-max-height-with-sidebar
             width: auto
@@ -30,7 +30,6 @@
         figure
             img
                 max-height: $block-image-max-height-without-sidebar
-                // max-height: calc(100vh - var(--header-height))
                 width: auto
                 max-width: 100%
         &.image-portrait, &.image-square
@@ -38,27 +37,26 @@
                 position: relative
                 .top
                     position: absolute
-                    width: col(5)
+                    width: columns(5)
             figure
                 display: flex
                 align-items: flex-end
-                > a 
-                    width: col(7)
-                    margin-left: half($grid-gutter)
+                > a
+                    width: columns(7)
+                    margin-left: var(--grid-gutter)
                     display: block
                     order: 2
                 picture
                     margin-left: 0
-                    margin-right: -$grid-gutter
                 figcaption
-                    width: calc(#{col(5)} + #{$grid-gutter} / 2)
+                    width: columns(5)
                     order: 1
                     display: block
                     text-align: right
         &.image-landscape
             picture
-                margin-left: -$grid-gutter
-                margin-right: -$grid-gutter
+                margin-left: var(--grid-gutter-negative)
+                margin-right: var(--grid-gutter-negative)
                 @media screen and (min-width: $grid-max-width)
                     margin-left: 0
                     margin-right: 0
@@ -67,7 +65,7 @@
                 justify-content: space-between
                 align-items: baseline
                 p
-                    max-width: col(8)
+                    max-width: columns(8)
                 *
                     flex: 1 1
                 .credit
diff --git a/assets/sass/_theme/blocks/key_figures.sass b/assets/sass/_theme/blocks/key_figures.sass
index 3a9ca43047a7b401c501073be863e39701685665..64126a161eb8adc3aaecd984d939aa656b4a266c 100644
--- a/assets/sass/_theme/blocks/key_figures.sass
+++ b/assets/sass/_theme/blocks/key_figures.sass
@@ -11,7 +11,7 @@
         &.odd-items
             @include grid(3, desktop)
     .top:not(.hidden) + ul
-        margin-top: $spacing2
+        margin-top: $spacing-4
     dl
         margin-bottom: 0
         margin-top: 0
@@ -26,6 +26,10 @@
                 font-size: $block-key_figures-number-font-size
                 font-weight: $block-key_figures-number-font-weight
                 margin-inline-end: 0.1em
+            img
+                display: block
+                margin-bottom: $spacing-2
+                max-width: $block-key_figures-image-max-width
             @include media-breakpoint-up(desktop)
                 font-size: $block-key_figures-font-size-desktop
                 strong
@@ -46,9 +50,9 @@
             margin-bottom: 0
             margin-left: 0
         dt + dd
-            margin-top: $spacing0
+            margin-top: $spacing-2
             
     @include media-breakpoint-down(desktop)
         li + li
-            margin-top: $spacing1
+            margin-top: $spacing-3
 
diff --git a/assets/sass/_theme/blocks/organizations.sass b/assets/sass/_theme/blocks/organizations.sass
index 65dec22e92c5078680cd5d1b8a3c1160c86493ad..b74eb772d95fc20e96e444e9f3f40d46d8dfdd1b 100644
--- a/assets/sass/_theme/blocks/organizations.sass
+++ b/assets/sass/_theme/blocks/organizations.sass
@@ -22,7 +22,7 @@
                     margin-bottom: 0
                 .organization-title
                     @include meta
-                    padding: half($spacing0) $spacing0
+                    padding: $spacing-1 $spacing-2
                     margin: 0 // Cancel leaflet default style
                     a
                         color: black
@@ -38,11 +38,10 @@
             @include grid(2, md)
             @include grid(3, lg)
             @include grid(4, xl)
-            grid-column-gap: half($grid-gutter)
 
     @include in-page-without-sidebar
         .top .description
-            max-width: col(8)
+            max-width: columns(8)
         .map
-            margin-left: -$grid-gutter
-            margin-right: -$grid-gutter
+            margin-left: var(--grid-gutter-negative)
+            margin-right: var(--grid-gutter-negative)
diff --git a/assets/sass/_theme/blocks/pages.sass b/assets/sass/_theme/blocks/pages.sass
index 31e62c47b843d9f952610f0fc38165016ae6b10d..c9a72db899d7ac88386fe5461403da1e9ca127f1 100644
--- a/assets/sass/_theme/blocks/pages.sass
+++ b/assets/sass/_theme/blocks/pages.sass
@@ -10,7 +10,7 @@
             .media
                 @include handle-svg-fit
                 order: -1
-                margin-bottom: $spacing1
+                margin-bottom: $spacing-3
                 &:empty
                     display: none
                 img
@@ -24,11 +24,11 @@
                 @include stretched-link(before)
                 text-decoration: none
             + p
-                margin-top: $spacing0
+                margin-top: $spacing-2
 
     @include media-breakpoint-up(desktop)
         .top
-            margin-bottom: $spacing2
+            margin-bottom: $spacing-4
 
     @include media-breakpoint-down(desktop)
         .top
@@ -37,7 +37,7 @@
         .description
             @include h2
         article
-            margin-top: $spacing1
+            margin-top: $spacing-3
 
     @include in-page-without-sidebar
         .top
@@ -56,16 +56,14 @@
                 @include hover-translate-icon(after)
         @include media-breakpoint-up(desktop)
             .grid
-                @include grid(2, desktop)
-                @include in-page-with-sidebar
-                    grid-column-gap: half($grid-gutter) !important
+                @include grid(2)
                 @include in-page-without-sidebar
-                    @include grid(3, desktop)
+                    @include grid(3)
 
     &--cards
         background-color: $block-pages-card-background
-        padding-bottom: $grid-gutter
-        padding-top: $grid-gutter
+        padding-bottom: var(--grid-gutter)
+        padding-top: var(--grid-gutter)
         *:not(.heading) + &
             margin-top: 0
         .blocks &:last-of-type
@@ -74,17 +72,15 @@
             @include top-flex
         .cards
             @include grid(2, desktop)
-            @include in-page-with-sidebar
-                grid-gap: half($grid-gutter) !important
             @include in-page-without-sidebar
-                @include grid(3, desktop)
+                @include grid(3)
         // TODO: move this //
         .block-gallery + &,
         .block-pages--cards + &
             margin-top: 0
         // ----------------- //
         .card
-            padding: $spacing1
+            padding: $spacing-3
             background-color: $block-pages-card-page-background
             transition: background 0.3s, color 0.3s
             display: flex
@@ -96,19 +92,18 @@
                 color: $block-pages-card-page-color
             .media
                 margin-bottom: 0
-                margin-left: -$spacing1
-                margin-right: -$spacing1
-                margin-top: -$spacing1
+                margin-left: -$spacing-3
+                margin-right: -$spacing-3
+                margin-top: -$spacing-3
                 img
                     min-width: 100%
             .more
                 @include arrow-right-hover
                 @include icon-block(arrow-right, after)
                 @include link($block-pages-card-page-color)
-                @include text-underline
                 position: relative
                 margin-top: auto
-                padding-top: $spacing1
+                padding-top: $spacing-3
                 display: flex
                 justify-content: space-between
                 align-items: center
@@ -131,31 +126,30 @@
             li
                 display: block
                 + li
-                    margin-top: $spacing0
+                    margin-top: $spacing-2
                 > a
                     @include icon(arrow, before, true)
-                        padding-right: $spacing0
+                        padding-right: $spacing-2
                     @include hover-translate-icon(before, 5)
-                    @include link
-                    text-decoration-color: rgba(0,0,0,0)
+                    @extend %underline-on-hover
                 article
                     .page-title
                         @include h3
                         a
                             @include icon(arrow, after, true)
                             @include hover-translate-icon(after)
-                            text-decoration-color: transparent
+                            @extend %underline-on-hover
         @include media-breakpoint-down(desktop)
             .top
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
             ul
-                margin-top: $spacing1
+                margin-top: $spacing-3
         @include media-breakpoint-up(desktop)
             ul:not(.title-only)
                 li + li
-                    margin-top: $grid-gutter
+                    margin-top: var(--grid-gutter)
                 article
-                    gap: $grid-gutter
+                    gap: var(--grid-gutter)
                     flex-direction: row
                     .media
                         flex-shrink: 0
@@ -163,23 +157,20 @@
         @include in-page-with-sidebar
             .block-content
                 .top
-                    margin-bottom: $spacing1
-                    // .description
-                    //     margin-bottom: $spacing2
+                    margin-bottom: $spacing-3
                 ul.title-only
-                    @include grid(2, desktop)
-                    grid-row-gap: $spacing0 !important
-                    grid-column-gap: half($grid-gutter) !important
+                    @include grid(2, desktop, 0)
+                    display: flex
                     li
                         margin-top: 0
                         a
                             @include meta
                 article
-                    gap: half($grid-gutter)
+                    gap: var(--grid-gutter)
                     .media
-                        width: calc(#{col(2, 8)} + #{half($grid-gutter)})
+                        width: columns(2)
                     .page-content
-                        width: col(6, 8)
+                        width: columns(6)
 
         @include in-page-without-sidebar
             .block-title
@@ -191,12 +182,12 @@
                         @include h2
             article
                 .media
-                    width: col(4)
+                    width: columns(2)
                 .page-content
-                    width: col(8)
+                    width: columns(4)
             &:not(.with-description)
                 ul.title-only
-                    @include grid(4, desktop, space(2))
+                    @include grid(4, desktop, $spacing-1)
                     grid-column: 1 / 13
                     li
                         margin-top: 0
@@ -206,8 +197,7 @@
                         margin-top: 0
             &.with-description
                 .block-content
-                    @include grid(12, desktop, $spacing2)
-                    row-gap: half($grid-gutter)
+                    @include grid(12, desktop, $spacing-4)
                     .top
                         align-items: initial
                         grid-column: 1 / 8
@@ -226,9 +216,9 @@
                         grid-row: 2
                         display: block
                         li + li
-                            margin-top: $spacing0
+                            margin-top: $spacing-2
                             article
-                                margin-top: $spacing3
+                                margin-top: $spacing-5
                 &.with-images
                     .top
                         grid-column: 1 / 7
@@ -244,7 +234,7 @@
                 aspect-ratio: unset
         @include media-breakpoint-up(desktop)
             article
-                width: col(4, 8)
+                width: columns(4)
                 &:not(:first-child)
                     margin-top: -5%
                 &:nth-child(even)
@@ -260,24 +250,24 @@
                 .description
                     @include body-text
             .grid
-                width: col(10)
+                width: columns(10)
                 margin-left: auto
                 margin-right: auto
                 article
-                    width: col(4, 10)
+                    width: columns(4)
     &--large
         .top
             @include top-flex
         .page
             position: relative
             + .page
-                margin-top: $spacing3
+                margin-top: $spacing-5
             .more
                 @include icon(arrow, after, true)
                 @include hover-translate-icon(after)
             &:hover .more:after
-                transform: translateX(#{px2rem(10)})
-            &-title a    
+                transform: translateX(#{pxToRem(10)})
+            &-title a
                 @include stretched-link
             .media
                 img
@@ -285,7 +275,7 @@
         @include media-breakpoint-up(desktop)
             .page
                 flex-direction: row
-                gap: $grid-gutter
+                gap: var(--grid-gutter)
 
         @include in-page-with-sidebar
             .page
@@ -306,6 +296,6 @@
                     @include lead
                     margin-bottom: space(4)
                 &-content
-                    width: col(5)
-                .media 
-                    width: col(6)
+                    width: columns(5)
+                .media
+                    width: columns(6)
diff --git a/assets/sass/_theme/blocks/persons.sass b/assets/sass/_theme/blocks/persons.sass
index f207f5f00be30093d58fd6eb360cfdd9df247895..2956bae9e064e42634ba82d42edbdf7b25c3350f 100644
--- a/assets/sass/_theme/blocks/persons.sass
+++ b/assets/sass/_theme/blocks/persons.sass
@@ -1,38 +1,38 @@
 @mixin person-avatar-end
     display: flex
     flex-direction: row
-    gap: $spacing1
+    gap: $spacing-3
     .avatar
         margin-right: 0
-        width: col(4)
+        width: columns(2)
     .description
-        margin-top: $spacing1
+        margin-top: $spacing-3
         text-align: left
 
 .block-persons
     article
         .description
-            margin-top: $spacing1
+            margin-top: $spacing-3
     @include in-page-with-sidebar
         .persons
             @include grid(1, desktop)
-            row-gap: $spacing0
+            row-gap: $spacing-2
             @include media-breakpoint-up(xxl)
                 @include grid(2)
                 article
                     .avatar
-                        width: col(1.5, 4)
+                        width: columns(1.5)
                     .description
-                        margin-top: $spacing0
+                        margin-top: $spacing-2
         article
             flex-direction: row
-            gap: $spacing1
+            gap: $spacing-3
             @include media-breakpoint-up(md)
                 .avatar
-                    width: col(2, 8)
+                    width: columns(2)
     @include in-page-without-sidebar
         .top .description
-            max-width: col(8)
+            max-width: columns(8)
         &.block-with-long-text
             .persons
                 @include grid(2)
diff --git a/assets/sass/_theme/blocks/posts.sass b/assets/sass/_theme/blocks/posts.sass
index b8446feb0a92620c17d581cc84bfecc9cdb3a797..c73f7f078284e371a77752d3b55e1493814a64ea 100644
--- a/assets/sass/_theme/blocks/posts.sass
+++ b/assets/sass/_theme/blocks/posts.sass
@@ -1,6 +1,6 @@
 .block-posts
     .top
-        margin-bottom: $spacing2
+        margin-bottom: $spacing-4
         a
             @include icon(arrow-right, after, true)
             @include hover-translate-icon
@@ -9,86 +9,88 @@
         @include grid(1)
         @include grid($block-posts-grid-columns, desktop)
     article
-        [itemprop=headline]
+        @include author-and-time-side-to-side
+        .post-title
             a
                 @include stretched-link
                 text-decoration: none
         .post-content
             > * + * 
-                margin-top: $spacing0
+                margin-top: $spacing-2
             .media
                 margin-top: 0
-        @include post-time-author-flex
 
     &--grid
         @include media-breakpoint-down(desktop)
             article + article
-                margin-top: $spacing3
+                margin-top: $spacing-5
         @include in-page-with-sidebar
             .grid
-                @include grid(2, desktop, $grid-gutter, half($grid-gutter))
+                @include grid(2)
         @include in-page-without-sidebar
             .grid
                 @include grid($block-posts-grid-columns)
                 .media picture img
                     width: 100%
     &--large
-        @include media-breakpoint-up(sm)
-            article
-                .post-meta
-                    display: inline
         .post
             .more
                 @include icon(arrow-right, after, true)
-            .post-author 
+
+            // Masquer le point entre l'auteur et la date (mixin author-and-time-side-to-side)
+            .post-author
                 p::before
                     display: none
-            @include media-breakpoint-down(desktop)
+
+            // Permet d'aligner correctement les différents line-height des différents composants du post meta
+            .post-meta
+                display: block
+                line-height: 0 // Hack pour que les enfants de post-meta soient correctement 
+            .post-categories *
+                display: inline
+            // Désactiver le ratio forcé de la configuration $article-media-aspect-ratio
+            .media
+                &, img
+                    aspect-ratio: auto
+        @include media-breakpoint-down(desktop)
+            .post
                 + .post
-                    margin-top: $spacing2
+                    margin-top: $spacing-4
                 &-meta
-                    .post-author 
-                        display: inline-flex
+                    .post-author
+                        display: inline
+                        p
+                            display: inline
                         &::after
-                            content: '—'
-                            margin: 0 half($spacing0)
-                    .post-categories
-                        display: flex
+                            content:  ' — '
                 p[itemprop="articleBody"]
                     margin-top: 0
         @include media-breakpoint-up(desktop)
             .large
                 .post
                     flex-direction: row
-                    gap: half($grid-gutter)
+                    gap: var(--grid-gutter)
                     + .post
-                        margin-top: $spacing2
-                    p[itemprop="articleBody"]
-                        margin-top: $spacing1
-                    &-title
+                        margin-top: $spacing-4
+                    .post-title
                         @include h2
+                    p[itemprop="articleBody"]
+                        margin-top: $spacing-3
                     .post-meta 
                         > *
                             display: inline
-                            &:not(:first-child)::before
-                                content: '—'
-                                margin-right: half($spacing0)
-                        > time
-                            display: inline-block
-                            margin-top: -2px
+                            &:not(:last-child)::after
+                                content: ' — '
                     .post-author
                         p
                             display: inline
-                        li
-                            margin-right: $spacing0
                     .post-categories
                         li
-                            display: inline-flex
-                            margin-right: $spacing0
-                            padding-bottom: 3px
-                            &:not(:last-child)::after
+                            a
+                                display: inline
+                            &:not(:last-child) a::after
                                 content: ','
-                            
+
         @include in-page-with-sidebar
             .large
                 .post
@@ -96,24 +98,26 @@
                         flex-direction: column
                         gap: unset
                         p[itemprop="articleBody"]
-                            margin-top: $spacing0
+                            margin-top: $spacing-2
                     @include media-breakpoint-up(xl)
                         .media,
                         .post-content
-                            width: calc(#{col(4, 8)} + #{half($grid-gutter)})
+                            width: columns(4)
         @include in-page-without-sidebar
             .large
                 .post
-                    gap: $grid-gutter
+                    gap: var(--grid-gutter)
                     .media
-                        width: col(6)
+                        width: columns(6)
                     .post-content
-                        width: col(5)
+                        width: columns(5)
+                    .post-title
+                        @include lead
                 p[itemprop="articleBody"]
-                    margin-top: calc(#{$spacing1} + #{$spacing0})
+                    margin-top: calc(#{$spacing-3} + #{$spacing-2})
     &--list
         article
-            border-bottom: 1px solid $color-border
+            border-bottom: 1px solid var(--color-border)
             .media
                 background: none
                 margin: 0
@@ -123,19 +127,19 @@
         @include media-breakpoint-down(desktop)
             article
                 position: relative
-                padding-bottom: half($spacing3)
+                padding-bottom: $spacing-3
                 + article
-                    margin-top: half($spacing3)
+                    margin-top: $spacing-3
                 .post-content
                     display: flex
                     flex-direction: column
-                    padding-top: $spacing0
-                    [itemprop=headline]
+                    padding-top: $spacing-2
+                    .post-title
                         margin-bottom: 0
                     .post-categories
                         margin-bottom: 0
                     p[itemprop="articleBody"]
-                        margin-top: half($spacing0)
+                        margin-top: $spacing-1
                 .media
                     order: -1
                     max-width: 33%
@@ -147,27 +151,27 @@
 
         @include in-page-with-sidebar
             article
-                padding-bottom: $spacing1
+                padding-bottom: $spacing-3
                 + article
-                    margin-top: $spacing1
+                    margin-top: $spacing-3
                 .media
-                    width: calc(#{col(2, 8)} + #{half($grid-gutter)})
+                    width: columns(2)
                 .post-content
-                    width: col(6, 8)
-                    margin-left: half($grid-gutter)
+                    width: columns(6)
+                    margin-left: var(--grid-gutter)
 
         @include in-page-without-sidebar
             article
-                border-bottom: 1px solid $color-border
-                gap: $grid-gutter
-                padding-bottom: $spacing3
+                border-bottom: 1px solid var(--color-border)
+                gap: var(--grid-gutter)
+                padding-bottom: $spacing-5
                 position: relative
                 .media
-                    width: col(3)
+                    width: columns(3)
                 .post-content
-                    width: col(6)
+                    width: columns(6)
                 + article
-                    margin-top: $spacing3
+                    margin-top: $spacing-5
                 .post-meta
                     position: absolute
                     right: 0
@@ -176,38 +180,38 @@
 
     &--highlight
         .highlight-post
-            [itemprop=headline]
-                margin-bottom: $spacing0
+            .post-title
+                margin-bottom: $spacing-2
             .media
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
                 background: none
         .list
-            margin-top: half($spacing3)
-            border-top: 1px solid $color-border
+            margin-top: $spacing-3
+            border-top: 1px solid var(--color-border)
             article
-                border-bottom: 1px solid $color-border
+                border-bottom: 1px solid var(--color-border)
                 position: relative
-                padding-bottom: half($spacing3)
-                margin-top: half($spacing3)
+                padding-bottom: $spacing-3
+                margin-top: $spacing-3
         article
             > * + * 
-                margin-top: $spacing0
+                margin-top: $spacing-2
             .media
                 margin-top: 0
 
         @include media-breakpoint-down(desktop)
             .list
-                border-top: 1px solid $color-border
+                border-top: 1px solid var(--color-border)
                 p[itemprop="articleBody"]
                     margin-top: 0
 
         @include media-breakpoint-up(desktop)
             .highlight
-                [itemprop=headline]
+                .post-title
                     @include h2
             .list
                 article
-                    [itemprop=headline]
+                    .post-title
                         @include h4
 
         @include in-page-with-sidebar
@@ -215,15 +219,15 @@
                 .post
                     flex-direction: row
                     .media
-                        width: calc(#{col(3, 8)} + #{half($grid-gutter)})
+                        width: columns(3)
                         margin-bottom: 0
                     .post-content
-                        width: col(5, 8)
-                        margin-left: half($grid-gutter)
+                        width: columns(5)
+                        margin-left: var(--grid-gutter)
             .list
                 article
                     @include grid(8, desktop, 0, 0)
-                    [itemprop=headline]
+                    .post-title
                         grid-column: 1 / 7
                     .post-categories
                         grid-column: 1 / 7
@@ -269,29 +273,81 @@
         @include media-breakpoint-down(desktop)
             .post 
                 .post-meta
-                    margin-top: half($spacing0)
+                    margin-top: $spacing-1
                 .media
-                    margin-bottom: $spacing0
+                    margin-bottom: $spacing-2
                 + .post
-                    margin-top: $spacing3
+                    margin-top: $spacing-5
 
         @include in-page-with-sidebar
             .post
-                width: col(4,8)
+                width: columns(4)
 
         @include in-page-without-sidebar
-            width: col(10)
+            width: columns(10)
             margin-left: auto
             margin-right: auto
             .post
-                width: col(4, 10)
+                width: columns(4)
+    &--carousel
+        @include draggable-block
+        .container
+            padding-right: 0
+        .carousel
+            padding-bottom: $spacing-3
+            &:hover
+                cursor: grab
+            &.is-grabbing
+                cursor: grabbing
+            li
+                list-style: none
+            .posts
+                display: flex
+                gap: unset
+                .post
+                    margin: 0 calc(var(--grid-gutter) / 2)
+            .actions-arrows
+                justify-content: space-between
+        @include media-breakpoint-down(desktop)
+            .carousel
+                gap: half(var(--grid-gutter))
+                .post
+                    width: columns(10)
+                .grab-item:last-of-type
+                    margin-right: half(var(--grid-gutter))
+                .actions-arrows
+                    margin-right: var(--grid-gutter)
+        @include media-breakpoint-up(desktop)
+            .next
+                margin-right: pxToRem(-27) // Marge négative pour aligner correctement le picto à la colonne
+        @include in-page-with-sidebar
+            .post
+                width: columns(3)
+                .post-title
+                    @include h4
+            .carousel
+                .actions-arrows
+                    width: offset(6)
+        @include in-page-without-sidebar
+            .block-content
+                display: flex
+                gap: var(--grid-gutter)
+                .top
+                    width: columns(3)
+                .carousel
+                    width: columns(9)
+                .post
+                    width: columns(4)
+            .carousel
+                .actions-arrows
+                    width: offset(8)
 
 // Move this part to blocks/categories when categories block is ready
 .block-posts
     .categories--grid
         li
-            background: $color-background-alt
-            padding: $spacing1
+            background: var(--color-background-alt)
+            padding: $spacing-3
             position: relative
             a
                 @include h3
diff --git a/assets/sass/_theme/blocks/programs.sass b/assets/sass/_theme/blocks/programs.sass
index 8cb79f4be4295b5d460406de2a024f34372cd851..482b7701222ba007293c7819e4d8cfa8e783b7a5 100644
--- a/assets/sass/_theme/blocks/programs.sass
+++ b/assets/sass/_theme/blocks/programs.sass
@@ -1,19 +1,54 @@
 .block-programs
-    .programs
-        li
-            display: block
-            a
-                @include h3
-                @include arrow-right-hover
-                display: flex
-                justify-content: space-between
-                transition: color 0.55s
-                padding-right: $spacing2
-                &:hover
-                    color: $color-accent
 
-    @include in-page-without-sidebar
+    &--list
         .programs
             li
+                display: block
                 a
-                    @include h2
\ No newline at end of file
+                    @include h3
+                    @include arrow-right-hover
+                    display: flex
+                    justify-content: space-between
+                    transition: color 0.55s
+                    padding-right: $spacing-4
+                    &:hover
+                        color: var(--color-accent)
+        @include in-page-without-sidebar
+            .programs li a
+                @include h2
+
+    &--grid
+        .programs-grid
+            align-items: start
+            @include grid(1, false, $spacing-5)
+            @include grid(2, xl)
+            article
+                display: flex
+                flex-direction: column
+                .program-content
+                    order: 2
+                    position: relative
+                    &:hover
+                        .more:after
+                            transform: translateX($spacing-1)
+                [itemprop='name']
+                    margin-bottom: $spacing-1
+                a
+                    @include stretched-link
+                    text-decoration: none
+                .more
+                    @include icon(arrow, after, true)
+                    @include hover-translate-icon
+                .media
+                    order: 1
+                    margin-bottom: $spacing-3
+                    img
+                        aspect-ratio: $block-programs-aspect-ratio
+                        display: block
+                        object-fit: cover
+                
+                
+            @include in-page-without-sidebar
+                @include grid(2)
+                @include grid(3, xl)
+
diff --git a/assets/sass/_theme/blocks/projects.sass b/assets/sass/_theme/blocks/projects.sass
new file mode 100644
index 0000000000000000000000000000000000000000..0b74eec0c4b8352bcdb41bb5518a8ee0aab45a77
--- /dev/null
+++ b/assets/sass/_theme/blocks/projects.sass
@@ -0,0 +1,3 @@
+.block-projects
+    .grid
+        @include grid(2, md)
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/sitemap.sass b/assets/sass/_theme/blocks/sitemap.sass
index bb45be78dfabbd6cc8eceefc2124610dcf8d940d..fb8ea0b26612c1164fbb0c37d997a7c166c23c3f 100644
--- a/assets/sass/_theme/blocks/sitemap.sass
+++ b/assets/sass/_theme/blocks/sitemap.sass
@@ -3,6 +3,6 @@
       a 
         text-decoration: none
     ul + h3
-      margin-top: $spacing3
+      margin-top: $spacing-5
     &:first-of-type
       padding-top: 0
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/summary.sass b/assets/sass/_theme/blocks/summary.sass
index 8d40c67a5e00b4232e5e621787161712d3fed037..93be875c8e2a3967fc2590e713f69ee5bd2f4aae 100644
--- a/assets/sass/_theme/blocks/summary.sass
+++ b/assets/sass/_theme/blocks/summary.sass
@@ -6,5 +6,4 @@
         padding-top: 0
 
     @include in-page-without-sidebar
-        padding-top: 0
-        margin-top: $block-space-y
\ No newline at end of file
+        padding-top: 0
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/testimonials.sass b/assets/sass/_theme/blocks/testimonials.sass
index 338da01140524b2eae8277d0e7fa6c5559f939cf..693ef54e5e15cda8b16683069c051a4fa2fc16e3 100644
--- a/assets/sass/_theme/blocks/testimonials.sass
+++ b/assets/sass/_theme/blocks/testimonials.sass
@@ -8,7 +8,7 @@
             font-style: $block-testimonials-style
             color: $block-testimonials-color
             @include media-breakpoint-up(desktop)
-                font-size: px2rem(30) // TODO : on peut peut-être la sortir avec du RFS ?
+                font-size: pxToRem(30) // TODO : on peut peut-être la sortir avec du RFS ?
             @include media-breakpoint-up(xl)
                 font-size: $block-testimonials-xl-font-size
                 line-height: $block-testimonials-xl-line-height
@@ -23,17 +23,15 @@
     figcaption
         align-items: center
         display: flex
-        margin-top: $spacing1
+        margin-top: $spacing-3
         span
             display: block
     .avatar
         flex-shrink: 0
-        width: calc(#{col(1, 8)} + #{$grid-gutter} / 2)
-        min-width: px2rem(80)
-        margin-right: $spacing0
+        width: columns(1)
+        min-width: pxToRem(80)
+        margin-right: $spacing-2
         margin-bottom: 0
-        @include media-breakpoint-up(desktop)
-            margin-right: calc(#{$grid-gutter} / 2)
 
     .splide
         .splide__slider
@@ -53,9 +51,9 @@
             font-size: 0
             line-height: 1
             span
-                color: $color-accent
+                color: var(--color-accent)
                 &::before
-                    font-size: 42px
+                    font-size: pxToRem(42)
         .splide__pagination
             .is-active i
                 width: 100%
@@ -97,27 +95,17 @@
             margin-right: offset(1)
         figure
             padding-right: offset(3)
-            // TODO: explain this, add min height equal with 2 cols width to avoid overflow on square picture
-            min-height: calc(#{col-outside-container(2)} + #{half($grid-gutter)})
+            min-height: columns(2)
             &.with-picture
                 padding-right: offset(1)
                 padding-left: offset(3)
                 position: relative
                 figcaption
                     display: block
-                    margin-top: $spacing0
+                    margin-top: $spacing-2
                     .avatar
                         position: absolute
-                        left: col(1)
+                        left: columns(1)
                         top: 0
-                        margin-left: $grid-gutter
-                        width: col(2)
-
-        // TODO : en discuter en créa
-        // figure
-        //     display: flex
-        //     figcaption
-        //         order: -1
-        //         display: block
-        //         .avatar
-        //             margin-bottom: $spacing1
\ No newline at end of file
+                        margin-left: var(--grid-gutter)
+                        width: columns(2)
diff --git a/assets/sass/_theme/blocks/timeline.sass b/assets/sass/_theme/blocks/timeline.sass
index 0c527962608f6bc0773634cca4986fda06e248cd..cb1be7fde5adc3a16af27eeae3d81ab2de5a9804 100644
--- a/assets/sass/_theme/blocks/timeline.sass
+++ b/assets/sass/_theme/blocks/timeline.sass
@@ -5,22 +5,22 @@
         .timeline-event
             position: relative
             &:not(:last-child)
-                padding-bottom: $spacing2
+                padding-bottom: $spacing-4
             &::before
-                background: $color-text
+                background: var(--color-text)
                 border-radius: 50%
                 content: ""
                 height: 9px
-                left: half(-$grid-gutter)
+                left: -$spacing-3
                 margin-top: 0.5em
                 position: absolute
                 width: 9px
                 margin-left: -4px
             &::after
-                background: $color-text
+                background: var(--color-text)
                 bottom: -0.5em
                 content: ""
-                left: half(-$grid-gutter)
+                left: -$spacing-3
                 position: absolute
                 top: 0.5em
                 width: 1px
@@ -31,11 +31,11 @@
             .title
                 @include h4
                 + p
-                    margin-top: $spacing0
+                    margin-top: $spacing-2
 
         @include media-breakpoint-down(desktop)
             .timeline-event
-                padding-left: half($grid-gutter-sm)
+                padding-left: $spacing-3
                 &::after, &::before
                     left: 0
 
@@ -45,97 +45,57 @@
             .timeline-event
                 display: flex
                 &::before, &::after
-                    left: col(3)
-                    margin-left: half($grid-gutter)
+                    left: columns(3)
+                    margin-left: calc(var(--grid-gutter) / 2)
                 &::before
                     transform: translateX(-4px)
                 .title
-                    width: col(3)
+                    width: columns(3)
                     text-align: right
                     + p
                         margin-top: 0
                 p
-                    padding-left: $grid-gutter
-                    width: col(7)
+                    padding-left: var(--grid-gutter)
+                    width: columns(7)
                     &:first-child
-                        margin-left: col(3)
+                        margin-left: columns(3)
 
     &--horizontal
+        @include draggable-block
         --min-title-height: 0px
         background: $block-timeline-horizontal-background
         color: $block-timeline-horizontal-color
-        overflow: hidden
-        padding-bottom: $grid-gutter
-        padding-top: $grid-gutter
+        padding-bottom: var(--block-space-y)
+        padding-top: var(--block-space-y)
         &::before
             display: none
-        .timeline
-            &:hover
-                cursor: grab
-            &.is-grabbing
-                cursor: grabbing
-            
-        .timeline-arrows
-            display: flex
-            padding-left: half($grid-gutter)
-            > button
-                @include button-reset
-                background: none
-                border: none
-                color: $block-timeline-horizontal-color
-                cursor: pointer
-                &:first-child
-                    @include icon-block(arrow-previous, before)
-                    margin-left: $icon-arrow-previous-margin-left
-                &:last-child
-                    @include icon-block(arrow-next, before)
-                &:disabled
-                    cursor: default
-                    opacity: 0.3
-        .timeline-events
-            margin-left: half(-$grid-gutter)
-            margin-right: half(-$grid-gutter)
-            // TODO : fixer le px gap en desktop entre chaque event
-            ol
-                display: flex
-                flex-flow: row nowrap
-                list-style: none
-                padding-left: 0
-                margin-top: $spacing0
-                transition: margin 0.4s ease-in-out
-                width: 100%
         .timeline-event
-            flex: none
-            padding: 0 half($grid-gutter)
-            scroll-snap-align: start
-            transition: 0.3s opacity
-            width: 50%
+            padding: 0 calc(var(--grid-gutter) / 2)
+            width: columns(4)
             .title
                 display: block
                 min-height: var(--min-title-height)
-                padding-bottom: $spacing1
+                padding-bottom: $spacing-3
                 @include signature
             .description
                 @include small
             .line
                 background: $block-timeline-horizontal-color
                 height: 1px
-                margin-bottom: $spacing1
+                margin-bottom: $spacing-3
                 opacity: 1
                 overflow: visible
-                width: calc(100% + #{half($grid-gutter)})
+                width: calc(100% + var(--grid-gutter) / 2)
                 &::before
                     background: $block-timeline-horizontal-color
                     border-radius: 50%
                     content: ""
                     display: block
                     height: 9px
+                    margin-left: -4px
                     position: relative
                     top: -4px
                     width: 9px
-
-            &.is-passed
-                opacity: 0.15
             &:last-child
                 .line
                     background: transparent
@@ -143,20 +103,21 @@
         @include media-breakpoint-up(desktop)
             .timeline-event
                 .line
-                    width: calc(100% + #{$grid-gutter})
+                    width: calc(100% + var(--grid-gutter))
 
         @include media-breakpoint-down(desktop)
             .timeline-events
                 position: relative
-            .timeline-arrows
+            .actions-arrows
                 left: 0
                 position: absolute
-                top: calc(#{$spacing2/2} + var(--min-title-height))
+                top: calc(#{$spacing-2} + var(--min-title-height))
             .timeline-event
+                margin-right: 0
                 padding-right: 0
                 width: 75%
                 .line
-                    margin-bottom: calc(#{$spacing2} + var(--min-title-height))
+                    margin-bottom: $spacing-5
 
         @include in-page-without-sidebar
             @include media-breakpoint-up(xxl)
diff --git a/assets/sass/_theme/blocks/video.sass b/assets/sass/_theme/blocks/video.sass
index c946610acb2e3829ce1d81b3781c6e69e04a2d15..6ef2f0de51ee3616d0e5cfe722c7701dc43aa4fe 100644
--- a/assets/sass/_theme/blocks/video.sass
+++ b/assets/sass/_theme/blocks/video.sass
@@ -36,43 +36,42 @@
                 border: 1px solid white
                 border-radius: 100%
                 color: white
-                height: $spacing4
-                padding: half($spacing0)
+                height: $spacing-6
+                padding: $spacing-1
                 transition: background-color .3s ease
-                width: $spacing4
+                width: $spacing-6
                 z-index: 3
                 &::before
-                    font-size: px2rem(100)
+                    font-size: pxToRem(100)
                     transition: color .3s ease
                     vertical-align: middle
-                    padding-left: px2rem(5)
+                    padding-left: pxToRem(5)
                 &:hover
                     background-color: white
                     &::before
                         color: black
                 @include media-breakpoint-down(desktop)
-                    height: $spacing3
-                    width: $spacing3
+                    height: $spacing-5
+                    width: $spacing-5
                     &::before
-                        font-size: px2rem(40)
-                        padding-left: px2rem(3)
+                        font-size: pxToRem(40)
+                        padding-left: pxToRem(3)
         iframe
             background: black
         + p
-            margin-top: $spacing0
+            margin-top: $spacing-2
 
     @include media-breakpoint-down(desktop)
         .video
-            margin-left: half(-$grid-gutter-sm)
-            margin-right: half(-$grid-gutter-sm)
+            margin-left: var(--grid-gutter-negative)
+            margin-right: var(--grid-gutter-negative)
 
     @include in-page-without-sidebar
         background: $block-video-background
-        margin-top: 0
         .block-content
             @include grid(12, false, 0)
             padding-top: $block-space-y
-            padding-bottom: $spacing2
+            padding-bottom: $spacing-4
             .top
                 grid-column: 1 / -1
             .video
diff --git a/assets/sass/_theme/configuration/animations.sass b/assets/sass/_theme/configuration/animations.sass
new file mode 100644
index 0000000000000000000000000000000000000000..1ad05c74953e36bd2f191988464d0b309f3246f2
--- /dev/null
+++ b/assets/sass/_theme/configuration/animations.sass
@@ -0,0 +1,3 @@
+// Animations
+$arrow-ease-transition: cubic-bezier(0, 0.65, 0.4, 1.2) !default
+$arrow-ease-transition-2: cubic-bezier(0, 0.65, 0.4, 1) !default
diff --git a/assets/sass/_theme/configuration/blocks.sass b/assets/sass/_theme/configuration/blocks.sass
new file mode 100644
index 0000000000000000000000000000000000000000..25331466971a38677f679488fd381897570e1bb0
--- /dev/null
+++ b/assets/sass/_theme/configuration/blocks.sass
@@ -0,0 +1,105 @@
+// HEADING
+// Under desktop breakpoint
+$heading-margin-top: $spacing-4 !default
+$heading-margin-bottom: $spacing-2 !default
+// Upper desktop breakpoint without sidebar 
+$heading-margin-top-desktop: $spacing-6 !default
+$heading-margin-bottom-desktop: $spacing-3 !default
+// Upper desktop breakpoint with sidebar 
+$heading-margin-top-with-sidebar: $spacing-6 !default
+$heading-margin-bottom-with-sidebar: $spacing-3 !default
+
+// BLOCKS
+// Base
+
+// Under desktop breakpoint
+$block-space-y: $spacing-4 !default
+// Upper desktop breakpoint without sidebar 
+$block-space-y-desktop: $spacing-5 !default
+// Upper desktop breakpoint with sidebar 
+$block-space-y-with-sidebar: $spacing-5 !default
+
+// Block call to action
+$block-call-to-action-background: var(--color-accent) !default
+$block-call-to-action-color: var(--color-background) !default
+$block-call-to-action-button-background: var(--color-background) !default
+$block-call-to-action-button-color: var(--color-text) !default
+$block-call-to-action-button-hover-background: var(--color-text-alt) !default
+$block-call-to-action-button-hover-color: var(--color-background) !default
+
+// Block chapter
+$block-chapter-layout-accent-background: var(--color-accent) !default
+$block-chapter-layout-accent-color: var(--color-background) !default
+$block-chapter-layout-alt-background: var(--color-background-alt) !default
+$block-chapter-layout-alt-color: var(--color-text) !default
+
+// Block definitions
+$block-definition-border-color: var(--color-border) !default
+$block-definition-border-color-hovered: var(--color-accent) !default
+$block-definition-color-hovered: var(--color-accent) !default
+$block-definition-font-size: $body-size !default
+$block-definition-font-size-desktop: $body-size-desktop !default
+
+// Block pages
+$block-pages-card-background: var(--color-background-alt) !default
+$block-pages-card-page-background: var(--color-background) !default
+$block-pages-card-page-color: var(--color-text) !default
+$block-pages-card-page-background-hover: var(--color-accent) !default
+$block-pages-card-page-color-hover: var(--color-background) !default
+
+// Block posts
+$block-posts-grid-columns: 3 !default
+
+// Block programs
+$block-programs-aspect-ratio: 16/9 !default
+
+// Block timeline
+$block-timeline-horizontal-background: var(--color-background-alt) !default
+$block-timeline-horizontal-color: var(--color-text) !default
+
+// Block testimonials
+$block-testimonials-xl-font-size: $quote-size-desktop-short !default
+$block-testimonials-xl-line-height: $quote-line-height !default
+$block-testimonials-xl-font-size-long-text: $quote-size-desktop-long !default
+$block-testimonials-xl-line-height-long-text: $quote-line-height !default
+$block-testimonials-color: var(--color-accent) !default
+$block-testimonials-font-family: $quote-font-family !default
+$block-testimonials-font-size: $quote-size !default
+$block-testimonials-line-height: $quote-line-height !default
+$block-testimonials-style: $quote-style !default
+$block-testimonials-pagination-background: var(--color-border) !default
+$block-testimonials-pagination-progress-background: var(--color-accent) !default
+
+// Block key_figures
+
+// TODO : overkill ?
+$block-key_figures-number-font-family: $heading-font-family !default
+$block-key_figures-unit-font-weight: normal !default
+$block-key_figures-number-font-weight: bold !default
+$block-key_figures-image-max-width: $spacing-6 !default
+
+$block-key_figures-font-size: pxToRem(16) !default
+$block-key_figures-number-font-size: pxToRem(32) !default
+
+$block-key_figures-font-size-desktop: pxToRem(18) !default
+$block-key_figures-number-font-size-desktop: pxToRem(40) !default
+
+$block-key_figures-font-size-lg: pxToRem(20) !default
+$block-key_figures-number-font-size-lg: pxToRem(50) !default
+
+$block-key_figures-font-size-xl: $block-key_figures-font-size-lg !default
+$block-key_figures-number-font-size-xl: pxToRem(60) !default
+
+$block-key_figures-font-size-xxl: $block-key_figures-font-size-xl !default
+$block-key_figures-number-font-size-xxl: pxToRem(80) !default
+
+// Block gallery
+$block-gallery-carousel-background: var(--color-background-alt) !default
+$block-gallery-carousel-max-height: 70vh !default
+
+// Block image
+$block-image-max-height-with-sidebar: calc(100vh - var(--header-height)) !default
+$block-image-max-height-without-sidebar: none !default
+
+// Block video
+$block-video-background: var(--color-background-alt) !default
diff --git a/assets/sass/_theme/configuration/colors.sass b/assets/sass/_theme/configuration/colors.sass
new file mode 100644
index 0000000000000000000000000000000000000000..156a5fc3c3c1d06a2e35807a9527399c15677bfb
--- /dev/null
+++ b/assets/sass/_theme/configuration/colors.sass
@@ -0,0 +1,24 @@
+// MAIN COLORS
+$color-accent: #0038FF !default
+$color-text: #000000 !default
+$color-text-alt: #454545 !default
+$color-background: #FFFFFF !default
+$color-background-alt: #F2F2F2 !default
+$color-border: rgba(0, 0, 0, 0.30) !default
+$color-selection: $color-background !default
+$color-selection-background: rgba($color-text, .7) !default
+
+// Scheme Dark colors (enable dark mode in your hugo configuration file)
+$has-dark-mode: false !default
+$color-dark-accent: rgb(120, 208, 255) !default
+$color-dark-text: #ffffff !default
+$color-dark-text-alt: #cbcbcb !default
+$color-dark-background: #000000 !default
+$color-dark-background-alt: #181919 !default
+$color-dark-border: rgba(255, 255, 255, 0.3) !default
+$color-dark-selection: $color-dark-background !default
+$color-dark-selection-background: rgba($color-dark-text, .7) !default
+
+$body-color: var(--color-text) !default
+$body-background-color: var(--color-background) !default
+$link-color: var(--color-text) !default
\ No newline at end of file
diff --git a/assets/sass/_theme/configuration/components.sass b/assets/sass/_theme/configuration/components.sass
new file mode 100644
index 0000000000000000000000000000000000000000..4d77d7bc8c63bae4c07d7d19f5b7a1fe6379be7a
--- /dev/null
+++ b/assets/sass/_theme/configuration/components.sass
@@ -0,0 +1,106 @@
+// Button
+$btn-font-family: $heading-font-family !default
+$btn-font-size: $meta-size !default
+$btn-font-size-desktop: $meta-size-desktop !default
+$btn-font-weight: normal !default
+$btn-text-transform: none !default
+$btn-color: var(--color-text) !default
+$btn-hover-color: var(--color-text) !default
+$btn-background: transparent !default
+$btn-hover-background: var(--color-background) !default
+$btn-border: pxToRem(1) solid var(--color-border) !default
+$btn-border-desktop: $btn-border !default
+$btn-border-radius: pxToRem(4) !default
+$btn-border-radius-desktop: $btn-border-radius !default
+$btn-padding: pxToRem(12) pxToRem(10) !default
+$btn-padding-desktop: pxToRem(18) pxToRem(16) !default
+$btn-min-width: pxToRem(100) !default
+$btn-min-width-desktop: pxToRem(190) !default
+
+// Chip
+$chip-background: var(--color-background) !default
+$chip-background-hover: var(--color-background-alt) !default
+$chip-border: 1px solid var(--color-border) !default
+$chip-border-radius: $btn-border-radius !default
+$chip-color: var(--color-text) !default
+
+// Form
+$form-btn-color: var(--color-background) !default
+$form-btn-background-color: var(--color-accent) !default
+$form-input-border-radius: 4px !default
+
+// Header
+$header-color: var(--color-text) !default
+$header-hover-color: var(--color-accent) !default // TODO : Réflechir à plus élégant / générique
+$header-background: var(--color-background-alt) !default
+$header-transition: 0.3s !default
+$header-dropdown-full: false !default
+$header-dropdown-background: $header-background !default
+$header-dropdown-color: $header-color !default
+$header-dropdown-transition: $header-transition !default
+$header-sticky-enabled: true !default
+$header-sticky-background: var(--color-background) !default
+$header-sticky-dropdown-background: $header-sticky-background !default
+$header-sticky-color: $header-color !default
+$header-sticky-transition: $header-transition !default
+$header-nav-padding-y: pxToRem(20) !default
+$header-nav-padding-y-desktop: pxToRem(30) !default
+$header-logo-height: 32px !default
+$header-logo-height-desktop: $header-logo-height !default
+$header-height: 87px !default
+$header-height-desktop: 96px !default
+$header-sticky-invert-logo: false !default
+$header-border-bottom-width: 1px !default
+
+// Navs
+$body-overlay-color: rgba(0, 0, 0, 0.3) !default
+
+// Footer
+$footer-color: var(--color-text) !default
+$footer-background-color: var(--color-background-alt) !default
+$footer-logo-height: $header-logo-height !default
+$footer-logo-height-desktop: $footer-logo-height !default
+$footer-icons-enabled: true !default
+$footer-icons-size: pxToRem(32) !default
+$footer-text-hidden: false !default
+$dropdown-i18n-background-color: var(--color-background) !default
+$dropdown-i18n-color: var(--color-text) !default
+
+// Hero
+$hero-height: 300px !default
+$hero-height-desktop: 500px !default
+$hero-color: var(--color-text) !default
+$hero-background-color: var(--color-background-alt) !default
+$hero-credit-color: var(--color-text-alt) !default
+
+// Breadcrumb
+$breadcrumb-color: $hero-color !default
+$breadcrumb-color-active: $hero-color !default
+$breadcrumb-icon: "caret-right" !default
+$breadcrumb-icon-color: var(--color-text-alt) !default
+
+// System
+
+// Lightbox
+$lightbox-overlay-color: rgba(0, 0, 0, 0.90) !default
+$lightbox-backdrop: blur(16px) !default
+
+// Table of content
+$toc-color: var(--color-text) !default
+$toc-active-color: var(--color-accent) !default // TODO : checker ce que ça fait
+$toc-background-color: var(--color-background-alt) !default
+$toc-font-family: $body-font-family !default
+$toc-font-size: $body-size !default
+$toc-font-size-desktop: $body-size-desktop !default
+$toc-line-height: $body-line-height !default
+$toc-title-font-family: $meta-font-family !default
+$toc-title-font-size: $meta-size !default
+$toc-title-font-size-desktop: $meta-size-desktop !default
+$toc-sticky-transition: 0.4s
+$toc-overlay-color: $body-overlay-color !default
+
+// Table
+$table-head-font-size: $h4-size !default
+$table-head-font-size-desktop: $h4-size-desktop !default
+$table-body-size: $body-size !default
+$table-body-size-desktop: $body-size-desktop !default
\ No newline at end of file
diff --git a/assets/sass/_theme/configuration/icons.sass b/assets/sass/_theme/configuration/icons.sass
new file mode 100644
index 0000000000000000000000000000000000000000..0a0f0fc871b84e281a63f2b1c110f469f47b25f3
--- /dev/null
+++ b/assets/sass/_theme/configuration/icons.sass
@@ -0,0 +1,83 @@
+// Icons
+$icons: ()
+$icons: map-merge($icons, ("arrow": "\ff01"))
+$icons: map-merge($icons, ("arrow-raw": "\e93a"))
+$icons: map-merge($icons, ("arrow-first": "\e906"))
+$icons: map-merge($icons, ("arrow-last": "\e907"))
+$icons: map-merge($icons, ("arrow-left": "\ff02"))
+$icons: map-merge($icons, ("arrow-left-raw": "\e938"))
+$icons: map-merge($icons, ("arrow-next": "\e909"))
+$icons: map-merge($icons, ("arrow-previous": "\e908"))
+$icons: map-merge($icons, ("arrow-right": "\ff00"))
+$icons: map-merge($icons, ("arrow-right-raw": "\e939"))
+$icons: map-merge($icons, ("arrow-alt": "\e931"))
+$icons: map-merge($icons, ("arrow-alt-raw": "\e936"))
+$icons: map-merge($icons, ("burger": "\e902"))
+$icons: map-merge($icons, ("burger-close": "\e905"))
+$icons: map-merge($icons, ("caret": "\e904"))
+$icons: map-merge($icons, ("caret-raw": "\e940"))
+$icons: map-merge($icons, ("caret-bottom": "\e911"))
+$icons: map-merge($icons, ("caret-bottom-raw": "\e944"))
+$icons: map-merge($icons, ("caret-left": "\e912"))
+$icons: map-merge($icons, ("caret-left-raw": "\e942"))
+$icons: map-merge($icons, ("caret-top": "\e914"))
+$icons: map-merge($icons, ("caret-top-raw": "\e941"))
+$icons: map-merge($icons, ("caret-right": "\e913"))
+$icons: map-merge($icons, ("caret-right-raw": "\e943"))
+$icons: map-merge($icons, ("check": "\ff06"))
+$icons: map-merge($icons, ("check-inline": "\ff07"))
+$icons: map-merge($icons, ("check-inline-raw": "\e945"))
+$icons: map-merge($icons, ("close": "\e90e"))
+$icons: map-merge($icons, ("copy": "\ff03"))
+$icons: map-merge($icons, ("copy-raw": "\e946"))
+$icons: map-merge($icons, ("copy-inline": "\ff04"))
+$icons: map-merge($icons, ("download": "\e900"))
+$icons: map-merge($icons, ("download-inline": "\e92f"))
+$icons: map-merge($icons, ("download-raw": "\e937"))
+$icons: map-merge($icons, ("eye": "\e901"))
+$icons: map-merge($icons, ("facebook": "\e90b"))
+$icons: map-merge($icons, ("facebook-raw": "\e93e"))
+$icons: map-merge($icons, ("globe": "\ff10"))
+$icons: map-merge($icons, ("globe-raw": "\e934"))
+$icons: map-merge($icons, ("instagram": "\e90a"))
+$icons: map-merge($icons, ("instagram-raw": "\e93b"))
+$icons: map-merge($icons, ("link-blank": "\e903"))
+$icons: map-merge($icons, ("link-blank-block": "\ff05"))
+$icons: map-merge($icons, ("link-blank-raw": "\e932"))
+$icons: map-merge($icons, ("linkedin": "\e90c"))
+$icons: map-merge($icons, ("linkedin-raw": "\e93c"))
+$icons: map-merge($icons, ("list-hyphen": "\e917"))
+$icons: map-merge($icons, ("list-hyphen-raw": "\e93f"))
+$icons: map-merge($icons, ("pause": "\e90f"))
+$icons: map-merge($icons, ("play": "\e910"))
+$icons: map-merge($icons, ("search": "\e916"))
+$icons: map-merge($icons, ("search-inline": "\ee13"))
+$icons: map-merge($icons, ("search-raw": "\e933"))
+$icons: map-merge($icons, ("social": "\e915"))
+$icons: map-merge($icons, ("social-raw": "\e935"))
+$icons: map-merge($icons, ("social-inline": "\e92e"))
+$icons: map-merge($icons, ("social-facebook": "\ee01"))
+$icons: map-merge($icons, ("social-instagram": "\ee02"))
+$icons: map-merge($icons, ("social-linkedin": "\ee03"))
+$icons: map-merge($icons, ("social-mastodon": "\ee04"))
+$icons: map-merge($icons, ("social-peertube": "\ee05"))
+$icons: map-merge($icons, ("social-rss": "\ee06"))
+$icons: map-merge($icons, ("social-tiktok": "\ee07"))
+$icons: map-merge($icons, ("social-vimeo": "\ee08"))
+$icons: map-merge($icons, ("social-x": "\ee09"))
+$icons: map-merge($icons, ("social-youtube": "\ee0a"))
+$icons: map-merge($icons, ("social-github": "\ee10"))
+$icons: map-merge($icons, ("social-email": "\ee11"))
+$icons: map-merge($icons, ("toc": "\e918"))
+$icons: map-merge($icons, ("twitter": "\e90d"))
+$icons: map-merge($icons, ("twitter-raw": "\e90d"))
+$icons: map-merge($icons, ("whatsapp": "\e919"))
+$icons: map-merge($icons, ("email": "\e920"))
+$icons: map-merge($icons, ("telegram": "\e921"))
+
+// Icons
+$icon-burger-margin-right: -12px
+$icon-close-margin-right: -12px
+$icon-toc-margin-right: -14px
+$icon-arrow-previous-margin-left: -18px // cf. testimonial
+$icon-social-margin-right: -14px
\ No newline at end of file
diff --git a/assets/sass/_theme/configuration/sections.sass b/assets/sass/_theme/configuration/sections.sass
new file mode 100644
index 0000000000000000000000000000000000000000..8d85e5a47f8f93f5d40132cb32e8043a49e86a23
--- /dev/null
+++ b/assets/sass/_theme/configuration/sections.sass
@@ -0,0 +1,22 @@
+// Sections
+$article-media-aspect-ratio: 2 !default
+
+$post-time-color: var(--color-text-alt) !default
+// Si layout posts grid (ne concerne pas les blocks posts)
+$posts-grid-columns: $block-posts-grid-columns !default
+
+// Person
+$persons-avatar-background-color: var(--color-background-alt) !default
+
+// Organization
+$organization-background-color: $color-background-alt !default // Use sass variable color-background To avoid dark logo on darkmode background-alt color
+
+// Project
+$project-infos-border-color: $color-border !default
+$project-infos-color-text: $color-text !default
+$project-infos-color-text-alt: $color-text-alt !default
+$project-infos-color-accent: $color-accent !default
+
+// Program
+$program-essential-font-size: $meta-size !default
+$program-essential-font-size-desktop: $meta-size-desktop !default
diff --git a/assets/sass/_theme/configuration/spacings.sass b/assets/sass/_theme/configuration/spacings.sass
new file mode 100644
index 0000000000000000000000000000000000000000..9358d34c229e7c7107002f8624d5c8648bde9d1d
--- /dev/null
+++ b/assets/sass/_theme/configuration/spacings.sass
@@ -0,0 +1,33 @@
+// Breakpoints
+// TODO: réécrire en sass les mixins bootstrap
+$grid-breakpoints: (xs: 0, sm: 576px, md: 768px, desktop: 992px, lg: 992px, xl: 1200px, xxl: 1440px) !default
+
+// Grid System 
+$grid-gutter: pxToRem(24) !default
+$grid-gutter-lg: pxToRem(48) !default
+$grid-gutter-xxl: pxToRem(64) !default
+$grid-max-width: pxToRem(1980) !default
+
+// Spacing
+$space-unit: 4
+$spacing-1: space(2)   // 8px
+$spacing-2: space(3)   // 12px
+$spacing-3: space(6)   // 24px
+$spacing-4: space(12)  // 48px
+$spacing-5: space(16)  // 64px
+$spacing-6: space(32)  // 128px
+$spacing-7: space(64)  // 256px
+
+$minimum-accessible-size: pxToRem(44) !default
+
+// Z-index
+$zindex-nav-accessibility: 1010 !default
+$zindex-stretched-link: 2 !default
+$zindex-header: 52 !default
+$zindex-body-overlay: 51 !default
+$zindex-toc-offcanvas: 60 !default
+$zindex-toc: 50 !default
+$zindex-toc-cta: 49 !default
+$zindex-modal: 72 !default
+$zindex-aside: 48 !default
+$zindex-footer: 50 !default
\ No newline at end of file
diff --git a/assets/sass/_theme/configuration/typography.sass b/assets/sass/_theme/configuration/typography.sass
new file mode 100644
index 0000000000000000000000000000000000000000..c43edc029d52b8f811d2462e440e2f0fad35a095
--- /dev/null
+++ b/assets/sass/_theme/configuration/typography.sass
@@ -0,0 +1,131 @@
+// TYPOGRAPHY
+// Fonts family
+$body-font-family: "Baskerville", "Times New Roman", "Times", serif !default
+$heading-font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif !default
+
+// Headings
+$heading-font-weight: normal !default
+
+// h1
+$h1-font-family: $heading-font-family !default
+$h1-size-desktop: pxToRem(60) !default
+$h1-size: pxToRem(30) !default
+$h1-line-height: 120% !default
+$h1-line-height-desktop: $h1-line-height !default
+$h1-weight: bold !default
+$h1-text-transform: none !default
+
+// h2
+$h2-font-family: $heading-font-family !default
+$h2-size-desktop: pxToRem(40) !default
+$h2-size: pxToRem(24) !default
+$h2-line-height: 120% !default
+$h2-line-height-desktop: $h2-line-height !default
+$h2-weight: $heading-font-weight !default
+$h2-text-transform: none !default
+
+// h3
+$h3-font-family: $heading-font-family !default
+$h3-size-desktop: pxToRem(28) !default
+$h3-size: pxToRem(20) !default
+$h3-line-height: 130% !default
+$h3-line-height-desktop: $h3-line-height !default
+$h3-weight: bold !default
+$h3-text-transform: none !default
+
+// h4
+$h4-font-family: $heading-font-family !default
+$h4-size-desktop: pxToRem(22) !default
+$h4-size: pxToRem(16) !default
+$h4-line-height: 130% !default
+$h4-line-height-desktop: $h4-line-height !default
+$h4-weight: bold !default
+$h4-text-transform: none !default
+
+// h5 or Section
+$h5-font-family: $heading-font-family !default
+$h5-size-desktop: pxToRem(24) !default
+$h5-size: pxToRem(20) !default
+$h5-line-height: 130% !default
+$h5-line-height-desktop: $h5-line-height !default
+$h5-weight: $heading-font-weight !default
+$h5-text-transform: uppercase !default
+
+// h6 or Tab
+$h6-font-family: $heading-font-family !default
+$h6-size-desktop: pxToRem(20) !default
+$h6-size: pxToRem(14) !default
+$h6-line-height: 130% !default
+$h6-line-height-desktop: $h6-line-height !default
+$h6-weight: $heading-font-weight !default
+$h6-text-transform: uppercase !default
+
+// Lead
+$lead-font-family: $heading-font-family !default
+$lead-size-desktop: pxToRem(60) !default
+$lead-size: pxToRem(24) !default
+$lead-line-height: 120% !default
+$lead-line-height-desktop: $lead-line-height !default
+$lead-weight: $heading-font-weight !default
+
+$lead-sidebar-font-family: $lead-font-family !default
+$lead-sidebar-size-desktop: pxToRem(32) !default
+$lead-sidebar-size: $lead-size !default
+$lead-sidebar-line-height: $lead-line-height !default
+$lead-sidebar-line-height-desktop: $lead-sidebar-line-height !default
+$lead-sidebar-weight: $lead-weight !default
+
+$lead-hero-font-family: $lead-sidebar-font-family !default
+$lead-hero-size: $lead-size !default
+$lead-hero-size-desktop: $lead-sidebar-size-desktop !default
+$lead-hero-line-height: $lead-sidebar-line-height !default
+$lead-hero-line-height-desktop: $lead-hero-line-height !default
+$lead-hero-weight: $lead-sidebar-weight !default
+
+// Body
+$body-size-desktop: pxToRem(22) !default
+$body-size: pxToRem(18) !default
+$body-line-height: 160% !default
+$body-line-height-desktop: $body-line-height !default
+$body-weight: normal !default
+
+// Small
+$small-font-family: $body-font-family !default
+$small-size-desktop: pxToRem(18) !default
+$small-size: pxToRem(14) !default
+$small-line-height: 130% !default
+$small-line-height-desktop: $small-line-height !default
+$small-weight: normal !default
+
+// Signature
+$signature-font-family: $heading-font-family !default
+$signature-size-desktop: pxToRem(22) !default
+$signature-size: pxToRem(18) !default
+$signature-line-height: 130% !default
+$signature-line-height-desktop: $signature-line-height !default
+$signature-weight: $heading-font-weight !default
+
+// Meta
+$meta-font-family: $heading-font-family !default
+$meta-size-desktop: pxToRem(16) !default
+$meta-size: pxToRem(14) !default
+$meta-line-height: 150% !default
+$meta-line-height-desktop: $meta-line-height !default
+$meta-weight: $heading-font-weight !default
+
+// Quotes
+$quote-font-family: $body-font-family !default
+$quote-size-desktop-short: pxToRem(60) !default
+$quote-size-desktop-long: pxToRem(40) !default
+$quote-size-desktop: pxToRem(40) !default
+$quote-size: pxToRem(24) !default
+$quote-line-height: 120% !default
+$quote-line-height-desktop: $quote-line-height !default
+$quote-weight: normal !default
+$quote-style: italic !default
+
+// Link
+$link-underline-offset: 0.2em !default
+$link-underline-thickness: 1px !default
+$link-transition: text-decoration-color .3s ease !default
+$link-unhover-decoration-color-alpha: 0.3 !default
diff --git a/assets/sass/_theme/dependencies/glightbox.sass b/assets/sass/_theme/dependencies/glightbox.sass
index e2a881893bf17c229734470ea383b85321515402..a09d705b9162359cb199cc6ae1cdc79be845ee7b 100644
--- a/assets/sass/_theme/dependencies/glightbox.sass
+++ b/assets/sass/_theme/dependencies/glightbox.sass
@@ -6,7 +6,7 @@
         &-media
             box-shadow: none
             img
-                padding: $spacing0 space(10) space(10)
+                padding: $spacing-2 space(10) space(10)
         &-description
             background-color: transparent
         &-title,
@@ -34,7 +34,7 @@
         @include icon(arrow-left)
         left: 0
     .gdesc-inner
-        padding: 0 $spacing0 space(2)
+        padding: 0 $spacing-2 $spacing-1
         text-align: center
         .gslide-desc
             @include meta
@@ -56,11 +56,11 @@
             bottom: 0
     @include media-breakpoint-up(desktop)
         .gdesc-inner
-            padding-bottom: $spacing0
+            padding-bottom: $spacing-2
         .gslide
             &-media
                 img
-                    padding: $spacing0 space(10)
+                    padding: $spacing-2 space(10)
 a.glightbox
     display: block
 
diff --git a/assets/sass/_theme/dependencies/splide.sass b/assets/sass/_theme/dependencies/splide.sass
index fce97da6a5c7e83d97a282e10b6a66caec7d5298..bc7396131441fbb13bc9730ffb3d883dfcd8fced 100644
--- a/assets/sass/_theme/dependencies/splide.sass
+++ b/assets/sass/_theme/dependencies/splide.sass
@@ -25,7 +25,7 @@
             padding: 0
             width: 48px
             &::before
-                background-color: rgba($link-color, 0.3)
+                background-color: alphaColor($link-color, 0.3)
                 border-radius: 50%
                 content: ""
                 display: block
@@ -35,7 +35,7 @@
                 width: 10px
             &:hover
                 &::before
-                    background-color: rgba($link-color, 0.6)
+                    background-color: alphaColor($link-color, 0.6)
             &.is-active
                 &::before
                     background-color: $link-color
diff --git a/assets/sass/_theme/design-system/a11y.sass b/assets/sass/_theme/design-system/a11y.sass
index 9fbce2042a73076d5f2a81bd005b4de4fb9546e5..0eb7459a5d5742ef6b2e3abdd0b8c828f7577f97 100644
--- a/assets/sass/_theme/design-system/a11y.sass
+++ b/assets/sass/_theme/design-system/a11y.sass
@@ -1,5 +1,5 @@
 .nav-accessibility
-    padding: $spacing1
+    padding: $spacing-3
     position: absolute
     transform: translateY(-300%)
     z-index: $zindex-nav-accessibility
@@ -9,7 +9,7 @@
         @include list-reset
     li
         display: inline-block
-        margin-right: px2rem(5)
+        margin-right: pxToRem(5)
     &:focus-within
         background: white
         transform: translateY(0)
diff --git a/assets/sass/_theme/design-system/backlinks.sass b/assets/sass/_theme/design-system/backlinks.sass
index c411a8d17f9822983dd631ee4d4738b33c098a27..9479aa5fd703e84c6d3639b052be780ed6b6ebc5 100644
--- a/assets/sass/_theme/design-system/backlinks.sass
+++ b/assets/sass/_theme/design-system/backlinks.sass
@@ -1,7 +1,7 @@
 .organizations__page, .persons__page
     .backlinks
         > .block, > *
-            margin-top: $spacing4
+            margin-top: $spacing-6
         .block-pages
             .top
                 display: block
diff --git a/assets/sass/_theme/design-system/breadcrumb.sass b/assets/sass/_theme/design-system/breadcrumb.sass
index 8c5a32ea02654738b296ab7fd3ab8013e2d3d74c..f5775c0fdd90a37dd0572966fd10e55bfe5df411 100644
--- a/assets/sass/_theme/design-system/breadcrumb.sass
+++ b/assets/sass/_theme/design-system/breadcrumb.sass
@@ -4,7 +4,7 @@
     flex-wrap: nowrap
     overflow: auto
     display: flex
-    height: $spacing3
+    height: $spacing-5
     align-items: center
     li
         flex-shrink: 0
@@ -13,14 +13,19 @@
             @include meta
         a
             color: $breadcrumb-color
-            text-decoration-color: rgba($breadcrumb-color, 0)
             line-height: 1
-            &:hover
-                text-decoration-color: rgba($breadcrumb-color, 1)
+            @extend %underline-on-hover
         &.active
             color: $breadcrumb-color-active
         &:not(:first-child)
-            padding-left: $spacing0
+            padding-left: $spacing-2
             @include icon($breadcrumb-icon)
-                padding-right: $spacing0
+                padding-right: $spacing-2
                 color: $breadcrumb-icon-color
+
+.breadcrumb-nav
+    @include media-breakpoint-down(desktop)
+        margin-left: var(--grid-gutter-negative)
+        margin-right: var(--grid-gutter-negative)
+        > ol
+            padding: 0 var(--grid-gutter)
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/button.sass b/assets/sass/_theme/design-system/button.sass
index 60adbd146ac638d4dc53465255c6a469611d198c..fffdd2dbb288563a23417ef62283ca352feb4b52 100644
--- a/assets/sass/_theme/design-system/button.sass
+++ b/assets/sass/_theme/design-system/button.sass
@@ -1,30 +1,103 @@
+.button, .btn
+    @include button-reset
+    font-family: var(--btn-font-family)
+    font-size: var(--btn-font-size)
+    font-weight: var(--btn-font-weight)
+    text-transform: var(--btn-text-transform)
+    text-decoration: none
+    line-height: $body-line-height
+    color: var(--btn-color)
+    background: var(--btn-background)
+    border: var(--btn-border)
+    border-radius: var(--btn-border-radius)
+    padding: var(--btn-padding)
+    min-width: var(--btn-min-width)
+    text-align: center
+    display: inline-block
+    transition: background .3s ease, color .3s ease
+    &:hover, &:focus, &:focus-visible
+        color: var(--btn-hover-color)
+        background: var(--btn-hover-background)
+
+.button-accent
+    @extend .button
+    --btn-color: #{$color-background}
+    --btn-background: #{$color-accent}
+    --btn-hover-color: #{$color-background}
+    --btn-hover-background: #{alphaColor($color-accent, 0.85)}
+
+.button-alt
+    @extend .button
+    --btn-color: #{$color-background}
+    --btn-background: #{$color-text-alt}
+    --btn-hover-color: #{$color-background}
+    --btn-hover-background: #{$color-text}
+
 .squared-button
     @include meta
     @include button-reset
     align-items: center
+    color: var(--color-text)
     cursor: pointer
     display: flex
     padding: 0
-    @include media-breakpoint-up(desktop)
-        width: col(2,1)
-    &:first-child
-        margin-bottom: $spacing0
+    text-decoration: none
     &::before 
-        background-color: white
-        border: 1px solid $color-border
-        margin-right: $spacing0
-        padding: half($spacing0)
+        background-color: var(--color-background)
+        border: 1px solid var(--color-border)
+        margin-right: $spacing-2
+        padding: $spacing-1
         transition: background 0.3s ease, border 0.3s ease
         @include media-breakpoint-up(desktop)
-            margin-right: $spacing1
+            margin-right: $spacing-3
     &:hover
         text-decoration: none
         &::before
-            background-color: $color-text
+            background-color: var(--color-text)
             border-color: transparent
-            color: $color-background
-    text-decoration: none
-button.squared-button
-    @include icon-block(eye, before)
-a.squared-button
-    @include icon-block(download, before)
\ No newline at end of file
+            color: var(--color-background)
+
+@mixin link-icon($icon: false)
+    @include button-reset
+    line-height: $body-line-height
+    white-space: nowrap
+    min-width: fit-content
+    @if $icon
+        @include icon-block($icon, after)
+
+@mixin button-icon($icon: false)
+    white-space: nowrap
+    display: inline-flex
+    align-items: center
+    justify-content: space-between
+    gap: $spacing-1
+    @if $icon
+        @include icon($icon, after)
+
+a.btn[target="_blank"]
+    @include button-icon(link-blank-raw)
+
+.dropdown-share
+    position: relative
+    .dropdown-menu
+        background: var(--btn-hover-background)
+        border: var(--btn-border)
+        border-radius: var(--btn-border-radius)
+        bottom: 0
+        padding: 0
+        position: absolute
+        top: 0
+        width: 100%
+        .share
+            display: flex
+            align-items: center
+            height: 100%
+            li
+                margin: 0
+                flex: 1 1
+                text-align: center
+        a
+            display: block
+            color: var(--btn-hover-color)
+            &:hover
+                color: var(--color-accent)
diff --git a/assets/sass/_theme/design-system/contacts.sass b/assets/sass/_theme/design-system/contacts.sass
index 003b3cdb7cdc83d2543db12bb3d471afbb558956..d667181c1d1dace07a59de2c0e519492b6918c50 100644
--- a/assets/sass/_theme/design-system/contacts.sass
+++ b/assets/sass/_theme/design-system/contacts.sass
@@ -1,12 +1,12 @@
 .contacts-details
-    margin-top: $spacing3
+    margin-top: $spacing-5
     ul
         @include list-reset
         padding-left: 0
         li
             list-style-type: none
             + li
-                margin-top: $spacing1
+                margin-top: $spacing-3
             address
                 @extend .p
             > span
@@ -15,7 +15,7 @@
     @include media-breakpoint-down(md)
         width: auto
         ul + ul
-            margin-top: $spacing1
+            margin-top: $spacing-3
         li
             align-items: baseline
             justify-content: space-between
@@ -23,7 +23,7 @@
             // text-align: right
             > span
                 flex-shrink: 0
-                margin-right: $spacing1
+                margin-right: $spacing-3
                 text-align: left
             address
                 text-align: right
diff --git a/assets/sass/_theme/design-system/footer.sass b/assets/sass/_theme/design-system/footer.sass
index 1654b45e43da591da911d8d9beadbbb1f457f124..f0870a8a1db94df86db86b976b4d8d0c80ab2ec6 100644
--- a/assets/sass/_theme/design-system/footer.sass
+++ b/assets/sass/_theme/design-system/footer.sass
@@ -1,40 +1,39 @@
 footer#document-footer
     background: $footer-background-color
     color: $footer-color
-    padding-bottom: $spacing3
-    padding-top: $spacing3
+    padding-bottom: $spacing-5
+    padding-top: $spacing-5
     position: relative
     @include media-breakpoint-down(desktop)
         z-index: $zindex-footer
     a
-        @include link($footer-color)
+        color: $footer-color
+        @extend %underline-on-hover
     .logo
+        @extend %logo
         img
             height: $footer-logo-height
             max-width: 100%
-            width: auto
             @include media-breakpoint-up(desktop)
                 height: $footer-logo-height-desktop
     ul
         @include list-reset
-        li
-            + li
-                margin-top: $spacing0
-            a
-                @include link($footer-color)
-                text-decoration-color: transparent
+        li + li
+                margin-top: $spacing-2
     .footer
         &-site
             @include small
             * + *
-                margin-top: $spacing0
+                margin-top: $spacing-2
         &-social, &-legals, &-credit
             @include meta
         &-credit
             display: block
-            margin-top: $spacing0
+            margin-top: $spacing-2
+            a
+                text-decoration-color: alphaColor(currentColor, 0.3)
         &-search
-            padding-top: $spacing0 !important
+            padding-top: $spacing-2 !important
         &-i18n
             @include dropdown-i18n
             button
@@ -62,21 +61,21 @@ footer#document-footer
                     &::after
                         transform: rotate(-180deg)
                 &::before
-                    margin-right: $spacing0
+                    margin-right: $spacing-2
                 &::after
-                    margin-left: $spacing0
+                    margin-left: $spacing-2
             button[aria-expanded="true"]
-                min-width: px2rem(150)
-                outline: $spacing0 solid $dropdown-i18n-background-color
+                min-width: $spacing-6
+                outline: $spacing-2 solid $dropdown-i18n-background-color
             .dropdown-menu
                 @include meta
                 background: $dropdown-i18n-background-color
-                margin-left: -$spacing0
-                margin-right: -$spacing0
-                margin-top: $spacing0
+                margin-left: -$spacing-2
+                margin-right: -$spacing-2
+                margin-top: $spacing-2
                 a
                     color: $dropdown-i18n-color
-                    padding: $spacing0
+                    padding: $spacing-2
                 ul
                     li + li
                         margin-top: 0
@@ -86,7 +85,7 @@ footer#document-footer
                     padding: 0
                     position: absolute
                     width: fit-content
-                    min-width: calc(#{px2rem(150)} + #{$spacing0} * 2)
+                    min-width: calc(#{pxToRem(150)} + #{$spacing-2} * 2)
                     a
                         padding-top: 0
                     a:focus-visible
@@ -99,7 +98,7 @@ footer#document-footer
         @if $footer-icons-enabled
             &-social 
                 .nav-social + .site-links
-                    margin-top: $spacing1
+                    margin-top: $spacing-3
                 &.site-links li
                     align-items: center
                     display: flex
@@ -134,13 +133,13 @@ footer#document-footer
                     &::after
                         font-size: $footer-icons-size
                         @include media-breakpoint-up(desktop)
-                            margin-right: half(-$spacing0)
-                            padding-left: $spacing0
+                            margin-right: -0.2em
+                            padding-left: $spacing-2
                     @include media-breakpoint-down(desktop)
                         width: fit-content
                         flex-direction: row-reverse
                         &::after
-                            margin-right: $spacing0
+                            margin-right: $spacing-2
                             transform: translateX(-25%)
         @if $footer-text-hidden
             &-social.site-links li
@@ -150,16 +149,16 @@ footer#document-footer
         .container
             + .container,
             > * + *
-                margin-top: $spacing3
+                margin-top: $spacing-5
 
     @include media-breakpoint-up(desktop)
         .container
             display: flex
             justify-content: space-between
-            padding-bottom: $spacing3
+            padding-bottom: $spacing-5
             + .container
                 align-items: flex-end
-                padding-top: $spacing3
+                padding-top: $spacing-5
                 padding-bottom: 0
         .footer
             &-site, &-social
diff --git a/assets/sass/_theme/design-system/form.sass b/assets/sass/_theme/design-system/form.sass
index 9c25792eb4bb904d834fc7bebd62f701bc9ad184..cdf6dd84b58b4bf619ad0d1a7761485081729d2a 100644
--- a/assets/sass/_theme/design-system/form.sass
+++ b/assets/sass/_theme/design-system/form.sass
@@ -2,26 +2,24 @@ form
     fieldset
         border: none
         padding: 0
-        margin-bottom: $spacing1
+        margin-bottom: $spacing-3
     label
         @include meta
     .control--radio
         @include body-text
         + label
-            margin-left: half($spacing0)
+            margin-left: $spacing-1
             @include body-text
     .radio + .radio
-        margin-left: $spacing0
+        margin-left: $spacing-2
     input[type="text"], input[type="search"], input[type="email"], input[type="tel"], input[type="password"]
         @include body-text
         border: 1px solid rgba(0, 0, 0, 0.3)
         border-radius: $form-input-border-radius
-        padding: half($spacing0) 
+        padding: $spacing-1 
     input[type="submit"], button
-        @include button-reset
-        @include btn
-        @include meta
-        background: $form-btn-background-color
-        color: $form-btn-color
+        --btn-background: $form-btn-background-color
+        --btn-color: $form-btn-color
+        @extend .button
     label + input
-        margin-bottom: $spacing3
\ No newline at end of file
+        margin-bottom: $spacing-5
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/header.sass b/assets/sass/_theme/design-system/header.sass
index 38828d76b352ccdd138c253a70be269979aacda6..911a376a019a0a1711e7a35716345d6ac3269476 100644
--- a/assets/sass/_theme/design-system/header.sass
+++ b/assets/sass/_theme/design-system/header.sass
@@ -1,6 +1,6 @@
 header#document-header
     background: $header-background
-    border-bottom: $header-border-bottom-width solid $color-border
+    border-bottom: $header-border-bottom-width solid var(--color-border)
     color: $header-color
     position: fixed
     left: 0
@@ -29,8 +29,9 @@ header#document-header
             span
                 color: $header-sticky-color
         @if $header-sticky-invert-logo
-            .logo img
-                filter: invert(1)
+            .logo
+                img, .logo-text
+                    filter: invert(1)
     html.is-scrolling-down:not(.has-menu-opened) &
         @include media-breakpoint-down(desktop)
             transform: translateY(-100%)
@@ -38,11 +39,10 @@ header#document-header
             &:not(:hover)
                 transform: translateY(-100%)
     .logo
+        @extend %logo
         color: $header-color
         img
-            display: block
             height: $header-logo-height
-            width: auto
             @if $header-sticky-invert-logo
                 transition: filter $header-sticky-transition
             @include media-breakpoint-up(desktop)
@@ -98,7 +98,7 @@ header#document-header
             display: flex
             flex-wrap: wrap
             justify-content: space-between
-        button[type="button"]:not(.pagefind-ui__button)
+        .header-button
             @include button-reset
             display: none
             border: 0
@@ -119,7 +119,7 @@ header#document-header
                 align-items: center
             span:first-of-type
                 @include meta
-                font-size: 14px
+                font-size: pxToRem(14)
             span:last-of-type
                 background: none
                 @include icon-block(burger, before)
diff --git a/assets/sass/_theme/design-system/hero.sass b/assets/sass/_theme/design-system/hero.sass
index 1cd7c5d3eaa3bf4b370051c5a0f06692cdf60586..6f6f6118019fc9398f7c23965d3d6d87b12f63fd 100644
--- a/assets/sass/_theme/design-system/hero.sass
+++ b/assets/sass/_theme/design-system/hero.sass
@@ -5,22 +5,22 @@
     background-color: $hero-background-color
     color: $hero-color
     min-height: $hero-height
-    padding-bottom: $spacing3
+    padding-bottom: $spacing-5
     padding-top: var(--header-height)
     position: relative
-    margin-bottom: $spacing3
+    margin-bottom: $spacing-5
     @include media-breakpoint-up(desktop)
         min-height: $hero-height-desktop
     *:focus-visible
         outline-color: $hero-color
     .content
         align-items: start
-        padding-top: $spacing3
-        > h1, > hgroup
-            margin-top: $spacing3
-            
+        .hero-text
+            margin-top: $spacing-5
         h1 + p
-            margin-top: $spacing1
+            margin-top: $spacing-3
+        .btn
+            margin-top: $spacing-3
         .lead
             @include lead-hero
         figure
@@ -35,60 +35,64 @@
     .breadcrumb-nav + .content
         padding-top: 0
     .content + .breadcrumb-nav
-        margin-top: $spacing3
+        margin-top: $spacing-5
     &--no-margin
         margin-bottom: 0
         & + .document-content
-            margin-top: $spacing3
+            margin-top: $spacing-5
+    &--with-image
+        figure
+            position: relative
+            > a
+                @include stretched-link
     @include media-breakpoint-down(desktop)
-        .breadcrumb-nav
-            margin-left: half(-$grid-gutter-sm)
-            margin-right: half(-$grid-gutter-sm)
-            > ol
-                padding: 0 half($grid-gutter-sm)
+        .content
+            padding-top: 0
         &--with-image
             padding-bottom: 0
             .content
-                > h1, > hgroup
-                    margin-bottom: $spacing2
+                .hero-text
+                    margin-bottom: $spacing-4
         &--image-landscape
             .content
                 figure
-                    margin-left: half(-$grid-gutter-sm)
-                    margin-right: half(-$grid-gutter-sm)
+                    margin-left: var(--grid-gutter-negative)
+                    margin-right: var(--grid-gutter-negative)
         &--image-portrait, &--image-square
             .container
                 display: flex
                 flex-direction: column
-                margin-bottom: $spacing5
+                margin-bottom: $spacing-7
             figure
-                margin-bottom: calc(#{-$spacing5} + #{$spacing2})
+                margin-bottom: calc(#{-$spacing-7} + #{$spacing-4})
 
     @include media-breakpoint-up(desktop)
         .content
-            > h1, > hgroup
-                width: col(9)
+            padding-top: $spacing-5
+        .hero-text
+            width: columns(9)
         &--with-image
             .content
                 display: flex
                 justify-content: space-between
-                > h1, > hgroup
-                    width: col(7)
+                .hero-text
+                    width: columns(7)
                 figure
-                    width: col(5)
+                    width: columns(5)
 
         &--image-portrait, &--image-square
             .breadcrumb-nav
-                width: calc(#{col(9)} + #{half($grid-gutter)})
                 -webkit-mask-image: linear-gradient(to right, black 0%, black 90%, transparent 100%)
                 mask-image: linear-gradient(to right, black 0%, black 90%, transparent 100%)
                 .breadcrumb
-                    padding-right: 50px
+                    padding-right: 10%
             .content
-                > h1, > hgroup
-                    width: col(8)
+                .hero-text
+                    width: columns(8)
                 figure
-                    width: col(3)
+                    width: columns(3)
     + .breadcrumb-container
         margin-top: 0
+        @include media-breakpoint-down(desktop)
+            margin-bottom: $spacing-5
 
diff --git a/assets/sass/_theme/design-system/image.sass b/assets/sass/_theme/design-system/image.sass
index 0c2124cab50981e0552697c70b34243ee3db0557..f510bb241e3ba862ade8702d4ba44926d03a2e8a 100644
--- a/assets/sass/_theme/design-system/image.sass
+++ b/assets/sass/_theme/design-system/image.sass
@@ -13,7 +13,7 @@ img
         height: auto
         width: 100%
     figcaption
-        margin-top: px2rem(10)
+        margin-top: pxToRem(10)
         text-align: right
         &,
         p
diff --git a/assets/sass/_theme/design-system/layout.sass b/assets/sass/_theme/design-system/layout.sass
index 722758b5ebd320c54d5acb33b0f57e69f6d2628a..d4205042f2cc913177708242d6e50fc7b963bfc6 100644
--- a/assets/sass/_theme/design-system/layout.sass
+++ b/assets/sass/_theme/design-system/layout.sass
@@ -4,17 +4,16 @@
     box-sizing: border-box
 
 \:root
-    --spacing0: #{$spacing0}
-    --spacing1: #{$spacing1}
-    --spacing2: #{$spacing2}
-    --spacing3: #{$spacing3}
-    --spacing4: #{$spacing4}
-    --spacing5: #{$spacing5}
-    --grid-gutter: #{$grid-gutter}
-    --grid-gutter-sm: #{$grid-gutter-sm}
+    --spacing-1: #{$spacing-1}
+    --spacing-2: #{$spacing-2}
+    --spacing-3: #{$spacing-3}
+    --spacing-4: #{$spacing-4}
+    --spacing-5: #{$spacing-5}
+    --spacing-6: #{$spacing-6}
+    --spacing-7: #{$spacing-7}
     --grid-max-width: #{$grid-max-width}
     --header-height: #{$header-height}
-    --header-menu-max-height: calc(100vh - var(--header-height) - #{$spacing4})
+    --header-menu-max-height: calc(100vh - var(--header-height) - #{$spacing-6})
     @include media-breakpoint-up(desktop)
         --header-height: #{$header-height-desktop}
 
@@ -32,7 +31,7 @@ body
 
 main
     &:not(.page-with-blocks)
-        padding-bottom: $spacing3
+        padding-bottom: $spacing-5
 
 iframe
     border: none
@@ -43,7 +42,7 @@ iframe
 .container
     @include container
     .hero + &
-        margin-top: $spacing3
+        margin-top: $spacing-5
 
 .hidden
     display: none
@@ -59,7 +58,7 @@ ol
 
 .document-content
     .container > .lead
-        margin-bottom: $spacing3
+        margin-bottom: $spacing-5
 
 .document-content
     position: relative
@@ -73,13 +72,13 @@ details
             transform: translateY(5px)
     summary
         @include meta
-        padding-bottom: $spacing0
-        padding-top: $spacing0
+        padding-bottom: $spacing-2
+        padding-top: $spacing-2
         position: relative
         cursor: pointer
         @include icon(caret, after)
-            margin-left: px2rem(10)
-            line-height: px2rem(22)
+            margin-left: pxToRem(10)
+            line-height: pxToRem(22)
             transition: transform 0.25s
         &::marker
             content: none
@@ -107,16 +106,16 @@ details
         display: none
     .modal-content
         position: relative
-        background-color: $color-background-alt
-        padding: $spacing2
+        background-color: var(--color-background-alt)
+        padding: $spacing-4
         width: auto
         max-height: 100vh
         overflow-y: auto
         @include media-breakpoint-up(desktop)
-            padding: $spacing3
-            width: col(8)
+            padding: $spacing-5
+            width: columns(8)
         .modal-header
-            margin-bottom: $spacing0
+            margin-bottom: $spacing-2
             button
                 @include button-reset
                 @include icon-block(close, before)
diff --git a/assets/sass/_theme/design-system/logo.sass b/assets/sass/_theme/design-system/logo.sass
new file mode 100644
index 0000000000000000000000000000000000000000..6aafea148625fb6dff2174a60af8077acbae64d5
--- /dev/null
+++ b/assets/sass/_theme/design-system/logo.sass
@@ -0,0 +1,16 @@
+%logo
+    color: inherit
+    text-decoration: none
+    img
+        display: block
+        width: auto
+    .logo-darkmode
+        display: none
+    .logo-text
+        @include h2
+    &.with-darkmode
+        @media (prefers-color-scheme: dark)
+            > img:first-child
+                display: none
+            .logo-darkmode
+                display: block
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/nav.sass b/assets/sass/_theme/design-system/nav.sass
index 5abd9de7ead9e47a04770d020c990ea56bfbcf53..42cd02a7eed8b71c5d6107ab5c3ff653fe59e13e 100644
--- a/assets/sass/_theme/design-system/nav.sass
+++ b/assets/sass/_theme/design-system/nav.sass
@@ -11,7 +11,7 @@
         -webkit-flex-basis: 100vw
         display: none
         flex-basis: 100vw
-        margin-top: $spacing1
+        margin-top: $spacing-3
         max-height: var(--header-menu-max-height)
         overflow: auto
     a,
@@ -34,7 +34,7 @@
         //     text-decoration-color: transparent
         &[aria-expanded]
             @include icon(caret, after)
-                margin-left: px2rem(5)
+                margin-left: pxToRem(5)
                 transition: transform 0.15s
             &[aria-expanded="true"]
                 &::after
@@ -49,27 +49,25 @@
         display: none
         background: $header-dropdown-background
         @include media-breakpoint-down(desktop)
-            padding-bottom: $spacing1
+            padding-bottom: $spacing-3
         @include media-breakpoint-up(desktop)
-            padding: $spacing1
+            padding: $spacing-3
             position: absolute
             max-height: calc(100vh - var(--header-height))
             overflow: auto
         a
             color: $header-dropdown-color
-            &:hover,
-            &:focus
-                text-decoration-color: $header-dropdown-color
+            @extend %underline-on-hover
         .dropdown-menu-title
             @include h2
 
     .nav-level-1
         display: flex
         > li
-            > a, span
+            > a, > span
                 @include meta
                 display: block
-                padding: half($spacing0) $spacing0
+                padding: $spacing-1 $spacing-2
             &:last-child 
                 a, span
                     padding-right: 0
@@ -88,7 +86,7 @@
 
     .nav-level-3
         display: block
-        padding-top: half($spacing0)
+        padding-top: $spacing-1
         a,
         span
             @include meta
@@ -102,7 +100,7 @@
             align-items: center
         .nav-level-3
             li
-                margin-top: $spacing0
+                margin-top: $spacing-2
         .has-children:not(.header-i18n) // avoid 
             @if $header-dropdown-full
                 .dropdown-menu
@@ -111,7 +109,7 @@
                         // inset: 100% 0 auto 0
                         padding-left: 0
                         padding-right: 0
-                        padding-bottom: $spacing2
+                        padding-bottom: $spacing-4
                     &:not(.is-titled)
                         .nav-level-2
                             @include container
@@ -120,38 +118,38 @@
                         .container
                             align-items: baseline
                             display: flex
-                            gap: $grid-gutter
+                            gap: var(--grid-gutter)
                         .dropdown-menu-title
-                            width: col(5)
+                            width: columns(5)
                         .nav-level-2
-                            width: col(7)
+                            width: columns(7)
                             li
-                                margin-bottom: $spacing0
+                                margin-bottom: $spacing-2
             @else
                 position: relative
                 .dropdown-menu
                     margin-top: $header-nav-padding-y
                     min-width: 400px
-                    padding-left: $spacing1
-                    padding-top: $spacing0
-                    padding-right: $spacing1
+                    padding-left: $spacing-3
+                    padding-top: $spacing-2
+                    padding-right: $spacing-3
                     right: 0
                     text-align: right
                     &.is-titled
                         .dropdown-menu-title
                             @include h3
-                            margin-bottom: $spacing0
+                            margin-bottom: $spacing-2
                         .container
                             padding-left: 0
                             padding-right: 0
                 .nav-level-2
                     > li 
                         > a
-                            padding-bottom: half($spacing0)
-                            padding-top: half($spacing0)
+                            padding-bottom: $spacing-1
+                            padding-top: $spacing-1
                             display: block
                         + li.has-children
-                            margin-top: $spacing1
+                            margin-top: $spacing-3
 
         .header-i18n
             @include dropdown-i18n
@@ -170,14 +168,14 @@
             display: block
             li 
                 a, span
-                    padding: half($spacing0) 0
+                    padding: $spacing-1 0
                     display: block
             > li:not(:last-child) 
                 border-bottom: 1px solid #adb5bd
             > li
                 > a, > span
-                    padding-bottom: $spacing1
-                    padding-top: $spacing1
+                    padding-bottom: $spacing-3
+                    padding-top: $spacing-3
             li.has-children
                 [role="button"]
                     align-items: center
@@ -201,7 +199,7 @@
                 padding-right: 0
         .nav-level-2
             > .has-children + li
-                margin-top: $spacing1
+                margin-top: $spacing-3
         .nav-level-3
             padding-top: 0
 
@@ -215,8 +213,8 @@
         margin-right: 1rem
     a
         text-decoration: none
-        padding: $spacing0
-        font-size: px2rem(24)
+        padding: $spacing-2
+        font-size: pxToRem(24)
         &:hover
             opacity: 0.7
         &::after
diff --git a/assets/sass/_theme/design-system/pagination.sass b/assets/sass/_theme/design-system/pagination.sass
index 1c00405cb47904fdf4987318c33ba690e2fcda45..c39cf32843bdda5b91add7e18d17964af3a15701 100644
--- a/assets/sass/_theme/design-system/pagination.sass
+++ b/assets/sass/_theme/design-system/pagination.sass
@@ -5,47 +5,51 @@
     align-items: center
     display: flex
     flex-wrap: wrap
-    margin-top: $spacing3
+    margin-top: $spacing-5
     main.page-with-blocks &
-        padding-bottom: $spacing3
+        padding-bottom: $spacing-5
     li
         a
             color: inherit
-            padding: calc(#{$spacing0}/2) $spacing0
+            display: block
+            line-height: $spacing-4
+            min-width: $minimum-accessible-size
+            min-height: $minimum-accessible-size
+            padding: 0 $spacing-2
+            text-align: center
             text-decoration: none
             transition: background-color .15s ease-in-out
         &.active
-            color: $color-accent
+            color: var(--color-accent)
         &.disabled
             pointer-events: none
             a::before
                 opacity: .3
         &:not(.disabled)
             a:hover
-                background-color: $color-background-alt
+                background-color: var(--color-background-alt)
         &:first-child
             a
                 @include icon-block(arrow-first, before)
-                padding-left: 0
-                padding-right: 0
         &:nth-child(2)
             a
                 @include icon-block(arrow-previous, before)
-                padding-left: 0
-                padding-right: 0
         &:nth-last-child(2)
             a
                 @include icon-block(arrow-next, before)
-                padding-left: 0
-                padding-right: 0
         &:last-child
             a
                 @include icon-block(arrow-last, before)
+        &:first-child,
+        &:nth-child(2),
+        &:nth-last-child(2),
+        &:last-child
+            a
                 padding-left: 0
                 padding-right: 0
 
 .posts-navigation, .siblings-navigation
-    border-top: 1px solid $color-border
+    border-top: 1px solid var(--color-border)
     ul
         @include list-reset
         display: flex
@@ -58,33 +62,33 @@
             display: block
             text-decoration: none
             &:hover
-                color: $color-accent
+                color: var(--color-accent)
             span
                 @include meta
                 text-decoration: none
                 display: block
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
         .previous
             span
                 @include icon(arrow-left, before)
-                    margin-right: px2rem(5)
+                    margin-right: pxToRem(5)
         .next
             text-align: right
             span
                 @include icon(arrow-right, after)
-                    margin-left: px2rem(5)
+                    margin-left: pxToRem(5)
 
     @include media-breakpoint-up(desktop)
         ul
-            padding-top: $spacing1
-            gap: $spacing1
+            padding-top: $spacing-3
+            gap: $spacing-3
 
     @include media-breakpoint-down(desktop)
         ul
             flex-direction: column-reverse
             .previous,
             .next
-                border-bottom: 1px solid $color-border
+                border-bottom: 1px solid var(--color-border)
                 display: flex
                 align-items: center
                 span
@@ -94,11 +98,11 @@
                         content: none
                 a
                     display: block
-                    padding: $spacing1 0
+                    padding: $spacing-3 0
             .previous
                 @include icon(arrow-left, before)
-                    margin-right: $spacing0
+                    margin-right: $spacing-2
             .next
                 justify-content: end
                 @include icon(arrow-right, after)
-                    margin-left: $spacing0
\ No newline at end of file
+                    margin-left: $spacing-2
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/search.sass b/assets/sass/_theme/design-system/search.sass
index 9dbce7b4f9340785707d5a6d7bb394976f8f6b3c..844e04318e653f1078ac00413b2263d339ae72fd 100644
--- a/assets/sass/_theme/design-system/search.sass
+++ b/assets/sass/_theme/design-system/search.sass
@@ -18,9 +18,9 @@
         @include icon(search-inline, after)
         &::after
             line-height: inherit
-            margin-left: half($spacing0)
+            margin-left: $spacing-1
     &:not(.pagefind-menu)    
-        padding: half($spacing0) $spacing0
+        padding: $spacing-1 $spacing-2
     &.toggle-icon::after
         font-size: $h2-size
     &.toggle-both
@@ -31,7 +31,7 @@
         display: inline
     @include media-breakpoint-down(desktop)
         &.pagefind-menu
-            padding: $spacing1 0
+            padding: $spacing-3 0
             width: 100%
     @include media-breakpoint-up(desktop)
         &.toggle-icon::after
@@ -39,63 +39,60 @@
 .search__close
     @include icon-block(close, after)
     position: fixed
-    right: $spacing3
+    right: $spacing-5
     padding: 0
     z-index: 9
     &::after
         display: inline-flex
         justify-content: center
-        margin-left: $spacing0
-        width: px2rem(15)
+        margin-left: $spacing-2
+        width: pxToRem(15)
     @include media-breakpoint-down(desktop)
-        right: $spacing1
-        top: half($spacing0)
+        right: $spacing-3
+        top: $spacing-1
 #search
-    background: $color-background
-    color: $color-text
+    background: var(--color-background)
+    color: var(--color-text)
     height: 100vh
     left: 0
-    padding-bottom: $spacing3
-    padding-left: $spacing1
-    padding-right: $spacing1
-    padding-top: $spacing4
+    padding-bottom: $spacing-5
+    padding-left: var(--grid-gutter)
+    padding-right: var(--grid-gutter)
+    padding-top: $spacing-6
     position: fixed
     overflow: auto
     top: 0
     width: 100vw
     z-index: 80
     @include media-breakpoint-up(desktop)
-        padding-right: $spacing3
-        padding-left: $spacing3
-        padding-top: space(7)
+        padding-top: $spacing-4
     &[aria-hidden=true]
         display: none
     a
-        color: $color-text
+        color: var(--color-text)
     .pagefind-ui
         &::before
             content: ""
-            background: $color-background
-            height: space(27)
+            background: var(--color-background)
+            height: space(34)
             left: 0
             position: fixed
             top: 0
             width: 100%
             z-index: 5
             @include media-breakpoint-down(desktop)
-                height: space(50)
+                height: space(52)
         &__form
             @include icon(search-inline, after)
             &::after
-                color: transparentize($color-text-alt, .4)
-                padding-right: px2rem(2)
+                color: alphaColor(var(--color-text-alt), 0.6)
                 position: fixed
                 pointer-events: none
-                transform: translate(-6px,20%)
                 z-index: 9
+                font-size: $h2-size
                 @include media-breakpoint-down(desktop)
-                    right: $spacing1
-                    top: space(33)
+                    right: $spacing-3
+                    top: space(35)
         &__search-input
             background-color: $color-background
             border-left: 0
@@ -103,33 +100,33 @@
             border-radius: 0
             border-top: 0
             padding-left: 0
-            padding-right: $spacing1 !important
+            padding-right: $spacing-3 !important
             position: fixed
             z-index: 6
-            @include media-breakpoint-down(desktop)
-                margin-bottom: $spacing1
             &:focus,
             &:focus-visible
-                border-bottom: 2px solid $color-text
+                border-bottom: 2px solid var(--color-text)
                 outline: none
         &__button[type="button"]
             @include button-reset
-            @include link($color-text)
-            margin-top: $spacing2
+            @include link(var(--color-text))
+            margin-top: $spacing-4
             padding: 0
         &__message
             @include meta
-            color: $color-text-alt
+            color: var(--color-text-alt)
             text-align: right
             z-index: 11
             position: fixed
-            top: space(20)
+            top: space(27)
         &__search-clear,
         &__suppressed
             display: none
             pointer-events: none
         &__drawer
             position: relative
+            @include media-breakpoint-down(desktop)
+                padding-top: $spacing-2
         &__result
             list-style: none
             position: relative
@@ -141,74 +138,78 @@
                 @include media-breakpoint-down(desktop)
                     display: none
             + li
-                margin-top: half($spacing3)
+                margin-top: $spacing-4
             @include media-breakpoint-up(desktop)
                 @include grid
                 &-inner
                     grid-column: 4/13
         &__result-excerpt mark
-                background-color: $color-accent
-                color: $color-background
+                background-color: var(--color-accent)
+                color: var(--color-background)
         &__result-title a
             @include h4
             @include stretched-link
         @include media-breakpoint-up(desktop)
             &__form
                 position: relative
-                width: col(8)
+                width: columns(8)
                 &::after
-                    left: calc(#{col(8)} - #{space(8)})
-                    top: space(9)
+                    left: calc(#{columns(8)} + #{var(--grid-gutter)})
+                    top: space(16)
+                    transform: translateX(-100%)
             &__search-input,
             &__message
-                width: calc(#{col(8,12)} - #{space(21.5)})
+                width: columns(8)
             &__results-area
-                padding-top: space(26)
+                padding-top: $spacing-6
         @include media-breakpoint-down(desktop)
             &__search-input,
             &__message
-                width: calc(100% - #{$spacing2})
+                left: var(--grid-gutter)
+                right: var(--grid-gutter)
             &__message
-                top: space(44)
+                top: space(46)
             &__results-area
                 padding-top: space(17)
 
 .menu .nav-level-1 > li .pagefind-ui__toggle:not(.toggle-icon)::after
     margin-left: 0
-    margin-top: px2rem(2)
+    margin-top: pxToRem(2)
 
 .pagefind-fixed
     align-items: center
-    background: $color-background-alt
+    background: var(--color-background-alt)
     bottom: 0
-    color: $color-text
+    color: var(--color-text)
     display: flex
     justify-content: space-between
-    left: $spacing3
+    left: var(--grid-gutter)
     position: fixed
     z-index: 10
     @include media-breakpoint-up(desktop)
         &:not(.toggle-icon)
-            min-width: calc(#{$spacing3} * 3)
+            min-width: columns(2)
         &.toggle-icon:not(:hover)
             padding-left: 0
             padding-right: 0
             justify-content: center
         &.toggle-icon
-            min-height: px2rem(37)
-            width: px2rem(50)
+            min-height: pxToRem(37)
+            width: pxToRem(50)
+            span
+                display: none
             &:hover,
             &:focus
-                width: calc(#{$spacing3} * 3)
+                min-width: columns(2)
                 span
                     display: inline
     @include media-breakpoint-down(desktop)
         left: 0
         width: 100vw
         &.in-page-with-toc
-            background: $color-background
+            background: var(--color-background)
             border-top: 1px solid #eee
-            bottom: px2rem(44)
+            bottom: pxToRem(44)
             
 footer#document-footer .footer-search
     .pagefind-footer
@@ -217,11 +218,11 @@ footer#document-footer .footer-search
         &.toggle-icon
             transform: translateX(-35%)
         &::after
-            margin-top: px2rem(3)
+            margin-top: pxToRem(3)
     #search
         margin-top: 0
         a
-            color: $color-text
+            color: var(--color-text)
 
 .nav-search
     display: flex
diff --git a/assets/sass/_theme/design-system/table.sass b/assets/sass/_theme/design-system/table.sass
index f4fdd19732c0a98188b0b53709510ea65eb9a777..5b3796a1ffd5fc08fe20f3ab9aeace77d917fc2c 100644
--- a/assets/sass/_theme/design-system/table.sass
+++ b/assets/sass/_theme/design-system/table.sass
@@ -7,24 +7,21 @@ table
     empty-cells: hide
     caption
         @include meta
-        padding: $spacing0 0
+        padding: $spacing-2 0
         text-align: left
     th,
     td
-        padding-top: $spacing0
-        padding-bottom: $spacing0
-        padding-right: $spacing0
-        @include in-page-with-sidebar
-            padding-top: calc(#{$spacing0} / 2)
-            padding-bottom: calc(#{$spacing0} / 2)
+        padding-top: $spacing-2
+        padding-bottom: $spacing-2
+        padding-right: $spacing-2
+        @include media-breakpoint-down(desktop)
+            min-width: 15ch
 
     thead
         @include h4
         font-size: $table-head-font-size
         @include media-breakpoint-up(desktop)
             font-size: $table-head-font-size-desktop
-        th
-            text-align: left
 
     tbody
         font-size: $table-body-size
@@ -32,18 +29,13 @@ table
             font-size: $table-body-size-desktop
         td,
         th
-            border-top: 1px solid $color-border
+            border-top: 1px solid var(--color-border)
             &:empty
                 border-top: none
 
 .table-responsive
     overflow-x: auto
-    margin-left: half(-$grid-gutter-sm)
-    margin-right: half(-$grid-gutter-sm)
-    padding-left: half($grid-gutter-sm)
-    padding-right: half($grid-gutter-sm)
-    @include media-breakpoint-up(desktop)
-        margin-left: half(-$grid-gutter)
-        margin-right: half(-$grid-gutter)
-        padding-left: half($grid-gutter)
-        padding-right: half($grid-gutter)
\ No newline at end of file
+    margin-left: var(--grid-gutter-negative)
+    margin-right: var(--grid-gutter-negative)
+    padding-left: var(--grid-gutter)
+    padding-right: var(--grid-gutter)
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/table_of_contents.sass b/assets/sass/_theme/design-system/table_of_contents.sass
index 0e7d1746f0da1b9d126bbdf61f39efd66dd8bb08..3082a0a96e1c2818a738c1aa12abb942b005738d 100644
--- a/assets/sass/_theme/design-system/table_of_contents.sass
+++ b/assets/sass/_theme/design-system/table_of_contents.sass
@@ -6,12 +6,12 @@
     right: 0
     bottom: 0
     margin-top: 0
-    z-index: $zindex-toc
-    width: calc(#{col-outside-container(4)} + #{$grid-gutter} * 2)
+    z-index: $zindex-toc-offcanvas
+    width: calc(#{columns(4)} + var(--grid-gutter) * 2)
     transform: translateX(100%)
     transition: var(--toc-transition-duration) transform ease-in-out
     @include media-breakpoint-down(desktop)
-        width: calc(100% - #{$grid-gutter})
+        width: calc(100% - var(--grid-gutter))
     &.is-opened
         transform: translateX(0)
     &[aria-hidden="true"]
@@ -21,13 +21,13 @@
         flex-direction: column
         height: 100%
     .toc-title
-        border-bottom: 1px solid $color-border
+        border-bottom: 1px solid var(--color-border)
         font-size: $toc-title-font-size
-        padding: $spacing0 $spacing1
+        padding: $spacing-2 $spacing-3
         @include media-breakpoint-up(desktop)
             font-size: $toc-title-font-size-desktop
-            padding: $header-nav-padding-y $grid-gutter calc(#{$header-nav-padding-y} + 1px)
-            padding: calc((var(--header-height)) / 2 - #{$body-size}) $grid-gutter
+            padding: $header-nav-padding-y var(--grid-gutter) calc(#{$header-nav-padding-y} + 1px)
+            padding: calc((var(--header-height)) / 2 - #{$body-size}) var(--grid-gutter)
             padding-top: 0
             padding-bottom: 0
             line-height: calc(var(--header-height) - 1px)
@@ -39,9 +39,9 @@
         max-height: 100%
         > ol
             flex: 1
-            padding: $spacing1
+            padding: $spacing-3
             @include media-breakpoint-up(desktop)
-                padding: $spacing1 $grid-gutter
+                padding: $spacing-3 var(--grid-gutter)
             > li:first-child
                 margin-top: 0
     button
@@ -49,10 +49,10 @@
         @include icon-block(close, after)
             margin-right: -14px
         align-items: center
-        border-top: 1px solid $color-border
+        border-top: 1px solid var(--color-border)
         display: flex
         justify-content: space-between
-        padding: 0 $spacing1
+        padding: 0 $spacing-3
         line-height: $body-line-height
         @include media-breakpoint-up(desktop)
             border-top: 0
@@ -62,9 +62,9 @@
             padding-top: 0
             padding-bottom: 0
             line-height: var(--header-height)
-            right: $grid-gutter
+            right: var(--grid-gutter)
             &::after
-                margin-left: $spacing0
+                margin-left: $spacing-2
 
 .toc-cta
     display: flex
@@ -73,9 +73,9 @@
         display: none
     @include media-breakpoint-up(desktop)
         @include container
-        background: $color-background
+        background: var(--color-background)
         justify-content: end
-        margin-bottom: $spacing3
+        margin-bottom: $spacing-5
         position: sticky
         text-align: right
         top: calc(var(--header-height) * -1)
@@ -86,16 +86,16 @@
         body.offcanvas-toc &
             display: flex
     @include media-breakpoint-down(desktop)
-        border-top: 1px solid $color-border
+        border-top: 1px solid var(--color-border)
         position: fixed
         bottom: 0
         background: $toc-background-color
         left: 0
         width: 100%
-        padding: 0 half($grid-gutter-sm)
+        padding: 0 var(--grid-gutter)
         z-index: $zindex-toc-cta
     button
-        @include button-icon(toc)
+        @include link-icon(toc)
         border: 0
         line-height: inherit
         cursor: pointer
@@ -123,24 +123,25 @@
 
     // Only desktop and in page with sidebar
     @include in-page-with-sidebar
-        @include container-margin-left
+        margin-left: grid-external-space()
         pointer-events: none
         top: 0
         left: 0
         margin-top: 0
         height: 100%
         position: absolute
-        width: col-outside-container(4)
+        width: columns(4)
+        z-index: $zindex-toc
         .toc-content
             overflow-y: auto
             max-height: calc(100vh - var(--header-height))
-            padding-bottom: $spacing2
+            padding-bottom: $spacing-4
             pointer-events: auto
-            @include sticky($spacing1)
+            @include sticky($spacing-3)
             html.is-scrolling-down &
-                max-height: calc(100vh - #{$spacing1})
+                max-height: calc(100vh - #{$spacing-3})
         .toc-title
-            color: $color-text-alt
+            color: var(--color-text-alt)
         button
             display: none
 
@@ -184,9 +185,7 @@
             a
                 color: $toc-color
                 display: block
-                text-decoration-color: transparent
-                &:hover
-                    text-decoration-color: $toc-color
+                @extend %underline-on-hover
         .active
             color: $toc-active-color
             pointer-events: none
diff --git a/assets/sass/_theme/design-system/top.sass b/assets/sass/_theme/design-system/top.sass
index 574e1cc322c663e41f3b9500fa430d617a03cfc0..82e22fa0fc77871dff4f4e042bc6bfa8bb0f382a 100644
--- a/assets/sass/_theme/design-system/top.sass
+++ b/assets/sass/_theme/design-system/top.sass
@@ -1,21 +1,8 @@
-/* TODO à renomer */
 .top
-    // align-items: baseline
-    // display: flex
-    // flex-wrap: wrap
-    // justify-content: space-between
-    margin-bottom: calc(#{$spacing1} + #{$spacing0})
+    margin-bottom: calc(#{$spacing-3} + #{$spacing-2})
     position: relative
     h2, p
         margin-bottom: 0
-    // h2
-    //     a
-    //         @include stretched-link
-    // div
-    //     margin-top: px2rem(5)
-    //     p
-    //         @include media-breakpoint-up(lg)
-    //             width: col(8)
     .link
         @extend .link-more
 
diff --git a/assets/sass/_theme/design-system/transcription.sass b/assets/sass/_theme/design-system/transcription.sass
index b6137c3de18838373db412b7890c62c1592f1cc6..eba07683e32588e77a68d2c269d45895971247da 100644
--- a/assets/sass/_theme/design-system/transcription.sass
+++ b/assets/sass/_theme/design-system/transcription.sass
@@ -1,2 +1,2 @@
 .transcription
-    margin-top: $spacing1
+    margin-top: $spacing-3
diff --git a/assets/sass/_theme/design-system/typography.sass b/assets/sass/_theme/design-system/typography.sass
index 058348065720011af57f825b5e7c4f2172d3f0af..6b1f3ca4260327fdabb648c2831016e8beec507a 100644
--- a/assets/sass/_theme/design-system/typography.sass
+++ b/assets/sass/_theme/design-system/typography.sass
@@ -4,12 +4,10 @@ body
     font-family: $body-font-family
     -moz-osx-font-smoothing: grayscale
     -webkit-font-smoothing: antialiased
-    font-size: $body-size
+    font-size: var(--body-size)
+    line-height: var(--body-line-height)
     font-variant-ligatures: common-ligatures
     text-rendering: optimizelegibility
-    line-height: $body-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $body-size-desktop
 
 // Experimental, not implemented yet
 // https://github.com/jantimon/text-box-trim-examples
@@ -25,60 +23,51 @@ h1, h2, h3, h4, h5, h6
 
 @mixin h1
     font-family: $h1-font-family
-    font-size: $h1-size
+    font-size: var(--h1-size)
     font-weight: $h1-weight
-    line-height: $h1-line-height
+    line-height: var(--h1-line-height)
     text-transform: $h1-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h1-size-desktop
 
 h1, .h1
     @include h1
 
 @mixin h2
     font-family: $h2-font-family
-    font-size: $h2-size
+    font-size: var(--h2-size)
     font-weight: $h2-weight
-    line-height: $h2-line-height
+    line-height: var(--h2-line-height)
     text-transform: $h2-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h2-size-desktop
 
 h2, .h2
     @include h2
 
 @mixin h3
     font-family: $h3-font-family
-    font-size: $h3-size
+    font-size: var(--h3-size)
     font-weight: $h3-weight
-    line-height: $h3-line-height
+    line-height: var(--h3-line-height)
     text-transform: $h3-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h3-size-desktop
 
 h3, .h3
     @include h3
 
 @mixin h4
     font-family: $h4-font-family
-    font-size: $h4-size
+    font-size: var(--h4-size)
     font-weight: $h4-weight
-    line-height: $h4-line-height
+    line-height: var(--h4-line-height)
     text-transform: $h4-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h4-size-desktop
 
 h4, .h4
     @include h4
 
 @mixin h5
     font-family: $h5-font-family
-    font-size: $h5-size
+    font-size: var(--h5-size)
     font-weight: $h5-weight
-    line-height: $h5-line-height
+    line-height: var(--h5-line-height)
     text-transform: $h5-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h5-size-desktop
+    // Todo : check that
     a
         text-decoration: none
 
@@ -87,12 +76,10 @@ h5, .h5
 
 @mixin h6
     font-family: $h6-font-family
-    font-size: $h6-size
+    font-size: var(--h6-size)
     font-weight: $h6-weight
-    line-height: $h6-line-height
+    line-height: var(--h6-line-height)
     text-transform: $h6-text-transform
-    @include media-breakpoint-up(desktop)
-        font-size: $h6-size-desktop
 
 h6, .h6
     @include h6
@@ -100,42 +87,33 @@ h6, .h6
 h1, .h1,
 h2, .h2
     a
-        text-decoration-color: transparent
-        &:hover
-            text-decoration-color: inherit
+        @extend %underline-on-hover
 
 @mixin lead($handle-sidebar: true)
     font-family: $lead-font-family
-    font-size: $lead-size
+    font-size: var(--lead-size)
     font-weight: $lead-weight
-    line-height: $lead-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $lead-size-desktop
+    line-height: var(--lead-line-height)
     @if $handle-sidebar
         @include in-page-with-sidebar
             font-family: $lead-sidebar-font-family
-            font-size: $lead-sidebar-size-desktop
+            font-size: var(--lead-sidebar-size)
             font-weight: $lead-sidebar-weight
-            line-height: $lead-sidebar-line-height
+            line-height: var(--lead-sidebar-line-height)
 
 .lead
     @include lead
 
 @mixin lead-hero
     font-family: $lead-hero-font-family
-    font-size: $lead-hero-size
+    font-size: var(--lead-hero-size)
     font-weight: $lead-hero-weight
-    line-height: $lead-hero-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $lead-hero-size-desktop
-
+    line-height: var(--lead-hero-line-height)
 
 @mixin body-text
     font-family: $body-font-family
-    font-size: $body-size
-    line-height: $body-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $body-size-desktop
+    font-size: var(--body-size)
+    line-height: var(--body-line-height)
 
 .p,
 .li
@@ -143,54 +121,45 @@ h2, .h2
 
 @mixin meta
     font-family: $meta-font-family
-    font-size: $meta-size
+    font-size: var(--meta-size)
     font-weight: $meta-weight
-    line-height: $meta-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $meta-size-desktop
+    line-height: var(--meta-line-height)
 
 .meta
     @include meta
 
 @mixin signature
     font-family: $signature-font-family
-    font-size: $signature-size
+    font-size: var(--signature-size)
     font-weight: $signature-weight
-    line-height: $signature-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $signature-size-desktop
+    line-height: var(--signature-line-height)
 
 .signature
     @include signature
 
 @mixin small
     font-family: $small-font-family
-    font-size: $small-size
+    font-size: var(--small-size)
     font-weight: $small-weight
-    line-height: $small-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $small-size-desktop
+    line-height: var(--small-line-height)
 
 small, .small
     @include small
 
-@mixin rich-text
-    word-break: break-word
-    h1, h2, h3, h4, h5, h6, p, ul
-        margin-top: $spacing1
-        &:first-child, meta + &
-            margin-top: 0
-
 %multiple-lists
     ul, ol
         ul, ol
-            padding-left: $spacing0
+            padding-left: $spacing-2
             @include media-breakpoint-up(desktop)
-                padding-left: $spacing1
+                padding-left: $spacing-3
 
 .rich-text
-    @include rich-text
+    word-break: break-word
     @extend %multiple-lists
+    h1, h2, h3, h4, h5, h6, p, ul
+        margin-top: $spacing-3
+        &:first-child, meta + &
+            margin-top: 0
 
 .content
     section 
@@ -204,19 +173,17 @@ small, .small
     line-height: inherit
 
 [itemprop="articleBody"]
-    @include rich-text
+    @extend .rich-text
 
 @mixin blockquote
     margin: 0
     font-family: $quote-font-family
-    font-size: $quote-size
+    font-size: var(--quote-size)
     font-weight: $quote-weight
     font-style: $quote-style
-    line-height: $quote-line-height
-    @include media-breakpoint-up(desktop)
-        font-size: $quote-size-desktop-long
+    line-height: var(--quote-line-height)
     cite
-        font-size: px2rem(18)
+        font-size: pxToRem(18)
         font-style: normal
 
 blockquote, .blockquote
@@ -227,10 +194,9 @@ p
     margin-top: 0
     margin-bottom: 0
     + p
-        margin-top: $spacing0
-
-p:empty
-    display: none
+        margin-top: $spacing-2
+    &:empty
+        display: none
 
 p + ul,
 p + ol
@@ -256,32 +222,6 @@ a,
     &.glightbox
         text-decoration: none
 
-@mixin btn
-    font-size: $btn-font-size
-    padding: $btn-padding-y $btn-padding-x
-    text-decoration: none
-    display: inline-block
-    border-radius: $btn-border-radius
-    @include media-breakpoint-up(desktop)
-        font-size: $btn-font-size-desktop
-        padding: $btn-padding-y-desktop $btn-padding-x-desktop
-
-.btn
-    @include btn
-
-.link-btn
-    @include btn
-    border: $btn-border
-    @include media-breakpoint-up(desktop)
-        padding: $spacing0
-    &[target="_blank"]:not(.icon)
-        display: flex
-        justify-content: space-between
-        align-items: center
-        @include icon-block(link-blank-block, after)
-    &:hover
-        background: $btn-hover-background
-
 .chip
     @include meta
     background: $chip-background
@@ -298,8 +238,16 @@ a,
     @include link
     @include icon(arrow, before)
     &::before
-        font-size: px2rem(10)
-        margin-right: px2rem(5)
+        font-size: pxToRem(10)
+        margin-right: pxToRem(5)
+
+%underline-on-hover
+    text-decoration-color: transparent
+    text-decoration-thickness: $link-underline-thickness
+    text-underline-offset: $link-underline-offset
+    transition: $link-transition
+    &:hover
+        text-decoration-color: currentColor
 
 dd
     margin-bottom: 0.5rem
@@ -310,20 +258,19 @@ abbr, abbr[title]
     text-decoration-style: dotted
 
 ::selection
-    background: rgba($color-text, .7)
-    color: $color-background
-    text-shadow: none
+    background: var(--color-selection-background)
+    color: var(--color-selection)
 
 sub,
 sup
     font-size: 60%
-    margin-left: px2rem(2)
+    margin-left: pxToRem(2)
 
 [data-click-to-copy]
     cursor: pointer
     text-decoration: none
     @include icon(copy-inline, after)
-        margin-left: $spacing0
+        margin-left: $spacing-2
         vertical-align: text-top
     &.is-copied
         @include icon(check-inline, after)
@@ -354,5 +301,5 @@ sup
     .btn-#{$name}
         @include icon($name)
         &::before
-            margin-inline-end: px2rem(5)
+            margin-inline-end: pxToRem(5)
 
diff --git a/assets/sass/_theme/hugo-osuny.sass b/assets/sass/_theme/hugo-osuny.sass
index 216dc1a36961d8272f38687b9b0b7dc3b4df5d6a..c99d5465e5a26f6f80347faf510480321c234dff 100644
--- a/assets/sass/_theme/hugo-osuny.sass
+++ b/assets/sass/_theme/hugo-osuny.sass
@@ -1,80 +1,86 @@
 // Settings
-@import "utils"
-@import "configuration"
+@import utils
+@import configuration
 
 // Dependencies and tweaks of dependencies
-@import "dependencies/normalize"
-@import "dependencies/bootstrap-breakpoints"
+@import dependencies/normalize
+@import dependencies/bootstrap-breakpoints
+
+@import variables
 
 // Keep on top
-@import "design-system/typography"
+@import design-system/typography
 
 // Vendors
-@import "glightbox/dist/css/glightbox"
-@import "@splidejs/splide/dist/css/splide-core.min"
-@import "dependencies/glightbox"
-@import "dependencies/splide"
+@import glightbox/dist/css/glightbox
+@import @splidejs/splide/dist/css/splide-core.min
+@import dependencies/glightbox
+@import dependencies/splide
 
 // Design System
-@import "design-system/layout"
-@import "design-system/a11y"
-@import "design-system/backlinks"
-@import "design-system/breadcrumb"
-@import "design-system/button"
-@import "design-system/contacts"
-@import "design-system/footer"
-@import "design-system/form"
-@import "design-system/header"
-@import "design-system/hero"
-@import "design-system/image"
-@import "design-system/pagination"
-@import "design-system/nav"
-@import "design-system/search"
-@import "design-system/table"
-@import "design-system/table_of_contents"
-@import "design-system/top"
+@import design-system/layout
+@import design-system/a11y
+@import design-system/backlinks
+@import design-system/breadcrumb
+@import design-system/button
+@import design-system/contacts
+@import design-system/footer
+@import design-system/form
+@import design-system/header
+@import design-system/hero
+@import design-system/image
+@import design-system/logo
+@import design-system/nav
+@import design-system/pagination
+@import design-system/search
+@import design-system/table
+@import design-system/table_of_contents
+@import design-system/top
 
 // Blocks
-@import "blocks/base"
-@import "blocks/agenda"
-@import "blocks/datatable"
-@import "blocks/call_to_action"
-@import "blocks/chapter"
-@import "blocks/contact"
-@import "blocks/definitions"
-@import "blocks/embed"
-@import "blocks/features"
-@import "blocks/files"
-@import "blocks/gallery"
-@import "blocks/image"
-@import "blocks/key_figures"
-@import "blocks/license"
-@import "blocks/organizations"
-@import "blocks/pages"
-@import "blocks/persons"
-@import "blocks/posts"
-@import "blocks/programs"
-@import "blocks/sitemap"
-@import "blocks/sound"
-@import "blocks/summary"
-@import "blocks/testimonials"
-@import "blocks/timeline"
-@import "blocks/video"
+@import blocks/base
+@import blocks/agenda
+@import blocks/datatable
+@import blocks/call_to_action
+@import blocks/chapter
+@import blocks/contact
+@import blocks/definitions
+@import blocks/embed
+@import blocks/features
+@import blocks/files
+@import blocks/gallery
+@import blocks/image
+@import blocks/key_figures
+@import blocks/license
+@import blocks/organizations
+@import blocks/pages
+@import blocks/persons
+@import blocks/posts
+@import blocks/projects
+@import blocks/programs
+@import blocks/sitemap
+@import blocks/sound
+@import blocks/summary
+@import blocks/testimonials
+@import blocks/timeline
+@import blocks/video
 
 // Sections
-@import "sections/administrators"
-@import "sections/authors"
-@import "sections/categories"
-@import "sections/diplomas"
-@import "sections/events"
-@import "sections/organizations"
-@import "sections/pages"
-@import "sections/papers"
-@import "sections/persons"
-@import "sections/posts"
-@import "sections/programs"
-@import "sections/publications"
-@import "sections/researchers"
-@import "sections/sitemap"
-@import "sections/teachers"
-@import "sections/volumes"
+@import sections/administrators
+@import sections/authors
+@import sections/categories
+@import sections/diplomas
+@import sections/events
+@import sections/locations
+@import sections/organizations
+@import sections/pages
+@import sections/papers
+@import sections/persons
+@import sections/posts
+@import sections/projects
+@import sections/programs
+@import sections/publications
+@import sections/researchers
+@import sections/sitemap
+@import sections/teachers
+@import sections/volumes
diff --git a/assets/sass/_theme/sections/categories.sass b/assets/sass/_theme/sections/categories.sass
index ecfa96bd6ae8d155337100543c0fa050087f3e9b..4b15a928da24a517784e01b700c65787d6d73b7e 100644
--- a/assets/sass/_theme/sections/categories.sass
+++ b/assets/sass/_theme/sections/categories.sass
@@ -10,10 +10,10 @@ ul.categories
         @include list-reset
         display: flex
         flex-direction: column
-        gap-y: $spacing1
+        gap-y: $spacing-3
         @include grid(3, md)
         @include grid(4, xxl)
 
 .posts_categories__term, .events_categories__term
     main
-        padding-bottom: $spacing3
+        padding-bottom: $spacing-5
diff --git a/assets/sass/_theme/sections/diplomas.sass b/assets/sass/_theme/sections/diplomas.sass
index 67b54c24234bc8aa2bbce2dfe42e097f5550707a..6e7e4c7175b89b4eea7eb8499c82a8d835c3dbd6 100644
--- a/assets/sass/_theme/sections/diplomas.sass
+++ b/assets/sass/_theme/sections/diplomas.sass
@@ -1,65 +1,65 @@
 ul.diplomas
     @include list-reset
     > li
-        margin-bottom: $spacing0
+        margin-bottom: $spacing-2
         @include media-breakpoint-up(desktop)
-            margin-bottom: $spacing3
+            margin-bottom: $spacing-5
         > a
             @include h2
             display: block
             text-decoration: none
-            padding-bottom: $spacing1
-            padding-top: $spacing1
-            border-bottom: 1px solid $color-border
+            padding-bottom: $spacing-3
+            padding-top: $spacing-3
+            border-bottom: 1px solid var(--color-border)
             @include icon(arrow-right, after)
                 align-self: center
                 margin-left: auto
             &:hover
-                color: $color-accent
+                color: var(--color-accent)
             @include media-breakpoint-down(desktop)
                 position: relative
-                padding-right: $spacing1
+                padding-right: $spacing-3
                 &::after
                     position: absolute
-                    bottom: $spacing1
+                    bottom: $spacing-3
                     right: 0
             @include media-breakpoint-up(desktop)
                 display: flex
                 align-items: baseline
                 span
-                    margin-left: $spacing1
-                
+                    margin-left: $spacing-3
+
         .content
             @include grid(2, desktop)
-            padding-bottom: $spacing1
-            padding-top: $spacing1
+            padding-bottom: $spacing-3
+            padding-top: $spacing-3
 
         .programs
             @include media-breakpoint-down(desktop)
-                margin-top: $spacing1
+                margin-top: $spacing-3
             li
                 display: block
                 border-bottom: 0
                 padding: 0
                 + li, > ol
-                    margin-top: $spacing0
+                    margin-top: $spacing-2
                     @include media-breakpoint-up(sm) 
-                        margin-top: $spacing1
+                        margin-top: $spacing-3
                 a:hover
-                    color: $color-accent
+                    color: var(--color-accent)
                 ol li a   
                     @include inherit-text
                     @include icon(list-hyphen, before)
                         margin-left: 1px
-                        margin-right: half($spacing0)
+                        margin-right: $spacing-1
                         margin-top: 6px
                         @include media-breakpoint-up(sm)
-                            margin-right: $spacing0
+                            margin-right: $spacing-2
                         @include media-breakpoint-up(md)
                             margin-top: 8px
                     display: flex
                     ol
-                        margin-left: $spacing1
+                        margin-left: $spacing-3
             > li a 
                 @include h3
                         
@@ -68,7 +68,7 @@ ul.diplomas
                 @include media-breakpoint-up(desktop)
                     display: flex
                     > p
-                        width: col(6)
+                        width: columns(6)
             .title
                 @include h4
 
@@ -81,83 +81,91 @@ ul.diplomas
         @include icon(caret, after)
             margin-left: 5px
     .dropdown-menu
-        @include inset(calc(100% + #{$spacing0}), 0, auto, auto)
-        background-color: $color-background-alt
+        @include inset(calc(100% + #{$spacing-2}), 0, auto, auto)
+        background-color: var(--color-background-alt)
         display: none
         position: absolute
         z-index: 2
         @include media-breakpoint-down(desktop)
-            right: half(-$grid-gutter-sm)
-            left: half(-$grid-gutter-sm)
+            right: var(--grid-gutter-negative)
+            left: var(--grid-gutter-negative)
         &,
         a
             color: black
         a
-            
             display: block
             font-size: $body-size
-            padding: $spacing1
+            padding: $spacing-3
             text-decoration: none
             white-space: normal
             @include media-breakpoint-down(desktop)
-                padding: $spacing0 $spacing1
+                padding: $spacing-2 $spacing-3
             &:not(:first-child)
-                border-top: 1px solid $color-border
+                border-top: 1px solid var(--color-border)
             &:hover
-                background-color: $color-accent
+                background-color: var(--color-accent)
                 color: white
 
-    button[aria-expanded="true"] 
+    button[aria-expanded="true"]
         @include icon('caret-top', 'after')
         + .dropdown-menu
             display: block
 
 .essential-container
-    .container
+    margin-top: $spacing-5
+    .buttons
+        @include meta
+        display: flex
+        flex-wrap: wrap
+        .dropdown-share
+            button
+                @extend .button
+                @include button-icon(social-inline)
+        a[download]
+            @extend .button-alt
+            @include button-icon(download-inline)
         @include media-breakpoint-down(sm)
-            .buttons > *
-                width: col(8)
+            button, > a
+                width: 100%
         @include media-breakpoint-down(md)
-            .buttons
-                display: flex
-                gap: $spacing1
-                flex-wrap: wrap
-                > *
-                    min-width: 150px
-                    width: col(7)
+            --btn-min-width: #{pxToRem(140)}
+            gap: $spacing-3
+            flex-direction: row
+            button, > a
+                width: columns(6)
         @include media-breakpoint-up(md)
-            @include grid(2, md)
-            align-items: flex-end
-            .buttons
-                align-items: end
-                display: flex
-                flex-direction: column
-                gap: $spacing1
-                justify-content: flex-end
-                > *
-                    min-width: 200px
-                    width: col(2, 6)
-            
+            flex-direction: column
+            gap: $spacing-3
+            --btn-min-width: #{columns(2)}
+            button, > a
+                width: pxToRem(200)
+        @include media-breakpoint-down(desktop)
+            margin-top: $spacing-3
+    .container
+        @include media-breakpoint-up(md)
+            display: flex
+            justify-content: space-between
     .essential
+        @include meta
         color: $header-color
         flex-wrap: wrap
         font-size: $program-essential-font-size
         margin-bottom: 0
-        margin-top: $spacing3
-        @include meta
+        margin-top: 0
         @include media-breakpoint-up(desktop)
             @include grid(6, false, 0)
+            width: columns(6)
             font-size: $program-essential-font-size-desktop
         dt,
         dd
             margin: 0
-            padding-bottom: $spacing0
-            padding-top: $spacing0
+            padding-bottom: $spacing-2
+            padding-top: $spacing-2
             &:last-of-type
                 padding-bottom: 0
         dt
             grid-column: 1/3
-            color: $color-text-alt
+            color: var(--color-text-alt)
             @include media-breakpoint-down(desktop)
                 padding-bottom: 0
         dd
@@ -177,11 +185,11 @@ ul.diplomas
                 @include stretched-link(before)
                 position: initial
                 @include media-breakpoint-down(desktop)
-                    margin-right: $spacing0
+                    margin-right: $spacing-2
                     &::after
                         align-self: center
                         bottom: unset
                         position: relative
-                        margin-left: half($spacing0)
+                        margin-left: $spacing-1
                     + p
-                        margin-top: $spacing0
\ No newline at end of file
+                        margin-top: $spacing-2
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/events.sass b/assets/sass/_theme/sections/events.sass
index ba00c16d443cde276c11121845f1debb45b206c2..95dc596c4c112238cb5c59e997515f8b274f1967 100644
--- a/assets/sass/_theme/sections/events.sass
+++ b/assets/sass/_theme/sections/events.sass
@@ -2,7 +2,7 @@
     .hero
         h1 span
             display: block
-            color: $color-text-alt
+            color: var(--color-text-alt)
     .lead
         @include h3
         // Safe spacing if post is empty
@@ -27,7 +27,7 @@
         text-decoration: none
     @include media-breakpoint-down(desktop)
         .events
-            margin-bottom: $spacing2
+            margin-bottom: $spacing-4
         .archive-link
             text-align: left
 
@@ -35,18 +35,18 @@
     @include list-reset
     @include media-breakpoint-up(desktop)
         font-size: $table-body-size-desktop
-        padding-bottom: $spacing3
+        padding-bottom: $spacing-5
     .event-date
         text-transform: capitalize
     ul
         @include list-reset
     > li
-        padding-top: $spacing0
+        padding-top: $spacing-2
         &:not(:last-child)
-            padding-bottom: $spacing0
+            padding-bottom: $spacing-2
         > span
             @include meta
-            color: $color-text-alt
+            color: var(--color-text-alt)
             padding-left: 0
             display: block
             white-space: nowrap
@@ -56,9 +56,9 @@
                 padding-right: 0.3rem
     .events-categories
         display: flex
-        gap: space(2)
+        gap: $spacing-1
         a
-            @include link($color-accent)
+            @include link(var(--color-accent))
     .events-actions
         align-items: start
         display: flex
@@ -79,10 +79,10 @@
         text-decoration: none
     &-subtitle
         @include h3
-        color: $color-text-alt
+        color: var(--color-text-alt)
     &-categories
         @include meta
-        margin-top: $spacing0
+        margin-top: $spacing-2
         span + span
             &::before
                 content: ', '
@@ -99,15 +99,15 @@
             display: inline-flex
             &::before
                 content: '|'
-                margin-right: half($spacing0)
+                margin-right: $spacing-1
 .events
     &--list
         .event
-            border-bottom: 1px solid $color-border
+            border-bottom: 1px solid var(--color-border)
             display: flex
             flex-direction: column
-            margin-bottom: $spacing1
-            padding-bottom: $spacing1
+            margin-bottom: $spacing-3
+            padding-bottom: $spacing-3
             position: relative
             .event-title
                 @include h3
@@ -116,23 +116,23 @@
                     text-decoration: none
             &-dates
                 @include h4
-                margin-top: half($spacing0)
-                margin-bottom: half($spacing1)
+                margin-top: $spacing-1
+                margin-bottom: $spacing-2
             &-content
                 order: 2
             @include media-breakpoint-down(desktop)
                 @include media-breakpoint-up(md)
                     flex-direction: row
-                    gap: $spacing1
+                    gap: $spacing-3
                     .media
-                        width: col(4)
+                        width: columns(4)
                     &-content
                         order: 1
-                        width: col(8)
+                        width: columns(8)
             @include media-breakpoint-down(md)
                 .media
                     max-width: 33%
-                    margin-bottom: $spacing0
+                    margin-bottom: $spacing-2
                 &-content
                     order: 1
             @include media-breakpoint-up(md)
@@ -140,24 +140,25 @@
                     grid-column: 10 / 13
             @include media-breakpoint-up(desktop)
                 flex-direction: row
-                gap: $grid-gutter
+                gap: var(--grid-gutter)
                 align-items: start
                 &-content
-                    width: col(10)
                     > hgroup, > .event-title
-                        margin-bottom: $spacing0
+                        margin-bottom: $spacing-2
                 .media
                     order: 2
             @include in-page-without-sidebar
+                &-content
+                    width: columns(10)
                 &-dates
                     margin-top: 0
                     order: 0
                     grid-column: 1 / 5
                     > span
                         @include h3
-                        margin-bottom: $spacing1
+                        margin-bottom: $spacing-3
                 &-time
-                    margin-top: $spacing0
+                    margin-top: $spacing-2
                     @include meta
                 &-content
                     @include grid(10, desktop, 0)
@@ -169,13 +170,13 @@
                         grid-column: 0 / 5
                         grid-row: 1 / 4
                 .media
-                    width: col(2)
+                    width: columns(2)
             @include in-page-with-sidebar
                 @include grid(8)
                 &-content
                     order: 1
                     grid-column: 6 span
-                    margin-top: half($spacing0)
+                    margin-top: $spacing-1
                 &-time
                     display: inline
                     &::before
@@ -184,7 +185,7 @@
                     grid-column: 2 span
 
     &--grid
-        @include grid(2, md, $spacing2)
+        @include grid(2, md, $spacing-4)
         .event
             display: flex
             flex-direction: column
@@ -194,14 +195,14 @@
                     @include stretched-link
             &-dates
                 @include meta
-                margin-top: $spacing0
+                margin-top: $spacing-2
             &-content
                 .event-title, hgroup
                     @include h3
             &-description
-                margin-top: $spacing0
+                margin-top: $spacing-2
             .media
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
                 order: -1
                 img
                     aspect-ratio: 1
@@ -210,7 +211,7 @@
         @include media-breakpoint-down(md)
             .event
                 + .event
-                    margin-top: $spacing2
+                    margin-top: $spacing-4
         @include in-page-without-sidebar
             @include grid(3, desktop)
 
@@ -219,24 +220,30 @@
             display: flex
             flex-direction: row
             position: relative
-            grid-gap: $grid-gutter
+            gap: var(--grid-gutter)
             + .event 
-                margin-top: $grid-gutter
+                margin-top: var(--grid-gutter)
             &-content
+                display: flex
+                flex-direction: column
+                .event-description
+                    order: 2
+                .event-description + .event-categories
+                    margin-bottom: $spacing-2
                 a 
                     @include stretched-link
             &-dates 
                 @include meta
-                margin-top: $spacing0
+                margin-top: $spacing-2
             &-content
                 flex: 1
                 .event-title
                     @include h3
                 .more
                     @include icon("arrow-right", after)
-                    margin-top: $spacing1
+                    margin-top: $spacing-3
                     &::after
-                        margin-left: half($spacing0)
+                        margin-left: $spacing-1
             .media
                 order: -1
                 img
@@ -245,27 +252,29 @@
                     width: 100%
             @include media-breakpoint-up(desktop)
                 .media
-                    width: col(4, 8)
-                &-dates
+                    width: columns(4)
+                .event-dates
                     @include h3
-                    margin-bottom: $spacing2
+                    margin-bottom: $spacing-4
                 .event-title,
                 .event-subtitle, 
                 hgroup
                     @include h2
             @include media-breakpoint-down(desktop)
                 flex-direction: column
-                grid-gap: 0
                 .media
-                    margin-left: calc(-#{$grid-gutter-sm} /2)
-                    margin-right: calc(-#{$grid-gutter-sm} /2)
-                    aspect-ratio: 1
-                    img 
-                        margin-bottom: $spacing0
+                    margin-left: var(--grid-gutter-negative)
+                    margin-right: var(--grid-gutter-negative)
             @include in-page-without-sidebar
                 align-items: center
-                &-dates
+                .event-dates
                     @include h3
+                .event-title,
+                .event-subtitle, 
+                hgroup
+                    @include lead
+                .media
+                    width: columns(6)
                 &:not(.event--with-image)
-                    width: col(5)
+                    width: columns(5)
                     margin-left: offset(4)
diff --git a/assets/sass/_theme/sections/locations.sass b/assets/sass/_theme/sections/locations.sass
new file mode 100644
index 0000000000000000000000000000000000000000..a556be5fff50751699508aff0c7bb350e678e43b
--- /dev/null
+++ b/assets/sass/_theme/sections/locations.sass
@@ -0,0 +1,45 @@
+.locations
+    &--list
+        .location + .location
+            margin-top: $spacing-4
+        @include media-breakpoint-up(desktop)
+            .location
+                flex-direction: row
+                .media
+                    width: columns(4)
+                &-content
+                    width: columns(6)
+    &--grid
+        .location-title
+            @include h3
+        @include in-page-with-sidebar
+            @include grid(2)
+        @include in-page-without-sidebar
+            @include grid(4)
+
+.location
+    display: flex
+    gap: $spacing-3 var(--grid-gutter)
+    flex-direction: column
+    position: relative
+    a
+        @include stretched-link
+        text-decoration: none
+    .media
+        order: -1
+        aspect-ratio: 1.3
+        background: var(--color-background-alt)
+        img
+            display: block
+            width: 100%
+            height: 100%
+            object-fit: cover
+    &-title
+        @include icon(arrow, after, true)
+        @include hover-translate-icon(after)
+    &-description
+        margin-top: $spacing-3
+    @include media-breakpoint-down(desktop)
+        .media
+            margin-left: var(--grid-gutter-negative)
+            margin-right: var(--grid-gutter-negative)
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/organizations.sass b/assets/sass/_theme/sections/organizations.sass
index 45c1a85a14420c5cd6d3f268331301bd545c1e02..cfdf77b8b406f17d481558b6c7e95ff886491d0c 100644
--- a/assets/sass/_theme/sections/organizations.sass
+++ b/assets/sass/_theme/sections/organizations.sass
@@ -10,11 +10,11 @@
             display: block
     .media
         @include handle-svg-fit
-        background: $color-background-alt
-        margin-bottom: $spacing0
+        background: $organization-background-color
+        margin-bottom: $spacing-2
         order: -1
         overflow: hidden
-        padding: $spacing1
+        padding: $spacing-3
         picture
             aspect-ratio: 1
             display: block
@@ -42,32 +42,32 @@
         @include grid(3, lg)
         @include grid(3, xl)
     @include media-breakpoint-down(desktop)
-        grid-column-gap: $spacing1 !important
+        grid-column-gap: $spacing-3 !important
 
 .organizations__section
     .organizations
-        margin-top: $spacing2
+        margin-top: $spacing-4
 
 .organizations__page
     .lead
         font-family: $lead-sidebar-font-family
         font-weight: $lead-sidebar-weight
         line-height: $lead-sidebar-line-height
-        margin-bottom: $spacing1
+        margin-bottom: $spacing-3
         @include media-breakpoint-up(desktop)
             font-size: $lead-sidebar-size-desktop
     .document-content
-        .logo
+        .organization-logo
             figcaption
                 text-align: right
                 @include meta
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
             picture
                 aspect-ratio: 1/1
-                background: $color-background-alt
+                background: var(--color-background-alt)
                 display: block
-                padding: $spacing2
-                margin-bottom: half($spacing0)
+                padding: $spacing-4
+                margin-bottom: $spacing-1
                 width: auto
             img
                 display: block
@@ -76,13 +76,13 @@
                 object-position: center
                 width: 100%
         .blocks
-            margin-top: $spacing3
+            margin-top: $spacing-5
         .contacts-details
             @include grid(2, md)
     @include media-breakpoint-down(md)
         .document-content
-            .logo
-                margin-top: $spacing3
+            .organization-logo
+                margin-top: $spacing-5
                 display: flex
                 justify-content: space-between
     @include media-breakpoint-up(md)
@@ -90,8 +90,8 @@
             > .container
                 display: flex
                 justify-content: space-between
-                gap: $grid-gutter
+                gap: var(--grid-gutter)
             [itemprop="articleBody"]
-                width: col(8)
-            .logo
-                width: col(3)
+                width: columns(8)
+            .organization-logo
+                width: columns(3)
diff --git a/assets/sass/_theme/sections/pages.sass b/assets/sass/_theme/sections/pages.sass
index 05b8d65a1e459ea91615c7d60f7640ffb1ee8d8b..9d26b492e7326588da1f0dbebc2caf59097ca984 100644
--- a/assets/sass/_theme/sections/pages.sass
+++ b/assets/sass/_theme/sections/pages.sass
@@ -10,4 +10,4 @@
     @include grid(3, desktop)
 
 .page__children
-    margin-top: $spacing3
+    margin-top: $spacing-5
diff --git a/assets/sass/_theme/sections/papers.sass b/assets/sass/_theme/sections/papers.sass
index 9cbed0822fb597044d65044c06b3127522c2a7bc..bc05573a56345b90390064b824745270ef7634a5 100644
--- a/assets/sass/_theme/sections/papers.sass
+++ b/assets/sass/_theme/sections/papers.sass
@@ -1,102 +1,107 @@
 .paper
+    display: flex
+    gap: var(--grid-gutter)
+    flex-direction: column
     a
-        text-decoration-color: transparent
         transition: color 0.3s ease
-    > div
-        &:first-of-type
-            grid-column: 1 / 7
-        &.paper-actions
-            grid-column: 8 / 12
-            align-items: start
-            display: flex
-            @include media-breakpoint-down(desktop)
-                flex-wrap: wrap
-                justify-content: space-between
-                margin-top: $spacing1
+        @extend %underline-on-hover
     h3
         a:hover
-            color: $color-accent
+            color: var(--color-accent)
     .paper-kind
         @include meta
         text-transform: uppercase
-        margin-right: $spacing1
+        margin-right: $spacing-3
     .paper-volume
         @include meta
         text-transform: lowercase
         a
-            @include link($color-text)
+            @include link(var(--color-text))
             text-transform: none
         span
             text-transform: uppercase
 
+.top + .papers
+    margin-top: $spacing-3
+
 .papers
     @include list-reset
-    margin-block-start: half($spacing3)
+    margin-top: $spacing-5
     li
         + li
-            margin-top: $spacing2
+            margin-top: $spacing-4
             @include media-breakpoint-up(desktop)
-                margin-top: $spacing3
+                margin-top: $spacing-5
         article
-            @include media-breakpoint-up(desktop)
-                @include grid
             + article
-                margin-top: $spacing2
+                margin-top: $spacing-4
                 @include media-breakpoint-up(desktop)
-                    margin-top: $spacing3
+                    margin-top: $spacing-5
 
+.papers__section
+    .paper-actions
+        @include media-breakpoint-up(lg)
+            flex-direction: row
+            > div:first-of-type
+                width: columns(7)
+            .paper-actions
+                width: columns(5)
+                button[data-open-modal]
+                    width: columns(2)
+                figure
+                    width: columns(3)
 .papers__page
     @include media-breakpoint-down(desktop)
         .document-content
             aside
                 order: 2
-                margin-bottom: $spacing3
+                margin-bottom: $spacing-5
     @include media-breakpoint-up(desktop)
         .hero
             .content
-                > h1, > hgroup
+                .hero-text
                     width: auto
         .paper-sidebar
             > div
                 height: 100%
                 position: relative
             aside
-                padding-bottom: $spacing1
+                padding-bottom: $spacing-3
             .toc-container
                 height: unset
                 @include sticky(-1px)
             .media
-                width: col(2, 4)
+                width: columns(2)
     .document-content
         min-height: 100vh
         .content
-            margin-bottom: $spacing4
+            margin-bottom: $spacing-6
             section + section
-                margin-top: $spacing2
+                margin-top: $spacing-4
                 @include media-breakpoint-up(desktop)
-                    margin-top: $spacing4
+                    margin-top: $spacing-6
             .squared-button
                 margin-bottom: 0
-                margin-top: $spacing0
+                margin-top: $spacing-2
                 width: auto
             h2
-                margin-bottom: $spacing0
+                margin-bottom: $spacing-2
             .paper-essentials
                 h2
                     @include meta
-                    margin-top: $spacing2
+                    margin-top: $spacing-4
                     &:first-of-type
                         margin-top: 0
             .paper-body
                 h2
-                    margin-bottom: $spacing2
+                    margin-bottom: $spacing-4
             .paper-authors
                 h2
                     @include meta
                 .authors
                     @include grid(2, desktop)
                     article
-                        margin-top: $spacing1
+                        margin-top: $spacing-3
                         .name
                             a
                                 @include h4
@@ -107,9 +112,9 @@
                 margin: 0
                 dt
                     @include meta
-                    margin-bottom: $spacing0
+                    margin-bottom: $spacing-2
                     &:not(:first-of-type)
-                        margin-top: $spacing2
+                        margin-top: $spacing-4
                 dd:first-of-type
                     a
                         display: flex
@@ -142,18 +147,31 @@
                             padding-left: 0
                             padding-right: offset(4)
 
+// Actions
+.paper-actions
+    display: flex
+    align-items: start
+    gap: var(--grid-gutter)
+    @include media-breakpoint-down(desktop)
+        flex-wrap: wrap
+        gap: $spacing-3
+    button.squared-button
+        @include icon-block(eye, before)
+    a.squared-button
+        @include icon-block(download, before)
+
 .citations
     &:not(:first-child)
-        margin-top: $spacing3
+        margin-top: $spacing-5
     > div
-        margin-top: $spacing1
+        margin-top: $spacing-3
         @include grid(1)
-        @include grid(2, md, $spacing1)
+        @include grid(2, md, $spacing-3)
         @include media-breakpoint-down(md)
-            row-gap: $spacing1
+            row-gap: $spacing-3
     .citation
         a
             display: block
         p
             @include meta
-            margin-top: $spacing0
+            margin-top: $spacing-2
diff --git a/assets/sass/_theme/sections/persons.sass b/assets/sass/_theme/sections/persons.sass
index af4003d695c34b7bc1566bdf3ffe7d8d128ca581..f22c8ccad9e9ea684b4867536b1589b4fc6a2adf 100644
--- a/assets/sass/_theme/sections/persons.sass
+++ b/assets/sass/_theme/sections/persons.sass
@@ -1,63 +1,24 @@
-.persons__page
-    .top
-        h2
-            a
-                @include icon(arrow-right, after, true)
-                    display: inline-flex
-                    margin-left: half($spacing0)
-                    transition: transform .3s ease
-                &:hover::after
-                    transform: translateX($spacing0)
-    // TODO : voir comment gérer les marges comme pour les blocs (pb footer)
-    section
-        padding-bottom:  $grid-gutter
-    ol.programs
-        li
-            justify-content: flex-start
-            @include media-breakpoint-up(desktop)
-                @include grid(2)
-            @include icon(arrow-right, after, true)
-                color: inherit
-                position: absolute
-                right: 0
-                top: $spacing1
-                transform: translateY(half($spacing0))
-                @include media-breakpoint-up(desktop)
-                    transform: translateY(half($spacing1))
-            a
-                color: inherit
-                @include stretched-link(before)
-                @include media-breakpoint-down(desktop)
-                    margin-right: $spacing1
-            p
-                margin-top: unset
-                &:nth-child(2)
-                    @include small
-            &:hover
-                color: $color-accent
-
 .person
     @include article
     word-break: break-word
-    gap: $spacing1
+    gap: $spacing-3
     .avatar
         align-self: start
         flex-shrink: 0
         order: -1
-        min-width: $spacing3
+        min-width: $spacing-5
     .name
         @include h4
         a
             @include stretched-link
             text-decoration: none
         + p
-            margin-top: half($spacing0)
+            margin-top: $spacing-1
     .description
         @include small
-
     @include media-breakpoint-down(lg)
         flex-direction: row
-        gap: $spacing1
+        gap: $spacing-3
         .avatar
             align-self: start
             flex-shrink: 0
@@ -76,7 +37,6 @@
         .avatar
             width: 100%
 
-
 section.persons,
 div.persons
     @include grid(1)
@@ -84,20 +44,18 @@ div.persons
     @include grid(4, lg)
     @include grid(6, xxl)
 
-
-
 ol.persons--list
     @include list-reset
     > li
-        border-bottom: 1px solid $color-border
-        padding-bottom: $spacing1
-        padding-top: $spacing1
+        border-bottom: 1px solid var(--color-border)
+        padding-bottom: $spacing-3
+        padding-top: $spacing-3
         position: relative
         transition: color 0.5s
         @include icon(arrow, after)
             margin-left: auto
         &:hover
-            color: $color-accent
+            color: var(--color-accent)
             justify-self: end
         a
             @include stretched-link
@@ -110,21 +68,21 @@ ol.persons--list
             align-items: baseline
             display: flex
             [itemprop="name"]
-                width: col(5)
+                width: columns(5)
             [itemprop="jobTitle"]
-                width: col(6)
-                margin-left: $grid-gutter
+                width: columns(6)
+                margin-left: var(--grid-gutter)
         @include media-breakpoint-down(desktop)
             &::after
                 position: absolute
                 right: 0
-                top: calc(#{$spacing1} + 10px)
+                top: calc(#{$spacing-3} + 10px)
 
 .avatar
     // @include aspect-ratio(50, 'img')
     background-color: $persons-avatar-background-color
     border-radius: 50%
-    // margin-bottom: $spacing2
+    // margin-bottom: $spacing-4
     overflow: hidden
     position: relative
     // width: 100%
@@ -145,81 +103,114 @@ ol.persons--list
     @include list-reset
     li
         @include media-breakpoint-down(desktop)
-            margin-bottom: $spacing1
+            margin-bottom: $spacing-3
             a
                 display: block
         @include media-breakpoint-up(desktop)
             display: inline-block
-            margin-right: $spacing2
+            margin-right: $spacing-4
     a
-        @include link
-        @include link-hovered-underline-only
+        @extend %underline-on-hover
         @include meta
         @include icon(arrow, after)
-            margin-left: $spacing1
+            margin-left: $spacing-3
 
 .persons__section
     * + .persons
-        margin-top: $spacing2
+        margin-top: $spacing-4
     .persons:last-child
-        padding-bottom: $spacing3
+        padding-bottom: $spacing-5
 
 .persons__page
     .hero
-        @include media-breakpoint-down(desktop)
-            padding-bottom: 0
-            margin-bottom: $spacing4
-            .avatar
-                width: col(6)
-                margin-top: $spacing1
-                margin-left: auto
-                transform: translateY(100px)
-                margin-top: calc(#{$spacing1} - 100px)
-        @include media-breakpoint-down(sm)
-            margin-bottom: $spacing4
-            .avatar
-                transform: translateY(18vw)
-                margin-top: calc(#{$spacing1} - 18vw)
-        @include media-breakpoint-up(desktop)
-            .content
-                align-items: center
-                display: flex
-                justify-content: space-between
-                margin-top: 0
-                h1
-                    margin-bottom: 0
-                    width: col(8)
-                .avatar
-                    margin-bottom: 0
-                    width: col(3)
+        &--with-image
+            .hero-text
+                margin-bottom: $spacing-3
+            figure picture
+                @extend .avatar
+            @include media-breakpoint-down(desktop)
+                .container
+                    margin-bottom: calc(#{columns(2)} + #{$spacing-5})
+                figure
+                    width: columns(4)
+                    margin-left: auto
+                    margin-bottom: calc(#{columns(2)} * -1)
+            @include media-breakpoint-down(md)
+                .container
+                    margin-bottom: calc(#{columns(3)} + #{$spacing-5})
+                figure
+                    width: columns(6)
+                    margin-bottom: calc(#{columns(3)} * -1)
+            @include media-breakpoint-up(desktop)
+                .content
+                    align-items: center
+                    display: flex
+                    justify-content: space-between
+                    margin-top: 0
+                    h1
+                        margin-bottom: 0
+                        width: columns(8)
+                    figure
+                        margin-bottom: 0
+                        width: columns(3)
     .roles
         a
             @include small
     .blocks
-        margin-top: $spacing3
+        margin-top: $spacing-5
     .person-objects
-        margin-top: $spacing3
+        margin-top: $spacing-5
         > * + *
-            margin-top: $spacing3
+            margin-top: $spacing-5
+        .top h2 a
+            @include icon(arrow-right, after, true)
+                display: inline-flex
+                margin-left: $spacing-1
+                transition: transform .3s ease
+            &:hover::after
+                transform: translateX($spacing-2)
     .person-posts
         article.post:last-child
             margin-bottom: 0
+    section
+        padding-bottom: $spacing-5
+    ol.programs
+        li
+            justify-content: flex-start
+            @include media-breakpoint-up(desktop)
+                @include grid(2)
+            @include icon(arrow-right, after, true)
+                color: inherit
+                position: absolute
+                right: 0
+                top: 1.5em
+            a
+                color: inherit
+                @include stretched-link(before)
+                @include media-breakpoint-down(desktop)
+                    margin-right: $spacing-3
+            p
+                margin-top: unset
+                &:nth-child(2)
+                    @include small
+            &:hover
+                color: var(--color-accent)
     @include media-breakpoint-down(lg)
         .roles
-            margin-top: $spacing2
+            margin-top: $spacing-4
     @include media-breakpoint-up(lg)
         .informations
             @include grid
-            margin-bottom: $spacing2
+            margin-bottom: $spacing-4
             > div:first-of-type
                 grid-column: 1 / 9
             .roles
                 grid-column: 9 / 13
                 text-align: right
             .lead + div
-                margin-top: $spacing2
+                margin-top: $spacing-4
     .contacts-details ul
         @include grid(2, md, 0)
         li
             margin-top: 0
-            margin-bottom: $spacing1
+            margin-bottom: $spacing-3
diff --git a/assets/sass/_theme/sections/posts.sass b/assets/sass/_theme/sections/posts.sass
index fd0c985ebabac85445a3fab18bb8451498d2ff90..5986cf3786b85b51b9388f9252c2c2965dd5f688 100644
--- a/assets/sass/_theme/sections/posts.sass
+++ b/assets/sass/_theme/sections/posts.sass
@@ -1,25 +1,18 @@
 .post
-    @include article($post-media-background)
+    @include article
+    .post-title
+        @include h3
+        a
+            @include stretched-link
+            display: block
+            text-decoration: none
     time
         color: $post-time-color
         display: inline-block
         vertical-align: middle
-    .post-categories
-        @include meta
-        margin-top: $spacing0
-        margin-bottom: $spacing0
-        position: relative
-        display: flex
-        flex-wrap: wrap
-        gap: 0 $spacing0
-        z-index: 2
-        a
-            @include link($color-accent)
-        li
-            margin: 0
     .post-author
         @include meta
-        color: $color-text-alt
+        color: var(--color-text-alt)
 
 .posts__section,
 .authors__term,
@@ -27,22 +20,22 @@
 .persons__page
     .posts--list
         article
-            border-bottom: 1px solid $color-border
+            border-bottom: 1px solid var(--color-border)
             display: flex
-            margin-bottom: $spacing1
-            padding-bottom: $spacing1
+            margin-bottom: $spacing-3
+            padding-bottom: $spacing-3
             flex-direction: row
-            [itemprop=headline] + p
-                margin-top: $spacing0
+            .post-title + p
+                margin-top: $spacing-2
             @include media-breakpoint-up(desktop)
                 @include grid
-                margin-bottom: $spacing3
-                padding-bottom: $spacing3
+                margin-bottom: $spacing-5
+                padding-bottom: $spacing-5
             .post-content
                 grid-column: 4/13
                 @include media-breakpoint-down(desktop)
                     flex: 1
-                    margin-left: $spacing0
+                    margin-left: $spacing-2
                 p:not(.title)
                     @include media-breakpoint-down(desktop)
                         display: none
@@ -64,17 +57,17 @@
                     time
                         font-size: $h5-size
                 .post-content
-                    [itemprop=headline],
+                    .post-title,
                     > p
-                        max-width: col(6, 9)
+                        max-width: columns(6)
     .posts--grid
         @include grid(1)
         @include grid(2, desktop)
         @include grid($posts-grid-columns, xxl)
         .post
-            @include post-time-author-flex
+            @include author-and-time-side-to-side
             .post-meta
-                margin-top: $spacing0
+                margin-top: $spacing-2
 
 .posts__page
     .lead
@@ -91,60 +84,11 @@
         .post-sidebar
             @include sidebar
 
-.post-categories
-    @include list-reset
-    margin: 0
-    li
-        display: inline-block
-        vertical-align: middle
-        margin-left: space(2)
-        &:last-child
-            &::after
-                content: none
-
 .post-infos
-    margin-bottom: 0
-    @include meta
-    @include list-reset
-    font-size: $table-body-size
-    @include media-breakpoint-up(desktop)
-        font-size: $table-body-size-desktop
-    > li
-        @include meta
-        display: flex
-        gap: $spacing1
-        justify-content: space-between
-        padding-top: $spacing0
-        padding-bottom: $spacing0
-        border-color: $color-border
-        &:not(:first-child)
-            align-items: center
-            border-top: 1px solid $color-border
-        > span
-            @include meta
-            color: $color-text-alt
-            padding-left: 0
-            white-space: nowrap
-            vertical-align: top
-        > ul
-            text-align: right
-            flex: 1
-        &.social-share
-            align-items: center
-    a
-        @include link($color-accent)
-        text-align: right
-    .share
-        display: block
-        li
-            display: inline-block
-        a
-            color: inherit
-        li:last-child
-            margin-right: -$spacing0
+    @include section__page-infos
 
 .related
-    margin-top: $spacing1
+    margin-top: $spacing-3
     .posts
         @include grid(2, desktop)
         margin-bottom: 0
@@ -153,4 +97,4 @@
 
 .authors__term
     .blocks + .container
-        margin-top: $spacing3
+        margin-top: $spacing-5
diff --git a/assets/sass/_theme/sections/programs.sass b/assets/sass/_theme/sections/programs.sass
index 392ce211fd2e3be0f19a24b9b03ac8e0fc2f6136..7eb130902101e39a7afc0cdeea68d7137633edd7 100644
--- a/assets/sass/_theme/sections/programs.sass
+++ b/assets/sass/_theme/sections/programs.sass
@@ -1,5 +1,7 @@
 .program
     @include article
+    h2, h3, .program-title
+        @include article-title
 
 div.programs,
 section.programs
@@ -13,7 +15,7 @@ ol.programs
             margin-top: unset
             white-space: nowrap
             @include media-breakpoint-up(desktop)
-                margin-left: $spacing1
+                margin-left: $spacing-3
 
 .programs__section
     .hero-program
@@ -21,86 +23,27 @@ ol.programs
         justify-content: end
         .container
             position: relative
+            
     &:not(.full-width)
         .document-content
             .lead
                 font-family: $lead-font-family
+                font-size: var(--lead-size)
                 font-weight: $lead-weight
-                line-height: $lead-line-height
-                @include media-breakpoint-up(desktop)
-                    font-size: $lead-size-desktop
+                line-height: var(--lead-line-height)
 
     ol.programs
-        margin-bottom: $spacing3
+        margin-bottom: $spacing-5
         li
             line-height: 1
-    .dropdown-share
-        position: relative
-        > button
-            @include button-icon(social)
-            &:after
-                margin-right: $icon-social-margin-right
-            color: $hero-color
-            border-color: $color-border
-            font-size: $program-share-font-size
-            transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out
-            &:hover,
-            &:active,
-            &:focus
-                background: $color-background
-                color: $color-text
-            // a11y
-            &:active,
-            &:focus
-                box-shadow: inset 0 0 0 0.25rem rgba(white, .5)
-            @include media-breakpoint-up(desktop)
-                font-size: $program-share-font-size-desktop
-        .dropdown-menu
-            background: $hero-color
-            border-radius: px2rem(4)
-            bottom: 0
-            padding: 0
-            position: absolute
-            top: 0
-            width: 100%
-            .share
-                display: flex
-                align-items: center
-                height: 100%
-                li
-                    margin: 0
-                    flex: 1 1
-                    text-align: center
-            a
-                display: block
-                color: $hero-background-color
-    .buttons
-        @include meta
-        button, > a
-            display: flex
-            align-items: center
-            justify-content: space-between
-            width: 100%
-            border-radius: px2rem(4)
-        a[download]
-            @include button-icon(download)
-            text-decoration: none
-            color: $hero-background-color
-            background: $hero-color
-            border-color: $hero-color
-            font-size: $program-share-font-size
-            @include media-breakpoint-up(desktop)
-                font-size: $program-share-font-size-desktop
-
-        @include media-breakpoint-down(desktop)
-            margin-top: $spacing1
 
     .document-content
-        @include media-breakpoint-up(desktop)
+        .program-summary
+            margin-bottom: $spacing-5
             .lead
-                padding-bottom: $spacing2
+                margin-bottom: $spacing-3
         .content
-            padding-bottom: $spacing2
+            padding-bottom: $spacing-4
             section:not(.block) > * + *
                 margin-top: 1em
             .blocks
@@ -108,10 +51,9 @@ ol.programs
                     margin-top: 0
                     @include h3
                 @include media-breakpoint-down(desktop)
-                    padding-top: $spacing3
-                    margin-left: half(-$grid-gutter-sm)
-                    margin-right: half(-$grid-gutter-sm)
-
+                    padding-top: $spacing-5
+                    margin-left: var(--grid-gutter-negative)
+                    margin-right: var(--grid-gutter-negative)
                 @include media-breakpoint-up(desktop)
                     .container
                         padding-left: 0
@@ -125,15 +67,17 @@ ol.programs
         .document-content
             .content
                 > h2
-                    margin-bottom: $spacing2
+                    margin-bottom: $spacing-4
             section:not(:first-child):not(.block)
-                margin-top: $spacing3
+                margin-top: $spacing-5
     @include media-breakpoint-up(desktop)
         .document-content
+            .program-summary
+                margin-bottom: $spacing-6
             .content
                 @include grid(12, desktop)
                 position: relative
-                padding-bottom: $spacing4
+                padding-bottom: $spacing-6
                 > *
                     grid-column: 5/13
                 > h2
@@ -146,7 +90,7 @@ ol.programs
                     grid-column: 1/5
                     margin-bottom: 0
                 section:not(:first-child):not(.block)
-                    margin-top: $spacing4
+                    margin-top: $spacing-6
             section:first-of-type
                 .content
                     border-top: none
@@ -156,12 +100,12 @@ ol.programs
             font-size: unset
             line-height: 160%
             &:first-child 
-                border-top: 1px solid $color-border
+                border-top: 1px solid var(--color-border)
             &:last-child
-                border-bottom: 1px solid $color-border
+                border-bottom: 1px solid var(--color-border)
         th
             @include small
-            color: $color-text-alt
+            color: var(--color-text-alt)
             vertical-align: middle
         td
             text-align: right
@@ -175,11 +119,11 @@ ol.programs
     .list-persons
         @include list-reset
         > li
-            border-bottom: 1px solid $color-border
+            border-bottom: 1px solid var(--color-border)
             justify-content: flex-start
             position: relative
-            padding-bottom: $spacing0
-            padding-top: $spacing0
+            padding-bottom: $spacing-2
+            padding-top: $spacing-2
             @include media-breakpoint-up(sm)
                 @include grid(2)
             a
@@ -189,7 +133,7 @@ ol.programs
                 text-decoration: none
                 @include stretched-link(before)
                 @include media-breakpoint-down(desktop)
-                    margin-right: $spacing1
+                    margin-right: $spacing-3
                 @include icon(arrow-right, after, true)
                     color: inherit
                     position: absolute
@@ -201,13 +145,13 @@ ol.programs
                 margin-top: unset
                 @include small
                 @include media-breakpoint-up(desktop)
-                    margin-right: $spacing1
+                    margin-right: $spacing-3
                 @include media-breakpoint-down(sm)
                     display: block
             &:hover
-                color: $color-accent
+                color: var(--color-accent)
             &:first-child
-                border-top: 1px solid $color-border
+                border-top: 1px solid var(--color-border)
             a
             p
                 @include small
@@ -218,4 +162,4 @@ ol.programs
             @include icon(arrow, after, true)
             @include hover-translate-icon
             @include media-breakpoint-down(desktop)
-                margin-bottom: $spacing1
\ No newline at end of file
+                margin-bottom: $spacing-3
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/projects.sass b/assets/sass/_theme/sections/projects.sass
new file mode 100644
index 0000000000000000000000000000000000000000..f3b7750e4f51620b4007abf10810586ded6485d4
--- /dev/null
+++ b/assets/sass/_theme/sections/projects.sass
@@ -0,0 +1,46 @@
+.project
+    @include article(auto)
+    .project-title
+        @include article-title
+
+.projects__section,
+.projects_categories__term
+    .projects
+        @include grid(2, md)
+
+.projects__page
+    .hero
+        .content
+            align-items: stretch
+        .hero-text
+            display: flex
+            flex-direction: column
+            gap: $spacing-3
+        .project-infos
+            --color-border: #{$project-infos-border-color}
+            --color-text: #{$project-infos-color-text}
+            --color-text-alt: #{$project-infos-color-text-alt}
+            --color-accent: #{$project-infos-color-accent}
+    @include media-breakpoint-up(sm)
+        .hero
+            .project-infos
+                width: columns(8)
+    @include media-breakpoint-up(md)
+        .hero
+            .project-infos
+                width: columns(6)
+    @include media-breakpoint-up(desktop)
+        .hero
+            .content
+                align-items: stretch
+            .hero-text
+                justify-content: space-between
+                gap: $spacing-5
+                width: columns(6)
+            .project-infos
+                width: columns(4)
+            figure
+                width: columns(6)
+
+.project-infos
+    @include section__page-infos
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/publications.sass b/assets/sass/_theme/sections/publications.sass
index 71d210d52e18688d94cb81f918afa0f5193dc1fc..ac9f2ba021257961e81dc46f1248047b602af979 100644
--- a/assets/sass/_theme/sections/publications.sass
+++ b/assets/sass/_theme/sections/publications.sass
@@ -13,46 +13,51 @@
             display: block
 
 .publication
-    border-bottom: 1px solid $color-border
-    padding-bottom: $spacing0
-    padding-top: $spacing0
+    border-bottom: 1px solid var(--color-border)
+    padding-bottom: $spacing-2
+    padding-top: $spacing-2
     position: relative
+    @include icon-block(arrow-right, before)
+        position: absolute
+        right: 0px
     a
         text-decoration: none
     .publication-title
         a
             @include stretched-link(after)
             &:hover
-                color: $color-accent
-            @include icon-block(arrow-right, before)
-                position: absolute
-                right: 0px
+                color: var(--color-accent)
     .publication-meta
         @include small
-        color: $color-text-alt
-        margin-top: half($spacing0)
+        color: var(--color-text-alt)
+        margin-top: $spacing-1
         a
-            color: $color-text-alt
+            color: var(--color-text-alt)
+    @include media-breakpoint-down(desktop)
+        .publication-meta
+            padding-right: $spacing-4
+        &::before
+            bottom: 0
 
 .publications
-    margin-top: $spacing3
+    margin-top: $spacing-5
 
 .publications-list
     @include list-reset
 
 .publications__section
     .publication
-        padding-bottom: $spacing2
-        padding-top: $spacing2
+        padding-bottom: $spacing-4
+        padding-top: $spacing-4
         position: relative
         p
-            padding-right: $spacing2
+            padding-right: $spacing-4
         @include media-breakpoint-down(desktop)
-            padding-right: $spacing2
+            padding-right: $spacing-4
             a + p
-                margin-top: $spacing1
+                margin-top: $spacing-3
             a::before
-                margin-top: px2rem(-6)
+                margin-top: pxToRem(-6)
         .publication-title
             @include h4
         .publication-authors
@@ -72,40 +77,40 @@
             @include media-breakpoint-up(desktop)
             grid-column: 1 / 9
         .document-sidebar
-            margin-bottom: $spacing3
+            margin-bottom: $spacing-5
             @include media-breakpoint-up(desktop)
                 grid-column: 9 / 13
                 order: 2
             [itemprop="author"] 
                 + *
-                    margin-top: $spacing1
+                    margin-top: $spacing-3
                 .person
                     flex-direction: row
                     align-items: center
                     display: flex
-                    gap: $spacing1
+                    gap: $spacing-3
                     .name
                         @include signature
                     .avatar
                         margin-bottom: 0
             > * + *
-                margin-top: $spacing3
+                margin-top: $spacing-5
     .downloads
         &:not(:first-child)
-            margin-top: $spacing3
+            margin-top: $spacing-5
         nav
-            margin-top: $spacing1
+            margin-top: $spacing-3
             @include grid(2, desktop)
             @include grid(4, xxl)
             @include media-breakpoint-up(xxl)
-                grid-gap: $spacing0 $grid-gutter
+                grid-gap: $spacing-2 var(--grid-gutter)
             @include media-breakpoint-down(xxl)
-                grid-gap: $spacing0
+                grid-gap: $spacing-2
             > a
                 width: 100%
                 display: block
                 @include media-breakpoint-down(desktop)
-                    margin-bottom: $spacing1
+                    margin-bottom: $spacing-3
 
     .block-siblings-navigation
         .block-content
diff --git a/assets/sass/_theme/sections/sitemap.sass b/assets/sass/_theme/sections/sitemap.sass
index f5b664fc2686303266b54ccd0b4f087560b905b1..caee8deb1f948851248b80e9ebbec8b639bbfd91 100644
--- a/assets/sass/_theme/sections/sitemap.sass
+++ b/assets/sass/_theme/sections/sitemap.sass
@@ -1,3 +1,4 @@
+// C'est vraiment utilisé qqpart ça ?    
 .sitemap__section
     .content
         > div
@@ -10,4 +11,17 @@
                 @include media-breakpoint-up(desktop)
                     margin-bottom: 7.5rem
                 li
-                    margin-bottom: 1rem
\ No newline at end of file
+                    margin-bottom: 1rem
+.block-sitemap
+    ul 
+        list-style-type: none
+        li
+            position: relative
+            ul
+                margin-left: $spacing-3
+                li
+                    a
+                        @include icon(list-hyphen)
+                            position: absolute
+                            left: pxToRem(-24)
+                            font-size: pxToRem(24)
diff --git a/assets/sass/_theme/sections/volumes.sass b/assets/sass/_theme/sections/volumes.sass
index 7aac22fbbff105b8a8197b167872cc18c12d693d..d462fff52544510fd2f93834a34639c4dd9f381d 100644
--- a/assets/sass/_theme/sections/volumes.sass
+++ b/assets/sass/_theme/sections/volumes.sass
@@ -1,5 +1,7 @@
 .volume
     @include article
+    .volume-title
+        @include article-title
     .suptitle
         @include meta
 
@@ -23,9 +25,9 @@
                 h2
                     @include meta
                 > div
-                    margin-bottom: $spacing1
+                    margin-bottom: $spacing-3
                     @include media-breakpoint-up(desktop)
-                        margin-bottom: $spacing4
+                        margin-bottom: $spacing-6
             .document-aside
                 @include media-breakpoint-up(desktop)
                     grid-column: 9 / 12
@@ -35,20 +37,18 @@
                     dt
                         @include meta
                         &:not(:first-of-type)
-                            margin-top: $spacing2
+                            margin-top: $spacing-4
     .paper
-        display: block
-        @include media-breakpoint-down(desktop)
+        gap: $spacing-3
+        .paper-actions
+            > *
+                width: auto
+        @include media-breakpoint-down(xxl)
             > div:first-of-type
                 .paper-volume
                     display: inline-flex
-                    margin-left: $spacing0
-        @include media-breakpoint-up(desktop)
+                    margin-left: $spacing-2
+        @include media-breakpoint-up(xxl)
             > div:first-of-type
                 .paper-volume
-                    padding-left: $spacing1
-            .paper-actions
-                gap: $grid-gutter
-                margin-top: $spacing0
-                a, button
-                    width: unset
\ No newline at end of file
+                    padding-left: $spacing-3
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/blocks.sass b/assets/sass/_theme/utils/blocks.sass
new file mode 100644
index 0000000000000000000000000000000000000000..7343e4ae3510aee699d508250f1e900ebd75c694
--- /dev/null
+++ b/assets/sass/_theme/utils/blocks.sass
@@ -0,0 +1,43 @@
+@mixin draggable-block
+    overflow: hidden
+    .draggable-container
+        &:hover
+            cursor: grab
+        &.is-grabbing
+            cursor: grabbing
+    .draggable-content
+        margin-left: calc(var(--grid-gutter-negative) / 2)
+        margin-right: calc(var(--grid-gutter-negative) / 2)
+        > ul,
+        > ol
+            display: flex
+            flex-flow: row nowrap
+            list-style: none
+            padding-left: 0
+            transition: margin 0.4s ease-in-out
+            width: 100%
+    .draggable-item
+        flex: none
+        scroll-snap-align: start
+        transition: 0.3s opacity
+        &.is-passed
+            opacity: 0.15
+            pointer-events: none
+    .actions-arrows
+        display: flex
+        margin-left: calc(var(--grid-gutter) / 2)
+        > button
+            @include button-reset
+            background: none
+            border: none
+            color: $block-timeline-horizontal-color
+            cursor: pointer
+            padding: 0
+            &:first-child
+                @include icon-block(arrow-previous, before)
+                margin-left: $icon-arrow-previous-margin-left
+            &:last-child
+                @include icon-block(arrow-next, before)
+            &:disabled
+                cursor: default
+                opacity: 0.3
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/colors.sass b/assets/sass/_theme/utils/colors.sass
new file mode 100644
index 0000000000000000000000000000000000000000..0c4d8aebadc48e79c8170a9bfb42b6860bd2288b
--- /dev/null
+++ b/assets/sass/_theme/utils/colors.sass
@@ -0,0 +1,9 @@
+// Les couleurs étant stockées dans des variables CSS, nous utilisons color-mix pour appliquer de l'alpha sur des couleurs en hexa
+@function alphaColor($color, $alpha)
+    $percent: $alpha
+    @if ($percent <= 1 and $percent > 0)
+        $percent: $alpha * 100%
+    @if ($percent == 0) // Permet d'éviter le bug de compilation en production qui renvoie "0" au lieu de "0%"
+        @return transparent
+    @else
+        @return color-mix(in srgb, $color $percent, transparent)
diff --git a/assets/sass/_theme/utils/fonts.sass b/assets/sass/_theme/utils/fonts.sass
new file mode 100644
index 0000000000000000000000000000000000000000..e6d6815e19878e41ddee6ea273bf9771da250378
--- /dev/null
+++ b/assets/sass/_theme/utils/fonts.sass
@@ -0,0 +1,23 @@
+// https://gist.github.com/jonathantneal/d0460e5c2d5d7f9bc5e6
+@function str-replace($string, $search, $replace: "")
+    $index: str-index($string, $search)
+    @if $index
+        @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
+    @return $string
+
+@mixin font-face($name, $path, $weight: 400, $style: normal, $exts: (eot woff2 woff ttf svg))
+    $src: null
+    $extmods: (eot:"?", svg:"#" + str-replace($name," ","_"))
+    $formats: (otf: "opentype", ttf: "truetype")
+
+    @each $ext in $exts
+        $extmod: if(map-has-key($extmods, $ext), $ext + map-get($extmods, $ext), $ext)
+        $format: if(map-has-key($formats, $ext), map-get($formats, $ext), $ext)
+        $src: append($src, url(quote("/assets/fonts/" + $path + "." + $extmod)) format(quote($format)), comma,)
+
+    @font-face
+        font-family: quote($name)
+        font-style: $style
+        font-weight: $weight
+        font-display: swap
+        src: $src
diff --git a/assets/sass/_theme/utils/grid.sass b/assets/sass/_theme/utils/grid.sass
new file mode 100644
index 0000000000000000000000000000000000000000..b7d5d2c1ab17f587f327af44ac30c40db72ce0b2
--- /dev/null
+++ b/assets/sass/_theme/utils/grid.sass
@@ -0,0 +1,39 @@
+@mixin container
+    margin-left: auto
+    margin-right: auto
+    padding-left: var(--grid-gutter)
+    padding-right: var(--grid-gutter)
+    width: var(--grid-width)
+    max-width: 100%
+
+@function columns($quantity)
+    $width: calc( (var(--column-width) * #{$quantity}) + var(--grid-gutter) * ( #{$quantity} - 1 ))
+    @return #{$width}
+
+@mixin grid($cols: 12, $breakpoint: false, $gap-y: var(--grid-gutter), $gap-x: var(--grid-gutter))
+    word-break: break-word
+    @if $breakpoint
+        @include media-breakpoint-up($breakpoint)
+            display: grid
+            grid-gap: $gap-y $gap-x
+            grid-template-columns: repeat($cols, 1fr)
+    @else
+        display: grid
+        grid-gap: $gap-y $gap-x
+        grid-template-columns: repeat($cols, 1fr)
+
+@mixin flexbox-grid($cols: 12, $gap-y: var(--grid-gutter), $gap-x: $gap-y)
+    display: flex
+    flex-wrap: wrap
+    gap: $gap-y $gap-x
+    > *
+        flex: 0 0 calc(#{100 / $cols}% - #{$gap-x} * #{($cols - 1) / $cols} )
+
+// Cette fonction retourne un nombre de colonne + une gouttière
+@function offset($quantity)
+    $width: calc( #{columns($quantity)} + var(--grid-gutter) )
+    @return #{$width}
+
+// Cette fonction calcule l'espace disponible entre la grille et le bord de l'écran
+@function grid-external-space
+    @return Max(var(--grid-gutter), calc((100vw - var(--grid-width)) / 2 + var(--grid-gutter)))
diff --git a/assets/sass/_theme/utils/icons.sass b/assets/sass/_theme/utils/icons.sass
new file mode 100644
index 0000000000000000000000000000000000000000..f453b6df2c8ef22f1938ec748d0eeb1b6d86588d
--- /dev/null
+++ b/assets/sass/_theme/utils/icons.sass
@@ -0,0 +1,48 @@
+
+@mixin hover-translate-icon($pseudo: after, $distance: 10)
+    &::#{$pseudo}
+        display: inline-block
+        transition: transform 0.55s $arrow-ease-transition
+        transform: translateX(0)
+    &:hover
+        &::#{$pseudo}
+            transform: translateX(#{pxToRem($distance)})
+
+@mixin icon($icon-name: '', $pseudo-element: before, $non-breaking: false)
+    &::#{$pseudo-element}
+        content: map-get($icons, $icon-name)
+        display: inline-block
+        font-family: 'Icon'
+        font-style: normal
+        font-variant: normal
+        font-weight: normal
+        line-height: 1
+        speak: never
+        text-transform: none
+        vertical-align: middle
+        @if $non-breaking
+            content: " #{map-get($icons, $icon-name)}"
+            display: inline
+        @content // TODO : important de documenter ça
+
+@mixin icon-block($icon-name: '', $pseudo-element: before, $non-breaking: false)
+    @include icon($icon-name, $pseudo-element, $non-breaking)
+        font-size: pxToRem(44)
+        display: inline
+        @content
+
+@mixin arrow-right-hover
+    position: relative
+    display: flex
+    justify-content: space-between
+    align-items: center
+    @include icon(arrow, after)
+        opacity: 0
+        transform: translateX(-20px)
+        transition: 0.55s $arrow-ease-transition
+        position: absolute
+        right: 0
+    &:hover
+        &:after
+            opacity: 1
+            transform: translateX(0)
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/links.sass b/assets/sass/_theme/utils/links.sass
new file mode 100644
index 0000000000000000000000000000000000000000..3059da0003ed7ab0e1f8bbe00b9cdd6bdf8d1c90
--- /dev/null
+++ b/assets/sass/_theme/utils/links.sass
@@ -0,0 +1,24 @@
+@mixin link($color: $link-color, $unhover_decorated: true)
+    color: $color
+    text-decoration-line: underline
+    text-decoration-thickness: $link-underline-thickness
+    text-underline-offset: $link-underline-offset
+    transition: $link-transition
+    @if $unhover_decorated
+        text-decoration-color: alphaColor($color, $link-unhover-decoration-color-alpha)
+    @else 
+        text-decoration-color: transparent
+    &:hover
+        text-decoration-color: alphaColor($color, 1)
+        text-decoration-thickness: $link-underline-thickness
+
+@mixin stretched-link($pseudo-element: after)
+    &::#{$pseudo-element}
+        bottom: 0
+        content: ''
+        left: 0
+        position: absolute
+        right: 0
+        top: 0
+        z-index: $zindex-stretched-link
+
diff --git a/assets/sass/_theme/utils/media.sass b/assets/sass/_theme/utils/media.sass
new file mode 100644
index 0000000000000000000000000000000000000000..8be361e9b59617051600a66be23c64fa98bae133
--- /dev/null
+++ b/assets/sass/_theme/utils/media.sass
@@ -0,0 +1,14 @@
+
+@mixin aspect-ratio($ratio, $selector: 'iframe', $background: false)
+    @if $background
+        aspect-ratio: #{$ratio}
+        background: $background
+    #{$selector}
+        aspect-ratio: #{$ratio}
+        display: block
+        width: 100%
+
+@mixin handle-svg-fit
+    picture.is-svg
+        img
+            object-fit: contain
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/normalize.sass b/assets/sass/_theme/utils/normalize.sass
new file mode 100644
index 0000000000000000000000000000000000000000..3594f4c40314f2883ddeb7e4534007dc9b0928cb
--- /dev/null
+++ b/assets/sass/_theme/utils/normalize.sass
@@ -0,0 +1,32 @@
+@mixin button-reset
+    appearance: none
+    background: transparent
+    border: none
+    border-radius: 0
+    cursor: pointer
+    user-select: none
+    &:active,
+    &:focus
+        box-shadow: inset 0 0 0 0.25rem alphaColor(var(--color-text), 0.25)
+        // TODO : vérifier si l'outline 0 est vraiment nécessaire
+        // outline: 0
+
+@mixin list-reset
+    list-style: none
+    padding-left: 0
+    margin-bottom: 0
+    margin-top: 0
+
+@mixin inset($top: 0, $right: $top, $bottom: $top, $left: $top)
+    inset: $top $right $bottom $left
+    // polyfill for inset
+    @supports not (inset: $top)
+        bottom: $bottom
+        left: $left
+        right: $right
+        top: $top
+
+@mixin browser-under-safari-16
+    @media not all and (min-resolution:.001dpcm) 
+            @supports (-webkit-appearance:none) and (display:flow-root)
+                @content
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/shame.sass b/assets/sass/_theme/utils/shame.sass
new file mode 100644
index 0000000000000000000000000000000000000000..0c6f5918d19ede470da5427d0b919c32cd164ce7
--- /dev/null
+++ b/assets/sass/_theme/utils/shame.sass
@@ -0,0 +1,190 @@
+@mixin visually-hidden
+    clip: rect(0,0,0,0) !important
+    border: 0 !important
+    height: 1px !important
+    margin: -1px !important
+    overflow: hidden !important
+    padding: 0 !important
+    position: absolute !important
+    white-space: nowrap !important
+    width: 1px !important
+
+@mixin author-and-time-side-to-side
+    .post-meta
+        display: flex
+        flex-wrap: wrap
+    .post-author p::before
+        content: ' • '
+
+// Utilisé pour .post, .project, .page, .person, .program, .volume
+@mixin article($aspect-ratio: $article-media-aspect-ratio)
+    position: relative
+    display: flex
+    flex-direction: column
+    .media
+        @include handle-svg-fit
+        margin-bottom: $spacing-3
+        order: -1
+        overflow: hidden
+        img
+            display: block
+            object-fit: cover
+            @if $aspect-ratio
+                aspect-ratio: $aspect-ratio
+    p + time
+            margin-top: $spacing-2
+    .post-categories, .project-categories
+        @include list-reset
+        @include meta
+        margin-top: $spacing-2
+        margin-bottom: $spacing-2
+        position: relative
+        display: flex
+        flex-wrap: wrap
+        gap: 0 $spacing-2
+        z-index: 2
+        a
+            @include link(var(--color-accent))
+        li
+            margin: 0
+    time
+        @include meta
+        color: var(--color-text-alt)
+        display: block
+
+@mixin article-title
+    @include h3
+    a
+        @include stretched-link
+        display: block
+        text-decoration: none
+
+@mixin list-section
+    @include list-reset
+    > li
+        border-bottom: 1px solid var(--color-border)
+        padding-bottom: $spacing-3
+        padding-top: $spacing-3
+        position: relative
+        > .title
+            @include h2
+            transition: color 0.55s
+            @include media-breakpoint-down(desktop)
+                @include icon(arrow-right, after, true)
+                    bottom: $spacing-2
+                    position: absolute
+                    right: 0
+            @include media-breakpoint-up(desktop)
+                @include arrow-right-hover
+                display: block
+                &::after
+                    transform: translateX(0)
+                    position: relative
+                &:hover
+                    &::after
+                        transform: translateX($spacing-2)
+        a
+            text-decoration: none
+            &:hover
+                color: var(--color-accent)
+
+        @include media-breakpoint-down(desktop)
+            a:nth-child(2)
+                margin-top: calc(#{$spacing-2} / 2)
+            a, p
+                display: block
+        @include media-breakpoint-up(desktop)
+            align-items: baseline
+            display: flex
+            justify-content: space-between
+
+@mixin text-underline
+    text-decoration-color: var(--color-border)
+    text-decoration-line: underline
+    text-decoration-thickness: 1px
+    text-underline-offset: 3px
+    text-decoration-line: underline
+
+
+@mixin top-flex
+    @include in-page-without-sidebar
+        align-items: baseline
+        display: flex
+        .block-title
+            width: columns(4)
+            &:not(.hidden) + .description
+                margin-left: var(--grid-gutter)
+        .description
+            margin-top: 0
+            width: columns(8)
+
+@mixin collapsed-figcaption
+    figcaption
+        @include meta
+        color: var(--color-text-alt)
+        position: absolute
+        display: block
+        left: 0
+        right: 0
+        text-align: right
+        z-index: 10
+        &::before
+            @include meta
+            content: '©'
+            position: absolute
+            right: 0
+            top: 0
+            background: $hero-background-color
+            text-align: center
+            padding: $spacing-1
+            display: block
+        .credit-content
+            @include meta
+            background: $hero-background-color
+            display: none
+            padding: $spacing-1
+            padding-right: $spacing-3
+        a
+            color: inherit
+            text-decoration-color: inherit
+        &:focus
+            .credit-content
+                display: block
+        @include media-breakpoint-up(desktop)
+            &:before
+                padding-right: 0
+        @include media-breakpoint-down(desktop)
+            position: relative
+            background: var(--color-background)
+            &::before
+                background: transparent
+            .credit-content
+                display: block
+                background: transparent
+                position: relative
+    &:hover
+        figcaption .credit-content
+            display: block
+
+@mixin dropdown-i18n
+    position: relative
+    .dropdown-menu
+        margin-top: $header-nav-padding-y
+        right: 0
+        @include media-breakpoint-up(desktop)
+            padding-left: $spacing-3
+            padding-bottom: $spacing-2
+            padding-top: $spacing-2
+            padding-right: $spacing-3
+    li a
+        padding-bottom: $spacing-1
+        padding-top: $spacing-1
+        display: block
+        &.is-checked
+            display: flex
+            justify-content: space-between
+            align-items: center
+            gap: $spacing-4
+            text-decoration: none !important
+            @include icon(caret, after)
+                transform: rotate(-14deg) skewX(-30deg)
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/sidebar.sass b/assets/sass/_theme/utils/sidebar.sass
new file mode 100644
index 0000000000000000000000000000000000000000..f82412c80a332579506a57dbbbb95ba1930a1ac4
--- /dev/null
+++ b/assets/sass/_theme/utils/sidebar.sass
@@ -0,0 +1,116 @@
+@mixin in-page-with-sidebar
+    @include media-breakpoint-up(desktop)
+        body:not(.full-width) &
+            @content
+
+@mixin in-page-without-sidebar
+    @include media-breakpoint-up(desktop)
+        main > .blocks &,
+        body.full-width &,
+            @content
+
+// Use this mixin to override with-aside or without-aside rules
+@mixin in-page-with-or-without-sidebar
+    @include media-breakpoint-up(desktop)
+        body:not(.full-width) &,
+        main > .blocks &,
+        body.full-width &,
+            @content
+
+// Aliases
+@mixin full-page
+    @include in-page-without-sidebar
+        @content
+
+@mixin not-full-page
+    @include in-page-with-sidebar
+        @content
+
+// Section Program
+@mixin in-page-program
+    .programs__section &
+        @content
+
+@mixin sticky($offset-y: 0)
+    position: sticky
+    top: $offset-y
+    @if $header-sticky-enabled
+        transition: top $header-sticky-transition
+        html:not(.is-scrolling-down) &
+            top: calc(var(--header-height) + #{$offset-y})
+
+@mixin sidebar($side: start)
+    @include media-breakpoint-down(desktop)
+        padding: 0 var(--grid-gutter)
+        margin-bottom: $spacing-5
+    @include media-breakpoint-up(desktop)
+        @if $side == start
+            margin-left: grid-external-space()
+            left: 0
+        @else
+            margin-right: grid-external-space()
+            right: 0
+        margin-top: 0
+        top: 0
+        height: 100%
+        position: absolute
+        width: columns(4)
+        & > div
+            @include sticky($spacing-3)
+        .toc-container
+            border-top: 1px solid var(--color-border)
+            padding-top: $spacing-3
+            position: static
+            margin-left: 0
+
+// Utilisé dans .post-infos, et project-infos
+@mixin section__page-infos
+    @include meta
+    @include list-reset
+    font-size: $table-body-size
+    margin-bottom: 0
+    @include media-breakpoint-up(desktop)
+        font-size: $table-body-size-desktop
+    > li
+        @include meta
+        display: flex
+        gap: $spacing-3
+        justify-content: space-between
+        padding-top: $spacing-2
+        padding-bottom: $spacing-2
+        border-color: var(--color-border)
+        &:not(:first-child)
+            align-items: center
+            border-top: 1px solid var(--color-border)
+        > span
+            @include meta
+            color: var(--color-text-alt)
+            padding-left: 0
+            white-space: nowrap
+            vertical-align: top
+        > ul
+            text-align: right
+            flex: 1
+        &.social-share
+            align-items: center
+    a
+        @include link(var(--color-accent))
+        text-align: right
+    .terms
+        @include list-reset
+        margin: 0
+        li
+            display: inline-block
+            vertical-align: middle
+            margin-left: $spacing-1
+            &:last-child
+                &::after
+                    content: none
+    .share
+        display: block
+        li
+            display: inline-block
+        a
+            color: inherit
+        li:last-child
+            margin-right: -$spacing-2
\ No newline at end of file
diff --git a/assets/sass/_theme/utils/sizes.sass b/assets/sass/_theme/utils/sizes.sass
new file mode 100644
index 0000000000000000000000000000000000000000..def00899057379d30a738c30c68fc771330b2138
--- /dev/null
+++ b/assets/sass/_theme/utils/sizes.sass
@@ -0,0 +1,7 @@
+$space-unit: 4 !default
+@function space($spaces: 1)
+    @return #{$spaces * $space-unit / 16}rem
+
+@function pxToRem($size)
+    $remSize: $size / 16
+    @return #{$remSize}rem
diff --git a/bin/osuny.js b/bin/osuny.js
index d4d95864787cd9b55f0f45c3c0fab1c7890637f9..41860abfd2bb350e3730b631362abc7985bf6b4d 100644
--- a/bin/osuny.js
+++ b/bin/osuny.js
@@ -20,22 +20,27 @@ console.log(`
 
 const command = process.argv[2];
 
-let pagefindExclude = `
-    .administrators__term,
-    .authors__term,
-    .categories__taxonomy, .categories__term,
-    .posts_categories__taxonomy, .posts_categories__term,
-    .events_categories__taxonomy, .events_categories__term,
-    .diplomas__taxonomy, .block-diplomas,
-    .events__section, .block-agenda,
-    .organizations__section, .block-organizations,
-    .block-pages,
-    .persons__section, .block-persons,
-    .posts__section, .block-posts, .post-sidebar,
-    .block-programs,
-    .researchers__term,
-    .teachers__term
-    `;
+let pagefindExclude = '';
+// Categories: No list of categories
+pagefindExclude += '.categories__taxonomy, .categories__term, ';
+pagefindExclude += '.posts_categories__taxonomy, .posts_categories__term, ';
+pagefindExclude += '.events_categories__taxonomy, .events_categories__term, ';
+// Diplomas: No list of diplomas or block diplomas
+pagefindExclude += '.diplomas__taxonomy, .block-diplomas, ';
+// Agenda events: No list of events or block events
+pagefindExclude += '.events__section, .block-agenda, ';
+// Organizations: No list of organizations or block organizations
+pagefindExclude += '.organizations__section, .block-organizations, ';
+// Pages: No block pages (there's no difference between list and page)
+pagefindExclude += '.block-pages, ';
+// Persons: no list or block
+pagefindExclude += '.persons__section, .block-persons, ';
+// No list of people's facets
+pagefindExclude += '.administrators__term, .authors__term, .researchers__term, .teachers__term,';
+// Posts: no list, block posts, or post sidebar
+pagefindExclude += '.posts__section, .block-posts, .post-sidebar, ';
+// Programs: no block
+pagefindExclude += '.block-programs';
 
 function execute(string) {
     console.log("OSUNY runs " + string);
@@ -54,7 +59,7 @@ if (command === "dev") {
 
 if (command === "build") {
     execute("yarn upgrade");
-    execute("hugo");
+    execute("hugo --minify");
     execute("npm_config_yes=true npx pagefind --site 'public' --exclude-selectors '" + pagefindExclude + "'");
 }
 
diff --git a/config.yaml b/config.yaml
index fa8733f4a06d13be3a29d58c30618d166d8531a1..d6feac23512d5be4669da460c4c7c2e3d4167ff1 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,17 +1,24 @@
 params:
-  debug: false
+  debug:
+    active: false
+    productionUrl: ""
   keycdn: https://osuny-1b4da.kxcdn.com
-  cookie_banner:
-    enable: false
-    blank: true
-    page: https://gdpr.eu/cookies/
   plausible: false
   seo:
     title:
       separator: "|"
+
+  # DESIGN SYSTEM
   logo:
     header: "/assets/images/logo.svg"
     footer: "/assets/images/logo.svg"
+    # Handle logo in darkmode with this configuration
+    # header:
+    #   default: "/assets/images/logo.svg"
+    #   darkmode: "/assets/images/logo-white.svg"
+    # footer:
+    #   default: "/assets/images/logo.svg"
+    #   darkmode: "/assets/images/logo-white.svg"
   menu:
     dropdown:
       linkToLevel1: false
@@ -28,6 +35,8 @@ params:
   home:
     toc:
       disabled: true
+
+  # SECTIONS
   events:
     default_image: false
     date_format: ":date_long"
@@ -46,12 +55,18 @@ params:
     default_image: false
     index:
       truncate_description: 200 # Set to 0 to disable truncate
+      layout: grid # grid | list
   papers:
     default_image: false
     sidebar:
       direction: start
   volumes:
     default_image: false
+  locations:
+    default_image: false
+    index:
+      truncate_description: 200
+      layout: list # grid | list
   persons:
     index:
       layout: grid # grid | list
@@ -73,9 +88,29 @@ params:
       email: false
       telegram: false
       whatsapp: false
+  projects:
+    default_image: false
+    date_format: "2006"
+    index:
+      show_categories: true
+      show_description: true
+      show_year: false
+      truncate_description: 200 # Set to 0 to disable truncate
+      layout: list # grid | list
+    share_links:
+      facebook: true
+      twitter: true
+      linkedin: true
+      email: false
+      telegram: false
+      whatsapp: false
   programs:
     related_posts:
       quantity: 4
+  volumes:
+    default_image: false
+
+  # BLOCKS
   blocks:
     gallery:
       splide:
@@ -103,7 +138,7 @@ params:
       hero:
         mobile:   400
         tablet:   800
-        desktop:  900
+        desktop:  750
     blocks:
       call_to_action:
         mobile:   375
@@ -116,7 +151,11 @@ params:
       features:
         mobile:   350
         tablet:   400
-        desktop:  900
+        desktop:  750
+      key_figures:
+        mobile:   100
+        tablet:   100
+        desktop:  150
       image:
         mobile:   480x850
         tablet:   768x1360
@@ -159,21 +198,29 @@ params:
           mobile:   170
           tablet:   350
           desktop:  415
+        large:
+          mobile:   400
+          tablet:   800
+          desktop:  1920
+      programs:
+        mobile:   400
+        tablet:   800
+        desktop:  600 
     sections:
       categories:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         hero_term:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
       diplomas:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         hero_single:
           mobile:   351
           tablet:   456
@@ -182,25 +229,25 @@ params:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
       events:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         hero_single:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         item:
           mobile:   350
           tablet:   450
-          desktop:  900
+          desktop:  750
       organizations:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         logo:
           mobile:   331
           tablet:   196
@@ -213,7 +260,7 @@ params:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         item:
           mobile:   350
           tablet:   990
@@ -222,12 +269,12 @@ params:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
       persons:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         hero_single:
           mobile:   200
           tablet:   200
@@ -240,35 +287,61 @@ params:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         hero_single:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         item:
           mobile:   350
           tablet:   450
-          desktop:  900
-      publications:
+          desktop:  600
+      projects:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
+        hero_single:
+          mobile:   400
+          tablet:   800
+          desktop:  750
+        item:
+          mobile:   350
+          tablet:   450
+          desktop:  600
       programs:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         image:
           mobile:   351x168
           tablet:   456x219
           desktop:  856x410
+      publications:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  750
       volumes:
         hero:
           mobile:   400
           tablet:   800
-          desktop:  900
+          desktop:  750
         item:
           mobile:   327x388
           tablet:   208x247
-          desktop:  300x356
\ No newline at end of file
+          desktop:  300x356
+      locations:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_single:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        item:
+          mobile:   350
+          tablet:   450
+          desktop:  900
\ No newline at end of file
diff --git a/i18n/en.yml b/i18n/en.yml
index 6fd7068d1bc737b29117fa46a7e05f8ef87a8fc7..6e6ab11386480a6e0a629b9c63872e0ad5bf98cc 100644
--- a/i18n/en.yml
+++ b/i18n/en.yml
@@ -4,7 +4,9 @@ blocks:
   categories:
     title: Catégories
     items:
-      count: "{{ .Count }} articles"
+      count: 
+        one: "1 article"
+        other: "{{ .Count }} articles"
   chapter:
     title: Chapter
   contact:
@@ -52,6 +54,7 @@ blocks:
     play: Play video
 categories:
   no_post: No post in this category
+  no_project: No project in this category
   see_more:
     one: See the post
     other: See the {{ .Count }} posts
@@ -128,7 +131,7 @@ commons:
   read: Read
   read_online: Read online
   share: Share
-  toc: Table of content
+  toc: Table of contents
   "yes": "Yes"
   units:
     GB: GB
@@ -141,12 +144,6 @@ commons:
     bytes: bytes
   extensions:
     PDF: Adobe Portable Document Format
-cookie_banner:
-  accept: Accept
-  more: Read more
-  refuse: Refuse
-  text: This site uses cookies to improve the browsing experience and provide additional functionality.
-  title: Cookie banner
 diplomas:
   type: Type de diplôme
 events:
@@ -226,7 +223,7 @@ posts:
   next: Next article
   next_aria: Next article “{{ .Title }}”
   previous: Previous article
-  previous_aria: revious article “{{ .Title }}”
+  previous_aria: Previous article “{{ .Title }}”
   reading_time: Reading time
   see_all: See all posts
   see_all_in_program: See all program's news
@@ -234,9 +231,29 @@ posts:
   share: Please, share
   share_aria: Share on “{{ .Title }}” - extern link
   title: News
+projects:
+  author: Author
+  category:
+    one: Category
+    other: Categories
+  informations: Informations
+  next: Next project
+  next_aria: Next project “{{ .Title }}”
+  previous: Previous project
+  previous_aria: Previous project “{{ .Title }}”
+  reading_time: Reading time
+  see_all: See all posts
+  see_all_in_program: See all program's projects
+  see_all_in_category: See all projects in “{{ .Title }}”
+  share: Please, share
+  share_aria: Share on “{{ .Title }}” - extern link
+  title: Projects
+  year: Year
 programs:
   accessibility: Accessibility
   administrative_information: Administrative information
+  certifications: 
+    qualiopi: Qualiopi, processus certifié, République Française
   contacts: Contacts
   evaluation: Evaluation
   objectives: Objectives
@@ -262,6 +279,7 @@ programs:
   posts: News
   toc:
     admission: Admission
+    certification: Certification
     essential: Essential
     pedagogy: Pedagogy
     presentation: Presentation
@@ -278,6 +296,8 @@ publications:
   citations: Citations
   stats:
     label: publications
+sitemap:
+  pages: Arborescence
 volumes:
   abstract: Abstract
   paper:
diff --git a/i18n/fr.yml b/i18n/fr.yml
index 4b47c0b3a37658a4c8d50b18586a632b26360f62..3012898a19eda4680cbecece12393f81f5c4807a 100644
--- a/i18n/fr.yml
+++ b/i18n/fr.yml
@@ -54,6 +54,7 @@ blocks:
     play: Lancer la vidéo
 categories:
   no_post: Aucun article dans cette catégorie
+  no_project: Aucun projet dans cette catégorie
   see_more:
     one: Voir l'article
     other: Voir les {{ .Count }} articles
@@ -143,12 +144,6 @@ commons:
     bytes: octets
   extentions:
     PDF: Adobe Portable Document Format
-cookie_banner:
-  accept: Accepter
-  more: En savoir plus
-  refuse: Refuser
-  text: Ce site utilise des cookies pour améliorer l’expérience de navigation et fournir des fonctionnalités supplémentaires.
-  title: Bandeau cookie
 diplomas:
   type: Type de diplôme
 events:
@@ -237,9 +232,29 @@ posts:
   share: Partager sur
   share_aria: Partager sur “{{ .Title }}” - lien externe
   title: Actualités
+projects:
+  author: Auteur·rice
+  category:
+    one: Catégorie
+    other: Catégories
+  informations: Informations
+  next: Projet suivant
+  next_aria: Projet suivant “{{ .Title }}”
+  previous: Projet précédent
+  previous_aria: Projet précédent “{{ .Title }}”
+  reading_time: Temps de lecture
+  see_all: Voir toutes les projets
+  see_all_in_program: Voir toutes les projets de la formation
+  see_all_in_category: Voir toutes les projets “{{ .Title }}”
+  share: Partager sur
+  share_aria: Partager sur “{{ .Title }}” - lien externe
+  title: Projets
+  year: Année
 programs:
   accessibility: Accessibilité
   administrative_information: Informations administratives
+  certifications: 
+    qualiopi: Qualiopi, processus certifié, République Française
   contacts: Contacts
   evaluation: Modalités d’évaluation
   objectives: Objectifs
@@ -249,6 +264,10 @@ programs:
   prerequisites: Prérequis
   presentation: En bref
   pricing: Tarifs
+  pricing_initial: Coûts de la formation initiale
+  pricing_continuing: Coûts de la formation continue
+  pricing_apprenticeship: Coûts de l'apprentissage
+  website: Visiter le site web
   registration: Modalités et délais d’accès
   roles: Organisation
   teachers: Enseignants·es
@@ -265,6 +284,7 @@ programs:
   posts: Actualités
   toc:
     admission: Admission
+    certification: Certification
     essential: Essentiel
     pedagogy: Pédagogie
     presentation: Présentation
@@ -281,6 +301,8 @@ publications:
   citations: Citations
   stats:
     label: publications
+sitemap:
+  pages: Arborescence
 volumes:
   abstract: Résumé
   paper:
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 8eb282a99f0f0ac2d2a2c009d7d82ec3b02f6f6c..2c3c7c85349a60d1da23c04d28a1c390dd0ab8e1 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -27,11 +27,10 @@
       {{- partial "hooks/before-main-end" . -}}
     </main>
     {{- partial "footer/footer.html" . -}}
-    {{- partial "footer/cookie-banner.html" . -}}
     {{- partial "footer/plausible.html" . -}}
     {{- partial "footer/js.html" . -}}
     {{- partial "footer/script.html" . -}}
-    {{- if or (not hugo.IsProduction) site.Params.debug -}}
+    {{- if or (not hugo.IsProduction) site.Params.debug.active -}}
       {{- partial "footer/debug.html" . -}}
     {{- end -}}
   </body>
diff --git a/layouts/diplomas/list.html b/layouts/diplomas/list.html
index 549c0d595b7fea69d9333c8fd0c0d866be5e5ea1..242efe4d103d9d448f8a1c8dcdc1e5f38ea6eed0 100644
--- a/layouts/diplomas/list.html
+++ b/layouts/diplomas/list.html
@@ -11,7 +11,7 @@
     {{ partial "contents/list.html" . }}
 
     <div class="container">
-      {{ partial "diplomas/diplomas.html" . }}
+      {{ partial "diplomas/diplomas.html" ( dict "diplomas" .Paginator.Pages ) }}
     </div>
   </div>
 
diff --git a/layouts/events/single.html b/layouts/events/single.html
index f1c4debe5ba46368453b5b81f8d8c7e0c242af38..ce11f636202c46779b48340edc07546781baa3e5 100644
--- a/layouts/events/single.html
+++ b/layouts/events/single.html
@@ -4,8 +4,7 @@
   <div class="document-content" itemscope itemtype="https://schema.org/Event">
     <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
     <meta itemprop="url" content="{{ .Permalink }}">
-    {{ with .Params.summary }}<meta itemprop="abstract" content="{{ . | safeHTML }}">{{ end }}
-    {{ with .Summary }}<meta itemprop="description" content="{{ . | safeHTML }}">{{ end }}
+    {{ with .Params.summary }}<meta itemprop="description" content="{{ . | safeHTML }}">{{ end }}
 
     {{ partial "events/sidebar.html" . }}
 
diff --git a/layouts/locations/list.html b/layouts/locations/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ea776a646b431000e664d03cccbe328db7aec74
--- /dev/null
+++ b/layouts/locations/list.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  {{ partial "locations/hero-list.html" . }}
+
+  <div class="document-content">
+    {{ partial "locations/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
+
+    {{ partial "contents/list.html" . }}
+
+    <div class="container">
+      {{ partial "locations/locations.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
+  </div>
+
+{{ end }}
diff --git a/layouts/locations/term.html b/layouts/locations/term.html
new file mode 100644
index 0000000000000000000000000000000000000000..647b1bfffcfd6d5192e695d639290205be76b875
--- /dev/null
+++ b/layouts/locations/term.html
@@ -0,0 +1,33 @@
+{{ define "main" }}
+  {{ partial "locations/hero-single.html" . }}
+
+  <div class="document-content" itemscope itemtype="https://schema.org/EducationalOrganization">
+    <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
+    <meta itemprop="url" content="{{ .Permalink }}">
+    {{ with .Params.summary }}<meta itemprop="description" content="{{ . | safeHTML }}">{{ end }}
+
+    {{ partial "locations/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
+
+    {{ partial "contents/list.html" . }}
+
+    <div class="container">
+
+      {{ with .Params.diplomas }}
+
+        {{/*  Get diplomas collection from diploma's paths  */}}
+        {{ $diplomas := slice }}
+        {{ range . }}
+          {{ with site.GetPage (printf "/diplomas/%s" .path) }}
+            {{ $diplomas = $diplomas | append . }}
+          {{ end }}
+        {{ end }}
+
+        {{ partial "diplomas/diplomas.html" ( dict "diplomas" $diplomas ) }}
+      {{ end }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
+  </div>
+{{ end }}
diff --git a/layouts/pages/sitemap.html b/layouts/pages/sitemap.html
index a2ad3c7397483f8f2cdca3b257470e0aac0fb793..4ea6d60c8e476efa7389571a2fb266e28d5dbcce 100644
--- a/layouts/pages/sitemap.html
+++ b/layouts/pages/sitemap.html
@@ -21,12 +21,32 @@
 
     {{ partial "contents/list.html" . }}
 
+    <div class="block block-sitemap" id="pages">
+      <div class="container">
+        <div class="block-content">
+          <h2>{{ i18n "sitemap.pages" }}</h2>
+          <ul>
+            {{ range (where .Site.Pages "Type" "pages") }}
+              {{ if eq .Parent.Path "/pages" }}
+                <li>
+                  <a href="{{ .Permalink }}">{{ safeHTML .Title }}</a>
+                  {{ if .Pages }}
+                    {{ partial "pages/sitemap_recursive_pages" .}}
+                  {{ end }}
+                </li>
+              {{ end }}
+            {{ end }}
+          </ul>
+        </div>
+      </div>
+    </div>
+
     {{ range .Site.Sections }}
-      {{ if ne .Type "sitemap" }}
+      {{ if and (ne .Type "sitemap") (ne .Type "pages") }}
         {{ $permalink := .Permalink }}
         <div class="block block-sitemap" id="{{ .Type }}">
           <div class="container">
-            <div class="block-content">
+            <div class="block-content">              
               <h2>
                 <a href="{{ $permalink }}">{{ safeHTML .Title }}</a>
               </h2>
@@ -42,5 +62,6 @@
         </div>
       {{ end }}
     {{ end }}
+
   </div>
 {{ end }}
diff --git a/layouts/partials/H2Extract b/layouts/partials/H2Extract
deleted file mode 100644
index fdf28d8e83e8909c2787a109facdd5fd331cdee0..0000000000000000000000000000000000000000
--- a/layouts/partials/H2Extract
+++ /dev/null
@@ -1,2 +0,0 @@
-{{ $list := findRE "<h2.*?>(.|\n)*?</h2>" . }}
-{{ return $list }}
diff --git a/layouts/partials/blocks/templates/definitions.html b/layouts/partials/blocks/templates/definitions.html
index 64a79a9fc914fd145ad62fea0563e178eaaa8d5e..d61c4ac01e40d80819a2eb1c6eae620bc502bd22 100644
--- a/layouts/partials/blocks/templates/definitions.html
+++ b/layouts/partials/blocks/templates/definitions.html
@@ -8,6 +8,7 @@
         {{ partial "blocks/top.html" (dict
           "title" $block.title
           "heading_level" $block.ranks.self
+          "description" .description
         )}}
         <div class="definitions">
           {{- range .elements }}
diff --git a/layouts/partials/blocks/templates/gallery.html b/layouts/partials/blocks/templates/gallery.html
index c9777aaafc0c754c0dc7cea8587c938c294a5cec..c740d848bb53ceaf2d24840787b4850df71f3d4d 100644
--- a/layouts/partials/blocks/templates/gallery.html
+++ b/layouts/partials/blocks/templates/gallery.html
@@ -14,6 +14,8 @@
 
         {{- if eq $layout "carousel" -}}
           {{ partial "blocks/templates/gallery/carousel" . }}
+        {{- else if eq $layout "large" -}}
+          {{ partial "blocks/templates/gallery/large" . }}
         {{- else -}}
           {{ partial "blocks/templates/gallery/grid" . }}
         {{- end -}}
diff --git a/layouts/partials/blocks/templates/gallery/carousel.html b/layouts/partials/blocks/templates/gallery/carousel.html
index b1b5a396b11049866370b520d64b9a00ce9061f5..0c472729dce6f6e60cab08147a476887d3266fba 100644
--- a/layouts/partials/blocks/templates/gallery/carousel.html
+++ b/layouts/partials/blocks/templates/gallery/carousel.html
@@ -4,7 +4,7 @@
 {{ end }}
 
 {{- if $is_carousel }}
-<div class="splide" role="group" data-splide="{{ site.Params.blocks.gallery.splide | encoding.Jsonify }}">
+<div class="splide" data-splide="{{ site.Params.blocks.gallery.splide | encoding.Jsonify }}">
   <div class="splide__track">
     <div class="splide__list">
 {{ end -}}
@@ -14,21 +14,25 @@
       {{- $image := partial "GetMedia" .file -}}
       {{- if $image -}}
         <figure {{ if $is_carousel }} class="splide__slide"{{ end }}>
+          {{ partial "commons/image.html"
+            (dict
+              "image"    .id
+              "alt"      .alt
+              "sizes"    site.Params.image_sizes.blocks.gallery.carousel
+            )}}
           {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
+            {{ $lightbox_text := false }}
+            {{ if and .text .credit }}
+              {{ $lightbox_text = delimit (slice .text .credit) " / " }}
+            {{ else }}
+              {{ $lightbox_text = or .text .credit }}
+            {{ end }}
             <a  class="glightbox"
                 role="button"
-                data-glightbox="type: image;{{ if .credit }}description: {{ partial "PrepareHTML" .credit }}{{ end }}"
+                data-glightbox="type: image;{{ with $lightbox_text }}description: {{ partial "PrepareHTML" . }}{{ end }}"
                 href="{{ partial "GetLightboxUrl" (dict "id" .id) }}"
                 title="{{- i18n "commons.lightbox.link.title" -}}"
                 aria-label="{{- i18n "commons.lightbox.link.title" -}}">
-          {{ end }}
-              {{ partial "commons/image.html"
-                (dict
-                  "image"    .id
-                  "alt"      .alt
-                  "sizes"    site.Params.image_sizes.blocks.gallery.carousel
-                )}}
-          {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
             </a>
           {{ end }}
           {{ if or .text .credit }}
diff --git a/layouts/partials/blocks/templates/gallery/grid.html b/layouts/partials/blocks/templates/gallery/grid.html
index afffc61150c5e274c053a8019b729c94f261672b..dc777bd3d947eeaa34ccdce1c58bca0fbe77e800 100644
--- a/layouts/partials/blocks/templates/gallery/grid.html
+++ b/layouts/partials/blocks/templates/gallery/grid.html
@@ -4,12 +4,18 @@
     {{- $has_text = true -}}
   {{ end -}}
 {{ end -}}
-<div class="gallery{{- if $has_text }} gallery--with-text {{ end -}}" role="group">
+<div class="gallery{{- if $has_text }} gallery--with-text {{ end -}}">
   {{ range .images }}
     {{ if .id }}
       {{- $image := partial "GetMedia" .id -}}
       {{- if $image -}}
         <figure>
+          {{ partial "commons/image.html"
+            (dict
+              "image"    .file
+              "alt"      .alt
+              "sizes"    site.Params.image_sizes.blocks.gallery.grid
+            )}}
           {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
             {{ $lightbox_text := false }}
             {{ if and .text .credit }}
@@ -19,18 +25,10 @@
             {{ end }}
             <a  class="glightbox"
                 role="button"
-                data-glightbox="type: image; {{ if $lightbox_text }}description: {{ partial "PrepareText" $lightbox_text }}{{ end }}"
+                data-glightbox="type: image; {{ with $lightbox_text }}description: {{ . | safeHTML }}{{ end }}"
                 href="{{ partial "GetLightboxUrl" (dict "id" .id) }}"
                 title="{{- i18n "commons.lightbox.link.title" -}}"
                 aria-label="{{- i18n "commons.lightbox.link.title" -}}">
-          {{ end }}
-            {{ partial "commons/image.html"
-              (dict
-                "image"    .file
-                "alt"      .alt
-                "sizes"    site.Params.image_sizes.blocks.gallery.grid
-              )}}
-          {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
             </a>
           {{ end }}
           {{ with .text }}
diff --git a/layouts/partials/blocks/templates/gallery/large.html b/layouts/partials/blocks/templates/gallery/large.html
new file mode 100644
index 0000000000000000000000000000000000000000..742b6f5a945554aaa321f075f1d043e08c93e32a
--- /dev/null
+++ b/layouts/partials/blocks/templates/gallery/large.html
@@ -0,0 +1,44 @@
+<div class="gallery">
+  {{ range .images }}
+    {{ if .id }}
+      {{- $image := partial "GetMedia" .id -}}
+      {{- $image_class := printf "image-%s" (partial "GetImageDirection" .) -}}
+      {{- if $image -}}
+        <figure class="{{ $image_class  }}">
+          {{ partial "commons/image.html"
+            (dict
+              "image"    .file
+              "alt"      .alt
+              "sizes"    site.Params.image_sizes.blocks.gallery.large
+            )}}
+          {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
+            {{ $lightbox_text := false }}
+            {{ if and .text .credit }}
+              {{ $lightbox_text = delimit (slice .text .credit) " | " }}
+            {{ else if or .text .credit }}
+              {{ $lightbox_text = or .text .credit }}
+            {{ end }}
+            
+            <a  class="glightbox"
+                role="button"
+                data-glightbox="type: image; {{ with $lightbox_text }}description: {{ . | safeHTML }}{{ end }}"
+                href="{{ partial "GetLightboxUrl" (dict "id" .id) }}"
+                title="{{- i18n "commons.lightbox.link.title" -}}"
+                aria-label="{{- i18n "commons.lightbox.link.title" -}}">
+            </a>
+          {{ end }}
+          {{ if or .text .credit }}
+            <figcaption>
+              {{ with .text }}
+                <p>{{ . | safeHTML }}</p>
+              {{ end }}
+              {{ with .credit }}
+                <div class="credit">{{ . | safeHTML }}</div>
+              {{ end }}
+            </figcaption>
+          {{ end }}
+        </figure>
+      {{- end -}}
+    {{ end }}
+  {{ end }}
+</div>
diff --git a/layouts/partials/blocks/templates/key_figures.html b/layouts/partials/blocks/templates/key_figures.html
index 2451c75b2cc4a6077d1f24b728eed6baa95957d9..33470c53bff1bb36e6cd64f1a2d0543851f75fb6 100644
--- a/layouts/partials/blocks/templates/key_figures.html
+++ b/layouts/partials/blocks/templates/key_figures.html
@@ -21,7 +21,16 @@
             {{- range .figures }}
               <li>
                 <dl>
-                  <dt><strong>{{ .number }}</strong>{{ partial "PrepareHTML" .unit }}</dt>
+                  <dt>
+                    {{ with .image }}
+                      {{ partial "commons/image.html"
+                        (dict
+                          "image"    .
+                          "sizes"    site.Params.image_sizes.blocks.key_figures
+                        )}}
+                    {{ end }}
+                    <strong>{{ .number }}</strong>{{ partial "PrepareHTML" .unit }}
+                  </dt>
                   <dd>{{ partial "PrepareHTML" .description }}</dd>
                 </dl>
               </li>
diff --git a/layouts/partials/blocks/templates/locations.html b/layouts/partials/blocks/templates/locations.html
new file mode 100644
index 0000000000000000000000000000000000000000..2bd4ba1f7b2fa96228c389b0e7927bf29917afb0
--- /dev/null
+++ b/layouts/partials/blocks/templates/locations.html
@@ -0,0 +1,30 @@
+{{ $block := .block }}
+{{ $block_class := partial "GetBlockClass" .block }}
+{{ $layout := .block.data.layout | default "grid" }}
+
+{{- with .block.data -}}
+  <div class="{{ $block_class }}">
+    <div class="container">
+      <div class="block-content">
+        {{ partial "blocks/top.html" (dict
+          "title" $block.title
+          "description" .description
+          "heading_level" $block.ranks.self
+        )}}
+
+        <div class="locations locations--{{- $layout }}">
+          {{ $location_heading := printf "h%d" ( $block.ranks.children | default 2 ) }}
+          {{ range .locations }}
+            {{ $location := site.GetPage ( printf "/locations/%s" .slug ) }}
+            {{ with $location }}
+              {{ partial "locations/location.html" (dict 
+                "location" .
+                "heading" $location_heading
+              ) }}
+            {{ end }}
+          {{ end }}
+        </div>
+      </div>
+    </div>
+  </div>
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/pages.html b/layouts/partials/blocks/templates/pages.html
index 64394a082c26a6abd62fc1415e37fdb721eeb2ce..ee6e9a41ab919d2b0d9de97fe15b5fb629adf654 100644
--- a/layouts/partials/blocks/templates/pages.html
+++ b/layouts/partials/blocks/templates/pages.html
@@ -22,7 +22,7 @@
       {{ $title = .Title }}
     {{ end }}
     {{ if .Params.bodyclass }}
-      {{- $page_class = printf "block-page-%s" .Params.bodyclass }}
+      {{- $page_class = printf "block-%s" .Params.bodyclass }}
     {{ end }}
     {{ if $show_main_description }}
       {{- $main_description = partial "GetTruncateContent" ( dict 
diff --git a/layouts/partials/blocks/templates/pages/list.html b/layouts/partials/blocks/templates/pages/list.html
index 0314906c6715a009eeeb5ec398ccc1e117bec5c7..78de5201cf12bb1fd055270cbbb8cd539b678f01 100644
--- a/layouts/partials/blocks/templates/pages/list.html
+++ b/layouts/partials/blocks/templates/pages/list.html
@@ -7,7 +7,15 @@
 )}}
 <ul class="list {{ if and (not $show_descriptions) (not $show_images) }} title-only {{ end }}">
   {{ range .pages }}
-    {{ $page := site.GetPage .file }}
+    {{- $file := false -}}
+    {{/*  Check if . is a map or page url, necessary when pages/list is called outside block context */}}
+    {{ if reflect.IsMap . }}
+      {{ $file = .file }}
+    {{ else }}
+      {{ $file = . }}
+    {{ end }}
+
+    {{ $page := site.GetPage $file }}
     {{ with $page }}
       <li>
         {{ if or $show_descriptions $show_images }}
diff --git a/layouts/partials/blocks/templates/posts/carousel.html b/layouts/partials/blocks/templates/posts/carousel.html
new file mode 100644
index 0000000000000000000000000000000000000000..df63993734923de3d7540d0fe99b159564eb0ca0
--- /dev/null
+++ b/layouts/partials/blocks/templates/posts/carousel.html
@@ -0,0 +1,24 @@
+{{ $heading_level := .heading_level | default 3 }}
+{{ $heading := printf "h%d" $heading_level }}
+
+<div class="carousel draggable-container">
+  <div class="carousel-posts draggable-content">
+    <ul class="posts">
+      {{ range $post := .posts -}}
+        {{ with site.GetPage (printf "/posts/%s" $post) }}
+        <li class="draggable-item">
+          {{ partial "posts/post.html" (dict 
+            "post" . 
+            "heading" $heading) }}
+        </li>
+        {{ end }}
+      {{ end }}
+    </ul>
+    {{ if  (gt (len .posts) 0) }}
+      <div class="actions-arrows">
+        <button class="previous" disabled title="{{ i18n "blocks.timeline.previous"}}"></button>
+        <button class="next" title="{{ i18n "blocks.timeline.next"}}"></button>
+      </div>
+    {{ end }}
+  </div>
+</div>
diff --git a/layouts/partials/blocks/templates/posts/highlight.html b/layouts/partials/blocks/templates/posts/highlight.html
index ee6b189ed7612f824693239de569c59ff50f96e4..082a9b00f2c5d48cb468781fbf64f38f4ee89c2f 100644
--- a/layouts/partials/blocks/templates/posts/highlight.html
+++ b/layouts/partials/blocks/templates/posts/highlight.html
@@ -1,7 +1,7 @@
 {{ $heading_level := .heading_level | default 3 }}
 {{ $heading := printf "h%d" $heading_level }}
 {{ $heading_tag := (dict 
-  "open" ((printf "<%s itemprop='headline'>" $heading) | safeHTML)
+  "open" ((printf "<%s class='post-title' itemprop='headline'>" $heading) | safeHTML)
   "close" ((printf "</%s>" $heading) | safeHTML)
   ) }}
 <div class="highlight">
diff --git a/layouts/partials/blocks/templates/posts/large.html b/layouts/partials/blocks/templates/posts/large.html
index c76b4099268d0bcf105844a2e217d8e847e8ef25..c434aa6606cf8706eff3be0506158ea2354b1bcd 100644
--- a/layouts/partials/blocks/templates/posts/large.html
+++ b/layouts/partials/blocks/templates/posts/large.html
@@ -2,7 +2,7 @@
 {{ $heading_level := .heading_level | default 3 }}
 {{ $heading_tag := partial "GetHeadingTag" (dict 
         "level" $heading_level
-        "attributes" "class='post-title'"
+        "attributes" "class='post-title' itemprop='headline'"
 )}}
 {{ $index := .index}}
 
diff --git a/layouts/partials/blocks/templates/programs.html b/layouts/partials/blocks/templates/programs.html
index 7170738aedbe15daf0a14c1e71a1d7db52748f09..f534588412f9878c007db95c1f86e972a1713d02 100644
--- a/layouts/partials/blocks/templates/programs.html
+++ b/layouts/partials/blocks/templates/programs.html
@@ -1,5 +1,10 @@
 {{- $block := .block -}}
 {{- $block_class := partial "GetBlockClass" .block -}}
+{{ $heading := .heading | default "h3" }}
+{{ $heading_tag := (dict 
+    "open" ((printf "<%s itemprop='name'>" $heading) | safeHTML)
+    "close" ((printf "</%s>" $heading) | safeHTML)
+    ) }}
 
 {{- with .block.data -}}
   <div class="{{ $block_class }}">
@@ -10,18 +15,57 @@
           "heading_level" $block.ranks.self
         )}}
 
-        <ol class="programs">
-          {{- range .programs -}}
-            <li>
+        {{- if eq $block.data.layout "grid" -}}
+
+          <div class="programs-grid">
+            {{- range .programs -}}
               {{ $program := site.GetPage (printf "/programs%s" .path) }}
-              {{- $title := partial "PrepareHTML" $program.Title -}}
-              <a href="{{ $program.Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
-                {{- $title -}}
-              </a>
-            </li>
-          {{ end }}
-        </ol>
+              {{ $title := $program.Title | safeHTML }}
+              <article itemscope itemtype="https://schema.org/EducationalOccupationalProgram">
+                <div class="program-content">
+                  {{ $heading_tag.open }}
+                    <a href="{{ $program.Permalink }}" itemtype="url" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
+                      {{- $title -}}
+                    </a>
+                  {{ $heading_tag.close }}
+
+                  {{ with  $program.Params.summary | safeHTML}}
+                    <p itemprop="abstract">{{ . }}</p>
+                  {{ end }}
+
+                  <p class="more meta" aria-hidden="true">{{- i18n "commons.more" -}}</p>
+                </div>
+
+                {{- if $program.Params.image -}}
+                  <div class="media">
+                    {{- partial "commons/image.html"
+                        (dict
+                          "image"    $program.Params.image
+                          "sizes"    site.Params.image_sizes.blocks.programs
+                        ) -}}
+                  </div>
+                {{- end -}}
+
+              </article>
+            {{ end }}
+          </div>
+
+        {{- else -}}
+
+          <ol class="programs">
+            {{- range .programs -}}
+              <li>
+                {{ $program := site.GetPage (printf "/programs%s" .path) }}
+                {{- $title := partial "PrepareHTML" $program.Title -}}
+                <a href="{{ $program.Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
+                  {{- $title -}}
+                </a>
+              </li>
+            {{ end }}
+          </ol>
+
+        {{- end -}}
       </div>
     </div>
   </div>
-{{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/projects.html b/layouts/partials/blocks/templates/projects.html
new file mode 100644
index 0000000000000000000000000000000000000000..126f09b24cd66b91c59e46592744c996b09f954e
--- /dev/null
+++ b/layouts/partials/blocks/templates/projects.html
@@ -0,0 +1,22 @@
+{{- $block := .block -}}
+{{- $block_title := .block.title -}}
+{{- $block_class := partial "GetBlockClass" .block -}}
+{{- $layout := "grid" -}}
+
+{{- with .block.data -}}
+  <div class="{{ $block_class }}">
+    <div class="container">
+      <div class="block-content">
+        {{ partial "blocks/top.html" (dict
+          "title" $block_title
+          "heading_level" $block.ranks.self
+        ) }}
+
+        {{- partial (printf "blocks/templates/projects/%s.html" $layout) (dict 
+          "projects" .projects
+          "heading_level" $block.ranks.children
+        ) }}
+      </div>
+    </div>
+  </div>
+{{- end -}}
diff --git a/layouts/partials/blocks/templates/projects/grid.html b/layouts/partials/blocks/templates/projects/grid.html
new file mode 100644
index 0000000000000000000000000000000000000000..23ccf769a376c88b7d98e41a92aed02d1e75887f
--- /dev/null
+++ b/layouts/partials/blocks/templates/projects/grid.html
@@ -0,0 +1,12 @@
+{{ $heading_level := .heading_level | default 3 }}
+{{ $heading := printf "h%d" $heading_level }}
+<div class="grid">
+  {{ range $project := .projects -}}
+    {{ with site.GetPage .file }}
+      {{ partial "projects/project.html" (dict 
+        "project" .
+        "heading" $heading
+        ) }}
+    {{ end }}
+  {{ end }}
+</div>
diff --git a/layouts/partials/blocks/templates/projects/list.html b/layouts/partials/blocks/templates/projects/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..70667caeaa211375bdcdfc771353dbe57f2bbaf9
--- /dev/null
+++ b/layouts/partials/blocks/templates/projects/list.html
@@ -0,0 +1,12 @@
+{{ $heading_level := .heading_level | default 3 }}
+{{ $heading := printf "h%d" $heading_level }}
+<div class="list">
+  {{ range $project := .projects -}}
+    {{ with site.GetPage .file }}
+      {{ partial "projects/project.html" (dict 
+        "project" .
+        "heading" $heading
+        ) }}
+    {{ end }}
+  {{ end }}
+</div>
diff --git a/layouts/partials/blocks/templates/timeline/horizontal.html b/layouts/partials/blocks/templates/timeline/horizontal.html
index d029f0918ec243f4c7170b778dfb1699ddee3e72..f01f6a60a07b1f03aa4858cce20e5d0dd9165299 100644
--- a/layouts/partials/blocks/templates/timeline/horizontal.html
+++ b/layouts/partials/blocks/templates/timeline/horizontal.html
@@ -4,13 +4,12 @@
   "attributes" "class='title'"
   ) -}}
 
-<div class="timeline">
+<div class="timeline draggable-container">
   {{ with .block.data }}
-    <div class="timeline-events">
+    <div class="timeline-events draggable-content">
       <ol>
         {{ range .events }}
-          <li class="timeline-event">
-
+          <li class="timeline-event draggable-item">
             {{ $heading_tag.open -}}
               {{ .title | safeHTML }}
             {{ $heading_tag.close -}}
@@ -20,7 +19,7 @@
         {{ end }}
       </ol>
       {{ if  (gt (len .events) 0) }}
-        <div class="timeline-arrows">
+        <div class="actions-arrows">
           <button class="previous" disabled title="{{ i18n "blocks.timeline.previous"}}"></button>
           <button class="next" title="{{ i18n "blocks.timeline.next"}}"></button>
         </div>
diff --git a/layouts/partials/commons/image-default.html b/layouts/partials/commons/image-default.html
index edfcc8229ec80e3f3d809709dff10153603ab5e9..302c39f770dae54aded02bcfa11b25aac74397ed 100644
--- a/layouts/partials/commons/image-default.html
+++ b/layouts/partials/commons/image-default.html
@@ -6,7 +6,6 @@
   {{ with index site.Params.image_sizes.sections $section_type }}
     {{ $sizes := .item }}
 
-    {{ $sizes }}
     {{- partial "commons/image.html"
         (dict
           "image"    $image
diff --git a/layouts/partials/commons/image.html b/layouts/partials/commons/image.html
index a88fbe2a45d99fff354c76dc3848f9a4607bedc7..6336a732e6d87fded2ea263d6c834657eddd0c1c 100644
--- a/layouts/partials/commons/image.html
+++ b/layouts/partials/commons/image.html
@@ -24,69 +24,59 @@
     {{- if .crop -}}
       {{- $crop = true -}}
     {{- end -}}
-    {{ $desktop := .desktop }}
-    {{ $tablet := .tablet }}
-    {{ $mobile := .mobile }}
-    {{- if .sizes -}}
-      {{ $desktop = .sizes.desktop }}
-      {{ $tablet = .sizes.tablet }}
-      {{ $mobile = .sizes.mobile }}
-    {{- end -}}
     {{ $is_svg := strings.HasSuffix $image.name "svg" }}
     <picture {{ if $is_svg }}class="is-svg"{{ end }}>
 
       {{- if strings.HasSuffix $image.name "svg" -}}
 
         <img src="{{ partial "GetImageUrl" (dict "url" $url) }}"
-             alt="{{ chomp (plainify $alt) }}"
-             {{ if $width }}width="{{ $width }}"{{ end }}
-             {{ if $height }}height="{{ $height }}"{{ end }}
-             {{- if .class }} class="{{ .class }}"{{- end -}}
-             {{- if $lazy }} loading="lazy"{{- end -}}
-             {{- if .itemprop }} itemprop="image"{{- end -}}
-             >
+            alt="{{ chomp (plainify $alt) }}"
+            {{ if $width }}width="{{ $width }}"{{ end }}
+            {{ if $height }}height="{{ $height }}"{{ end }}
+            {{- if .class }} class="{{ .class }}"{{- end -}}
+            {{- if $lazy }} loading="lazy"{{- end -}}
+            {{- if .itemprop }} itemprop="image"{{- end -}}
+            >
 
       {{- else -}}
 
-        {{ with $desktop -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop ) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x"
-                        media="(min-width: 1024px)" type="image/webp">
-        {{- end }}
-        {{ with $tablet -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x"
-                        media="(min-width: 768px)" type="image/webp">
-        {{- end }}
-        {{ with $mobile -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x"
-                        type="image/webp">
+        {{ with .sizes.desktop -}}
+          <source media="(min-width: 1024px)"
+                  type="image/webp"
+                  srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop ) }},
+                          {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x">
+          <source media="(min-width: 1024px)" 
+                  srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
+                          {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x">
         {{- end }}
-        {{ with $desktop -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x"
-                        media="(min-width: 1024px)">
-        {{- end }}
-        {{ with $tablet -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x"
-                        media="(min-width: 768px)">
+
+        {{ with .sizes.tablet -}}
+          <source media="(min-width: 768px)"
+                  type="image/webp"
+                  srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop) }},
+                          {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x">
+          <source media="(min-width: 768px)"
+                  srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
+                          {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x">
         {{- end }}
-        {{ with $mobile -}}
-        <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
-                        {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x">
+
+        {{ with .sizes.mobile -}}
+          <source type="image/webp"
+                  srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "crop" $crop) }},
+                          {{ partial "GetImageUrl" (dict "url" $url "size" . "format" "webp" "scale" 2 "crop" $crop) }} 2x">
+          <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
+                      {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x">
         {{- end }}
-        <img src="{{ partial "GetImageUrl" (dict "url" $url "size" $default "crop" $crop ) }}"
-             alt="{{ chomp (plainify $alt) }}"
-             width="{{ $width }}"
-             height="{{ $height }}"
-             {{- if .class }} class="{{ .class }}"{{- end -}}
-             {{- if $lazy }} loading="lazy"{{- end -}}
-             {{- if .itemprop }} itemprop="image"{{- end -}}
-             >
 
+        <img src="{{ partial "GetImageUrl" (dict "url" $url "size" $default "crop" $crop ) }}"
+              alt="{{ chomp (plainify $alt) }}"
+              width="{{ $width }}"
+              height="{{ $height }}"
+              {{- if .class }} class="{{ .class }}"{{- end -}}
+              {{- if $lazy }} loading="lazy"{{- end -}}
+              {{- if .itemprop }} itemprop="image"{{- end -}}>
       {{- end -}}
+
     </picture>
   {{- end -}}
-{{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/commons/logo.html b/layouts/partials/commons/logo.html
new file mode 100644
index 0000000000000000000000000000000000000000..8fb88532d8784c3054596b51da77163317e4b5c2
--- /dev/null
+++ b/layouts/partials/commons/logo.html
@@ -0,0 +1,22 @@
+{{ $logo := . }}
+{{ $file := false}}
+{{ $file_darkmode := false }}
+{{ if eq (printf "%T" $logo) "string" }}
+  {{ $file = $logo }}
+{{ else }}
+  {{ $file = $logo.default }}
+  {{ $file_darkmode = $logo.darkmode }}
+{{ end }}
+
+<a class="logo {{- if $file_darkmode }} with-darkmode {{ end -}}" href="{{ site.Home.Permalink }}">
+  {{ if $file }}
+    {{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
+    <img src="{{ $file }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}">
+    {{ if $file_darkmode }}
+      {{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file_darkmode "static" true) }}
+      <img class="logo-darkmode" src="{{ $file_darkmode }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}">
+    {{ end }}
+  {{ else }}
+    <span class="logo-text">{{ site.Title }}</span>
+  {{ end }}
+</a>
\ No newline at end of file
diff --git a/layouts/partials/commons/pagination.html b/layouts/partials/commons/pagination.html
index 8769cb92df6e931c4cf8f73d0a58a621b134f5a1..8bfc1e658433d32e45cd87c20ed1509fd19b1ad7 100644
--- a/layouts/partials/commons/pagination.html
+++ b/layouts/partials/commons/pagination.html
@@ -1,7 +1,7 @@
 {{- $paginator := .Paginator -}}
 
 <!-- Number of links either side of the current page. -->
-{{- $adjacent_links := 2 -}}
+{{- $adjacent_links := 1 -}}
 
 <!-- $max_links = ($adjacent_links * 2) + 1 -->
 {{- $max_links := (add (mul $adjacent_links 2) 1) -}}
diff --git a/layouts/partials/diplomas/diplomas.html b/layouts/partials/diplomas/diplomas.html
index 0c15a8d06e4c969510d6100de26fdc6a3230a16d..e15146e49d719a4925560bcce729babe74d590cd 100644
--- a/layouts/partials/diplomas/diplomas.html
+++ b/layouts/partials/diplomas/diplomas.html
@@ -1,5 +1,7 @@
+{{ $diplomas := .diplomas }}
+
 <ul class="diplomas">
-  {{ range .Paginator.Pages }}
+  {{ range $diplomas }}
     <li>
       <a href="{{ .Permalink }}" aria-label="{{ i18n "commons.more_aria" (dict "Title" .Title) }}">
         {{- partial "PrepareHTML" .Title -}}
@@ -21,6 +23,7 @@
         </ol>
       </div>
     </li>
+
   {{ end }}
 </ul>
 
diff --git a/layouts/partials/diplomas/essential.html b/layouts/partials/diplomas/essential.html
index 2f83ffad344502b63f05ccfd6f3402a52f84cdd9..63ee13a5a7130c9029a27ea1bf396ed924984bab 100644
--- a/layouts/partials/diplomas/essential.html
+++ b/layouts/partials/diplomas/essential.html
@@ -1,16 +1,18 @@
-{{- with . -}}
-  <dl class="essential">
-    {{- if .Params.level -}}
-      <dt>{{ i18n "programs.level" }}</dt>
-      <dd>{{ partial "PrepareHTML" .Params.level }}</dd>
-    {{- end -}}
-    {{- if .Params.duration -}}
-      <dt>{{ i18n "programs.duration" }}</dt>
-      <dd>{{ partial "PrepareHTML" .Params.duration }}</dd>
-    {{- end -}}
-    {{- if .Params.ects -}}
-      <dt>{{ i18n "programs.ects_credits" }}</dt>
-      <dd>{{ partial "PrepareHTML" .Params.ects }}</dd>
-    {{- end -}}
-  </dl>
-{{- end -}}
+<div class="essential-container" id="#{{ urlize (i18n "programs.toc.essential") }}">
+  <div class="container">
+    <dl class="essential">
+      {{- if .Params.level -}}
+        <dt>{{ i18n "programs.level" }}</dt>
+        <dd>{{ partial "PrepareHTML" .Params.level }}</dd>
+      {{- end -}}
+      {{- if .Params.duration -}}
+        <dt>{{ i18n "programs.duration" }}</dt>
+        <dd>{{ partial "PrepareHTML" .Params.duration }}</dd>
+      {{- end -}}
+      {{- if .Params.ects -}}
+        <dt>{{ i18n "programs.ects_credits" }}</dt>
+        <dd>{{ partial "PrepareHTML" .Params.ects }}</dd>
+      {{- end -}}
+    </dl>
+  </div>
+</div>
\ No newline at end of file
diff --git a/layouts/partials/diplomas/hero-single.html b/layouts/partials/diplomas/hero-single.html
index c45f7fb492f4beff68e818d18d512630ca48d1ca..b6b5481cdd7bd4a0dbb4764e514b5f8a9c3133dc 100644
--- a/layouts/partials/diplomas/hero-single.html
+++ b/layouts/partials/diplomas/hero-single.html
@@ -1,60 +1,9 @@
-{{- $breadcrumb_is_after_hero := eq site.Params.breadcrumb.position "after-hero" -}}
 {{- $title := or .Params.header_text .Title -}}
-{{ $subtitle := "" }}
-{{- $summary := .Params.summary | safeHTML -}}
-{{ if and (eq site.Params.summary.position "hero") $summary }}
-  {{ $subtitle = $summary }}
-{{ end }}
-
-<header class="hero {{ if $breadcrumb_is_after_hero -}} hero--no-margin {{- end }}">
-  <div class="container">
-    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
-      {{- if .Params.breadcrumb | default true -}}
-        {{ partial "header/breadcrumbs.html" . }}
-      {{- end -}}
-    {{- end -}}
-    <div class="content">
-      {{- if $subtitle -}}
-        <hgroup>
-          <h1>{{ partial "PrepareHTML" $title }}</h1>
-          <p class="lead">{{ partial "PrepareHTML" $subtitle }}</p>
-        </hgroup>
-      {{- else -}}
-        <h1>{{ partial "PrepareHTML" $title }}</h1>
-      {{- end -}}
-      {{- if .Params.image }}
-        <figure>
-          {{ partial "commons/image.html"
-            (dict
-              "image"    .image
-              "sizes"    site.Params.image_sizes.sections.diplomas.hero_single
-            ) }}
-          {{ if .image.credit }}
-            <figcaption>
-              {{- partial "PrepareHTML" .image.credit -}}
-            </figcaption>
-          {{ end }}
-        </figure>
-      {{ end -}}
-    </div>
-  </div>
-  <div class="essential-container" id="#{{ urlize (i18n "programs.toc.essential") }}">
-    <div class="container">
-      {{- partial "diplomas/essential" . -}}
-    </div>
-  </div>
-
-  {{- if eq site.Params.breadcrumb.position "hero-end" -}}
-    {{- if .Params.breadcrumb | default true -}}
-      {{ partial "header/breadcrumbs.html" . }}
-    {{- end -}}
-  {{- end -}}
-</header>
-
-{{- if $breadcrumb_is_after_hero -}}
-  {{- if .Params.breadcrumb | default true -}}
-    <div class="container breadcrumb-container">
-      {{ partial "header/breadcrumbs.html" . }}
-    </div>
-  {{- end -}}
-{{- end -}}
\ No newline at end of file
+{{ partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.home.hero
+        "context" .
+        "hero_complement" "diplomas/essential.html"
+      )}}
diff --git a/layouts/partials/events/event.html b/layouts/partials/events/event.html
index cc57c58597762a4ecb8d99815e4596e3117f08a2..c8aa12298368a113b958f2bb4353c25dd976dbc1 100644
--- a/layouts/partials/events/event.html
+++ b/layouts/partials/events/event.html
@@ -41,7 +41,7 @@
           {{ end -}}
         </div>
       {{ end }}
-      {{ if and .Params.events_categories $show_status }}
+      {{ if and .Params.dates.status $show_status }}
         <p class="event-status">
           {{ if eq .Params.dates.status "current"}}
             {{- i18n "blocks.events.current" -}}
@@ -62,21 +62,21 @@
                 "length" site.Params.events.index.truncate_description
                 ) }}
             </p>
+
+            {{ if eq $layout "large" }}
+              <p class="more meta" aria-hidden="true">{{- i18n "commons.more" -}}</p>
+            {{ end }}
           </div>
         {{- end -}}
-        
-        {{ if and .Params.events_categories $show_category }}
-          <p class="event-categories">
-            {{- range $index, $category := .GetTerms "events_categories" -}}
-              <span>{{- $category.Title -}}</span>
-            {{- end -}}
-          </p>
-        {{ end }}
-      {{- end -}}
-
-      {{ if eq $layout "large" }}
-        <p class="more meta" aria-hidden="true">{{- i18n "commons.more" -}}</p>
       {{ end }}
+
+      {{ if and .Params.events_categories $show_category }}
+        <p class="event-categories">
+          {{- range $index, $category := .GetTerms "events_categories" -}}
+            <span>{{- $category.Title -}}</span>
+          {{- end -}}
+        </p>
+      {{- end -}}
     </div>
     <div class="media">
       {{- if .Params.image -}}
diff --git a/layouts/partials/footer/cookie-banner.html b/layouts/partials/footer/cookie-banner.html
deleted file mode 100644
index 9e70b81c0464933655c3db54bd58442f45108e9e..0000000000000000000000000000000000000000
--- a/layouts/partials/footer/cookie-banner.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{{ if site.Params.cookie_banner.enable }}
-  <div class="gdpr-cookie-consent js-gdpr-cookie-consent" tabindex="-1" role="dialog" aria-label="{{ i18n "cookie_banner.label" }}">
-    <div>
-      <p>
-        {{ i18n "cookie_banner.text" }}
-        <a href="{{ site.Params.cookie_banner.page | default "https://gdpr.eu/cookies/" }}"{{ if site.Params.cookie_banner.blank }} target="_blank" ref="noopener"{{ end }}>{{ i18n "cookie_banner.more" }}</a>
-      </p>
-    </div>
-    <div role="group">
-      <button type="button" class="js-gdpr-cookie-consent-btn-ok">{{ i18n "cookie_banner.accept" }}</button>
-      <button type="button" class="js-gdpr-cookie-consent-btn-ko">{{ i18n "cookie_banner.refuse" }}</button>
-    </div>
-  </div>
-{{ end }}
diff --git a/layouts/partials/footer/debug.html b/layouts/partials/footer/debug.html
index fb2fa584fa76cbd6ef6d3f389a1d8cf826751aa5..ed9ccda3fa809a7848866fb727fb1f5c00dcfcae 100644
--- a/layouts/partials/footer/debug.html
+++ b/layouts/partials/footer/debug.html
@@ -1,3 +1,37 @@
+<div class="d-help">
+  <a href="#help">
+    <img src="/osuny/icon.png" alt="Aide Osuny" class="d-help__icon" />
+  </a>
+  <div class="d-help__content" id="help">
+    <table>
+      <thead>
+        <tr>
+          <th>Action</th>
+          <th>Raccourci</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>Afficher la grille</td>
+          <td>Ctrl + g</td>
+        </tr>
+        <tr>
+          <td>Passer d’une page pleine largeur à une page avec barre latérale, et inversement</td>
+          <td>Ctrl + w</td>
+        </tr>
+        <tr>
+          <td>Contrôler les dimensions des images chargées</td>
+          <td>Ctrl + i</td>
+        </tr>
+        <tr>
+          <td>Ouvre la page en production, si dans config.yaml debug.productionUrl est spécifié</td>
+          <td>Ctrl + p</td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
+
 <div class="d-grid">
   <div>1</div>
   <div>2</div>
@@ -14,16 +48,37 @@
 </div>
 
 <div class="d-spacing">
-  <div><span>0 (12px) </span></div>
-  <div><span>1 (24px) </span></div>
-  <div><span>2 (48px) </span></div>
-  <div><span>3 (64px) </span></div>
-  <div><span>4 (128px) </span></div>
-  <div><span>5 (256px) </span></div>
+  <div><span>1 (8px) </span></div>
+  <div><span>2 (12px) </span></div>
+  <div><span>3 (24px) </span></div>
+  <div><span>4 (48px) </span></div>
+  <div><span>5 (64px) </span></div>
+  <div><span>6 (128px) </span></div>
+  <div><span>7 (256px) </span></div>
 </div>
 
 <div class="d-cross"></div>
 <style>
+  .d-help__content {
+    display: none;
+    background: #EEEEEE;
+    border-radius: 24px;
+    position: fixed;
+    width: 600px;
+    bottom: 10px;
+    left: 10px;
+    padding: 10px 20px 60px;
+  }
+  .d-help__content:target {
+    display: block;
+  }
+  .d-help__icon {
+    bottom: 10px;
+    left: 10px;
+    position: fixed;
+    width: 40px;
+    z-index: 1000;
+  }
   .d-grid {
     bottom: 0;
     display: none;
@@ -49,10 +104,6 @@
   }
   .d-grid > div {
     background: fuchsia;
-    /*
-    border-left: 1px solid yellow;
-    border-right: 1px solid yellow; 
-    */
     text-align: center;
   }
   .d-spacing {
@@ -63,8 +114,7 @@
     left: 0;
     pointer-events: none;
     width: 100%;
-    mix-blend-mode: difference;
-    opacity: 0.3;
+    opacity: 0.5;
     font-family: sans-serif;
     font-size: 12px;
   }
@@ -76,35 +126,39 @@
   }
   .d-spacing > div span {
     position: absolute;
+    color: var(--color-text);
   }
   .d-spacing > div {
     width: 100%;
-    border-bottom: 1px solid white;
+    border-bottom: 1px solid var(--color-text);;
     display: block;
     color: white;
     text-indent: 5px;
   }
   .d-spacing > div:nth-child(1){
     border-top: 1px solid white;
-    height: var(--spacing0);
+    height: var(--spacing-1);
   }
   .d-spacing > div:nth-child(1) span{
     margin-top: -10px;
   }
   .d-spacing > div:nth-child(2){
-    height: var(--spacing1);
+    height: var(--spacing-2);
   }
   .d-spacing > div:nth-child(3){
-    height: var(--spacing2);
+    height: var(--spacing-3);
   }
   .d-spacing > div:nth-child(4){
-    height: var(--spacing3);
+    height: var(--spacing-4);
   }
   .d-spacing > div:nth-child(5){
-    height: var(--spacing4);
+    height: var(--spacing-5);
   }
   .d-spacing > div:nth-child(6){
-    height: var(--spacing5);
+    height: var(--spacing-6);
+  }
+  .d-spacing > div:nth-child(7){
+    height: var(--spacing-7);
   }
   .d-cross {
     position: fixed;
@@ -190,6 +244,9 @@
     if (e.ctrlKey && e.key === 'i') {
       showImageDimension();
     }
+    if (e.ctrlKey && e.key === 'p') {
+      openInProd();
+    }
   });
 
   window.addEventListener('pointermove', e => {
@@ -217,16 +274,17 @@
           parent = img.parentElement,
           pixelRatio = window.devicePixelRatio,
           dimensions = {
-            width: img.naturalWidth * pixelRatio,
-            height: img.naturalHeight * pixelRatio
+            width: Math.round(img.naturalWidth * pixelRatio),
+            height: Math.round(img.naturalHeight * pixelRatio)
           },
           target = {
-            width: img.width * window.devicePixelRatio,
-            height: img.height * window.devicePixelRatio
+            width: Math.round(img.width * window.devicePixelRatio),
+            height: Math.round(img.height * window.devicePixelRatio)
           },
           essential = 
-`<b>Loaded</b> : ${dimensions.width}x${dimensions.height}\n
-<b>Needed</b> : ${target.width}x${target.height}`,
+`<b>Loaded</b> : ${dimensions.width}x${dimensions.height}<br>
+<b>Needed</b> : ${target.width}x${target.height}<br>
+<b>Ideal config</b> : ${target.width / pixelRatio}x${target.height / pixelRatio}`
           result =`
   Rendered size: ${img.width}x${img.height}
   Intrinsic size: ${dimensions.width}x${dimensions.height}
@@ -238,7 +296,7 @@
         p.innerHTML = essential
         p.append(small);
         p.classList.add('img-debug');
-        const ratio = getImageRatio(dimensions, target)
+        const ratio = getImageWidthRatio(dimensions, target);
         if (ratio > threshold) {
           p.classList.add('is-bad');
         } else {
@@ -258,10 +316,23 @@
     });
   }
 
+  function getImageWidthRatio(source, target) {
+    return Math.abs((source.width - target.width) / Math.max(source.width, target.width));
+  }
+
   function getImageRatio(source, target) {
     const widthRatio = Math.abs((source.width - target.width) / Math.max(source.width, target.width)),
       heightRatio = Math.abs((source.height - target.height) / Math.max(source.height, target.height));
 
     return (widthRatio + heightRatio) / 2;
   }
+
+  function openInProd() {
+    // To use this debug method, add params.productionUrl key to your hugo config.yaml
+    const productionUrl = '{{ index site.Params.debug "productionUrl" }}';
+    if (productionUrl) {
+      window.open(`${productionUrl}${window.location.pathname}`);
+    }
+  }
+
 </script>
\ No newline at end of file
diff --git a/layouts/partials/footer/logo.html b/layouts/partials/footer/logo.html
index 36e19f1aee1b66c0f92bb64f79c67eacae650c24..3331b60e50b592a54724758d72c1b8b3ad84c20d 100644
--- a/layouts/partials/footer/logo.html
+++ b/layouts/partials/footer/logo.html
@@ -1,3 +1 @@
-{{ $file := site.Params.logo.footer }}
-{{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
-<a class="logo" href="{{ site.Home.Permalink }}"><img src="{{ $file }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}" loading="lazy"></a>
+{{ partial "commons/logo.html" site.Params.logo.footer }}
\ No newline at end of file
diff --git a/layouts/partials/footer/social.html b/layouts/partials/footer/social.html
index f53b805d9bd36b7b62781d1a9418db11bf9be0ef..1bc5f37cc2a8f3192e7a68a30591ca1372da7637 100644
--- a/layouts/partials/footer/social.html
+++ b/layouts/partials/footer/social.html
@@ -13,62 +13,62 @@
   {{ $site_social_links := . }}
   {{ if $site_social_links }}
     <ul class="footer-social site-links">
-      {{ with $site_social_links.email}}
+      {{ with $site_social_links.email }}
       <li class="email">
         <a href="mailto:{{ . }}" rel="noreferrer" title="Email" target="_blank">Email</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.rss}}
+      {{ with $site_social_links.rss }}
       <li class="rss">
         <a href="{{ . }}" rel="noreferrer" title="RSS" target="_blank">RSS</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.mastodon}}
+      {{ with $site_social_links.mastodon }}
       <li class="mastodon">
         <a href="{{ . }}" rel="noreferrer" title="Mastodon" target="_blank">Mastodon</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.peertube}}
+      {{ with $site_social_links.peertube }}
       <li class="peertube">
         <a href="{{ . }}" rel="noreferrer" title="Peertube" target="_blank">Peertube</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.github}}
+      {{ with $site_social_links.github }}
       <li class="github">
         <a href="{{ . }}" rel="noreferrer" title="Github" target="_blank">GitHub</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.linkedin}}
+      {{ with $site_social_links.linkedin }}
       <li class="linkedin">
         <a href="{{ . }}" rel="noreferrer" title="LinkedIn" target="_blank">LinkedIn</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.youtube}}
+      {{ with $site_social_links.youtube }}
       <li class="youtube">
         <a href="{{ . }}" rel="noreferrer" title="YouTube" target="_blank">YouTube</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.vimeo}}
+      {{ with $site_social_links.vimeo }}
       <li class="vimeo">
         <a href="{{ . }}" rel="noreferrer" title="Vimeo" target="_blank">Vimeo</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.instagram}}
+      {{ with $site_social_links.instagram }}
       <li class="instagram">
         <a href="{{ . }}" rel="noreferrer" title="Instagram" target="_blank">Instagram</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.facebook}}
+      {{ with $site_social_links.facebook }}
       <li class="facebook">
         <a href="{{ . }}" rel="noreferrer" title="" target="_blank">Facebook</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.tiktok}}
+      {{ with $site_social_links.tiktok }}
       <li class="tiktok">
         <a href="{{ . }}" rel="noreferrer" title="TikTok" target="_blank">TikTok</a>
       </li>
       {{ end}}
-      {{ with $site_social_links.x}}
+      {{ with $site_social_links.x }}
       <li class="x">
         <a href="{{ . }}" rel="noreferrer" title="X, ex-Twitter" target="_blank">X (ex-Twitter)</a>
       </li>
diff --git a/layouts/partials/head/csp.html b/layouts/partials/head/csp.html
index 841a8a13eef10904e12f7d86738d8f5b263156b4..42e0bcbf7d6dfef5e0727f34c47b9ff123d74904 100644
--- a/layouts/partials/head/csp.html
+++ b/layouts/partials/head/csp.html
@@ -2,7 +2,7 @@
 <meta http-equiv="Content-Security-Policy"
       content="
         default-src 'self' {{ delimit . " " }}
-        {{ if or (not hugo.IsProduction) site.Params.debug }}'unsafe-inline'{{ end }}
+        {{ if or (not hugo.IsProduction) site.Params.debug.active }}'unsafe-inline'{{ end }}
         {{ if site.Params.search.active }}'wasm-unsafe-eval'{{ end }};
       " />
 {{- end -}}
diff --git a/layouts/partials/header/button.html b/layouts/partials/header/button.html
index 16d02d90397ba515e7dfc0d233a2bac02dace8b5..1331f60676c9f60b069682a4c939068341e7472c 100644
--- a/layouts/partials/header/button.html
+++ b/layouts/partials/header/button.html
@@ -1,7 +1,8 @@
 <button type="button"
     aria-controls="navigation"
     aria-expanded="false"
-    aria-label="{{ i18n "commons.menu.label" }}">
+    aria-label="{{ i18n "commons.menu.label" }}"
+    class="header-button">
   <span>{{ i18n "commons.menu.title" }}</span>
   <span></span>
 </button>
diff --git a/layouts/partials/header/hero.html b/layouts/partials/header/hero.html
index 78fe93990d0d4d01863efb7f7e72523f2d24b740..388a3a3df4564862b086aac7c8731c85728bf0de 100644
--- a/layouts/partials/header/hero.html
+++ b/layouts/partials/header/hero.html
@@ -1,83 +1,99 @@
-{{- $direction := "" -}}
-{{- $breadcrumb_is_after_hero := eq site.Params.breadcrumb.position "after-hero"  -}}
-{{- $subtitle := .subtitle -}}
-{{- $description := .description -}}
+
+{{ $direction := "" }}
+{{ $breadcrumb_is_after_hero := eq site.Params.breadcrumb.position "after-hero" }}
+{{ $display_breadcrumb := .breadcrumb | default true }}
+{{ $subtitle := .subtitle }}
+{{ $description := .description }}
 {{ if .image }}
-  {{- $direction = partial "GetImageDirection" .image -}}
+  {{ $direction = partial "GetImageDirection" .image }}
 {{ end }}
 
-{{- $summary := .context.Params.summary | safeHTML -}}
-{{- $subtitle_is_summary := false -}}
+{{ $summary := .context.Params.summary | safeHTML }}
+{{ $subtitle_is_summary := false }}
+
+{{ $button := .button | default .context.Params.header_cta }}
 
 {{ if not $subtitle }}
   {{ if and (eq site.Params.summary.position "hero") $summary }}
-   {{ $subtitle = $summary }}
-   {{ $subtitle_is_summary = true }}
+    {{ $subtitle = $summary }}
+    {{ $subtitle_is_summary = true }}
   {{ end }}
 {{ end }}
 
-<header class="hero {{ if .image -}}hero--with-image hero--image-{{- $direction -}}{{- end }} {{ if $breadcrumb_is_after_hero -}} hero--no-margin {{- end }}">
+<header class="hero {{ if .image }}hero--with-image hero--image-{{- $direction }}{{ end }} {{ if $breadcrumb_is_after_hero }} hero--no-margin {{ end }}">
   <div class="container">
-    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
-      {{- if .breadcrumb | default true -}}
-        {{ partial "header/breadcrumbs.html" .context }}
-      {{- end -}}
-    {{- end -}}
+    {{ if and $display_breadcrumb (eq site.Params.breadcrumb.position "hero-start") }}
+      {{ partial "header/breadcrumbs.html" .context }}
+    {{ end }}
     <div class="content">
-      {{- if or $subtitle $description -}}
-        <hgroup>
+      <div class="hero-text">
+        {{ if or $subtitle $description }}
+          <hgroup>
+            <h1>{{ partial "PrepareHTML" .title }}</h1>
+            {{ if $subtitle }}
+              <p {{ if $subtitle_is_summary }} class="lead" {{ end }}>{{ partial "PrepareHTML" $subtitle }}</p>
+            {{ end }}
+            {{ if $description }}
+              <p>{{ partial "PrepareHTML" .description }}</p>
+            {{ end }}
+          </hgroup>
+        {{ else }}
           <h1>{{ partial "PrepareHTML" .title }}</h1>
-          {{- if $subtitle -}}
-            <p {{ if $subtitle_is_summary -}} class="lead" {{- end -}}>{{ partial "PrepareHTML" $subtitle }}</p>
-          {{- end -}}
-          {{- if $description -}}
-            <p>{{ partial "PrepareHTML" .description }}</p>
-          {{- end -}}
-        </hgroup>
-      {{- else -}}
-        <h1>{{ partial "PrepareHTML" .title }}</h1>
-      {{- end -}}
-      {{- if .image }}
+        {{ end }}
+
+        {{ with $button }}
+          {{ if and .display .target .label }}
+            <a href="{{ .target }}" class="btn">{{ .label }}</a>
+          {{ end }}
+        {{ end }}
+
+        {{ if .hero_text_complement }}
+          {{ partial .hero_text_complement .context }}
+        {{ end }}
+      </div>
+
+      {{ if .image }}
         <figure>
+          {{ partial "commons/image.html"
+            (dict
+              "image"    .image
+              "sizes"    ( .sizes | default site.Params.image_sizes.design_system.hero )
+              "lazy"     false
+            ) }}
           {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
             <a  class="glightbox"
                 role="button"
-                data-glightbox="type: image;{{ if .image.credit }}description: {{ partial "PrepareHTML" .image.credit }}{{ end }}"
+                data-glightbox="type: image;{{ with .image.credit }}description: {{ partial "PrepareHTML" . }}{{ end }}"
                 href="{{ partial "GetLightboxUrl" .image }}"
                 title="{{- i18n "commons.lightbox.link.title" -}}"
                 aria-label="{{- i18n "commons.lightbox.link.title" -}}">
-          {{ end }}
-            {{ partial "commons/image.html"
-              (dict
-                "image"    .image
-                "sizes"    ( .sizes | default site.Params.image_sizes.design_system.hero )
-                "lazy"     false
-              ) }}
-          {{ if not site.Params.image_sizes.design_system.lightbox.disabled }}
             </a>
           {{ end }}
-            {{ if partial "GetTextFromHTML" .image.credit }}
-              <figcaption tabindex="0">
-                <div class="credit-content">
-                  {{- partial "PrepareHTML" .image.credit -}}
-                </div>
-              </figcaption>
-            {{ end }}
+          {{ with partial "GetTextFromHTML" .image.credit }}
+            <figcaption tabindex="0">
+              <div class="credit-content">
+                {{ partial "PrepareHTML" . }}
+              </div>
+            </figcaption>
+          {{ end }}
         </figure>
-      {{ end -}}
+      {{ end }}
     </div>
-    {{- if eq site.Params.breadcrumb.position "hero-end" -}}
-      {{- if .breadcrumb | default true -}}
-        {{ partial "header/breadcrumbs.html" .context }}
-      {{- end -}}
-    {{- end -}}
   </div>
-</header>
 
-{{- if $breadcrumb_is_after_hero -}}
-  {{- if .breadcrumb | default true -}}
+  {{ if .hero_complement }}
+    {{ partial .hero_complement .context }}
+  {{ end }}
+
+  {{ if and $display_breadcrumb (eq site.Params.breadcrumb.position "hero-end") }}
     <div class="container breadcrumb-container">
       {{ partial "header/breadcrumbs.html" .context }}
     </div>
-  {{- end -}}
-{{- end -}}
\ No newline at end of file
+  {{ end }}
+</header>
+
+{{ if and $display_breadcrumb $breadcrumb_is_after_hero }}
+  <div class="container breadcrumb-container">
+    {{ partial "header/breadcrumbs.html" .context }}
+  </div>
+{{ end }}
diff --git a/layouts/partials/header/logo.html b/layouts/partials/header/logo.html
index 50ed28873df3c6136dd59d12cbbe19c41d2bdab2..5505e783236c5876ea564dbf159bb5f818a0c3ce 100644
--- a/layouts/partials/header/logo.html
+++ b/layouts/partials/header/logo.html
@@ -1,3 +1 @@
-{{ $file := site.Params.logo.header }}
-{{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
-<a class="logo" href="{{ site.Home.Permalink }}"><img src="{{ $file }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}"></a>
+{{ partial "commons/logo.html" site.Params.logo.header }}
\ No newline at end of file
diff --git a/layouts/partials/locations/hero-list.html b/layouts/partials/locations/hero-list.html
new file mode 100644
index 0000000000000000000000000000000000000000..14226f2b67b7d592e26ea957f9e743476c6aea6b
--- /dev/null
+++ b/layouts/partials/locations/hero-list.html
@@ -0,0 +1,8 @@
+{{- $title := or .Params.header_text .Title -}}
+{{- partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.locations.hero
+        "context" .
+      ) -}}
diff --git a/layouts/partials/locations/hero-single.html b/layouts/partials/locations/hero-single.html
new file mode 100644
index 0000000000000000000000000000000000000000..45f9ecc0b7cfbbaec5bb1941b497273f1afcb536
--- /dev/null
+++ b/layouts/partials/locations/hero-single.html
@@ -0,0 +1,8 @@
+{{- $title := or .Params.header_text .Title -}}
+{{- partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.locations.hero_single
+        "context" .
+      ) -}}
diff --git a/layouts/partials/locations/location.html b/layouts/partials/locations/location.html
new file mode 100644
index 0000000000000000000000000000000000000000..13d4da3ffdca9b44e91417a4e11be6b8a612175d
--- /dev/null
+++ b/layouts/partials/locations/location.html
@@ -0,0 +1,40 @@
+{{ $location := .location }}
+{{ $heading := .heading | default "h2" }}
+{{ $heading_tag := (dict 
+    "open" ((printf "<%s itemprop='headline' class='location-title'>" $heading) | safeHTML)
+    "close" ((printf "</%s>" $heading) | safeHTML)
+    ) }}
+
+{{ with $location }}
+  <article class="location" itemscope itemtype="https://schema.org/EducationalOrganization">
+    <div class="location-content">
+      {{- $title := partial "PrepareHTML" .Title -}}
+      {{ $heading_tag.open }}
+        <a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a>
+      {{ $heading_tag.close }}
+
+      {{- if (partial "GetTextFromHTML" .Params.summary) -}}
+        <div class="location-description">
+          <p itemprop="description">
+            {{ partial "GetTruncateContent" ( dict 
+              "text" .Params.summary
+              "length" site.Params.locations.index.truncate_description
+              ) }}
+          </p>
+        </div>
+      {{- end -}}
+    </div>
+
+    <div class="media">
+      {{- if .Params.image -}}
+        {{- partial "commons/image.html"
+            (dict
+              "image"    .Params.image
+              "sizes"    site.Params.image_sizes.sections.locations.item
+            ) -}}
+      {{- else -}}
+        {{- partial "commons/image-default.html" "locations" -}}
+      {{- end -}}
+    </div>
+  </article>
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/locations/locations.html b/layouts/partials/locations/locations.html
new file mode 100644
index 0000000000000000000000000000000000000000..c86f3b5eb4ad9f276ad7c4b3e3a82b59532815e6
--- /dev/null
+++ b/layouts/partials/locations/locations.html
@@ -0,0 +1,8 @@
+<div class="locations locations--{{- site.Params.locations.index.layout -}}">
+  {{ range .Paginator.Pages }}
+    {{ partial "locations/location.html" (dict 
+        "location" .
+        "heading" "h2"
+      ) }}
+  {{ end }}
+</div>
diff --git a/layouts/partials/locations/summary.html b/layouts/partials/locations/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..089279d8e6196a9d0353cd6bb18928a2eaeedaca
--- /dev/null
+++ b/layouts/partials/locations/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary-in-content.html" . -}}
\ No newline at end of file
diff --git a/layouts/partials/organizations/logo.html b/layouts/partials/organizations/logo.html
index 586ead648b88f877a43f76e02e459d2a5e8db316..1086a4503458be2bdd96cc9cd3ecf5858e347ecd 100644
--- a/layouts/partials/organizations/logo.html
+++ b/layouts/partials/organizations/logo.html
@@ -3,7 +3,7 @@
   {{ if site.Params.organizations.dark_logo_background }}
     {{ $logo_index = "logo_on_dark_background" }}
   {{ end }}
-  <figure class="logo">
+  <figure class="organization-logo">
     {{- partial "commons/image.html"
         (dict
           "image"    (index .Params $logo_index)
diff --git a/layouts/partials/pages/body.html b/layouts/partials/pages/body.html
deleted file mode 100644
index b0cd31be797ee21e7c7e69cb1f823cc58b4b3d52..0000000000000000000000000000000000000000
--- a/layouts/partials/pages/body.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{{ if (partial "GetTextFromHTML" .) }}
-  <section>
-    <div class="container">
-      <div itemprop="articleBody" id="page-informations">
-        {{
-          partial "PrepareHTML" (
-            partial "H2AddId" .
-          )
-        }}
-      </div>
-    </div>
-  </section>
-{{ end }}
diff --git a/layouts/partials/pages/children.html b/layouts/partials/pages/children.html
index fb6dd823c79574a7bf0327742e3b60f5d548817b..84c53adfe3a2b85add42b2b4312e7c950478443e 100644
--- a/layouts/partials/pages/children.html
+++ b/layouts/partials/pages/children.html
@@ -2,13 +2,14 @@
 {{ if .Params.bodyclass }}
   {{- $page_class = printf "block-page-%s" .Params.bodyclass }}
 {{ end }}
+{{ $show_images := eq site.Params.pages.index.layout "grid" }}
 
-<div class="block block-pages block-pages--grid {{ $page_class }}">
+<div class="block block-pages block-pages--children block-pages--{{ site.Params.pages.index.layout }} {{ $page_class }}">
   <div class="container">
     <div class="block-content">
-      {{- partial "blocks/templates/pages/grid.html" (dict 
+      {{- partial (printf "blocks/templates/pages/%s.html" site.Params.pages.index.layout) (dict 
           "pages" .Params.children
-          "show_images" true
+          "show_images" $show_images
           "heading_level" 2
           "show_descriptions" true
           ) }}
diff --git a/layouts/partials/pages/sitemap_recursive_pages.html b/layouts/partials/pages/sitemap_recursive_pages.html
new file mode 100644
index 0000000000000000000000000000000000000000..84761ebfee2870f788539b0d19aa9b7926e7ee04
--- /dev/null
+++ b/layouts/partials/pages/sitemap_recursive_pages.html
@@ -0,0 +1,10 @@
+<ul>
+  {{ range .Pages }}
+    <li>
+      <a href="{{ .Permalink }}">{{ safeHTML .Title }}</a>
+      {{ if .Pages }}
+        {{ partial "pages/sitemap_recursive_pages.html" . }}
+      {{ end }}
+    </li>
+  {{ end }}
+</ul>
diff --git a/layouts/partials/papers/document-nav.html b/layouts/partials/papers/document-nav.html
index a2f0211d51ca0d429d40b8fd4ce9989acf55f97b..2a800a23ca825704ded8a28c50a04d74b6ab0127 100644
--- a/layouts/partials/papers/document-nav.html
+++ b/layouts/partials/papers/document-nav.html
@@ -11,9 +11,11 @@
                     (dict
                       "image"    .Params.image
                       "alt"      .Title
-                      "mobile"   "327x388"
-                      "tablet"   "208x247"
-                      "desktop"  "408x485"
+                      "size"     (dict 
+                        "mobile"   "327x388"
+                        "tablet"   "208x247"
+                        "desktop"  "408x485"
+                      )
                     ) -}}
             {{- else -}}
               {{- partial "commons/image-default.html" "papers" -}}
diff --git a/layouts/partials/papers/sidebar.html b/layouts/partials/papers/sidebar.html
index b8d07c36e12d76de8b5207044e16d43f7a84e1c6..a959fd3a7991066392681d55914f7fd713a30aa1 100644
--- a/layouts/partials/papers/sidebar.html
+++ b/layouts/partials/papers/sidebar.html
@@ -13,9 +13,11 @@
                         (dict
                           "image"    .Params.image
                           "alt"      .Title
-                          "mobile"   "327x388"
-                          "tablet"   "208x247"
-                          "desktop"  "408x485"
+                          "sizes"    (dict 
+                            "mobile"   "327x388"
+                            "tablet"   "208x247"
+                            "desktop"  "408x485"
+                          )
                         ) -}}
                 {{- else -}}
                   {{- partial "commons/image-default.html" "papers" -}}
diff --git a/layouts/partials/persons/hero-single.html b/layouts/partials/persons/hero-single.html
index eb46dc1c8bc238d1dfbcc7cb9933e9e1badcf146..6cfcd2d4fb1671c29531b6949d4e2429927a9c88 100644
--- a/layouts/partials/persons/hero-single.html
+++ b/layouts/partials/persons/hero-single.html
@@ -1,44 +1,9 @@
-{{- $breadcrumb_is_after_hero := eq site.Params.breadcrumb.position "after-hero"  -}}
-{{ $subtitle := "" }}
-{{- $summary := .Params.summary | safeHTML -}}
-{{ if and (eq site.Params.summary.position "hero") $summary }}
-  {{ $subtitle = $summary }}
-{{ end }}
+{{- $title := or .Params.header_text .Title -}}
 
-<header class="hero {{ if $breadcrumb_is_after_hero -}} hero--no-margin {{- end }}">
-  <div class="container">
-    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
-      {{ partial "header/breadcrumbs.html" . }}
-    {{- end -}}
-    <div class="content">
-      {{- if $subtitle -}}
-        <hgroup>
-          <h1>{{ partial "PrepareHTML" .Title }}</h1>
-          <p class="lead">{{ partial "PrepareHTML" $subtitle }}</p>
-        </hgroup>
-      {{- else -}}
-        <h1>{{ partial "PrepareHTML" .Title }}</h1>
-      {{- end -}}
-
-      {{ if .Params.image }}
-        <div class="avatar">
-          {{ partial "commons/image.html"
-              (dict
-                "image"    .Params.image
-                "class"    "img-fluid"
-                "sizes"    site.Params.image_sizes.sections.persons.hero_single
-              )}}
-        </div>
-      {{ end }}
-    </div>
-    {{- if eq site.Params.breadcrumb.position "hero-end" -}}
-      {{ partial "header/breadcrumbs.html" . }}
-    {{- end -}}
-  </div>
-</header>
-
-{{- if $breadcrumb_is_after_hero -}}
-  <div class="container breadcrumb-container">
-    {{ partial "header/breadcrumbs.html" . }}
-  </div>
-{{- end -}}
\ No newline at end of file
+{{- partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "context" .
+        "sizes" site.Params.image_sizes.sections.persons.hero_single
+      ) -}}
diff --git a/layouts/partials/posts/body.html b/layouts/partials/posts/body.html
deleted file mode 100644
index 081e75e35be1a8dcb5530dfe5350df14dae84706..0000000000000000000000000000000000000000
--- a/layouts/partials/posts/body.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div itemprop="articleBody">
-  {{
-    partial "PrepareHTML" (
-      partial "H2AddId" .Content
-    )
-  }}
-  {{ partial "PrepareHTML" .Params.text }}
-</div>
diff --git a/layouts/partials/posts/post-infos.html b/layouts/partials/posts/post-infos.html
index 47b8b35b98b5c55acfc3ebe15977dfb9ff8b5ed6..f5eacaaf6cd03221c7ef2d34547c35a3be0e2d4f 100644
--- a/layouts/partials/posts/post-infos.html
+++ b/layouts/partials/posts/post-infos.html
@@ -1,6 +1,6 @@
 <ul class="post-infos">
   {{ if .Params.posts_categories }}
-    <li>
+    <li class="terms">
       <span>{{ i18n "posts.category" ( len .Params.posts_categories ) }}</span>
       {{ partial "posts/categories.html" . }}
     </li>
diff --git a/layouts/partials/posts/post.html b/layouts/partials/posts/post.html
index 0137312c24227bf98f93550bec9aec4ead3f75d3..eb9f661498990a25fe620c8d05ae53db427a3329 100644
--- a/layouts/partials/posts/post.html
+++ b/layouts/partials/posts/post.html
@@ -2,7 +2,7 @@
 {{- $direction := "" -}}
 {{ $heading := .heading | default "h2" }}
 {{ $heading_tag := (dict 
-    "open" ((printf "<%s itemprop='headline'>" $heading) | safeHTML)
+    "open" ((printf "<%s class='post-title' itemprop='headline'>" $heading) | safeHTML)
     "close" ((printf "</%s>" $heading) | safeHTML)
     ) }}
 {{ $index := .index}}
diff --git a/layouts/partials/programs/admission.html b/layouts/partials/programs/admission.html
index 50d5ec348d9344bfbf1e2af0a6510036c62efa21..ca69bfbba868559f585c332d6ece9a47cd1e8062 100644
--- a/layouts/partials/programs/admission.html
+++ b/layouts/partials/programs/admission.html
@@ -18,6 +18,27 @@
           </section>
         {{- end -}}
 
+        {{- if partial "GetTextFromHTML" .Params.pricing_initial -}}
+          <section id="{{ urlize (i18n "programs.pricing_initial") }}">
+            <h3>{{ i18n "programs.pricing_initial" }}</h3>
+            {{- partial "PrepareHTML" .Params.pricing_initial -}}
+          </section>
+        {{- end -}}
+
+        {{- if partial "GetTextFromHTML" .Params.pricing_continuing -}}
+          <section id="{{ urlize (i18n "programs.pricing_continuing") }}">
+            <h3>{{ i18n "programs.pricing_continuing" }}</h3>
+            {{- partial "PrepareHTML" .Params.pricing_continuing -}}
+          </section>
+        {{- end -}}
+
+        {{- if partial "GetTextFromHTML" .Params.pricing_apprenticeship -}}
+          <section id="{{ urlize (i18n "programs.pricing_apprenticeship") }}">
+            <h3>{{ i18n "programs.pricing_apprenticeship" }}</h3>
+            {{- partial "PrepareHTML" .Params.pricing_apprenticeship -}}
+          </section>
+        {{- end -}}
+
         {{- if partial "GetTextFromHTML" .Params.registration -}}
           <section id="{{ urlize (i18n "programs.registration") }}">
             <h3>{{ i18n "programs.registration" }}</h3>
diff --git a/layouts/partials/programs/certification.html b/layouts/partials/programs/certification.html
new file mode 100644
index 0000000000000000000000000000000000000000..c857a4cb51f424af1bfd2da05994c12a98db7087
--- /dev/null
+++ b/layouts/partials/programs/certification.html
@@ -0,0 +1,16 @@
+{{- if .Params.certifications.qualiopi.certified -}}
+<section id="{{ urlize (i18n "programs.toc.certification") }}">
+  <div class="container">
+    <div class="content">
+      <h2>{{ i18n "programs.toc.certification" }}</h2>
+      <div>
+        <section id="{{ urlize (i18n "programs.qualiopi") }}">
+          <img src="/assets/images/certifications/qualiopi.svg" alt="{{ i18n "programs.certifications.qualiopi" }}">
+          {{- if partial "GetTextFromHTML" .Params.certifications.qualiopi.text -}}
+            {{- partial "PrepareHTML" .Params.certifications.qualiopi.text -}}
+          {{- end -}}
+        </section>
+      </div>
+  </div>
+</section>
+{{- end -}}
diff --git a/layouts/partials/programs/essential.html b/layouts/partials/programs/essential.html
index bc5730ecf4c104fa7e239272a49519bf7eee7e05..9e02eda1e47036aa0425e7b656fa043140db8bbb 100644
--- a/layouts/partials/programs/essential.html
+++ b/layouts/partials/programs/essential.html
@@ -1,22 +1,45 @@
-{{ $parent := .Params.parent }}
-{{- with .Params.diplomas -}}
-  {{- $diploma := site.GetPage (printf "/diplomas/%s" .) -}}
-  {{- with $diploma -}}
-    <dl class="essential">
-      <dt>{{ i18n "programs.diploma" }}</dt>
-      <dd><a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a></dd>
-      {{- if .Params.level -}}
-        <dt>{{ i18n "programs.level" }}</dt>
-        <dd>{{ partial "PrepareHTML" .Params.level }}</dd>
+<div class="essential-container" id="#{{ urlize (i18n "programs.toc.essential") }}">
+  <div class="container">
+    {{ $parent := .Params.parent }}
+    {{- with .Params.diplomas -}}
+      {{- $diploma := site.GetPage (printf "/diplomas/%s" .) -}}
+      {{- with $diploma -}}
+        <dl class="essential">
+          <dt>{{ i18n "programs.diploma" }}</dt>
+          <dd><a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a></dd>
+          {{- if .Params.level -}}
+            <dt>{{ i18n "programs.level" }}</dt>
+            <dd>{{ partial "PrepareHTML" .Params.level }}</dd>
+          {{- end -}}
+          {{- with $parent -}}
+            <dt>{{ i18n "programs.mention" }}</dt>
+            <dd><a href="{{ .url }}">{{ partial "PrepareHTML" .title }}</a></dd>
+          {{- end -}}
+          {{- if .Params.duration -}}
+            <dt>{{ i18n "programs.duration" }}</dt>
+            <dd>{{ partial "PrepareHTML" .Params.duration }}</dd>
+          {{- end -}}
+        </dl>
       {{- end -}}
-      {{- with $parent -}}
-        <dt>{{ i18n "programs.mention" }}</dt>
-        <dd><a href="{{ .url }}">{{ partial "PrepareHTML" .title }}</a></dd>
-      {{- end -}}
-      {{- if .Params.duration -}}
-        <dt>{{ i18n "programs.duration" }}</dt>
-        <dd>{{ partial "PrepareHTML" .Params.duration }}</dd>
-      {{- end -}}
-    </dl>
-  {{- end -}}
-{{- end -}}
+    {{- end -}}
+    
+    <div class="buttons">
+      <div class="dropdown-share dropup">
+        <button class="btn" type="button" id="shareProgram" data-bs-toggle="dropdown" aria-expanded="false">{{ i18n "commons.share" }}</button>
+        <div class="dropdown-menu">
+          {{ partial "commons/share.html" . }}
+        </div>
+      </div>
+      {{ with .Params.downloadable_summary }}
+        {{- $file := partial "GetMedia" . -}}
+        {{- if $file -}}
+          {{- $url := $file.url -}}
+          {{- if site.Params.keycdn -}}
+            {{- $url = $file.direct_url -}}
+          {{- end -}}
+          <a href="{{ $url }}" download target="_blank">{{ i18n "commons.download.singular_name" }}</a>
+        {{- end -}}
+      {{ end }}
+    </div>
+  </div>
+</div>
diff --git a/layouts/partials/programs/hero-single.html b/layouts/partials/programs/hero-single.html
index deb0f4ae2da54d0047773693e12b80cc92142c9d..eb7dd28515f74043a151f17f10a099eaea83707c 100644
--- a/layouts/partials/programs/hero-single.html
+++ b/layouts/partials/programs/hero-single.html
@@ -1,65 +1,17 @@
-{{- $breadcrumb_is_after_hero := eq site.Params.breadcrumb.position "after-hero"  -}}
 {{- $title := or .Params.header_text .Title -}}
-{{ $subtitle := "" }}
-{{- $summary := .Params.summary | safeHTML -}}
-{{ if and (eq site.Params.summary.position "hero") $summary }}
-  {{ $subtitle = $summary }}
-{{ end }}
-
-<header class="hero hero-program {{ if $breadcrumb_is_after_hero -}} hero--no-margin {{- end }}">
-  <div class="container">
-    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
-      {{- if .Params.breadcrumb | default true -}}
-        {{ partial "header/breadcrumbs.html" . }}
-      {{- end -}}
-    {{- end -}}
-    <div class="content">
-      {{- if $subtitle -}}
-        <hgroup>
-          <h1>{{ partial "PrepareHTML" $title }}</h1>
-          <p class="lead">{{ partial "PrepareHTML" $subtitle }}</p>
-        </hgroup>
-      {{- else -}}
-        <h1>{{ partial "PrepareHTML" $title }}</h1>
-      {{- end -}}
-    </div>
-  </div>
-
-  <div class="essential-container" id="#{{ urlize (i18n "programs.toc.essential") }}">
-    <div class="container">
-      {{- partial "programs/essential" . -}}
-      <div class="buttons">
-        <div class="dropdown-share dropup">
-          <button type="button" id="shareProgram" data-bs-toggle="dropdown" aria-expanded="false">{{ i18n "commons.share" }}</button>
-          <div class="dropdown-menu">
-            {{ partial "commons/share.html" . }}
-          </div>
-        </div>
-        {{ with .Params.downloadable_summary }}
-          {{- $file := partial "GetMedia" . -}}
-          {{- if $file -}}
-            {{- $url := $file.url -}}
-            {{- if site.Params.keycdn -}}
-              {{- $url = $file.direct_url -}}
-            {{- end -}}
-            <a href="{{ $url }}" download target="_blank">{{ i18n "commons.download.singular_name" }}</a>
-          {{- end -}}
-        {{ end }}
-      </div>
-    </div>
-  </div>
-
-  {{- if eq site.Params.breadcrumb.position "hero-end" -}}
-    {{- if .Params.breadcrumb | default true -}}
-      {{ partial "header/breadcrumbs.html" . }}
-    {{- end -}}
-  {{- end -}}
-</header>
-
-{{- if $breadcrumb_is_after_hero -}}
-  {{- if .Params.breadcrumb | default true -}}
-    <div class="container breadcrumb-container">
-      {{ partial "header/breadcrumbs.html" . }}
-    </div>
-  {{- end -}}
+{{- $button := false -}}
+{{- if and (eq site.Params.summary.position "hero") .Params.website_url -}}
+  {{ $button = (dict 
+    "display" true
+    "target" .Params.website_url
+    "label" (i18n "programs.website")
+  ) }}
 {{- end -}}
+
+{{ partial "header/hero.html"
+      (dict
+        "title" $title
+        "context" .
+        "button" $button
+        "hero_complement" "programs/essential.html"
+      )}}
diff --git a/layouts/partials/programs/list.html b/layouts/partials/programs/list.html
index ddd3d9be1a758789c95498e241221e834d0b42cb..0fccc9daa5c4cc4219349eada600c7ad8ea3d9bd 100644
--- a/layouts/partials/programs/list.html
+++ b/layouts/partials/programs/list.html
@@ -12,8 +12,12 @@
   {{ partial "contents/list.html" . }}
   <div class="container">
     {{ partial "diplomas/diplomas-select.html" . }}
+    {{/* Toutes les formations... */}}
     {{ $programs := where .Site.Pages "Section" "programs" }}
+    {{/* mais pas l'accueil des formations... */}}
     {{ $programs = where $programs "Permalink" "!=" .FirstSection.Permalink }}
+    {{/* et pas non plus les pages enfants (parcours) */}}
+    {{ $programs = where $programs "Params.parent" "eq" nil }}
     {{ partial "programs/programs-list.html" $programs }}
   </div>
 </div>
diff --git a/layouts/partials/programs/single.html b/layouts/partials/programs/single.html
index 1d184cd910b42fdaa63976ba0409a8d7f8b82a0a..a8fcaa614b95a9279e421eb2fcfac4e6b0a57540 100644
--- a/layouts/partials/programs/single.html
+++ b/layouts/partials/programs/single.html
@@ -33,6 +33,7 @@
   {{- partial "programs/pedagogy.html" . -}}
   {{- partial "programs/results.html" . -}}
   {{- partial "programs/admission.html" . -}}
+  {{- partial "programs/certification.html" . -}}
 
   {{- $category := site.GetPage (printf "/posts_categories/%s" .Params.related_category ) -}}
   {{- partial "programs/related.html" $category -}}
diff --git a/layouts/partials/programs/summary.html b/layouts/partials/programs/summary.html
index 85e4edf81a14c7fedc7c790f755b91710a4d9224..d5dec153c5ee5107a5d8c8bf83c9b67c80c8dea9 100644
--- a/layouts/partials/programs/summary.html
+++ b/layouts/partials/programs/summary.html
@@ -1 +1,11 @@
-{{- partial "commons/summary-in-content.html" . -}}
+{{ $summary := .summary | default (.context.Params.summary | safeHTML) }}
+{{ if and (eq site.Params.summary.position "content") $summary }}
+  <div class="container program-summary">
+    <p class="lead" role="heading" aria-level="2">
+      {{ $summary }}
+    </p>
+    {{ if .context.Params.website_url }}
+      <a href="{{- .context.Params.website_url -}}" target="_blank" class="btn">{{ i18n "programs.website" }}</a>
+    {{ end }}
+  </div>
+{{ end }}
diff --git a/layouts/partials/programs/toc.html b/layouts/partials/programs/toc.html
index 1d66911494f60be672a8bddf884a77366e523865..9ddea5d93943a275ddbedaf389dabc6730ae1da3 100644
--- a/layouts/partials/programs/toc.html
+++ b/layouts/partials/programs/toc.html
@@ -14,6 +14,8 @@
 {{ $accessibility := partial "GetTextFromHTML" .context.Params.accessibility }}
 {{ $other := partial "GetTextFromHTML" .context.Params.other }}
 
+{{ $certification := .context.Params.certifications.qualiopi.certified  }}
+
 {{ $roles := .context.Params.roles }}
 {{ $contacts := partial "GetTextFromHTML" .context.Params.contacts }}
 
@@ -101,6 +103,11 @@
       </ol>
       {{ end -}}
     </li>
+    {{- if $certification -}}
+      <li>
+        <a href="#{{ urlize (i18n "programs.toc.certification") }}">{{ i18n "programs.toc.certification" }}</a>
+      </li>
+    {{- end -}}
     {{- if gt (len $related_posts) 0 -}}
       <li>
         <a href="#{{ urlize (i18n "programs.toc.related") }}">{{ i18n "programs.toc.related" }}</a>
diff --git a/layouts/partials/projects/categories.html b/layouts/partials/projects/categories.html
new file mode 100644
index 0000000000000000000000000000000000000000..ffd783f24c83bdb9d034e4bdfeee49a8f297f60c
--- /dev/null
+++ b/layouts/partials/projects/categories.html
@@ -0,0 +1,12 @@
+{{ $categories := .GetTerms "projects_categories" }}
+{{- if $categories -}}
+<ul class="project-categories">
+  {{- range $categories -}}
+    <li>
+      <a href="{{ .Permalink }}">
+        {{- safeHTML .Title -}}
+      </a>
+    </li>
+  {{- end }}
+</ul>
+{{- end -}}
diff --git a/layouts/partials/projects/hero-list.html b/layouts/partials/projects/hero-list.html
new file mode 100644
index 0000000000000000000000000000000000000000..84b8de2d9433fadeaf98bbe1933e228bfe7b5208
--- /dev/null
+++ b/layouts/partials/projects/hero-list.html
@@ -0,0 +1,8 @@
+{{- $title := or .Params.header_text .Title -}}
+{{- partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.projects.hero
+        "context" .
+      ) -}}
diff --git a/layouts/partials/projects/hero-single.html b/layouts/partials/projects/hero-single.html
new file mode 100644
index 0000000000000000000000000000000000000000..e8bfe9f6240f203385fe3b598991974813037fd0
--- /dev/null
+++ b/layouts/partials/projects/hero-single.html
@@ -0,0 +1,9 @@
+{{- $title := or .Params.header_text .Title -}}
+{{- partial "header/hero.html"
+      (dict
+        "title" $title
+        "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.projects.hero_single
+        "hero_text_complement" "projects/project-infos.html"
+        "context" .
+      ) -}}
diff --git a/layouts/partials/projects/project-infos.html b/layouts/partials/projects/project-infos.html
new file mode 100644
index 0000000000000000000000000000000000000000..e33502c59b879e6ca8e207d9a43fea21e81410ed
--- /dev/null
+++ b/layouts/partials/projects/project-infos.html
@@ -0,0 +1,18 @@
+<ul class="project-infos">
+  {{ if .Params.projects_categories }}
+    <li class="terms">
+      <span>{{ i18n "projects.category" ( len .Params.projects_categories ) }}</span>
+      {{ partial "projects/categories.html" . }}
+    </li>
+  {{ end }}
+  {{ with .Params.year }}
+    <li>
+      <span>{{ i18n "projects.year" }}</span>
+      <time datetime="{{ . }}">{{ . }}</time>
+    </li>
+  {{ end }}
+  <li class="social-share">
+    <span>{{ i18n "projects.share" }}</span>
+    {{ partial "commons/share.html" . }}
+  </li>
+</ul>
\ No newline at end of file
diff --git a/layouts/partials/projects/project.html b/layouts/partials/projects/project.html
new file mode 100644
index 0000000000000000000000000000000000000000..c6f825ad4e665bbeca3429981ae2228d122aed08
--- /dev/null
+++ b/layouts/partials/projects/project.html
@@ -0,0 +1,50 @@
+{{ $project := .project }}
+{{ $heading := .heading | default "h2" }}
+{{ $heading_tag := (dict 
+    "open" ((printf "<%s class='project-title' itemprop='name'>" $heading) | safeHTML)
+    "close" ((printf "</%s>" $heading) | safeHTML)
+    ) }}
+
+{{ with $project }}
+
+<article class="project" itemscope itemtype="https://schema.org/CreativeWork">
+
+  <div class="project-content">
+    {{- $title := partial "PrepareHTML" .Title -}}
+
+    {{ $heading_tag.open }}
+      <a href="{{ .Permalink }}" itemprop="url" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a>
+    {{ $heading_tag.close }}
+
+    {{ if and site.Params.projects.index.show_description (partial "GetTextFromHTML" .Params.summary) }}
+      <p itemprop="abstract">{{ partial "GetTruncateContent" ( dict 
+        "text" .Params.summary
+        "length" site.Params.projects.index.truncate_description
+        ) }}</p>
+    {{ end }}
+
+    {{ if site.Params.projects.index.show_categories }}
+      {{- partial "projects/categories" . -}}
+    {{ end }}
+
+    {{ if and site.Params.projects.index.show_year .Params.year }}
+      <div class="project-meta">
+        <time itemprop="datePublished" datetime="{{ .Params.year }}">{{ .Params.year }}</time>
+      </div>
+    {{ end }}
+  </div>
+
+  <div class="media">
+    {{- if .Params.image -}}
+      {{- partial "commons/image.html"
+          (dict
+            "image"    .Params.image
+            "sizes"    site.Params.image_sizes.sections.projects.item
+          ) -}}
+    {{- else -}}
+      {{- partial "commons/image-default.html" "projects" -}}
+    {{- end -}}
+  </div>
+
+</article>
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/projects/projects.html b/layouts/partials/projects/projects.html
new file mode 100644
index 0000000000000000000000000000000000000000..bfce05b018c0d2059cba468af1ef26bfbfa5625d
--- /dev/null
+++ b/layouts/partials/projects/projects.html
@@ -0,0 +1,8 @@
+<div class="projects projects--{{- site.Params.projects.index.layout -}}">
+  {{ if not .Pages }}
+    <p>{{ i18n "categories.no_project" }}</p>
+  {{ end }}
+  {{ range .Paginator.Pages }}
+    {{ partial "projects/project.html" (dict "project" . )}}
+  {{ end }}
+</div>
diff --git a/layouts/partials/projects/sidebar.html b/layouts/partials/projects/sidebar.html
new file mode 100644
index 0000000000000000000000000000000000000000..2f27a098fd7676996c77a580f49b2e3471ace1ff
--- /dev/null
+++ b/layouts/partials/projects/sidebar.html
@@ -0,0 +1,14 @@
+<div class="section-sidebar project-sidebar">
+  <div>
+    <aside>
+      {{- partial "projects/project-infos.html" . -}}
+    </aside>
+
+    {{ partial "toc/container.html"
+      (dict
+          "toc" "toc/default.html"
+          "context" .
+      )
+    }}
+  </div>
+</div>
diff --git a/layouts/partials/projects/summary.html b/layouts/partials/projects/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..85e4edf81a14c7fedc7c790f755b91710a4d9224
--- /dev/null
+++ b/layouts/partials/projects/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary-in-content.html" . -}}
diff --git a/layouts/partials/publications/downloads.html b/layouts/partials/publications/downloads.html
index 379bba754f489ef6633dab92ecaeaa57467decab..a24993d24f90f1a7da89c408526444db649cdca6 100644
--- a/layouts/partials/publications/downloads.html
+++ b/layouts/partials/publications/downloads.html
@@ -4,7 +4,7 @@
   <nav>
     {{ range .Params.links }}
       {{ if .url }}
-        <a href="{{ .url }}" target="_blank" rel="noopener" class="link-btn">{{ .label }}</a>
+        <a href="{{ .url }}" target="_blank" rel="noopener">{{ .label }}</a>
       {{ end }}
     {{ end }}
   </nav>
diff --git a/layouts/partials/publications/statistics.html b/layouts/partials/publications/statistics.html
index 9e06d6fd3163d4ceac05a6db25281daa1bff6ea2..0f0452cc2ca3ffb5b0ab297124bc1eda4024b6bb 100644
--- a/layouts/partials/publications/statistics.html
+++ b/layouts/partials/publications/statistics.html
@@ -8,8 +8,6 @@
           <span>{{ .Key }}</span>
         </p>
       </li>
-    {{ end }}  
+    {{ end }}
   </ol>
-
-   
 </div>
\ No newline at end of file
diff --git a/layouts/partials/sitemap/toc.html b/layouts/partials/sitemap/toc.html
index 9fff240ad2d17a4c563032aa727d03ec3d428462..508b5583c8bbb864fd7dd9956d54c95b152a8c1d 100644
--- a/layouts/partials/sitemap/toc.html
+++ b/layouts/partials/sitemap/toc.html
@@ -3,8 +3,11 @@
     {{- if .context.Params.contents -}}
       {{- partial "blocks/toc.html" .context.Params.contents -}}
     {{- end -}}
+    <li>
+      <a href="#pages">{{ i18n "sitemap.pages" }}</a>
+    </li>
     {{ range site.Sections }}
-      {{ if ne .Type "sitemap" }}
+      {{ if and (ne .Type "sitemap") (ne .Type "pages") }}
         <li>
           <a href="#{{ .Type }}">{{ safeHTML .Title }}</a>
         </li>
diff --git a/layouts/partials/volumes/volume.html b/layouts/partials/volumes/volume.html
index 2ff521816ad11ff47f33a8e972279017f04d6368..d5ca03d13c8aabbf06f453f23d0a764d81a6d9d4 100644
--- a/layouts/partials/volumes/volume.html
+++ b/layouts/partials/volumes/volume.html
@@ -1,7 +1,7 @@
 <article class="volume" itemscope itemtype="https://schema.org/Book https://schema.org/PublicationVolume">
   <hgroup>
     <p class="suptitle" itemprop="volumeNumber">{{ i18n "volumes.volume_number" (dict "Number" .Params.Number) }}</p>
-    <h2><a href="{{ .Permalink }}" title="{{ i18n "commons.more_aria" (dict "Title" .Title) }}" itemprop="name">{{ partial "PrepareHTML" .Title }}</a></h2>
+    <h2 class="volume-title"><a href="{{ .Permalink }}" title="{{ i18n "commons.more_aria" (dict "Title" .Title) }}" itemprop="name">{{ partial "PrepareHTML" .Title }}</a></h2>
   </hgroup>
   <div class="media">
     {{- if .Params.image -}}
diff --git a/layouts/persons/single.html b/layouts/persons/single.html
index becf9384a25780d7e81763172a83e39c76b630fb..a7e24cb19d79641af29453ed213cd1ab7ee503a3 100644
--- a/layouts/persons/single.html
+++ b/layouts/persons/single.html
@@ -28,12 +28,18 @@
     <div itemscope itemtype="https://schema.org/Person" class="container">
       <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
       <meta itemprop="url" content="{{ .Permalink }}">
-      {{- if .Params.image -}}
-        {{- $image := partial "GetMedia" .Params.image -}}
-        {{- if $image -}}
-          <meta itemprop="image" content="{{ $image.url }}">
+      {{ with .Params.image }}
+        {{ $image_id := "" }}
+        {{/*  LEGACY : à retirer une fois que le format de donnée des images des personnes sera homogène aux autres images  */}}
+        {{ if eq (printf "%T" .) "string" }}
+          {{ $image_id = . }}
+        {{ else }}
+          {{ $image_id = index . "id" }}
+        {{ end }}
+        {{- with partial "GetMedia" $image_id -}}
+          <meta itemprop="image" content="{{ .url }}">
         {{- end -}}
-      {{- end -}}
+      {{ end }}
 
       <div class="informations">
         <div>
diff --git a/layouts/posts/single.html b/layouts/posts/single.html
index 5523950f11e3c1ff4e8a53d5aa63400e7ccabc66..d37649dfa59ca5c2ea16fd6cdcda0d4f0eaa11a0 100644
--- a/layouts/posts/single.html
+++ b/layouts/posts/single.html
@@ -6,7 +6,6 @@
     <meta itemprop="url" content="{{ .Permalink }}">
     {{ with .Date }}<meta itemprop="datePublished" content="{{ .Format "2006-01-02T15:04" }}">{{ end }}
     {{ with .Params.summary }}<meta itemprop="abstract" content="{{ . | safeHTML }}">{{ end }}
-    {{ with .Summary }}<meta itemprop="description" content="{{ . | safeHTML }}">{{ end }}
 
     {{ partial "posts/sidebar.html" . }}
 
diff --git a/layouts/programs/list.html b/layouts/programs/list.html
index 33406b15b666bdd13c88d3ec708f91cfe16c5185..0b2260601999fdd12a1dc2e1eaa755c58db4f7dc 100644
--- a/layouts/programs/list.html
+++ b/layouts/programs/list.html
@@ -2,7 +2,7 @@
   {{ if eq .File.Path "programs/_index.html" }}
     {{ partial "programs/hero.html" . }}
     {{ partial "programs/list.html" . }}
-{{ else }}
+  {{ else }}
     {{ partial "programs/hero-single.html" . }}
     {{ partial "programs/single.html" . }}
   {{ end }}
diff --git a/layouts/projects/list.html b/layouts/projects/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..ea5fdbb7608debb02ba021ca82920def0e663f65
--- /dev/null
+++ b/layouts/projects/list.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  {{ partial "projects/hero-list.html" . }}
+  <div class="document-content">
+    {{ partial "commons/list-content.html" . }}
+  
+    {{ partial "projects/summary.html" (dict
+      "with_container" true
+      "context" .
+    ) }}
+    
+    {{ partial "contents/list.html" . }}
+    
+    <div class="container">
+      {{ partial "projects/projects.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
+  </div>
+{{ end }}
diff --git a/layouts/projects/single.html b/layouts/projects/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..05484c8bc2884bbf5837c6373ecf5da2df02eecf
--- /dev/null
+++ b/layouts/projects/single.html
@@ -0,0 +1,24 @@
+{{ define "main" }}
+  {{ partial "projects/hero-single.html" . }}
+
+  <div class="document-content" itemscope itemtype="https://schema.org/CreativeWork">
+    <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
+    <meta itemprop="url" content="{{ .Permalink }}">
+    {{ with .Params.summary }}<meta itemprop="description" content="{{ . | safeHTML }}">{{ end }}
+
+    {{ partial "projects/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
+
+    {{ partial "contents/list.html" . }}
+
+    {{ partial "commons/siblings-navigation.html" (dict
+      "context" .
+      "previous_label" (i18n "projects.previous")
+      "next_label" (i18n "projects.next")
+    ) }}
+
+    {{ partial "hooks/before-document-content-end.html" . }}
+  </div>
+{{ end }}
diff --git a/layouts/projects_categories/list.html b/layouts/projects_categories/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..dc40e99731e7e266dd5cfe56cd0fd6eff130e318
--- /dev/null
+++ b/layouts/projects_categories/list.html
@@ -0,0 +1,10 @@
+{{ define "main" }}
+  {{ partial "categories/hero-list.html" . }}
+
+  <div class="document-content">
+    <div class="container">
+      {{ partial "categories/categories.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
+  </div>
+{{ end }}
diff --git a/layouts/projects_categories/term.html b/layouts/projects_categories/term.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e262d032938c69869a8891ace1f2de7428d7b90
--- /dev/null
+++ b/layouts/projects_categories/term.html
@@ -0,0 +1,22 @@
+{{ define "main" }}
+  {{ partial "categories/hero-term.html" . }}
+
+  <div class="document-content">
+    {{ partial "toc/container.html" (dict
+      "toc" "toc/default.html"
+      "context" .
+    ) }}
+
+    {{ partial "categories/summary.html" (dict
+      "context" .
+      "block_wrapped" true
+    ) }}
+
+    {{ partial "contents/list.html" . }}
+
+    <div class="container">
+      {{ partial "projects/projects.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
+  </div>
+{{ end }}
diff --git a/layouts/publications/list.html b/layouts/publications/list.html
index 9b98bdcb4b353738b1053617320cdc8058eaa417..376f8b10648609875b1f49aa34160ea8c756094c 100644
--- a/layouts/publications/list.html
+++ b/layouts/publications/list.html
@@ -10,5 +10,4 @@
       {{ partial "commons/pagination.html" . }}
     </div>
   </div>
-
 {{ end }}
diff --git a/static/assets/fonts/fonticons/IconFont.ttf b/static/assets/fonts/fonticons/IconFont.ttf
index 5b68528dc52998f7fe5923168888f752dd6d6f06..9db0243c3b7db2c95cf174f6c6122aa31f156b21 100644
Binary files a/static/assets/fonts/fonticons/IconFont.ttf and b/static/assets/fonts/fonticons/IconFont.ttf differ
diff --git a/static/assets/fonts/fonticons/IconFont.woff b/static/assets/fonts/fonticons/IconFont.woff
index a48b0132c5172bf646c83091147401fc3b92fe53..3803db73637ce37756dc81f5b5c3bdcc5b7d4685 100644
Binary files a/static/assets/fonts/fonticons/IconFont.woff and b/static/assets/fonts/fonticons/IconFont.woff differ
diff --git a/static/assets/fonts/fonticons/IconFont.woff2 b/static/assets/fonts/fonticons/IconFont.woff2
index 689a16424211c4d4dc1113b0e85bd46e3f600d3f..95f9347c48c39145ff8c6ba9efc9e5741f41b741 100644
Binary files a/static/assets/fonts/fonticons/IconFont.woff2 and b/static/assets/fonts/fonticons/IconFont.woff2 differ
diff --git a/static/assets/images/certifications/qualiopi.svg b/static/assets/images/certifications/qualiopi.svg
new file mode 100644
index 0000000000000000000000000000000000000000..890e4989a911e80310541cbfdf7a17a174037c2c
--- /dev/null
+++ b/static/assets/images/certifications/qualiopi.svg
@@ -0,0 +1,57 @@
+<svg width="274" height="140" viewBox="0 0 274 140" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="274" height="140" fill="white"/>
+<path d="M26.0714 71.9621H27.6344V72.9994C28.4818 72.0941 29.5741 71.6037 30.93 71.6037C33.8301 71.6037 35.6944 73.9047 35.6944 76.6017C35.6944 79.2988 33.8489 81.5998 30.93 81.5998C29.5929 81.5998 28.4818 81.1094 27.6344 80.2041V85.7491H26.0714V71.9621ZM30.7417 80.1287C32.7002 80.1287 34.0561 78.5632 34.0561 76.6017C34.0561 74.6403 32.719 73.0748 30.7417 73.0748C29.4611 73.0748 28.35 73.6972 27.6344 74.8477V78.3746C28.35 79.5063 29.4611 80.1475 30.7417 80.1475V80.1287Z" fill="#332878"/>
+<path d="M39.9881 71.9621V73.1126C40.666 72.3016 41.5134 71.7735 42.681 71.7735C42.9823 71.7735 43.246 71.8112 43.4719 71.8866V73.5086C43.1895 73.4332 42.9258 73.3766 42.5492 73.3766C41.3439 73.3766 40.553 73.999 39.9692 74.942V81.2226H38.4062V71.9621H39.9881Z" fill="#332878"/>
+<path d="M54.7145 76.5829C54.7145 79.2799 52.6807 81.5809 49.7052 81.5809C46.7298 81.5809 44.696 79.2799 44.696 76.5829C44.696 73.8858 46.711 71.5849 49.7052 71.5849C52.6995 71.5849 54.7145 73.8858 54.7145 76.5829ZM53.0573 76.5829C53.0573 74.6591 51.6449 73.056 49.7241 73.056C47.8032 73.056 46.3344 74.6591 46.3344 76.5829C46.3344 78.5066 47.7467 80.1098 49.7241 80.1098C51.7014 80.1098 53.0573 78.4878 53.0573 76.5829Z" fill="#332878"/>
+<path d="M64.4317 78.733L65.6746 79.6949C64.8083 80.8453 63.4713 81.5809 61.7764 81.5809C58.7068 81.5809 56.7483 79.2799 56.7483 76.5829C56.7483 73.8858 58.7068 71.5849 61.7764 71.5849C63.4524 71.5849 64.8083 72.3393 65.6746 73.4709L64.4317 74.4328C63.8667 73.6029 62.9251 73.056 61.7952 73.056C59.8179 73.056 58.4055 74.6214 58.4055 76.5829C58.4055 78.5444 59.8179 80.1098 61.8141 80.1098C62.944 80.1098 63.8667 79.5628 64.4317 78.733Z" fill="#332878"/>
+<path d="M71.9456 81.5998C68.8195 81.5998 66.8986 79.2988 66.8986 76.6017C66.8986 73.9047 68.7065 71.6037 71.5689 71.6037C74.0924 71.6037 75.7119 73.32 75.7119 75.6399C75.7119 75.9982 75.6554 76.3754 75.5989 76.6395H68.5182V76.6772C68.5182 78.7141 69.9117 80.2041 71.9832 80.2041C73.1508 80.2041 74.1489 79.6571 74.7515 78.8273L75.9002 79.7326C75.034 80.8831 73.6592 81.6186 71.9267 81.6186L71.9456 81.5998ZM68.6312 75.3758H74.13C74.0735 74.0367 73.0943 72.924 71.5689 72.924C70.0435 72.924 69.0078 73.7727 68.6312 75.3758Z" fill="#332878"/>
+<path d="M78.612 78.997C79.2523 79.808 80.0244 80.2795 80.966 80.2795C82.0017 80.2795 82.5855 79.6571 82.5855 78.8461C82.5855 76.7526 78.0471 77.5259 78.0471 74.1876C78.0471 72.6976 79.2711 71.5849 81.0225 71.5849C82.3784 71.5849 83.5271 72.2073 84.1674 73.1126L83.0751 74.0556C82.5667 73.32 81.8887 72.9051 81.0413 72.9051C80.0809 72.9051 79.5724 73.4143 79.5724 74.1688C79.5724 76.2811 84.1109 75.5456 84.1109 78.7896C84.1109 80.5247 82.7173 81.5998 80.9848 81.5998C79.5159 81.5998 78.3672 81.0151 77.5198 79.9589L78.6308 78.997H78.612Z" fill="#332878"/>
+<path d="M86.898 78.997C87.5383 79.808 88.3104 80.2795 89.2519 80.2795C90.2877 80.2795 90.8715 79.6571 90.8715 78.8461C90.8715 76.7526 86.333 77.5259 86.333 74.1876C86.333 72.6976 87.5571 71.5849 89.3084 71.5849C90.6643 71.5849 91.8131 72.2073 92.4533 73.1126L91.3611 74.0556C90.8526 73.32 90.1747 72.9051 89.3273 72.9051C88.3669 72.9051 87.8584 73.4143 87.8584 74.1688C87.8584 76.2811 92.3969 75.5456 92.3969 78.7896C92.3969 80.5247 91.0033 81.5998 89.2708 81.5998C87.8019 81.5998 86.6532 81.0151 85.8057 79.9589L86.9168 78.997H86.898Z" fill="#332878"/>
+<path d="M101.568 71.9621H103.15V77.2053C103.15 79.9778 101.549 81.5998 99.0445 81.5998C96.5398 81.5998 94.958 79.9778 94.958 77.2053V71.9621H96.521V77.2619C96.521 79.0913 97.5003 80.1287 99.0821 80.1287C100.664 80.1287 101.606 79.0725 101.606 77.2619V71.9621H101.568Z" fill="#332878"/>
+<path d="M106.54 78.997C107.18 79.808 107.952 80.2795 108.893 80.2795C109.929 80.2795 110.513 79.6571 110.513 78.8461C110.513 76.7526 105.975 77.5259 105.975 74.1876C105.975 72.6976 107.199 71.5849 108.95 71.5849C110.306 71.5849 111.455 72.2073 112.095 73.1126L111.003 74.0556C110.494 73.32 109.816 72.9051 108.969 72.9051C108.008 72.9051 107.5 73.4143 107.5 74.1688C107.5 76.2811 112.038 75.5456 112.038 78.7896C112.038 80.5247 110.645 81.5998 108.912 81.5998C107.443 81.5998 106.295 81.0151 105.447 79.9589L106.558 78.997H106.54Z" fill="#332878"/>
+<path d="M126.859 78.733L128.102 79.6949C127.236 80.8453 125.899 81.5809 124.204 81.5809C121.134 81.5809 119.176 79.2799 119.176 76.5829C119.176 73.8858 121.134 71.5849 124.204 71.5849C125.88 71.5849 127.236 72.3393 128.102 73.4709L126.859 74.4328C126.294 73.6029 125.352 73.056 124.223 73.056C122.245 73.056 120.833 74.6214 120.833 76.5829C120.833 78.5444 122.245 80.1098 124.241 80.1098C125.371 80.1098 126.294 79.5628 126.859 78.733Z" fill="#332878"/>
+<path d="M134.373 81.5998C131.247 81.5998 129.326 79.2988 129.326 76.6017C129.326 73.9047 131.134 71.6037 133.996 71.6037C136.52 71.6037 138.139 73.32 138.139 75.6399C138.139 75.9982 138.083 76.3754 138.026 76.6395H130.945V76.6772C130.945 78.7141 132.339 80.2041 134.411 80.2041C135.578 80.2041 136.576 79.6571 137.179 78.8273L138.328 79.7326C137.461 80.8831 136.087 81.6186 134.354 81.6186L134.373 81.5998ZM131.058 75.3758H136.557C136.501 74.0367 135.522 72.924 133.996 72.924C132.471 72.924 131.435 73.7727 131.058 75.3758Z" fill="#332878"/>
+<path d="M142.565 71.9621V73.1126C143.243 72.3016 144.09 71.7735 145.258 71.7735C145.559 71.7735 145.823 71.8112 146.049 71.8866V73.5086C145.766 73.4332 145.502 73.3766 145.126 73.3766C143.921 73.3766 143.13 73.999 142.546 74.942V81.2226H140.983V71.9621H142.565Z" fill="#332878"/>
+<path d="M149.476 73.3955H147.725V71.9621H149.476V69.6423H151.058V71.9621H154.278V73.3955H151.058V78.1294C151.058 79.5817 151.792 79.9778 152.903 79.9778C153.506 79.9778 153.939 79.9023 154.278 79.7514V81.1471C153.845 81.3357 153.336 81.4112 152.677 81.4112C150.625 81.4112 149.457 80.3738 149.457 78.1106V73.3766L149.476 73.3955Z" fill="#332878"/>
+<path d="M156.557 68.4352C156.557 67.8505 157.046 67.3413 157.668 67.3413C158.289 67.3413 158.76 67.8316 158.76 68.4352C158.76 69.0387 158.289 69.5479 157.668 69.5479C157.046 69.5479 156.557 69.0576 156.557 68.4352ZM156.877 71.9432H158.44V81.2037H156.877V71.9432Z" fill="#332878"/>
+<path d="M162.489 71.9621V70.8305C162.489 68.8501 163.788 67.4544 165.784 67.4544C166.82 67.4544 167.611 67.8128 168.176 68.3597L167.197 69.4914C166.858 69.1142 166.443 68.869 165.803 68.869C164.786 68.869 164.071 69.6045 164.071 70.7927V71.9621H167.291V73.3955H164.071V81.2226H162.489V73.3955H160.737V71.9621H162.489Z" fill="#332878"/>
+<path d="M169.099 68.4352C169.099 67.8505 169.588 67.3413 170.21 67.3413C170.831 67.3413 171.302 67.8316 171.302 68.4352C171.302 69.0387 170.831 69.5479 170.21 69.5479C169.588 69.5479 169.099 69.0576 169.099 68.4352ZM169.419 71.9432H170.982V81.2037H169.419V71.9432Z" fill="#332878"/>
+<path d="M178.759 81.5998C175.633 81.5998 173.712 79.2988 173.712 76.6017C173.712 73.9047 175.52 71.6037 178.383 71.6037C180.906 71.6037 182.526 73.32 182.526 75.6399C182.526 75.9982 182.469 76.3754 182.413 76.6395H175.332V76.6772C175.332 78.7141 176.725 80.2041 178.797 80.2041C179.965 80.2041 180.963 79.6571 181.565 78.8273L182.714 79.7326C181.848 80.8831 180.473 81.6186 178.74 81.6186L178.759 81.5998ZM175.445 75.3758H180.944C180.887 74.0367 179.908 72.924 178.383 72.924C176.857 72.924 175.803 73.7727 175.445 75.3758ZM177.667 70.491L179.569 67.4356H181.339L179.192 70.491H177.667Z" fill="#332878"/>
+<path d="M192.281 53.592H220.811L192.281 82.7691V53.592Z" fill="#E10814"/>
+<path d="M192.281 53.592H220.811L192.281 24.5658V53.592Z" fill="#332878"/>
+<path d="M220.792 53.592H249.341L220.792 82.7691V53.592Z" fill="#332878"/>
+<path d="M220.792 53.592H249.341L220.792 24.5658V53.592Z" fill="#E10814"/>
+<path d="M38.8958 24.0189C40.9485 24.0189 42.8693 24.4149 44.6772 25.1882C46.485 25.9803 48.0669 27.0365 49.4416 28.3756C50.7975 29.7147 51.8709 31.2801 52.6618 33.0907C53.4528 34.9013 53.8294 36.844 53.8294 38.8809C53.8294 40.5406 53.5846 42.106 53.0761 43.5771C52.5677 45.0671 51.8897 46.4062 50.9858 47.6321C51.8521 48.462 52.53 49.4427 53.0573 50.5744C53.5658 51.6871 53.8294 52.913 53.8294 54.1956H47.4643C47.4643 53.7052 47.3513 53.2714 47.1065 52.8753C46.8617 52.4793 46.5603 52.1586 46.1837 51.9134C45.0726 52.517 43.9239 52.9696 42.6998 53.3091C41.4758 53.6486 40.214 53.8183 38.8958 53.8183C36.8432 53.8183 34.9223 53.4223 33.1333 52.649C31.3443 51.8569 29.7624 50.7818 28.4254 49.4239C27.0695 48.0659 26.0149 46.4628 25.224 44.6522C24.433 42.8416 24.0564 40.9178 24.0564 38.862C24.0564 36.8062 24.4518 34.8825 25.224 33.0719C26.0149 31.2613 27.0695 29.677 28.4254 28.3568C29.7812 27.0177 31.3443 25.9615 33.1333 25.1693C34.9223 24.3772 36.8432 24 38.8958 24V24.0189ZM30.4027 38.8997C30.4027 40.0879 30.6287 41.2007 31.0618 42.2192C31.5138 43.2376 32.1164 44.1429 32.8885 44.9162C33.6606 45.6895 34.5645 46.293 35.6003 46.7457C36.636 47.1983 37.7471 47.4058 38.8958 47.4058C40.0446 47.4058 41.1933 47.1795 42.229 46.7457C43.2648 46.293 44.1875 45.6895 44.9596 44.9162C45.7506 44.1429 46.3532 43.2565 46.8052 42.2192C47.2571 41.2007 47.4643 40.0879 47.4643 38.8997C47.4643 37.7115 47.2383 36.6365 46.8052 35.5992C46.3532 34.5618 45.7506 33.6565 44.9596 32.8833C44.1687 32.11 43.2648 31.5065 42.229 31.0538C41.1933 30.6012 40.0822 30.3937 38.8958 30.3937C37.7094 30.3937 36.636 30.62 35.6003 31.0538C34.5645 31.5065 33.6606 32.11 32.8885 32.8833C32.1164 33.6565 31.5138 34.5618 31.0618 35.5992C30.6098 36.6365 30.4027 37.7493 30.4027 38.8997Z" fill="#332878"/>
+<path d="M67.4071 54.3464C65.9006 54.3464 64.4882 54.0635 63.1888 53.4977C61.8894 52.9319 60.7783 52.1398 59.8556 51.1213C58.9328 50.1028 58.1984 48.9146 57.6711 47.519C57.1438 46.1233 56.8801 44.6145 56.8801 42.9547V31.4876H62.8686V42.9547C62.8686 43.6337 62.9628 44.2938 63.1323 44.9351C63.3018 45.5763 63.5843 46.161 63.9609 46.6514C64.3375 47.1606 64.8083 47.5567 65.3733 47.8773C65.9382 48.1791 66.6162 48.3488 67.3883 48.3488C68.1604 48.3488 68.8383 48.1979 69.4974 47.915C70.1565 47.6321 70.7027 47.2361 71.1923 46.7645C71.6819 46.293 72.0585 45.7084 72.341 45.0482C72.6235 44.3881 72.7742 43.6903 72.7742 42.9547V31.4876H78.7627V54.3087H72.7742V52.9696C71.9832 53.4034 71.1358 53.7429 70.2319 53.9881C69.3091 54.2333 68.3675 54.3464 67.3883 54.3464H67.4071Z" fill="#332878"/>
+<path d="M97.7262 31.8837H103.677V54.0258H97.7262V52.9696C96.0502 53.8938 94.2612 54.3464 92.3404 54.3464C90.7773 54.3464 89.3084 54.0447 87.9337 53.46C86.559 52.8565 85.3538 52.0455 84.318 51.0081C83.2823 49.9708 82.4537 48.7637 81.8699 47.3869C81.2673 46.0101 80.9848 44.539 80.9848 42.9736C80.9848 41.4082 81.2861 39.9371 81.8699 38.5603C82.4725 37.1834 83.2823 35.9764 84.318 34.9579C85.3538 33.9394 86.559 33.1285 87.9337 32.5249C89.3084 31.9214 90.7773 31.6385 92.3404 31.6385C93.3196 31.6385 94.2424 31.7516 95.1463 31.978C96.0502 32.2043 96.9165 32.5438 97.7262 32.9776V31.8837ZM92.3404 48.3488C93.0748 48.3488 93.7716 48.1979 94.4307 47.915C95.0898 47.6321 95.6736 47.2361 96.1444 46.7645C96.634 46.2742 97.0106 45.7084 97.2931 45.0671C97.5756 44.4258 97.7262 43.7092 97.7262 42.9547C97.7262 42.2003 97.5756 41.5213 97.2931 40.8612C97.0106 40.2011 96.634 39.6164 96.1444 39.1449C95.6547 38.6546 95.0898 38.2773 94.4307 37.9944C93.7716 37.7115 93.0748 37.5607 92.3404 37.5607C91.6059 37.5607 90.8903 37.7115 90.2312 37.9944C89.5721 38.2773 89.0071 38.6546 88.5363 39.1449C88.0467 39.6353 87.6701 40.2011 87.3876 40.8612C87.1051 41.5213 86.9545 42.2192 86.9545 42.9547C86.9545 43.6903 87.1051 44.407 87.3876 45.0671C87.6701 45.7084 88.0467 46.2742 88.5363 46.7645C89.026 47.2549 89.5909 47.6321 90.2312 47.915C90.8715 48.1979 91.5871 48.3488 92.3404 48.3488Z" fill="#332878"/>
+<path d="M112.697 24.8299V53.8561H106.577V24.8299H112.697Z" fill="#332878"/>
+<path d="M119.345 24.4715C120.287 24.4715 121.078 24.811 121.737 25.4711C122.377 26.1312 122.716 26.9422 122.716 27.8852C122.716 28.8283 122.396 29.6204 121.737 30.2805C121.096 30.9218 120.287 31.2613 119.345 31.2613C118.404 31.2613 117.594 30.9406 116.935 30.2805C116.276 29.6393 115.937 28.8283 115.937 27.8852C115.937 26.9422 116.276 26.1312 116.935 25.4711C117.594 24.811 118.404 24.4715 119.345 24.4715ZM122.339 32.0534V53.8749H116.219V32.0534H122.339Z" fill="#332878"/>
+<path d="M136.84 30.9972C138.459 30.9972 139.985 31.299 141.397 31.9025C142.809 32.5061 144.052 33.3359 145.107 34.3921C146.162 35.4483 146.99 36.6742 147.593 38.1076C148.195 39.5221 148.497 41.0498 148.497 42.6718C148.497 44.2938 148.195 45.8215 147.593 47.2361C146.99 48.6506 146.162 49.8954 145.107 50.9516C144.052 52.0077 142.828 52.8376 141.397 53.4411C139.966 54.0447 138.459 54.3464 136.84 54.3464C135.22 54.3464 133.695 54.0447 132.283 53.4411C130.87 52.8376 129.627 52.0077 128.573 50.9516C127.518 49.8954 126.689 48.6694 126.087 47.2361C125.484 45.8215 125.183 44.2938 125.183 42.6718C125.183 41.0498 125.484 39.5221 126.087 38.1076C126.689 36.6931 127.518 35.4483 128.573 34.3921C129.627 33.3359 130.851 32.5061 132.283 31.9025C133.695 31.299 135.22 30.9972 136.84 30.9972ZM136.84 48.3865C137.631 48.3865 138.365 48.2357 139.062 47.9339C139.759 47.6321 140.38 47.2361 140.889 46.708C141.397 46.1987 141.811 45.5952 142.094 44.8785C142.395 44.1807 142.546 43.4262 142.546 42.653C142.546 41.8797 142.395 41.1253 142.094 40.4274C141.793 39.7296 141.397 39.1072 140.889 38.598C140.38 38.0887 139.759 37.6738 139.062 37.3909C138.365 37.0891 137.612 36.9383 136.84 36.9383C136.068 36.9383 135.314 37.0891 134.618 37.3909C133.921 37.6927 133.299 38.0887 132.791 38.598C132.283 39.1072 131.868 39.7107 131.567 40.4274C131.266 41.1253 131.115 41.8797 131.115 42.653C131.115 43.4262 131.266 44.1807 131.567 44.8785C131.868 45.5763 132.264 46.1987 132.791 46.708C133.299 47.2172 133.902 47.6321 134.618 47.9339C135.314 48.2357 136.068 48.3865 136.84 48.3865Z" fill="#332878"/>
+<path d="M163.28 54.3087C162.3 54.3087 161.359 54.1956 160.436 53.9692C159.513 53.7429 158.666 53.4034 157.894 52.9696V60.9099H151.905V31.8837H157.894V32.9398C159.513 32.0157 161.302 31.563 163.28 31.563C164.843 31.563 166.312 31.8648 167.686 32.4495C169.061 33.0341 170.266 33.864 171.283 34.9013C172.3 35.9387 173.11 37.1457 173.712 38.5225C174.315 39.8993 174.598 41.3705 174.598 42.9359C174.598 44.5013 174.296 45.9724 173.712 47.3492C173.11 48.726 172.3 49.9331 171.283 50.9516C170.266 51.97 169.061 52.781 167.686 53.3846C166.312 53.9692 164.843 54.271 163.28 54.271V54.3087ZM163.28 37.5607C162.526 37.5607 161.83 37.7115 161.17 37.9944C160.53 38.2773 159.946 38.6546 159.476 39.1449C158.986 39.6353 158.609 40.2011 158.327 40.8424C158.044 41.4836 157.894 42.2003 157.894 42.9547C157.894 43.7092 158.044 44.3881 158.327 45.0482C158.609 45.7084 158.986 46.293 159.476 46.7645C159.965 47.2549 160.53 47.6321 161.17 47.915C161.811 48.1979 162.526 48.3488 163.28 48.3488C164.033 48.3488 164.711 48.1979 165.37 47.915C166.029 47.6321 166.613 47.2361 167.084 46.7645C167.573 46.2742 167.95 45.7084 168.232 45.0482C168.515 44.3881 168.665 43.6903 168.665 42.9547C168.665 42.2192 168.515 41.5025 168.232 40.8424C167.95 40.2011 167.573 39.6164 167.084 39.1449C166.594 38.6546 166.029 38.2773 165.37 37.9944C164.711 37.7115 164.014 37.5607 163.28 37.5607Z" fill="#332878"/>
+<path d="M180.247 24.4715C181.189 24.4715 181.98 24.811 182.639 25.4711C183.279 26.1312 183.618 26.9422 183.618 27.8852C183.618 28.8283 183.298 29.6204 182.639 30.2805C181.998 30.9218 181.189 31.2613 180.247 31.2613C179.305 31.2613 178.496 30.9406 177.837 30.2805C177.177 29.6393 176.838 28.8283 176.838 27.8852C176.838 26.9422 177.177 26.1312 177.837 25.4711C178.496 24.811 179.305 24.4715 180.247 24.4715ZM183.241 32.0534V53.8749H177.121V32.0534H183.241Z" fill="#332878"/>
+<path d="M36.5985 115.002C36.7114 114.889 36.8433 114.757 36.9563 114.625C37.1822 114.379 37.3894 114.134 37.653 113.908C37.7284 113.832 37.8037 113.776 37.879 113.719C37.8978 113.7 37.8978 113.663 37.9167 113.644C37.8225 113.682 37.7472 113.776 37.653 113.814C37.653 113.814 37.6154 113.795 37.653 113.776C37.7284 113.719 37.8037 113.663 37.879 113.606C37.879 113.606 37.8602 113.606 37.8602 113.568C37.5965 113.531 37.3894 113.719 37.2011 113.889C37.1634 113.908 37.1257 113.87 37.0881 113.87C36.7679 113.983 36.542 114.247 36.2406 114.379V114.342C36.1088 114.379 35.9958 114.455 35.864 114.493C35.6757 114.53 35.5062 114.511 35.3367 114.511C35.0919 114.53 34.8283 114.587 34.5835 114.643H34.5646C34.4328 114.681 34.301 114.738 34.188 114.794C34.188 114.794 34.188 114.813 34.1503 114.832C34.0938 114.87 34.0562 114.926 33.9997 114.945C33.8678 115.021 33.7737 115.115 33.6607 115.209C33.6607 115.209 33.6419 115.209 33.623 115.209C33.51 115.322 33.3971 115.417 33.2841 115.53C33.2841 115.53 33.2464 115.53 33.2087 115.53C33.2087 115.53 33.2087 115.53 33.2087 115.511C33.2087 115.473 33.2464 115.454 33.2652 115.417C33.2841 115.379 33.3029 115.341 33.3217 115.322C33.3406 115.285 33.3782 115.228 33.4159 115.19V115.172C33.4159 115.172 33.3971 115.172 33.3782 115.172C33.4912 115.077 33.6042 114.983 33.736 114.908C33.736 114.908 33.6984 114.908 33.7172 114.889C33.7172 114.87 33.736 114.851 33.7549 114.832C33.7549 114.832 33.6795 114.851 33.6607 114.889C33.6042 114.926 33.5665 115.021 33.4912 115.021C33.4912 115.021 33.4912 115.021 33.4535 115.021C33.4535 115.021 33.4535 115.021 33.4347 115.021C33.4347 115.021 33.4347 115.021 33.4347 115.002C33.4347 115.002 33.4347 115.002 33.4347 114.983C33.4347 114.983 33.4347 114.983 33.4347 114.964C33.4347 114.964 33.4347 114.926 33.4535 114.926C33.4535 114.926 33.4535 114.926 33.4535 114.908C33.4535 114.908 33.4535 114.889 33.4724 114.87V114.832C33.51 114.776 33.5665 114.738 33.6042 114.7C33.6042 114.7 33.7737 114.606 33.849 114.568C33.849 114.568 33.8678 114.549 33.8867 114.549C33.7737 114.587 33.6607 114.643 33.5477 114.719C33.5477 114.719 33.5289 114.719 33.51 114.719C33.51 114.719 33.4912 114.719 33.4535 114.719C33.4724 114.681 33.5289 114.662 33.5854 114.625C33.6042 114.625 33.623 114.625 33.623 114.643C34.2821 114.115 35.2049 114.247 35.977 113.983C36.0335 113.946 36.1088 113.908 36.1653 113.851C36.2783 113.814 36.3536 113.7 36.4855 113.644C36.6549 113.512 36.7679 113.38 36.8433 113.172C36.8433 113.154 36.8244 113.135 36.8244 113.135C36.5608 113.418 36.2406 113.663 35.9017 113.814C35.4685 114.04 34.9978 114.002 34.527 114.059C34.5458 114.021 34.5835 114.021 34.6399 114.021C34.6399 113.964 34.6776 113.946 34.7153 113.889H34.7718C34.7718 113.889 34.7718 113.851 34.8094 113.851C34.8471 113.851 34.9224 113.832 34.8848 113.832C34.8283 113.757 34.6964 113.889 34.5835 113.832C34.6211 113.795 34.6023 113.719 34.6399 113.7H34.7153L34.7529 113.606C35.0731 113.418 35.3556 113.267 35.6569 113.116C35.6004 113.116 35.5439 113.172 35.4874 113.135C35.525 113.135 35.4874 113.078 35.525 113.078C35.751 113.021 35.9393 112.889 36.1653 112.814C36.09 112.814 36.0147 112.871 35.9393 112.814C35.977 112.795 35.9958 112.757 36.0712 112.757V112.701C36.0712 112.701 36.09 112.682 36.1088 112.682C36.09 112.682 36.0712 112.663 36.0712 112.663C36.09 112.625 36.1465 112.644 36.203 112.607C36.1842 112.607 36.1465 112.607 36.1465 112.588C36.203 112.512 36.316 112.493 36.4101 112.456C36.3913 112.418 36.3348 112.456 36.3348 112.418C36.3348 112.418 36.3348 112.418 36.3725 112.418H36.3348C36.3348 112.418 36.316 112.361 36.316 112.343C36.429 112.192 36.429 112.003 36.5043 111.833C36.4855 111.833 36.4666 111.833 36.4666 111.814C36.2595 112.041 35.9205 112.135 35.6192 112.21H35.525C35.412 112.248 35.2802 112.248 35.1672 112.21C35.0919 112.173 35.0354 112.097 34.9601 112.041C34.7906 111.946 34.6211 111.852 34.4328 111.796C33.9243 111.626 33.3782 111.55 32.8321 111.569C33.0581 111.437 33.3029 111.437 33.5665 111.362C33.9243 111.267 34.2445 111.135 34.6211 111.154C34.5646 111.135 34.4705 111.154 34.414 111.154C34.1315 111.135 33.8302 111.211 33.5289 111.286C33.3217 111.324 33.1334 111.418 32.9263 111.456C32.7944 111.494 32.7379 111.626 32.5873 111.607V111.55C32.7944 111.305 33.0392 111.06 33.3782 111.022C33.7549 110.966 34.1127 111.022 34.4705 111.06C34.7341 111.079 34.9978 111.135 35.2614 111.211C35.3744 111.211 35.3932 111.381 35.4685 111.399C35.6004 111.437 35.7134 111.399 35.8452 111.475C35.8452 111.437 35.8263 111.399 35.8452 111.343C35.9205 111.267 36.0335 111.343 36.1088 111.324C36.2783 111.211 35.9582 111.041 35.8828 110.89C35.8828 110.871 35.9017 110.853 35.9017 110.853C36.0712 111.003 36.1842 111.173 36.3913 111.267C36.4855 111.305 36.7491 111.362 36.7114 111.249C36.6173 111.022 36.3913 110.834 36.2406 110.626V110.551C36.2406 110.551 36.203 110.532 36.1842 110.513V110.438C36.1842 110.438 36.1277 110.306 36.0712 110.249C36.0147 110.136 36.0523 110.004 36.0147 109.872C35.977 109.74 35.9582 109.645 35.9393 109.513C35.8828 109.155 35.7887 108.853 35.751 108.514C35.7134 108.118 35.977 107.797 36.1653 107.458C36.316 107.212 36.4855 106.967 36.7491 106.798C36.8056 106.552 36.9751 106.345 37.1446 106.137C37.3141 105.93 37.5965 105.817 37.7849 105.722C38.0673 105.59 38.331 105.515 38.331 105.515H24V116.53H34.188C34.5835 116.247 34.9789 116.115 35.525 115.832C35.7887 115.7 36.3913 115.436 36.5796 115.228M33.3782 113.738C33.3782 113.738 33.2464 113.757 33.2841 113.719C33.2841 113.606 33.4535 113.606 33.5289 113.568C33.5665 113.55 33.623 113.512 33.6795 113.531C33.7172 113.587 33.7737 113.568 33.8302 113.606C33.6984 113.738 33.5477 113.663 33.3971 113.738M30.2145 113.286C30.2145 113.286 30.1957 113.267 30.1957 113.248C30.4593 112.889 30.6664 112.569 30.8548 112.192C31.1184 112.041 31.3444 111.833 31.5704 111.607C31.9282 111.23 32.3048 110.909 32.7379 110.702C32.9074 110.645 33.1146 110.664 33.2841 110.702C33.2276 110.777 33.1146 110.758 33.0392 110.834C33.0204 110.834 33.0016 110.834 32.9828 110.815C33.0016 110.796 33.0016 110.777 33.0016 110.758C32.7944 110.985 32.4931 111.098 32.3425 111.362C32.2106 111.569 32.1353 111.833 31.8717 111.909C31.7964 111.928 31.8905 111.852 31.8717 111.871C31.2314 112.267 30.7606 112.739 30.271 113.304M32.0035 111.928C32.0035 111.928 31.9658 111.965 31.947 112.022C31.9282 112.06 31.9093 112.078 31.8717 112.097C31.8528 112.097 31.834 112.097 31.834 112.078C31.8528 112.003 31.9093 111.909 32.0035 111.89C32.0223 111.89 32.0223 111.89 32.0223 111.928M32.9828 115.04C32.9828 115.04 32.9451 115.077 32.9263 115.096C32.9451 115.096 32.9639 115.096 32.9451 115.134C32.9074 115.172 32.8509 115.228 32.7944 115.247C32.7944 115.247 32.7944 115.247 32.7568 115.247C32.7379 115.266 32.7003 115.304 32.6814 115.322C32.6626 115.341 32.5496 115.322 32.5873 115.304C32.6438 115.247 32.6814 115.209 32.7379 115.153C32.7756 115.115 32.7944 115.096 32.8321 115.077C32.8321 115.077 32.8509 115.04 32.8698 115.04C32.8886 115.04 33.0016 115.021 32.9828 115.04ZM32.6061 114.87C32.5308 114.926 32.4555 114.983 32.3801 115.021C32.286 115.077 32.1918 115.115 32.0977 115.153C32.0977 115.153 32.0788 115.153 32.06 115.153C31.9847 115.19 31.9093 115.247 31.8528 115.304C31.8528 115.304 31.834 115.304 31.8152 115.322C31.8152 115.322 31.7964 115.341 31.7775 115.341C31.7775 115.341 31.7399 115.379 31.7399 115.398C31.7399 115.398 31.7399 115.398 31.7022 115.436C31.7022 115.436 31.6457 115.436 31.6645 115.436C31.6645 115.436 31.6457 115.436 31.6269 115.436C31.6269 115.436 31.608 115.436 31.5892 115.436C31.5704 115.454 31.5327 115.473 31.5139 115.492C31.4762 115.53 31.4197 115.568 31.4009 115.624C31.4009 115.624 31.4009 115.624 31.4009 115.643C31.4009 115.643 31.4009 115.643 31.3821 115.643C31.3821 115.643 31.3821 115.605 31.3632 115.605C31.3821 115.587 31.4009 115.549 31.4385 115.53C31.4385 115.53 31.4385 115.511 31.4574 115.492L31.495 115.454C31.5139 115.417 31.5327 115.398 31.5515 115.36C31.5515 115.36 31.5515 115.322 31.5704 115.322C31.5704 115.322 31.5704 115.304 31.5892 115.285C31.5892 115.285 31.5892 115.247 31.608 115.228C31.608 115.228 31.608 115.228 31.608 115.209C31.608 115.209 31.608 115.19 31.608 115.172C31.6269 115.134 31.6645 115.096 31.6834 115.058C31.6457 115.077 31.6269 115.115 31.608 115.134C31.5892 115.134 31.5515 115.134 31.5704 115.096C31.5892 115.096 31.608 115.058 31.608 115.058C31.6457 115.021 31.6834 114.983 31.721 114.945C31.7399 114.945 31.7587 114.908 31.7775 114.889C31.7775 114.889 31.8152 114.851 31.8152 114.832C32.0223 114.643 32.3425 114.643 32.6061 114.53C32.7191 114.493 32.8321 114.549 32.9451 114.53C33.0016 114.53 33.0769 114.53 33.1334 114.568C32.9451 114.662 32.7756 114.794 32.6061 114.889M33.0392 113.436C33.0392 113.436 33.0957 113.436 33.1146 113.399H32.9451C32.9451 113.399 32.9263 113.38 32.9263 113.361C32.8133 113.38 32.7003 113.418 32.5873 113.436C32.4366 113.474 32.3236 113.587 32.1542 113.625C31.9282 113.7 31.7399 113.889 31.495 113.983C31.4762 113.983 31.4762 113.965 31.4762 113.946C31.495 113.87 31.5892 113.87 31.6269 113.795C31.6269 113.776 31.6269 113.757 31.608 113.757C31.7775 113.531 32.0035 113.399 32.2106 113.21V113.153C32.2106 113.153 32.3801 113.021 32.4178 112.927C32.4366 112.871 32.5308 112.776 32.6249 112.739C32.6249 112.72 32.5685 112.72 32.5685 112.682C32.4931 112.682 32.399 112.72 32.3236 112.663C32.3613 112.625 32.399 112.607 32.4555 112.588C32.4555 112.588 32.4178 112.588 32.399 112.55C32.3801 112.512 32.4366 112.456 32.512 112.456C32.6061 112.437 32.7003 112.437 32.7568 112.361C32.6061 112.342 32.4366 112.399 32.3048 112.324C32.399 112.06 32.5685 111.833 32.8321 111.701C32.8509 111.701 32.8886 111.701 32.8886 111.72C32.8886 111.833 32.8321 111.909 32.7191 111.928C32.8886 111.965 33.0581 111.965 33.2276 112.06C33.2087 112.097 33.1711 112.06 33.1522 112.06C33.2652 112.116 33.3782 112.078 33.4912 112.173C33.4347 112.229 33.3594 112.173 33.3029 112.173C33.9432 112.361 34.6399 112.512 35.1672 112.927C34.7153 113.154 34.2256 113.267 33.736 113.361C33.6795 113.361 33.623 113.361 33.5665 113.342C33.5665 113.361 33.5665 113.399 33.5477 113.399C33.4724 113.399 33.3971 113.399 33.3406 113.436C33.2652 113.474 33.1334 113.493 33.0769 113.436" fill="#332878"/>
+<path d="M54.338 105.289H42.5116C42.5116 105.289 42.5305 105.289 42.6246 105.345C42.7188 105.402 42.8506 105.458 42.9259 105.496C43.0766 105.572 43.2272 105.685 43.3214 105.836C43.3591 105.892 43.4155 106.024 43.3779 106.1C43.3402 106.194 43.3214 106.364 43.2084 106.42C43.0766 106.477 42.9259 106.477 42.7753 106.458C42.6999 106.458 42.6058 106.439 42.5305 106.42C42.8506 106.552 43.1331 106.684 43.3402 106.986C43.3591 107.024 43.4532 107.043 43.5285 107.043C43.5474 107.043 43.5474 107.08 43.5474 107.099C43.5097 107.137 43.472 107.156 43.4909 107.231H43.5474C43.6604 107.194 43.6415 106.986 43.7733 107.043C43.8675 107.099 43.924 107.25 43.8487 107.363C43.7733 107.439 43.6792 107.514 43.6039 107.571C43.585 107.609 43.585 107.684 43.6039 107.722C43.6604 107.797 43.6792 107.891 43.7169 107.967C43.7734 108.118 43.7922 108.288 43.8675 108.42C43.9428 108.74 44.037 109.042 44.0182 109.363C44.0182 109.532 43.9428 109.664 43.9993 109.834C44.037 110.004 44.15 110.117 44.2253 110.268C44.3006 110.4 44.3948 110.475 44.4513 110.607C44.5831 110.815 44.8091 111.022 44.6961 111.267C44.6396 111.418 44.4136 111.381 44.263 111.475C44.1312 111.588 44.2441 111.739 44.3006 111.852C44.4136 112.041 44.1688 112.173 44.037 112.229C44.0747 112.286 44.1688 112.267 44.1877 112.305C44.2065 112.399 44.3195 112.475 44.2441 112.569C44.1688 112.701 43.9052 112.757 44.037 112.946C44.1123 113.097 44.0747 113.248 44.0182 113.399C43.9617 113.587 43.7922 113.663 43.6415 113.719C43.5097 113.757 43.3779 113.757 43.2461 113.738C43.2084 113.719 43.1707 113.7 43.1142 113.7C42.7564 113.663 42.3986 113.55 42.0597 113.55C41.9467 113.568 41.8525 113.587 41.7584 113.625C41.6642 113.7 41.5889 113.776 41.5135 113.851C41.5135 113.851 41.4759 113.889 41.4759 113.908C41.4759 113.908 41.457 113.927 41.457 113.946C41.457 113.946 41.457 113.946 41.4382 113.964C41.3817 114.04 41.3252 114.115 41.2687 114.21C41.2687 114.21 41.2687 114.21 41.2687 114.247C41.1934 114.379 41.1557 114.493 41.1181 114.625C40.9863 115.096 41.0427 115.511 41.1369 115.605C41.1746 115.624 41.8148 115.832 42.2856 116.039C42.4928 116.133 42.6434 116.209 42.7753 116.284H54.3945V105.27L54.338 105.289Z" fill="#E10814"/>
+<path d="M43.2084 109.306C43.2084 109.306 43.4155 109.325 43.4155 109.363C43.3779 109.532 43.1331 109.57 43.0012 109.74H42.9448C42.9448 109.74 42.9071 109.891 42.8318 109.891C42.7753 109.872 42.6999 109.891 42.6434 109.891C42.7188 109.966 42.8318 110.042 42.9448 110.023C42.9636 110.023 43.0012 110.06 43.0012 110.098C43.0012 110.098 43.0201 110.098 43.0389 110.079C43.0577 110.079 43.0766 110.079 43.0766 110.098V110.174C43.0766 110.174 42.9071 110.211 42.8318 110.23C43.0013 110.268 43.1707 110.268 43.3026 110.23C43.4344 110.192 43.3026 109.985 43.3779 109.872C43.3402 109.872 43.3779 109.815 43.3402 109.815C43.3779 109.777 43.4155 109.702 43.472 109.683C43.5097 109.683 43.585 109.664 43.6039 109.627C43.6039 109.589 43.5285 109.57 43.5474 109.532C43.6792 109.457 43.7734 109.325 43.7357 109.193C43.7169 109.136 43.5474 109.136 43.4532 109.08C43.3402 109.042 43.2272 109.08 43.0954 109.099C43.0013 109.099 42.8883 109.155 42.7941 109.174C42.6434 109.212 42.5305 109.306 42.3986 109.381C42.5493 109.325 42.6999 109.306 42.8506 109.249C42.9636 109.249 43.0766 109.212 43.2084 109.249" fill="#808080"/>
+<path d="M33.8301 114.907C33.8679 114.907 33.8868 114.87 33.9057 114.851C33.8679 114.87 33.849 114.888 33.8301 114.907Z" fill="#293173"/>
+<path d="M37.8609 113.549C37.8609 113.549 37.8609 113.549 37.8224 113.569C37.8224 113.569 37.8609 113.569 37.8609 113.549Z" fill="#293173"/>
+<path d="M37.8797 113.587C37.8797 113.587 37.8797 113.587 37.8412 113.606C37.8412 113.606 37.8797 113.606 37.8797 113.587Z" fill="#293173"/>
+<path d="M59.9309 105.383H63.2641C65.6557 105.383 67.1435 106.609 67.1435 108.646C67.1435 109.947 66.5032 110.947 65.3921 111.475L68.8195 116.303H66.1642L63.2641 111.89H62.1342V116.303H59.9309V105.383ZM62.1342 107.269V110.004H63.3771C64.3187 110.004 64.8648 109.513 64.8648 108.608C64.8648 107.778 64.3187 107.269 63.3771 107.269H62.1342Z" fill="black"/>
+<path d="M70.3449 105.383H76.6912V107.269H72.5482V109.796H76.0697V111.682H72.5482V114.417H76.6912V116.303H70.3449V105.383ZM72.4917 104.44L74.243 102.327H76.5217L74.4878 104.44H72.4728H72.4917Z" fill="black"/>
+<path d="M79.4406 105.383H83.0375C85.4291 105.383 86.898 106.609 86.898 108.646C86.898 110.683 85.4291 111.89 83.0375 111.89H81.6439V116.303H79.4406V105.383ZM81.6439 107.269V110.004H83.1316C84.0732 110.004 84.6193 109.513 84.6193 108.608C84.6193 107.778 84.0544 107.269 83.1316 107.269H81.6439Z" fill="black"/>
+<path d="M97.5003 105.383V112.022C97.5003 114.888 95.8242 116.605 93.0748 116.605C90.3254 116.605 88.6682 114.888 88.6682 112.022V105.383H90.8715V112.21C90.8715 113.681 91.7001 114.53 93.0748 114.53C94.4495 114.53 95.2781 113.662 95.2781 112.21V105.383H97.5003Z" fill="black"/>
+<path d="M100.419 105.383H103.526C105.805 105.383 107.18 106.514 107.18 108.344C107.18 109.211 106.765 109.985 106.031 110.494C107.18 111.003 107.82 111.946 107.82 113.078C107.82 115.077 106.276 116.284 103.771 116.284H100.438V105.364L100.419 105.383ZM102.622 109.645H103.564C104.412 109.645 104.882 109.23 104.882 108.438C104.882 107.703 104.393 107.25 103.564 107.25H102.622V109.645ZM102.622 111.55V114.398H103.865C104.901 114.398 105.523 113.851 105.523 112.946C105.523 112.04 104.901 111.55 103.865 111.55H102.622Z" fill="black"/>
+<path d="M110.212 105.383H112.415V114.285H116.558V116.303H110.212V105.383Z" fill="black"/>
+<path d="M118.667 105.383H120.87V116.303H118.667V105.383Z" fill="black"/>
+<path d="M135.522 117.057C135.748 117.057 136.068 117.02 136.294 116.925V118.793C135.936 118.943 135.616 119 135.145 119C133.921 119 132.81 118.51 131.736 117.567L130.437 116.416C129.966 116.548 129.477 116.605 128.949 116.605C125.503 116.605 123.149 113.945 123.149 110.833C123.149 107.721 125.503 105.062 128.949 105.062C132.396 105.062 134.731 107.721 134.731 110.833C134.731 112.663 133.921 114.323 132.584 115.398L133.243 116.02C134.09 116.793 134.825 117.057 135.54 117.057H135.522ZM132.452 110.833C132.452 108.74 130.983 107.137 128.949 107.137C126.915 107.137 125.428 108.74 125.428 110.833C125.428 112.927 126.897 114.53 128.949 114.53C131.002 114.53 132.452 112.927 132.452 110.833Z" fill="black"/>
+<path d="M145.615 105.383V112.022C145.615 114.888 143.939 116.605 141.19 116.605C138.441 116.605 136.783 114.888 136.783 112.022V105.383H138.987V112.21C138.987 113.681 139.815 114.53 141.19 114.53C142.565 114.53 143.393 113.662 143.393 112.21V105.383H145.615Z" fill="black"/>
+<path d="M148.516 105.383H154.862V107.269H150.719V109.796H154.24V111.682H150.719V114.417H154.862V116.303H148.516V105.383Z" fill="black"/>
+<path d="M161.811 105.383H168.157V107.269H164.014V109.796H167.536V111.682H164.014V116.303H161.811V105.383Z" fill="black"/>
+<path d="M170.266 105.383H173.599C175.991 105.383 177.479 106.609 177.479 108.646C177.479 109.947 176.838 110.947 175.727 111.475L179.155 116.303H176.499L173.599 111.89H172.47V116.303H170.266V105.383ZM172.47 107.269V110.004H173.712C174.654 110.004 175.2 109.513 175.2 108.608C175.2 107.778 174.654 107.269 173.712 107.269H172.47Z" fill="black"/>
+<path d="M183.919 105.383H186.819L190.943 116.303H188.59L187.554 113.474H183.185L182.149 116.303H179.795L183.919 105.383ZM186.857 111.569L185.369 107.476L183.882 111.569H186.876H186.857Z" fill="black"/>
+<path d="M192.77 105.383H195.614L200.491 113.191V105.383H202.694V116.303H199.851L194.973 108.457V116.303H192.77V105.383Z" fill="black"/>
+<path d="M213.617 113.04L215.368 114.379C214.521 115.53 213.221 116.341 211.64 116.548L210.284 118.811H208.325L209.7 116.529C206.856 116.039 204.992 113.625 204.992 110.852C204.992 107.74 207.346 105.081 210.792 105.081C212.769 105.081 214.389 105.967 215.387 107.288L213.636 108.646C213.014 107.759 212.035 107.156 210.792 107.156C208.739 107.156 207.271 108.759 207.271 110.852C207.271 112.946 208.739 114.549 210.792 114.549C212.035 114.549 213.014 113.945 213.636 113.059L213.617 113.04Z" fill="black"/>
+<path d="M220.114 105.383H223.014L227.138 116.303H224.784L223.748 113.474H219.379L218.344 116.303H215.99L220.114 105.383ZM223.052 111.569L221.564 107.476L220.076 111.569H223.07H223.052Z" fill="black"/>
+<path d="M228.984 105.383H231.187V116.303H228.984V105.383Z" fill="black"/>
+<path d="M235.029 113.304C235.688 114.153 236.554 114.643 237.439 114.643C238.324 114.643 238.833 114.172 238.833 113.38C238.833 111.437 233.842 111.871 233.842 108.231C233.842 106.496 235.255 105.062 237.326 105.062C238.964 105.062 240.226 105.798 241.149 106.91L239.529 108.363C238.889 107.533 238.174 107.005 237.345 107.005C236.573 107.005 236.083 107.495 236.083 108.136C236.083 110.079 241.074 109.626 241.074 113.323C241.036 115.36 239.454 116.605 237.458 116.605C235.612 116.605 234.37 115.926 233.409 114.775L235.01 113.285L235.029 113.304Z" fill="black"/>
+<path d="M243.559 105.383H249.906V107.269H245.763V109.796H249.284V111.682H245.763V114.417H249.906V116.303H243.559V105.383Z" fill="black"/>
+</svg>
diff --git a/static/osuny-theme-version b/static/osuny-theme-version
index 67e96b63ffe71b766b18857948830f2a6e1a91dc..4a2ecbb14995b98b5fb9fac97d6d48e192188d68 100644
--- a/static/osuny-theme-version
+++ b/static/osuny-theme-version
@@ -1 +1 @@
-v5.2.1
\ No newline at end of file
+v6.0.3
\ No newline at end of file
diff --git a/static/osuny/icon.png b/static/osuny/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..8037459303346a4f81c83af38646b8db06a26dc7
Binary files /dev/null and b/static/osuny/icon.png differ